]> git.wh0rd.org Git - tt-rss.git/commitdiff
upgrade Dojo to 1.6.1
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Tue, 8 Nov 2011 16:40:44 +0000 (20:40 +0400)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Tue, 8 Nov 2011 16:40:44 +0000 (20:40 +0400)
680 files changed:
FeedTree.js
lib/dijit/Calendar.js
lib/dijit/CheckedMenuItem.js
lib/dijit/ColorPalette.js
lib/dijit/Declaration.js
lib/dijit/Dialog.js
lib/dijit/DialogUnderlay.js
lib/dijit/Editor.js
lib/dijit/InlineEditBox.js
lib/dijit/LICENSE
lib/dijit/Menu.js
lib/dijit/MenuBar.js
lib/dijit/MenuBarItem.js
lib/dijit/MenuItem.js
lib/dijit/MenuSeparator.js
lib/dijit/PopupMenuBarItem.js
lib/dijit/PopupMenuItem.js
lib/dijit/ProgressBar.js
lib/dijit/TitlePane.js
lib/dijit/Toolbar.js
lib/dijit/ToolbarSeparator.js
lib/dijit/Tooltip.js
lib/dijit/TooltipDialog.js
lib/dijit/Tree.js
lib/dijit/_Calendar.js
lib/dijit/_Contained.js
lib/dijit/_Container.js
lib/dijit/_CssStateMixin.js
lib/dijit/_DialogMixin.js
lib/dijit/_HasDropDown.js
lib/dijit/_KeyNavContainer.js
lib/dijit/_PaletteMixin.js
lib/dijit/_Templated.js
lib/dijit/_TimePicker.js
lib/dijit/_Widget.js
lib/dijit/_WidgetBase.js [new file with mode: 0644]
lib/dijit/_base.js
lib/dijit/_base/focus.js
lib/dijit/_base/manager.js
lib/dijit/_base/place.js
lib/dijit/_base/popup.js
lib/dijit/_base/scroll.js
lib/dijit/_base/sniff.js
lib/dijit/_base/typematic.js
lib/dijit/_base/wai.js
lib/dijit/_base/window.js
lib/dijit/_editor/RichText.js
lib/dijit/_editor/_Plugin.js
lib/dijit/_editor/html.js
lib/dijit/_editor/nls/ar/FontChoice.js
lib/dijit/_editor/nls/ar/LinkDialog.js
lib/dijit/_editor/nls/ar/commands.js
lib/dijit/_editor/nls/ca/FontChoice.js
lib/dijit/_editor/nls/ca/LinkDialog.js
lib/dijit/_editor/nls/ca/commands.js
lib/dijit/_editor/nls/cs/FontChoice.js
lib/dijit/_editor/nls/cs/commands.js
lib/dijit/_editor/nls/da/FontChoice.js
lib/dijit/_editor/nls/da/commands.js
lib/dijit/_editor/nls/de/FontChoice.js
lib/dijit/_editor/nls/el/FontChoice.js
lib/dijit/_editor/nls/es/FontChoice.js
lib/dijit/_editor/nls/es/LinkDialog.js
lib/dijit/_editor/nls/fi/FontChoice.js
lib/dijit/_editor/nls/fr/FontChoice.js
lib/dijit/_editor/nls/fr/LinkDialog.js
lib/dijit/_editor/nls/fr/commands.js
lib/dijit/_editor/nls/he/FontChoice.js
lib/dijit/_editor/nls/he/LinkDialog.js
lib/dijit/_editor/nls/he/commands.js
lib/dijit/_editor/nls/hu/FontChoice.js
lib/dijit/_editor/nls/it/FontChoice.js
lib/dijit/_editor/nls/it/LinkDialog.js
lib/dijit/_editor/nls/it/commands.js
lib/dijit/_editor/nls/ja/FontChoice.js
lib/dijit/_editor/nls/ja/commands.js
lib/dijit/_editor/nls/kk/FontChoice.js [new file with mode: 0644]
lib/dijit/_editor/nls/kk/LinkDialog.js [new file with mode: 0644]
lib/dijit/_editor/nls/kk/commands.js [new file with mode: 0644]
lib/dijit/_editor/nls/ko/FontChoice.js
lib/dijit/_editor/nls/ko/LinkDialog.js
lib/dijit/_editor/nls/ko/commands.js
lib/dijit/_editor/nls/nb/FontChoice.js
lib/dijit/_editor/nls/nb/commands.js
lib/dijit/_editor/nls/nl/FontChoice.js
lib/dijit/_editor/nls/pl/FontChoice.js
lib/dijit/_editor/nls/pl/commands.js
lib/dijit/_editor/nls/pt-pt/FontChoice.js
lib/dijit/_editor/nls/pt-pt/commands.js
lib/dijit/_editor/nls/pt/FontChoice.js
lib/dijit/_editor/nls/pt/commands.js
lib/dijit/_editor/nls/ro/LinkDialog.js
lib/dijit/_editor/nls/ro/commands.js
lib/dijit/_editor/nls/ru/FontChoice.js
lib/dijit/_editor/nls/ru/LinkDialog.js
lib/dijit/_editor/nls/sk/FontChoice.js
lib/dijit/_editor/nls/sl/FontChoice.js
lib/dijit/_editor/nls/sl/LinkDialog.js
lib/dijit/_editor/nls/sl/commands.js
lib/dijit/_editor/nls/sv/FontChoice.js
lib/dijit/_editor/nls/th/FontChoice.js
lib/dijit/_editor/nls/th/LinkDialog.js
lib/dijit/_editor/nls/tr/FontChoice.js
lib/dijit/_editor/nls/zh-tw/FontChoice.js
lib/dijit/_editor/nls/zh-tw/commands.js
lib/dijit/_editor/nls/zh/FontChoice.js
lib/dijit/_editor/nls/zh/LinkDialog.js
lib/dijit/_editor/plugins/AlwaysShowToolbar.js
lib/dijit/_editor/plugins/EnterKeyHandling.js
lib/dijit/_editor/plugins/FontChoice.js
lib/dijit/_editor/plugins/FullScreen.js
lib/dijit/_editor/plugins/LinkDialog.js
lib/dijit/_editor/plugins/NewPage.js
lib/dijit/_editor/plugins/Print.js
lib/dijit/_editor/plugins/TabIndent.js
lib/dijit/_editor/plugins/TextColor.js
lib/dijit/_editor/plugins/ToggleDir.js
lib/dijit/_editor/plugins/ViewSource.js
lib/dijit/_editor/range.js
lib/dijit/_editor/selection.js
lib/dijit/_tree/dndSource.js
lib/dijit/dijit-all.js
lib/dijit/dijit-all.js.uncompressed.js [deleted file]
lib/dijit/dijit.js
lib/dijit/dijit.js.uncompressed.js [deleted file]
lib/dijit/form/Button.js
lib/dijit/form/CheckBox.js
lib/dijit/form/ComboBox.js
lib/dijit/form/ComboButton.js
lib/dijit/form/CurrencyTextBox.js
lib/dijit/form/DateTextBox.js
lib/dijit/form/DropDownButton.js
lib/dijit/form/FilteringSelect.js
lib/dijit/form/Form.js
lib/dijit/form/HorizontalRule.js
lib/dijit/form/HorizontalRuleLabels.js
lib/dijit/form/HorizontalSlider.js
lib/dijit/form/MappedTextBox.js
lib/dijit/form/MultiSelect.js
lib/dijit/form/NumberSpinner.js
lib/dijit/form/NumberTextBox.js
lib/dijit/form/RadioButton.js
lib/dijit/form/RangeBoundTextBox.js
lib/dijit/form/Select.js
lib/dijit/form/SimpleTextarea.js
lib/dijit/form/Slider.js
lib/dijit/form/TextBox.js
lib/dijit/form/Textarea.js
lib/dijit/form/TimeTextBox.js
lib/dijit/form/ToggleButton.js
lib/dijit/form/ValidationTextBox.js
lib/dijit/form/VerticalRule.js
lib/dijit/form/VerticalRuleLabels.js
lib/dijit/form/VerticalSlider.js
lib/dijit/form/_DateTimeTextBox.js
lib/dijit/form/_FormMixin.js
lib/dijit/form/_FormSelectWidget.js
lib/dijit/form/_FormWidget.js
lib/dijit/form/_Spinner.js
lib/dijit/form/nls/da/validate.js
lib/dijit/form/nls/kk/ComboBox.js [new file with mode: 0644]
lib/dijit/form/nls/kk/Textarea.js [new file with mode: 0644]
lib/dijit/form/nls/kk/validate.js [new file with mode: 0644]
lib/dijit/form/nls/pl/Textarea.js
lib/dijit/form/nls/sl/ComboBox.js
lib/dijit/form/nls/sl/Textarea.js
lib/dijit/form/nls/sl/validate.js
lib/dijit/icons/commonIcons.css
lib/dijit/icons/commonIcons_rtl.css
lib/dijit/icons/editorIcons.css
lib/dijit/icons/editorIcons_rtl.css
lib/dijit/layout/AccordionContainer.js
lib/dijit/layout/AccordionPane.js
lib/dijit/layout/BorderContainer.js
lib/dijit/layout/ContentPane.js
lib/dijit/layout/LayoutContainer.js
lib/dijit/layout/LinkPane.js
lib/dijit/layout/ScrollingTabController.js
lib/dijit/layout/SplitContainer.js
lib/dijit/layout/StackContainer.js
lib/dijit/layout/StackController.js
lib/dijit/layout/TabContainer.js
lib/dijit/layout/TabController.js
lib/dijit/layout/_ContentPaneResizeMixin.js [new file with mode: 0644]
lib/dijit/layout/_LayoutWidget.js
lib/dijit/layout/_TabContainerBase.js
lib/dijit/lib/main.js [new file with mode: 0644]
lib/dijit/nls/dijit-all_ROOT.js [deleted file]
lib/dijit/nls/dijit-all_ar.js [deleted file]
lib/dijit/nls/dijit-all_ca.js [deleted file]
lib/dijit/nls/dijit-all_cs.js [deleted file]
lib/dijit/nls/dijit-all_da.js [deleted file]
lib/dijit/nls/dijit-all_de-de.js [deleted file]
lib/dijit/nls/dijit-all_de.js [deleted file]
lib/dijit/nls/dijit-all_el.js [deleted file]
lib/dijit/nls/dijit-all_en-gb.js [deleted file]
lib/dijit/nls/dijit-all_en-us.js [deleted file]
lib/dijit/nls/dijit-all_en.js [deleted file]
lib/dijit/nls/dijit-all_es-es.js [deleted file]
lib/dijit/nls/dijit-all_es.js [deleted file]
lib/dijit/nls/dijit-all_fi-fi.js [deleted file]
lib/dijit/nls/dijit-all_fi.js [deleted file]
lib/dijit/nls/dijit-all_fr-fr.js [deleted file]
lib/dijit/nls/dijit-all_fr.js [deleted file]
lib/dijit/nls/dijit-all_he-il.js [deleted file]
lib/dijit/nls/dijit-all_he.js [deleted file]
lib/dijit/nls/dijit-all_hu.js [deleted file]
lib/dijit/nls/dijit-all_it-it.js [deleted file]
lib/dijit/nls/dijit-all_it.js [deleted file]
lib/dijit/nls/dijit-all_ja-jp.js [deleted file]
lib/dijit/nls/dijit-all_ja.js [deleted file]
lib/dijit/nls/dijit-all_ko-kr.js [deleted file]
lib/dijit/nls/dijit-all_ko.js [deleted file]
lib/dijit/nls/dijit-all_nb.js [deleted file]
lib/dijit/nls/dijit-all_nl-nl.js [deleted file]
lib/dijit/nls/dijit-all_nl.js [deleted file]
lib/dijit/nls/dijit-all_pl.js [deleted file]
lib/dijit/nls/dijit-all_pt-br.js [deleted file]
lib/dijit/nls/dijit-all_pt-pt.js [deleted file]
lib/dijit/nls/dijit-all_pt.js [deleted file]
lib/dijit/nls/dijit-all_ru.js [deleted file]
lib/dijit/nls/dijit-all_sk.js [deleted file]
lib/dijit/nls/dijit-all_sl.js [deleted file]
lib/dijit/nls/dijit-all_sv.js [deleted file]
lib/dijit/nls/dijit-all_th.js [deleted file]
lib/dijit/nls/dijit-all_tr.js [deleted file]
lib/dijit/nls/dijit-all_xx.js [deleted file]
lib/dijit/nls/dijit-all_zh-cn.js [deleted file]
lib/dijit/nls/dijit-all_zh-tw.js [deleted file]
lib/dijit/nls/dijit-all_zh.js [deleted file]
lib/dijit/nls/kk/common.js [new file with mode: 0644]
lib/dijit/nls/kk/loading.js [new file with mode: 0644]
lib/dijit/nls/sl/loading.js
lib/dijit/package.json [new file with mode: 0644]
lib/dijit/resources/_modules.js
lib/dijit/robot.js
lib/dijit/robotx.js
lib/dijit/themes/a11y/colors3x4-rtl.png [deleted file]
lib/dijit/themes/a11y/colors7x10-rtl.png [deleted file]
lib/dijit/themes/claro/Calendar.css
lib/dijit/themes/claro/Calendar.less [new file with mode: 0644]
lib/dijit/themes/claro/Calendar_rtl.css
lib/dijit/themes/claro/Calendar_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/ColorPalette.css
lib/dijit/themes/claro/ColorPalette.less [new file with mode: 0644]
lib/dijit/themes/claro/Common.css
lib/dijit/themes/claro/Common.less [new file with mode: 0644]
lib/dijit/themes/claro/Dialog.css
lib/dijit/themes/claro/Dialog.less [new file with mode: 0644]
lib/dijit/themes/claro/Dialog_rtl.css
lib/dijit/themes/claro/Dialog_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/Editor.css
lib/dijit/themes/claro/Editor.less [new file with mode: 0644]
lib/dijit/themes/claro/Editor_rtl.css
lib/dijit/themes/claro/Editor_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/InlineEditBox.css
lib/dijit/themes/claro/InlineEditBox.less [new file with mode: 0644]
lib/dijit/themes/claro/Menu.css
lib/dijit/themes/claro/Menu.less [new file with mode: 0644]
lib/dijit/themes/claro/Menu_rtl.css
lib/dijit/themes/claro/Menu_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/ProgressBar.css
lib/dijit/themes/claro/ProgressBar.less [new file with mode: 0644]
lib/dijit/themes/claro/README [new file with mode: 0644]
lib/dijit/themes/claro/TimePicker.css
lib/dijit/themes/claro/TimePicker.less [new file with mode: 0644]
lib/dijit/themes/claro/TimePicker_rtl.css
lib/dijit/themes/claro/TimePicker_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/TitlePane.css
lib/dijit/themes/claro/TitlePane.less [new file with mode: 0644]
lib/dijit/themes/claro/TitlePane_rtl.css
lib/dijit/themes/claro/TitlePane_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/Toolbar.css
lib/dijit/themes/claro/Toolbar.less [new file with mode: 0644]
lib/dijit/themes/claro/Toolbar_rtl.css [new file with mode: 0644]
lib/dijit/themes/claro/Toolbar_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/Tree.css
lib/dijit/themes/claro/Tree.less [new file with mode: 0644]
lib/dijit/themes/claro/claro.css
lib/dijit/themes/claro/claro_rtl.css
lib/dijit/themes/claro/compile.js [new file with mode: 0644]
lib/dijit/themes/claro/document.css
lib/dijit/themes/claro/document.less [new file with mode: 0644]
lib/dijit/themes/claro/form/Button.css
lib/dijit/themes/claro/form/Button.less [new file with mode: 0644]
lib/dijit/themes/claro/form/Button_rtl.css
lib/dijit/themes/claro/form/Button_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/form/Checkbox.css
lib/dijit/themes/claro/form/Checkbox.less [new file with mode: 0644]
lib/dijit/themes/claro/form/Common.css
lib/dijit/themes/claro/form/Common.less [new file with mode: 0644]
lib/dijit/themes/claro/form/Common_rtl.css
lib/dijit/themes/claro/form/Common_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/form/NumberSpinner.css
lib/dijit/themes/claro/form/NumberSpinner.less [new file with mode: 0644]
lib/dijit/themes/claro/form/RadioButton.css
lib/dijit/themes/claro/form/RadioButton.less [new file with mode: 0644]
lib/dijit/themes/claro/form/Select.css
lib/dijit/themes/claro/form/Select.less [new file with mode: 0644]
lib/dijit/themes/claro/form/Select_rtl.css
lib/dijit/themes/claro/form/Select_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/form/Slider.css
lib/dijit/themes/claro/form/Slider.less [new file with mode: 0644]
lib/dijit/themes/claro/form/Slider_rtl.css
lib/dijit/themes/claro/form/Slider_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/images/loading.gif [deleted file]
lib/dijit/themes/claro/images/tooltip.png
lib/dijit/themes/claro/images/tooltipGradient.png [new file with mode: 0644]
lib/dijit/themes/claro/layout/AccordionContainer.css
lib/dijit/themes/claro/layout/AccordionContainer.less [new file with mode: 0644]
lib/dijit/themes/claro/layout/BorderContainer.css
lib/dijit/themes/claro/layout/BorderContainer.less [new file with mode: 0644]
lib/dijit/themes/claro/layout/ContentPane.css
lib/dijit/themes/claro/layout/ContentPane.less [new file with mode: 0644]
lib/dijit/themes/claro/layout/TabContainer.css
lib/dijit/themes/claro/layout/TabContainer.less [new file with mode: 0644]
lib/dijit/themes/claro/layout/TabContainer_rtl.css
lib/dijit/themes/claro/layout/TabContainer_rtl.less [new file with mode: 0644]
lib/dijit/themes/claro/layout/images/tabBottom.png
lib/dijit/themes/claro/layout/images/tabTop.png
lib/dijit/themes/claro/variables.less [new file with mode: 0644]
lib/dijit/themes/dijit.css
lib/dijit/themes/dijit_rtl.css
lib/dijit/themes/nihilo/Calendar.css
lib/dijit/themes/nihilo/Calendar_rtl.css
lib/dijit/themes/nihilo/ColorPalette.css
lib/dijit/themes/nihilo/Common.css
lib/dijit/themes/nihilo/Dialog.css
lib/dijit/themes/nihilo/Dialog_rtl.css
lib/dijit/themes/nihilo/Editor.css
lib/dijit/themes/nihilo/Editor_rtl.css
lib/dijit/themes/nihilo/Menu.css
lib/dijit/themes/nihilo/Menu_rtl.css
lib/dijit/themes/nihilo/ProgressBar.css
lib/dijit/themes/nihilo/TimePicker.css
lib/dijit/themes/nihilo/TimePicker_rtl.css
lib/dijit/themes/nihilo/TitlePane.css
lib/dijit/themes/nihilo/TitlePane_rtl.css
lib/dijit/themes/nihilo/Toolbar.css
lib/dijit/themes/nihilo/Tree.css
lib/dijit/themes/nihilo/Tree_rtl.css
lib/dijit/themes/nihilo/form/Button.css
lib/dijit/themes/nihilo/form/Button_rtl.css
lib/dijit/themes/nihilo/form/Checkbox.css
lib/dijit/themes/nihilo/form/Common.css
lib/dijit/themes/nihilo/form/RadioButton.css
lib/dijit/themes/nihilo/form/Select.css
lib/dijit/themes/nihilo/form/Slider.css
lib/dijit/themes/nihilo/form/Slider_rtl.css
lib/dijit/themes/nihilo/form/TimeTextBox.css
lib/dijit/themes/nihilo/layout/AccordionContainer.css
lib/dijit/themes/nihilo/layout/AccordionContainer_rtl.css
lib/dijit/themes/nihilo/layout/BorderContainer.css
lib/dijit/themes/nihilo/layout/ContentPane.css
lib/dijit/themes/nihilo/layout/SplitContainer.css
lib/dijit/themes/nihilo/layout/TabContainer.css
lib/dijit/themes/nihilo/layout/TabContainer_rtl.css
lib/dijit/themes/nihilo/nihilo.css
lib/dijit/themes/nihilo/nihilo_rtl.css
lib/dijit/themes/soria/Calendar.css
lib/dijit/themes/soria/Calendar_rtl.css
lib/dijit/themes/soria/ColorPalette.css
lib/dijit/themes/soria/Common.css
lib/dijit/themes/soria/Dialog.css
lib/dijit/themes/soria/Dialog_rtl.css
lib/dijit/themes/soria/Editor.css
lib/dijit/themes/soria/Editor_rtl.css
lib/dijit/themes/soria/Menu.css
lib/dijit/themes/soria/Menu_rtl.css
lib/dijit/themes/soria/ProgressBar.css
lib/dijit/themes/soria/TimePicker.css
lib/dijit/themes/soria/TimePicker_rtl.css
lib/dijit/themes/soria/TitlePane.css
lib/dijit/themes/soria/TitlePane_rtl.css
lib/dijit/themes/soria/Toolbar.css
lib/dijit/themes/soria/Tree.css
lib/dijit/themes/soria/Tree_rtl.css
lib/dijit/themes/soria/form/Button.css
lib/dijit/themes/soria/form/Button_rtl.css
lib/dijit/themes/soria/form/Checkbox.css
lib/dijit/themes/soria/form/Common.css
lib/dijit/themes/soria/form/RadioButton.css
lib/dijit/themes/soria/form/Select.css
lib/dijit/themes/soria/form/Slider.css
lib/dijit/themes/soria/form/Slider_rtl.css
lib/dijit/themes/soria/form/TimeTextBox.css
lib/dijit/themes/soria/layout/AccordionContainer.css
lib/dijit/themes/soria/layout/AccordionContainer_rtl.css
lib/dijit/themes/soria/layout/BorderContainer.css
lib/dijit/themes/soria/layout/ContentPane.css
lib/dijit/themes/soria/layout/SplitContainer.css
lib/dijit/themes/soria/layout/TabContainer.css
lib/dijit/themes/soria/layout/TabContainer_rtl.css
lib/dijit/themes/soria/soria.css
lib/dijit/themes/soria/soria_rtl.css
lib/dijit/themes/tundra/Calendar.css
lib/dijit/themes/tundra/Calendar_rtl.css
lib/dijit/themes/tundra/ColorPalette.css
lib/dijit/themes/tundra/Common.css
lib/dijit/themes/tundra/Dialog.css
lib/dijit/themes/tundra/Dialog_rtl.css
lib/dijit/themes/tundra/Editor.css
lib/dijit/themes/tundra/Editor_rtl.css
lib/dijit/themes/tundra/Menu.css
lib/dijit/themes/tundra/Menu_rtl.css
lib/dijit/themes/tundra/ProgressBar.css
lib/dijit/themes/tundra/TimePicker.css
lib/dijit/themes/tundra/TimePicker_rtl.css
lib/dijit/themes/tundra/TitlePane.css
lib/dijit/themes/tundra/TitlePane_rtl.css
lib/dijit/themes/tundra/Toolbar.css
lib/dijit/themes/tundra/Tree.css
lib/dijit/themes/tundra/Tree_rtl.css
lib/dijit/themes/tundra/form/Button.css
lib/dijit/themes/tundra/form/Checkbox.css
lib/dijit/themes/tundra/form/Common.css
lib/dijit/themes/tundra/form/RadioButton.css
lib/dijit/themes/tundra/form/Select.css
lib/dijit/themes/tundra/form/Slider.css
lib/dijit/themes/tundra/form/Slider_rtl.css
lib/dijit/themes/tundra/layout/AccordionContainer.css
lib/dijit/themes/tundra/layout/BorderContainer.css
lib/dijit/themes/tundra/layout/ContentPane.css
lib/dijit/themes/tundra/layout/SplitContainer.css
lib/dijit/themes/tundra/layout/TabContainer.css
lib/dijit/themes/tundra/layout/TabContainer_rtl.css
lib/dijit/themes/tundra/tundra.css
lib/dijit/themes/tundra/tundra_rtl.css
lib/dijit/tree/ForestStoreModel.js
lib/dijit/tree/TreeStoreModel.js
lib/dijit/tree/_dndContainer.js
lib/dijit/tree/_dndSelector.js
lib/dijit/tree/dndSource.js
lib/dijit/tree/model.js
lib/dojo-src/rebuild-dojo.sh
lib/dojo/AdapterRegistry.js
lib/dojo/DeferredList.js
lib/dojo/LICENSE
lib/dojo/NodeList-data.js [new file with mode: 0644]
lib/dojo/NodeList-fx.js
lib/dojo/NodeList-html.js
lib/dojo/NodeList-manipulate.js
lib/dojo/NodeList-traverse.js
lib/dojo/OpenAjax.js
lib/dojo/Stateful.js
lib/dojo/_base.js
lib/dojo/_base/Color.js
lib/dojo/_base/Deferred.js
lib/dojo/_base/NodeList.js
lib/dojo/_base/_loader/bootstrap.js
lib/dojo/_base/_loader/hostenv_browser.js
lib/dojo/_base/_loader/hostenv_ff_ext.js
lib/dojo/_base/_loader/hostenv_rhino.js
lib/dojo/_base/_loader/hostenv_spidermonkey.js
lib/dojo/_base/_loader/loader.js
lib/dojo/_base/_loader/loader_debug.js
lib/dojo/_base/_loader/loader_xd.js
lib/dojo/_base/array.js
lib/dojo/_base/browser.js
lib/dojo/_base/connect.js
lib/dojo/_base/declare.js
lib/dojo/_base/event.js
lib/dojo/_base/fx.js
lib/dojo/_base/html.js
lib/dojo/_base/json.js
lib/dojo/_base/lang.js
lib/dojo/_base/query-sizzle.js
lib/dojo/_base/query.js
lib/dojo/_base/window.js
lib/dojo/_base/xhr.js
lib/dojo/_firebug/firebug.js
lib/dojo/back.js
lib/dojo/behavior.js
lib/dojo/build.txt
lib/dojo/cache.js
lib/dojo/cldr/monetary.js
lib/dojo/cldr/nls/ar/buddhist.js [new file with mode: 0644]
lib/dojo/cldr/nls/ar/gregorian.js
lib/dojo/cldr/nls/ar/number.js
lib/dojo/cldr/nls/ca/number.js
lib/dojo/cldr/nls/cs/gregorian.js
lib/dojo/cldr/nls/cs/number.js
lib/dojo/cldr/nls/da/buddhist.js [new file with mode: 0644]
lib/dojo/cldr/nls/da/gregorian.js
lib/dojo/cldr/nls/da/islamic.js [new file with mode: 0644]
lib/dojo/cldr/nls/da/number.js
lib/dojo/cldr/nls/de/buddhist.js [new file with mode: 0644]
lib/dojo/cldr/nls/de/gregorian.js
lib/dojo/cldr/nls/de/islamic.js [new file with mode: 0644]
lib/dojo/cldr/nls/de/number.js
lib/dojo/cldr/nls/el/buddhist.js [new file with mode: 0644]
lib/dojo/cldr/nls/el/gregorian.js
lib/dojo/cldr/nls/el/hebrew.js [new file with mode: 0644]
lib/dojo/cldr/nls/el/number.js
lib/dojo/cldr/nls/en-au/currency.js
lib/dojo/cldr/nls/en-au/number.js
lib/dojo/cldr/nls/en-ca/currency.js
lib/dojo/cldr/nls/en-gb/buddhist.js [new file with mode: 0644]
lib/dojo/cldr/nls/en-gb/islamic.js [new file with mode: 0644]
lib/dojo/cldr/nls/en-gb/number.js
lib/dojo/cldr/nls/en/buddhist.js [new file with mode: 0644]
lib/dojo/cldr/nls/en/currency.js
lib/dojo/cldr/nls/en/islamic.js [new file with mode: 0644]
lib/dojo/cldr/nls/en/number.js
lib/dojo/cldr/nls/es/buddhist.js [new file with mode: 0644]
lib/dojo/cldr/nls/es/islamic.js [new file with mode: 0644]
lib/dojo/cldr/nls/es/number.js
lib/dojo/cldr/nls/fi/buddhist.js [new file with mode: 0644]
lib/dojo/cldr/nls/fi/gregorian.js
lib/dojo/cldr/nls/fi/hebrew.js [new file with mode: 0644]
lib/dojo/cldr/nls/fi/islamic.js [new file with mode: 0644]
lib/dojo/cldr/nls/fi/number.js
lib/dojo/cldr/nls/fr-ch/gregorian.js [new file with mode: 0644]
lib/dojo/cldr/nls/fr-ch/number.js [new file with mode: 0644]
lib/dojo/cldr/nls/fr/gregorian.js
lib/dojo/cldr/nls/fr/number.js
lib/dojo/cldr/nls/he/number.js
lib/dojo/cldr/nls/hu/gregorian.js
lib/dojo/cldr/nls/hu/number.js
lib/dojo/cldr/nls/it/gregorian.js
lib/dojo/cldr/nls/it/number.js
lib/dojo/cldr/nls/ja/gregorian.js
lib/dojo/cldr/nls/ja/number.js
lib/dojo/cldr/nls/ko/gregorian.js
lib/dojo/cldr/nls/ko/number.js
lib/dojo/cldr/nls/nb/gregorian.js
lib/dojo/cldr/nls/nb/number.js
lib/dojo/cldr/nls/nl/gregorian.js
lib/dojo/cldr/nls/nl/number.js
lib/dojo/cldr/nls/number.js
lib/dojo/cldr/nls/pl/gregorian.js
lib/dojo/cldr/nls/pl/number.js
lib/dojo/cldr/nls/pt-pt/gregorian.js
lib/dojo/cldr/nls/pt-pt/number.js
lib/dojo/cldr/nls/pt/number.js
lib/dojo/cldr/nls/ro/buddhist.js [new file with mode: 0644]
lib/dojo/cldr/nls/ro/currency.js [new file with mode: 0644]
lib/dojo/cldr/nls/ro/gregorian.js [new file with mode: 0644]
lib/dojo/cldr/nls/ro/number.js [new file with mode: 0644]
lib/dojo/cldr/nls/ru/gregorian.js
lib/dojo/cldr/nls/ru/number.js
lib/dojo/cldr/nls/sk/number.js
lib/dojo/cldr/nls/sl/gregorian.js
lib/dojo/cldr/nls/sl/number.js
lib/dojo/cldr/nls/sv/gregorian.js
lib/dojo/cldr/nls/sv/number.js
lib/dojo/cldr/nls/th/number.js
lib/dojo/cldr/nls/tr/number.js
lib/dojo/cldr/nls/zh-hant/buddhist.js [new file with mode: 0644]
lib/dojo/cldr/nls/zh-hant/currency.js [new file with mode: 0644]
lib/dojo/cldr/nls/zh-hant/gregorian.js [new file with mode: 0644]
lib/dojo/cldr/nls/zh-hant/islamic.js [new file with mode: 0644]
lib/dojo/cldr/nls/zh-hant/number.js [new file with mode: 0644]
lib/dojo/cldr/nls/zh-hk/currency.js [new file with mode: 0644]
lib/dojo/cldr/nls/zh-hk/gregorian.js [new file with mode: 0644]
lib/dojo/cldr/nls/zh-hk/number.js [new file with mode: 0644]
lib/dojo/cldr/nls/zh-tw/currency.js
lib/dojo/cldr/nls/zh-tw/gregorian.js
lib/dojo/cldr/nls/zh/gregorian.js
lib/dojo/cldr/nls/zh/number.js
lib/dojo/cldr/supplemental.js
lib/dojo/colors.js
lib/dojo/cookie.js
lib/dojo/currency.js
lib/dojo/data/ItemFileReadStore.js
lib/dojo/data/ItemFileWriteStore.js
lib/dojo/data/ObjectStore.js [new file with mode: 0644]
lib/dojo/data/api/Identity.js
lib/dojo/data/api/Notification.js
lib/dojo/data/api/Read.js
lib/dojo/data/api/Request.js
lib/dojo/data/api/Write.js
lib/dojo/data/util/filter.js
lib/dojo/data/util/simpleFetch.js
lib/dojo/data/util/sorter.js
lib/dojo/date.js
lib/dojo/date/locale.js
lib/dojo/date/stamp.js
lib/dojo/dnd/Avatar.js
lib/dojo/dnd/Container.js
lib/dojo/dnd/Manager.js
lib/dojo/dnd/Moveable.js
lib/dojo/dnd/Mover.js
lib/dojo/dnd/Selector.js
lib/dojo/dnd/Source.js
lib/dojo/dnd/TimedMoveable.js
lib/dojo/dnd/autoscroll.js
lib/dojo/dnd/common.js
lib/dojo/dnd/move.js
lib/dojo/dojo.js
lib/dojo/dojo.js.uncompressed.js
lib/dojo/fx.js
lib/dojo/fx/Toggler.js
lib/dojo/fx/easing.js
lib/dojo/gears.js
lib/dojo/hash.js
lib/dojo/html.js
lib/dojo/i18n.js
lib/dojo/io/iframe.js
lib/dojo/io/script.js
lib/dojo/jaxer.js
lib/dojo/lib/backCompat.js [new file with mode: 0644]
lib/dojo/lib/kernel.js [new file with mode: 0644]
lib/dojo/lib/main-browser.js [new file with mode: 0644]
lib/dojo/lib/plugins/i18n.js [new file with mode: 0644]
lib/dojo/lib/plugins/text.js [new file with mode: 0644]
lib/dojo/nls/fi/colors.js
lib/dojo/nls/kk/colors.js [new file with mode: 0644]
lib/dojo/nls/pl/colors.js
lib/dojo/nls/pt-pt/colors.js
lib/dojo/nls/pt/colors.js
lib/dojo/nls/sl/colors.js
lib/dojo/nls/tt-rss-layer_ROOT.js
lib/dojo/nls/tt-rss-layer_ar.js
lib/dojo/nls/tt-rss-layer_ca.js
lib/dojo/nls/tt-rss-layer_cs.js
lib/dojo/nls/tt-rss-layer_da.js
lib/dojo/nls/tt-rss-layer_de-de.js
lib/dojo/nls/tt-rss-layer_de.js
lib/dojo/nls/tt-rss-layer_el.js
lib/dojo/nls/tt-rss-layer_en-gb.js
lib/dojo/nls/tt-rss-layer_en-us.js
lib/dojo/nls/tt-rss-layer_en.js
lib/dojo/nls/tt-rss-layer_es-es.js
lib/dojo/nls/tt-rss-layer_es.js
lib/dojo/nls/tt-rss-layer_fi-fi.js
lib/dojo/nls/tt-rss-layer_fi.js
lib/dojo/nls/tt-rss-layer_fr-fr.js
lib/dojo/nls/tt-rss-layer_fr.js
lib/dojo/nls/tt-rss-layer_he-il.js
lib/dojo/nls/tt-rss-layer_he.js
lib/dojo/nls/tt-rss-layer_hu.js
lib/dojo/nls/tt-rss-layer_it-it.js
lib/dojo/nls/tt-rss-layer_it.js
lib/dojo/nls/tt-rss-layer_ja-jp.js
lib/dojo/nls/tt-rss-layer_ja.js
lib/dojo/nls/tt-rss-layer_ko-kr.js
lib/dojo/nls/tt-rss-layer_ko.js
lib/dojo/nls/tt-rss-layer_nb.js
lib/dojo/nls/tt-rss-layer_nl-nl.js
lib/dojo/nls/tt-rss-layer_nl.js
lib/dojo/nls/tt-rss-layer_pl.js
lib/dojo/nls/tt-rss-layer_pt-br.js
lib/dojo/nls/tt-rss-layer_pt-pt.js
lib/dojo/nls/tt-rss-layer_pt.js
lib/dojo/nls/tt-rss-layer_ru.js
lib/dojo/nls/tt-rss-layer_sk.js
lib/dojo/nls/tt-rss-layer_sl.js
lib/dojo/nls/tt-rss-layer_sv.js
lib/dojo/nls/tt-rss-layer_th.js
lib/dojo/nls/tt-rss-layer_tr.js
lib/dojo/nls/tt-rss-layer_xx.js
lib/dojo/nls/tt-rss-layer_zh-cn.js
lib/dojo/nls/tt-rss-layer_zh-tw.js
lib/dojo/nls/tt-rss-layer_zh.js
lib/dojo/nls/zh/colors.js
lib/dojo/number.js
lib/dojo/package.json [new file with mode: 0644]
lib/dojo/parser.js
lib/dojo/regexp.js
lib/dojo/resources/_modules.js
lib/dojo/robot.js
lib/dojo/robotx.js
lib/dojo/rpc/JsonService.js
lib/dojo/rpc/JsonpService.js
lib/dojo/rpc/RpcService.js
lib/dojo/store/Cache.js [new file with mode: 0644]
lib/dojo/store/DataStore.js [new file with mode: 0644]
lib/dojo/store/JsonRest.js [new file with mode: 0644]
lib/dojo/store/Memory.js [new file with mode: 0644]
lib/dojo/store/Observable.js [new file with mode: 0644]
lib/dojo/store/README [new file with mode: 0644]
lib/dojo/store/api/Store.js [new file with mode: 0644]
lib/dojo/store/util/QueryResults.js [new file with mode: 0644]
lib/dojo/store/util/SimpleQueryEngine.js [new file with mode: 0644]
lib/dojo/string.js
lib/dojo/tt-rss-layer.js
lib/dojo/tt-rss-layer.js.uncompressed.js
lib/dojo/uacss.js
lib/dojo/window.js

index ca100254971431ed52238c2ed81970b15617ce9e..c9a0cc81c456257ad7d9a7483078bd0ffd2b71ad 100644 (file)
@@ -175,7 +175,7 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
                if (treeNode) {
                        treeNode = treeNode[0];
                        if (!is_cat) this._expandNode(treeNode);
-                       this._selectNode(treeNode);
+                       this.set("selectedNodes", [treeNode]);
                }
        },
        setFeedIcon: function(feed, is_cat, src) {
index fa82770ee7f9740fc4b6faf8b7bb1594046f1fee..b092ed79742e1b660442fa1c0522263aadebeaa1 100644 (file)
@@ -1,12 +1,12 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.Calendar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Calendar"] = true;
 dojo.provide("dijit.Calendar");
 dojo.require("dojo.cldr.supplemental");
 dojo.require("dojo.date");
@@ -14,252 +14,596 @@ dojo.require("dojo.date.locale");
 dojo.require("dijit._Widget");
 dojo.require("dijit._Templated");
 dojo.require("dijit._CssStateMixin");
-dojo.declare("dijit.Calendar",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{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 dijitCalendarArrow' 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 dijitCalendarArrow' 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, onmousedown: _onDayMouseDown, onmouseup: _onDayMouseUp\" 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",baseClass:"dijitCalendar",cssStateNodes:{"decrementMonth":"dijitCalendarArrow","incrementMonth":"dijitCalendarArrow","previousYearLabelNode":"dijitCalendarPreviousYear","nextYearLabelNode":"dijitCalendarNextYear"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{tabIndex:"domNode"}),setValue:function(_1){
-dojo.deprecated("dijit.Calendar:setValue() is deprecated.  Use set('value', ...) instead.","","2.0");
-this.set("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.get("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,_6);
-this._setText(this.monthLabelNode,_13[_6.getMonth()]);
-dojo.query(".dijitCalendarMonthLabelTemplate",this.domNode).forEach(function(_14,i){
-dojo.toggleClass(_14,"dijitHidden",!(i in _13));
-this._setText(_14,_13[i]);
-},this);
-var y=_6.getFullYear()-1;
-var d=new this.dateClassObj();
-dojo.forEach(["previous","current","next"],function(_15){
-d.setFullYear(y++);
-this._setText(this[_15+"YearLabelNode"],this.dateLocaleModule.format(d,{selector:"year",locale:this.lang}));
-},this);
-var _16=this;
-var _17=function(_18,_19,adj){
-_16._connects.push(dijit.typematic.addMouseListener(_16[_18],_16,function(_1a){
-if(_1a>=0){
-_16._adjustDisplay(_19,adj);
-}
-},0.8,500));
-};
-_17("incrementMonth","month",1);
-_17("decrementMonth","month",-1);
-_17("nextYearLabelNode","year",1);
-_17("previousYearLabelNode","year",-1);
-},goToToday:function(){
-this.set("value",new this.dateClassObj());
-},constructor:function(_1b){
-var _1c=(_1b.datePackage&&(_1b.datePackage!="dojo.date"))?_1b.datePackage+".Date":"Date";
-this.dateClassObj=dojo.getObject(_1c,false);
-this.datePackage=_1b.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 _1d=dojo.hitch(this,function(_1e,n){
-var _1f=dojo.query(_1e,this.domNode)[0];
-for(var i=0;i<n;i++){
-_1f.parentNode.appendChild(_1f.cloneNode(true));
-}
+dojo.require("dijit.form.DropDownButton");
+
+
+dojo.declare(
+       "dijit.Calendar",
+       [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
+       {
+               // summary:
+               //              A simple GUI for choosing a date in the context of a monthly calendar.
+               //
+               // description:
+               //              A simple GUI for choosing a date in the context of a monthly calendar.
+               //              This widget can't be used in a form because it doesn't serialize the date to an
+               //              `<input>` field.  For a form element, use dijit.form.DateTextBox instead.
+               //
+               //              Note that the parser takes all dates attributes passed in the
+               //              [RFC 3339 format](http://www.faqs.org/rfcs/rfc3339.html), e.g. `2005-06-30T08:05:00-07:00`
+               //              so that they are serializable and locale-independent.
+               //
+               // example:
+               //      |       var calendar = new dijit.Calendar({}, dojo.byId("calendarNode"));
+               //
+               // example:
+               //      |       <div dojoType="dijit.Calendar"></div>
+
+               templateString: dojo.cache("dijit", "templates/Calendar.html", "<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\" role=\"grid\" dojoAttachEvent=\"onkeypress: _onKeyPress\" aria-labelledby=\"${id}_year\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset dijitCalendarArrow' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarDecrease\" role=\"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 dojoType=\"dijit.form.DropDownButton\" dojoAttachPoint=\"monthDropDownButton\"\n\t\t\t\t\tid=\"${id}_mddb\" tabIndex=\"-1\">\n\t\t\t\t</div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset dijitCalendarArrow' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarIncrease\" role=\"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, onmousedown: _onDayMouseDown, onmouseup: _onDayMouseUp\" 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\" id=\"${id}_year\"></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"),
+               widgetsInTemplate: true,
+
+               // value: Date
+               //              The currently selected Date, initially set to invalid date to indicate no selection.
+               value: new Date(""),
+               // TODO: for 2.0 make this a string (ISO format) rather than a Date
+
+               // datePackage: String
+               //              JavaScript namespace to find Calendar routines.  Uses Gregorian Calendar routines
+               //              at dojo.date by default.
+               datePackage: "dojo.date",
+
+               // dayWidth: String
+               //              How to represent the days of the week in the calendar header. See dojo.date.locale
+               dayWidth: "narrow",
+
+               // tabIndex: Integer
+               //              Order fields are traversed when user hits the tab key
+               tabIndex: "0",
+               
+               // currentFocus: Date
+               //              Date object containing the currently focused date, or the date which would be focused
+               //              if the calendar itself was focused.   Also indicates which year and month to display,
+               //              i.e. the current "page" the calendar is on.
+               currentFocus: new Date(),
+
+               baseClass:"dijitCalendar",
+
+               // Set node classes for various mouse events, see dijit._CssStateMixin for more details
+               cssStateNodes: {
+                       "decrementMonth": "dijitCalendarArrow",
+                       "incrementMonth": "dijitCalendarArrow",
+                       "previousYearLabelNode": "dijitCalendarPreviousYear",
+                       "nextYearLabelNode": "dijitCalendarNextYear"
+               },
+
+               _isValidDate: function(/*Date*/ value){
+                       // summary:
+                       //              Runs various tests on the value, checking that it's a valid date, rather
+                       //              than blank or NaN.
+                       // tags:
+                       //              private
+                       return value && !isNaN(value) && typeof value == "object" &&
+                               value.toString() != this.constructor.prototype.value.toString();
+               },
+
+               setValue: function(/*Date*/ value){
+                       // summary:
+                       //      Deprecated.   Use set('value', ...) instead.
+                       // tags:
+                       //      deprecated
+                       dojo.deprecated("dijit.Calendar:setValue() is deprecated.  Use set('value', ...) instead.", "", "2.0");
+                       this.set('value', value);
+               },
+
+               _getValueAttr: function(){
+                       // summary:
+                       //              Support get('value')
+
+                       // this.value is set to 1AM, but return midnight, local time for back-compat
+                       var value = new this.dateClassObj(this.value);
+                       value.setHours(0, 0, 0, 0);
+
+                       // If daylight savings pushes midnight to the previous date, fix the Date
+                       // object to point at 1am so it will represent the correct day. See #9366
+                       if(value.getDate() < this.value.getDate()){
+                               value = this.dateFuncObj.add(value, "hour", 1);
+                       }
+                       return value;
+               },
+
+               _setValueAttr: function(/*Date|Number*/ value, /*Boolean*/ priorityChange){
+                       // summary:
+                       //              Support set("value", ...)
+                       // description:
+                       //              Set the current date and update the UI.  If the date is disabled, the value will
+                       //              not change, but the display will change to the corresponding month.
+                       // value:
+                       //              Either a Date or the number of seconds since 1970.
+                       // tags:
+                       //      protected
+                       if(value){
+                               // convert from Number to Date, or make copy of Date object so that setHours() call below
+                               // doesn't affect original value
+                               value = new this.dateClassObj(value);
+                       }
+                       if(this._isValidDate(value)){
+                               if(!this._isValidDate(this.value) || this.dateFuncObj.compare(value, this.value)){
+                                       value.setHours(1, 0, 0, 0); // round to nearest day (1am to avoid issues when DST shift occurs at midnight, see #8521, #9366)
+       
+                                       if(!this.isDisabledDate(value, this.lang)){
+                                               this._set("value", value);
+               
+                                               // Set focus cell to the new value.   Arguably this should only happen when there isn't a current
+                                               // focus point.   This will also repopulate the grid, showing the new selected value (and possibly
+                                               // new month/year).
+                                               this.set("currentFocus", value);
+       
+                                               if(priorityChange || typeof priorityChange == "undefined"){
+                                                       this.onChange(this.get('value'));
+                                                       this.onValueSelected(this.get('value'));        // remove in 2.0
+                                               }
+                                       }
+                               }
+                       }else{
+                               // clear value, and repopulate grid (to deselect the previously selected day) without changing currentFocus
+                               this._set("value", null);
+                               this.set("currentFocus", this.currentFocus);
+                       }
+               },
+
+               _setText: function(node, text){
+                       // summary:
+                       //              This just sets the content of node to the specified text.
+                       //              Can't do "node.innerHTML=text" because of an IE bug w/tables, see #3434.
+                       // tags:
+                       //      private
+                       while(node.firstChild){
+                               node.removeChild(node.firstChild);
+                       }
+                       node.appendChild(dojo.doc.createTextNode(text));
+               },
+
+               _populateGrid: function(){
+                       // summary:
+                       //      Fills in the calendar grid with each day (1-31)
+                       // tags:
+                       //      private
+
+                       var month = new this.dateClassObj(this.currentFocus);
+                       month.setDate(1);
+
+                       var firstDay = month.getDay(),
+                               daysInMonth = this.dateFuncObj.getDaysInMonth(month),
+                               daysInPreviousMonth = this.dateFuncObj.getDaysInMonth(this.dateFuncObj.add(month, "month", -1)),
+                               today = new this.dateClassObj(),
+                               dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
+                       if(dayOffset > firstDay){ dayOffset -= 7; }
+
+                       // Iterate through dates in the calendar and fill in date numbers and style info
+                       dojo.query(".dijitCalendarDateTemplate", this.domNode).forEach(function(template, i){
+                               i += dayOffset;
+                               var date = new this.dateClassObj(month),
+                                       number, clazz = "dijitCalendar", adj = 0;
+
+                               if(i < firstDay){
+                                       number = daysInPreviousMonth - firstDay + i + 1;
+                                       adj = -1;
+                                       clazz += "Previous";
+                               }else if(i >= (firstDay + daysInMonth)){
+                                       number = i - firstDay - daysInMonth + 1;
+                                       adj = 1;
+                                       clazz += "Next";
+                               }else{
+                                       number = i - firstDay + 1;
+                                       clazz += "Current";
+                               }
+
+                               if(adj){
+                                       date = this.dateFuncObj.add(date, "month", adj);
+                               }
+                               date.setDate(number);
+
+                               if(!this.dateFuncObj.compare(date, today, "date")){
+                                       clazz = "dijitCalendarCurrentDate " + clazz;
+                               }
+
+                               if(this._isSelectedDate(date, this.lang)){
+                                       clazz = "dijitCalendarSelectedDate " + clazz;
+                               }
+
+                               if(this.isDisabledDate(date, this.lang)){
+                                       clazz = "dijitCalendarDisabledDate " + clazz;
+                               }
+
+                               var clazz2 = this.getClassForDate(date, this.lang);
+                               if(clazz2){
+                                       clazz = clazz2 + " " + clazz;
+                               }
+
+                               template.className = clazz + "Month dijitCalendarDateTemplate";
+                               template.dijitDateValue = date.valueOf();                               // original code
+                               dojo.attr(template, "dijitDateValue", date.valueOf());  // so I can dojo.query() it
+                               var label = dojo.query(".dijitCalendarDateLabel", template)[0],
+                                       text = date.getDateLocalized ? date.getDateLocalized(this.lang) : date.getDate();
+                               this._setText(label, text);
+                       }, this);
+
+                       // Repopulate month drop down list based on current year.
+                       // Need to do this to hide leap months in Hebrew calendar.
+                       var monthNames = this.dateLocaleModule.getNames('months', 'wide', 'standAlone', this.lang, month);
+                       this.monthDropDownButton.dropDown.set("months", monthNames);
+
+                       // Set name of current month and also fill in spacer element with all the month names
+                       // (invisible) so that the maximum width will affect layout.   But not on IE6 because then
+                       // the center <TH> overlaps the right <TH> (due to a browser bug).
+                       this.monthDropDownButton.containerNode.innerHTML =
+                               (dojo.isIE == 6 ? "" : "<div class='dijitSpacer'>" + this.monthDropDownButton.dropDown.domNode.innerHTML + "</div>") +
+                               "<div class='dijitCalendarMonthLabel dijitCalendarCurrentMonthLabel'>" +  monthNames[month.getMonth()] + "</div>";
+
+                       // Fill in localized prev/current/next years
+                       var y = month.getFullYear() - 1;
+                       var d = new this.dateClassObj();
+                       dojo.forEach(["previous", "current", "next"], function(name){
+                               d.setFullYear(y++);
+                               this._setText(this[name+"YearLabelNode"],
+                                       this.dateLocaleModule.format(d, {selector:'year', locale:this.lang}));
+                       }, this);
+               },
+
+               goToToday: function(){
+                       // summary:
+                       //      Sets calendar's value to today's date
+                       this.set('value', new this.dateClassObj());
+               },
+
+               constructor: function(/*Object*/args){
+                       var dateClass = (args.datePackage && (args.datePackage != "dojo.date"))? args.datePackage + ".Date" : "Date";
+                       this.dateClassObj = dojo.getObject(dateClass, false);
+                       this.datePackage = args.datePackage || this.datePackage;
+                       this.dateFuncObj = dojo.getObject(this.datePackage, false);
+                       this.dateLocaleModule = dojo.getObject(this.datePackage + ".locale", false);
+               },
+
+               postMixInProperties: function(){
+                       // Parser.instantiate sometimes passes in NaN for IE.  Use default value in prototype instead.
+                       // TODO: remove this for 2.0 (thanks to #11511)
+                       if(isNaN(this.value)){ delete this.value; }
+
+                       this.inherited(arguments);
+               },
+
+               buildRendering: function(){
+                       this.inherited(arguments);
+                       dojo.setSelectable(this.domNode, false);
+
+                       var cloneClass = dojo.hitch(this, function(clazz, n){
+                               var template = dojo.query(clazz, this.domNode)[0];
+                               for(var i=0; i<n; i++){
+                                       template.parentNode.appendChild(template.cloneNode(true));
+                               }
+                       });
+
+                       // clone the day label and calendar day templates 6 times to make 7 columns
+                       cloneClass(".dijitCalendarDayLabelTemplate", 6);
+                       cloneClass(".dijitCalendarDateTemplate", 6);
+
+                       // now make 6 week rows
+                       cloneClass(".dijitCalendarWeekTemplate", 5);
+
+                       // insert localized day names in the header
+                       var dayNames = this.dateLocaleModule.getNames('days', this.dayWidth, 'standAlone', this.lang);
+                       var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
+                       dojo.query(".dijitCalendarDayLabel", this.domNode).forEach(function(label, i){
+                               this._setText(label, dayNames[(i + dayOffset) % 7]);
+                       }, this);
+
+                       var dateObj = new this.dateClassObj(this.currentFocus);
+
+                       this.monthDropDownButton.dropDown = new dijit.Calendar._MonthDropDown({
+                               id: this.id + "_mdd",
+                               onChange: dojo.hitch(this, "_onMonthSelect")
+                       });
+
+                       this.set('currentFocus', dateObj, false);       // draw the grid to the month specified by currentFocus
+
+                       // Set up repeating mouse behavior for increment/decrement of months/years
+                       var _this = this;
+                       var typematic = function(nodeProp, dateProp, adj){
+                               _this._connects.push(
+                                       dijit.typematic.addMouseListener(_this[nodeProp], _this, function(count){
+                                               if(count >= 0){ _this._adjustDisplay(dateProp, adj); }
+                                       }, 0.8, 500)
+                               );
+                       };
+                       typematic("incrementMonth", "month", 1);
+                       typematic("decrementMonth", "month", -1);
+                       typematic("nextYearLabelNode", "year", 1);
+                       typematic("previousYearLabelNode", "year", -1);
+               },
+
+               _adjustDisplay: function(/*String*/ part, /*int*/ amount){
+                       // summary:
+                       //      Moves calendar forwards or backwards by months or years
+                       // part:
+                       //      "month" or "year"
+                       // amount:
+                       //      Number of months or years
+                       // tags:
+                       //      private
+                       this._setCurrentFocusAttr(this.dateFuncObj.add(this.currentFocus, part, amount));
+               },
+
+               _setCurrentFocusAttr: function(/*Date*/ date, /*Boolean*/ forceFocus){
+                       // summary:
+                       //              If the calendar currently has focus, then focuses specified date,
+                       //              changing the currently displayed month/year if necessary.
+                       //              If the calendar doesn't have focus, updates currently
+                       //              displayed month/year, and sets the cell that will get focus.
+                       // forceFocus:
+                       //              If true, will focus() the cell even if calendar itself doesn't have focus
+
+                       var oldFocus = this.currentFocus,
+                               oldCell = oldFocus ? dojo.query("[dijitDateValue=" + oldFocus.valueOf() + "]", this.domNode)[0] : null;
+
+                       // round specified value to nearest day (1am to avoid issues when DST shift occurs at midnight, see #8521, #9366)
+                       date = new this.dateClassObj(date);
+                       date.setHours(1, 0, 0, 0);
+
+                       this._set("currentFocus", date);
+
+                       // TODO: only re-populate grid when month/year has changed
+                       this._populateGrid();
+
+                       // set tabIndex=0 on new cell, and focus it (but only if Calendar itself is focused)
+                       var newCell = dojo.query("[dijitDateValue=" + date.valueOf() + "]", this.domNode)[0];
+                       newCell.setAttribute("tabIndex", this.tabIndex);
+                       if(this._focused || forceFocus){
+                               newCell.focus();
+                       }
+
+                       // set tabIndex=-1 on old focusable cell
+                       if(oldCell && oldCell != newCell){
+                               if(dojo.isWebKit){      // see #11064 about webkit bug
+                                       oldCell.setAttribute("tabIndex", "-1");
+                               }else{
+                                               oldCell.removeAttribute("tabIndex");
+                               }
+                       }
+               },
+
+               focus: function(){
+                       // summary:
+                       //              Focus the calendar by focusing one of the calendar cells
+                       this._setCurrentFocusAttr(this.currentFocus, true);
+               },
+
+               _onMonthSelect: function(/*Number*/ newMonth){
+                       // summary:
+                       //      Handler for when user selects a month from the drop down list
+                       // tags:
+                       //      protected
+
+                       // move to selected month, bounding by the number of days in the month
+                       // (ex: dec 31 --> jan 28, not jan 31)
+                       this.currentFocus = this.dateFuncObj.add(this.currentFocus, "month",
+                               newMonth - this.currentFocus.getMonth());
+                       this._populateGrid();
+               },
+
+               _onDayClick: function(/*Event*/ evt){
+                       // summary:
+                       //      Handler for day clicks, selects the date if appropriate
+                       // tags:
+                       //      protected
+                       dojo.stopEvent(evt);
+                       for(var node = evt.target; node && !node.dijitDateValue; node = node.parentNode);
+                       if(node && !dojo.hasClass(node, "dijitCalendarDisabledDate")){
+                               this.set('value', node.dijitDateValue);
+                       }
+               },
+
+               _onDayMouseOver: function(/*Event*/ evt){
+                       // summary:
+                       //      Handler for mouse over events on days, sets hovered style
+                       // tags:
+                       //      protected
+
+                       // event can occur on <td> or the <span> inside the td,
+                       // set node to the <td>.
+                       var node =
+                               dojo.hasClass(evt.target, "dijitCalendarDateLabel") ?
+                               evt.target.parentNode :
+                               evt.target;
+
+                       if(node && (node.dijitDateValue || node == this.previousYearLabelNode || node == this.nextYearLabelNode) ){
+                               dojo.addClass(node, "dijitCalendarHoveredDate");
+                               this._currentNode = node;
+                       }
+               },
+
+               _onDayMouseOut: function(/*Event*/ evt){
+                       // summary:
+                       //      Handler for mouse out events on days, clears hovered style
+                       // tags:
+                       //      protected
+       
+                       if(!this._currentNode){ return; }
+                       
+                       // if mouse out occurs moving from <td> to <span> inside <td>, ignore it
+                       if(evt.relatedTarget && evt.relatedTarget.parentNode == this._currentNode){ return; }
+                       var cls = "dijitCalendarHoveredDate";
+                       if(dojo.hasClass(this._currentNode, "dijitCalendarActiveDate")) {
+                               cls += " dijitCalendarActiveDate";
+                       }
+                       dojo.removeClass(this._currentNode, cls);
+                       this._currentNode = null;
+               },
+               
+               _onDayMouseDown: function(/*Event*/ evt){
+                       var node = evt.target.parentNode;
+                       if(node && node.dijitDateValue){
+                               dojo.addClass(node, "dijitCalendarActiveDate");
+                               this._currentNode = node;
+                       }
+               },
+               
+               _onDayMouseUp: function(/*Event*/ evt){
+                       var node = evt.target.parentNode;
+                       if(node && node.dijitDateValue){
+                               dojo.removeClass(node, "dijitCalendarActiveDate");
+                       }
+               },
+
+//TODO: use typematic
+               handleKey: function(/*Event*/ evt){
+                       // summary:
+                       //              Provides keyboard navigation of calendar.
+                       // description:
+                       //              Called from _onKeyPress() to handle keypress on a stand alone Calendar,
+                       //              and also from `dijit.form._DateTimeTextBox` to pass a keypress event
+                       //              from the `dijit.form.DateTextBox` to be handled in this widget
+                       // returns:
+                       //              False if the key was recognized as a navigation key,
+                       //              to indicate that the event was handled by Calendar and shouldn't be propogated
+                       // tags:
+                       //              protected
+                       var dk = dojo.keys,
+                               increment = -1,
+                               interval,
+                               newValue = this.currentFocus;
+                       switch(evt.keyCode){
+                               case dk.RIGHT_ARROW:
+                                       increment = 1;
+                                       //fallthrough...
+                               case dk.LEFT_ARROW:
+                                       interval = "day";
+                                       if(!this.isLeftToRight()){ increment *= -1; }
+                                       break;
+                               case dk.DOWN_ARROW:
+                                       increment = 1;
+                                       //fallthrough...
+                               case dk.UP_ARROW:
+                                       interval = "week";
+                                       break;
+                               case dk.PAGE_DOWN:
+                                       increment = 1;
+                                       //fallthrough...
+                               case dk.PAGE_UP:
+                                       interval = evt.ctrlKey || evt.altKey ? "year" : "month";
+                                       break;
+                               case dk.END:
+                                       // go to the next month
+                                       newValue = this.dateFuncObj.add(newValue, "month", 1);
+                                       // subtract a day from the result when we're done
+                                       interval = "day";
+                                       //fallthrough...
+                               case dk.HOME:
+                                       newValue = new this.dateClassObj(newValue);
+                                       newValue.setDate(1);
+                                       break;
+                               case dk.ENTER:
+                               case dk.SPACE:
+                                       this.set("value", this.currentFocus);
+                                       break;
+                               default:
+                                       return true;
+                       }
+
+                       if(interval){
+                               newValue = this.dateFuncObj.add(newValue, interval, increment);
+                       }
+
+                       this._setCurrentFocusAttr(newValue);
+
+                       return false;
+               },
+
+               _onKeyPress: function(/*Event*/ evt){
+                       // summary:
+                       //              For handling keypress events on a stand alone calendar
+                       if(!this.handleKey(evt)){
+                               dojo.stopEvent(evt);
+                       }
+               },
+
+               onValueSelected: function(/*Date*/ date){
+                       // summary:
+                       //              Notification that a date cell was selected.  It may be the same as the previous value.
+                       // description:
+                       //      Formerly used by `dijit.form._DateTimeTextBox` (and thus `dijit.form.DateTextBox`)
+                       //      to get notification when the user has clicked a date.  Now onExecute() (above) is used.
+                       // tags:
+                       //      protected
+               },
+
+               onChange: function(/*Date*/ date){
+                       // summary:
+                       //              Called only when the selected date has changed
+               },
+
+               _isSelectedDate: function(/*Date*/ dateObject, /*String?*/ locale){
+                       // summary:
+                       //              Extension point so developers can subclass Calendar to
+                       //              support multiple (concurrently) selected dates
+                       // tags:
+                       //              protected extension
+                       return this._isValidDate(this.value) && !this.dateFuncObj.compare(dateObject, this.value, "date")
+               },
+
+               isDisabledDate: function(/*Date*/ dateObject, /*String?*/ locale){
+                       // summary:
+                       //              May be overridden to disable certain dates in the calendar e.g. `isDisabledDate=dojo.date.locale.isWeekend`
+                       // tags:
+                       //      extension
+/*=====
+                       return false; // Boolean
+=====*/
+               },
+
+               getClassForDate: function(/*Date*/ dateObject, /*String?*/ locale){
+                       // summary:
+                       //              May be overridden to return CSS classes to associate with the date entry for the given dateObject,
+                       //              for example to indicate a holiday in specified locale.
+                       // tags:
+                       //      extension
+
+/*=====
+                       return ""; // String
+=====*/
+               }
+       }
+);
+
+dojo.declare("dijit.Calendar._MonthDropDown", [dijit._Widget, dijit._Templated], {
+       // summary:
+       //              The month drop down
+
+       // months: String[]
+       //              List of names of months, possibly w/some undefined entries for Hebrew leap months
+       //              (ex: ["January", "February", undefined, "April", ...])
+       months: [],
+
+       templateString: "<div class='dijitCalendarMonthMenu dijitMenu' " +
+               "dojoAttachEvent='onclick:_onClick,onmouseover:_onMenuHover,onmouseout:_onMenuHover'></div>",
+
+       _setMonthsAttr: function(/*String[]*/ months){
+               this.domNode.innerHTML = dojo.map(months, function(month, idx){
+                               return month ? "<div class='dijitCalendarMonthLabel' month='" + idx +"'>" + month + "</div>" : "";
+                       }).join("");
+       },
+
+       _onClick: function(/*Event*/ evt){
+               this.onChange(dojo.attr(evt.target, "month"));
+       },
+
+       onChange: function(/*Number*/ month){
+               // summary:
+               //              Callback when month is selected from drop down
+       },
+
+       _onMenuHover: function(evt){
+               dojo.toggleClass(evt.target, "dijitCalendarMonthLabelHover", evt.type == "mouseover");
+       }
 });
-_1d(".dijitCalendarDayLabelTemplate",6);
-_1d(".dijitCalendarDateTemplate",6);
-_1d(".dijitCalendarWeekTemplate",5);
-var _20=this.dateLocaleModule.getNames("days",this.dayWidth,"standAlone",this.lang);
-var _21=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
-dojo.query(".dijitCalendarDayLabel",this.domNode).forEach(function(_22,i){
-this._setText(_22,_20[(i+_21)%7]);
-},this);
-var _23=new this.dateClassObj(this.value);
-var _24=this.dateLocaleModule.getNames("months","wide","standAlone",this.lang,_23);
-_1d(".dijitCalendarMonthLabelTemplate",_24.length-1);
-dojo.query(".dijitCalendarMonthLabelTemplate",this.domNode).forEach(function(_25,i){
-dojo.attr(_25,"month",i);
-if(i in _24){
-this._setText(_25,_24[i]);
-}
-dojo.place(_25.cloneNode(true),this.monthLabelSpacer);
-},this);
-this.value=null;
-this.set("value",_23);
-},_onMenuHover:function(e){
-dojo.stopEvent(e);
-dojo.toggleClass(e.target,"dijitMenuItemHover");
-},_adjustDisplay:function(_26,_27){
-this.displayMonth=this.dateFuncObj.add(this.displayMonth,_26,_27);
-this._populateGrid();
-},_onMonthToggle:function(evt){
-dojo.stopEvent(evt);
-if(evt.type=="mousedown"){
-var _28=dojo.position(this.monthLabelNode);
-var dim={width:_28.w+"px",top:-this.displayMonth.getMonth()*_28.h+"px"};
-if((dojo.isIE&&dojo.isQuirks)||dojo.isIE<7){
-dim.left=-_28.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 _29=evt.target;_29&&!_29.dijitDateValue;_29=_29.parentNode){
-}
-if(_29&&!dojo.hasClass(_29,"dijitCalendarDisabledDate")){
-this.set("value",_29.dijitDateValue);
-this.onValueSelected(this.get("value"));
-}
-},_onDayMouseOver:function(evt){
-var _2a=dojo.hasClass(evt.target,"dijitCalendarDateLabel")?evt.target.parentNode:evt.target;
-if(_2a&&(_2a.dijitDateValue||_2a==this.previousYearLabelNode||_2a==this.nextYearLabelNode)){
-dojo.addClass(_2a,"dijitCalendarHoveredDate");
-this._currentNode=_2a;
-}
-},_onDayMouseOut:function(evt){
-if(!this._currentNode){
-return;
-}
-if(evt.relatedTarget&&evt.relatedTarget.parentNode==this._currentNode){
-return;
-}
-dojo.removeClass(this._currentNode,"dijitCalendarHoveredDate");
-if(dojo.hasClass(this._currentNode,"dijitCalendarActiveDate")){
-dojo.removeClass(this._currentNode,"dijitCalendarActiveDate");
-}
-this._currentNode=null;
-},_onDayMouseDown:function(evt){
-var _2b=evt.target.parentNode;
-if(_2b&&_2b.dijitDateValue){
-dojo.addClass(_2b,"dijitCalendarActiveDate");
-this._currentNode=_2b;
-}
-},_onDayMouseUp:function(evt){
-var _2c=evt.target.parentNode;
-if(_2c&&_2c.dijitDateValue){
-dojo.removeClass(_2c,"dijitCalendarActiveDate");
-}
-},_onKeyPress:function(evt){
-var dk=dojo.keys,_2d=-1,_2e,_2f=this.value;
-switch(evt.keyCode){
-case dk.RIGHT_ARROW:
-_2d=1;
-case dk.LEFT_ARROW:
-_2e="day";
-if(!this.isLeftToRight()){
-_2d*=-1;
-}
-break;
-case dk.DOWN_ARROW:
-_2d=1;
-case dk.UP_ARROW:
-_2e="week";
-break;
-case dk.PAGE_DOWN:
-_2d=1;
-case dk.PAGE_UP:
-_2e=evt.ctrlKey?"year":"month";
-break;
-case dk.END:
-_2f=this.dateFuncObj.add(_2f,"month",1);
-_2e="day";
-case dk.HOME:
-_2f=new Date(_2f).setDate(1);
-break;
-case dk.ENTER:
-this.onValueSelected(this.get("value"));
-break;
-case dk.ESCAPE:
-default:
-return;
-}
-dojo.stopEvent(evt);
-if(_2e){
-_2f=this.dateFuncObj.add(_2f,_2e,_2d);
-}
-this.set("value",_2f);
-},onValueSelected:function(_30){
-},onChange:function(_31){
-},_isSelectedDate:function(_32,_33){
-return !this.dateFuncObj.compare(_32,this.value,"date");
-},isDisabledDate:function(_34,_35){
-},getClassForDate:function(_36,_37){
-}});
+
 }
index a8483789725172561f5f6d1893bc2e5d3c60e3df..ab24dfb951053934cc50ef45dd0012bd2802258f 100644 (file)
@@ -1,24 +1,54 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+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.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 dijitMenuItemIconCell\" 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\">&nbsp;</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.set("checked",!this.checked);
-this.onChange(this.checked);
-}
-this.inherited(arguments);
-}});
+
+
+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\" role=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"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\" role=\"presentation\">&nbsp;</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._set("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.set("checked", !this.checked);
+                               this.onChange(this.checked);
+                       }
+                       this.inherited(arguments);
+               }
+       });
+
 }
index 62aae00df3e17f55a6d00a5925d6b895205d0e51..62c9d8df686bd3e3ddf7f36705d36d89016a0877 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.ColorPalette"]){
-dojo._hasResource["dijit.ColorPalette"]=true;
+if(!dojo._hasResource["dijit.ColorPalette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.ColorPalette"] = true;
 dojo.provide("dijit.ColorPalette");
 dojo.require("dijit._Widget");
 dojo.require("dijit._Templated");
 dojo.require("dojo.colors");
 dojo.require("dojo.i18n");
+dojo.require("dojo.string");
 dojo.require("dijit._PaletteMixin");
-dojo.requireLocalization("dojo","colors",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.declare("dijit.ColorPalette",[dijit._Widget,dijit._Templated,dijit._PaletteMixin],{palette:"7x10",_palettes:{"7x10":[["white","seashell","cornsilk","lemonchiffon","lightyellow","palegreen","paleturquoise","lightcyan","lavender","plum"],["lightgray","pink","bisque","moccasin","khaki","lightgreen","lightseagreen","lightskyblue","cornflowerblue","violet"],["silver","lightcoral","sandybrown","orange","palegoldenrod","chartreuse","mediumturquoise","skyblue","mediumslateblue","orchid"],["gray","red","orangered","darkorange","yellow","limegreen","darkseagreen","royalblue","slateblue","mediumorchid"],["dimgray","crimson","chocolate","coral","gold","forestgreen","seagreen","blue","blueviolet","darkorchid"],["darkslategray","firebrick","saddlebrown","sienna","olive","green","darkcyan","mediumblue","darkslateblue","darkmagenta"],["black","darkred","maroon","brown","darkolivegreen","darkgreen","midnightblue","navy","indigo","purple"]],"3x4":[["white","lime","green","blue"],["silver","yellow","fuchsia","navy"],["gray","red","purple","black"]]},_imagePaths:{"7x10":dojo.moduleUrl("dijit.themes","a11y/colors7x10.png"),"3x4":dojo.moduleUrl("dijit.themes","a11y/colors3x4.png"),"7x10-rtl":dojo.moduleUrl("dijit.themes","a11y/colors7x10-rtl.png"),"3x4-rtl":dojo.moduleUrl("dijit.themes","a11y/colors3x4-rtl.png")},templateString:dojo.cache("dijit","templates/ColorPalette.html","<div class=\"dijitInline dijitColorPalette\">\n\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\"/>\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),baseClass:"dijitColorPalette",dyeClass:"dijit._Color",buildRendering:function(){
-this.inherited(arguments);
-this.imageNode.setAttribute("src",this._imagePaths[this.palette+(this.isLeftToRight()?"":"-rtl")].toString());
-var _1=dojo.i18n.getLocalization("dojo","colors",this.lang);
-this._preparePalette(this._palettes[this.palette],_1);
-}});
-dojo.declare("dijit._Color",dojo.Color,{constructor:function(_2){
-this._alias=_2;
-this.setColor(dojo.Color.named[_2]);
-},getValue:function(){
-return this.toHex();
-},fillCell:function(_3,_4){
-dojo.create("img",{src:_4,"class":"dijitPaletteImg",alt:this._alias},_3);
-}});
+dojo.requireLocalization("dojo", "colors", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare("dijit.ColorPalette",
+       [dijit._Widget, dijit._Templated, dijit._PaletteMixin],
+       {
+       // summary:
+       //              A keyboard accessible color-picking widget
+       // description:
+       //              Grid showing various colors, so the user can pick a certain color.
+       //              Can be used standalone, or as a popup.
+       //
+       // example:
+       // |    <div dojoType="dijit.ColorPalette"></div>
+       //
+       // example:
+       // |    var picker = new dijit.ColorPalette({ },srcNode);
+       // |    picker.startup();
+
+
+       // palette: [const] String
+       //              Size of grid, either "7x10" or "3x4".
+       palette: "7x10",
+
+       // _palettes: [protected] Map
+       //              This represents the value of the colors.
+       //              The first level is a hashmap of the different palettes available.
+       //              The next two dimensions represent the columns and rows of colors.
+       _palettes: {
+               "7x10": [["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan",     "lavender", "plum"],
+                               ["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"],
+                               ["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise",      "skyblue", "mediumslateblue","orchid"],
+                               ["gray", "red", "orangered", "darkorange", "yellow", "limegreen",       "darkseagreen", "royalblue", "slateblue", "mediumorchid"],
+                               ["dimgray", "crimson",  "chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"],
+                               ["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ],
+                               ["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo",        "purple"]],
+
+               "3x4": [["white", "lime", "green", "blue"],
+                       ["silver", "yellow", "fuchsia", "navy"],
+                       ["gray", "red", "purple", "black"]]
+       },
+
+       // templateString: String
+       //              The template of this widget.
+       templateString: dojo.cache("dijit", "templates/ColorPalette.html", "<div class=\"dijitInline dijitColorPalette\">\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),
+
+       baseClass: "dijitColorPalette",
+
+       buildRendering: function(){
+               // Instantiate the template, which makes a skeleton into which we'll insert a bunch of
+               // <img> nodes
+               this.inherited(arguments);
+
+               // Creates <img> nodes in each cell of the template.
+               // Pass in "customized" dijit._Color constructor for specified palette and high-contrast vs. normal mode
+               this._preparePalette(
+                       this._palettes[this.palette],
+                       dojo.i18n.getLocalization("dojo", "colors", this.lang),
+                       dojo.declare(dijit._Color, {
+                               hc: dojo.hasClass(dojo.body(), "dijit_a11y"),
+                               palette: this.palette
+                       })
+               );
+       }
+});
+
+dojo.declare("dijit._Color", dojo.Color, {
+       // summary:
+       //              Object associated with each cell in a ColorPalette palette.
+       //              Implements dijit.Dye.
+
+       // Template for each cell in normal (non-high-contrast mode).  Each cell contains a wrapper
+       // node for showing the border (called dijitPaletteImg for back-compat), and dijitColorPaletteSwatch
+       // for showing the color.
+       template:
+               "<span class='dijitInline dijitPaletteImg'>" +
+                       "<img src='${blankGif}' alt='${alt}' class='dijitColorPaletteSwatch' style='background-color: ${color}'/>" +
+               "</span>",
+
+       // Template for each cell in high contrast mode.  Each cell contains an image with the whole palette,
+       // but scrolled and clipped to show the correct color only
+       hcTemplate:
+               "<span class='dijitInline dijitPaletteImg' style='position: relative; overflow: hidden; height: 12px; width: 14px;'>" +
+                       "<img src='${image}' alt='${alt}' style='position: absolute; left: ${left}px; top: ${top}px; ${size}'/>" +
+               "</span>",
+
+       // _imagePaths: [protected] Map
+       //              This is stores the path to the palette images used for high-contrast mode display
+       _imagePaths: {
+               "7x10": dojo.moduleUrl("dijit.themes", "a11y/colors7x10.png"),
+               "3x4": dojo.moduleUrl("dijit.themes", "a11y/colors3x4.png")
+       },
+
+       constructor: function(/*String*/alias, /*Number*/ row, /*Number*/ col){
+               this._alias = alias;
+               this._row = row;
+               this._col = col;
+               this.setColor(dojo.Color.named[alias]);
+       },
+
+       getValue: function(){
+               // summary:
+               //              Note that although dijit._Color is initialized with a value like "white" getValue() always
+               //              returns a hex value
+               return this.toHex();
+       },
+
+       fillCell: function(/*DOMNode*/ cell, /*String*/ blankGif){
+               var html = dojo.string.substitute(this.hc ? this.hcTemplate : this.template, {
+                       // substitution variables for normal mode
+                       color: this.toHex(),
+                       blankGif: blankGif,
+                       alt: this._alias,
+                       
+                       // variables used for high contrast mode
+                       image: this._imagePaths[this.palette].toString(),
+                       left: this._col * -20 - 5,
+                       top: this._row * -20 - 5,
+                       size: this.palette == "7x10" ? "height: 145px; width: 206px" : "height: 64px; width: 86px"
+               });
+
+               dojo.place(html, cell);
+       }
+});
+
 }
index 57cbfd031f67a762afdffcd02051f07c6f96d34b..1cfa8ecadafbfe55eb57c3deedb05d7953b75f4d 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.Declaration"]){
-dojo._hasResource["dijit.Declaration"]=true;
+if(!dojo._hasResource["dijit.Declaration"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Declaration"] = true;
 dojo.provide("dijit.Declaration");
 dojo.require("dijit._Widget");
 dojo.require("dijit._Templated");
-dojo.declare("dijit.Declaration",dijit._Widget,{_noScript:true,widgetClass:"",defaults:null,mixins:[],buildRendering:function(){
-var _1=this.srcNodeRef.parentNode.removeChild(this.srcNodeRef),_2=dojo.query("> script[type^='dojo/method'][event]",_1).orphan(),_3=dojo.query("> script[type^='dojo/method']",_1).orphan(),_4=dojo.query("> script[type^='dojo/connect']",_1).orphan(),_5=_1.nodeName;
-var _6=this.defaults||{};
-dojo.forEach(_2,function(s){
-var _7=s.getAttribute("event"),_8=dojo.parser._functionFromScript(s);
-_6[_7]=_8;
-});
-this.mixins=this.mixins.length?dojo.map(this.mixins,function(_9){
-return dojo.getObject(_9);
-}):[dijit._Widget,dijit._Templated];
-_6.widgetsInTemplate=true;
-_6._skipNodeCache=true;
-_6.templateString="<"+_5+" class='"+_1.className+"' dojoAttachPoint='"+(_1.getAttribute("dojoAttachPoint")||"")+"' dojoAttachEvent='"+(_1.getAttribute("dojoAttachEvent")||"")+"' >"+_1.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+_5+">";
-dojo.query("[dojoType]",_1).forEach(function(_a){
-_a.removeAttribute("dojoType");
-});
-var wc=dojo.declare(this.widgetClass,this.mixins,_6);
-var _b=_4.concat(_3);
-dojo.forEach(_b,function(s){
-var _c=s.getAttribute("event")||"postscript",_d=dojo.parser._functionFromScript(s);
-dojo.connect(wc.prototype,_c,_d);
-});
-}});
+
+
+dojo.declare(
+       "dijit.Declaration",
+       dijit._Widget,
+       {
+               // summary:
+               //              The Declaration widget allows a developer to declare new widget
+               //              classes directly from a snippet of markup.
+
+               // _noScript: [private] Boolean
+               //              Flag to parser to leave alone the script tags contained inside of me
+               _noScript: true,
+
+               // stopParser: [private] Boolean
+               //              Flag to parser to not try and parse widgets declared inside of me
+               stopParser: true,
+
+               // widgetClass: [const] String
+               //              Name of class being declared, ex: "acme.myWidget"
+               widgetClass: "",
+
+               // propList: [const] Object
+               //              Set of attributes for this widget along with default values, ex:
+               //              {delay: 100, title: "hello world"}
+               defaults: null,
+
+               // mixins: [const] String[]
+               //              List containing the prototype for this widget, and also any mixins,
+               //              ex: ["dijit._Widget", "dijit._Container"]
+               mixins: [],
+
+               buildRendering: function(){
+                       var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef),
+                               methods = dojo.query("> script[type^='dojo/method']", src).orphan(),
+                               connects = dojo.query("> script[type^='dojo/connect']", src).orphan(),
+                               srcType = src.nodeName;
+
+                       var propList = this.defaults || {};
+
+                       // For all methods defined like <script type="dojo/method" data-dojo-event="foo">,
+                       // add that method to prototype.
+                       // If there's no "event" specified then it's code to run on instantiation,
+                       // so it becomes a connection to "postscript" (handled below).
+                       dojo.forEach(methods, function(s){
+                               var evt = s.getAttribute("event") || s.getAttribute("data-dojo-event"),
+                                       func = dojo.parser._functionFromScript(s);
+                               if(evt){
+                                       propList[evt] = func;
+                               }else{
+                                       connects.push(s);
+                               }
+                       });
+
+                       // map array of strings like [ "dijit.form.Button" ] to array of mixin objects
+                       // (note that dojo.map(this.mixins, dojo.getObject) doesn't work because it passes
+                       // a bogus third argument to getObject(), confusing it)
+                       this.mixins = this.mixins.length ?
+                               dojo.map(this.mixins, function(name){ return dojo.getObject(name); } ) :
+                               [ dijit._Widget, dijit._Templated ];
+
+                       propList.widgetsInTemplate = true;
+                       propList._skipNodeCache = true;
+                       propList.templateString = "<"+srcType+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint") || '')+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent") || '')+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+srcType+">";
+
+                       // strip things so we don't create stuff under us in the initial setup phase
+                       dojo.query("[dojoType]", src).forEach(function(node){
+                               node.removeAttribute("dojoType");
+                       });
+
+                       // create the new widget class
+                       var wc = dojo.declare(
+                               this.widgetClass,
+                               this.mixins,
+                               propList
+                       );
+
+                       // Handle <script> blocks of form:
+                       //              <script type="dojo/connect" data-dojo-event="foo">
+                       // and
+                       //              <script type="dojo/method">
+                       // (Note that the second one is just shorthand for a dojo/connect to postscript)
+                       // Since this is a connect in the declaration, we are actually connection to the method
+                       // in the _prototype_.
+                       dojo.forEach(connects, function(s){
+                               var evt = s.getAttribute("event") || s.getAttribute("data-dojo-event") || "postscript",
+                                       func = dojo.parser._functionFromScript(s);
+                               dojo.connect(wc.prototype, evt, func);
+                       });
+               }
+       }
+);
+
 }
index a35d523bfe0f83788dc7b2d0a598cec57627e890..22d2dbedf64d696a25cebe6d379eedf84bad3393 100644 (file)
@@ -1,12 +1,12 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.Dialog"]){
-dojo._hasResource["dijit.Dialog"]=true;
+if(!dojo._hasResource["dijit.Dialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Dialog"] = true;
 dojo.provide("dijit.Dialog");
 dojo.require("dojo.dnd.move");
 dojo.require("dojo.dnd.TimedMoveable");
@@ -19,238 +19,593 @@ dojo.require("dijit.form._FormMixin");
 dojo.require("dijit._DialogMixin");
 dojo.require("dijit.DialogUnderlay");
 dojo.require("dijit.layout.ContentPane");
-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,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.declare("dijit._DialogBase",[dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/Dialog.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\"></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\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),baseClass:"dijitDialog",cssStateNodes:{closeButtonNode:"dijitDialogCloseIcon"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[{node:"titleNode",type:"innerHTML"},{node:"titleBar",type:"attribute"}],"aria-describedby":""}),open:false,duration:dijit.defaultDuration,refocus:true,autofocus:true,_firstFocusItem:null,_lastFocusItem:null,doLayout:false,draggable:true,"aria-describedby":"",postMixInProperties:function(){
-var _1=dojo.i18n.getLocalization("dijit","common");
-dojo.mixin(this,_1);
-this.inherited(arguments);
-},postCreate:function(){
-dojo.style(this.domNode,{display:"none",position:"absolute"});
-dojo.body().appendChild(this.domNode);
-this.inherited(arguments);
-this.connect(this,"onExecute","hide");
-this.connect(this,"onCancel","hide");
-this._modalconnects=[];
-},onLoad:function(){
-this._position();
-if(this.autofocus){
-this._getFocusItems(this.domNode);
-dijit.focus(this._firstFocusItem);
-}
-this.inherited(arguments);
-},_endDrag:function(e){
-if(e&&e.node&&e.node===this.domNode){
-this._relativePosition=dojo.position(e.node);
-}
-},_setup:function(){
-var _2=this.domNode;
-if(this.titleBar&&this.draggable){
-this._moveable=(dojo.isIE==6)?new dojo.dnd.TimedMoveable(_2,{handle:this.titleBar}):new dojo.dnd.Moveable(_2,{handle:this.titleBar,timeout:0});
-dojo.subscribe("/dnd/move/stop",this,"_endDrag");
-}else{
-dojo.addClass(_2,"dijitDialogFixed");
-}
-this.underlayAttrs={dialogId:this.id,"class":dojo.map(this["class"].split(/\s/),function(s){
-return s+"_underlay";
-}).join(" ")};
-this._fadeIn=dojo.fadeIn({node:_2,duration:this.duration,beforeBegin:dojo.hitch(this,function(){
-var _3=dijit._underlay;
-if(!_3){
-_3=dijit._underlay=new dijit.DialogUnderlay(this.underlayAttrs);
-}else{
-_3.set(this.underlayAttrs);
-}
-var ds=dijit._dialogStack,_4=948+ds.length*2;
-if(ds.length==1){
-_3.show();
-}
-dojo.style(dijit._underlay.domNode,"zIndex",_4);
-dojo.style(this.domNode,"zIndex",_4+1);
-}),onEnd:dojo.hitch(this,function(){
-if(this.autofocus){
-this._getFocusItems(this.domNode);
-dijit.focus(this._firstFocusItem);
-}
-})});
-this._fadeOut=dojo.fadeOut({node:_2,duration:this.duration,onEnd:dojo.hitch(this,function(){
-_2.style.display="none";
-var ds=dijit._dialogStack;
-if(ds.length==0){
-dijit._underlay.hide();
-}else{
-dojo.style(dijit._underlay.domNode,"zIndex",948+ds.length*2);
-dijit._underlay.set(ds[ds.length-1].underlayAttrs);
-}
-if(this.refocus){
-var _5=this._savedFocus;
-if(ds.length>0){
-var pd=ds[ds.length-1];
-if(!dojo.isDescendant(_5.node,pd.domNode)){
-pd._getFocusItems(pd.domNode);
-_5=pd._firstFocusItem;
-}
-}
-dijit.focus(_5);
-}
-})});
-},uninitialize:function(){
-var _6=false;
-if(this._fadeIn&&this._fadeIn.status()=="playing"){
-_6=true;
-this._fadeIn.stop();
-}
-if(this._fadeOut&&this._fadeOut.status()=="playing"){
-_6=true;
-this._fadeOut.stop();
-}
-if((this.open||_6)&&!dijit._underlay._destroyed){
-dijit._underlay.hide();
-}
-if(this._moveable){
-this._moveable.destroy();
-}
-this.inherited(arguments);
-},_size:function(){
-this._checkIfSingleChild();
-if(this._singleChild){
-if(this._singleChildOriginalStyle){
-this._singleChild.domNode.style.cssText=this._singleChildOriginalStyle;
-}
-delete this._singleChildOriginalStyle;
-}else{
-dojo.style(this.containerNode,{width:"auto",height:"auto"});
-}
-var mb=dojo.marginBox(this.domNode);
-var _7=dojo.window.getBox();
-if(mb.w>=_7.w||mb.h>=_7.h){
-var w=Math.min(mb.w,Math.floor(_7.w*0.75)),h=Math.min(mb.h,Math.floor(_7.h*0.75));
-if(this._singleChild&&this._singleChild.resize){
-this._singleChildOriginalStyle=this._singleChild.domNode.style.cssText;
-this._singleChild.resize({w:w,h:h});
-}else{
-dojo.style(this.containerNode,{width:w+"px",height:h+"px",overflow:"auto",position:"relative"});
-}
-}else{
-if(this._singleChild&&this._singleChild.resize){
-this._singleChild.resize();
-}
-}
-},_position:function(){
-if(!dojo.hasClass(dojo.body(),"dojoMove")){
-var _8=this.domNode,_9=dojo.window.getBox(),p=this._relativePosition,bb=p?null:dojo._getBorderBox(_8),l=Math.floor(_9.l+(p?p.x:(_9.w-bb.w)/2)),t=Math.floor(_9.t+(p?p.y:(_9.h-bb.h)/2));
-dojo.style(_8,{left:l+"px",top:t+"px"});
-}
-},_onKey:function(_a){
-var ds=dijit._dialogStack;
-if(ds[ds.length-1]!=this){
-return;
-}
-if(_a.charOrCode){
-var dk=dojo.keys;
-var _b=_a.target;
-if(_a.charOrCode===dk.TAB){
-this._getFocusItems(this.domNode);
-}
-var _c=(this._firstFocusItem==this._lastFocusItem);
-if(_b==this._firstFocusItem&&_a.shiftKey&&_a.charOrCode===dk.TAB){
-if(!_c){
-dijit.focus(this._lastFocusItem);
-}
-dojo.stopEvent(_a);
-}else{
-if(_b==this._lastFocusItem&&_a.charOrCode===dk.TAB&&!_a.shiftKey){
-if(!_c){
-dijit.focus(this._firstFocusItem);
-}
-dojo.stopEvent(_a);
-}else{
-while(_b){
-if(_b==this.domNode||dojo.hasClass(_b,"dijitPopup")){
-if(_a.charOrCode==dk.ESCAPE){
-this.onCancel();
-}else{
-return;
-}
-}
-_b=_b.parentNode;
-}
-if(_a.charOrCode!==dk.TAB){
-dojo.stopEvent(_a);
-}else{
-if(!dojo.isOpera){
-try{
-this._firstFocusItem.focus();
-}
-catch(e){
-}
-}
-}
-}
-}
-}
-},show:function(){
-if(this.open){
-return;
-}
-if(!this._alreadyInitialized){
-this._setup();
-this._alreadyInitialized=true;
-}
-if(this._fadeOut.status()=="playing"){
-this._fadeOut.stop();
-}
-this._modalconnects.push(dojo.connect(window,"onscroll",this,"layout"));
-this._modalconnects.push(dojo.connect(window,"onresize",this,function(){
-var _d=dojo.window.getBox();
-if(!this._oldViewport||_d.h!=this._oldViewport.h||_d.w!=this._oldViewport.w){
-this.layout();
-this._oldViewport=_d;
-}
-}));
-this._modalconnects.push(dojo.connect(dojo.doc.documentElement,"onkeypress",this,"_onKey"));
-dojo.style(this.domNode,{opacity:0,display:""});
-this.open=true;
-this._onShow();
-this._size();
-this._position();
-dijit._dialogStack.push(this);
-this._fadeIn.play();
-this._savedFocus=dijit.getFocus(this);
-},hide:function(){
-var ds=dijit._dialogStack;
-if(!this._alreadyInitialized||this!=ds[ds.length-1]){
-return;
-}
-if(this._fadeIn.status()=="playing"){
-this._fadeIn.stop();
-}
-ds.pop();
-this._fadeOut.play();
-if(this._scrollConnected){
-this._scrollConnected=false;
-}
-dojo.forEach(this._modalconnects,dojo.disconnect);
-this._modalconnects=[];
-if(this._relativePosition){
-delete this._relativePosition;
-}
-this.open=false;
-this.onHide();
-},layout:function(){
-if(this.domNode.style.display!="none"){
-if(dijit._underlay){
-dijit._underlay.layout();
-}
-this._position();
-}
-},destroy:function(){
-dojo.forEach(this._modalconnects,dojo.disconnect);
-if(this.refocus&&this.open){
-setTimeout(dojo.hitch(dijit,"focus",this._savedFocus),25);
-}
-this.inherited(arguments);
-}});
-dojo.declare("dijit.Dialog",[dijit.layout.ContentPane,dijit._DialogBase],{});
-dijit._dialogStack=[];
+dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
 dojo.require("dijit.TooltipDialog");
+
+
+// dijit/TooltipDialog required for back-compat.  TODO: remove in 2.0
+
+/*=====
+dijit._underlay = function(kwArgs){
+       // summary:
+       //              A shared instance of a `dijit.DialogUnderlay`
+       //
+       // description:
+       //              A shared instance of a `dijit.DialogUnderlay` created and
+       //              used by `dijit.Dialog`, though never created until some Dialog
+       //              or subclass thereof is shown.
+};
+=====*/
+dojo.declare(
+       "dijit._DialogBase",
+       [dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin, dijit._CssStateMixin],
+       {
+               // summary:
+               //              A modal dialog Widget
+               //
+               // description:
+               //              Pops up a modal dialog window, blocking access to the screen
+               //              and also graying out the screen Dialog is extended from
+               //              ContentPane so it supports all the same parameters (href, etc.)
+               //
+               // example:
+               // |    <div dojoType="dijit.Dialog" href="test.html"></div>
+               //
+               // example:
+               // |    var foo = new dijit.Dialog({ title: "test dialog", content: "test content" };
+               // |    dojo.body().appendChild(foo.domNode);
+               // |    foo.startup();
+
+               templateString: dojo.cache("dijit", "templates/Dialog.html", "<div class=\"dijitDialog\" role=\"dialog\" aria-labelledby=\"${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"ondijitclick: onCancel\" title=\"${buttonCancel}\" role=\"button\" tabIndex=\"-1\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),
+               
+               baseClass: "dijitDialog",
+               
+               cssStateNodes: {
+                       closeButtonNode: "dijitDialogCloseIcon"
+               },
+
+               attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+                       title: [
+                               { node: "titleNode", type: "innerHTML" },
+                               { node: "titleBar", type: "attribute" }
+                       ],
+                       "aria-describedby":""
+               }),
+
+               // open: [readonly] Boolean
+               //              True if Dialog is currently displayed on screen.
+               open: false,
+
+               // duration: Integer
+               //              The time in milliseconds it takes the dialog to fade in and out
+               duration: dijit.defaultDuration,
+
+               // refocus: Boolean
+               //              A Toggle to modify the default focus behavior of a Dialog, which
+               //              is to re-focus the element which had focus before being opened.
+               //              False will disable refocusing. Default: true
+               refocus: true,
+
+               // autofocus: Boolean
+               //              A Toggle to modify the default focus behavior of a Dialog, which
+               //              is to focus on the first dialog element after opening the dialog.
+               //              False will disable autofocusing. Default: true
+               autofocus: true,
+
+               // _firstFocusItem: [private readonly] DomNode
+               //              The pointer to the first focusable node in the dialog.
+               //              Set by `dijit._DialogMixin._getFocusItems`.
+               _firstFocusItem: null,
+
+               // _lastFocusItem: [private readonly] DomNode
+               //              The pointer to which node has focus prior to our dialog.
+               //              Set by `dijit._DialogMixin._getFocusItems`.
+               _lastFocusItem: null,
+
+               // doLayout: [protected] Boolean
+               //              Don't change this parameter from the default value.
+               //              This ContentPane parameter doesn't make sense for Dialog, since Dialog
+               //              is never a child of a layout container, nor can you specify the size of
+               //              Dialog in order to control the size of an inner widget.
+               doLayout: false,
+
+               // draggable: Boolean
+               //              Toggles the moveable aspect of the Dialog. If true, Dialog
+               //              can be dragged by it's title. If false it will remain centered
+               //              in the viewport.
+               draggable: true,
+
+               //aria-describedby: String
+               //              Allows the user to add an aria-describedby attribute onto the dialog.   The value should
+               //              be the id of the container element of text that describes the dialog purpose (usually
+               //              the first text in the dialog).
+               //              <div dojoType="dijit.Dialog" aria-describedby="intro" .....>
+               //                      <div id="intro">Introductory text</div>
+               //                      <div>rest of dialog contents</div>
+               //              </div>
+               "aria-describedby":"",
+
+               postMixInProperties: function(){
+                       var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
+                       dojo.mixin(this, _nlsResources);
+                       this.inherited(arguments);
+               },
+
+               postCreate: function(){
+                       dojo.style(this.domNode, {
+                               display: "none",
+                               position:"absolute"
+                       });
+                       dojo.body().appendChild(this.domNode);
+
+                       this.inherited(arguments);
+
+                       this.connect(this, "onExecute", "hide");
+                       this.connect(this, "onCancel", "hide");
+                       this._modalconnects = [];
+               },
+
+               onLoad: function(){
+                       // summary:
+                       //              Called when data has been loaded from an href.
+                       //              Unlike most other callbacks, this function can be connected to (via `dojo.connect`)
+                       //              but should *not* be overridden.
+                       // tags:
+                       //              callback
+
+                       // when href is specified we need to reposition the dialog after the data is loaded
+                       // and find the focusable elements
+                       this._position();
+                       if(this.autofocus && dijit._DialogLevelManager.isTop(this)){
+                               this._getFocusItems(this.domNode);
+                               dijit.focus(this._firstFocusItem);
+                       }
+                       this.inherited(arguments);
+               },
+
+               _endDrag: function(e){
+                       // summary:
+                       //              Called after dragging the Dialog. Saves the position of the dialog in the viewport.
+                       // tags:
+                       //              private
+                       if(e && e.node && e.node === this.domNode){
+                               this._relativePosition = dojo.position(e.node);
+                       }
+               },
+
+               _setup: function(){
+                       // summary:
+                       //              Stuff we need to do before showing the Dialog for the first
+                       //              time (but we defer it until right beforehand, for
+                       //              performance reasons).
+                       // tags:
+                       //              private
+
+                       var node = this.domNode;
+
+                       if(this.titleBar && this.draggable){
+                               this._moveable = (dojo.isIE == 6) ?
+                                       new dojo.dnd.TimedMoveable(node, { handle: this.titleBar }) :   // prevent overload, see #5285
+                                       new dojo.dnd.Moveable(node, { handle: this.titleBar, timeout: 0 });
+                               this._dndListener = dojo.subscribe("/dnd/move/stop",this,"_endDrag");
+                       }else{
+                               dojo.addClass(node,"dijitDialogFixed");
+                       }
+
+                       this.underlayAttrs = {
+                               dialogId: this.id,
+                               "class": dojo.map(this["class"].split(/\s/), function(s){ return s+"_underlay"; }).join(" ")
+                       };
+               },
+
+               _size: function(){
+                       // summary:
+                       //              If necessary, shrink dialog contents so dialog fits in viewport
+                       // tags:
+                       //              private
+
+                       this._checkIfSingleChild();
+
+                       // If we resized the dialog contents earlier, reset them back to original size, so
+                       // that if the user later increases the viewport size, the dialog can display w/out a scrollbar.
+                       // Need to do this before the dojo.marginBox(this.domNode) call below.
+                       if(this._singleChild){
+                               if(this._singleChildOriginalStyle){
+                                       this._singleChild.domNode.style.cssText = this._singleChildOriginalStyle;
+                               }
+                               delete this._singleChildOriginalStyle;
+                       }else{
+                               dojo.style(this.containerNode, {
+                                       width:"auto",
+                                       height:"auto"
+                               });
+                       }
+
+                       var mb = dojo._getMarginSize(this.domNode);
+                       var viewport = dojo.window.getBox();
+                       if(mb.w >= viewport.w || mb.h >= viewport.h){
+                               // Reduce size of dialog contents so that dialog fits in viewport
+
+                               var w = Math.min(mb.w, Math.floor(viewport.w * 0.75)),
+                                       h = Math.min(mb.h, Math.floor(viewport.h * 0.75));
+
+                               if(this._singleChild && this._singleChild.resize){
+                                       this._singleChildOriginalStyle = this._singleChild.domNode.style.cssText;
+                                       this._singleChild.resize({w: w, h: h});
+                               }else{
+                                       dojo.style(this.containerNode, {
+                                               width: w + "px",
+                                               height: h + "px",
+                                               overflow: "auto",
+                                               position: "relative"    // workaround IE bug moving scrollbar or dragging dialog
+                                       });
+                               }
+                       }else{
+                               if(this._singleChild && this._singleChild.resize){
+                                       this._singleChild.resize();
+                               }
+                       }
+               },
+
+               _position: function(){
+                       // summary:
+                       //              Position modal dialog in the viewport. If no relative offset
+                       //              in the viewport has been determined (by dragging, for instance),
+                       //              center the node. Otherwise, use the Dialog's stored relative offset,
+                       //              and position the node to top: left: values based on the viewport.
+                       // tags:
+                       //              private
+                       if(!dojo.hasClass(dojo.body(),"dojoMove")){
+                               var node = this.domNode,
+                                       viewport = dojo.window.getBox(),
+                                       p = this._relativePosition,
+                                       bb = p ? null : dojo._getBorderBox(node),
+                                       l = Math.floor(viewport.l + (p ? p.x : (viewport.w - bb.w) / 2)),
+                                       t = Math.floor(viewport.t + (p ? p.y : (viewport.h - bb.h) / 2))
+                               ;
+                               dojo.style(node,{
+                                       left: l + "px",
+                                       top: t + "px"
+                               });
+                       }
+               },
+
+               _onKey: function(/*Event*/ evt){
+                       // summary:
+                       //              Handles the keyboard events for accessibility reasons
+                       // tags:
+                       //              private
+
+                       if(evt.charOrCode){
+                               var dk = dojo.keys;
+                               var node = evt.target;
+                               if(evt.charOrCode === dk.TAB){
+                                       this._getFocusItems(this.domNode);
+                               }
+                               var singleFocusItem = (this._firstFocusItem == this._lastFocusItem);
+                               // see if we are shift-tabbing from first focusable item on dialog
+                               if(node == this._firstFocusItem && evt.shiftKey && evt.charOrCode === dk.TAB){
+                                       if(!singleFocusItem){
+                                               dijit.focus(this._lastFocusItem); // send focus to last item in dialog
+                                       }
+                                       dojo.stopEvent(evt);
+                               }else if(node == this._lastFocusItem && evt.charOrCode === dk.TAB && !evt.shiftKey){
+                                       if(!singleFocusItem){
+                                               dijit.focus(this._firstFocusItem); // send focus to first item in dialog
+                                       }
+                                       dojo.stopEvent(evt);
+                               }else{
+                                       // see if the key is for the dialog
+                                       while(node){
+                                               if(node == this.domNode || dojo.hasClass(node, "dijitPopup")){
+                                                       if(evt.charOrCode == dk.ESCAPE){
+                                                               this.onCancel();
+                                                       }else{
+                                                               return; // just let it go
+                                                       }
+                                               }
+                                               node = node.parentNode;
+                                       }
+                                       // this key is for the disabled document window
+                                       if(evt.charOrCode !== dk.TAB){ // allow tabbing into the dialog for a11y
+                                               dojo.stopEvent(evt);
+                                       // opera won't tab to a div
+                                       }else if(!dojo.isOpera){
+                                               try{
+                                                       this._firstFocusItem.focus();
+                                               }catch(e){ /*squelch*/ }
+                                       }
+                               }
+                       }
+               },
+
+               show: function(){
+                       // summary:
+                       //              Display the dialog
+                       // returns: dojo.Deferred
+                       //              Deferred object that resolves when the display animation is complete
+
+                       if(this.open){ return; }
+
+                       if(!this._started){
+                               this.startup();
+                       }
+
+                       // first time we show the dialog, there's some initialization stuff to do
+                       if(!this._alreadyInitialized){
+                               this._setup();
+                               this._alreadyInitialized=true;
+                       }
+
+                       if(this._fadeOutDeferred){
+                               this._fadeOutDeferred.cancel();
+                       }
+
+                       this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout"));
+                       this._modalconnects.push(dojo.connect(window, "onresize", this, function(){
+                               // IE gives spurious resize events and can actually get stuck
+                               // in an infinite loop if we don't ignore them
+                               var viewport = dojo.window.getBox();
+                               if(!this._oldViewport ||
+                                               viewport.h != this._oldViewport.h ||
+                                               viewport.w != this._oldViewport.w){
+                                       this.layout();
+                                       this._oldViewport = viewport;
+                               }
+                       }));
+                       this._modalconnects.push(dojo.connect(this.domNode, "onkeypress", this, "_onKey"));
+
+                       dojo.style(this.domNode, {
+                               opacity:0,
+                               display:""
+                       });
+
+                       this._set("open", true);
+                       this._onShow(); // lazy load trigger
+
+                       this._size();
+                       this._position();
+
+                       // fade-in Animation object, setup below
+                       var fadeIn;
+
+                       this._fadeInDeferred = new dojo.Deferred(dojo.hitch(this, function(){
+                               fadeIn.stop();
+                               delete this._fadeInDeferred;
+                       }));
+
+                       fadeIn = dojo.fadeIn({
+                               node: this.domNode,
+                               duration: this.duration,
+                               beforeBegin: dojo.hitch(this, function(){
+                                       dijit._DialogLevelManager.show(this, this.underlayAttrs);
+                               }),
+                               onEnd: dojo.hitch(this, function(){
+                                       if(this.autofocus && dijit._DialogLevelManager.isTop(this)){
+                                               // find focusable items each time dialog is shown since if dialog contains a widget the
+                                               // first focusable items can change
+                                               this._getFocusItems(this.domNode);
+                                               dijit.focus(this._firstFocusItem);
+                                       }
+                                       this._fadeInDeferred.callback(true);
+                                       delete this._fadeInDeferred;
+                               })
+                       }).play();
+                       
+                       return this._fadeInDeferred;
+               },
+
+               hide: function(){
+                       // summary:
+                       //              Hide the dialog
+                       // returns: dojo.Deferred
+                       //              Deferred object that resolves when the hide animation is complete
+
+                       // if we haven't been initialized yet then we aren't showing and we can just return
+                       if(!this._alreadyInitialized){
+                               return;
+                       }
+                       if(this._fadeInDeferred){
+                               this._fadeInDeferred.cancel();
+                       }
+
+                       // fade-in Animation object, setup below
+                       var fadeOut;
+
+                       this._fadeOutDeferred = new dojo.Deferred(dojo.hitch(this, function(){
+                               fadeOut.stop();
+                               delete this._fadeOutDeferred;
+                       }));
+
+                       fadeOut = dojo.fadeOut({
+                               node: this.domNode,
+                               duration: this.duration,
+                               onEnd: dojo.hitch(this, function(){
+                                       this.domNode.style.display = "none";
+                                       dijit._DialogLevelManager.hide(this);
+                                       this.onHide();
+                                       this._fadeOutDeferred.callback(true);
+                                       delete this._fadeOutDeferred;
+                               })
+                        }).play();
+
+                       if(this._scrollConnected){
+                               this._scrollConnected = false;
+                       }
+                       dojo.forEach(this._modalconnects, dojo.disconnect);
+                       this._modalconnects = [];
+
+                       if(this._relativePosition){
+                               delete this._relativePosition;
+                       }
+                       this._set("open", false);
+
+                       return this._fadeOutDeferred;
+               },
+
+               layout: function(){
+                       // summary:
+                       //              Position the Dialog and the underlay
+                       // tags:
+                       //              private
+                       if(this.domNode.style.display != "none"){
+                               if(dijit._underlay){    // avoid race condition during show()
+                                       dijit._underlay.layout();
+                               }
+                               this._position();
+                       }
+               },
+
+               destroy: function(){
+                       if(this._fadeInDeferred){
+                               this._fadeInDeferred.cancel();
+                       }
+                       if(this._fadeOutDeferred){
+                               this._fadeOutDeferred.cancel();
+                       }
+                       if(this._moveable){
+                               this._moveable.destroy();
+                       }
+                       if(this._dndListener){
+                               dojo.unsubscribe(this._dndListener);
+                       }
+                       dojo.forEach(this._modalconnects, dojo.disconnect);
+
+                       dijit._DialogLevelManager.hide(this);
+
+                       this.inherited(arguments);
+               }
+       }
+);
+
+dojo.declare(
+       "dijit.Dialog",
+       [dijit.layout.ContentPane, dijit._DialogBase],
+       {}
+);
+
+dijit._DialogLevelManager = {
+       // summary:
+       //              Controls the various active "levels" on the page, starting with the
+       //              stuff initially visible on the page (at z-index 0), and then having an entry for
+       //              each Dialog shown.
+
+       show: function(/*dijit._Widget*/ dialog, /*Object*/ underlayAttrs){
+               // summary:
+               //              Call right before fade-in animation for new dialog.
+               //              Saves current focus, displays/adjusts underlay for new dialog,
+               //              and sets the z-index of the dialog itself.
+               //
+               //              New dialog will be displayed on top of all currently displayed dialogs.
+               //
+               //              Caller is responsible for setting focus in new dialog after the fade-in
+               //              animation completes.
+
+               var ds = dijit._dialogStack;
+
+               // Save current focus
+               ds[ds.length-1].focus = dijit.getFocus(dialog);
+
+               // Display the underlay, or if already displayed then adjust for this new dialog
+               var underlay = dijit._underlay;
+               if(!underlay || underlay._destroyed){
+                       underlay = dijit._underlay = new dijit.DialogUnderlay(underlayAttrs);
+               }else{
+                       underlay.set(dialog.underlayAttrs);
+               }
+
+               // Set z-index a bit above previous dialog
+               var zIndex = ds[ds.length-1].dialog ? ds[ds.length-1].zIndex + 2 : 950;
+               if(ds.length == 1){     // first dialog
+                       underlay.show();
+               }
+               dojo.style(dijit._underlay.domNode, 'zIndex', zIndex - 1);
+
+               // Dialog
+               dojo.style(dialog.domNode, 'zIndex', zIndex);
+
+               ds.push({dialog: dialog, underlayAttrs: underlayAttrs, zIndex: zIndex});
+       },
+
+       hide: function(/*dijit._Widget*/ dialog){
+               // summary:
+               //              Called when the specified dialog is hidden/destroyed, after the fade-out
+               //              animation ends, in order to reset page focus, fix the underlay, etc.
+               //              If the specified dialog isn't open then does nothing.
+               //
+               //              Caller is responsible for either setting display:none on the dialog domNode,
+               //              or calling dijit.popup.hide(), or removing it from the page DOM.
+
+               var ds = dijit._dialogStack;
+
+               if(ds[ds.length-1].dialog == dialog){
+                       // Removing the top (or only) dialog in the stack, return focus
+                       // to previous dialog
+
+                       ds.pop();
+
+                       var pd = ds[ds.length-1];       // the new active dialog (or the base page itself)
+
+                       // Adjust underlay
+                       if(ds.length == 1){
+                               // Returning to original page.
+                               // Hide the underlay, unless the underlay widget has already been destroyed
+                               // because we are being called during page unload (when all widgets are destroyed)
+                               if(!dijit._underlay._destroyed){
+                                       dijit._underlay.hide();
+                               }
+                       }else{
+                               // Popping back to previous dialog, adjust underlay
+                               dojo.style(dijit._underlay.domNode, 'zIndex', pd.zIndex - 1);
+                               dijit._underlay.set(pd.underlayAttrs);
+                       }
+
+                       // Adjust focus
+                       if(dialog.refocus){
+                               // If we are returning control to a previous dialog but for some reason
+                               // that dialog didn't have a focused field, set focus to first focusable item.
+                               // This situation could happen if two dialogs appeared at nearly the same time,
+                               // since a dialog doesn't set it's focus until the fade-in is finished.
+                               var focus = pd.focus;
+                               if(!focus || (pd.dialog && !dojo.isDescendant(focus.node, pd.dialog.domNode))){
+                                       pd.dialog._getFocusItems(pd.dialog.domNode);
+                                       focus = pd.dialog._firstFocusItem;
+                               }
+       
+                               try{
+                                       dijit.focus(focus);
+                               }catch(e){
+                                       /* focus() will fail if user opened the dialog by clicking a non-focusable element */
+                               }
+                       }
+               }else{
+                       // Removing a dialog out of order (#9944, #10705).
+                       // Don't need to mess with underlay or z-index or anything.
+                       var idx = dojo.indexOf(dojo.map(ds, function(elem){return elem.dialog}), dialog);
+                       if(idx != -1){
+                               ds.splice(idx, 1);
+                       }
+               }
+       },
+
+       isTop: function(/*dijit._Widget*/ dialog){
+               // summary:
+               //              Returns true if specified Dialog is the top in the task
+               var ds = dijit._dialogStack;
+               return ds[ds.length-1].dialog == dialog;
+       }
+};
+
+// Stack representing the various active "levels" on the page, starting with the
+// stuff initially visible on the page (at z-index 0), and then having an entry for
+// each Dialog shown.
+// Each element in stack has form {
+//             dialog: dialogWidget,
+//             focus: returnFromGetFocus(),
+//             underlayAttrs: attributes to set on underlay (when this widget is active)
+// }
+dijit._dialogStack = [
+       {dialog: null, focus: null, underlayAttrs: null}        // entry for stuff at z-index: 0
+];
+
 }
index 0056462a5d97caf3dcf6f923498b21dfca0e2af1..72557800d62fe1c08b84485161df3fed03fc3077 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.DialogUnderlay"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.DialogUnderlay"] = true;
 dojo.provide("dijit.DialogUnderlay");
 dojo.require("dojo.window");
 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=dojo.window.getBox();
-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);
-}});
+
+
+dojo.declare(
+       "dijit.DialogUnderlay",
+       [dijit._Widget, dijit._Templated],
+       {
+               // summary:
+               //              The component that blocks the screen behind a `dijit.Dialog`
+               //
+               // description:
+               //              A component used to block input behind a `dijit.Dialog`. Only a single
+               //              instance of this widget is created by `dijit.Dialog`, and saved as
+               //              a reference to be shared between all Dialogs as `dijit._underlay`
+               //
+               //              The underlay itself can be styled based on and id:
+               //      |       #myDialog_underlay { background-color:red; }
+               //
+               //              In the case of `dijit.Dialog`, this id is based on the id of the Dialog,
+               //              suffixed with _underlay.
+
+               // Template has two divs; outer div is used for fade-in/fade-out, and also to hold background iframe.
+               // Inner div has opacity specified in CSS file.
+               templateString: "<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",
+
+               // Parameters on creation or updatable later
+
+               // dialogId: String
+               //              Id of the dialog.... DialogUnderlay's id is based on this id
+               dialogId: "",
+
+               // class: String
+               //              This class name is used on the DialogUnderlay node, in addition to dijitDialogUnderlay
+               "class": "",
+
+               attributeMap: { id: "domNode" },
+
+               _setDialogIdAttr: function(id){
+                       dojo.attr(this.node, "id", id + "_underlay");
+                       this._set("dialogId", id);
+               },
+
+               _setClassAttr: function(clazz){
+                       this.node.className = "dijitDialogUnderlay " + clazz;
+                       this._set("class", clazz);
+               },
+
+               postCreate: function(){
+                       // summary:
+                       //              Append the underlay to the body
+                       dojo.body().appendChild(this.domNode);
+               },
+
+               layout: function(){
+                       // summary:
+                       //              Sets the background to the size of the viewport
+                       //
+                       // description:
+                       //              Sets the background to the size of the viewport (rather than the size
+                       //              of the document) since we need to cover the whole browser window, even
+                       //              if the document is only a few lines long.
+                       // tags:
+                       //              private
+
+                       var is = this.node.style,
+                               os = this.domNode.style;
+
+                       // hide the background temporarily, so that the background itself isn't
+                       // causing scrollbars to appear (might happen when user shrinks browser
+                       // window and then we are called to resize)
+                       os.display = "none";
+
+                       // then resize and show
+                       var viewport = dojo.window.getBox();
+                       os.top = viewport.t + "px";
+                       os.left = viewport.l + "px";
+                       is.width = viewport.w + "px";
+                       is.height = viewport.h + "px";
+                       os.display = "block";
+               },
+
+               show: function(){
+                       // summary:
+                       //              Show the dialog underlay
+                       this.domNode.style.display = "block";
+                       this.layout();
+                       this.bgIframe = new dijit.BackgroundIframe(this.domNode);
+               },
+
+               hide: function(){
+                       // summary:
+                       //              Hides the dialog underlay
+                       this.bgIframe.destroy();
+                       delete this.bgIframe;
+                       this.domNode.style.display = "none";
+               }
+       }
+);
+
 }
index 69258eade866de87ed1058f1e630f8204fe00404..b77dd7165b4464fd28d746ce10210c9c4918b0f5 100644 (file)
@@ -1,12 +1,12 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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"]){
-dojo._hasResource["dijit.Editor"]=true;
+if(!dojo._hasResource["dijit.Editor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Editor"] = true;
 dojo.provide("dijit.Editor");
 dojo.require("dijit._editor.RichText");
 dojo.require("dijit.Toolbar");
@@ -17,457 +17,778 @@ dojo.require("dijit._editor.range");
 dojo.require("dijit._Container");
 dojo.require("dojo.i18n");
 dojo.require("dijit.layout._LayoutWidget");
-dojo.require("dijit._editor.range");
-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,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.declare("dijit.Editor",dijit._editor.RichText,{plugins:null,extraPlugins:null,constructor:function(){
-if(!dojo.isArray(this.plugins)){
-this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|","insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull","dijit._editor.plugins.EnterKeyHandling"];
-}
-this._plugins=[];
-this._editInterval=this.editActionInterval*1000;
-if(dojo.isIE){
-this.events.push("onBeforeDeactivate");
-this.events.push("onBeforeActivate");
-}
-},postCreate:function(){
-this._steps=this._steps.slice(0);
-this._undoedSteps=this._undoedSteps.slice(0);
-if(dojo.isArray(this.extraPlugins)){
-this.plugins=this.plugins.concat(this.extraPlugins);
-}
-this.setValueDeferred=new dojo.Deferred();
-this.inherited(arguments);
-this.commands=dojo.i18n.getLocalization("dijit._editor","commands",this.lang);
-if(!this.toolbar){
-this.toolbar=new dijit.Toolbar({dir:this.dir,lang:this.lang});
-this.header.appendChild(this.toolbar.domNode);
-}
-dojo.forEach(this.plugins,this.addPlugin,this);
-this.setValueDeferred.callback(true);
-dojo.addClass(this.iframe.parentNode,"dijitEditorIFrameContainer");
-dojo.addClass(this.iframe,"dijitEditorIFrame");
-dojo.attr(this.iframe,"allowTransparency",true);
-if(dojo.isWebKit){
-dojo.style(this.domNode,"KhtmlUserSelect","none");
-}
-this.toolbar.startup();
-this.onNormalizedDisplayChanged();
-},destroy:function(){
-dojo.forEach(this._plugins,function(p){
-if(p&&p.destroy){
-p.destroy();
-}
-});
-this._plugins=[];
-this.toolbar.destroyRecursive();
-delete this.toolbar;
-this.inherited(arguments);
-},addPlugin:function(_1,_2){
-var _3=dojo.isString(_1)?{name:_1}:_1;
-if(!_3.setEditor){
-var o={"args":_3,"plugin":null,"editor":this};
-dojo.publish(dijit._scopeName+".Editor.getPlugin",[o]);
-if(!o.plugin){
-var pc=dojo.getObject(_3.name);
-if(pc){
-o.plugin=new pc(_3);
-}
-}
-if(!o.plugin){
-console.warn("Cannot find plugin",_1);
-return;
-}
-_1=o.plugin;
-}
-if(arguments.length>1){
-this._plugins[_2]=_1;
-}else{
-this._plugins.push(_1);
-}
-_1.setEditor(this);
-if(dojo.isFunction(_1.setToolbar)){
-_1.setToolbar(this.toolbar);
-}
-},startup:function(){
-},resize:function(_4){
-if(_4){
-dijit.layout._LayoutWidget.prototype.resize.apply(this,arguments);
-}
-},layout:function(){
-var _5=(this._contentBox.h-(this.getHeaderHeight()+this.getFooterHeight()+dojo._getPadBorderExtents(this.iframe.parentNode).h+dojo._getMarginExtents(this.iframe.parentNode).h));
-this.editingArea.style.height=_5+"px";
-if(this.iframe){
-this.iframe.style.height="100%";
-}
-this._layoutMode=true;
-},_onIEMouseDown:function(e){
-var _6;
-var b=this.document.body;
-var _7=b.clientWidth;
-var _8=b.clientHeight;
-var _9=b.clientLeft;
-var _a=b.offsetWidth;
-var _b=b.offsetHeight;
-var _c=b.offsetLeft;
-bodyDir=b.dir?b.dir.toLowerCase():"";
-if(bodyDir!="rtl"){
-if(_7<_a&&e.x>_7&&e.x<_a){
-_6=true;
-}
-}else{
-if(e.x<_9&&e.x>_c){
-_6=true;
-}
-}
-if(!_6){
-if(_8<_b&&e.y>_8&&e.y<_b){
-_6=true;
-}
-}
-if(!_6){
-delete this._cursorToStart;
-delete this._savedSelection;
-if(e.target.tagName=="BODY"){
-setTimeout(dojo.hitch(this,"placeCursorAtEnd"),0);
-}
-this.inherited(arguments);
-}
-},onBeforeActivate:function(e){
-this._restoreSelection();
-},onBeforeDeactivate:function(e){
-if(this.customUndo){
-this.endEditing(true);
-}
-if(e.target.tagName!="BODY"){
-this._saveSelection();
-}
-},customUndo:dojo.isIE||dojo.isWebKit,editActionInterval:3,beginEditing:function(_d){
-if(!this._inEditing){
-this._inEditing=true;
-this._beginEditing(_d);
-}
-if(this.editActionInterval>0){
-if(this._editTimer){
-clearTimeout(this._editTimer);
-}
-this._editTimer=setTimeout(dojo.hitch(this,this.endEditing),this._editInterval);
-}
-},_steps:[],_undoedSteps:[],execCommand:function(_e){
-if(this.customUndo&&(_e=="undo"||_e=="redo")){
-return this[_e]();
-}else{
-if(this.customUndo){
-this.endEditing();
-this._beginEditing();
-}
-var r;
-try{
-r=this.inherited("execCommand",arguments);
-if(dojo.isWebKit&&_e=="paste"&&!r){
-throw {code:1011};
-}
-}
-catch(e){
-if(e.code==1011&&/copy|cut|paste/.test(_e)){
-var _f=dojo.string.substitute,_10={cut:"X",copy:"C",paste:"V"};
-alert(_f(this.commands.systemShortcut,[this.commands[_e],_f(this.commands[dojo.isMac?"appleKey":"ctrlKey"],[_10[_e]])]));
-}
-r=false;
-}
-if(this.customUndo){
-this._endEditing();
-}
-return r;
-}
-},queryCommandEnabled:function(cmd){
-if(this.customUndo&&(cmd=="undo"||cmd=="redo")){
-return cmd=="undo"?(this._steps.length>1):(this._undoedSteps.length>0);
-}else{
-return this.inherited("queryCommandEnabled",arguments);
-}
-},_moveToBookmark:function(b){
-var _11=b.mark;
-var _12=b.mark;
-var col=b.isCollapsed;
-var r,_13,_14,sel;
-if(_12){
-if(dojo.isIE){
-if(dojo.isArray(_12)){
-_11=[];
-dojo.forEach(_12,function(n){
-_11.push(dijit.range.getNode(n,this.editNode));
-},this);
-dojo.withGlobal(this.window,"moveToBookmark",dijit,[{mark:_11,isCollapsed:col}]);
-}else{
-if(_12.startContainer&&_12.endContainer){
-sel=dijit.range.getSelection(this.window);
-if(sel&&sel.removeAllRanges){
-sel.removeAllRanges();
-r=dijit.range.create(this.window);
-_13=dijit.range.getNode(_12.startContainer,this.editNode);
-_14=dijit.range.getNode(_12.endContainer,this.editNode);
-if(_13&&_14){
-r.setStart(_13,_12.startOffset);
-r.setEnd(_14,_12.endOffset);
-sel.addRange(r);
-}
-}
-}
-}
-}else{
-sel=dijit.range.getSelection(this.window);
-if(sel&&sel.removeAllRanges){
-sel.removeAllRanges();
-r=dijit.range.create(this.window);
-_13=dijit.range.getNode(_12.startContainer,this.editNode);
-_14=dijit.range.getNode(_12.endContainer,this.editNode);
-if(_13&&_14){
-r.setStart(_13,_12.startOffset);
-r.setEnd(_14,_12.endOffset);
-sel.addRange(r);
-}
-}
-}
-}
-},_changeToStep:function(_15,to){
-this.setValue(to.text);
-var b=to.bookmark;
-if(!b){
-return;
-}
-this._moveToBookmark(b);
-},undo:function(){
-var ret=false;
-if(!this._undoRedoActive){
-this._undoRedoActive=true;
-this.endEditing(true);
-var s=this._steps.pop();
-if(s&&this._steps.length>0){
-this.focus();
-this._changeToStep(s,this._steps[this._steps.length-1]);
-this._undoedSteps.push(s);
-this.onDisplayChanged();
-delete this._undoRedoActive;
-ret=true;
-}
-delete this._undoRedoActive;
-}
-return ret;
-},redo:function(){
-var ret=false;
-if(!this._undoRedoActive){
-this._undoRedoActive=true;
-this.endEditing(true);
-var s=this._undoedSteps.pop();
-if(s&&this._steps.length>0){
-this.focus();
-this._changeToStep(this._steps[this._steps.length-1],s);
-this._steps.push(s);
-this.onDisplayChanged();
-ret=true;
-}
-delete this._undoRedoActive;
-}
-return ret;
-},endEditing:function(_16){
-if(this._editTimer){
-clearTimeout(this._editTimer);
-}
-if(this._inEditing){
-this._endEditing(_16);
-this._inEditing=false;
-}
-},_getBookmark:function(){
-var b=dojo.withGlobal(this.window,dijit.getBookmark);
-var tmp=[];
-if(b&&b.mark){
-var _17=b.mark;
-if(dojo.isIE){
-var sel=dijit.range.getSelection(this.window);
-if(!dojo.isArray(_17)){
-if(sel){
-var _18;
-if(sel.rangeCount){
-_18=sel.getRangeAt(0);
-}
-if(_18){
-b.mark=_18.cloneRange();
-}else{
-b.mark=dojo.withGlobal(this.window,dijit.getBookmark);
-}
-}
-}else{
-dojo.forEach(b.mark,function(n){
-tmp.push(dijit.range.getIndex(n,this.editNode).o);
-},this);
-b.mark=tmp;
-}
-}
-try{
-if(b.mark&&b.mark.startContainer){
-tmp=dijit.range.getIndex(b.mark.startContainer,this.editNode).o;
-b.mark={startContainer:tmp,startOffset:b.mark.startOffset,endContainer:b.mark.endContainer===b.mark.startContainer?tmp:dijit.range.getIndex(b.mark.endContainer,this.editNode).o,endOffset:b.mark.endOffset};
-}
-}
-catch(e){
-b.mark=null;
-}
-}
-return b;
-},_beginEditing:function(cmd){
-if(this._steps.length===0){
-this._steps.push({"text":dijit._editor.getChildrenHtml(this.editNode),"bookmark":this._getBookmark()});
-}
-},_endEditing:function(_19){
-var v=dijit._editor.getChildrenHtml(this.editNode);
-this._undoedSteps=[];
-this._steps.push({text:v,bookmark:this._getBookmark()});
-},onKeyDown:function(e){
-if(!dojo.isIE&&!this.iframe&&e.keyCode==dojo.keys.TAB&&!this.tabIndent){
-this._saveSelection();
-}
-if(!this.customUndo){
-this.inherited(arguments);
-return;
-}
-var k=e.keyCode,ks=dojo.keys;
-if(e.ctrlKey&&!e.altKey){
-if(k==90||k==122){
-dojo.stopEvent(e);
-this.undo();
-return;
-}else{
-if(k==89||k==121){
-dojo.stopEvent(e);
-this.redo();
-return;
-}
-}
-}
-this.inherited(arguments);
-switch(k){
-case ks.ENTER:
-case ks.BACKSPACE:
-case ks.DELETE:
-this.beginEditing();
-break;
-case 88:
-case 86:
-if(e.ctrlKey&&!e.altKey&&!e.metaKey){
-this.endEditing();
-if(e.keyCode==88){
-this.beginEditing("cut");
-setTimeout(dojo.hitch(this,this.endEditing),1);
-}else{
-this.beginEditing("paste");
-setTimeout(dojo.hitch(this,this.endEditing),1);
-}
-break;
-}
-default:
-if(!e.ctrlKey&&!e.altKey&&!e.metaKey&&(e.keyCode<dojo.keys.F1||e.keyCode>dojo.keys.F15)){
-this.beginEditing();
-break;
-}
-case ks.ALT:
-this.endEditing();
-break;
-case ks.UP_ARROW:
-case ks.DOWN_ARROW:
-case ks.LEFT_ARROW:
-case ks.RIGHT_ARROW:
-case ks.HOME:
-case ks.END:
-case ks.PAGE_UP:
-case ks.PAGE_DOWN:
-this.endEditing(true);
-break;
-case ks.CTRL:
-case ks.SHIFT:
-case ks.TAB:
-break;
-}
-},_onBlur:function(){
-this.inherited("_onBlur",arguments);
-this.endEditing(true);
-},_saveSelection:function(){
-this._savedSelection=this._getBookmark();
-},_restoreSelection:function(){
-if(this._savedSelection){
-delete this._cursorToStart;
-if(dojo.withGlobal(this.window,"isCollapsed",dijit)){
-this._moveToBookmark(this._savedSelection);
-}
-delete this._savedSelection;
-}
-},onClick:function(){
-this.endEditing(true);
-this.inherited(arguments);
-},_setDisabledAttr:function(_1a){
-if(!this.disabled&&_1a){
-this._buttonEnabledPlugins=dojo.filter(this._plugins,function(p){
-if(p&&p.button&&!p.button.get("disabled")){
-p.button.set("disabled",true);
-return true;
-}
-return false;
-});
-}else{
-if(this.disabled&&!_1a){
-dojo.forEach(this._buttonEnabledPlugins,function(p){
-p.button.attr("disabled",false);
-p.updateState&&p.updateState();
-});
-}
-}
-this.inherited(arguments);
-},_setStateClass:function(){
-this.inherited(arguments);
-if(this.document&&this.document.body){
-dojo.style(this.document.body,"color",dojo.style(this.iframe,"color"));
-}
-}});
-dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
-if(o.plugin){
-return;
-}
-var _1b=o.args,p;
-var _1c=dijit._editor._Plugin;
-var _1d=_1b.name;
-switch(_1d){
-case "undo":
-case "redo":
-case "cut":
-case "copy":
-case "paste":
-case "insertOrderedList":
-case "insertUnorderedList":
-case "indent":
-case "outdent":
-case "justifyCenter":
-case "justifyFull":
-case "justifyLeft":
-case "justifyRight":
-case "delete":
-case "selectAll":
-case "removeFormat":
-case "unlink":
-case "insertHorizontalRule":
-p=new _1c({command:_1d});
-break;
-case "bold":
-case "italic":
-case "underline":
-case "strikethrough":
-case "subscript":
-case "superscript":
-p=new _1c({buttonClass:dijit.form.ToggleButton,command:_1d});
-break;
-case "|":
-p=new _1c({button:new dijit.ToolbarSeparator(),setEditor:function(_1e){
-this.editor=_1e;
-}});
-}
-o.plugin=p;
+dojo.requireLocalization("dijit._editor", "commands", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare(
+       "dijit.Editor",
+       dijit._editor.RichText,
+       {
+               // summary:
+               //              A rich text Editing widget
+               //
+               // description:
+               //              This widget provides basic WYSIWYG editing features, based on the browser's
+               //              underlying rich text editing capability, accompanied by a toolbar (`dijit.Toolbar`).
+               //              A plugin model is available to extend the editor's capabilities as well as the
+               //              the options available in the toolbar.  Content generation may vary across
+               //              browsers, and clipboard operations may have different results, to name
+               //              a few limitations.  Note: this widget should not be used with the HTML
+               //              &lt;TEXTAREA&gt; tag -- see dijit._editor.RichText for details.
+
+               // plugins: [const] Object[]
+               //              A list of plugin names (as strings) or instances (as objects)
+               //              for this widget.
+               //
+               //              When declared in markup, it might look like:
+               //      |       plugins="['bold',{name:'dijit._editor.plugins.FontChoice', command:'fontName', generic:true}]"
+               plugins: null,
+
+               // extraPlugins: [const] Object[]
+               //              A list of extra plugin names which will be appended to plugins array
+               extraPlugins: null,
+
+               constructor: function(){
+                       // summary:
+                       //              Runs on widget initialization to setup arrays etc.
+                       // tags:
+                       //              private
+
+                       if(!dojo.isArray(this.plugins)){
+                               this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|",
+                               "insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull",
+                               "dijit._editor.plugins.EnterKeyHandling" /*, "createLink"*/];
+                       }
+
+                       this._plugins=[];
+                       this._editInterval = this.editActionInterval * 1000;
+
+                       //IE will always lose focus when other element gets focus, while for FF and safari,
+                       //when no iframe is used, focus will be lost whenever another element gets focus.
+                       //For IE, we can connect to onBeforeDeactivate, which will be called right before
+                       //the focus is lost, so we can obtain the selected range. For other browsers,
+                       //no equivelent of onBeforeDeactivate, so we need to do two things to make sure
+                       //selection is properly saved before focus is lost: 1) when user clicks another
+                       //element in the page, in which case we listen to mousedown on the entire page and
+                       //see whether user clicks out of a focus editor, if so, save selection (focus will
+                       //only lost after onmousedown event is fired, so we can obtain correct caret pos.)
+                       //2) when user tabs away from the editor, which is handled in onKeyDown below.
+                       if(dojo.isIE){
+                               this.events.push("onBeforeDeactivate");
+                               this.events.push("onBeforeActivate");
+                       }
+               },
+
+               postMixInProperties: function() {
+                       // summary:
+                       //      Extension to make sure a deferred is in place before certain functions
+                       //      execute, like making sure all the plugins are properly inserted.
+
+                       // Set up a deferred so that the value isn't applied to the editor
+                       // until all the plugins load, needed to avoid timing condition
+                       // reported in #10537.
+                       this.setValueDeferred = new dojo.Deferred();
+                       this.inherited(arguments);
+               },
+       
+               postCreate: function(){
+                       //for custom undo/redo, if enabled.
+                       this._steps=this._steps.slice(0);
+                       this._undoedSteps=this._undoedSteps.slice(0);
+
+                       if(dojo.isArray(this.extraPlugins)){
+                               this.plugins=this.plugins.concat(this.extraPlugins);
+                       }
+
+                       this.inherited(arguments);
+
+                       this.commands = dojo.i18n.getLocalization("dijit._editor", "commands", this.lang);
+
+                       if(!this.toolbar){
+                               // if we haven't been assigned a toolbar, create one
+                               this.toolbar = new dijit.Toolbar({
+                                       dir: this.dir,
+                                       lang: this.lang
+                               });
+                               this.header.appendChild(this.toolbar.domNode);
+                       }
+
+                       dojo.forEach(this.plugins, this.addPlugin, this);
+
+                       // Okay, denote the value can now be set.
+                       this.setValueDeferred.callback(true);
+
+                       dojo.addClass(this.iframe.parentNode, "dijitEditorIFrameContainer");
+                       dojo.addClass(this.iframe, "dijitEditorIFrame");
+                       dojo.attr(this.iframe, "allowTransparency", true);
+
+                       if(dojo.isWebKit){
+                               // Disable selecting the entire editor by inadvertant double-clicks.
+                               // on buttons, title bar, etc.  Otherwise clicking too fast on
+                               // a button such as undo/redo selects the entire editor.
+                               dojo.style(this.domNode, "KhtmlUserSelect", "none");
+                       }
+                       this.toolbar.startup();
+                       this.onNormalizedDisplayChanged(); //update toolbar button status
+               },
+               destroy: function(){
+                       dojo.forEach(this._plugins, function(p){
+                               if(p && p.destroy){
+                                       p.destroy();
+                               }
+                       });
+                       this._plugins=[];
+                       this.toolbar.destroyRecursive();
+                       delete this.toolbar;
+                       this.inherited(arguments);
+               },
+               addPlugin: function(/*String||Object*/plugin, /*Integer?*/index){
+                       // summary:
+                       //              takes a plugin name as a string or a plugin instance and
+                       //              adds it to the toolbar and associates it with this editor
+                       //              instance. The resulting plugin is added to the Editor's
+                       //              plugins array. If index is passed, it's placed in the plugins
+                       //              array at that index. No big magic, but a nice helper for
+                       //              passing in plugin names via markup.
+                       //
+                       // plugin: String, args object or plugin instance
+                       //
+                       // args:
+                       //              This object will be passed to the plugin constructor
+                       //
+                       // index: Integer
+                       //              Used when creating an instance from
+                       //              something already in this.plugins. Ensures that the new
+                       //              instance is assigned to this.plugins at that index.
+                       var args=dojo.isString(plugin)?{name:plugin}:plugin;
+                       if(!args.setEditor){
+                               var o={"args":args,"plugin":null,"editor":this};
+                               dojo.publish(dijit._scopeName + ".Editor.getPlugin",[o]);
+                               if(!o.plugin){
+                                       var pc = dojo.getObject(args.name);
+                                       if(pc){
+                                               o.plugin=new pc(args);
+                                       }
+                               }
+                               if(!o.plugin){
+                                       console.warn('Cannot find plugin',plugin);
+                                       return;
+                               }
+                               plugin=o.plugin;
+                       }
+                       if(arguments.length > 1){
+                               this._plugins[index] = plugin;
+                       }else{
+                               this._plugins.push(plugin);
+                       }
+                       plugin.setEditor(this);
+                       if(dojo.isFunction(plugin.setToolbar)){
+                               plugin.setToolbar(this.toolbar);
+                       }
+               },
+               //the following 3 functions are required to make the editor play nice under a layout widget, see #4070
+               startup: function(){
+                       // summary:
+                       //              Exists to make Editor work as a child of a layout widget.
+                       //              Developers don't need to call this method.
+                       // tags:
+                       //              protected
+                       //console.log('startup',arguments);
+               },
+               resize: function(size){
+                       // summary:
+                       //              Resize the editor to the specified size, see `dijit.layout._LayoutWidget.resize`
+                       if(size){
+                               // we've been given a height/width for the entire editor (toolbar + contents), calls layout()
+                               // to split the allocated size between the toolbar and the contents
+                               dijit.layout._LayoutWidget.prototype.resize.apply(this, arguments);
+                       }
+                       /*
+                       else{
+                               // do nothing, the editor is already laid out correctly.   The user has probably specified
+                               // the height parameter, which was used to set a size on the iframe
+                       }
+                       */
+               },
+               layout: function(){
+                       // summary:
+                       //              Called from `dijit.layout._LayoutWidget.resize`.  This shouldn't be called directly
+                       // tags:
+                       //              protected
+
+                       // Converts the iframe (or rather the <div> surrounding it) to take all the available space
+                       // except what's needed for the header (toolbars) and footer (breadcrumbs, etc).
+                       // A class was added to the iframe container and some themes style it, so we have to
+                       // calc off the added margins and padding too. See tracker: #10662
+                       var areaHeight = (this._contentBox.h -
+                               (this.getHeaderHeight() + this.getFooterHeight() +
+                                dojo._getPadBorderExtents(this.iframe.parentNode).h +
+                                dojo._getMarginExtents(this.iframe.parentNode).h));
+                       this.editingArea.style.height = areaHeight + "px";
+                       if(this.iframe){
+                               this.iframe.style.height="100%";
+                       }
+                       this._layoutMode = true;
+               },
+               _onIEMouseDown: function(/*Event*/ e){
+                       // summary:
+                       //              IE only to prevent 2 clicks to focus
+                       // tags:
+                       //              private
+                       var outsideClientArea;
+                       // IE 8's componentFromPoint is broken, which is a shame since it
+                       // was smaller code, but oh well.  We have to do this brute force
+                       // to detect if the click was scroller or not.
+                       var b = this.document.body;
+                       var clientWidth = b.clientWidth;
+                       var clientHeight = b.clientHeight;
+                       var clientLeft = b.clientLeft;
+                       var offsetWidth = b.offsetWidth;
+                       var offsetHeight = b.offsetHeight;
+                       var offsetLeft = b.offsetLeft;
+
+                       //Check for vertical scroller click.
+                       bodyDir = b.dir ? b.dir.toLowerCase() : "";
+                       if(bodyDir != "rtl"){
+                               if(clientWidth < offsetWidth && e.x > clientWidth && e.x < offsetWidth){
+                                       // Check the click was between width and offset width, if so, scroller
+                                       outsideClientArea = true;
+                               }
+                       }else{
+                               // RTL mode, we have to go by the left offsets.
+                               if(e.x < clientLeft && e.x > offsetLeft){
+                                       // Check the click was between width and offset width, if so, scroller
+                                       outsideClientArea = true;
+                               }
+                       }
+                       if(!outsideClientArea){
+                               // Okay, might be horiz scroller, check that.
+                               if(clientHeight < offsetHeight && e.y > clientHeight && e.y < offsetHeight){
+                                       // Horizontal scroller.
+                                       outsideClientArea = true;
+                               }
+                       }
+                       if(!outsideClientArea){
+                               delete this._cursorToStart; // Remove the force to cursor to start position.
+                               delete this._savedSelection; // new mouse position overrides old selection
+                               if(e.target.tagName == "BODY"){
+                                       setTimeout(dojo.hitch(this, "placeCursorAtEnd"), 0);
+                               }
+                               this.inherited(arguments);
+                       }
+               },
+               onBeforeActivate: function(e){
+                       this._restoreSelection();
+               },
+               onBeforeDeactivate: function(e){
+                       // summary:
+                       //              Called on IE right before focus is lost.   Saves the selected range.
+                       // tags:
+                       //              private
+                       if(this.customUndo){
+                               this.endEditing(true);
+                       }
+                       //in IE, the selection will be lost when other elements get focus,
+                       //let's save focus before the editor is deactivated
+                       if(e.target.tagName != "BODY"){
+                               this._saveSelection();
+                       }
+                       //console.log('onBeforeDeactivate',this);
+               },
+
+               /* beginning of custom undo/redo support */
+
+               // customUndo: Boolean
+               //              Whether we shall use custom undo/redo support instead of the native
+               //              browser support. By default, we now use custom undo.  It works better
+               //              than native browser support and provides a consistent behavior across
+               //              browsers with a minimal performance hit.  We already had the hit on
+               //              the slowest browser, IE, anyway.
+               customUndo: true,
+
+               // editActionInterval: Integer
+               //              When using customUndo, not every keystroke will be saved as a step.
+               //              Instead typing (including delete) will be grouped together: after
+               //              a user stops typing for editActionInterval seconds, a step will be
+               //              saved; if a user resume typing within editActionInterval seconds,
+               //              the timeout will be restarted. By default, editActionInterval is 3
+               //              seconds.
+               editActionInterval: 3,
+
+               beginEditing: function(cmd){
+                       // summary:
+                       //              Called to note that the user has started typing alphanumeric characters, if it's not already noted.
+                       //              Deals with saving undo; see editActionInterval parameter.
+                       // tags:
+                       //              private
+                       if(!this._inEditing){
+                               this._inEditing=true;
+                               this._beginEditing(cmd);
+                       }
+                       if(this.editActionInterval>0){
+                               if(this._editTimer){
+                                       clearTimeout(this._editTimer);
+                               }
+                               this._editTimer = setTimeout(dojo.hitch(this, this.endEditing), this._editInterval);
+                       }
+               },
+
+               // TODO: declaring these in the prototype is meaningless, just create in the constructor/postCreate
+               _steps:[],
+               _undoedSteps:[],
+
+               execCommand: function(cmd){
+                       // summary:
+                       //              Main handler for executing any commands to the editor, like paste, bold, etc.
+                       //      Called by plugins, but not meant to be called by end users.
+                       // tags:
+                       //              protected
+                       if(this.customUndo && (cmd == 'undo' || cmd == 'redo')){
+                               return this[cmd]();
+                       }else{
+                               if(this.customUndo){
+                                       this.endEditing();
+                                       this._beginEditing();
+                               }
+                               var r;
+                               var isClipboard = /copy|cut|paste/.test(cmd);
+                               try{
+                                       r = this.inherited(arguments);
+                                       if(dojo.isWebKit && isClipboard && !r){ //see #4598: webkit does not guarantee clipboard support from js
+                                               throw { code: 1011 }; // throw an object like Mozilla's error
+                                       }
+                               }catch(e){
+                                       //TODO: when else might we get an exception?  Do we need the Mozilla test below?
+                                       if(e.code == 1011 /* Mozilla: service denied */ && isClipboard){
+                                               // Warn user of platform limitation.  Cannot programmatically access clipboard. See ticket #4136
+                                               var sub = dojo.string.substitute,
+                                                       accel = {cut:'X', copy:'C', paste:'V'};
+                                               alert(sub(this.commands.systemShortcut,
+                                                       [this.commands[cmd], sub(this.commands[dojo.isMac ? 'appleKey' : 'ctrlKey'], [accel[cmd]])]));
+                                       }
+                                       r = false;
+                               }
+                               if(this.customUndo){
+                                       this._endEditing();
+                               }
+                               return r;
+                       }
+               },
+               queryCommandEnabled: function(cmd){
+                       // summary:
+                       //              Returns true if specified editor command is enabled.
+                       //      Used by the plugins to know when to highlight/not highlight buttons.
+                       // tags:
+                       //              protected
+                       if(this.customUndo && (cmd == 'undo' || cmd == 'redo')){
+                               return cmd == 'undo' ? (this._steps.length > 1) : (this._undoedSteps.length > 0);
+                       }else{
+                               return this.inherited(arguments);
+                       }
+               },
+               _moveToBookmark: function(b){
+                       // summary:
+                       //              Selects the text specified in bookmark b
+                       // tags:
+                       //              private
+                       var bookmark = b.mark;
+                       var mark = b.mark;
+                       var col = b.isCollapsed;
+                       var r, sNode, eNode, sel;
+                       if(mark){
+                               if(dojo.isIE < 9){
+                                       if(dojo.isArray(mark)){
+                                               //IE CONTROL, have to use the native bookmark.
+                                               bookmark = [];
+                                               dojo.forEach(mark,function(n){
+                                                       bookmark.push(dijit.range.getNode(n,this.editNode));
+                                               },this);
+                                               dojo.withGlobal(this.window,'moveToBookmark',dijit,[{mark: bookmark, isCollapsed: col}]);
+                                       }else{
+                                               if(mark.startContainer && mark.endContainer){
+                                                       // Use the pseudo WC3 range API.  This works better for positions
+                                                       // than the IE native bookmark code.
+                                                       sel = dijit.range.getSelection(this.window);
+                                                       if(sel && sel.removeAllRanges){
+                                                               sel.removeAllRanges();
+                                                               r = dijit.range.create(this.window);
+                                                               sNode = dijit.range.getNode(mark.startContainer,this.editNode);
+                                                               eNode = dijit.range.getNode(mark.endContainer,this.editNode);
+                                                               if(sNode && eNode){
+                                                                       // Okay, we believe we found the position, so add it into the selection
+                                                                       // There are cases where it may not be found, particularly in undo/redo, when
+                                                                       // IE changes the underlying DOM on us (wraps text in a <p> tag or similar.
+                                                                       // So, in those cases, don't bother restoring selection.
+                                                                       r.setStart(sNode,mark.startOffset);
+                                                                       r.setEnd(eNode,mark.endOffset);
+                                                                       sel.addRange(r);
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }else{//w3c range
+                                       sel = dijit.range.getSelection(this.window);
+                                       if(sel && sel.removeAllRanges){
+                                               sel.removeAllRanges();
+                                               r = dijit.range.create(this.window);
+                                               sNode = dijit.range.getNode(mark.startContainer,this.editNode);
+                                               eNode = dijit.range.getNode(mark.endContainer,this.editNode);
+                                               if(sNode && eNode){
+                                                       // Okay, we believe we found the position, so add it into the selection
+                                                       // There are cases where it may not be found, particularly in undo/redo, when
+                                                       // formatting as been done and so on, so don't restore selection then.
+                                                       r.setStart(sNode,mark.startOffset);
+                                                       r.setEnd(eNode,mark.endOffset);
+                                                       sel.addRange(r);
+                                               }
+                                       }
+                               }
+                       }
+               },
+               _changeToStep: function(from, to){
+                       // summary:
+                       //              Reverts editor to "to" setting, from the undo stack.
+                       // tags:
+                       //              private
+                       this.setValue(to.text);
+                       var b=to.bookmark;
+                       if(!b){ return; }
+                       this._moveToBookmark(b);
+               },
+               undo: function(){
+                       // summary:
+                       //              Handler for editor undo (ex: ctrl-z) operation
+                       // tags:
+                       //              private
+                       //console.log('undo');
+                       var ret = false;
+                       if(!this._undoRedoActive){
+                               this._undoRedoActive = true;
+                               this.endEditing(true);
+                               var s=this._steps.pop();
+                               if(s && this._steps.length>0){
+                                       this.focus();
+                                       this._changeToStep(s,this._steps[this._steps.length-1]);
+                                       this._undoedSteps.push(s);
+                                       this.onDisplayChanged();
+                                       delete this._undoRedoActive;
+                                       ret = true;
+                               }
+                               delete this._undoRedoActive;
+                       }
+                       return ret;
+               },
+               redo: function(){
+                       // summary:
+                       //              Handler for editor redo (ex: ctrl-y) operation
+                       // tags:
+                       //              private
+                       //console.log('redo');
+                       var ret = false;
+                       if(!this._undoRedoActive){
+                               this._undoRedoActive = true;
+                               this.endEditing(true);
+                               var s=this._undoedSteps.pop();
+                               if(s && this._steps.length>0){
+                                       this.focus();
+                                       this._changeToStep(this._steps[this._steps.length-1],s);
+                                       this._steps.push(s);
+                                       this.onDisplayChanged();
+                                       ret = true;
+                               }
+                               delete this._undoRedoActive;
+                       }
+                       return ret;
+               },
+               endEditing: function(ignore_caret){
+                       // summary:
+                       //              Called to note that the user has stopped typing alphanumeric characters, if it's not already noted.
+                       //              Deals with saving undo; see editActionInterval parameter.
+                       // tags:
+                       //              private
+                       if(this._editTimer){
+                               clearTimeout(this._editTimer);
+                       }
+                       if(this._inEditing){
+                               this._endEditing(ignore_caret);
+                               this._inEditing=false;
+                       }
+               },
+
+               _getBookmark: function(){
+                       // summary:
+                       //              Get the currently selected text
+                       // tags:
+                       //              protected
+                       var b=dojo.withGlobal(this.window,dijit.getBookmark);
+                       var tmp=[];
+                       if(b && b.mark){
+                               var mark = b.mark;
+                               if(dojo.isIE < 9){
+                                       // Try to use the pseudo range API on IE for better accuracy.
+                                       var sel = dijit.range.getSelection(this.window);
+                                       if(!dojo.isArray(mark)){
+                                               if(sel){
+                                                       var range;
+                                                       if(sel.rangeCount){
+                                                               range = sel.getRangeAt(0);
+                                                       }
+                                                       if(range){
+                                                               b.mark = range.cloneRange();
+                                                       }else{
+                                                               b.mark = dojo.withGlobal(this.window,dijit.getBookmark);
+                                                       }
+                                               }
+                                       }else{
+                                               // Control ranges (img, table, etc), handle differently.
+                                               dojo.forEach(b.mark,function(n){
+                                                       tmp.push(dijit.range.getIndex(n,this.editNode).o);
+                                               },this);
+                                               b.mark = tmp;
+                                       }
+                               }
+                               try{
+                                       if(b.mark && b.mark.startContainer){
+                                               tmp=dijit.range.getIndex(b.mark.startContainer,this.editNode).o;
+                                               b.mark={startContainer:tmp,
+                                                       startOffset:b.mark.startOffset,
+                                                       endContainer:b.mark.endContainer===b.mark.startContainer?tmp:dijit.range.getIndex(b.mark.endContainer,this.editNode).o,
+                                                       endOffset:b.mark.endOffset};
+                                       }
+                               }catch(e){
+                                       b.mark = null;
+                               }
+                       }
+                       return b;
+               },
+               _beginEditing: function(cmd){
+                       // summary:
+                       //              Called when the user starts typing alphanumeric characters.
+                       //              Deals with saving undo; see editActionInterval parameter.
+                       // tags:
+                       //              private
+                       if(this._steps.length === 0){
+                               // You want to use the editor content without post filtering
+                               // to make sure selection restores right for the 'initial' state.
+                               // and undo is called.  So not using this.value, as it was 'processed'
+                               // and the line-up for selections may have been altered.
+                               this._steps.push({'text':dijit._editor.getChildrenHtml(this.editNode),'bookmark':this._getBookmark()});
+                       }
+               },
+               _endEditing: function(ignore_caret){
+                       // summary:
+                       //              Called when the user stops typing alphanumeric characters.
+                       //              Deals with saving undo; see editActionInterval parameter.
+                       // tags:
+                       //              private
+                       // Avoid filtering to make sure selections restore.
+                       var v = dijit._editor.getChildrenHtml(this.editNode);
+
+                       this._undoedSteps=[];//clear undoed steps
+                       this._steps.push({text: v, bookmark: this._getBookmark()});
+               },
+               onKeyDown: function(e){
+                       // summary:
+                       //              Handler for onkeydown event.
+                       // tags:
+                       //              private
+
+                       //We need to save selection if the user TAB away from this editor
+                       //no need to call _saveSelection for IE, as that will be taken care of in onBeforeDeactivate
+                       if(!dojo.isIE && !this.iframe && e.keyCode == dojo.keys.TAB && !this.tabIndent){
+                               this._saveSelection();
+                       }
+                       if(!this.customUndo){
+                               this.inherited(arguments);
+                               return;
+                       }
+                       var k = e.keyCode, ks = dojo.keys;
+                       if(e.ctrlKey && !e.altKey){//undo and redo only if the special right Alt + z/y are not pressed #5892
+                               if(k == 90 || k == 122){ //z
+                                       dojo.stopEvent(e);
+                                       this.undo();
+                                       return;
+                               }else if(k == 89 || k == 121){ //y
+                                       dojo.stopEvent(e);
+                                       this.redo();
+                                       return;
+                               }
+                       }
+                       this.inherited(arguments);
+
+                       switch(k){
+                                       case ks.ENTER:
+                                       case ks.BACKSPACE:
+                                       case ks.DELETE:
+                                               this.beginEditing();
+                                               break;
+                                       case 88: //x
+                                       case 86: //v
+                                               if(e.ctrlKey && !e.altKey && !e.metaKey){
+                                                       this.endEditing();//end current typing step if any
+                                                       if(e.keyCode == 88){
+                                                               this.beginEditing('cut');
+                                                               //use timeout to trigger after the cut is complete
+                                                               setTimeout(dojo.hitch(this, this.endEditing), 1);
+                                                       }else{
+                                                               this.beginEditing('paste');
+                                                               //use timeout to trigger after the paste is complete
+                                                               setTimeout(dojo.hitch(this, this.endEditing), 1);
+                                                       }
+                                                       break;
+                                               }
+                                               //pass through
+                                       default:
+                                               if(!e.ctrlKey && !e.altKey && !e.metaKey && (e.keyCode<dojo.keys.F1 || e.keyCode>dojo.keys.F15)){
+                                                       this.beginEditing();
+                                                       break;
+                                               }
+                                               //pass through
+                                       case ks.ALT:
+                                               this.endEditing();
+                                               break;
+                                       case ks.UP_ARROW:
+                                       case ks.DOWN_ARROW:
+                                       case ks.LEFT_ARROW:
+                                       case ks.RIGHT_ARROW:
+                                       case ks.HOME:
+                                       case ks.END:
+                                       case ks.PAGE_UP:
+                                       case ks.PAGE_DOWN:
+                                               this.endEditing(true);
+                                               break;
+                                       //maybe ctrl+backspace/delete, so don't endEditing when ctrl is pressed
+                                       case ks.CTRL:
+                                       case ks.SHIFT:
+                                       case ks.TAB:
+                                               break;
+                               }
+               },
+               _onBlur: function(){
+                       // summary:
+                       //              Called from focus manager when focus has moved away from this editor
+                       // tags:
+                       //              protected
+
+                       //this._saveSelection();
+                       this.inherited(arguments);
+                       this.endEditing(true);
+               },
+               _saveSelection: function(){
+                       // summary:
+                       //              Save the currently selected text in _savedSelection attribute
+                       // tags:
+                       //              private
+                       try{
+                               this._savedSelection=this._getBookmark();
+                       }catch(e){ /* Squelch any errors that occur if selection save occurs due to being hidden simultaniously. */}
+               },
+               _restoreSelection: function(){
+                       // summary:
+                       //              Re-select the text specified in _savedSelection attribute;
+                       //              see _saveSelection().
+                       // tags:
+                       //              private
+                       if(this._savedSelection){
+                               // Clear off cursor to start, we're deliberately going to a selection.
+                               delete this._cursorToStart;
+                               // only restore the selection if the current range is collapsed
+                               // if not collapsed, then it means the editor does not lose
+                               // selection and there is no need to restore it
+                               if(dojo.withGlobal(this.window,'isCollapsed',dijit)){
+                                       this._moveToBookmark(this._savedSelection);
+                               }
+                               delete this._savedSelection;
+                       }
+               },
+
+               onClick: function(){
+                       // summary:
+                       //              Handler for when editor is clicked
+                       // tags:
+                       //              protected
+                       this.endEditing(true);
+                       this.inherited(arguments);
+               },
+
+               replaceValue: function(/*String*/ html){
+                       // summary:
+                       //              over-ride of replaceValue to support custom undo and stack maintainence.
+                       // tags:
+                       //              protected
+                       if(!this.customUndo){
+                               this.inherited(arguments);
+                       }else{
+                               if(this.isClosed){
+                                       this.setValue(html);
+                               }else{
+                                       this.beginEditing();
+                                       if(!html){
+                                               html = "&nbsp;"
+                                       }
+                                       this.setValue(html);
+                                       this.endEditing();
+                               }
+                       }
+               },
+               
+               _setDisabledAttr: function(/*Boolean*/ value){
+                       var disableFunc = dojo.hitch(this, function(){
+                               if((!this.disabled && value) || (!this._buttonEnabledPlugins && value)){
+                               // Disable editor: disable all enabled buttons and remember that list
+                                       dojo.forEach(this._plugins, function(p){
+                                               p.set("disabled", true);
+                               });
+                       }else if(this.disabled && !value){
+                                       // Restore plugins to being active.
+                                       dojo.forEach(this._plugins, function(p){
+                                               p.set("disabled", false);
+                               });
+                       }
+                       });
+                       this.setValueDeferred.addCallback(disableFunc);
+                       this.inherited(arguments);
+               },
+               
+               _setStateClass: function(){
+                       try{
+                               this.inherited(arguments);
+                       
+                               // Let theme set the editor's text color based on editor enabled/disabled state.
+                               // We need to jump through hoops because the main document (where the theme CSS is)
+                               // is separate from the iframe's document.
+                               if(this.document && this.document.body){
+                                       dojo.style(this.document.body, "color", dojo.style(this.iframe, "color"));
+                               }
+                       }catch(e){ /* Squelch any errors caused by focus change if hidden during a state change */}
+               }
+       }
+);
+
+// Register the "default plugins", ie, the built-in editor commands
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+       if(o.plugin){ return; }
+       var args = o.args, p;
+       var _p = dijit._editor._Plugin;
+       var name = args.name;
+       switch(name){
+               case "undo": case "redo": case "cut": case "copy": case "paste": case "insertOrderedList":
+               case "insertUnorderedList": case "indent": case "outdent": case "justifyCenter":
+               case "justifyFull": case "justifyLeft": case "justifyRight": case "delete":
+               case "selectAll": case "removeFormat": case "unlink":
+               case "insertHorizontalRule":
+                       p = new _p({ command: name });
+                       break;
+
+               case "bold": case "italic": case "underline": case "strikethrough":
+               case "subscript": case "superscript":
+                       p = new _p({ buttonClass: dijit.form.ToggleButton, command: name });
+                       break;
+               case "|":
+                       p = new _p({ button: new dijit.ToolbarSeparator(), setEditor: function(editor) {this.editor = editor;} });
+       }
+//     console.log('name',name,p);
+       o.plugin=p;
 });
+
 }
index 5d26498a4f75ba06b67cf31093b7d41b7364e46a..1f569efbe905a5463801a12ec92451ab4a2a8ea6 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.InlineEditBox"]){
-dojo._hasResource["dijit.InlineEditBox"]=true;
+if(!dojo._hasResource["dijit.InlineEditBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.InlineEditBox"] = true;
 dojo.provide("dijit.InlineEditBox");
 dojo.require("dojo.i18n");
 dojo.require("dijit._Widget");
 dojo.require("dijit._Container");
 dojo.require("dijit.form.Button");
 dojo.require("dijit.form.TextBox");
-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,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.declare("dijit.InlineEditBox",dijit._Widget,{editing:false,autoSave:true,buttonSave:"",buttonCancel:"",renderAsHtml:false,editor:"dijit.form.TextBox",editorWrapper:"dijit._InlineEditor",editorParams:{},onChange:function(_1){
-},onCancel:function(){
-},width:"100%",value:"",noValueIndicator:dojo.isIE<=6?"<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>":"<span style='text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",constructor:function(){
-this.editorParams={};
-},postMixInProperties:function(){
-this.inherited(arguments);
-this.displayNode=this.srcNodeRef;
-var _2={ondijitclick:"_onClick",onmouseover:"_onMouseOver",onmouseout:"_onMouseOut",onfocus:"_onMouseOver",onblur:"_onMouseOut"};
-for(var _3 in _2){
-this.connect(this.displayNode,_3,_2[_3]);
-}
-dijit.setWaiRole(this.displayNode,"button");
-if(!this.displayNode.getAttribute("tabIndex")){
-this.displayNode.setAttribute("tabIndex",0);
-}
-if(!this.value&&!("value" in this.params)){
-this.value=dojo.trim(this.renderAsHtml?this.displayNode.innerHTML:(this.displayNode.innerText||this.displayNode.textContent||""));
-}
-if(!this.value){
-this.displayNode.innerHTML=this.noValueIndicator;
-}
-dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayMode");
-},setDisabled:function(_4){
-dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");
-this.set("disabled",_4);
-},_setDisabledAttr:function(_5){
-this.disabled=_5;
-dijit.setWaiState(this.domNode,"disabled",_5);
-if(_5){
-this.displayNode.removeAttribute("tabIndex");
-}else{
-this.displayNode.setAttribute("tabIndex",0);
-}
-dojo.toggleClass(this.displayNode,"dijitInlineEditBoxDisplayModeDisabled",_5);
-},_onMouseOver:function(){
-if(!this.disabled){
-dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");
-}
-},_onMouseOut:function(){
-dojo.removeClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");
-},_onClick:function(e){
-if(this.disabled){
-return;
-}
-if(e){
-dojo.stopEvent(e);
-}
-this._onMouseOut();
-setTimeout(dojo.hitch(this,"edit"),0);
-},edit:function(){
-if(this.disabled||this.editing){
-return;
-}
-this.editing=true;
-this._savedPosition=dojo.style(this.displayNode,"position")||"static";
-this._savedOpacity=dojo.style(this.displayNode,"opacity")||"1";
-this._savedTabIndex=dojo.attr(this.displayNode,"tabIndex")||"0";
-if(this.wrapperWidget){
-var ew=this.wrapperWidget.editWidget;
-ew.set("displayedValue" in ew?"displayedValue":"value",this.value);
-}else{
-var _6=dojo.create("span",null,this.domNode,"before");
-var _7=dojo.getObject(this.editorWrapper);
-this.wrapperWidget=new _7({value:this.value,buttonSave:this.buttonSave,buttonCancel:this.buttonCancel,dir:this.dir,lang:this.lang,tabIndex:this._savedTabIndex,editor:this.editor,inlineEditBox:this,sourceStyle:dojo.getComputedStyle(this.displayNode),save:dojo.hitch(this,"save"),cancel:dojo.hitch(this,"cancel")},_6);
-}
-var ww=this.wrapperWidget;
-if(dojo.isIE){
-dijit.focus(dijit.getFocus());
-}
-dojo.style(this.displayNode,{position:"absolute",opacity:"0",display:"none"});
-dojo.style(ww.domNode,{position:this._savedPosition,visibility:"visible",opacity:"1"});
-dojo.attr(this.displayNode,"tabIndex","-1");
-setTimeout(dojo.hitch(this,function(){
-ww.focus();
-ww._resetValue=ww.getValue();
-}),0);
-},_onBlur:function(){
-this.inherited(arguments);
-if(!this.editing){
-}
-},destroy:function(){
-if(this.wrapperWidget){
-this.wrapperWidget.destroy();
-delete this.wrapperWidget;
-}
-this.inherited(arguments);
-},_showText:function(_8){
-var ww=this.wrapperWidget;
-dojo.style(ww.domNode,{position:"absolute",visibility:"hidden",opacity:"0"});
-dojo.style(this.displayNode,{position:this._savedPosition,opacity:this._savedOpacity,display:""});
-dojo.attr(this.displayNode,"tabIndex",this._savedTabIndex);
-if(_8){
-dijit.focus(this.displayNode);
-}
-},save:function(_9){
-if(this.disabled||!this.editing){
-return;
-}
-this.editing=false;
-var ww=this.wrapperWidget;
-var _a=ww.getValue();
-this.set("value",_a);
-setTimeout(dojo.hitch(this,"onChange",_a),0);
-this._showText(_9);
-},setValue:function(_b){
-dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated.  Use set('value', ...) instead.","","2.0");
-return this.set("value",_b);
-},_setValueAttr:function(_c){
-this.value=_c=dojo.trim(_c);
-if(!this.renderAsHtml){
-_c=_c.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;").replace(/\n/g,"<br>");
-}
-this.displayNode.innerHTML=_c||this.noValueIndicator;
-},getValue:function(){
-dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated.  Use get('value') instead.","","2.0");
-return this.get("value");
-},cancel:function(_d){
-if(this.disabled||!this.editing){
-return;
-}
-this.editing=false;
-setTimeout(dojo.hitch(this,"onCancel"),0);
-this._showText(_d);
-}});
-dojo.declare("dijit._InlineEditor",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/InlineEditBox.html","<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"),widgetsInTemplate:true,postMixInProperties:function(){
-this.inherited(arguments);
-this.messages=dojo.i18n.getLocalization("dijit","common",this.lang);
-dojo.forEach(["buttonSave","buttonCancel"],function(_e){
-if(!this[_e]){
-this[_e]=this.messages[_e];
-}
-},this);
-},postCreate:function(){
-var _f=dojo.getObject(this.editor);
-var _10=this.sourceStyle,_11="line-height:"+_10.lineHeight+";",_12=dojo.getComputedStyle(this.domNode);
-dojo.forEach(["Weight","Family","Size","Style"],function(_13){
-var _14=_10["font"+_13],_15=_12["font"+_13];
-if(_15!=_14){
-_11+="font-"+_13+":"+_10["font"+_13]+";";
-}
-},this);
-dojo.forEach(["marginTop","marginBottom","marginLeft","marginRight"],function(_16){
-this.domNode.style[_16]=_10[_16];
-},this);
-var _17=this.inlineEditBox.width;
-if(_17=="100%"){
-_11+="width:100%;";
-this.domNode.style.display="block";
-}else{
-_11+="width:"+(_17+(Number(_17)==_17?"px":""))+";";
-}
-var _18=dojo.delegate(this.inlineEditBox.editorParams,{style:_11,dir:this.dir,lang:this.lang});
-_18["displayedValue" in _f.prototype?"displayedValue":"value"]=this.value;
-var ew=(this.editWidget=new _f(_18,this.editorPlaceholder));
-if(this.inlineEditBox.autoSave){
-dojo.destroy(this.buttonContainer);
-this.connect(ew,"onChange","_onChange");
-this.connect(ew,"onKeyPress","_onKeyPress");
-}else{
-if("intermediateChanges" in _f.prototype){
-ew.set("intermediateChanges",true);
-this.connect(ew,"onChange","_onIntermediateChange");
-this.saveButton.set("disabled",true);
-}
-}
-},_onIntermediateChange:function(val){
-this.saveButton.set("disabled",(this.getValue()==this._resetValue)||!this.enableSave());
-},destroy:function(){
-this.editWidget.destroy(true);
-this.inherited(arguments);
-},getValue:function(){
-var ew=this.editWidget;
-return String(ew.get("displayedValue" in ew?"displayedValue":"value"));
-},_onKeyPress:function(e){
-if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){
-if(e.altKey||e.ctrlKey){
-return;
-}
-if(e.charOrCode==dojo.keys.ESCAPE){
-dojo.stopEvent(e);
-this.cancel(true);
-}else{
-if(e.charOrCode==dojo.keys.ENTER&&e.target.tagName=="INPUT"){
-dojo.stopEvent(e);
-this._onChange();
-}
-}
-}
-},_onBlur:function(){
-this.inherited(arguments);
-if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){
-if(this.getValue()==this._resetValue){
-this.cancel(false);
-}else{
-if(this.enableSave()){
-this.save(false);
-}
-}
-}
-},_onChange:function(){
-if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing&&this.enableSave()){
-dojo.style(this.inlineEditBox.displayNode,{display:""});
-dijit.focus(this.inlineEditBox.displayNode);
-}
-},enableSave:function(){
-return (this.editWidget.isValid?this.editWidget.isValid():true);
-},focus:function(){
-this.editWidget.focus();
-setTimeout(dojo.hitch(this,function(){
-if(this.editWidget.focusNode&&this.editWidget.focusNode.tagName=="INPUT"){
-dijit.selectInputText(this.editWidget.focusNode);
-}
-}),0);
-}});
+dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare("dijit.InlineEditBox",
+       dijit._Widget,
+       {
+       // summary:
+       //              An element with in-line edit capabilites
+       //
+       // description:
+       //              Behavior for an existing node (`<p>`, `<div>`, `<span>`, etc.) so that
+       //              when you click it, an editor shows up in place of the original
+       //              text.  Optionally, Save and Cancel button are displayed below the edit widget.
+       //              When Save is clicked, the text is pulled from the edit
+       //              widget and redisplayed and the edit widget is again hidden.
+       //              By default a plain Textarea widget is used as the editor (or for
+       //              inline values a TextBox), but you can specify an editor such as
+       //              dijit.Editor (for editing HTML) or a Slider (for adjusting a number).
+       //              An edit widget must support the following API to be used:
+       //                      - displayedValue or value as initialization parameter,
+       //                      and available through set('displayedValue') / set('value')
+       //                      - void focus()
+       //                      - DOM-node focusNode = node containing editable text
+
+       // editing: [readonly] Boolean
+       //              Is the node currently in edit mode?
+       editing: false,
+
+       // autoSave: Boolean
+       //              Changing the value automatically saves it; don't have to push save button
+       //              (and save button isn't even displayed)
+       autoSave: true,
+
+       // buttonSave: String
+       //              Save button label
+       buttonSave: "",
+
+       // buttonCancel: String
+       //              Cancel button label
+       buttonCancel: "",
+
+       // renderAsHtml: Boolean
+       //              Set this to true if the specified Editor's value should be interpreted as HTML
+       //              rather than plain text (ex: `dijit.Editor`)
+       renderAsHtml: false,
+
+       // editor: String|Function
+       //              Class name (or reference to the Class) for Editor widget
+       editor: "dijit.form.TextBox",
+
+       // editorWrapper: String|Function
+       //              Class name (or reference to the Class) for widget that wraps the editor widget, displaying save/cancel
+       //              buttons.
+       editorWrapper: "dijit._InlineEditor",
+
+       // editorParams: Object
+       //              Set of parameters for editor, like {required: true}
+       editorParams: {},
+
+       // disabled: Boolean
+       //              If true, clicking the InlineEditBox to edit it will have no effect.
+       disabled: false,
+
+       onChange: function(value){
+               // summary:
+               //              Set this handler to be notified of changes to value.
+               // tags:
+               //              callback
+       },
+
+       onCancel: function(){
+               // summary:
+               //              Set this handler to be notified when editing is cancelled.
+               // tags:
+               //              callback
+       },
+
+       // width: String
+       //              Width of editor.  By default it's width=100% (ie, block mode).
+       width: "100%",
+
+       // value: String
+       //              The display value of the widget in read-only mode
+       value: "",
+
+       // noValueIndicator: [const] String
+       //              The text that gets displayed when there is no value (so that the user has a place to click to edit)
+       noValueIndicator: dojo.isIE <= 6 ?      // font-family needed on IE6 but it messes up IE8
+               "<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>" :
+               "<span style='text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",
+
+       constructor: function(){
+               // summary:
+               //              Sets up private arrays etc.
+               // tags:
+               //              private
+               this.editorParams = {};
+       },
+
+       postMixInProperties: function(){
+               this.inherited(arguments);
+
+               // save pointer to original source node, since Widget nulls-out srcNodeRef
+               this.displayNode = this.srcNodeRef;
+
+               // connect handlers to the display node
+               var events = {
+                       ondijitclick: "_onClick",
+                       onmouseover: "_onMouseOver",
+                       onmouseout: "_onMouseOut",
+                       onfocus: "_onMouseOver",
+                       onblur: "_onMouseOut"
+               };
+               for(var name in events){
+                       this.connect(this.displayNode, name, events[name]);
+               }
+               dijit.setWaiRole(this.displayNode, "button");
+               if(!this.displayNode.getAttribute("tabIndex")){
+                       this.displayNode.setAttribute("tabIndex", 0);
+               }
+
+               if(!this.value && !("value" in this.params)){ // "" is a good value if specified directly so check params){
+                  this.value = dojo.trim(this.renderAsHtml ? this.displayNode.innerHTML :
+                     (this.displayNode.innerText||this.displayNode.textContent||""));
+               }
+               if(!this.value){
+                   this.displayNode.innerHTML = this.noValueIndicator;
+               }
+
+               dojo.addClass(this.displayNode, 'dijitInlineEditBoxDisplayMode');
+       },
+
+       setDisabled: function(/*Boolean*/ disabled){
+               // summary:
+               //              Deprecated.   Use set('disabled', ...) instead.
+               // tags:
+               //              deprecated
+               dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated.  Use set('disabled', bool) instead.", "", "2.0");
+               this.set('disabled', disabled);
+       },
+
+       _setDisabledAttr: function(/*Boolean*/ disabled){
+               // summary:
+               //              Hook to make set("disabled", ...) work.
+               //              Set disabled state of widget.
+               dijit.setWaiState(this.domNode, "disabled", disabled);
+               if(disabled){
+                       this.displayNode.removeAttribute("tabIndex");
+               }else{
+                       this.displayNode.setAttribute("tabIndex", 0);
+               }
+               dojo.toggleClass(this.displayNode, "dijitInlineEditBoxDisplayModeDisabled", disabled);
+               this._set("disabled", disabled);
+       },
+
+       _onMouseOver: function(){
+               // summary:
+               //              Handler for onmouseover and onfocus event.
+               // tags:
+               //              private
+               if(!this.disabled){
+                       dojo.addClass(this.displayNode, "dijitInlineEditBoxDisplayModeHover");
+               }
+       },
+
+       _onMouseOut: function(){
+               // summary:
+               //              Handler for onmouseout and onblur event.
+               // tags:
+               //              private
+               dojo.removeClass(this.displayNode, "dijitInlineEditBoxDisplayModeHover");
+       },
+
+       _onClick: function(/*Event*/ e){
+               // summary:
+               //              Handler for onclick event.
+               // tags:
+               //              private
+               if(this.disabled){ return; }
+               if(e){ dojo.stopEvent(e); }
+               this._onMouseOut();
+
+               // Since FF gets upset if you move a node while in an event handler for that node...
+               setTimeout(dojo.hitch(this, "edit"), 0);
+       },
+
+       edit: function(){
+               // summary:
+               //              Display the editor widget in place of the original (read only) markup.
+               // tags:
+               //              private
+
+               if(this.disabled || this.editing){ return; }
+               this.editing = true;
+
+               // save some display node values that can be restored later
+               this._savedPosition = dojo.style(this.displayNode, "position") || "static";
+               this._savedOpacity = dojo.style(this.displayNode, "opacity") || "1";
+               this._savedTabIndex = dojo.attr(this.displayNode, "tabIndex") || "0";
+
+               if(this.wrapperWidget){
+                       var ew = this.wrapperWidget.editWidget;
+                       ew.set("displayedValue" in ew ? "displayedValue" : "value", this.value);
+               }else{
+                       // Placeholder for edit widget
+                       // Put place holder (and eventually editWidget) before the display node so that it's positioned correctly
+                       // when Calendar dropdown appears, which happens automatically on focus.
+                       var placeholder = dojo.create("span", null, this.domNode, "before");
+
+                       // Create the editor wrapper (the thing that holds the editor widget and the save/cancel buttons)
+                       var ewc = typeof this.editorWrapper == "string" ? dojo.getObject(this.editorWrapper) : this.editorWrapper;
+                       this.wrapperWidget = new ewc({
+                               value: this.value,
+                               buttonSave: this.buttonSave,
+                               buttonCancel: this.buttonCancel,
+                               dir: this.dir,
+                               lang: this.lang,
+                               tabIndex: this._savedTabIndex,
+                               editor: this.editor,
+                               inlineEditBox: this,
+                               sourceStyle: dojo.getComputedStyle(this.displayNode),
+                               save: dojo.hitch(this, "save"),
+                               cancel: dojo.hitch(this, "cancel")
+                       }, placeholder);
+                       if(!this._started){
+                               this.startup();
+                       }
+               }
+               var ww = this.wrapperWidget;
+
+               if(dojo.isIE){
+                       dijit.focus(dijit.getFocus()); // IE (at least 8) needs help with tab order changes
+               }
+               // to avoid screen jitter, we first create the editor with position:absolute, visibility:hidden,
+               // and then when it's finished rendering, we switch from display mode to editor
+               // position:absolute releases screen space allocated to the display node
+               // opacity:0 is the same as visibility:hidden but is still focusable
+               // visiblity:hidden removes focus outline
+
+               dojo.style(this.displayNode, { position: "absolute", opacity: "0", display: "none" }); // makes display node invisible, display style used for focus-ability
+               dojo.style(ww.domNode, { position: this._savedPosition, visibility: "visible", opacity: "1" });
+               dojo.attr(this.displayNode, "tabIndex", "-1"); // needed by WebKit for TAB from editor to skip displayNode
+
+               // Replace the display widget with edit widget, leaving them both displayed for a brief time so that
+               // focus can be shifted without incident.  (browser may needs some time to render the editor.)
+               setTimeout(dojo.hitch(this, function(){
+                       ww.focus(); // both nodes are showing, so we can switch focus safely
+                       ww._resetValue = ww.getValue();
+               }), 0);
+       },
+
+       _onBlur: function(){
+               // summary:
+               //              Called when focus moves outside the InlineEditBox.
+               //              Performs garbage collection.
+               // tags:
+               //              private
+
+               this.inherited(arguments);
+               if(!this.editing){
+                       /* causes IE focus problems, see TooltipDialog_a11y.html...
+                       setTimeout(dojo.hitch(this, function(){
+                               if(this.wrapperWidget){
+                                       this.wrapperWidget.destroy();
+                                       delete this.wrapperWidget;
+                               }
+                       }), 0);
+                       */
+               }
+       },
+
+       destroy: function(){
+               if(this.wrapperWidget && !this.wrapperWidget._destroyed){
+                       this.wrapperWidget.destroy();
+                       delete this.wrapperWidget;
+               }
+               this.inherited(arguments);
+       },
+
+       _showText: function(/*Boolean*/ focus){
+               // summary:
+               //              Revert to display mode, and optionally focus on display node
+               // tags:
+               //              private
+
+               var ww = this.wrapperWidget;
+               dojo.style(ww.domNode, { position: "absolute", visibility: "hidden", opacity: "0" }); // hide the editor from mouse/keyboard events
+               dojo.style(this.displayNode, { position: this._savedPosition, opacity: this._savedOpacity, display: "" }); // make the original text visible
+               dojo.attr(this.displayNode, "tabIndex", this._savedTabIndex);
+               if(focus){
+                       dijit.focus(this.displayNode);
+               }
+       },
+
+       save: function(/*Boolean*/ focus){
+               // summary:
+               //              Save the contents of the editor and revert to display mode.
+               // focus: Boolean
+               //              Focus on the display mode text
+               // tags:
+               //              private
+
+               if(this.disabled || !this.editing){ return; }
+               this.editing = false;
+
+               var ww = this.wrapperWidget;
+               var value = ww.getValue();
+               this.set('value', value); // display changed, formatted value
+
+               this._showText(focus); // set focus as needed
+       },
+
+       setValue: function(/*String*/ val){
+               // summary:
+               //              Deprecated.   Use set('value', ...) instead.
+               // tags:
+               //              deprecated
+               dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated.  Use set('value', ...) instead.", "", "2.0");
+               return this.set("value", val);
+       },
+
+       _setValueAttr: function(/*String*/ val){
+               // summary:
+               //              Hook to make set("value", ...) work.
+               //              Inserts specified HTML value into this node, or an "input needed" character if node is blank.
+
+               val = dojo.trim(val);
+               var renderVal = this.renderAsHtml ? val : val.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;").replace(/\n/g, "<br>");
+               this.displayNode.innerHTML = renderVal || this.noValueIndicator;
+               this._set("value", val);
+
+               if(this._started){
+                       // tell the world that we have changed
+                       setTimeout(dojo.hitch(this, "onChange", val), 0); // setTimeout prevents browser freeze for long-running event handlers
+               }
+       },
+
+       getValue: function(){
+               // summary:
+               //              Deprecated.   Use get('value') instead.
+               // tags:
+               //              deprecated
+               dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated.  Use get('value') instead.", "", "2.0");
+               return this.get("value");
+       },
+
+       cancel: function(/*Boolean*/ focus){
+               // summary:
+               //              Revert to display mode, discarding any changes made in the editor
+               // tags:
+               //              private
+
+               if(this.disabled || !this.editing){ return; }
+               this.editing = false;
+
+               // tell the world that we have no changes
+               setTimeout(dojo.hitch(this, "onCancel"), 0); // setTimeout prevents browser freeze for long-running event handlers
+
+               this._showText(focus);
+       }
+});
+
+dojo.declare(
+       "dijit._InlineEditor",
+        [dijit._Widget, dijit._Templated],
+{
+       // summary:
+       //              Internal widget used by InlineEditBox, displayed when in editing mode
+       //              to display the editor and maybe save/cancel buttons.  Calling code should
+       //              connect to save/cancel methods to detect when editing is finished
+       //
+       //              Has mainly the same parameters as InlineEditBox, plus these values:
+       //
+       // style: Object
+       //              Set of CSS attributes of display node, to replicate in editor
+       //
+       // value: String
+       //              Value as an HTML string or plain text string, depending on renderAsHTML flag
+
+       templateString: dojo.cache("dijit", "templates/InlineEditBox.html", "<span data-dojo-attach-point=\"editNode\" role=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdata-dojo-attach-event=\"onkeypress: _onKeyPress\"\n\t><span data-dojo-attach-point=\"editorPlaceholder\"></span\n\t><span data-dojo-attach-point=\"buttonContainer\"\n\t\t><button data-dojo-type=\"dijit.form.Button\" data-dojo-props=\"label: '${buttonSave}', 'class': 'saveButton'\"\n\t\t\tdata-dojo-attach-point=\"saveButton\" data-dojo-attach-event=\"onClick:save\"></button\n\t\t><button data-dojo-type=\"dijit.form.Button\"  data-dojo-props=\"label: '${buttonCancel}', 'class': 'cancelButton'\"\n\t\t\tdata-dojo-attach-point=\"cancelButton\" data-dojo-attach-event=\"onClick:cancel\"></button\n\t></span\n></span>\n"),
+       widgetsInTemplate: true,
+
+       postMixInProperties: function(){
+               this.inherited(arguments);
+               this.messages = dojo.i18n.getLocalization("dijit", "common", this.lang);
+               dojo.forEach(["buttonSave", "buttonCancel"], function(prop){
+                       if(!this[prop]){ this[prop] = this.messages[prop]; }
+               }, this);
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+
+               // Create edit widget in place in the template
+               var cls = typeof this.editor == "string" ? dojo.getObject(this.editor) : this.editor;
+
+               // Copy the style from the source
+               // Don't copy ALL properties though, just the necessary/applicable ones.
+               // wrapperStyle/destStyle code is to workaround IE bug where getComputedStyle().fontSize
+               // is a relative value like 200%, rather than an absolute value like 24px, and
+               // the 200% can refer *either* to a setting on the node or it's ancestor (see #11175)
+               var srcStyle = this.sourceStyle,
+                       editStyle = "line-height:" + srcStyle.lineHeight + ";",
+                       destStyle = dojo.getComputedStyle(this.domNode);
+               dojo.forEach(["Weight","Family","Size","Style"], function(prop){
+                       var textStyle = srcStyle["font"+prop],
+                               wrapperStyle = destStyle["font"+prop];
+                       if(wrapperStyle != textStyle){
+                               editStyle += "font-"+prop+":"+srcStyle["font"+prop]+";";
+                       }
+               }, this);
+               dojo.forEach(["marginTop","marginBottom","marginLeft", "marginRight"], function(prop){
+                       this.domNode.style[prop] = srcStyle[prop];
+               }, this);
+               var width = this.inlineEditBox.width;
+               if(width == "100%"){
+                       // block mode
+                       editStyle += "width:100%;";
+                       this.domNode.style.display = "block";
+               }else{
+                       // inline-block mode
+                       editStyle += "width:" + (width + (Number(width) == width ? "px" : "")) + ";";
+               }
+               var editorParams = dojo.delegate(this.inlineEditBox.editorParams, {
+                       style: editStyle,
+                       dir: this.dir,
+                       lang: this.lang
+               });
+               editorParams[ "displayedValue" in cls.prototype ? "displayedValue" : "value"] = this.value;
+               this.editWidget = new cls(editorParams, this.editorPlaceholder);
+
+               if(this.inlineEditBox.autoSave){
+                       // Remove the save/cancel buttons since saving is done by simply tabbing away or
+                       // selecting a value from the drop down list
+                       dojo.destroy(this.buttonContainer);
+               }
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
+
+               var ew = this.editWidget;
+
+               if(this.inlineEditBox.autoSave){
+                       // Selecting a value from a drop down list causes an onChange event and then we save
+                       this.connect(ew, "onChange", "_onChange");
+
+                       // ESC and TAB should cancel and save.  Note that edit widgets do a stopEvent() on ESC key (to
+                       // prevent Dialog from closing when the user just wants to revert the value in the edit widget),
+                       // so this is the only way we can see the key press event.
+                       this.connect(ew, "onKeyPress", "_onKeyPress");
+               }else{
+                       // If possible, enable/disable save button based on whether the user has changed the value
+                       if("intermediateChanges" in ew){
+                               ew.set("intermediateChanges", true);
+                               this.connect(ew, "onChange", "_onIntermediateChange");
+                               this.saveButton.set("disabled", true);
+                       }
+               }
+       },
+
+       _onIntermediateChange: function(val){
+               // summary:
+               //              Called for editor widgets that support the intermediateChanges=true flag as a way
+               //              to detect when to enable/disabled the save button
+               this.saveButton.set("disabled", (this.getValue() == this._resetValue) || !this.enableSave());
+       },
+
+       destroy: function(){
+               this.editWidget.destroy(true); // let the parent wrapper widget clean up the DOM
+               this.inherited(arguments);
+       },
+
+       getValue: function(){
+               // summary:
+               //              Return the [display] value of the edit widget
+               var ew = this.editWidget;
+               return String(ew.get("displayedValue" in ew ? "displayedValue" : "value"));
+       },
+
+       _onKeyPress: function(e){
+               // summary:
+               //              Handler for keypress in the edit box in autoSave mode.
+               // description:
+               //              For autoSave widgets, if Esc/Enter, call cancel/save.
+               // tags:
+               //              private
+
+               if(this.inlineEditBox.autoSave && this.inlineEditBox.editing){
+                       if(e.altKey || e.ctrlKey){ return; }
+                       // If Enter/Esc pressed, treat as save/cancel.
+                       if(e.charOrCode == dojo.keys.ESCAPE){
+                               dojo.stopEvent(e);
+                               this.cancel(true); // sets editing=false which short-circuits _onBlur processing
+                       }else if(e.charOrCode == dojo.keys.ENTER && e.target.tagName == "INPUT"){
+                               dojo.stopEvent(e);
+                               this._onChange(); // fire _onBlur and then save
+                       }
+
+                       // _onBlur will handle TAB automatically by allowing
+                       // the TAB to change focus before we mess with the DOM: #6227
+                       // Expounding by request:
+                       //      The current focus is on the edit widget input field.
+                       //      save() will hide and destroy this widget.
+                       //      We want the focus to jump from the currently hidden
+                       //      displayNode, but since it's hidden, it's impossible to
+                       //      unhide it, focus it, and then have the browser focus
+                       //      away from it to the next focusable element since each
+                       //      of these events is asynchronous and the focus-to-next-element
+                       //      is already queued.
+                       //      So we allow the browser time to unqueue the move-focus event
+                       //      before we do all the hide/show stuff.
+               }
+       },
+
+       _onBlur: function(){
+               // summary:
+               //              Called when focus moves outside the editor
+               // tags:
+               //              private
+
+               this.inherited(arguments);
+               if(this.inlineEditBox.autoSave && this.inlineEditBox.editing){
+                       if(this.getValue() == this._resetValue){
+                               this.cancel(false);
+                       }else if(this.enableSave()){
+                               this.save(false);
+                       }
+               }
+       },
+
+       _onChange: function(){
+               // summary:
+               //              Called when the underlying widget fires an onChange event,
+               //              such as when the user selects a value from the drop down list of a ComboBox,
+               //              which means that the user has finished entering the value and we should save.
+               // tags:
+               //              private
+
+               if(this.inlineEditBox.autoSave && this.inlineEditBox.editing && this.enableSave()){
+                       dojo.style(this.inlineEditBox.displayNode, { display: "" });
+                       dijit.focus(this.inlineEditBox.displayNode); // fires _onBlur which will save the formatted value
+               }
+       },
+
+       enableSave: function(){
+               // summary:
+               //              User overridable function returning a Boolean to indicate
+               //              if the Save button should be enabled or not - usually due to invalid conditions
+               // tags:
+               //              extension
+               return (
+                       this.editWidget.isValid
+                       ? this.editWidget.isValid()
+                       : true
+               );
+       },
+
+       focus: function(){
+               // summary:
+               //              Focus the edit widget.
+               // tags:
+               //              protected
+
+               this.editWidget.focus();
+               setTimeout(dojo.hitch(this, function(){
+                       if(this.editWidget.focusNode && this.editWidget.focusNode.tagName == "INPUT"){
+                               dijit.selectInputText(this.editWidget.focusNode);
+                       }
+               }), 0);
+       }
+});
+
 }
index 4c93ded6b2cb409701f0eea674cd740d626ca439..aa6b39f8c967a50f3253bde3ca0e4bfd1566b1ae 100644 (file)
@@ -13,7 +13,7 @@ The text of the AFL and BSD licenses is reproduced below.
 The "New" BSD License:
 **********************
 
-Copyright (c) 2005-2010, The Dojo Foundation
+Copyright (c) 2005-2011, The Dojo Foundation
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
index 83a2ddbad7b67cacca128a2e7f4fb9d4c28bd237..c5a48660e3e4287dfa9bba6f2197e2ad89de7101 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.Menu"]){
-dojo._hasResource["dijit.Menu"]=true;
+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.require("dojo.window");
 dojo.require("dijit._Widget");
 dojo.require("dijit._KeyNavContainer");
 dojo.require("dijit._Templated");
-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(_1){
-_1.startup();
-});
-this.startupKeyNavChildren();
-this.inherited(arguments);
-},onExecute:function(){
-},onCancel:function(_2){
-},_moveToPopup:function(_3){
-if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){
-this.focusedChild._onClick(_3);
-}else{
-var _4=this._getTopMenu();
-if(_4&&_4._isMenuBar){
-_4.focusNext();
-}
-}
-},_onPopupHover:function(_5){
-if(this.currentPopup&&this.currentPopup._pendingClose_timer){
-var _6=this.currentPopup.parentMenu;
-if(_6.focusedChild){
-_6.focusedChild._setSelected(false);
-}
-_6.focusedChild=this.currentPopup.from_item;
-_6.focusedChild._setSelected(true);
-this._stopPendingCloseTimer(this.currentPopup);
-}
-},onItemHover:function(_7){
-if(this.isActive){
-this.focusChild(_7);
-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(_7);
-}
-this._hoveredChild=_7;
-},_onChildBlur:function(_8){
-this._stopPopupTimer();
-_8._setSelected(false);
-var _9=_8.popup;
-if(_9){
-this._stopPendingCloseTimer(_9);
-_9._pendingClose_timer=setTimeout(function(){
-_9._pendingClose_timer=null;
-if(_9.parentMenu){
-_9.parentMenu.currentPopup=null;
-}
-dijit.popup.close(_9);
-},this.popupDelay);
-}
-},onItemUnhover:function(_a){
-if(this.isActive){
-this._stopPopupTimer();
-}
-if(this._hoveredChild==_a){
-this._hoveredChild=null;
-}
-},_stopPopupTimer:function(){
-if(this.hover_timer){
-clearTimeout(this.hover_timer);
-this.hover_timer=null;
-}
-},_stopPendingCloseTimer:function(_b){
-if(_b._pendingClose_timer){
-clearTimeout(_b._pendingClose_timer);
-_b._pendingClose_timer=null;
-}
-},_stopFocusTimer:function(){
-if(this._focus_timer){
-clearTimeout(this._focus_timer);
-this._focus_timer=null;
-}
-},_getTopMenu:function(){
-for(var _c=this;_c.parentMenu;_c=_c.parentMenu){
-}
-return _c;
-},onItemClick:function(_d,_e){
-if(typeof this.isShowingNow=="undefined"){
-this._markActive();
-}
-this.focusChild(_d);
-if(_d.disabled){
-return false;
-}
-if(_d.popup){
-this._openPopup();
-}else{
-this.onExecute();
-_d.onClick(_e);
-}
-},_openPopup:function(){
-this._stopPopupTimer();
-var _f=this.focusedChild;
-if(!_f){
-return;
-}
-var _10=_f.popup;
-if(_10.isShowingNow){
-return;
-}
-if(this.currentPopup){
-this._stopPendingCloseTimer(this.currentPopup);
-dijit.popup.close(this.currentPopup);
-}
-_10.parentMenu=this;
-_10.from_item=_f;
-var _11=this;
-dijit.popup.open({parent:this,popup:_10,around:_f.domNode,orient:this._orient||(this.isLeftToRight()?{"TR":"TL","TL":"TR","BR":"BL","BL":"BR"}:{"TL":"TR","TR":"TL","BL":"BR","BR":"BL"}),onCancel:function(){
-_11.focusChild(_f);
-_11._cleanUp();
-_f._setSelected(true);
-_11.focusedChild=_f;
-},onExecute:dojo.hitch(this,"_cleanUp")});
-this.currentPopup=_10;
-_10.connect(_10.domNode,"onmouseenter",dojo.hitch(_11,"_onPopupHover"));
-if(_10.focus){
-_10._focus_timer=setTimeout(dojo.hitch(_10,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(_12){
-if(this._hoveredChild&&this._hoveredChild!=_12){
-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\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),baseClass:"dijitMenu",targetNodeIds:[],contextMenuForWindow:false,leftClickToOpen:false,refocus:true,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(_13){
-var win=dojo.window.get(this._iframeContentDocument(_13))||this._iframeContentDocument(_13)["__parent__"]||(_13.name&&dojo.doc.frames[_13.name])||null;
-return win;
-},_iframeContentDocument:function(_14){
-var doc=_14.contentDocument||(_14.contentWindow&&_14.contentWindow.document)||(_14.name&&dojo.doc.frames[_14.name]&&dojo.doc.frames[_14.name].document)||null;
-return doc;
-},bindDomNode:function(_15){
-_15=dojo.byId(_15);
-var cn;
-if(_15.tagName.toLowerCase()=="iframe"){
-var _16=_15,win=this._iframeContentWindow(_16);
-cn=dojo.withGlobal(win,dojo.body);
-}else{
-cn=(_15==dojo.body()?dojo.doc.documentElement:_15);
-}
-var _17={node:_15,iframe:_16};
-dojo.attr(_15,"_dijitMenu"+this.id,this._bindings.push(_17));
-var _18=dojo.hitch(this,function(cn){
-return [dojo.connect(cn,this.leftClickToOpen?"onclick":"oncontextmenu",this,function(evt){
-dojo.stopEvent(evt);
-this._scheduleOpen(evt.target,_16,{x:evt.pageX,y:evt.pageY});
-}),dojo.connect(cn,"onkeydown",this,function(evt){
-if(evt.shiftKey&&evt.keyCode==dojo.keys.F10){
-dojo.stopEvent(evt);
-this._scheduleOpen(evt.target,_16);
-}
-})];
-});
-_17.connects=cn?_18(cn):[];
-if(_16){
-_17.onloadHandler=dojo.hitch(this,function(){
-var win=this._iframeContentWindow(_16);
-cn=dojo.withGlobal(win,dojo.body);
-_17.connects=_18(cn);
-});
-if(_16.addEventListener){
-_16.addEventListener("load",_17.onloadHandler,false);
-}else{
-_16.attachEvent("onload",_17.onloadHandler);
-}
-}
-},unBindDomNode:function(_19){
-var _1a;
-try{
-_1a=dojo.byId(_19);
-}
-catch(e){
-return;
-}
-var _1b="_dijitMenu"+this.id;
-if(_1a&&dojo.hasAttr(_1a,_1b)){
-var bid=dojo.attr(_1a,_1b)-1,b=this._bindings[bid];
-dojo.forEach(b.connects,dojo.disconnect);
-var _1c=b.iframe;
-if(_1c){
-if(_1c.removeEventListener){
-_1c.removeEventListener("load",b.onloadHandler,false);
-}else{
-_1c.detachEvent("onload",b.onloadHandler);
-}
-}
-dojo.removeAttr(_1a,_1b);
-delete this._bindings[bid];
-}
-},_scheduleOpen:function(_1d,_1e,_1f){
-if(!this._openTimer){
-this._openTimer=setTimeout(dojo.hitch(this,function(){
-delete this._openTimer;
-this._openMyself({target:_1d,iframe:_1e,coords:_1f});
-}),1);
-}
-},_openMyself:function(_20){
-var _21=_20.target,_22=_20.iframe,_23=_20.coords;
-if(_23){
-if(_22){
-var od=_21.ownerDocument,ifc=dojo.position(_22,true),win=this._iframeContentWindow(_22),_24=dojo.withGlobal(win,"_docScroll",dojo);
-var cs=dojo.getComputedStyle(_22),tp=dojo._toPixelValue,_25=(dojo.isIE&&dojo.isQuirks?0:tp(_22,cs.paddingLeft))+(dojo.isIE&&dojo.isQuirks?tp(_22,cs.borderLeftWidth):0),top=(dojo.isIE&&dojo.isQuirks?0:tp(_22,cs.paddingTop))+(dojo.isIE&&dojo.isQuirks?tp(_22,cs.borderTopWidth):0);
-_23.x+=ifc.x+_25-_24.x;
-_23.y+=ifc.y+top-_24.y;
-}
-}else{
-_23=dojo.position(_21,true);
-_23.x+=10;
-_23.y+=10;
-}
-var _26=this;
-var _27=dijit.getFocus(this);
-function _28(){
-if(_26.refocus){
-dijit.focus(_27);
-}
-dijit.popup.close(_26);
-};
-dijit.popup.open({popup:this,x:_23.x,y:_23.y,onExecute:_28,onCancel:_28,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);
-}});
 dojo.require("dijit.MenuItem");
 dojo.require("dijit.PopupMenuItem");
 dojo.require("dijit.CheckedMenuItem");
 dojo.require("dijit.MenuSeparator");
+
+
+// "dijit/MenuItem", "dijit/PopupMenuItem", "dijit/CheckedMenuItem", "dijit/MenuSeparator" for Back-compat (TODO: remove in 2.0)
+
+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
+
+               // 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.disabled){ return false; }
+
+               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.replaceClass(this.domNode, "dijitMenuActive", "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.replaceClass(this.domNode, "dijitMenuPassive", "dijitMenuActive");
+       },
+
+       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();
+
+               var fromItem = this.focusedChild && this.focusedChild.from_item;
+
+               if(this.currentPopup){
+                       // If focus is on my child menu then move focus to me,
+                       // because IE doesn't like it when you display:none a node with focus
+                       if(dijit._curFocus && dojo.isDescendant(dijit._curFocus, this.currentPopup.domNode)){
+                               this.focusedChild.focusNode.focus();
+                       }
+                       // Close all popups that are open and descendants of this menu
+                       dijit.popup.close(this.currentPopup);
+                       this.currentPopup = null;
+               }
+
+               if(this.focusedChild){ // unhighlight the focused item
+                       this.focusedChild._setSelected(false);
+                       this.focusedChild._onUnhover();
+                       this.focusedChild = 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\" role=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=\"0\">\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),
+
+       baseClass: "dijitMenu",
+
+       // 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,
+
+       postCreate: function(){
+               if(this.contextMenuForWindow){
+                       this.bindDomNode(dojo.body());
+               }else{
+                       // TODO: should have _setTargetNodeIds() method to handle initialization and a possible
+                       // later set('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 = dojo.window.get(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
+               // On linux Shift-F10 produces the oncontextmenu event, but on Windows it doesn't, so
+               // we need to monitor keyboard events in addition to the oncontextmenu event.
+               var doConnects = dojo.hitch(this, function(cn){
+                       return [
+                               // TODO: when leftClickToOpen is true then shouldn't space/enter key trigger the menu,
+                               // rather than shift-F10?
+                               dojo.connect(cn, this.leftClickToOpen ? "onclick" : "oncontextmenu", this, function(evt){
+                                       // Schedule context menu to be opened unless it's already been scheduled from onkeydown handler
+                                       dojo.stopEvent(evt);
+                                       this._scheduleOpen(evt.target, iframe, {x: evt.pageX, y: evt.pageY});
+                               }),
+                               dojo.connect(cn, "onkeydown", this, function(evt){
+                                       if(evt.shiftKey && evt.keyCode == dojo.keys.F10){
+                                               dojo.stopEvent(evt);
+                                               this._scheduleOpen(evt.target, iframe); // no coords - open near target node
+                                       }
+                               })
+                       ];
+               });
+               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];
+               }
+       },
+
+       _scheduleOpen: function(/*DomNode?*/ target, /*DomNode?*/ iframe, /*Object?*/ coords){
+               // summary:
+               //              Set timer to display myself.  Using a timer rather than displaying immediately solves
+               //              two problems:
+               //
+               //              1. IE: without the delay, focus work in "open" causes the system
+               //              context menu to appear in spite of stopEvent.
+               //
+               //              2. Avoid double-shows on linux, where shift-F10 generates an oncontextmenu event
+               //              even after a dojo.stopEvent(e).  (Shift-F10 on windows doesn't generate the
+               //              oncontextmenu event.)
+
+               if(!this._openTimer){
+                       this._openTimer = setTimeout(dojo.hitch(this, function(){
+                               delete this._openTimer;
+                               this._openMyself({
+                                       target: target,
+                                       iframe: iframe,
+                                       coords: coords
+                               });
+                       }), 1);
+               }
+       },
+
+       _openMyself: function(args){
+               // summary:
+               //              Internal function for opening myself when the user does a right-click or something similar.
+               // args:
+               //              This is an Object containing:
+               //              * target:
+               //                      The node that is being clicked
+               //              * iframe:
+               //                      If an <iframe> is being clicked, iframe points to that iframe
+               //              * coords:
+               //                      Put menu at specified x/y position in viewport, or if iframe is
+               //                      specified, then relative to iframe.
+               //
+               //              _openMyself() formerly took the event object, and since various code references
+               //              evt.target (after connecting to _openMyself()), using an Object for parameters
+               //              (so that old code still works).
+
+               var target = args.target,
+                       iframe = args.iframe,
+                       coords = args.coords;
+
+               // Get coordinates to open menu, either at specified (mouse) position or (if triggered via keyboard)
+               // then near the node the menu is assigned to.
+               if(coords){
+                       if(iframe){
+                               // Specified coordinates are on <body> node of an <iframe>, convert to match main document
+                               var od = 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);
+
+                               coords.x += ifc.x + left - scroll.x;
+                               coords.y += ifc.y + top - scroll.y;
+                       }
+               }else{
+                       coords = dojo.position(target, true);
+                       coords.x += 10;
+                       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: coords.x,
+                       y: coords.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);
+       }
+}
+);
+
 }
index d7eb3543807c525a4c5a2486509ca17f8a5aa475..06d236b66e35cbc10c7db0221abe909430dccf9e 100644 (file)
@@ -1,38 +1,77 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.MenuBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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"),baseClass:"dijitMenuBar",_isMenuBar:true,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]);
-this._orient=this.isLeftToRight()?{BL:"TL"}:{BR:"TR"};
-},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);
-}
-}});
+
+
+dojo.declare("dijit.MenuBar", dijit._MenuBase, {
+       // summary:
+       //              A menu bar, listing menu choices horizontally, like the "File" menu in most desktop applications
+
+       templateString: dojo.cache("dijit", "templates/MenuBar.html", "<div class=\"dijitMenuBar dijitMenuPassive\" dojoAttachPoint=\"containerNode\"  role=\"menubar\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress: _onKeyPress\"></div>\n"),
+
+       baseClass: "dijitMenuBar",
+
+       // _isMenuBar: [protected] Boolean
+       //              This is a MenuBar widget, not a (vertical) Menu widget.
+       _isMenuBar: true,
+
+       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]
+               );
+
+               // parameter to dijit.popup.open() about where to put popup (relative to this.domNode)
+               this._orient = this.isLeftToRight() ? {BL: 'TL'} : {BR: 'TR'};
+       },
+
+       focusChild: function(item){
+               // overload focusChild so that whenever the focus is moved to a new item,
+               // check the previous focused whether it has its popup open, if so, after
+               // focusing the new item, open its submenu immediately
+               var prev_item = this.focusedChild,
+                       showpopup = prev_item && prev_item.popup && prev_item.popup.isShowingNow;
+               this.inherited(arguments);
+               if(showpopup && item.popup && !item.disabled){
+                       this._openPopup();              // TODO: on down arrow, _openPopup() is called here and in onItemClick()
+               }
+       },
+
+       _onKeyPress: function(/*Event*/ evt){
+               // summary:
+               //              Handle keyboard based menu navigation.
+               // tags:
+               //              protected
+
+               if(evt.ctrlKey || evt.altKey){ return; }
+
+               switch(evt.charOrCode){
+                       case dojo.keys.DOWN_ARROW:
+                               this._moveToPopup(evt);
+                               dojo.stopEvent(evt);
+               }
+       },
+
+       onItemClick: function(/*dijit._Widget*/ item, /*Event*/ evt){
+               // summary:
+               //              Handle clicks on an item. Cancels a dropdown if already open.
+               // tags:
+               //              private
+               if(item.popup && item.popup.isShowingNow){
+                       item.popup.onCancel();
+               }else{
+                       this.inherited(arguments);
+               }
+       }
+});
+
 }
index 77088bff2555aaba9f73f1f0dcd488205087ce13..2c7372dcd4f3d50a0f15f03d681900a7617eec17 100644 (file)
@@ -1,14 +1,29 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.MenuBarItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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],{});
+
+
+dojo.declare("dijit._MenuBarItemMixin", null, {
+       templateString: dojo.cache("dijit", "templates/MenuBarItem.html", "<div class=\"dijitReset dijitInline dijitMenuItem dijitMenuItemLabel\" dojoAttachPoint=\"focusNode\" role=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<span dojoAttachPoint=\"containerNode\"></span>\n</div>\n"),
+
+       // overriding attributeMap because we don't have icon
+       attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+               label: { node: "containerNode", type: "innerHTML" }
+       })
+});
+
+dojo.declare("dijit.MenuBarItem", [dijit.MenuItem, dijit._MenuBarItemMixin], {
+       // summary:
+       //              Item in a MenuBar that's clickable, and doesn't spawn a submenu when pressed (or hovered)
+
+});
+
 }
index 1f890b5f4432f91381ac39897fb2604dc4326313..966b2b46bece158da2055e61d358fd1c1681e5be 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+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.require("dijit._Widget");
 dojo.require("dijit._Templated");
 dojo.require("dijit._Contained");
 dojo.require("dijit._CssStateMixin");
-dojo.declare("dijit.MenuItem",[dijit._Widget,dijit._Templated,dijit._Contained,dijit._CssStateMixin],{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 dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon 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"}}),baseClass:"dijitMenuItem",label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_1){
-if(_1&&!("label" in this.params)){
-this.set("label",_1.innerHTML);
-}
-},postCreate:function(){
-this.inherited(arguments);
-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(){
-this.getParent().onItemHover(this);
-},_onUnhover:function(){
-this.getParent().onItemUnhover(this);
-this._hovering=false;
-this._setStateClass();
-},_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 set('label', ...) instead.","","2.0");
-this.set("label",_6);
-},setDisabled:function(_7){
-dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");
-this.set("disabled",_7);
-},_setDisabledAttr:function(_8){
-this.disabled=_8;
-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");
-}});
+
+
+dojo.declare("dijit.MenuItem",
+               [dijit._Widget, dijit._Templated, dijit._Contained, dijit._CssStateMixin],
+               {
+               // 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\" role=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon 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\" role=\"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" }
+               }),
+
+               baseClass: "dijitMenuItem",
+
+               // 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.set('label', source.innerHTML);
+                       }
+               },
+
+               buildRendering: function(){
+                       this.inherited(arguments);
+                       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);
+                       dojo.setSelectable(this.domNode, false);
+               },
+
+               _onHover: function(){
+                       // summary:
+                       //              Handler when mouse is moved onto menu item
+                       // tags:
+                       //              protected
+                       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
+                       this.getParent().onItemUnhover(this);
+
+                       // When menu is hidden (collapsed) due to clicking a MenuItem and having it execute,
+                       // FF and IE don't generate an onmouseout event for the MenuItem.
+                       // So, help out _CssStateMixin in this case.
+                       this._set("hovering", false);
+               },
+
+               _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 set('label', ...) instead.
+                       // tags:
+                       //              deprecated
+                       dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use set('label', ...) instead.", "", "2.0");
+                       this.set("label", content);
+               },
+
+               setDisabled: function(/*Boolean*/ disabled){
+                       // summary:
+                       //              Deprecated.   Use set('disabled', bool) instead.
+                       // tags:
+                       //              deprecated
+                       dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.", "", "2.0");
+                       this.set('disabled', disabled);
+               },
+               _setDisabledAttr: function(/*Boolean*/ value){
+                       // summary:
+                       //              Hook for attr('disabled', ...) to work.
+                       //              Enable or disable this menu item.
+
+                       dijit.setWaiState(this.focusNode, 'disabled', value ? 'true' : 'false');
+                       this._set("disabled", value);
+               },
+               _setAccelKeyAttr: function(/*String*/ value){
+                       // summary:
+                       //              Hook for attr('accelKey', ...) to work.
+                       //              Set accelKey on this menu item.
+
+                       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");
+                       
+                       this._set("accelKey", value);
+               }
+       });
+
 }
index 34fa0badaa99b6ea8ad9e8f1890d008bfeb9ee2d..e532d93207d8884e63a1eb10f4cbb0bf2a156840 100644 (file)
@@ -1,19 +1,39 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+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.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 class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></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;
-}});
+
+
+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 class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),
+
+               buildRendering: function(){
+                       this.inherited(arguments);
+                       dojo.setSelectable(this.domNode, false);
+               },
+
+               isFocusable: function(){
+                       // summary:
+                       //              Override to always return false
+                       // tags:
+                       //              protected
+
+                       return false; // Boolean
+               }
+       });
+
 }
index ce2eda5469c0fcdeecf715082af84d1343ccf552..38a5edd9b31d6a390ebbd61dbde7e15f1029e12d 100644 (file)
@@ -1,14 +1,20 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.PopupMenuBarItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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],{});
+
+
+dojo.declare("dijit.PopupMenuBarItem", [dijit.PopupMenuItem, dijit._MenuBarItemMixin], {
+       // summary:
+       //              Item in a MenuBar like "File" or "Edit", that spawns a submenu when pressed (or hovered)
+});
+
 }
index 29a011cc0ab3ed669aa08928302086ecbdbb4054..da44a23f7e4e6dd89983b7d78c50267142d65228 100644 (file)
@@ -1,43 +1,74 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+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.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.startup();
-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);
-}});
+
+
+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.startup();
+
+                       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);
+               }
+       });
+
 }
index 54b48a3abd1b3ce647387dc3ae3a9f15a571e58c..3b453206054bf30dafcad829fa5c9782d0677c3f 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.ProgressBar"]){
-dojo._hasResource["dijit.ProgressBar"]=true;
+if(!dojo._hasResource["dijit.ProgressBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.ProgressBar"] = true;
 dojo.provide("dijit.ProgressBar");
 dojo.require("dojo.fx");
 dojo.require("dojo.number");
 dojo.require("dijit._Widget");
 dojo.require("dijit._Templated");
-dojo.declare("dijit.ProgressBar",[dijit._Widget,dijit._Templated],{progress:"0",maximum:100,places:0,indeterminate:false,name:"",templateString:dojo.cache("dijit","templates/ProgressBar.html","<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),_indeterminateHighContrastImagePath:dojo.moduleUrl("dijit","themes/a11y/indeterminate_progress.gif"),postCreate:function(){
-this.inherited(arguments);
-this.indeterminateHighContrastImage.setAttribute("src",this._indeterminateHighContrastImagePath.toString());
-this.update();
-},update:function(_1){
-dojo.mixin(this,_1||{});
-var _2=this.internalProgress;
-var _3=1,_4;
-if(this.indeterminate){
-_4="addClass";
-dijit.removeWaiState(_2,"valuenow");
-dijit.removeWaiState(_2,"valuemin");
-dijit.removeWaiState(_2,"valuemax");
-}else{
-_4="removeClass";
-if(String(this.progress).indexOf("%")!=-1){
-_3=Math.min(parseFloat(this.progress)/100,1);
-this.progress=_3*this.maximum;
-}else{
-this.progress=Math.min(this.progress,this.maximum);
-_3=this.progress/this.maximum;
-}
-var _5=this.report(_3);
-this.label.firstChild.nodeValue=_5;
-dijit.setWaiState(_2,"describedby",this.label.id);
-dijit.setWaiState(_2,"valuenow",this.progress);
-dijit.setWaiState(_2,"valuemin",0);
-dijit.setWaiState(_2,"valuemax",this.maximum);
-}
-dojo[_4](this.domNode,"dijitProgressBarIndeterminate");
-_2.style.width=(_3*100)+"%";
-this.onChange();
-},_setValueAttr:function(v){
-if(v==Infinity){
-this.update({indeterminate:true});
-}else{
-this.update({indeterminate:false,progress:v});
-}
-},_getValueAttr:function(){
-return this.progress;
-},report:function(_6){
-return dojo.number.format(_6,{type:"percent",places:this.places,locale:this.lang});
-},onChange:function(){
-}});
+
+
+dojo.declare("dijit.ProgressBar", [dijit._Widget, dijit._Templated], {
+       // summary:
+       //              A progress indication widget, showing the amount completed
+       //              (often the percentage completed) of a task.
+       //
+       // example:
+       // |    <div dojoType="ProgressBar"
+       // |             places="0"
+       // |             value="..." maximum="...">
+       // |    </div>
+
+       // progress: [const] String (Percentage or Number)
+       //              Number or percentage indicating amount of task completed.
+       //              Deprecated.   Use "value" instead.
+       progress: "0",
+
+       // value: String (Percentage or Number)
+       //              Number or percentage indicating amount of task completed.
+       //              With "%": percentage value, 0% <= progress <= 100%, or
+       //              without "%": absolute value, 0 <= progress <= maximum.
+       //              Infinity means that the progress bar is indeterminate.
+       value: "",
+
+       // maximum: [const] Float
+       //              Max sample number
+       maximum: 100,
+
+       // places: [const] Number
+       //              Number of places to show in values; 0 by default
+       places: 0,
+
+       // indeterminate: [const] Boolean
+       //              If false: show progress value (number or percentage).
+       //              If true: show that a process is underway but that the amount completed is unknown.
+       //              Deprecated.   Use "value" instead.
+       indeterminate: false,
+
+       // label: String?
+       //              Label on progress bar.   Defaults to percentage for determinate progress bar and
+       //              blank for indeterminate progress bar.
+       label:"",
+
+       // name: String
+       //              this is the field name (for a form) if set. This needs to be set if you want to use
+       //              this widget in a dijit.form.Form widget (such as dijit.Dialog)
+       name: '',
+
+       templateString: dojo.cache("dijit", "templates/ProgressBar.html", "<div class=\"dijitProgressBar dijitProgressBarEmpty\" role=\"progressbar\"\n\t><div  dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\" role=\"presentation\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"labelNode\" class=\"dijitProgressBarLabel\" id=\"${id}_label\"></div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),
+
+       // _indeterminateHighContrastImagePath: [private] dojo._URL
+       //              URL to image to use for indeterminate progress bar when display is in high contrast mode
+       _indeterminateHighContrastImagePath:
+               dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"),
+
+       postMixInProperties: function(){
+               this.inherited(arguments);
+               if(!("value" in this.params)){
+                       this.value = this.indeterminate ? Infinity : this.progress;
+               }
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+               this.indeterminateHighContrastImage.setAttribute("src",
+                       this._indeterminateHighContrastImagePath.toString());
+               this.update();
+       },
+
+       update: function(/*Object?*/attributes){
+               // summary:
+               //              Internal method to change attributes of ProgressBar, similar to set(hash).  Users should call
+               //              set("value", ...) rather than calling this method directly.
+               // attributes:
+               //              May provide progress and/or maximum properties on this parameter;
+               //              see attribute specs for details.
+               // example:
+               //      |       myProgressBar.update({'indeterminate': true});
+               //      |       myProgressBar.update({'progress': 80});
+               //      |       myProgressBar.update({'indeterminate': true, label:"Loading ..." })
+               // tags:
+               //              private
+
+               // TODO: deprecate this method and use set() instead
+
+               dojo.mixin(this, attributes || {});
+               var tip = this.internalProgress, ap = this.domNode;
+               var percent = 1;
+               if(this.indeterminate){
+                       dijit.removeWaiState(ap, "valuenow");
+                       dijit.removeWaiState(ap, "valuemin");
+                       dijit.removeWaiState(ap, "valuemax");
+               }else{
+                       if(String(this.progress).indexOf("%") != -1){
+                               percent = Math.min(parseFloat(this.progress)/100, 1);
+                               this.progress = percent * this.maximum;
+                       }else{
+                               this.progress = Math.min(this.progress, this.maximum);
+                               percent = this.progress / this.maximum;
+                       }
+
+                       dijit.setWaiState(ap, "describedby", this.labelNode.id);
+                       dijit.setWaiState(ap, "valuenow", this.progress);
+                       dijit.setWaiState(ap, "valuemin", 0);
+                       dijit.setWaiState(ap, "valuemax", this.maximum);
+               }
+               this.labelNode.innerHTML = this.report(percent);
+
+               dojo.toggleClass(this.domNode, "dijitProgressBarIndeterminate", this.indeterminate);
+               tip.style.width = (percent * 100) + "%";
+               this.onChange();
+       },
+
+       _setValueAttr: function(v){
+               this._set("value", v);
+               if(v == Infinity){
+                       this.update({indeterminate:true});
+               }else{
+                       this.update({indeterminate:false, progress:v});
+               }
+       },
+
+       _setLabelAttr: function(label){
+               this._set("label", label);
+               this.update();
+       },
+
+       _setIndeterminateAttr: function(indeterminate){
+               // Deprecated, use set("value", ...) instead
+               this.indeterminate = indeterminate;
+               this.update();
+       },
+
+       report: function(/*float*/percent){
+               // summary:
+               //              Generates message to show inside progress bar (normally indicating amount of task completed).
+               //              May be overridden.
+               // tags:
+               //              extension
+
+               return this.label ? this.label :
+                               (this.indeterminate ? "&nbsp;" : dojo.number.format(percent, { type: "percent", places: this.places, locale: this.lang }));
+       },
+
+       onChange: function(){
+               // summary:
+               //              Callback fired when progress updates.
+               // tags:
+               //              extension
+       }
+});
+
 }
index f3fc7fade6551743592e8b6789d3fc49f2120728..c29ac02f2813ecb0cff97e2f3e78ff36b8ed3086 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.TitlePane"]){
-dojo._hasResource["dijit.TitlePane"]=true;
+if(!dojo._hasResource["dijit.TitlePane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.TitlePane"] = true;
 dojo.provide("dijit.TitlePane");
 dojo.require("dojo.fx");
 dojo.require("dijit._Templated");
 dojo.require("dijit.layout.ContentPane");
 dojo.require("dijit._CssStateMixin");
-dojo.declare("dijit.TitlePane",[dijit.layout.ContentPane,dijit._Templated,dijit._CssStateMixin],{title:"",open:true,toggleable:true,tabIndex:"0",duration:dijit.defaultDuration,baseClass:"dijitTitlePane",templateString:dojo.cache("dijit","templates/TitlePane.html","<div>\n\t<div dojoAttachEvent=\"onclick:_onTitleClick, onkeypress:_onTitleKey\"\n\t\t\tclass=\"dijitTitlePaneTitle\" dojoAttachPoint=\"titleBarNode\">\n\t\t<div class=\"dijitTitlePaneTitleFocus\" dojoAttachPoint=\"focusNode\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"arrowNode\" class=\"dijitArrowNode\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span\n\t\t\t><span dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></span>\n\t\t</div>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\" waiRole=\"presentation\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\" waiRole=\"presentation\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\" id=\"${id}_pane\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc.  Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n"),attributeMap:dojo.delegate(dijit.layout.ContentPane.prototype.attributeMap,{title:{node:"titleNode",type:"innerHTML"},tooltip:{node:"focusNode",type:"attribute",attribute:"title"},id:""}),postCreate:function(){
-if(!this.open){
-this.hideNode.style.display=this.wipeNode.style.display="none";
-}
-if(this.toggleable){
-this._trackMouseState(this.titleBarNode,"dijitTitlePaneTitle");
-}
-this._setCss();
-dojo.setSelectable(this.titleNode,false);
-var _1=this.hideNode,_2=this.wipeNode;
-this._wipeIn=dojo.fx.wipeIn({node:this.wipeNode,duration:this.duration,beforeBegin:function(){
-_1.style.display="";
-}});
-this._wipeOut=dojo.fx.wipeOut({node:this.wipeNode,duration:this.duration,onEnd:function(){
-_1.style.display="none";
-}});
-this.inherited(arguments);
-},_setOpenAttr:function(_3){
-if(this.open!==_3){
-this.toggle();
-}
-dijit.setWaiState(this.containerNode,"hidden",this.open?"false":"true");
-dijit.setWaiState(this.focusNode,"pressed",this.open?"true":"false");
-},_setToggleableAttr:function(_4){
-this.toggleable=_4;
-dijit.setWaiRole(this.focusNode,_4?"button":"heading");
-if(_4){
-dijit.setWaiState(this.focusNode,"controls",this.id+"_pane");
-dojo.attr(this.focusNode,"tabIndex",this.tabIndex);
-}else{
-dojo.removeAttr(this.focusNode,"tabIndex");
-}
-this._setCss();
-},_setContentAttr:function(_5){
-if(!this.open||!this._wipeOut||this._wipeOut.status()=="playing"){
-this.inherited(arguments);
-}else{
-if(this._wipeIn&&this._wipeIn.status()=="playing"){
-this._wipeIn.stop();
-}
-dojo.marginBox(this.wipeNode,{h:dojo.marginBox(this.wipeNode).h});
-this.inherited(arguments);
-if(this._wipeIn){
-this._wipeIn.play();
-}else{
-this.hideNode.style.display="";
-}
-}
-},toggle:function(){
-dojo.forEach([this._wipeIn,this._wipeOut],function(_6){
-if(_6&&_6.status()=="playing"){
-_6.stop();
-}
+
+
+dojo.declare(
+       "dijit.TitlePane",
+       [dijit.layout.ContentPane, dijit._Templated, dijit._CssStateMixin],
+{
+       // summary:
+       //              A pane with a title on top, that can be expanded or collapsed.
+       //
+       // description:
+       //              An accessible container with a title Heading, and a content
+       //              section that slides open and closed. TitlePane is an extension to
+       //              `dijit.layout.ContentPane`, providing all the useful content-control aspects from it.
+       //
+       // example:
+       // |    // load a TitlePane from remote file:
+       // |    var foo = new dijit.TitlePane({ href: "foobar.html", title:"Title" });
+       // |    foo.startup();
+       //
+       // example:
+       // |    <!-- markup href example: -->
+       // |    <div dojoType="dijit.TitlePane" href="foobar.html" title="Title"></div>
+       //
+       // example:
+       // |    <!-- markup with inline data -->
+       // |    <div dojoType="dijit.TitlePane" title="Title">
+       // |            <p>I am content</p>
+       // |    </div>
+
+       // title: String
+       //              Title of the pane
+       title: "",
+
+       // open: Boolean
+       //              Whether pane is opened or closed.
+       open: true,
+
+       // toggleable: Boolean
+       //              Whether pane can be opened or closed by clicking the title bar.
+       toggleable: true,
+
+       // tabIndex: String
+       //              Tabindex setting for the title (so users can tab to the title then
+       //              use space/enter to open/close the title pane)
+       tabIndex: "0",
+
+       // duration: Integer
+       //              Time in milliseconds to fade in/fade out
+       duration: dijit.defaultDuration,
+
+       // baseClass: [protected] String
+       //              The root className to be placed on this widget's domNode.
+       baseClass: "dijitTitlePane",
+
+       templateString: dojo.cache("dijit", "templates/TitlePane.html", "<div>\n\t<div dojoAttachEvent=\"onclick:_onTitleClick, onkeypress:_onTitleKey\"\n\t\t\tclass=\"dijitTitlePaneTitle\" dojoAttachPoint=\"titleBarNode\">\n\t\t<div class=\"dijitTitlePaneTitleFocus\" dojoAttachPoint=\"focusNode\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"arrowNode\" class=\"dijitArrowNode\" role=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span\n\t\t\t><span dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></span>\n\t\t</div>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\" role=\"presentation\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\" role=\"presentation\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" role=\"region\" id=\"${id}_pane\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc.  Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n"),
+
+       attributeMap: dojo.delegate(dijit.layout.ContentPane.prototype.attributeMap, {
+               title: { node: "titleNode", type: "innerHTML" },
+               tooltip: {node: "focusNode", type: "attribute", attribute: "title"},    // focusNode spans the entire width, titleNode doesn't
+               id:""
+       }),
+
+       buildRendering: function(){
+               this.inherited(arguments);
+               dojo.setSelectable(this.titleNode, false);
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
+               
+               // Hover and focus effect on title bar, except for non-toggleable TitlePanes
+               // This should really be controlled from _setToggleableAttr() but _CssStateMixin
+               // doesn't provide a way to disconnect a previous _trackMouseState() call
+               if(this.toggleable){
+                       this._trackMouseState(this.titleBarNode, "dijitTitlePaneTitle");
+               }
+
+               // setup open/close animations
+               var hideNode = this.hideNode, wipeNode = this.wipeNode;
+               this._wipeIn = dojo.fx.wipeIn({
+                       node: this.wipeNode,
+                       duration: this.duration,
+                       beforeBegin: function(){
+                               hideNode.style.display="";
+                       }
+               });
+               this._wipeOut = dojo.fx.wipeOut({
+                       node: this.wipeNode,
+                       duration: this.duration,
+                       onEnd: function(){
+                               hideNode.style.display="none";
+                       }
+               });
+       },
+
+       _setOpenAttr: function(/*Boolean*/ open, /*Boolean*/ animate){
+               // summary:
+               //              Hook to make set("open", boolean) control the open/closed state of the pane.
+               // open: Boolean
+               //              True if you want to open the pane, false if you want to close it.
+
+               dojo.forEach([this._wipeIn, this._wipeOut], function(animation){
+                       if(animation && animation.status() == "playing"){
+                               animation.stop();
+                       }
+               });
+
+               if(animate){
+                       var anim = this[open ? "_wipeIn" : "_wipeOut"];
+                       anim.play();
+               }else{
+                       this.hideNode.style.display = this.wipeNode.style.display = open ? "" : "none";
+               }
+
+               // load content (if this is the first time we are opening the TitlePane
+               // and content is specified as an href, or href was set when hidden)
+               if(this._started){
+                       if(open){
+                               this._onShow();
+                       }else{
+                               this.onHide();
+                       }
+               }
+
+               this.arrowNodeInner.innerHTML = open ? "-" : "+";
+
+               dijit.setWaiState(this.containerNode,"hidden", open ? "false" : "true");
+               dijit.setWaiState(this.focusNode, "pressed", open ? "true" : "false");
+
+               this._set("open", open);
+
+               this._setCss();
+       },
+
+       _setToggleableAttr: function(/*Boolean*/ canToggle){
+               // summary:
+               //              Hook to make set("toggleable", boolean) work.
+               // canToggle: Boolean
+               //              True to allow user to open/close pane by clicking title bar.
+
+               dijit.setWaiRole(this.focusNode, canToggle ? "button" : "heading");
+               if(canToggle){
+                       // TODO: if canToggle is switched from true to false shouldn't we remove this setting?
+                       dijit.setWaiState(this.focusNode, "controls", this.id+"_pane");
+                       dojo.attr(this.focusNode, "tabIndex", this.tabIndex);
+               }else{
+                       dojo.removeAttr(this.focusNode, "tabIndex");
+               }
+
+               this._set("toggleable", canToggle);
+
+               this._setCss();
+       },
+
+       _setContentAttr: function(/*String|DomNode|Nodelist*/ content){
+               // summary:
+               //              Hook to make set("content", ...) work.
+               //              Typically called when an href is loaded.  Our job is to make the animation smooth.
+
+               if(!this.open || !this._wipeOut || this._wipeOut.status() == "playing"){
+                       // we are currently *closing* the pane (or the pane is closed), so just let that continue
+                       this.inherited(arguments);
+               }else{
+                       if(this._wipeIn && this._wipeIn.status() == "playing"){
+                               this._wipeIn.stop();
+                       }
+
+                       // freeze container at current height so that adding new content doesn't make it jump
+                       dojo.marginBox(this.wipeNode, { h: dojo.marginBox(this.wipeNode).h });
+
+                       // add the new content (erasing the old content, if any)
+                       this.inherited(arguments);
+
+                       // call _wipeIn.play() to animate from current height to new height
+                       if(this._wipeIn){
+                               this._wipeIn.play();
+                       }else{
+                               this.hideNode.style.display = "";
+                       }
+               }
+       },
+
+       toggle: function(){
+               // summary:
+               //              Switches between opened and closed state
+               // tags:
+               //              private
+
+               this._setOpenAttr(!this.open, true);
+       },
+
+       _setCss: function(){
+               // summary:
+               //              Set the open/close css state for the TitlePane
+               // tags:
+               //              private
+
+               var node = this.titleBarNode || this.focusNode;
+               var oldCls = this._titleBarClass;
+               this._titleBarClass = "dijit" + (this.toggleable ? "" : "Fixed") + (this.open ? "Open" : "Closed");
+               dojo.replaceClass(node, this._titleBarClass, oldCls || "");
+
+               this.arrowNodeInner.innerHTML = this.open ? "-" : "+";
+       },
+
+       _onTitleKey: function(/*Event*/ e){
+               // summary:
+               //              Handler for when user hits a key
+               // tags:
+               //              private
+
+               if(e.charOrCode == dojo.keys.ENTER || e.charOrCode == ' '){
+                       if(this.toggleable){
+                               this.toggle();
+                       }
+                       dojo.stopEvent(e);
+               }else if(e.charOrCode == dojo.keys.DOWN_ARROW && this.open){
+                       this.containerNode.focus();
+                       e.preventDefault();
+               }
+       },
+
+       _onTitleClick: function(){
+               // summary:
+               //              Handler when user clicks the title bar
+               // tags:
+               //              private
+               if(this.toggleable){
+                       this.toggle();
+               }
+       },
+
+       setTitle: function(/*String*/ title){
+               // summary:
+               //              Deprecated.  Use set('title', ...) instead.
+               // tags:
+               //              deprecated
+               dojo.deprecated("dijit.TitlePane.setTitle() is deprecated.  Use set('title', ...) instead.", "", "2.0");
+               this.set("title", title);
+       }
 });
-var _7=this[this.open?"_wipeOut":"_wipeIn"];
-if(_7){
-_7.play();
-}else{
-this.hideNode.style.display=this.open?"":"none";
-}
-this.open=!this.open;
-if(this.open){
-this._onShow();
-}else{
-this.onHide();
-}
-this._setCss();
-},_setCss:function(){
-var _8=this.titleBarNode||this.focusNode;
-if(this._titleBarClass){
-dojo.removeClass(_8,this._titleBarClass);
-}
-this._titleBarClass="dijit"+(this.toggleable?"":"Fixed")+(this.open?"Open":"Closed");
-dojo.addClass(_8,this._titleBarClass);
-this.arrowNodeInner.innerHTML=this.open?"-":"+";
-},_onTitleKey:function(e){
-if(e.charOrCode==dojo.keys.ENTER||e.charOrCode==" "){
-if(this.toggleable){
-this.toggle();
-}
-dojo.stopEvent(e);
-}else{
-if(e.charOrCode==dojo.keys.DOWN_ARROW&&this.open){
-this.containerNode.focus();
-e.preventDefault();
-}
-}
-},_onTitleClick:function(){
-if(this.toggleable){
-this.toggle();
-}
-},setTitle:function(_9){
-dojo.deprecated("dijit.TitlePane.setTitle() is deprecated.  Use set('title', ...) instead.","","2.0");
-this.set("title",_9);
-}});
+
 }
index e51f7eaf8c652ffeb1ce9b03b14ee23a41353937..94184f989c582f799465c275680899d88bf9aafc 100644 (file)
@@ -1,25 +1,53 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.Toolbar"]){
-dojo._hasResource["dijit.Toolbar"]=true;
+if(!dojo._hasResource["dijit.Toolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Toolbar"] = true;
 dojo.provide("dijit.Toolbar");
 dojo.require("dijit._Widget");
 dojo.require("dijit._KeyNavContainer");
 dojo.require("dijit._Templated");
-dojo.declare("dijit.Toolbar",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{templateString:"<div class=\"dijit\" waiRole=\"toolbar\" tabIndex=\"${tabIndex}\" dojoAttachPoint=\"containerNode\">"+"</div>",baseClass:"dijitToolbar",postCreate:function(){
-this.connectKeyNavHandlers(this.isLeftToRight()?[dojo.keys.LEFT_ARROW]:[dojo.keys.RIGHT_ARROW],this.isLeftToRight()?[dojo.keys.RIGHT_ARROW]:[dojo.keys.LEFT_ARROW]);
-this.inherited(arguments);
-},startup:function(){
-if(this._started){
-return;
-}
-this.startupKeyNavChildren();
-this.inherited(arguments);
-}});
 dojo.require("dijit.ToolbarSeparator");
+
+
+// Note: require of ToolbarSeparator is for back-compat, remove for 2.0
+
+dojo.declare("dijit.Toolbar",
+       [dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
+       {
+       // summary:
+       //              A Toolbar widget, used to hold things like `dijit.Editor` buttons
+
+       templateString:
+               '<div class="dijit" role="toolbar" tabIndex="${tabIndex}" dojoAttachPoint="containerNode">' +
+               //      '<table style="table-layout: fixed" class="dijitReset dijitToolbarTable">' + // factor out style
+               //              '<tr class="dijitReset" dojoAttachPoint="containerNode"></tr>'+
+               //      '</table>' +
+               '</div>',
+
+       baseClass: "dijitToolbar",
+
+       postCreate: function(){
+               this.inherited(arguments);
+
+               this.connectKeyNavHandlers(
+                       this.isLeftToRight() ? [dojo.keys.LEFT_ARROW] : [dojo.keys.RIGHT_ARROW],
+                       this.isLeftToRight() ? [dojo.keys.RIGHT_ARROW] : [dojo.keys.LEFT_ARROW]
+               );
+       },
+
+       startup: function(){
+               if(this._started){ return; }
+
+               this.startupKeyNavChildren();
+
+               this.inherited(arguments);
+       }
+}
+);
+
 }
index dca5792f7d4348ddb56b79f502e8a5a1d70589ed..39a29d50bfd31fc3bcea5795b0d34267de6ac7dd 100644 (file)
@@ -1,18 +1,35 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.ToolbarSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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\" waiRole=\"presentation\"></div>",postCreate:function(){
-dojo.setSelectable(this.domNode,false);
-},isFocusable:function(){
-return false;
-}});
+
+
+dojo.declare("dijit.ToolbarSeparator",
+               [ dijit._Widget, dijit._Templated ],
+               {
+               // summary:
+               //              A spacer between two `dijit.Toolbar` items
+               templateString: '<div class="dijitToolbarSeparator dijitInline" role="presentation"></div>',
+               buildRendering: function(){
+                       this.inherited(arguments);
+                       dojo.setSelectable(this.domNode, false);
+               },
+               isFocusable: function(){
+                       // summary:
+                       //              This widget isn't focusable, so pass along that fact.
+                       // tags:
+                       //              protected
+                       return false;
+               }
+
+       });
+
 }
index fea9a0bc1a205afdc42e940ad93121a9c773d609..46b3a3805ec5f60d4d1fb72eee353d6625b7cde8 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.Tooltip"]){
-dojo._hasResource["dijit.Tooltip"]=true;
+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.require("dijit._Widget");
 dojo.require("dijit._Templated");
-dojo.declare("dijit._MasterTooltip",[dijit._Widget,dijit._Templated],{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);
-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(_1,_2,_3,_4){
-if(this.aroundNode&&this.aroundNode===_2){
-return;
-}
-if(this.fadeOut.status()=="playing"){
-this._onDeck=arguments;
-return;
-}
-this.containerNode.innerHTML=_1;
-var _5=dijit.placeOnScreenAroundElement(this.domNode,_2,dijit.getPopupAroundAlignment((_3&&_3.length)?_3:dijit.Tooltip.defaultPosition,!_4),dojo.hitch(this,"orient"));
-dojo.style(this.domNode,"opacity",0);
-this.fadeIn.play();
-this.isShowingNow=true;
-this.aroundNode=_2;
-},orient:function(_6,_7,_8){
-_6.className="dijitTooltip "+{"BL-TL":"dijitTooltipBelow dijitTooltipABLeft","TL-BL":"dijitTooltipAbove dijitTooltipABLeft","BR-TR":"dijitTooltipBelow dijitTooltipABRight","TR-BR":"dijitTooltipAbove dijitTooltipABRight","BR-BL":"dijitTooltipRight","BL-BR":"dijitTooltipLeft"}[_7+"-"+_8];
-},_onShow:function(){
-if(dojo.isIE){
-this.domNode.style.filter="";
-}
-},hide:function(_9){
-if(this._onDeck&&this._onDeck[1]==_9){
-this._onDeck=null;
-}else{
-if(this.aroundNode===_9){
-this.fadeIn.stop();
-this.isShowingNow=false;
-this.aroundNode=null;
-this.fadeOut.play();
-}else{
-}
-}
-},_onHide:function(){
-this.domNode.style.cssText="";
-this.containerNode.innerHTML="";
-if(this._onDeck){
-this.show.apply(this,this._onDeck);
-this._onDeck=null;
-}
-}});
-dijit.showTooltip=function(_a,_b,_c,_d){
-if(!dijit._masterTT){
-dijit._masterTT=new dijit._MasterTooltip();
-}
-return dijit._masterTT.show(_a,_b,_c,_d);
+
+
+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\" role='alert'></div\n\t><div class=\"dijitTooltipConnector\" dojoAttachPoint=\"connectorNode\"></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, /*Boolean*/ rtl){
+                       // summary:
+                       //              Display tooltip w/specified contents to right of specified node
+                       //              (To left if there's no space on the right, or if rtl == true)
+
+                       if(this.aroundNode && this.aroundNode === aroundNode){
+                               return;
+                       }
+
+                       // reset width; it may have been set by orient() on a previous tooltip show()
+                       this.domNode.width = "auto";
+
+                       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;
+
+                       var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, dijit.getPopupAroundAlignment((position && position.length) ? position : dijit.Tooltip.defaultPosition, !rtl), 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, /*Object*/ spaceAvailable, /*Object*/ aroundNodeCoords){
+                       // summary:
+                       //              Private function to set CSS for tooltip node based on which position it's in.
+                       //              This is called by the dijit popup code.   It will also reduce the tooltip's
+                       //              width to whatever width is available
+                       // tags:
+                       //              protected
+                       this.connectorNode.style.top = ""; //reset to default
+                       
+                       //Adjust the spaceAvailable width, without changing the spaceAvailable object
+                       var tooltipSpaceAvaliableWidth = spaceAvailable.w - this.connectorNode.offsetWidth;
+
+                       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];
+                               
+                       // reduce tooltip's width to the amount of width available, so that it doesn't overflow screen
+                       this.domNode.style.width = "auto";
+                       var size = dojo.contentBox(this.domNode);
+                       
+                       var width = Math.min((Math.max(tooltipSpaceAvaliableWidth,1)), size.w);
+                       var widthWasReduced = width < size.w;
+                       
+                       this.domNode.style.width = width+"px";
+                                               
+                       //Adjust width for tooltips that have a really long word or a nowrap setting
+                       if(widthWasReduced){
+                               this.containerNode.style.overflow = "auto"; //temp change to overflow to detect if our tooltip needs to be wider to support the content
+                               var scrollWidth = this.containerNode.scrollWidth;
+                               this.containerNode.style.overflow = "visible"; //change it back
+                               if(scrollWidth > width){
+                                       scrollWidth = scrollWidth + dojo.style(this.domNode,"paddingLeft") + dojo.style(this.domNode,"paddingRight");
+                                       this.domNode.style.width = scrollWidth + "px";
+                               }
+                       }
+                       
+                       // Reposition the tooltip connector.
+                       if(tooltipCorner.charAt(0) == 'B' && aroundCorner.charAt(0) == 'B'){
+                               var mb = dojo.marginBox(node);
+                               var tooltipConnectorHeight = this.connectorNode.offsetHeight;
+                               if(mb.h > spaceAvailable.h){
+                                       // The tooltip starts at the top of the page and will extend past the aroundNode
+                                       var aroundNodePlacement = spaceAvailable.h - (aroundNodeCoords.h / 2) - (tooltipConnectorHeight / 2);
+                                       this.connectorNode.style.top = aroundNodePlacement + "px";
+                                       this.connectorNode.style.bottom = "";
+                               }else{
+                                       // Align center of connector with center of aroundNode, except don't let bottom
+                                       // of connector extend below bottom of tooltip content, or top of connector
+                                       // extend past top of tooltip content
+                                       this.connectorNode.style.bottom = Math.min(
+                                               Math.max(aroundNodeCoords.h/2 - tooltipConnectorHeight/2, 0),
+                                               mb.h - tooltipConnectorHeight) + "px";
+                                       this.connectorNode.style.top = "";
+                               }
+                       }else{
+                               // reset the tooltip back to the defaults
+                               this.connectorNode.style.top = "";
+                               this.connectorNode.style.bottom = "";
+                       }
+                       
+                       return Math.max(0, size.w - tooltipSpaceAvaliableWidth);
+               },
+
+               _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
+                       this.containerNode.innerHTML="";
+                       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, /*Boolean*/ rtl){
+       // 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, rtl);
 };
-dijit.hideTooltip=function(_e){
-if(!dijit._masterTT){
-dijit._masterTT=new dijit._MasterTooltip();
-}
-return dijit._masterTT.hide(_e);
+
+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,{label:"",showDelay:400,connectId:[],position:[],constructor:function(){
-this._nodeConnectionsById={};
-},_setConnectIdAttr:function(_f){
-for(var _10 in this._nodeConnectionsById){
-this.removeTarget(_10);
-}
-dojo.forEach(dojo.isArrayLike(_f)?_f:[_f],this.addTarget,this);
-},_getConnectIdAttr:function(){
-var ary=[];
-for(var id in this._nodeConnectionsById){
-ary.push(id);
-}
-return ary;
-},addTarget:function(id){
-var _11=dojo.byId(id);
-if(!_11){
-return;
-}
-if(_11.id in this._nodeConnectionsById){
-return;
-}
-this._nodeConnectionsById[_11.id]=[this.connect(_11,"onmouseenter","_onTargetMouseEnter"),this.connect(_11,"onmouseleave","_onTargetMouseLeave"),this.connect(_11,"onfocus","_onTargetFocus"),this.connect(_11,"onblur","_onTargetBlur")];
-},removeTarget:function(_12){
-var id=_12.id||_12;
-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);
-var ids=this.connectId;
-dojo.forEach(dojo.isArrayLike(ids)?ids:[ids],this.addTarget,this);
-},_onTargetMouseEnter:function(e){
-this._onHover(e);
-},_onTargetMouseLeave:function(e){
-this._onUnHover(e);
-},_onTargetFocus:function(e){
-this._focus=true;
-this._onHover(e);
-},_onTargetBlur:function(e){
-this._focus=false;
-this._onUnHover(e);
-},_onHover:function(e){
-if(!this._showTimer){
-var _13=e.target;
-this._showTimer=setTimeout(dojo.hitch(this,function(){
-this.open(_13);
-}),this.showDelay);
-}
-},_onUnHover:function(e){
-if(this._focus){
-return;
-}
-if(this._showTimer){
-clearTimeout(this._showTimer);
-delete this._showTimer;
-}
-this.close();
-},open:function(_14){
-if(this._showTimer){
-clearTimeout(this._showTimer);
-delete this._showTimer;
-}
-dijit.showTooltip(this.label||this.domNode.innerHTML,_14,this.position,!this.isLeftToRight());
-this._connectNode=_14;
-this.onShow(_14,this.position);
-},close:function(){
-if(this._connectNode){
-dijit.hideTooltip(this._connectNode);
-delete this._connectNode;
-this.onHide();
-}
-if(this._showTimer){
-clearTimeout(this._showTimer);
-delete this._showTimer;
-}
-},onShow:function(_15,_16){
-},onHide:function(){
-},uninitialize:function(){
-this.close();
-this.inherited(arguments);
-}});
-dijit.Tooltip.defaultPosition=["after","before"];
+
+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: String|String[]
+               //              Id of domNode(s) to attach the tooltip to.
+               //              When user hovers over specified dom node, the tooltip will appear.
+               connectId: [],
+
+               // position: String[]
+               //              See description of `dijit.Tooltip.defaultPosition` for details on position parameter.
+               position: [],
+
+               _setConnectIdAttr: function(/*String*/ newId){
+                       // summary:
+                       //              Connect to node(s) (specified by id)
+
+                       // Remove connections to old nodes (if there are any)
+                       dojo.forEach(this._connections || [], function(nested){
+                               dojo.forEach(nested, dojo.hitch(this, "disconnect"));
+                       }, this);
+
+                       // Make connections to nodes in newIds.
+                       var ary = dojo.isArrayLike(newId) ? newId : (newId ? [newId] : []);
+                       this._connections = dojo.map(ary, function(id){
+                               var node = dojo.byId(id);
+                               return node ? [
+                                       this.connect(node, "onmouseenter", "_onTargetMouseEnter"),
+                                       this.connect(node, "onmouseleave", "_onTargetMouseLeave"),
+                                       this.connect(node, "onfocus", "_onTargetFocus"),
+                                       this.connect(node, "onblur", "_onTargetBlur")
+                               ] : [];
+                       }, this);
+       
+                       this._set("connectId", newId);
+
+                       this._connectIds = ary; // save as array
+               },
+
+               addTarget: function(/*DOMNODE || String*/ node){
+                       // summary:
+                       //              Attach tooltip to specified node if it's not already connected
+
+                       // TODO: remove in 2.0 and just use set("connectId", ...) interface
+
+                       var id = node.id || node;
+                       if(dojo.indexOf(this._connectIds, id) == -1){
+                               this.set("connectId", this._connectIds.concat(id));
+                       }
+               },
+
+               removeTarget: function(/*DOMNODE || String*/ node){
+                       // summary:
+                       //              Detach tooltip from specified node
+
+                       // TODO: remove in 2.0 and just use set("connectId", ...) interface
+                       
+                       var id = node.id || node,       // map from DOMNode back to plain id string
+                               idx = dojo.indexOf(this._connectIds, id);
+                       if(idx >= 0){
+                               // remove id (modifies original this._connectIds but that's OK in this case)
+                               this._connectIds.splice(idx, 1);
+                               this.set("connectId", this._connectIds);
+                       }
+               },
+
+               buildRendering: function(){
+                       this.inherited(arguments);
+                       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.isLeftToRight());
+
+                       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"];
+
 }
index 13f69dbd38c9e4525a7433ad62454e01dfdf514a..38d5510482ac9740a2b46e912bab54284f6c38c8 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.TooltipDialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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();
-}
-}
-}
-}
-}});
+
+
+dojo.declare(
+               "dijit.TooltipDialog",
+               [dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin],
+               {
+                       // summary:
+                       //              Pops up a dialog that appears like a Tooltip
+
+                       // title: String
+                       //              Description of tooltip dialog (required for a11y)
+                       title: "",
+
+                       // doLayout: [protected] Boolean
+                       //              Don't change this parameter from the default value.
+                       //              This ContentPane parameter doesn't make sense for TooltipDialog, since TooltipDialog
+                       //              is never a child of a layout container, nor can you specify the size of
+                       //              TooltipDialog in order to control the size of an inner widget.
+                       doLayout: false,
+
+                       // autofocus: Boolean
+                       //              A Toggle to modify the default focus behavior of a Dialog, which
+                       //              is to focus on the first dialog element after opening the dialog.
+                       //              False will disable autofocusing. Default: true
+                       autofocus: true,
+
+                       // baseClass: [protected] String
+                       //              The root className to use for the various states of this widget
+                       baseClass: "dijitTooltipDialog",
+
+                       // _firstFocusItem: [private] [readonly] DomNode
+                       //              The pointer to the first focusable node in the dialog.
+                       //              Set by `dijit._DialogMixin._getFocusItems`.
+                       _firstFocusItem: null,
+
+                       // _lastFocusItem: [private] [readonly] DomNode
+                       //              The pointer to which node has focus prior to our dialog.
+                       //              Set by `dijit._DialogMixin._getFocusItems`.
+                       _lastFocusItem: null,
+
+                       templateString: dojo.cache("dijit", "templates/TooltipDialog.html", "<div role=\"presentation\" tabIndex=\"-1\">\n\t<div class=\"dijitTooltipContainer\" role=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" role=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" role=\"presentation\"></div>\n</div>\n"),
+
+                       _setTitleAttr: function(/*String*/ title){
+                               this.containerNode.title = title;
+                               this._set("title", title)
+                       },
+
+                       postCreate: function(){
+                               this.inherited(arguments);
+                               this.connect(this.containerNode, "onkeypress", "_onKey");
+                       },
+
+                       orient: function(/*DomNode*/ node, /*String*/ aroundCorner, /*String*/ corner){
+                               // summary:
+                               //              Configure widget to be displayed in given position relative to the button.
+                               //              This is called from the dijit.popup code, and should not be called
+                               //              directly.
+                               // tags:
+                               //              protected
+                               var newC = "dijitTooltipAB" + (corner.charAt(1) == 'L' ? "Left" : "Right")
+                                               + " dijitTooltip"
+                                               + (corner.charAt(0) == 'T' ? "Below" : "Above");
+                               
+                               dojo.replaceClass(this.domNode, newC, this._currentOrientClass || "");
+                               this._currentOrientClass = newC;
+                       },
+
+                       focus: function(){
+                               // summary:
+                               //              Focus on first field
+                               this._getFocusItems(this.containerNode);
+                               dijit.focus(this._firstFocusItem);
+                       },
+
+                       onOpen: function(/*Object*/ pos){
+                               // summary:
+                               //              Called when dialog is displayed.
+                               //              This is called from the dijit.popup code, and should not be called directly.
+                               // tags:
+                               //              protected
+
+                               this.orient(this.domNode,pos.aroundCorner, pos.corner);
+                               this._onShow(); // lazy load trigger
+                       },
+
+                       onClose: function(){
+                               // summary:
+                               //              Called when dialog is hidden.
+                               //              This is called from the dijit.popup code, and should not be called directly.
+                               // tags:
+                               //              protected
+                               this.onHide();
+                       },
+
+                       _onKey: function(/*Event*/ evt){
+                               // summary:
+                               //              Handler for keyboard events
+                               // description:
+                               //              Keep keyboard focus in dialog; close dialog on escape key
+                               // tags:
+                               //              private
+
+                               var node = evt.target;
+                               var dk = dojo.keys;
+                               if(evt.charOrCode === dk.TAB){
+                                       this._getFocusItems(this.containerNode);
+                               }
+                               var singleFocusItem = (this._firstFocusItem == this._lastFocusItem);
+                               if(evt.charOrCode == dk.ESCAPE){
+                                       // Use setTimeout to avoid crash on IE, see #10396.
+                                       setTimeout(dojo.hitch(this, "onCancel"), 0);
+                                       dojo.stopEvent(evt);
+                               }else if(node == this._firstFocusItem && evt.shiftKey && evt.charOrCode === dk.TAB){
+                                       if(!singleFocusItem){
+                                               dijit.focus(this._lastFocusItem); // send focus to last item in dialog
+                                       }
+                                       dojo.stopEvent(evt);
+                               }else if(node == this._lastFocusItem && evt.charOrCode === dk.TAB && !evt.shiftKey){
+                                       if(!singleFocusItem){
+                                               dijit.focus(this._firstFocusItem); // send focus to first item in dialog
+                                       }
+                                       dojo.stopEvent(evt);
+                               }else if(evt.charOrCode === dk.TAB){
+                                       // we want the browser's default tab handling to move focus
+                                       // but we don't want the tab to propagate upwards
+                                       evt.stopPropagation();
+                               }
+                       }
+               }
+       );
+
 }
index 761d4c3fcb8205c0a31257448f130ed96ef03a94..d702a3b94e56bb8a0aee524c6a684cee6c2b6390 100644 (file)
@@ -1,12 +1,12 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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"]){
-dojo._hasResource["dijit.Tree"]=true;
+if(!dojo._hasResource["dijit.Tree"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Tree"] = true;
 dojo.provide("dijit.Tree");
 dojo.require("dojo.fx");
 dojo.require("dojo.DeferredList");
@@ -16,663 +16,1619 @@ dojo.require("dijit._Container");
 dojo.require("dijit._Contained");
 dojo.require("dijit._CssStateMixin");
 dojo.require("dojo.cookie");
-dojo.declare("dijit._TreeNode",[dijit._Widget,dijit._Templated,dijit._Container,dijit._Contained,dijit._CssStateMixin],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:dojo.cache("dijit","templates/TreeNode.html","<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),baseClass:"dijitTreeNode",cssStateNodes:{rowNode:"dijitTreeRow",labelNode:"dijitTreeLabel"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"labelNode",type:"innerText"},tooltip:{node:"rowNode",type:"attribute",attribute:"title"}}),postCreate:function(){
-this.inherited(arguments);
-this._setExpando();
-this._updateItemClasses(this.item);
-if(this.isExpandable){
-dijit.setWaiState(this.labelNode,"expanded",this.isExpanded);
-}
-},_setIndentAttr:function(_1){
-this.indent=_1;
-var _2=(Math.max(_1,0)*this.tree._nodePixelIndent)+"px";
-dojo.style(this.domNode,"backgroundPosition",_2+" 0px");
-dojo.style(this.rowNode,this.isLeftToRight()?"paddingLeft":"paddingRight",_2);
-dojo.forEach(this.getChildren(),function(_3){
-_3.set("indent",_1+1);
-});
-},markProcessing:function(){
-this.state="LOADING";
-this._setExpando(true);
-},unmarkProcessing:function(){
-this._setExpando(false);
-},_updateItemClasses:function(_4){
-var _5=this.tree,_6=_5.model;
-if(_5._v10Compat&&_4===_6.root){
-_4=null;
-}
-this._applyClassAndStyle(_4,"icon","Icon");
-this._applyClassAndStyle(_4,"label","Label");
-this._applyClassAndStyle(_4,"row","Row");
-},_applyClassAndStyle:function(_7,_8,_9){
-var _a="_"+_8+"Class";
-var _b=_8+"Node";
-if(this[_a]){
-dojo.removeClass(this[_b],this[_a]);
-}
-this[_a]=this.tree["get"+_9+"Class"](_7,this.isExpanded);
-if(this[_a]){
-dojo.addClass(this[_b],this[_a]);
-}
-dojo.style(this[_b],this.tree["get"+_9+"Style"](_7,this.isExpanded)||{});
-},_updateLayout:function(){
-var _c=this.getParent();
-if(!_c||_c.rowNode.style.display=="none"){
-dojo.addClass(this.domNode,"dijitTreeIsRoot");
-}else{
-dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling());
-}
-},_setExpando:function(_d){
-var _e=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"],_f=["*","-","+","*"],idx=_d?0:(this.isExpandable?(this.isExpanded?1:2):3);
-dojo.removeClass(this.expandoNode,_e);
-dojo.addClass(this.expandoNode,_e[idx]);
-this.expandoNodeText.innerHTML=_f[idx];
-},expand:function(){
-if(this._expandDeferred){
-return this._expandDeferred;
-}
-this._wipeOut&&this._wipeOut.stop();
-this.isExpanded=true;
-dijit.setWaiState(this.labelNode,"expanded","true");
-dijit.setWaiRole(this.containerNode,"group");
-dojo.addClass(this.contentNode,"dijitTreeContentExpanded");
-this._setExpando();
-this._updateItemClasses(this.item);
-if(this==this.tree.rootNode){
-dijit.setWaiState(this.tree.domNode,"expanded","true");
-}
-var def,_10=dojo.fx.wipeIn({node:this.containerNode,duration:dijit.defaultDuration,onEnd:function(){
-def.callback(true);
-}});
-def=(this._expandDeferred=new dojo.Deferred(function(){
-_10.stop();
-}));
-_10.play();
-return def;
-},collapse:function(){
-if(!this.isExpanded){
-return;
-}
-if(this._expandDeferred){
-this._expandDeferred.cancel();
-delete this._expandDeferred;
-}
-this.isExpanded=false;
-dijit.setWaiState(this.labelNode,"expanded","false");
-if(this==this.tree.rootNode){
-dijit.setWaiState(this.tree.domNode,"expanded","false");
-}
-dojo.removeClass(this.contentNode,"dijitTreeContentExpanded");
-this._setExpando();
-this._updateItemClasses(this.item);
-if(!this._wipeOut){
-this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:dijit.defaultDuration});
-}
-this._wipeOut.play();
-},indent:0,setChildItems:function(_11){
-var _12=this.tree,_13=_12.model,_14=[];
-dojo.forEach(this.getChildren(),function(_15){
-dijit._Container.prototype.removeChild.call(this,_15);
-},this);
-this.state="LOADED";
-if(_11&&_11.length>0){
-this.isExpandable=true;
-dojo.forEach(_11,function(_16){
-var id=_13.getIdentity(_16),_17=_12._itemNodesMap[id],_18;
-if(_17){
-for(var i=0;i<_17.length;i++){
-if(_17[i]&&!_17[i].getParent()){
-_18=_17[i];
-_18.set("indent",this.indent+1);
-break;
-}
-}
-}
-if(!_18){
-_18=this.tree._createTreeNode({item:_16,tree:_12,isExpandable:_13.mayHaveChildren(_16),label:_12.getLabel(_16),tooltip:_12.getTooltip(_16),dir:_12.dir,lang:_12.lang,indent:this.indent+1});
-if(_17){
-_17.push(_18);
-}else{
-_12._itemNodesMap[id]=[_18];
-}
-}
-this.addChild(_18);
-if(this.tree.autoExpand||this.tree._state(_16)){
-_14.push(_12._expandNode(_18));
-}
-},this);
-dojo.forEach(this.getChildren(),function(_19,idx){
-_19._updateLayout();
-});
-}else{
-this.isExpandable=false;
-}
-if(this._setExpando){
-this._setExpando(false);
-}
-this._updateItemClasses(this.item);
-if(this==_12.rootNode){
-var fc=this.tree.showRoot?this:this.getChildren()[0];
-if(fc){
-fc.setFocusable(true);
-_12.lastFocused=fc;
-}else{
-_12.domNode.setAttribute("tabIndex","0");
-}
-}
-return new dojo.DeferredList(_14);
-},removeChild:function(_1a){
-this.inherited(arguments);
-var _1b=this.getChildren();
-if(_1b.length==0){
-this.isExpandable=false;
-this.collapse();
-}
-dojo.forEach(_1b,function(_1c){
-_1c._updateLayout();
-});
-},makeExpandable:function(){
-this.isExpandable=true;
-this._setExpando(false);
-},_onLabelFocus:function(evt){
-this.tree._onNodeFocus(this);
-},setSelected:function(_1d){
-dijit.setWaiState(this.labelNode,"selected",_1d);
-dojo.toggleClass(this.rowNode,"dijitTreeRowSelected",_1d);
-},setFocusable:function(_1e){
-this.labelNode.setAttribute("tabIndex",_1e?"0":"-1");
-},_onClick:function(evt){
-this.tree._onClick(this,evt);
-},_onDblClick:function(evt){
-this.tree._onDblClick(this,evt);
-},_onMouseEnter:function(evt){
-this.tree._onNodeMouseEnter(this,evt);
-},_onMouseLeave:function(evt){
-this.tree._onNodeMouseLeave(this,evt);
-}});
-dojo.declare("dijit.Tree",[dijit._Widget,dijit._Templated],{store:null,model:null,query:null,label:"",showRoot:true,childrenAttr:["children"],path:[],selectedItem:null,openOnClick:false,openOnDblClick:false,templateString:dojo.cache("dijit","templates/Tree.html","<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),persist:true,autoExpand:false,dndController:null,dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance","dragThreshold","betweenThreshold"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,dragThreshold:5,betweenThreshold:0,_nodePixelIndent:19,_publish:function(_1f,_20){
-dojo.publish(this.id,[dojo.mixin({tree:this,event:_1f},_20||{})]);
-},postMixInProperties:function(){
-this.tree=this;
-if(this.autoExpand){
-this.persist=false;
-}
-this._itemNodesMap={};
-if(!this.cookieName){
-this.cookieName=this.id+"SaveStateCookie";
-}
-this._loadDeferred=new dojo.Deferred();
-this.inherited(arguments);
-},postCreate:function(){
-this._initState();
-if(!this.model){
-this._store2model();
-}
-this.connect(this.model,"onChange","_onItemChange");
-this.connect(this.model,"onChildrenChange","_onItemChildrenChange");
-this.connect(this.model,"onDelete","_onItemDelete");
-this._load();
-this.inherited(arguments);
-if(this.dndController){
-if(dojo.isString(this.dndController)){
-this.dndController=dojo.getObject(this.dndController);
-}
-var _21={};
-for(var i=0;i<this.dndParams.length;i++){
-if(this[this.dndParams[i]]){
-_21[this.dndParams[i]]=this[this.dndParams[i]];
-}
-}
-this.dndController=new this.dndController(this,_21);
-}
-},_store2model:function(){
-this._v10Compat=true;
-dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");
-var _22={id:this.id+"_ForestStoreModel",store:this.store,query:this.query,childrenAttrs:this.childrenAttr};
-if(this.params.mayHaveChildren){
-_22.mayHaveChildren=dojo.hitch(this,"mayHaveChildren");
-}
-if(this.params.getItemChildren){
-_22.getChildren=dojo.hitch(this,function(_23,_24,_25){
-this.getItemChildren((this._v10Compat&&_23===this.model.root)?null:_23,_24,_25);
-});
-}
-this.model=new dijit.tree.ForestStoreModel(_22);
-this.showRoot=Boolean(this.label);
-},onLoad:function(){
-},_load:function(){
-this.model.getRoot(dojo.hitch(this,function(_26){
-var rn=(this.rootNode=this.tree._createTreeNode({item:_26,tree:this,isExpandable:true,label:this.label||this.getLabel(_26),indent:this.showRoot?0:-1}));
-if(!this.showRoot){
-rn.rowNode.style.display="none";
-}
-this.domNode.appendChild(rn.domNode);
-var _27=this.model.getIdentity(_26);
-if(this._itemNodesMap[_27]){
-this._itemNodesMap[_27].push(rn);
-}else{
-this._itemNodesMap[_27]=[rn];
-}
-rn._updateLayout();
-this._expandNode(rn).addCallback(dojo.hitch(this,function(){
-this._loadDeferred.callback(true);
-this.onLoad();
-}));
-}),function(err){
-console.error(this,": error loading root: ",err);
-});
-},getNodesByItem:function(_28){
-if(!_28){
-return [];
-}
-var _29=dojo.isString(_28)?_28:this.model.getIdentity(_28);
-return [].concat(this._itemNodesMap[_29]);
-},_setSelectedItemAttr:function(_2a){
-var _2b=this.get("selectedItem");
-var _2c=(!_2a||dojo.isString(_2a))?_2a:this.model.getIdentity(_2a);
-if(_2c==_2b?this.model.getIdentity(_2b):null){
-return;
-}
-var _2d=this._itemNodesMap[_2c];
-this._selectNode((_2d&&_2d[0])||null);
-},_getSelectedItemAttr:function(){
-return this.selectedNode&&this.selectedNode.item;
-},_setPathAttr:function(_2e){
-var d=new dojo.Deferred();
-this._selectNode(null);
-if(!_2e||!_2e.length){
-d.resolve(true);
-return d;
-}
-this._loadDeferred.addCallback(dojo.hitch(this,function(){
-if(!this.rootNode){
-d.reject(new Error("!this.rootNode"));
-return;
-}
-if(_2e[0]!==this.rootNode.item&&(dojo.isString(_2e[0])&&_2e[0]!=this.model.getIdentity(this.rootNode.item))){
-d.reject(new Error(this.id+":path[0] doesn't match this.rootNode.item.  Maybe you are using the wrong tree."));
-return;
-}
-_2e.shift();
-var _2f=this.rootNode;
-function _30(){
-var _31=_2e.shift(),_32=dojo.isString(_31)?_31:this.model.getIdentity(_31);
-dojo.some(this._itemNodesMap[_32],function(n){
-if(n.getParent()==_2f){
-_2f=n;
-return true;
-}
-return false;
-});
-if(_2e.length){
-this._expandNode(_2f).addCallback(dojo.hitch(this,_30));
-}else{
-this._selectNode(_2f);
-d.resolve(true);
-}
-};
-this._expandNode(_2f).addCallback(dojo.hitch(this,_30));
-}));
-return d;
-},_getPathAttr:function(){
-if(!this.selectedNode){
-return;
-}
-var res=[];
-var _33=this.selectedNode;
-while(_33&&_33!==this.rootNode){
-res.unshift(_33.item);
-_33=_33.getParent();
-}
-res.unshift(this.rootNode.item);
-return res;
-},mayHaveChildren:function(_34){
-},getItemChildren:function(_35,_36){
-},getLabel:function(_37){
-return this.model.getLabel(_37);
-},getIconClass:function(_38,_39){
-return (!_38||this.model.mayHaveChildren(_38))?(_39?"dijitFolderOpened":"dijitFolderClosed"):"dijitLeaf";
-},getLabelClass:function(_3a,_3b){
-},getRowClass:function(_3c,_3d){
-},getIconStyle:function(_3e,_3f){
-},getLabelStyle:function(_40,_41){
-},getRowStyle:function(_42,_43){
-},getTooltip:function(_44){
-return "";
-},_onKeyPress:function(e){
-if(e.altKey){
-return;
-}
-var dk=dojo.keys;
-var _45=dijit.getEnclosingWidget(e.target);
-if(!_45){
-return;
-}
-var key=e.charOrCode;
-if(typeof key=="string"){
-if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){
-this._onLetterKeyNav({node:_45,key:key.toLowerCase()});
-dojo.stopEvent(e);
-}
-}else{
-if(this._curSearch){
-clearTimeout(this._curSearch.timer);
-delete this._curSearch;
-}
-var map=this._keyHandlerMap;
-if(!map){
-map={};
-map[dk.ENTER]="_onEnterKey";
-map[this.isLeftToRight()?dk.LEFT_ARROW:dk.RIGHT_ARROW]="_onLeftArrow";
-map[this.isLeftToRight()?dk.RIGHT_ARROW:dk.LEFT_ARROW]="_onRightArrow";
-map[dk.UP_ARROW]="_onUpArrow";
-map[dk.DOWN_ARROW]="_onDownArrow";
-map[dk.HOME]="_onHomeKey";
-map[dk.END]="_onEndKey";
-this._keyHandlerMap=map;
-}
-if(this._keyHandlerMap[key]){
-this[this._keyHandlerMap[key]]({node:_45,item:_45.item,evt:e});
-dojo.stopEvent(e);
-}
-}
-},_onEnterKey:function(_46,evt){
-this._publish("execute",{item:_46.item,node:_46.node});
-this._selectNode(_46.node);
-this.onClick(_46.item,_46.node,evt);
-},_onDownArrow:function(_47){
-var _48=this._getNextNode(_47.node);
-if(_48&&_48.isTreeNode){
-this.focusNode(_48);
-}
-},_onUpArrow:function(_49){
-var _4a=_49.node;
-var _4b=_4a.getPreviousSibling();
-if(_4b){
-_4a=_4b;
-while(_4a.isExpandable&&_4a.isExpanded&&_4a.hasChildren()){
-var _4c=_4a.getChildren();
-_4a=_4c[_4c.length-1];
-}
-}else{
-var _4d=_4a.getParent();
-if(!(!this.showRoot&&_4d===this.rootNode)){
-_4a=_4d;
-}
-}
-if(_4a&&_4a.isTreeNode){
-this.focusNode(_4a);
-}
-},_onRightArrow:function(_4e){
-var _4f=_4e.node;
-if(_4f.isExpandable&&!_4f.isExpanded){
-this._expandNode(_4f);
-}else{
-if(_4f.hasChildren()){
-_4f=_4f.getChildren()[0];
-if(_4f&&_4f.isTreeNode){
-this.focusNode(_4f);
-}
-}
-}
-},_onLeftArrow:function(_50){
-var _51=_50.node;
-if(_51.isExpandable&&_51.isExpanded){
-this._collapseNode(_51);
-}else{
-var _52=_51.getParent();
-if(_52&&_52.isTreeNode&&!(!this.showRoot&&_52===this.rootNode)){
-this.focusNode(_52);
-}
-}
-},_onHomeKey:function(){
-var _53=this._getRootOrFirstNode();
-if(_53){
-this.focusNode(_53);
-}
-},_onEndKey:function(_54){
-var _55=this.rootNode;
-while(_55.isExpanded){
-var c=_55.getChildren();
-_55=c[c.length-1];
-}
-if(_55&&_55.isTreeNode){
-this.focusNode(_55);
-}
-},multiCharSearchDuration:250,_onLetterKeyNav:function(_56){
-var cs=this._curSearch;
-if(cs){
-cs.pattern=cs.pattern+_56.key;
-clearTimeout(cs.timer);
-}else{
-cs=this._curSearch={pattern:_56.key,startNode:_56.node};
-}
-var _57=this;
-cs.timer=setTimeout(function(){
-delete _57._curSearch;
-},this.multiCharSearchDuration);
-var _58=cs.startNode;
-do{
-_58=this._getNextNode(_58);
-if(!_58){
-_58=this._getRootOrFirstNode();
-}
-}while(_58!==cs.startNode&&(_58.label.toLowerCase().substr(0,cs.pattern.length)!=cs.pattern));
-if(_58&&_58.isTreeNode){
-if(_58!==cs.startNode){
-this.focusNode(_58);
-}
-}
-},_onClick:function(_59,e){
-var _5a=e.target,_5b=(_5a==_59.expandoNode||_5a==_59.expandoNodeText);
-if((this.openOnClick&&_59.isExpandable)||_5b){
-if(_59.isExpandable){
-this._onExpandoClick({node:_59});
-}
-}else{
-this._publish("execute",{item:_59.item,node:_59,evt:e});
-this.onClick(_59.item,_59,e);
-this.focusNode(_59);
-}
-if(!_5b){
-this._selectNode(_59);
-}
-dojo.stopEvent(e);
-},_onDblClick:function(_5c,e){
-var _5d=e.target,_5e=(_5d==_5c.expandoNode||_5d==_5c.expandoNodeText);
-if((this.openOnDblClick&&_5c.isExpandable)||_5e){
-if(_5c.isExpandable){
-this._onExpandoClick({node:_5c});
-}
-}else{
-this._publish("execute",{item:_5c.item,node:_5c,evt:e});
-this.onDblClick(_5c.item,_5c,e);
-this.focusNode(_5c);
-}
-if(!_5e){
-this._selectNode(_5c);
-}
-dojo.stopEvent(e);
-},_onExpandoClick:function(_5f){
-var _60=_5f.node;
-this.focusNode(_60);
-if(_60.isExpanded){
-this._collapseNode(_60);
-}else{
-this._expandNode(_60);
-}
-},onClick:function(_61,_62,evt){
-},onDblClick:function(_63,_64,evt){
-},onOpen:function(_65,_66){
-},onClose:function(_67,_68){
-},_getNextNode:function(_69){
-if(_69.isExpandable&&_69.isExpanded&&_69.hasChildren()){
-return _69.getChildren()[0];
-}else{
-while(_69&&_69.isTreeNode){
-var _6a=_69.getNextSibling();
-if(_6a){
-return _6a;
-}
-_69=_69.getParent();
-}
-return null;
-}
-},_getRootOrFirstNode:function(){
-return this.showRoot?this.rootNode:this.rootNode.getChildren()[0];
-},_collapseNode:function(_6b){
-if(_6b._expandNodeDeferred){
-delete _6b._expandNodeDeferred;
-}
-if(_6b.isExpandable){
-if(_6b.state=="LOADING"){
-return;
-}
-_6b.collapse();
-this.onClose(_6b.item,_6b);
-if(_6b.item){
-this._state(_6b.item,false);
-this._saveState();
-}
-}
-},_expandNode:function(_6c,_6d){
-if(_6c._expandNodeDeferred&&!_6d){
-return _6c._expandNodeDeferred;
-}
-var _6e=this.model,_6f=_6c.item,_70=this;
-switch(_6c.state){
-case "UNCHECKED":
-_6c.markProcessing();
-var def=(_6c._expandNodeDeferred=new dojo.Deferred());
-_6e.getChildren(_6f,function(_71){
-_6c.unmarkProcessing();
-var _72=_6c.setChildItems(_71);
-var ed=_70._expandNode(_6c,true);
-_72.addCallback(function(){
-ed.addCallback(function(){
-def.callback();
-});
-});
-},function(err){
-console.error(_70,": error loading root children: ",err);
-});
-break;
-default:
-def=(_6c._expandNodeDeferred=_6c.expand());
-this.onOpen(_6c.item,_6c);
-if(_6f){
-this._state(_6f,true);
-this._saveState();
-}
-}
-return def;
-},focusNode:function(_73){
-dijit.focus(_73.labelNode);
-},_selectNode:function(_74){
-if(this.selectedNode&&!this.selectedNode._destroyed){
-this.selectedNode.setSelected(false);
-}
-if(_74){
-_74.setSelected(true);
-}
-this.selectedNode=_74;
-},_onNodeFocus:function(_75){
-if(_75&&_75!=this.lastFocused){
-if(this.lastFocused&&!this.lastFocused._destroyed){
-this.lastFocused.setFocusable(false);
-}
-_75.setFocusable(true);
-this.lastFocused=_75;
-}
-},_onNodeMouseEnter:function(_76){
-},_onNodeMouseLeave:function(_77){
-},_onItemChange:function(_78){
-var _79=this.model,_7a=_79.getIdentity(_78),_7b=this._itemNodesMap[_7a];
-if(_7b){
-var _7c=this.getLabel(_78),_7d=this.getTooltip(_78);
-dojo.forEach(_7b,function(_7e){
-_7e.set({item:_78,label:_7c,tooltip:_7d});
-_7e._updateItemClasses(_78);
-});
-}
-},_onItemChildrenChange:function(_7f,_80){
-var _81=this.model,_82=_81.getIdentity(_7f),_83=this._itemNodesMap[_82];
-if(_83){
-dojo.forEach(_83,function(_84){
-_84.setChildItems(_80);
-});
-}
-},_onItemDelete:function(_85){
-var _86=this.model,_87=_86.getIdentity(_85),_88=this._itemNodesMap[_87];
-if(_88){
-dojo.forEach(_88,function(_89){
-var _8a=_89.getParent();
-if(_8a){
-_8a.removeChild(_89);
-}
-_89.destroyRecursive();
-});
-delete this._itemNodesMap[_87];
-}
-},_initState:function(){
-if(this.persist){
-var _8b=dojo.cookie(this.cookieName);
-this._openedItemIds={};
-if(_8b){
-dojo.forEach(_8b.split(","),function(_8c){
-this._openedItemIds[_8c]=true;
-},this);
-}
-}
-},_state:function(_8d,_8e){
-if(!this.persist){
-return false;
-}
-var id=this.model.getIdentity(_8d);
-if(arguments.length===1){
-return this._openedItemIds[id];
-}
-if(_8e){
-this._openedItemIds[id]=true;
-}else{
-delete this._openedItemIds[id];
-}
-},_saveState:function(){
-if(!this.persist){
-return;
-}
-var ary=[];
-for(var id in this._openedItemIds){
-ary.push(id);
-}
-dojo.cookie(this.cookieName,ary.join(","),{expires:365});
-},destroy:function(){
-if(this._curSearch){
-clearTimeout(this._curSearch.timer);
-delete this._curSearch;
-}
-if(this.rootNode){
-this.rootNode.destroyRecursive();
-}
-if(this.dndController&&!dojo.isString(this.dndController)){
-this.dndController.destroy();
-}
-this.rootNode=null;
-this.inherited(arguments);
-},destroyRecursive:function(){
-this.destroy();
-},resize:function(_8f){
-if(_8f){
-dojo.marginBox(this.domNode,_8f);
-dojo.style(this.domNode,"overflow","auto");
-}
-this._nodePixelIndent=dojo.marginBox(this.tree.indentDetector).w;
-if(this.tree.rootNode){
-this.tree.rootNode.set("indent",this.showRoot?0:-1);
-}
-},_createTreeNode:function(_90){
-return new dijit._TreeNode(_90);
-}});
 dojo.require("dijit.tree.TreeStoreModel");
 dojo.require("dijit.tree.ForestStoreModel");
+dojo.require("dijit.tree._dndSelector");
+
+
+dojo.declare(
+       "dijit._TreeNode",
+       [dijit._Widget, dijit._Templated, dijit._Container, dijit._Contained, dijit._CssStateMixin],
+{
+       // summary:
+       //              Single node within a tree.   This class is used internally
+       //              by Tree and should not be accessed directly.
+       // tags:
+       //              private
+
+       // item: [const] dojo.data.Item
+       //              the dojo.data entry this tree represents
+       item: null,
+
+       // isTreeNode: [protected] Boolean
+       //              Indicates that this is a TreeNode.   Used by `dijit.Tree` only,
+       //              should not be accessed directly.
+       isTreeNode: true,
+
+       // label: String
+       //              Text of this tree node
+       label: "",
+
+       // isExpandable: [private] Boolean
+       //              This node has children, so show the expando node (+ sign)
+       isExpandable: null,
+
+       // isExpanded: [readonly] Boolean
+       //              This node is currently expanded (ie, opened)
+       isExpanded: false,
+
+       // state: [private] String
+       //              Dynamic loading-related stuff.
+       //              When an empty folder node appears, it is "UNCHECKED" first,
+       //              then after dojo.data query it becomes "LOADING" and, finally "LOADED"
+       state: "UNCHECKED",
+
+       templateString: dojo.cache("dijit", "templates/TreeNode.html", "<div class=\"dijitTreeNode\" role=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" role=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" role=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" role=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" role=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" role=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" role=\"treeitem\" tabindex=\"-1\" aria-selected=\"false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" role=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),
+
+       baseClass: "dijitTreeNode",
+
+       // For hover effect for tree node, and focus effect for label
+       cssStateNodes: {
+               rowNode: "dijitTreeRow",
+               labelNode: "dijitTreeLabel"
+       },
+
+       attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+               label: {node: "labelNode", type: "innerText"},
+               tooltip: {node: "rowNode", type: "attribute", attribute: "title"}
+       }),
+
+       buildRendering: function(){
+               this.inherited(arguments);
+
+               // set expand icon for leaf
+               this._setExpando();
+
+               // set icon and label class based on item
+               this._updateItemClasses(this.item);
+
+               if(this.isExpandable){
+                       dijit.setWaiState(this.labelNode, "expanded", this.isExpanded);
+               }
+
+               //aria-selected should be false on all selectable elements.
+               this.setSelected(false);
+       },
+
+       _setIndentAttr: function(indent){
+               // summary:
+               //              Tell this node how many levels it should be indented
+               // description:
+               //              0 for top level nodes, 1 for their children, 2 for their
+               //              grandchildren, etc.
+
+               // Math.max() is to prevent negative padding on hidden root node (when indent == -1)
+               var pixels = (Math.max(indent, 0) * this.tree._nodePixelIndent) + "px";
+
+               dojo.style(this.domNode, "backgroundPosition",  pixels + " 0px");
+               dojo.style(this.rowNode, this.isLeftToRight() ? "paddingLeft" : "paddingRight", pixels);
+
+               dojo.forEach(this.getChildren(), function(child){
+                       child.set("indent", indent+1);
+               });
+               
+               this._set("indent", indent);
+       },
+
+       markProcessing: function(){
+               // summary:
+               //              Visually denote that tree is loading data, etc.
+               // tags:
+               //              private
+               this.state = "LOADING";
+               this._setExpando(true);
+       },
+
+       unmarkProcessing: function(){
+               // summary:
+               //              Clear markup from markProcessing() call
+               // tags:
+               //              private
+               this._setExpando(false);
+       },
+
+       _updateItemClasses: function(item){
+               // summary:
+               //              Set appropriate CSS classes for icon and label dom node
+               //              (used to allow for item updates to change respective CSS)
+               // tags:
+               //              private
+               var tree = this.tree, model = tree.model;
+               if(tree._v10Compat && item === model.root){
+                       // For back-compat with 1.0, need to use null to specify root item (TODO: remove in 2.0)
+                       item = null;
+               }
+               this._applyClassAndStyle(item, "icon", "Icon");
+               this._applyClassAndStyle(item, "label", "Label");
+               this._applyClassAndStyle(item, "row", "Row");
+       },
+
+       _applyClassAndStyle: function(item, lower, upper){
+               // summary:
+               //              Set the appropriate CSS classes and styles for labels, icons and rows.
+               //
+               // item:
+               //              The data item.
+               //
+               // lower:
+               //              The lower case attribute to use, e.g. 'icon', 'label' or 'row'.
+               //
+               // upper:
+               //              The upper case attribute to use, e.g. 'Icon', 'Label' or 'Row'.
+               //
+               // tags:
+               //              private
+
+               var clsName = "_" + lower + "Class";
+               var nodeName = lower + "Node";
+               var oldCls = this[clsName];
+
+               this[clsName] = this.tree["get" + upper + "Class"](item, this.isExpanded);
+               dojo.replaceClass(this[nodeName], this[clsName] || "", oldCls || "");
+               dojo.style(this[nodeName], this.tree["get" + upper + "Style"](item, this.isExpanded) || {});
+       },
+
+       _updateLayout: function(){
+               // summary:
+               //              Set appropriate CSS classes for this.domNode
+               // tags:
+               //              private
+               var parent = this.getParent();
+               if(!parent || parent.rowNode.style.display == "none"){
+                       /* if we are hiding the root node then make every first level child look like a root node */
+                       dojo.addClass(this.domNode, "dijitTreeIsRoot");
+               }else{
+                       dojo.toggleClass(this.domNode, "dijitTreeIsLast", !this.getNextSibling());
+               }
+       },
+
+       _setExpando: function(/*Boolean*/ processing){
+               // summary:
+               //              Set the right image for the expando node
+               // tags:
+               //              private
+
+               var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened",
+                                               "dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"],
+                       _a11yStates = ["*","-","+","*"],
+                       idx = processing ? 0 : (this.isExpandable ?     (this.isExpanded ? 1 : 2) : 3);
+
+               // apply the appropriate class to the expando node
+               dojo.replaceClass(this.expandoNode, styles[idx], styles);
+
+               // provide a non-image based indicator for images-off mode
+               this.expandoNodeText.innerHTML = _a11yStates[idx];
+
+       },
+
+       expand: function(){
+               // summary:
+               //              Show my children
+               // returns:
+               //              Deferred that fires when expansion is complete
+
+               // If there's already an expand in progress or we are already expanded, just return
+               if(this._expandDeferred){
+                       return this._expandDeferred;            // dojo.Deferred
+               }
+
+               // cancel in progress collapse operation
+               this._wipeOut && this._wipeOut.stop();
+
+               // All the state information for when a node is expanded, maybe this should be
+               // set when the animation completes instead
+               this.isExpanded = true;
+               dijit.setWaiState(this.labelNode, "expanded", "true");
+               if(this.tree.showRoot || this !== this.tree.rootNode){
+                       dijit.setWaiRole(this.containerNode, "group");
+               }
+               dojo.addClass(this.contentNode,'dijitTreeContentExpanded');
+               this._setExpando();
+               this._updateItemClasses(this.item);
+               if(this == this.tree.rootNode){
+                       dijit.setWaiState(this.tree.domNode, "expanded", "true");
+               }
+
+               var def,
+                       wipeIn = dojo.fx.wipeIn({
+                               node: this.containerNode, duration: dijit.defaultDuration,
+                               onEnd: function(){
+                                       def.callback(true);
+                               }
+                       });
+
+               // Deferred that fires when expand is complete
+               def = (this._expandDeferred = new dojo.Deferred(function(){
+                       // Canceller
+                       wipeIn.stop();
+               }));
+
+               wipeIn.play();
+
+               return def;             // dojo.Deferred
+       },
+
+       collapse: function(){
+               // summary:
+               //              Collapse this node (if it's expanded)
+
+               if(!this.isExpanded){ return; }
+
+               // cancel in progress expand operation
+               if(this._expandDeferred){
+                       this._expandDeferred.cancel();
+                       delete this._expandDeferred;
+               }
+
+               this.isExpanded = false;
+               dijit.setWaiState(this.labelNode, "expanded", "false");
+               if(this == this.tree.rootNode){
+                       dijit.setWaiState(this.tree.domNode, "expanded", "false");
+               }
+               dojo.removeClass(this.contentNode,'dijitTreeContentExpanded');
+               this._setExpando();
+               this._updateItemClasses(this.item);
+
+               if(!this._wipeOut){
+                       this._wipeOut = dojo.fx.wipeOut({
+                               node: this.containerNode, duration: dijit.defaultDuration
+                       });
+               }
+               this._wipeOut.play();
+       },
+
+       // indent: Integer
+       //              Levels from this node to the root node
+       indent: 0,
+
+       setChildItems: function(/* Object[] */ items){
+               // summary:
+               //              Sets the child items of this node, removing/adding nodes
+               //              from current children to match specified items[] array.
+               //              Also, if this.persist == true, expands any children that were previously
+               //              opened.
+               // returns:
+               //              Deferred object that fires after all previously opened children
+               //              have been expanded again (or fires instantly if there are no such children).
+
+               var tree = this.tree,
+                       model = tree.model,
+                       defs = [];      // list of deferreds that need to fire before I am complete
+
+
+               // Orphan all my existing children.
+               // If items contains some of the same items as before then we will reattach them.
+               // Don't call this.removeChild() because that will collapse the tree etc.
+               dojo.forEach(this.getChildren(), function(child){
+                       dijit._Container.prototype.removeChild.call(this, child);
+               }, this);
+
+               this.state = "LOADED";
+
+               if(items && items.length > 0){
+                       this.isExpandable = true;
+
+                       // Create _TreeNode widget for each specified tree node, unless one already
+                       // exists and isn't being used (presumably it's from a DnD move and was recently
+                       // released
+                       dojo.forEach(items, function(item){
+                               var id = model.getIdentity(item),
+                                       existingNodes = tree._itemNodesMap[id],
+                                       node;
+                               if(existingNodes){
+                                       for(var i=0;i<existingNodes.length;i++){
+                                               if(existingNodes[i] && !existingNodes[i].getParent()){
+                                                       node = existingNodes[i];
+                                                       node.set('indent', this.indent+1);
+                                                       break;
+                                               }
+                                       }
+                               }
+                               if(!node){
+                                       node = this.tree._createTreeNode({
+                                                       item: item,
+                                                       tree: tree,
+                                                       isExpandable: model.mayHaveChildren(item),
+                                                       label: tree.getLabel(item),
+                                                       tooltip: tree.getTooltip(item),
+                                                       dir: tree.dir,
+                                                       lang: tree.lang,
+                                                       indent: this.indent + 1
+                                               });
+                                       if(existingNodes){
+                                               existingNodes.push(node);
+                                       }else{
+                                               tree._itemNodesMap[id] = [node];
+                                       }
+                               }
+                               this.addChild(node);
+
+                               // If node was previously opened then open it again now (this may trigger
+                               // more data store accesses, recursively)
+                               if(this.tree.autoExpand || this.tree._state(item)){
+                                       defs.push(tree._expandNode(node));
+                               }
+                       }, this);
+
+                       // note that updateLayout() needs to be called on each child after
+                       // _all_ the children exist
+                       dojo.forEach(this.getChildren(), function(child, idx){
+                               child._updateLayout();
+                       });
+               }else{
+                       this.isExpandable=false;
+               }
+
+               if(this._setExpando){
+                       // change expando to/from dot or + icon, as appropriate
+                       this._setExpando(false);
+               }
+
+               // Set leaf icon or folder icon, as appropriate
+               this._updateItemClasses(this.item);
+
+               // On initial tree show, make the selected TreeNode as either the root node of the tree,
+               // or the first child, if the root node is hidden
+               if(this == tree.rootNode){
+                       var fc = this.tree.showRoot ? this : this.getChildren()[0];
+                       if(fc){
+                               fc.setFocusable(true);
+                               tree.lastFocused = fc;
+                       }else{
+                               // fallback: no nodes in tree so focus on Tree <div> itself
+                               tree.domNode.setAttribute("tabIndex", "0");
+                       }
+               }
+
+               return new dojo.DeferredList(defs);     // dojo.Deferred
+       },
+
+       getTreePath: function(){
+               var node = this;
+               var path = [];
+               while(node && node !== this.tree.rootNode){
+                               path.unshift(node.item);
+                               node = node.getParent();
+               }
+               path.unshift(this.tree.rootNode.item);
+
+               return path;
+       },
+
+       getIdentity: function() {
+               return this.tree.model.getIdentity(this.item);
+       },
+
+       removeChild: function(/* treeNode */ node){
+               this.inherited(arguments);
+
+               var children = this.getChildren();
+               if(children.length == 0){
+                       this.isExpandable = false;
+                       this.collapse();
+               }
+
+               dojo.forEach(children, function(child){
+                               child._updateLayout();
+               });
+       },
+
+       makeExpandable: function(){
+               // summary:
+               //              if this node wasn't already showing the expando node,
+               //              turn it into one and call _setExpando()
+
+               // TODO: hmm this isn't called from anywhere, maybe should remove it for 2.0
+
+               this.isExpandable = true;
+               this._setExpando(false);
+       },
+
+       _onLabelFocus: function(evt){
+               // summary:
+               //              Called when this row is focused (possibly programatically)
+               //              Note that we aren't using _onFocus() builtin to dijit
+               //              because it's called when focus is moved to a descendant TreeNode.
+               // tags:
+               //              private
+               this.tree._onNodeFocus(this);
+       },
+
+       setSelected: function(/*Boolean*/ selected){
+               // summary:
+               //              A Tree has a (single) currently selected node.
+               //              Mark that this node is/isn't that currently selected node.
+               // description:
+               //              In particular, setting a node as selected involves setting tabIndex
+               //              so that when user tabs to the tree, focus will go to that node (only).
+               dijit.setWaiState(this.labelNode, "selected", selected);
+               dojo.toggleClass(this.rowNode, "dijitTreeRowSelected", selected);
+       },
+
+       setFocusable: function(/*Boolean*/ selected){
+               // summary:
+               //              A Tree has a (single) node that's focusable.
+               //              Mark that this node is/isn't that currently focsuable node.
+               // description:
+               //              In particular, setting a node as selected involves setting tabIndex
+               //              so that when user tabs to the tree, focus will go to that node (only).
+
+               this.labelNode.setAttribute("tabIndex", selected ? "0" : "-1");
+       },
+
+       _onClick: function(evt){
+               // summary:
+               //              Handler for onclick event on a node
+               // tags:
+               //              private
+               this.tree._onClick(this, evt);
+       },
+       _onDblClick: function(evt){
+               // summary:
+               //              Handler for ondblclick event on a node
+               // tags:
+               //              private
+               this.tree._onDblClick(this, evt);
+       },
+
+       _onMouseEnter: function(evt){
+               // summary:
+               //              Handler for onmouseenter event on a node
+               // tags:
+               //              private
+               this.tree._onNodeMouseEnter(this, evt);
+       },
+
+       _onMouseLeave: function(evt){
+               // summary:
+               //              Handler for onmouseenter event on a node
+               // tags:
+               //              private
+               this.tree._onNodeMouseLeave(this, evt);
+       }
+});
+
+dojo.declare(
+       "dijit.Tree",
+       [dijit._Widget, dijit._Templated],
+{
+       // summary:
+       //              This widget displays hierarchical data from a store.
+
+       // store: [deprecated] String||dojo.data.Store
+       //              Deprecated.  Use "model" parameter instead.
+       //              The store to get data to display in the tree.
+       store: null,
+
+       // model: dijit.Tree.model
+       //              Interface to read tree data, get notifications of changes to tree data,
+       //              and for handling drop operations (i.e drag and drop onto the tree)
+       model: null,
+
+       // query: [deprecated] anything
+       //              Deprecated.  User should specify query to the model directly instead.
+       //              Specifies datastore query to return the root item or top items for the tree.
+       query: null,
+
+       // label: [deprecated] String
+       //              Deprecated.  Use dijit.tree.ForestStoreModel directly instead.
+       //              Used in conjunction with query parameter.
+       //              If a query is specified (rather than a root node id), and a label is also specified,
+       //              then a fake root node is created and displayed, with this label.
+       label: "",
+
+       // showRoot: [const] Boolean
+       //              Should the root node be displayed, or hidden?
+       showRoot: true,
+
+       // childrenAttr: [deprecated] String[]
+       //              Deprecated.   This information should be specified in the model.
+       //              One ore more attributes that holds children of a tree node
+       childrenAttr: ["children"],
+
+       // paths: String[][] or Item[][]
+       //              Full paths from rootNode to selected nodes expressed as array of items or array of ids.
+       //              Since setting the paths may be asynchronous (because ofwaiting on dojo.data), set("paths", ...)
+       //              returns a Deferred to indicate when the set is complete.
+       paths: [],
+       
+       // path: String[] or Item[]
+       //      Backward compatible singular variant of paths.
+       path: [],
+
+       // selectedItems: [readonly] Item[]
+       //              The currently selected items in this tree.
+       //              This property can only be set (via set('selectedItems', ...)) when that item is already
+       //              visible in the tree.   (I.e. the tree has already been expanded to show that node.)
+       //              Should generally use `paths` attribute to set the selected items instead.
+       selectedItems: null,
+
+       // selectedItem: [readonly] Item
+       //      Backward compatible singular variant of selectedItems.
+       selectedItem: null,
+
+       // openOnClick: Boolean
+       //              If true, clicking a folder node's label will open it, rather than calling onClick()
+       openOnClick: false,
+
+       // openOnDblClick: Boolean
+       //              If true, double-clicking a folder node's label will open it, rather than calling onDblClick()
+       openOnDblClick: false,
+
+       templateString: dojo.cache("dijit", "templates/Tree.html", "<div class=\"dijitTree dijitTreeContainer\" role=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),
+
+       // persist: Boolean
+       //              Enables/disables use of cookies for state saving.
+       persist: true,
+
+       // autoExpand: Boolean
+       //              Fully expand the tree on load.   Overrides `persist`.
+       autoExpand: false,
+
+       // dndController: [protected] String
+       //              Class name to use as as the dnd controller.  Specifying this class enables DnD.
+       //              Generally you should specify this as "dijit.tree.dndSource".
+       //      Default of "dijit.tree._dndSelector" handles selection only (no actual DnD).
+       dndController: "dijit.tree._dndSelector",
+
+       // parameters to pull off of the tree and pass on to the dndController as its params
+       dndParams: ["onDndDrop","itemCreator","onDndCancel","checkAcceptance", "checkItemAcceptance", "dragThreshold", "betweenThreshold"],
+
+       //declare the above items so they can be pulled from the tree's markup
+
+       // onDndDrop: [protected] Function
+       //              Parameter to dndController, see `dijit.tree.dndSource.onDndDrop`.
+       //              Generally this doesn't need to be set.
+       onDndDrop: null,
+
+       /*=====
+       itemCreator: function(nodes, target, source){
+               // summary:
+               //              Returns objects passed to `Tree.model.newItem()` based on DnD nodes
+               //              dropped onto the tree.   Developer must override this method to enable
+               //              dropping from external sources onto this Tree, unless the Tree.model's items
+               //              happen to look like {id: 123, name: "Apple" } with no other attributes.
+               // description:
+               //              For each node in nodes[], which came from source, create a hash of name/value
+               //              pairs to be passed to Tree.model.newItem().  Returns array of those hashes.
+               // nodes: DomNode[]
+               //              The DOMNodes dragged from the source container
+               // target: DomNode
+               //              The target TreeNode.rowNode
+               // source: dojo.dnd.Source
+               //              The source container the nodes were dragged from, perhaps another Tree or a plain dojo.dnd.Source
+               // returns: Object[]
+               //              Array of name/value hashes for each new item to be added to the Tree, like:
+               // |    [
+               // |            { id: 123, label: "apple", foo: "bar" },
+               // |            { id: 456, label: "pear", zaz: "bam" }
+               // |    ]
+               // tags:
+               //              extension
+               return [{}];
+       },
+       =====*/
+       itemCreator: null,
+
+       // onDndCancel: [protected] Function
+       //              Parameter to dndController, see `dijit.tree.dndSource.onDndCancel`.
+       //              Generally this doesn't need to be set.
+       onDndCancel: null,
+
+/*=====
+       checkAcceptance: function(source, nodes){
+               // summary:
+               //              Checks if the Tree itself can accept nodes from this source
+               // source: dijit.tree._dndSource
+               //              The source which provides items
+               // nodes: DOMNode[]
+               //              Array of DOM nodes corresponding to nodes being dropped, dijitTreeRow nodes if
+               //              source is a dijit.Tree.
+               // tags:
+               //              extension
+               return true;    // Boolean
+       },
+=====*/
+       checkAcceptance: null,
+
+/*=====
+       checkItemAcceptance: function(target, source, position){
+               // summary:
+               //              Stub function to be overridden if one wants to check for the ability to drop at the node/item level
+               // description:
+               //              In the base case, this is called to check if target can become a child of source.
+               //              When betweenThreshold is set, position="before" or "after" means that we
+               //              are asking if the source node can be dropped before/after the target node.
+               // target: DOMNode
+               //              The dijitTreeRoot DOM node inside of the TreeNode that we are dropping on to
+               //              Use dijit.getEnclosingWidget(target) to get the TreeNode.
+               // source: dijit.tree.dndSource
+               //              The (set of) nodes we are dropping
+               // position: String
+               //              "over", "before", or "after"
+               // tags:
+               //              extension
+               return true;    // Boolean
+       },
+=====*/
+       checkItemAcceptance: null,
+
+       // dragThreshold: Integer
+       //              Number of pixels mouse moves before it's considered the start of a drag operation
+       dragThreshold: 5,
+
+       // betweenThreshold: Integer
+       //              Set to a positive value to allow drag and drop "between" nodes.
+       //
+       //              If during DnD mouse is over a (target) node but less than betweenThreshold
+       //              pixels from the bottom edge, dropping the the dragged node will make it
+       //              the next sibling of the target node, rather than the child.
+       //
+       //              Similarly, if mouse is over a target node but less that betweenThreshold
+       //              pixels from the top edge, dropping the dragged node will make it
+       //              the target node's previous sibling rather than the target node's child.
+       betweenThreshold: 0,
+
+       // _nodePixelIndent: Integer
+       //              Number of pixels to indent tree nodes (relative to parent node).
+       //              Default is 19 but can be overridden by setting CSS class dijitTreeIndent
+       //              and calling resize() or startup() on tree after it's in the DOM.
+       _nodePixelIndent: 19,
+
+       _publish: function(/*String*/ topicName, /*Object*/ message){
+               // summary:
+               //              Publish a message for this widget/topic
+               dojo.publish(this.id, [dojo.mixin({tree: this, event: topicName}, message || {})]);
+       },
+
+       postMixInProperties: function(){
+               this.tree = this;
+
+               if(this.autoExpand){
+                       // There's little point in saving opened/closed state of nodes for a Tree
+                       // that initially opens all it's nodes.
+                       this.persist = false;
+               }
+
+               this._itemNodesMap={};
+
+               if(!this.cookieName){
+                       this.cookieName = this.id + "SaveStateCookie";
+               }
+
+               this._loadDeferred = new dojo.Deferred();
+
+               this.inherited(arguments);
+       },
+
+       postCreate: function(){
+               this._initState();
+
+               // Create glue between store and Tree, if not specified directly by user
+               if(!this.model){
+                       this._store2model();
+               }
+
+               // monitor changes to items
+               this.connect(this.model, "onChange", "_onItemChange");
+               this.connect(this.model, "onChildrenChange", "_onItemChildrenChange");
+               this.connect(this.model, "onDelete", "_onItemDelete");
+
+               this._load();
+
+               this.inherited(arguments);
+
+               if(this.dndController){
+                       if(dojo.isString(this.dndController)){
+                               this.dndController = dojo.getObject(this.dndController);
+                       }
+                       var params={};
+                       for(var i=0; i<this.dndParams.length;i++){
+                               if(this[this.dndParams[i]]){
+                                       params[this.dndParams[i]] = this[this.dndParams[i]];
+                               }
+                       }
+                       this.dndController = new this.dndController(this, params);
+               }
+       },
+
+       _store2model: function(){
+               // summary:
+               //              User specified a store&query rather than model, so create model from store/query
+               this._v10Compat = true;
+               dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");
+
+               var modelParams = {
+                       id: this.id + "_ForestStoreModel",
+                       store: this.store,
+                       query: this.query,
+                       childrenAttrs: this.childrenAttr
+               };
+
+               // Only override the model's mayHaveChildren() method if the user has specified an override
+               if(this.params.mayHaveChildren){
+                       modelParams.mayHaveChildren = dojo.hitch(this, "mayHaveChildren");
+               }
+
+               if(this.params.getItemChildren){
+                       modelParams.getChildren = dojo.hitch(this, function(item, onComplete, onError){
+                               this.getItemChildren((this._v10Compat && item === this.model.root) ? null : item, onComplete, onError);
+                       });
+               }
+               this.model = new dijit.tree.ForestStoreModel(modelParams);
+
+               // For backwards compatibility, the visibility of the root node is controlled by
+               // whether or not the user has specified a label
+               this.showRoot = Boolean(this.label);
+       },
+
+       onLoad: function(){
+               // summary:
+               //              Called when tree finishes loading and expanding.
+               // description:
+               //              If persist == true the loading may encompass many levels of fetches
+               //              from the data store, each asynchronous.   Waits for all to finish.
+               // tags:
+               //              callback
+       },
+
+       _load: function(){
+               // summary:
+               //              Initial load of the tree.
+               //              Load root node (possibly hidden) and it's children.
+               this.model.getRoot(
+                       dojo.hitch(this, function(item){
+                               var rn = (this.rootNode = this.tree._createTreeNode({
+                                       item: item,
+                                       tree: this,
+                                       isExpandable: true,
+                                       label: this.label || this.getLabel(item),
+                                       indent: this.showRoot ? 0 : -1
+                               }));
+                               if(!this.showRoot){
+                                       rn.rowNode.style.display="none";
+                                       // if root is not visible, move tree role to the invisible
+                                       // root node's containerNode, see #12135
+                                       dijit.setWaiRole(this.domNode, 'presentation');
+                                       
+                                       dijit.setWaiRole(rn.labelNode, 'presentation');
+                                       dijit.setWaiRole(rn.containerNode, 'tree');
+                               }
+                               this.domNode.appendChild(rn.domNode);
+                               var identity = this.model.getIdentity(item);
+                               if(this._itemNodesMap[identity]){
+                                       this._itemNodesMap[identity].push(rn);
+                               }else{
+                                       this._itemNodesMap[identity] = [rn];
+                               }
+
+                               rn._updateLayout();             // sets "dijitTreeIsRoot" CSS classname
+
+                               // load top level children and then fire onLoad() event
+                               this._expandNode(rn).addCallback(dojo.hitch(this, function(){
+                                       this._loadDeferred.callback(true);
+                                       this.onLoad();
+                               }));
+                       }),
+                       function(err){
+                               console.error(this, ": error loading root: ", err);
+                       }
+               );
+       },
+
+       getNodesByItem: function(/*dojo.data.Item or id*/ item){
+               // summary:
+               //              Returns all tree nodes that refer to an item
+               // returns:
+               //              Array of tree nodes that refer to passed item
+
+               if(!item){ return []; }
+               var identity = dojo.isString(item) ? item : this.model.getIdentity(item);
+               // return a copy so widget don't get messed up by changes to returned array
+               return [].concat(this._itemNodesMap[identity]);
+       },
+
+       _setSelectedItemAttr: function(/*dojo.data.Item or id*/ item){
+               this.set('selectedItems', [item]);
+       },
+
+       _setSelectedItemsAttr: function(/*dojo.data.Items or ids*/ items){
+               // summary:
+               //              Select tree nodes related to passed items.
+               //              WARNING: if model use multi-parented items or desired tree node isn't already loaded
+               //              behavior is undefined. Use set('paths', ...) instead.
+               var tree = this;
+               this._loadDeferred.addCallback( dojo.hitch(this, function(){
+                       var identities = dojo.map(items, function(item){
+                               return (!item || dojo.isString(item)) ? item : tree.model.getIdentity(item);
+                       });
+                       var nodes = [];
+                       dojo.forEach(identities, function(id){
+                               nodes = nodes.concat(tree._itemNodesMap[id] || []);
+                       });
+                       this.set('selectedNodes', nodes);
+               }));
+       },
+
+       _setPathAttr: function(/*Item[] || String[]*/ path){
+               // summary:
+               //      Singular variant of _setPathsAttr
+               if(path.length) {
+                       return this.set("paths", [path]);
+               } else {
+                       //Empty list is interpreted as "select nothing"
+                       return this.set("paths", []);
+               }
+       },
+       
+       _setPathsAttr: function(/*Item[][] || String[][]*/ paths){
+               // summary:
+               //              Select the tree nodes identified by passed paths.
+               // paths:
+               //              Array of arrays of items or item id's
+               // returns:
+               //              Deferred to indicate when the set is complete
+               var tree = this;
+
+               // We may need to wait for some nodes to expand, so setting
+               // each path will involve a Deferred. We bring those deferreds
+               // together witha DeferredList.
+               return new dojo.DeferredList(dojo.map(paths, function(path){
+                       var d = new dojo.Deferred();
+                       
+                       // normalize path to use identity
+                       path = dojo.map(path, function(item){
+                               return dojo.isString(item) ? item : tree.model.getIdentity(item);
+                       });
+
+                       if(path.length){
+                               // Wait for the tree to load, if it hasn't already.
+                               tree._loadDeferred.addCallback(function(){ selectPath(path, [tree.rootNode], d); });
+                       }else{
+                               d.errback("Empty path");
+                       }
+                       return d;
+               })).addCallback(setNodes);
+
+               function selectPath(path, nodes, def){
+                       // Traverse path; the next path component should be among "nodes".
+                       var nextPath = path.shift();
+                       var nextNode = dojo.filter(nodes, function(node){
+                               return node.getIdentity() == nextPath;
+                       })[0];
+                       if(!!nextNode){
+                               if(path.length){
+                                       tree._expandNode(nextNode).addCallback(function(){ selectPath(path, nextNode.getChildren(), def); });
+                               }else{
+                                       //Successfully reached the end of this path
+                                       def.callback(nextNode);
+                               }
+                       } else {
+                               def.errback("Could not expand path at " + nextPath);
+                       }
+               }
+               
+               function setNodes(newNodes){
+                       //After all expansion is finished, set the selection to
+                       //the set of nodes successfully found.
+                       tree.set("selectedNodes", dojo.map(
+                               dojo.filter(newNodes,function(x){return x[0];}),
+                               function(x){return x[1];}));
+               }
+       },
+
+       _setSelectedNodeAttr: function(node){
+               this.set('selectedNodes', [node]);
+       },
+       _setSelectedNodesAttr: function(nodes){
+               this._loadDeferred.addCallback( dojo.hitch(this, function(){
+                       this.dndController.setSelection(nodes);
+               }));
+       },
+
+
+       ////////////// Data store related functions //////////////////////
+       // These just get passed to the model; they are here for back-compat
+
+       mayHaveChildren: function(/*dojo.data.Item*/ item){
+               // summary:
+               //              Deprecated.   This should be specified on the model itself.
+               //
+               //              Overridable function to tell if an item has or may have children.
+               //              Controls whether or not +/- expando icon is shown.
+               //              (For efficiency reasons we may not want to check if an element actually
+               //              has children until user clicks the expando node)
+               // tags:
+               //              deprecated
+       },
+
+       getItemChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){
+               // summary:
+               //              Deprecated.   This should be specified on the model itself.
+               //
+               //              Overridable function that return array of child items of given parent item,
+               //              or if parentItem==null then return top items in tree
+               // tags:
+               //              deprecated
+       },
+
+       ///////////////////////////////////////////////////////
+       // Functions for converting an item to a TreeNode
+       getLabel: function(/*dojo.data.Item*/ item){
+               // summary:
+               //              Overridable function to get the label for a tree node (given the item)
+               // tags:
+               //              extension
+               return this.model.getLabel(item);       // String
+       },
+
+       getIconClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+               // summary:
+               //              Overridable function to return CSS class name to display icon
+               // tags:
+               //              extension
+               return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "dijitLeaf"
+       },
+
+       getLabelClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+               // summary:
+               //              Overridable function to return CSS class name to display label
+               // tags:
+               //              extension
+       },
+
+       getRowClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+               // summary:
+               //              Overridable function to return CSS class name to display row
+               // tags:
+               //              extension
+       },
+
+       getIconStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+               // summary:
+               //              Overridable function to return CSS styles to display icon
+               // returns:
+               //              Object suitable for input to dojo.style() like {backgroundImage: "url(...)"}
+               // tags:
+               //              extension
+       },
+
+       getLabelStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+               // summary:
+               //              Overridable function to return CSS styles to display label
+               // returns:
+               //              Object suitable for input to dojo.style() like {color: "red", background: "green"}
+               // tags:
+               //              extension
+       },
+
+       getRowStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+               // summary:
+               //              Overridable function to return CSS styles to display row
+               // returns:
+               //              Object suitable for input to dojo.style() like {background-color: "#bbb"}
+               // tags:
+               //              extension
+       },
+
+       getTooltip: function(/*dojo.data.Item*/ item){
+               // summary:
+               //              Overridable function to get the tooltip for a tree node (given the item)
+               // tags:
+               //              extension
+               return "";      // String
+       },
+
+       /////////// Keyboard and Mouse handlers ////////////////////
+
+       _onKeyPress: function(/*Event*/ e){
+               // summary:
+               //              Translates keypress events into commands for the controller
+               if(e.altKey){ return; }
+               var dk = dojo.keys;
+               var treeNode = dijit.getEnclosingWidget(e.target);
+               if(!treeNode){ return; }
+
+               var key = e.charOrCode;
+               if(typeof key == "string" && key != " "){       // handle printables (letter navigation)
+                       // Check for key navigation.
+                       if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){
+                               this._onLetterKeyNav( { node: treeNode, key: key.toLowerCase() } );
+                               dojo.stopEvent(e);
+                       }
+               }else{  // handle non-printables (arrow keys)
+                       // clear record of recent printables (being saved for multi-char letter navigation),
+                       // because "a", down-arrow, "b" shouldn't search for "ab"
+                       if(this._curSearch){
+                               clearTimeout(this._curSearch.timer);
+                               delete this._curSearch;
+                       }
+
+                       var map = this._keyHandlerMap;
+                       if(!map){
+                               // setup table mapping keys to events
+                               map = {};
+                               map[dk.ENTER]="_onEnterKey";
+                               //On WebKit based browsers, the combination ctrl-enter
+                               //does not get passed through. To allow accessible
+                               //multi-select on those browsers, the space key is
+                               //also used for selection.
+                               map[dk.SPACE]= map[" "] = "_onEnterKey";
+                               map[this.isLeftToRight() ? dk.LEFT_ARROW : dk.RIGHT_ARROW]="_onLeftArrow";
+                               map[this.isLeftToRight() ? dk.RIGHT_ARROW : dk.LEFT_ARROW]="_onRightArrow";
+                               map[dk.UP_ARROW]="_onUpArrow";
+                               map[dk.DOWN_ARROW]="_onDownArrow";
+                               map[dk.HOME]="_onHomeKey";
+                               map[dk.END]="_onEndKey";
+                               this._keyHandlerMap = map;
+                       }
+                       if(this._keyHandlerMap[key]){
+                               this[this._keyHandlerMap[key]]( { node: treeNode, item: treeNode.item, evt: e } );
+                               dojo.stopEvent(e);
+                       }
+               }
+       },
+
+       _onEnterKey: function(/*Object*/ message){
+               this._publish("execute", { item: message.item, node: message.node } );
+               this.dndController.userSelect(message.node, dojo.isCopyKey( message.evt ), message.evt.shiftKey);
+               this.onClick(message.item, message.node, message.evt);
+       },
+
+       _onDownArrow: function(/*Object*/ message){
+               // summary:
+               //              down arrow pressed; get next visible node, set focus there
+               var node = this._getNextNode(message.node);
+               if(node && node.isTreeNode){
+                       this.focusNode(node);
+               }
+       },
+
+       _onUpArrow: function(/*Object*/ message){
+               // summary:
+               //              Up arrow pressed; move to previous visible node
+
+               var node = message.node;
+
+               // if younger siblings
+               var previousSibling = node.getPreviousSibling();
+               if(previousSibling){
+                       node = previousSibling;
+                       // if the previous node is expanded, dive in deep
+                       while(node.isExpandable && node.isExpanded && node.hasChildren()){
+                               // move to the last child
+                               var children = node.getChildren();
+                               node = children[children.length-1];
+                       }
+               }else{
+                       // if this is the first child, return the parent
+                       // unless the parent is the root of a tree with a hidden root
+                       var parent = node.getParent();
+                       if(!(!this.showRoot && parent === this.rootNode)){
+                               node = parent;
+                       }
+               }
+
+               if(node && node.isTreeNode){
+                       this.focusNode(node);
+               }
+       },
+
+       _onRightArrow: function(/*Object*/ message){
+               // summary:
+               //              Right arrow pressed; go to child node
+               var node = message.node;
+
+               // if not expanded, expand, else move to 1st child
+               if(node.isExpandable && !node.isExpanded){
+                       this._expandNode(node);
+               }else if(node.hasChildren()){
+                       node = node.getChildren()[0];
+                       if(node && node.isTreeNode){
+                               this.focusNode(node);
+                       }
+               }
+       },
+
+       _onLeftArrow: function(/*Object*/ message){
+               // summary:
+               //              Left arrow pressed.
+               //              If not collapsed, collapse, else move to parent.
+
+               var node = message.node;
+
+               if(node.isExpandable && node.isExpanded){
+                       this._collapseNode(node);
+               }else{
+                       var parent = node.getParent();
+                       if(parent && parent.isTreeNode && !(!this.showRoot && parent === this.rootNode)){
+                               this.focusNode(parent);
+                       }
+               }
+       },
+
+       _onHomeKey: function(){
+               // summary:
+               //              Home key pressed; get first visible node, and set focus there
+               var node = this._getRootOrFirstNode();
+               if(node){
+                       this.focusNode(node);
+               }
+       },
+
+       _onEndKey: function(/*Object*/ message){
+               // summary:
+               //              End key pressed; go to last visible node.
+
+               var node = this.rootNode;
+               while(node.isExpanded){
+                       var c = node.getChildren();
+                       node = c[c.length - 1];
+               }
+
+               if(node && node.isTreeNode){
+                       this.focusNode(node);
+               }
+       },
+
+       // multiCharSearchDuration: Number
+       //              If multiple characters are typed where each keystroke happens within
+       //              multiCharSearchDuration of the previous keystroke,
+       //              search for nodes matching all the keystrokes.
+       //
+       //              For example, typing "ab" will search for entries starting with
+       //              "ab" unless the delay between "a" and "b" is greater than multiCharSearchDuration.
+       multiCharSearchDuration: 250,
+
+       _onLetterKeyNav: function(message){
+               // summary:
+               //              Called when user presses a prinatable key; search for node starting with recently typed letters.
+               // message: Object
+               //              Like { node: TreeNode, key: 'a' } where key is the key the user pressed.
+
+               // Branch depending on whether this key starts a new search, or modifies an existing search
+               var cs = this._curSearch;
+               if(cs){
+                       // We are continuing a search.  Ex: user has pressed 'a', and now has pressed
+                       // 'b', so we want to search for nodes starting w/"ab".
+                       cs.pattern = cs.pattern + message.key;
+                       clearTimeout(cs.timer);
+               }else{
+                       // We are starting a new search
+                       cs = this._curSearch = {
+                                       pattern: message.key,
+                                       startNode: message.node
+                       };
+               }
+
+               // set/reset timer to forget recent keystrokes
+               var self = this;
+               cs.timer = setTimeout(function(){
+                       delete self._curSearch;
+               }, this.multiCharSearchDuration);
+
+               // Navigate to TreeNode matching keystrokes [entered so far].
+               var node = cs.startNode;
+               do{
+                       node = this._getNextNode(node);
+                       //check for last node, jump to first node if necessary
+                       if(!node){
+                               node = this._getRootOrFirstNode();
+                       }
+               }while(node !== cs.startNode && (node.label.toLowerCase().substr(0, cs.pattern.length) != cs.pattern));
+               if(node && node.isTreeNode){
+                       // no need to set focus if back where we started
+                       if(node !== cs.startNode){
+                               this.focusNode(node);
+                       }
+               }
+       },
+
+       isExpandoNode: function(node, widget){
+               // summary:
+               //              check whether a dom node is the expandoNode for a particular TreeNode widget
+               return dojo.isDescendant(node, widget.expandoNode);
+       },
+       _onClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
+               // summary:
+               //              Translates click events into commands for the controller to process
+
+               var domElement = e.target,
+                       isExpandoClick = this.isExpandoNode(domElement, nodeWidget);
+
+               if( (this.openOnClick && nodeWidget.isExpandable) || isExpandoClick ){
+                       // expando node was clicked, or label of a folder node was clicked; open it
+                       if(nodeWidget.isExpandable){
+                               this._onExpandoClick({node:nodeWidget});
+                       }
+               }else{
+                       this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
+                       this.onClick(nodeWidget.item, nodeWidget, e);
+                       this.focusNode(nodeWidget);
+               }
+               dojo.stopEvent(e);
+       },
+       _onDblClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
+               // summary:
+               //              Translates double-click events into commands for the controller to process
+
+               var domElement = e.target,
+                       isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText);
+
+               if( (this.openOnDblClick && nodeWidget.isExpandable) ||isExpandoClick ){
+                       // expando node was clicked, or label of a folder node was clicked; open it
+                       if(nodeWidget.isExpandable){
+                               this._onExpandoClick({node:nodeWidget});
+                       }
+               }else{
+                       this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
+                       this.onDblClick(nodeWidget.item, nodeWidget, e);
+                       this.focusNode(nodeWidget);
+               }
+               dojo.stopEvent(e);
+       },
+
+       _onExpandoClick: function(/*Object*/ message){
+               // summary:
+               //              User clicked the +/- icon; expand or collapse my children.
+               var node = message.node;
+
+               // If we are collapsing, we might be hiding the currently focused node.
+               // Also, clicking the expando node might have erased focus from the current node.
+               // For simplicity's sake just focus on the node with the expando.
+               this.focusNode(node);
+
+               if(node.isExpanded){
+                       this._collapseNode(node);
+               }else{
+                       this._expandNode(node);
+               }
+       },
+
+       onClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
+               // summary:
+               //              Callback when a tree node is clicked
+               // tags:
+               //              callback
+       },
+       onDblClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
+               // summary:
+               //              Callback when a tree node is double-clicked
+               // tags:
+               //              callback
+       },
+       onOpen: function(/* dojo.data */ item, /*TreeNode*/ node){
+               // summary:
+               //              Callback when a node is opened
+               // tags:
+               //              callback
+       },
+       onClose: function(/* dojo.data */ item, /*TreeNode*/ node){
+               // summary:
+               //              Callback when a node is closed
+               // tags:
+               //              callback
+       },
+
+       _getNextNode: function(node){
+               // summary:
+               //              Get next visible node
+
+               if(node.isExpandable && node.isExpanded && node.hasChildren()){
+                       // if this is an expanded node, get the first child
+                       return node.getChildren()[0];           // _TreeNode
+               }else{
+                       // find a parent node with a sibling
+                       while(node && node.isTreeNode){
+                               var returnNode = node.getNextSibling();
+                               if(returnNode){
+                                       return returnNode;              // _TreeNode
+                               }
+                               node = node.getParent();
+                       }
+                       return null;
+               }
+       },
+
+       _getRootOrFirstNode: function(){
+               // summary:
+               //              Get first visible node
+               return this.showRoot ? this.rootNode : this.rootNode.getChildren()[0];
+       },
+
+       _collapseNode: function(/*_TreeNode*/ node){
+               // summary:
+               //              Called when the user has requested to collapse the node
+
+               if(node._expandNodeDeferred){
+                       delete node._expandNodeDeferred;
+               }
+
+               if(node.isExpandable){
+                       if(node.state == "LOADING"){
+                               // ignore clicks while we are in the process of loading data
+                               return;
+                       }
+
+                       node.collapse();
+                       this.onClose(node.item, node);
+
+                       if(node.item){
+                               this._state(node.item,false);
+                               this._saveState();
+                       }
+               }
+       },
+
+       _expandNode: function(/*_TreeNode*/ node, /*Boolean?*/ recursive){
+               // summary:
+               //              Called when the user has requested to expand the node
+               // recursive:
+               //              Internal flag used when _expandNode() calls itself, don't set.
+               // returns:
+               //              Deferred that fires when the node is loaded and opened and (if persist=true) all it's descendants
+               //              that were previously opened too
+
+               if(node._expandNodeDeferred && !recursive){
+                       // there's already an expand in progress (or completed), so just return
+                       return node._expandNodeDeferred;        // dojo.Deferred
+               }
+
+               var model = this.model,
+                       item = node.item,
+                       _this = this;
+
+               switch(node.state){
+                       case "UNCHECKED":
+                               // need to load all the children, and then expand
+                               node.markProcessing();
+
+                               // Setup deferred to signal when the load and expand are finished.
+                               // Save that deferred in this._expandDeferred as a flag that operation is in progress.
+                               var def = (node._expandNodeDeferred = new dojo.Deferred());
+
+                               // Get the children
+                               model.getChildren(
+                                       item,
+                                       function(items){
+                                               node.unmarkProcessing();
+
+                                               // Display the children and also start expanding any children that were previously expanded
+                                               // (if this.persist == true).   The returned Deferred will fire when those expansions finish.
+                                               var scid = node.setChildItems(items);
+
+                                               // Call _expandNode() again but this time it will just to do the animation (default branch).
+                                               // The returned Deferred will fire when the animation completes.
+                                               // TODO: seems like I can avoid recursion and just use a deferred to sequence the events?
+                                               var ed = _this._expandNode(node, true);
+
+                                               // After the above two tasks (setChildItems() and recursive _expandNode()) finish,
+                                               // signal that I am done.
+                                               scid.addCallback(function(){
+                                                       ed.addCallback(function(){
+                                                               def.callback();
+                                                       })
+                                               });
+                                       },
+                                       function(err){
+                                               console.error(_this, ": error loading root children: ", err);
+                                       }
+                               );
+                               break;
+
+                       default:        // "LOADED"
+                               // data is already loaded; just expand node
+                               def = (node._expandNodeDeferred = node.expand());
+
+                               this.onOpen(node.item, node);
+
+                               if(item){
+                                       this._state(item, true);
+                                       this._saveState();
+                               }
+               }
+
+               return def;     // dojo.Deferred
+       },
+
+       ////////////////// Miscellaneous functions ////////////////
+
+       focusNode: function(/* _tree.Node */ node){
+               // summary:
+               //              Focus on the specified node (which must be visible)
+               // tags:
+               //              protected
+
+               // set focus so that the label will be voiced using screen readers
+               dijit.focus(node.labelNode);
+       },
+
+       _onNodeFocus: function(/*dijit._Widget*/ node){
+               // summary:
+               //              Called when a TreeNode gets focus, either by user clicking
+               //              it, or programatically by arrow key handling code.
+               // description:
+               //              It marks that the current node is the selected one, and the previously
+               //              selected node no longer is.
+
+               if(node && node != this.lastFocused){
+                       if(this.lastFocused && !this.lastFocused._destroyed){
+                               // mark that the previously focsable node is no longer focusable
+                               this.lastFocused.setFocusable(false);
+                       }
+
+                       // mark that the new node is the currently selected one
+                       node.setFocusable(true);
+                       this.lastFocused = node;
+               }
+       },
+
+       _onNodeMouseEnter: function(/*dijit._Widget*/ node){
+               // summary:
+               //              Called when mouse is over a node (onmouseenter event),
+               //              this is monitored by the DND code
+       },
+
+       _onNodeMouseLeave: function(/*dijit._Widget*/ node){
+               // summary:
+               //              Called when mouse leaves a node (onmouseleave event),
+               //              this is monitored by the DND code
+       },
+
+       //////////////// Events from the model //////////////////////////
+
+       _onItemChange: function(/*Item*/ item){
+               // summary:
+               //              Processes notification of a change to an item's scalar values like label
+               var model = this.model,
+                       identity = model.getIdentity(item),
+                       nodes = this._itemNodesMap[identity];
+
+               if(nodes){
+                       var label = this.getLabel(item),
+                               tooltip = this.getTooltip(item);
+                       dojo.forEach(nodes, function(node){
+                               node.set({
+                                       item: item,             // theoretically could be new JS Object representing same item
+                                       label: label,
+                                       tooltip: tooltip
+                               });
+                               node._updateItemClasses(item);
+                       });
+               }
+       },
+
+       _onItemChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
+               // summary:
+               //              Processes notification of a change to an item's children
+               var model = this.model,
+                       identity = model.getIdentity(parent),
+                       parentNodes = this._itemNodesMap[identity];
+
+               if(parentNodes){
+                       dojo.forEach(parentNodes,function(parentNode){
+                               parentNode.setChildItems(newChildrenList);
+                       });
+               }
+       },
+
+       _onItemDelete: function(/*Item*/ item){
+               // summary:
+               //              Processes notification of a deletion of an item
+               var model = this.model,
+                       identity = model.getIdentity(item),
+                       nodes = this._itemNodesMap[identity];
+
+               if(nodes){
+                       dojo.forEach(nodes,function(node){
+                               // Remove node from set of selected nodes (if it's selected)
+                               this.dndController.removeTreeNode(node);
+
+                               var parent = node.getParent();
+                               if(parent){
+                                       // if node has not already been orphaned from a _onSetItem(parent, "children", ..) call...
+                                       parent.removeChild(node);
+                               }
+                               node.destroyRecursive();
+                       }, this);
+                       delete this._itemNodesMap[identity];
+               }
+       },
+
+       /////////////// Miscellaneous funcs
+
+       _initState: function(){
+               // summary:
+               //              Load in which nodes should be opened automatically
+               if(this.persist){
+                       var cookie = dojo.cookie(this.cookieName);
+                       this._openedItemIds = {};
+                       if(cookie){
+                               dojo.forEach(cookie.split(','), function(item){
+                                       this._openedItemIds[item] = true;
+                               }, this);
+                       }
+               }
+       },
+       _state: function(item,expanded){
+               // summary:
+               //              Query or set expanded state for an item,
+               if(!this.persist){
+                       return false;
+               }
+               var id=this.model.getIdentity(item);
+               if(arguments.length === 1){
+                       return this._openedItemIds[id];
+               }
+               if(expanded){
+                       this._openedItemIds[id] = true;
+               }else{
+                       delete this._openedItemIds[id];
+               }
+       },
+       _saveState: function(){
+               // summary:
+               //              Create and save a cookie with the currently expanded nodes identifiers
+               if(!this.persist){
+                       return;
+               }
+               var ary = [];
+               for(var id in this._openedItemIds){
+                       ary.push(id);
+               }
+               dojo.cookie(this.cookieName, ary.join(","), {expires:365});
+       },
+
+       destroy: function(){
+               if(this._curSearch){
+                       clearTimeout(this._curSearch.timer);
+                       delete this._curSearch;
+               }
+               if(this.rootNode){
+                       this.rootNode.destroyRecursive();
+               }
+               if(this.dndController && !dojo.isString(this.dndController)){
+                       this.dndController.destroy();
+               }
+               this.rootNode = null;
+               this.inherited(arguments);
+       },
+
+       destroyRecursive: function(){
+               // A tree is treated as a leaf, not as a node with children (like a grid),
+               // but defining destroyRecursive for back-compat.
+               this.destroy();
+       },
+
+       resize: function(changeSize){
+               if(changeSize){
+                       dojo.marginBox(this.domNode, changeSize);
+               }
+
+               // The only JS sizing involved w/tree is the indentation, which is specified
+               // in CSS and read in through this dummy indentDetector node (tree must be
+               // visible and attached to the DOM to read this)
+               this._nodePixelIndent = dojo._getMarginSize(this.tree.indentDetector).w;
+
+               if(this.tree.rootNode){
+                       // If tree has already loaded, then reset indent for all the nodes
+                       this.tree.rootNode.set('indent', this.showRoot ? 0 : -1);
+               }
+       },
+
+       _createTreeNode: function(/*Object*/ args){
+               // summary:
+               //              creates a TreeNode
+               // description:
+               //              Developers can override this method to define their own TreeNode class;
+               //              However it will probably be removed in a future release in favor of a way
+               //              of just specifying a widget for the label, rather than one that contains
+               //              the children too.
+               return new dijit._TreeNode(args);
+       }
+});
+
+// For back-compat.  TODO: remove in 2.0
+
 }
index f9bb239186022c308f2378011d006b51e393dbe3..b159d6ed9a9414d4f349e36672d128fd2f28d7df 100644 (file)
@@ -1,14 +1,20 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._Calendar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Calendar"] = true;
 dojo.provide("dijit._Calendar");
 dojo.require("dijit.Calendar");
-dojo.deprecated("dijit._Calendar is deprecated","dijit._Calendar moved to dijit.Calendar",1.5);
-dijit._Calendar=dijit.Calendar;
+
+
+dojo.deprecated("dijit._Calendar is deprecated", "dijit._Calendar moved to dijit.Calendar", 1.5);
+
+// dijit._Calendar had an underscore all this time merely because it did
+// not satisfy dijit's a11y policy.
+dijit._Calendar = dijit.Calendar;
+
 }
index 50d9dc559ae15be966eb2a379ce931671c9bb425..fcefca1f882679cd2fd885a57099cb114430bf90 100644 (file)
@@ -1,31 +1,76 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+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,{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);
-}});
+
+
+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
+                       }
+               }
+       );
+
 }
index ce8232cb389f8ea5c8b2530254ed4fef675bf103..23962688fb8463011acc4ba5a5dcf5798ad76b9f 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._Container"]){
-dojo._hasResource["dijit._Container"]=true;
+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,{isContainer:true,buildRendering:function(){
-this.inherited(arguments);
-if(!this.containerNode){
-this.containerNode=this.domNode;
-}
-},addChild:function(_1,_2){
-var _3=this.containerNode;
-if(_2&&typeof _2=="number"){
-var _4=this.getChildren();
-if(_4&&_4.length>=_2){
-_3=_4[_2-1].domNode;
-_2="after";
-}
-}
-dojo.place(_1.domNode,_3,_2);
-if(this._started&&!_1._started){
-_1.startup();
-}
-},removeChild:function(_5){
-if(typeof _5=="number"&&_5>0){
-_5=this.getChildren()[_5];
-}
-if(_5){
-var _6=_5.domNode;
-if(_6&&_6.parentNode){
-_6.parentNode.removeChild(_6);
-}
-}
-},hasChildren:function(){
-return this.getChildren().length>0;
-},destroyDescendants:function(_7){
-dojo.forEach(this.getChildren(),function(_8){
-_8.destroyRecursive(_7);
-});
-},_getSiblingOfChild:function(_9,_a){
-var _b=_9.domNode,_c=(_a>0?"nextSibling":"previousSibling");
-do{
-_b=_b[_c];
-}while(_b&&(_b.nodeType!=1||!dijit.byNode(_b)));
-return _b&&dijit.byNode(_b);
-},getIndexOfChild:function(_d){
-return dojo.indexOf(this.getChildren(),_d);
-},startup:function(){
-if(this._started){
-return;
-}
-dojo.forEach(this.getChildren(),function(_e){
-_e.startup();
-});
-this.inherited(arguments);
-}});
+
+
+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 = this.getChildren()[widget];
+                       }
+
+                       if(widget){
+                               var node = widget.domNode;
+                               if(node && node.parentNode){
+                                       node.parentNode.removeChild(node); // detach but don't destroy
+                               }
+                       }
+               },
+
+               hasChildren: function(){
+                       // summary:
+                       //              Returns true if widget has children, i.e. if this.containerNode contains something.
+                       return this.getChildren().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);
+               }
+       }
+);
+
 }
index 53144804f9848df863eca04babddc9cbc2bdf557..2fdecdcdfbc6d2e833a8fc41d3a4d9c3d67ae242 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._CssStateMixin"]){
-dojo._hasResource["dijit._CssStateMixin"]=true;
+if(!dojo._hasResource["dijit._CssStateMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._CssStateMixin"] = true;
 dojo.provide("dijit._CssStateMixin");
-dojo.declare("dijit._CssStateMixin",[],{cssStateNodes:{},postCreate:function(){
-this.inherited(arguments);
-dojo.forEach(["onmouseenter","onmouseleave","onmousedown"],function(e){
-this.connect(this.domNode,e,"_cssMouseEvent");
-},this);
-this.connect(this,"set",function(_1,_2){
-if(arguments.length>=2&&{disabled:true,readOnly:true,checked:true,selected:true}[_1]){
-this._setStateClass();
-}
-});
-dojo.forEach(["_onFocus","_onBlur"],function(ap){
-this.connect(this,ap,"_setStateClass");
-},this);
-for(var ap in this.cssStateNodes){
-this._trackMouseState(this[ap],this.cssStateNodes[ap]);
-}
-this._setStateClass();
-},_cssMouseEvent:function(_3){
-if(!this.disabled){
-switch(_3.type){
-case "mouseenter":
-case "mouseover":
-this._hovering=true;
-this._active=this._mouseDown;
-break;
-case "mouseleave":
-case "mouseout":
-this._hovering=false;
-this._active=false;
-break;
-case "mousedown":
-this._active=true;
-this._mouseDown=true;
-var _4=this.connect(dojo.body(),"onmouseup",function(){
-this._active=false;
-this._mouseDown=false;
-this._setStateClass();
-this.disconnect(_4);
-});
-break;
-}
-this._setStateClass();
-}
-},_setStateClass:function(){
-var _5=this.baseClass.split(" ");
-function _6(_7){
-_5=_5.concat(dojo.map(_5,function(c){
-return c+_7;
-}),"dijit"+_7);
-};
-if(!this.isLeftToRight()){
-_6("Rtl");
-}
-if(this.checked){
-_6("Checked");
-}
-if(this.state){
-_6(this.state);
-}
-if(this.selected){
-_6("Selected");
-}
-if(this.disabled){
-_6("Disabled");
-}else{
-if(this.readOnly){
-_6("ReadOnly");
-}else{
-if(this._active){
-_6("Active");
-}else{
-if(this._hovering){
-_6("Hover");
-}
-}
-}
-}
-if(this._focused){
-_6("Focused");
-}
-var tn=this.stateNode||this.domNode,_8={};
-dojo.forEach(tn.className.split(" "),function(c){
-_8[c]=true;
-});
-if("_stateClasses" in this){
-dojo.forEach(this._stateClasses,function(c){
-delete _8[c];
-});
-}
-dojo.forEach(_5,function(c){
-_8[c]=true;
-});
-var _9=[];
-for(var c in _8){
-_9.push(c);
-}
-tn.className=_9.join(" ");
-this._stateClasses=_5;
-},_trackMouseState:function(_a,_b){
-var _c=false,_d=false,_e=false;
-var _f=this,cn=dojo.hitch(this,"connect",_a);
-function _10(){
-var _11=("disabled" in _f&&_f.disabled)||("readonly" in _f&&_f.readonly);
-dojo.toggleClass(_a,_b+"Hover",_c&&!_d&&!_11);
-dojo.toggleClass(_a,_b+"Active",_d&&!_11);
-dojo.toggleClass(_a,_b+"Focused",_e&&!_11);
-};
-cn("onmouseenter",function(){
-_c=true;
-_10();
-});
-cn("onmouseleave",function(){
-_c=false;
-_d=false;
-_10();
-});
-cn("onmousedown",function(){
-_d=true;
-_10();
-});
-cn("onmouseup",function(){
-_d=false;
-_10();
-});
-cn("onfocus",function(){
-_e=true;
-_10();
-});
-cn("onblur",function(){
-_e=false;
-_10();
-});
-this.connect(this,"set",function(_12,_13){
-if(_12=="disabled"||_12=="readOnly"){
-_10();
-}
+
+
+dojo.declare("dijit._CssStateMixin", [], {
+       // summary:
+       //              Mixin for widgets to set CSS classes on the widget DOM nodes depending on hover/mouse press/focus
+       //              state changes, and also higher-level state changes such becoming disabled or selected.
+       //
+       // description:
+       //              By mixing this class into your widget, and setting the this.baseClass attribute, it will automatically
+       //              maintain CSS classes on the widget root node (this.domNode) depending on hover,
+       //              active, focus, etc. state.   Ex: with a baseClass of dijitButton, it will apply the classes
+       //              dijitButtonHovered and dijitButtonActive, as the user moves the mouse over the widget and clicks it.
+       //
+       //              It also sets CSS like dijitButtonDisabled based on widget semantic state.
+       //
+       //              By setting the cssStateNodes attribute, a widget can also track events on subnodes (like buttons
+       //              within the widget).
+
+       // cssStateNodes: [protected] Object
+       //              List of sub-nodes within the widget that need CSS classes applied on mouse hover/press and focus
+       //.
+       //              Each entry in the hash is a an attachpoint names (like "upArrowButton") mapped to a CSS class names
+       //              (like "dijitUpArrowButton"). Example:
+       //      |               {
+       //      |                       "upArrowButton": "dijitUpArrowButton",
+       //      |                       "downArrowButton": "dijitDownArrowButton"
+       //      |               }
+       //              The above will set the CSS class dijitUpArrowButton to the this.upArrowButton DOMNode when it
+       //              is hovered, etc.
+       cssStateNodes: {},
+
+       // hovering: [readonly] Boolean
+       //              True if cursor is over this widget
+       hovering: false,
+       
+       // active: [readonly] Boolean
+       //              True if mouse was pressed while over this widget, and hasn't been released yet
+       active: false,
+
+       _applyAttributes: function(){
+               // This code would typically be in postCreate(), but putting in _applyAttributes() for
+               // performance: so the class changes happen before DOM is inserted into the document.
+               // Change back to postCreate() in 2.0.  See #11635.
+
+               this.inherited(arguments);
+
+               // Automatically monitor mouse events (essentially :hover and :active) on this.domNode
+               dojo.forEach(["onmouseenter", "onmouseleave", "onmousedown"], function(e){
+                       this.connect(this.domNode, e, "_cssMouseEvent");
+               }, this);
+               
+               // Monitoring changes to disabled, readonly, etc. state, and update CSS class of root node
+               dojo.forEach(["disabled", "readOnly", "checked", "selected", "focused", "state", "hovering", "active"], function(attr){
+                       this.watch(attr, dojo.hitch(this, "_setStateClass"));
+               }, this);
+
+               // Events on sub nodes within the widget
+               for(var ap in this.cssStateNodes){
+                       this._trackMouseState(this[ap], this.cssStateNodes[ap]);
+               }
+               // Set state initially; there's probably no hover/active/focus state but widget might be
+               // disabled/readonly/checked/selected so we want to set CSS classes for those conditions.
+               this._setStateClass();
+       },
+
+       _cssMouseEvent: function(/*Event*/ event){
+               // summary:
+               //      Sets hovering and active properties depending on mouse state,
+               //      which triggers _setStateClass() to set appropriate CSS classes for this.domNode.
+
+               if(!this.disabled){
+                       switch(event.type){
+                               case "mouseenter":
+                               case "mouseover":       // generated on non-IE browsers even though we connected to mouseenter
+                                       this._set("hovering", true);
+                                       this._set("active", this._mouseDown);
+                                       break;
+
+                               case "mouseleave":
+                               case "mouseout":        // generated on non-IE browsers even though we connected to mouseleave
+                                       this._set("hovering", false);
+                                       this._set("active", false);
+                                       break;
+
+                               case "mousedown" :
+                                       this._set("active", true);
+                                       this._mouseDown = true;
+                                       // Set a global event to handle mouseup, so it fires properly
+                                       // even if the cursor leaves this.domNode before the mouse up event.
+                                       // Alternately could set active=false on mouseout.
+                                       var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
+                                               this._mouseDown = false;
+                                               this._set("active", false);
+                                               this.disconnect(mouseUpConnector);
+                                       });
+                                       break;
+                       }
+               }
+       },
+
+       _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".
+               //
+               //              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
+               //                      - Incomplete - ValidationTextBox sets this.state to "Incomplete" if the current input value is not finished yet
+               //                      - 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) and from focus manager (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.isLeftToRight()){
+                       // For RTL mode we need to set an addition class like dijitTextBoxRtl.
+                       multiply("Rtl");
+               }
+
+               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("Active");
+                       }else if(this.hovering){
+                               multiply("Hover");
+                       }
+               }
+
+               if(this._focused){
+                       multiply("Focused");
+               }
+
+               // 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;
+       },
+
+       _trackMouseState: function(/*DomNode*/ node, /*String*/ clazz){
+               // summary:
+               //              Track mouse/focus events on specified node and set CSS class on that node to indicate
+               //              current state.   Usually not called directly, but via cssStateNodes attribute.
+               // description:
+               //              Given class=foo, will set the following CSS class on the node
+               //                      - fooActive: if the user is currently pressing down the mouse button while over the node
+               //                      - fooHover: if the user is hovering the mouse over the node, but not pressing down a button
+               //                      - fooFocus: if the node is focused
+               //
+               //              Note that it won't set any classes if the widget is disabled.
+               // node: DomNode
+               //              Should be a sub-node of the widget, not the top node (this.domNode), since the top node
+               //              is handled specially and automatically just by mixing in this class.
+               // clazz: String
+               //              CSS class name (ex: dijitSliderUpArrow).
+
+               // Current state of node (initially false)
+               // NB: setting specifically to false because dojo.toggleClass() needs true boolean as third arg
+               var hovering=false, active=false, focused=false;
+
+               var self = this,
+                       cn = dojo.hitch(this, "connect", node);
+
+               function setClass(){
+                       var disabled = ("disabled" in self && self.disabled) || ("readonly" in self && self.readonly);
+                       dojo.toggleClass(node, clazz+"Hover", hovering && !active && !disabled);
+                       dojo.toggleClass(node, clazz+"Active", active && !disabled);
+                       dojo.toggleClass(node, clazz+"Focused", focused && !disabled);
+               }
+
+               // Mouse
+               cn("onmouseenter", function(){
+                       hovering = true;
+                       setClass();
+               });
+               cn("onmouseleave", function(){
+                       hovering = false;
+                       active = false;
+                       setClass();
+               });
+               cn("onmousedown", function(){
+                       active = true;
+                       setClass();
+               });
+               cn("onmouseup", function(){
+                       active = false;
+                       setClass();
+               });
+
+               // Focus
+               cn("onfocus", function(){
+                       focused = true;
+                       setClass();
+               });
+               cn("onblur", function(){
+                       focused = false;
+                       setClass();
+               });
+
+               // Just in case widget is enabled/disabled while it has focus/hover/active state.
+               // Maybe this is overkill.
+               this.watch("disabled", setClass);
+               this.watch("readOnly", setClass);
+       }
 });
-}});
+
 }
index f67e8d04c288733835fd8d8b5cecb57708ef93f0..0c3024a8a910c148583758c058f942ce0d6ee5e2 100644 (file)
@@ -1,27 +1,80 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._DialogMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._DialogMixin"] = true;
 dojo.provide("dijit._DialogMixin");
 dojo.require("dijit._Widget");
-dojo.declare("dijit._DialogMixin",null,{attributeMap:dijit._Widget.prototype.attributeMap,execute:function(_1){
-},onCancel:function(){
-},onExecute:function(){
-},_onSubmit:function(){
-this.onExecute();
-this.execute(this.get("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;
-}
-}});
+
+
+dojo.declare("dijit._DialogMixin", null,
+       {
+               // summary:
+               //              This provides functions useful to Dialog and TooltipDialog
+
+               attributeMap: dijit._Widget.prototype.attributeMap,
+
+               execute: function(/*Object*/ formContents){
+                       // summary:
+                       //              Callback when the user hits the submit button.
+                       //              Override this method to handle Dialog execution.
+                       // description:
+                       //              After the user has pressed the submit button, the Dialog
+                       //              first calls onExecute() to notify the container to hide the
+                       //              dialog and restore focus to wherever it used to be.
+                       //
+                       //              *Then* this method is called.
+                       // type:
+                       //              callback
+               },
+
+               onCancel: function(){
+                       // summary:
+                       //          Called when user has pressed the Dialog's cancel button, to notify container.
+                       // description:
+                       //          Developer shouldn't override or connect to this method;
+                       //              it's a private communication device between the TooltipDialog
+                       //              and the thing that opened it (ex: `dijit.form.DropDownButton`)
+                       // type:
+                       //              protected
+               },
+
+               onExecute: function(){
+                       // summary:
+                       //          Called when user has pressed the dialog's OK button, to notify container.
+                       // description:
+                       //          Developer shouldn't override or connect to this method;
+                       //              it's a private communication device between the TooltipDialog
+                       //              and the thing that opened it (ex: `dijit.form.DropDownButton`)
+                       // type:
+                       //              protected
+               },
+
+               _onSubmit: function(){
+                       // summary:
+                       //              Callback when user hits submit button
+                       // type:
+                       //              protected
+                       this.onExecute();       // notify container that we are about to execute
+                       this.execute(this.get('value'));
+               },
+
+               _getFocusItems: function(){
+                       // summary:
+                       //              Finds focusable items in dialog,
+                       //              and sets this._firstFocusItem and this._lastFocusItem
+                       // tags:
+                       //              protected
+
+                       var elems = dijit._getTabNavigable(this.containerNode);
+                       this._firstFocusItem = elems.lowest || elems.first || this.closeButtonNode || this.domNode;
+                       this._lastFocusItem = elems.last || elems.highest || this._firstFocusItem;
+               }
+       }
+);
+
 }
index 6606acb0007661e088c38c85c69ba9f8c6270d27..e1e9c1ca242436b078e8f25d0015be65801d12e9 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._HasDropDown"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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,_onDropDownMouseDown:function(e){
-if(this.disabled||this.readOnly){
-return;
-}
-this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseUp");
-this.toggleDropDown();
-},_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);
-}
-},_onDropDownClick:function(e){
-if(this._stopClickEvents){
-dojo.stopEvent(e);
-}
-},_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","_onDropDownMouseDown");
-this.connect(this._buttonNode,"onclick","_onDropDownClick");
-this.connect(this._buttonNode,"onkeydown","_onDropDownKeydown");
-this.connect(this._buttonNode,"onkeyup","_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){
-if(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE){
-e.preventDefault();
-}
-},_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();
-}else{
-if(d&&!this._opened&&(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE)){
-this.toggleDropDown();
-if(d.focus){
-setTimeout(dojo.hitch(d,"focus"),1);
-}
-}
-}
-},_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,{overflowX:"hidden",overflowY:_b?"auto":"hidden"});
-if(_b){
-mb.h=this.maxHeight;
-if("w" in mb){
-mb.w+=16;
-}
-}else{
-delete mb.h;
-}
-delete mb.t;
-delete mb.l;
-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(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){
-if(_d){
-this.focus();
-}
-dijit.popup.close(this.dropDown);
-this._opened=false;
-this.state="";
-}
-}});
+
+
+dojo.declare("dijit._HasDropDown",
+       null,
+       {
+               // summary:
+               //              Mixin for widgets that need drop down ability.
+
+               // _buttonNode: [protected] DomNode
+               //              The button/icon/node to click to display the drop down.
+               //              Can be set via a dojoAttachPoint assignment.
+               //              If missing, then either focusNode or domNode (if focusNode is also missing) will be used.
+               _buttonNode: null,
+
+               // _arrowWrapperNode: [protected] DomNode
+               //              Will set CSS class dijitUpArrow, dijitDownArrow, dijitRightArrow etc. on this node depending
+               //              on where the drop down is set to be positioned.
+               //              Can be set via a dojoAttachPoint assignment.
+               //              If missing, then _buttonNode will be used.
+               _arrowWrapperNode: null,
+
+               // _popupStateNode: [protected] DomNode
+               //              The node to set the popupActive class on.
+               //              Can be set via a dojoAttachPoint assignment.
+               //              If missing, then focusNode or _buttonNode (if focusNode is missing) will be used.
+               _popupStateNode: null,
+
+               // _aroundNode: [protected] DomNode
+               //              The node to display the popup around.
+               //              Can be set via a dojoAttachPoint assignment.
+               //              If missing, then domNode will be used.
+               _aroundNode: null,
+
+               // dropDown: [protected] Widget
+               //              The widget to display as a popup.  This widget *must* be
+               //              defined before the startup function is called.
+               dropDown: null,
+
+               // autoWidth: [protected] Boolean
+               //              Set to true to make the drop down at least as wide as this
+               //              widget.  Set to false if the drop down should just be its
+               //              default width
+               autoWidth: true,
+
+               // forceWidth: [protected] Boolean
+               //              Set to true to make the drop down exactly as wide as this
+               //              widget.  Overrides autoWidth.
+               forceWidth: false,
+
+               // maxHeight: [protected] Integer
+               //              The max height for our dropdown.
+               //              Any dropdown taller than this will have scrollbars.
+               //              Set to 0 for no max height, or -1 to limit height to available space in viewport
+               maxHeight: 0,
+
+               // dropDownPosition: [const] 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.
+               //
+               dropDownPosition: ["below","above"],
+
+               // _stopClickEvents: Boolean
+               //              When set to false, the click events will not be stopped, in
+               //              case you want to use them in your subwidget
+               _stopClickEvents: true,
+
+               _onDropDownMouseDown: function(/*Event*/ e){
+                       // summary:
+                       //              Callback when the user mousedown's on the arrow icon
+
+                       if(this.disabled || this.readOnly){ return; }
+
+                       dojo.stopEvent(e);
+
+                       this._docHandler = this.connect(dojo.doc, "onmouseup", "_onDropDownMouseUp");
+
+                       this.toggleDropDown();
+               },
+
+               _onDropDownMouseUp: function(/*Event?*/ e){
+                       // summary:
+                       //              Callback when the user lifts their mouse after mouse down on the arrow icon.
+                       //              If the drop is a simple menu and the mouse is over the menu, we execute it, otherwise, we focus our
+                       //              dropDown node.  If the event is missing, then we are not
+                       //              a mouseup event.
+                       //
+                       //              This is useful for the common mouse movement pattern
+                       //              with native browser <select> nodes:
+                       //                      1. mouse down on the select node (probably on the arrow)
+                       //                      2. move mouse to a menu item while holding down the mouse button
+                       //                      3. mouse up.  this selects the menu item as though the user had clicked it.
+                       if(e && this._docHandler){
+                               this.disconnect(this._docHandler);
+                       }
+                       var dropDown = this.dropDown, overMenu = false;
+
+                       if(e && this._opened){
+                               // This code deals with the corner-case when the drop down covers the original widget,
+                               // because it's so large.  In that case mouse-up shouldn't select a value from the menu.
+                               // Find out if our target is somewhere in our dropdown widget,
+                               // but not over our _buttonNode (the clickable node)
+                               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 && !overMenu){
+                                               if(dojo.hasClass(t, "dijitPopup")){
+                                                       overMenu = true;
+                                               }else{
+                                                       t = t.parentNode;
+                                               }
+                                       }
+                                       if(overMenu){
+                                               t = e.target;
+                                               if(dropDown.onItemClick){
+                                                       var menuItem;
+                                                       while(t && !(menuItem = dijit.byNode(t))){
+                                                               t = t.parentNode;
+                                                       }
+                                                       if(menuItem && menuItem.onClick && menuItem.getParent){
+                                                               menuItem.getParent().onItemClick(menuItem, e);
+                                                       }
+                                               }
+                                               return;
+                                       }
+                               }
+                       }
+                       if(this._opened && dropDown.focus && dropDown.autoFocus !== false){
+                               // Focus the dropdown widget - do it on a delay so that we
+                               // don't steal our own focus.
+                               window.setTimeout(dojo.hitch(dropDown, "focus"), 1);
+                       }
+               },
+
+               _onDropDownClick: function(/*Event*/ e){
+                       // the drop down was already opened on mousedown/keydown; just need to call stopEvent()
+                       if(this._stopClickEvents){
+                               dojo.stopEvent(e);
+                       }
+               },
+
+               buildRendering: function(){
+                       this.inherited(arguments);
+
+                       this._buttonNode = this._buttonNode || this.focusNode || this.domNode;
+                       this._popupStateNode = this._popupStateNode || this.focusNode || this._buttonNode;
+
+                       // Add a class to the "dijitDownArrowButton" type class to _buttonNode so theme can set direction of arrow
+                       // based on where drop down will normally appear
+                       var defaultPos = {
+                                       "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" + defaultPos + "ArrowButton");
+               },
+
+               postCreate: function(){
+                       // summary:
+                       //              set up nodes and connect our mouse and keypress events
+
+                       this.inherited(arguments);
+
+                       this.connect(this._buttonNode, "onmousedown", "_onDropDownMouseDown");
+                       this.connect(this._buttonNode, "onclick", "_onDropDownClick");
+                       this.connect(this.focusNode, "onkeypress", "_onKey");
+                       this.connect(this.focusNode, "onkeyup", "_onKeyUp");
+               },
+
+               destroy: function(){
+                       if(this.dropDown){
+                               // Destroy the drop down, unless it's already been destroyed.  This can happen because
+                               // the drop down is a direct child of <body> even though it's logically my child.
+                               if(!this.dropDown._destroyed){
+                                       this.dropDown.destroyRecursive();
+                               }
+                               delete this.dropDown;
+                       }
+                       this.inherited(arguments);
+               },
+
+               _onKey: function(/*Event*/ e){
+                       // summary:
+                       //              Callback when the user presses a key while focused on the button node
+
+                       if(this.disabled || this.readOnly){ return; }
+
+                       var d = this.dropDown, target = e.target;
+                       if(d && this._opened && d.handleKey){
+                               if(d.handleKey(e) === false){
+                                       /* false return code means that the drop down handled the key */
+                                       dojo.stopEvent(e);
+                                       return;
+                               }
+                       }
+                       if(d && this._opened && e.charOrCode == dojo.keys.ESCAPE){
+                               this.closeDropDown();
+                               dojo.stopEvent(e);
+                       }else if(!this._opened &&
+                                       (e.charOrCode == dojo.keys.DOWN_ARROW ||
+                                               ( (e.charOrCode == dojo.keys.ENTER || e.charOrCode == " ") &&
+                                                 //ignore enter and space if the event is for a text input
+                                                 ((target.tagName || "").toLowerCase() !== 'input' ||
+                                                    (target.type && target.type.toLowerCase() !== 'text'))))){
+                               // Toggle the drop down, but wait until keyup so that the drop down doesn't
+                               // get a stray keyup event, or in the case of key-repeat (because user held
+                               // down key for too long), stray keydown events
+                               this._toggleOnKeyUp = true;
+                               dojo.stopEvent(e);
+                       }
+               },
+
+               _onKeyUp: function(){
+                       if(this._toggleOnKeyUp){
+                               delete this._toggleOnKeyUp;
+                               this.toggleDropDown();
+                               var d = this.dropDown;  // drop down may not exist until toggleDropDown() call
+                               if(d && d.focus){
+                                       setTimeout(dojo.hitch(d, "focus"), 1);
+                               }
+                       }
+               },
+
+               _onBlur: function(){
+                       // summary:
+                       //              Called magically when focus has shifted away from this widget and it's dropdown
+
+                       // Don't focus on button if the user has explicitly focused on something else (happens
+                       // when user clicks another control causing the current popup to close)..
+                       // But if focus is inside of the drop down then reset focus to me, because IE doesn't like
+                       // it when you display:none a node with focus.
+                       var focusMe = dijit._curFocus && this.dropDown && dojo.isDescendant(dijit._curFocus, this.dropDown.domNode);
+
+                       this.closeDropDown(focusMe);
+
+                       this.inherited(arguments);
+               },
+
+               isLoaded: function(){
+                       // summary:
+                       //              Returns whether or not the dropdown is loaded.  This can
+                       //              be overridden in order to force a call to loadDropDown().
+                       // tags:
+                       //              protected
+
+                       return true;
+               },
+
+               loadDropDown: function(/* Function */ loadCallback){
+                       // summary:
+                       //              Loads the data for the dropdown, and at some point, calls
+                       //              the given callback.   This is basically a callback when the
+                       //              user presses the down arrow button to open the drop down.
+                       // tags:
+                       //              protected
+
+                       loadCallback();
+               },
+
+               toggleDropDown: function(){
+                       // summary:
+                       //              Callback when the user presses the down arrow button or presses
+                       //              the down arrow key to open/close the drop down.
+                       //              Toggle the drop-down widget; if it is up, close it, if not, open it
+                       // tags:
+                       //              protected
+
+                       if(this.disabled || this.readOnly){ return; }
+                       if(!this._opened){
+                               // If we aren't loaded, load it first so there isn't a flicker
+                               if(!this.isLoaded()){
+                                       this.loadDropDown(dojo.hitch(this, "openDropDown"));
+                                       return;
+                               }else{
+                                       this.openDropDown();
+                               }
+                       }else{
+                               this.closeDropDown();
+                       }
+               },
+
+               openDropDown: function(){
+                       // summary:
+                       //              Opens the dropdown for this widget.   To be called only when this.dropDown
+                       //              has been created and is ready to display (ie, it's data is loaded).
+                       // returns:
+                       //              return value of dijit.popup.open()
+                       // tags:
+                       //              protected
+
+                       var dropDown = this.dropDown,
+                               ddNode = dropDown.domNode,
+                               aroundNode = this._aroundNode || this.domNode,
+                               self = this;
+
+                       // Prepare our popup's height and honor maxHeight if it exists.
+
+                       // TODO: isn't maxHeight dependent on the return value from dijit.popup.open(),
+                       // ie, dependent on how much space is available (BK)
+
+                       if(!this._preparedNode){
+                               this._preparedNode = true;
+                               // Check if we have explicitly set width and height on the dropdown widget dom node
+                               if(ddNode.style.width){
+                                       this._explicitDDWidth = true;
+                               }
+                               if(ddNode.style.height){
+                                       this._explicitDDHeight = true;
+                               }
+                       }
+
+                       // Code for resizing dropdown (height limitation, or increasing width to match my width)
+                       if(this.maxHeight || this.forceWidth || this.autoWidth){
+                               var myStyle = {
+                                       display: "",
+                                       visibility: "hidden"
+                               };
+                               if(!this._explicitDDWidth){
+                                       myStyle.width = "";
+                               }
+                               if(!this._explicitDDHeight){
+                                       myStyle.height = "";
+                               }
+                               dojo.style(ddNode, myStyle);
+                               
+                               // Figure out maximum height allowed (if there is a height restriction)
+                               var maxHeight = this.maxHeight;
+                               if(maxHeight == -1){
+                                       // limit height to space available in viewport either above or below my domNode
+                                       // (whichever side has more room)
+                                       var viewport = dojo.window.getBox(),
+                                               position = dojo.position(aroundNode, false);
+                                       maxHeight = Math.floor(Math.max(position.y, viewport.h - (position.y + position.h)));
+                               }
+
+                               // Attach dropDown to DOM and make make visibility:hidden rather than display:none
+                               // so we call startup() and also get the size
+                               if(dropDown.startup && !dropDown._started){
+                                       dropDown.startup();
+                               }
+
+                               dijit.popup.moveOffScreen(dropDown);
+                               // Get size of drop down, and determine if vertical scroll bar needed
+                               var mb = dojo._getMarginSize(ddNode);
+                               var overHeight = (maxHeight && mb.h > maxHeight);
+                               dojo.style(ddNode, {
+                                       overflowX: "hidden",
+                                       overflowY: overHeight ? "auto" : "hidden"
+                               });
+                               if(overHeight){
+                                       mb.h = maxHeight;
+                                       if("w" in mb){
+                                               mb.w += 16;     // room for vertical scrollbar
+                                       }
+                               }else{
+                                       delete mb.h;
+                               }
+
+                               // Adjust dropdown width to match or be larger than my width
+                               if(this.forceWidth){
+                                       mb.w = aroundNode.offsetWidth;
+                               }else if(this.autoWidth){
+                                       mb.w = Math.max(mb.w, aroundNode.offsetWidth);
+                               }else{
+                                       delete mb.w;
+                               }
+                               
+                               // And finally, resize the dropdown to calculated height and width
+                               if(dojo.isFunction(dropDown.resize)){
+                                       dropDown.resize(mb);
+                               }else{
+                                       dojo.marginBox(ddNode, mb);
+                               }
+                       }
+
+                       var retVal = dijit.popup.open({
+                               parent: this,
+                               popup: dropDown,
+                               around: aroundNode,
+                               orient: dijit.getPopupAroundAlignment((this.dropDownPosition && this.dropDownPosition.length) ? this.dropDownPosition : ["below"],this.isLeftToRight()),
+                               onExecute: function(){
+                                       self.closeDropDown(true);
+                               },
+                               onCancel: function(){
+                                       self.closeDropDown(true);
+                               },
+                               onClose: function(){
+                                       dojo.attr(self._popupStateNode, "popupActive", false);
+                                       dojo.removeClass(self._popupStateNode, "dijitHasDropDownOpen");
+                                       self._opened = false;
+                               }
+                       });
+                       dojo.attr(this._popupStateNode, "popupActive", "true");
+                       dojo.addClass(self._popupStateNode, "dijitHasDropDownOpen");
+                       this._opened=true;
+
+                       // TODO: set this.checked and call setStateClass(), to affect button look while drop down is shown
+                       return retVal;
+               },
+
+               closeDropDown: function(/*Boolean*/ focus){
+                       // summary:
+                       //              Closes the drop down on this widget
+                       // focus:
+                       //              If true, refocuses the button widget
+                       // tags:
+                       //              protected
+
+                       if(this._opened){
+                               if(focus){ this.focus(); }
+                               dijit.popup.close(this.dropDown);
+                               this._opened = false;
+                       }
+               }
+
+       }
+);
+
 }
index 839ba8319319b9b6701f1b616caffc308ec907f7..aa1bcad4be27b768f0d614afe8a190e63e1879a2 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+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.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.set("tabIndex","-1");
-this.connect(_f,"_onFocus",function(){
-_f.set("tabIndex",this.tabIndex);
-});
-this.connect(_f,"_onBlur",function(){
-_f.set("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;
-}});
+
+
+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; });
+                       keyCodes[dojo.keys.HOME] = dojo.hitch(this, "focusFirstChild");
+                       keyCodes[dojo.keys.END] = dojo.hitch(this, "focusLastChild");
+                       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);
+                       }
+               },
+
+               focusLastChild: function(){
+                       // summary:
+                       //              Focus the last focusable child in the container.
+                       // tags:
+                       //              protected
+                       var child = this._getLastFocusableChild();
+                       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.set("tabIndex", this.tabIndex);  // for IE focus outline to appear, must set tabIndex before focs
+                       widget.focus(last ? "end" : "start");
+                       this._set("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.set("tabIndex", "-1");
+                       
+                       this.connect(widget, "_onFocus", function(){
+                               // Set valid tabIndex so tabbing away from widget goes to right place, see #10272
+                               widget.set("tabIndex", this.tabIndex);
+                       });
+                       this.connect(widget, "_onBlur", function(){
+                               widget.set("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 its 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
+               },
+
+               _getLastFocusableChild: function(){
+                       // summary:
+                       //              Returns last 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
+               }
+       }
+);
+
 }
index a12855d1256f55b30c2f562c0a36549fb59e5ace..1511433ebd59b81126dffeb8a6e5250cf84aaf82 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._PaletteMixin"]){
-dojo._hasResource["dijit._PaletteMixin"]=true;
+if(!dojo._hasResource["dijit._PaletteMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._PaletteMixin"] = true;
 dojo.provide("dijit._PaletteMixin");
 dojo.require("dijit._CssStateMixin");
-dojo.declare("dijit._PaletteMixin",[dijit._CssStateMixin],{defaultTimeout:500,timeoutChangeRate:0.9,value:null,_selectedCell:-1,tabIndex:"0",cellClass:"dijitPaletteCell",dyeClass:"",_preparePalette:function(_1,_2){
-this._cells=[];
-var _3=this._blankGif;
-var _4=dojo.getObject(this.dyeClass);
-for(var _5=0;_5<_1.length;_5++){
-var _6=dojo.create("tr",{tabIndex:"-1"},this.gridNode);
-for(var _7=0;_7<_1[_5].length;_7++){
-var _8=_1[_5][_7];
-if(_8){
-var _9=new _4(_8);
-var _a=dojo.create("td",{"class":this.cellClass,tabIndex:"-1",title:_2[_8]});
-_9.fillCell(_a,_3);
-this.connect(_a,"ondijitclick","_onCellClick");
-this._trackMouseState(_a,this.cellClass);
-dojo.place(_a,_6);
-_a.index=this._cells.length;
-this._cells.push({node:_a,dye:_9});
-}
-}
-}
-this._xDim=_1[0].length;
-this._yDim=_1.length;
-var _b={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:this.isLeftToRight()?1:-1,LEFT_ARROW:this.isLeftToRight()?-1:1};
-for(var _c in _b){
-this._connects.push(dijit.typematic.addKeyListener(this.domNode,{charOrCode:dojo.keys[_c],ctrlKey:false,altKey:false,shiftKey:false},this,function(){
-var _d=_b[_c];
-return function(_e){
-this._navigateByKey(_d,_e);
-};
-}(),this.timeoutChangeRate,this.defaultTimeout));
-}
-},postCreate:function(){
-this.inherited(arguments);
-this._setCurrent(this._cells[0].node);
-},focus:function(){
-dijit.focus(this._currentFocus);
-},_onCellClick:function(_f){
-var _10=_f.currentTarget,_11=this._getDye(_10).getValue();
-this._setCurrent(_10);
-setTimeout(dojo.hitch(this,function(){
-dijit.focus(_10);
-this._setValueAttr(_11,true);
-}));
-dojo.removeClass(_10,"dijitPaletteCellHover");
-dojo.stopEvent(_f);
-},_setCurrent:function(_12){
-if("_currentFocus" in this){
-dojo.attr(this._currentFocus,"tabIndex","-1");
-}
-this._currentFocus=_12;
-if(_12){
-dojo.attr(_12,"tabIndex",this.tabIndex);
-}
-},_setValueAttr:function(_13,_14){
-this.value=null;
-if(this._selectedCell>=0){
-dojo.removeClass(this._cells[this._selectedCell].node,"dijitPaletteCellSelected");
-}
-this._selectedCell=-1;
-if(_13){
-for(var i=0;i<this._cells.length;i++){
-if(_13==this._cells[i].dye.getValue()){
-this._selectedCell=i;
-this.value=_13;
-dojo.addClass(this._cells[i].node,"dijitPaletteCellSelected");
-if(_14||_14===undefined){
-this.onChange(_13);
-}
-break;
-}
-}
-}
-},onChange:function(_15){
-},_navigateByKey:function(_16,_17){
-if(_17==-1){
-return;
-}
-var _18=this._currentFocus.index+_16;
-if(_18<this._cells.length&&_18>-1){
-var _19=this._cells[_18].node;
-this._setCurrent(_19);
-setTimeout(dojo.hitch(dijit,"focus",_19),0);
-}
-},_getDye:function(_1a){
-return this._cells[_1a.index].dye;
-}});
+
+
+dojo.declare("dijit._PaletteMixin",
+       [dijit._CssStateMixin],
+       {
+       // summary:
+       //              A keyboard accessible palette, for picking a color/emoticon/etc.
+       // description:
+       //              A mixin for a grid showing various entities, so the user can pick a certain entity.
+
+       // defaultTimeout: Number
+       //              Number of milliseconds before a held key or button becomes typematic
+       defaultTimeout: 500,
+
+       // timeoutChangeRate: Number
+       //              Fraction of time used to change the typematic timer between events
+       //              1.0 means that each typematic event fires at defaultTimeout intervals
+       //              < 1.0 means that each typematic event fires at an increasing faster rate
+       timeoutChangeRate: 0.90,
+
+       // value: String
+       //              Currently selected color/emoticon/etc.
+       value: null,
+       
+       // _selectedCell: [private] Integer
+       //              Index of the currently selected cell. Initially, none selected
+       _selectedCell: -1,
+
+/*=====
+       // _currentFocus: [private] DomNode
+       //              The currently focused cell (if the palette itself has focus), or otherwise
+       //              the cell to be focused when the palette itself gets focus.
+       //              Different from value, which represents the selected (i.e. clicked) cell.
+       _currentFocus: null,
+=====*/
+
+/*=====
+       // _xDim: [protected] Integer
+       //              This is the number of cells horizontally across.
+       _xDim: null,
+=====*/
+
+/*=====
+       // _yDim: [protected] Integer
+       //              This is the number of cells vertically down.
+       _yDim: null,
+=====*/
+
+       // tabIndex: String
+       //              Widget tab index.
+       tabIndex: "0",
+
+       // cellClass: [protected] String
+       //              CSS class applied to each cell in the palette
+       cellClass: "dijitPaletteCell",
+
+       // dyeClass: [protected] String
+       //       Name of javascript class for Object created for each cell of the palette.
+       //       dyeClass should implements dijit.Dye interface
+       dyeClass: '',
+
+       _preparePalette: function(choices, titles, dyeClassObj) {
+               // summary:
+               //              Subclass must call _preparePalette() from postCreate(), passing in the tooltip
+               //              for each cell
+               // choices: String[][]
+               //              id's for each cell of the palette, used to create Dye JS object for each cell
+               // titles: String[]
+               //              Localized tooltip for each cell
+               // dyeClassObj: Constructor?
+               //              If specified, use this constructor rather than this.dyeClass
+
+               this._cells = [];
+               var url = this._blankGif;
+               
+               dyeClassObj = dyeClassObj || dojo.getObject(this.dyeClass);
+
+               for(var row=0; row < choices.length; row++){
+                       var rowNode = dojo.create("tr", {tabIndex: "-1"}, this.gridNode);
+                       for(var col=0; col < choices[row].length; col++){
+                               var value = choices[row][col];
+                               if(value){
+                                       var cellObject = new dyeClassObj(value, row, col);
+                                       
+                                       var cellNode = dojo.create("td", {
+                                               "class": this.cellClass,
+                                               tabIndex: "-1",
+                                               title: titles[value]
+                                       });
+
+                                       // prepare cell inner structure
+                                       cellObject.fillCell(cellNode, url);
+
+                                       this.connect(cellNode, "ondijitclick", "_onCellClick");
+                                       this._trackMouseState(cellNode, this.cellClass);
+
+                                       dojo.place(cellNode, rowNode);
+
+                                       cellNode.index = this._cells.length;
+
+                                       // save cell info into _cells
+                                       this._cells.push({node:cellNode, dye:cellObject});
+                               }
+                       }
+               }
+               this._xDim = choices[0].length;
+               this._yDim = choices.length;
+
+               // Now set all events
+               // The palette itself is navigated to with the tab key on the keyboard
+               // Keyboard navigation within the Palette is with the arrow keys
+               // Spacebar selects the cell.
+               // For the up key the index is changed by negative the x dimension.
+
+               var keyIncrementMap = {
+                       UP_ARROW: -this._xDim,
+                       // The down key the index is increase by the x dimension.
+                       DOWN_ARROW: this._xDim,
+                       // Right and left move the index by 1.
+                       RIGHT_ARROW: this.isLeftToRight() ? 1 : -1,
+                       LEFT_ARROW: this.isLeftToRight() ? -1 : 1
+               };
+               for(var key in keyIncrementMap){
+                       this._connects.push(
+                               dijit.typematic.addKeyListener(
+                                       this.domNode,
+                                       {charOrCode:dojo.keys[key], ctrlKey:false, altKey:false, shiftKey:false},
+                                       this,
+                                       function(){
+                                               var increment = keyIncrementMap[key];
+                                               return function(count){ this._navigateByKey(increment, count); };
+                                       }(),
+                                       this.timeoutChangeRate,
+                                       this.defaultTimeout
+                               )
+                       );
+               }
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
+
+               // Set initial navigable node.
+               this._setCurrent(this._cells[0].node);
+       },
+
+       focus: function(){
+               // summary:
+               //              Focus this widget.  Puts focus on the most recently focused cell.
+
+               // The cell already has tabIndex set, just need to set CSS and focus it
+               dijit.focus(this._currentFocus);
+       },
+
+       _onCellClick: function(/*Event*/ evt){
+               // summary:
+               //              Handler for click, enter key & space key. Selects the cell.
+               // evt:
+               //              The event.
+               // tags:
+               //              private
+
+               var target = evt.currentTarget,
+                       value = this._getDye(target).getValue();
+
+               // First focus the clicked cell, and then send onChange() notification.
+               // onChange() (via _setValueAttr) must be after the focus call, because
+               // it may trigger a refocus to somewhere else (like the Editor content area), and that
+               // second focus should win.
+               // Use setTimeout because IE doesn't like changing focus inside of an event handler.
+               this._setCurrent(target);
+               setTimeout(dojo.hitch(this, function(){
+                       dijit.focus(target);
+                       this._setValueAttr(value, true);
+               }));
+
+               // workaround bug where hover class is not removed on popup because the popup is
+               // closed and then there's no onblur event on the cell
+               dojo.removeClass(target, "dijitPaletteCellHover");
+
+               dojo.stopEvent(evt);
+       },
+
+       _setCurrent: function(/*DomNode*/ node){
+               // summary:
+               //              Sets which node is the focused cell.
+               // description:
+               //              At any point in time there's exactly one
+               //              cell with tabIndex != -1.   If focus is inside the palette then
+               //              focus is on that cell.
+               //
+               //              After calling this method, arrow key handlers and mouse click handlers
+               //              should focus the cell in a setTimeout().
+               // tags:
+               //              protected
+               if("_currentFocus" in this){
+                       // Remove tabIndex on old cell
+                       dojo.attr(this._currentFocus, "tabIndex", "-1");
+               }
+
+               // Set tabIndex of new cell
+               this._currentFocus = node;
+               if(node){
+                       dojo.attr(node, "tabIndex", this.tabIndex);
+               }
+       },
+
+       _setValueAttr: function(value, priorityChange){
+               // summary:
+               //              This selects a cell. It triggers the onChange event.
+               // value: String value of the cell to select
+               // tags:
+               //              protected
+               // priorityChange:
+               //              Optional parameter used to tell the select whether or not to fire
+               //              onChange event.
+               
+               // clear old selected cell
+               if(this._selectedCell >= 0){
+                       dojo.removeClass(this._cells[this._selectedCell].node, "dijitPaletteCellSelected");
+               }
+               this._selectedCell = -1;
+
+               // search for cell matching specified value
+               if(value){
+                       for(var i = 0; i < this._cells.length; i++){
+                               if(value == this._cells[i].dye.getValue()){
+                                       this._selectedCell = i;
+                                       dojo.addClass(this._cells[i].node, "dijitPaletteCellSelected");
+                                       break;
+                               }
+                       }
+               }
+               
+               // record new value, or null if no matching cell
+               this._set("value", this._selectedCell >= 0 ? value : null);
+
+               if(priorityChange || priorityChange === undefined){
+                       this.onChange(value);
+               }
+       },
+
+       onChange: function(value){
+               // summary:
+               //              Callback when a cell is selected.
+               // value: String
+               //              Value corresponding to cell.
+       },
+
+       _navigateByKey: function(increment, typeCount){
+               // summary:
+               //              This is the callback for typematic.
+               //              It changes the focus and the highlighed cell.
+               // increment:
+               //              How much the key is navigated.
+               // typeCount:
+               //              How many times typematic has fired.
+               // tags:
+               //              private
+
+               // typecount == -1 means the key is released.
+               if(typeCount == -1){ return; }
+
+               var newFocusIndex = this._currentFocus.index + increment;
+               if(newFocusIndex < this._cells.length && newFocusIndex > -1){
+                       var focusNode = this._cells[newFocusIndex].node;
+                       this._setCurrent(focusNode);
+
+                       // Actually focus the node, for the benefit of screen readers.
+                       // Use setTimeout because IE doesn't like changing focus inside of an event handler
+                       setTimeout(dojo.hitch(dijit, "focus", focusNode), 0);
+               }
+       },
+
+       _getDye: function(/*DomNode*/ cell){
+               // summary:
+               //              Get JS object for given cell DOMNode
+
+               return this._cells[cell.index].dye;
+       }
+});
+
+/*=====
+dojo.declare("dijit.Dye",
+       null,
+       {
+               // summary:
+               //              Interface for the JS Object associated with a palette cell (i.e. DOMNode)
+
+               constructor: function(alias, row, col){
+                       // summary:
+                       //              Initialize according to value or alias like "white"
+                       // alias: String
+               },
+
+               getValue: function(){
+                       // summary:
+                       //              Return "value" of cell; meaning of "value" varies by subclass.
+                       // description:
+                       //              For example color hex value, emoticon ascii value etc, entity hex value.
+               },
+
+               fillCell: function(cell, blankGif){
+                       // summary:
+                       //              Add cell DOMNode inner structure
+                       //      cell: DomNode
+                       //              The surrounding cell
+                       //      blankGif: String
+                       //              URL for blank cell image
+               }
+       }
+);
+=====*/
+
 }
index 65ca20bfa5d683e95f61645f3d8eab2bee949e3c..2e8d6b72f0ded729526462b6e3eef6f2c608e387 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._Templated"]){
-dojo._hasResource["dijit._Templated"]=true;
+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.require("dijit._Widget");
 dojo.require("dojo.string");
 dojo.require("dojo.parser");
 dojo.require("dojo.cache");
-dojo.declare("dijit._Templated",null,{templateString:null,templatePath:null,widgetsInTemplate:false,_skipNodeCache:false,_earlyTemplatedStartup:false,constructor:function(){
-this._attachPoints=[];
-},_stringRepl:function(_1){
-var _2=this.declaredClass,_3=this;
-return dojo.string.substitute(_1,this,function(_4,_5){
-if(_5.charAt(0)=="!"){
-_4=dojo.getObject(_5.substr(1),false,_3);
-}
-if(typeof _4=="undefined"){
-throw new Error(_2+" template:"+_5);
-}
-if(_4==null){
-return "";
-}
-return _5.charAt(0)=="!"?_4:_4.toString().replace(/"/g,"&quot;");
-},this);
-},buildRendering:function(){
-var _6=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);
-var _7;
-if(dojo.isString(_6)){
-_7=dojo._toDom(this._stringRepl(_6));
-if(_7.nodeType!=1){
-throw new Error("Invalid template: "+_6);
-}
-}else{
-_7=_6.cloneNode(true);
-}
-this.domNode=_7;
-this._attachTemplateNodes(_7);
-if(this.widgetsInTemplate){
-var _8=dojo.parser,_9,_a;
-if(_8._query!="[dojoType]"){
-_9=_8._query;
-_a=_8._attrName;
-_8._query="[dojoType]";
-_8._attrName="dojoType";
-}
-var cw=(this._startupWidgets=dojo.parser.parse(_7,{noStart:!this._earlyTemplatedStartup,inherited:{dir:this.dir,lang:this.lang}}));
-if(_9){
-_8._query=_9;
-_8._attrName=_a;
-}
-this._supportingWidgets=dijit.findWidgets(_7);
-this._attachTemplateNodes(cw,function(n,p){
-return n[p];
-});
-}
-this._fillContent(this.srcNodeRef);
-},_fillContent:function(_b){
-var _c=this.containerNode;
-if(_b&&_c){
-while(_b.hasChildNodes()){
-_c.appendChild(_b.firstChild);
-}
-}
-},_attachTemplateNodes:function(_d,_e){
-_e=_e||function(n,p){
-return n.getAttribute(p);
-};
-var _f=dojo.isArray(_d)?_d:(_d.all||_d.getElementsByTagName("*"));
-var x=dojo.isArray(_d)?0:-1;
-for(;x<_f.length;x++){
-var _10=(x==-1)?_d:_f[x];
-if(this.widgetsInTemplate&&_e(_10,"dojoType")){
-continue;
-}
-var _11=_e(_10,"dojoAttachPoint");
-if(_11){
-var _12,_13=_11.split(/\s*,\s*/);
-while((_12=_13.shift())){
-if(dojo.isArray(this[_12])){
-this[_12].push(_10);
-}else{
-this[_12]=_10;
-}
-this._attachPoints.push(_12);
-}
-}
-var _14=_e(_10,"dojoAttachEvent");
-if(_14){
-var _15,_16=_14.split(/\s*,\s*/);
-var _17=dojo.trim;
-while((_15=_16.shift())){
-if(_15){
-var _18=null;
-if(_15.indexOf(":")!=-1){
-var _19=_15.split(":");
-_15=_17(_19[0]);
-_18=_17(_19[1]);
-}else{
-_15=_17(_15);
-}
-if(!_18){
-_18=_15;
-}
-this.connect(_10,_15,_18);
-}
-}
-}
-var _1a=_e(_10,"waiRole");
-if(_1a){
-dijit.setWaiRole(_10,_1a);
-}
-var _1b=_e(_10,"waiState");
-if(_1b){
-dojo.forEach(_1b.split(/\s*,\s*/),function(_1c){
-if(_1c.indexOf("-")!=-1){
-var _1d=_1c.split("-");
-dijit.setWaiState(_10,_1d[0],_1d[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(_1e){
-delete this[_1e];
-},this);
-this._attachPoints=[];
-this.inherited(arguments);
-}});
-dijit._Templated._templateCache={};
-dijit._Templated.getCachedTemplate=function(_1f,_20,_21){
-var _22=dijit._Templated._templateCache;
-var key=_20||_1f;
-var _23=_22[key];
-if(_23){
-try{
-if(!_23.ownerDocument||_23.ownerDocument==dojo.doc){
-return _23;
-}
-}
-catch(e){
-}
-dojo.destroy(_23);
-}
-if(!_20){
-_20=dojo.cache(_1f,{sanitize:true});
-}
-_20=dojo.string.trim(_20);
-if(_21||_20.match(/\$\{([^\}]+)\}/g)){
-return (_22[key]=_20);
-}else{
-var _24=dojo._toDom(_20);
-if(_24.nodeType!=1){
-throw new Error("Invalid template: "+_20);
-}
-return (_22[key]=_24);
-}
+
+
+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: [],
+ =====*/
+
+/*=====
+               // _attachEvents: [private] Handle[]
+               //              List of connections associated with dojoAttachEvent=... in the
+               //              template
+               _attachEvents: [],
+ =====*/
+
+               constructor: function(){
+                       this._attachPoints = [];
+                       this._attachEvents = [];
+               },
+
+               _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);
+               },
+
+               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;
+
+                       // Call down to _Widget.buildRendering() to get base classes assigned
+                       // TODO: change the baseClass assignment to attributeMap
+                       this.inherited(arguments);
+
+                       // 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){
+                               // Store widgets that we need to start at a later point in time
+                               var cw = (this._startupWidgets = dojo.parser.parse(node, {
+                                       noStart: !this._earlyTemplatedStartup,
+                                       template: true,
+                                       inherited: {dir: this.dir, lang: this.lang},
+                                       propsThis: this,        // so data-dojo-props of widgets in the template can reference "this" to refer to me
+                                       scope: "dojo"   // even in multi-version mode templates use dojoType/data-dojo-type
+                               }));
+
+                               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.
+                       //              Alternately, if rootNode is an array of widgets, then will process dojoAttachPoint
+                       //              etc. for those widgets.
+                       // 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") || getAttrFunc(baseNode, "data-dojo-type"))){
+                                       continue;
+                               }
+                               // Process dojoAttachPoint
+                               var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint") || getAttrFunc(baseNode, "data-dojo-attach-point");
+                               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") || getAttrFunc(baseNode, "data-dojo-attach-event");;
+                               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._attachEvents.push(this.connect(baseNode, event, thisFunc));
+                                               }
+                                       }
+                               }
+
+                               // waiRole, waiState
+                               // TODO: remove this in 2.0, templates are now using role=... and aria-XXX=... attributes directicly
+                               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 = [];
+
+                       // And same for event handlers
+                       dojo.forEach(this._attachEvents, this.disconnect, this);
+                       this._attachEvents = [];
+                       
+                       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 _25=dijit._Templated._templateCache;
-for(var key in _25){
-var _26=_25[key];
-if(typeof _26=="object"){
-dojo.destroy(_26);
-}
-delete _25[key];
+       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:""
 });
-}
-dojo.extend(dijit._Widget,{dojoAttachEvent:"",dojoAttachPoint:"",waiRole:"",waiState:""});
+
 }
index fc3ae29a89db6f518220d60b8fa4a02bf3f29f27..678223c45b965b1afd5b09d6940e751b8691b7fb 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._TimePicker"]){
-dojo._hasResource["dijit._TimePicker"]=true;
+if(!dojo._hasResource["dijit._TimePicker"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._TimePicker"] = true;
 dojo.provide("dijit._TimePicker");
 dojo.require("dijit.form._FormWidget");
 dojo.require("dojo.date.locale");
-dojo.declare("dijit._TimePicker",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/TimePicker.html","<div id=\"widget_${id}\" class=\"dijitMenu\"\n    ><div dojoAttachPoint=\"upArrow\" class=\"dijitButtonNode dijitUpArrowButton\" dojoAttachEvent=\"onmouseenter:_buttonMouse,onmouseleave:_buttonMouse\"\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" wairole=\"presentation\" role=\"presentation\">&nbsp;</div\n\t\t><div class=\"dijitArrowButtonChar\">&#9650;</div></div\n    ><div dojoAttachPoint=\"timeMenu,focusNode\" dojoAttachEvent=\"onclick:_onOptionSelected,onmouseover,onmouseout\"></div\n    ><div dojoAttachPoint=\"downArrow\" class=\"dijitButtonNode dijitDownArrowButton\" dojoAttachEvent=\"onmouseenter:_buttonMouse,onmouseleave:_buttonMouse\"\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" wairole=\"presentation\" role=\"presentation\">&nbsp;</div\n\t\t><div class=\"dijitArrowButtonChar\">&#9660;</div></div\n></div>\n"),baseClass:"dijitTimePicker",clickableIncrement:"T00:15:00",visibleIncrement:"T01:00:00",visibleRange:"T05:00:00",value:new Date(),_visibleIncrement:2,_clickableIncrement:1,_totalIncrements:10,constraints:{},serialize:dojo.date.stamp.toISOString,_filterString:"",setValue:function(_1){
-dojo.deprecated("dijit._TimePicker:setValue() is deprecated.  Use set('value', ...) instead.","","2.0");
-this.set("value",_1);
-},_setValueAttr:function(_2){
-this.value=_2;
-this._showText();
-},onOpen:function(_3){
-if(this._beenOpened&&this.domNode.parentNode){
-var p=dijit.byId(this.domNode.parentNode.dijitPopupParent);
-if(p){
-var _4=p.get("displayedValue");
-if(_4&&!p.parse(_4,p.constraints)){
-this._filterString=_4;
-}else{
-this._filterString="";
-}
-this._showText();
-}
-}
-this._beenOpened=true;
-},isDisabledDate:function(_5,_6){
-return false;
-},_getFilteredNodes:function(_7,_8,_9){
-var _a=[],n,i=_7,_b=this._maxIncrement+Math.abs(i),_c=_9?-1:1,_d=_9?1:0,_e=_9?0:1;
-do{
-i=i-_d;
-n=this._createOption(i);
-if(n){
-_a.push(n);
-}
-i=i+_e;
-}while(_a.length<_8&&(i*_c)<_b);
-if(_9){
-_a.reverse();
-}
-return _a;
-},_showText:function(){
-this.timeMenu.innerHTML="";
-var _f=dojo.date.stamp.fromISOString;
-this._clickableIncrementDate=_f(this.clickableIncrement);
-this._visibleIncrementDate=_f(this.visibleIncrement);
-this._visibleRangeDate=_f(this.visibleRange);
-var _10=function(_11){
-return _11.getHours()*60*60+_11.getMinutes()*60+_11.getSeconds();
-};
-var _12=_10(this._clickableIncrementDate);
-var _13=_10(this._visibleIncrementDate);
-var _14=_10(this._visibleRangeDate);
-var _15=this.value.getTime();
-this._refDate=new Date(_15-_15%(_13*1000));
-this._refDate.setFullYear(1970,0,1);
-this._clickableIncrement=1;
-this._totalIncrements=_14/_12;
-this._visibleIncrement=_13/_12;
-this._maxIncrement=(60*60*24)/_12;
-var _16=this._getFilteredNodes(0,this._totalIncrements>>1,true);
-var _17=this._getFilteredNodes(0,this._totalIncrements>>1,false);
-if(_16.length<this._totalIncrements>>1){
-_16=_16.slice(_16.length/2);
-_17=_17.slice(0,_17.length/2);
-}
-dojo.forEach(_16.concat(_17),function(n){
-this.timeMenu.appendChild(n);
-},this);
-},postCreate:function(){
-if(this.constraints===dijit._TimePicker.prototype.constraints){
-this.constraints={};
-}
-dojo.mixin(this,this.constraints);
-if(!this.constraints.locale){
-this.constraints.locale=this.lang;
-}
-this.connect(this.timeMenu,dojo.isIE?"onmousewheel":"DOMMouseScroll","_mouseWheeled");
-var _18=this;
-var _19=function(){
-_18._connects.push(dijit.typematic.addMouseListener.apply(null,arguments));
-};
-_19(this.upArrow,this,this._onArrowUp,1,50);
-_19(this.downArrow,this,this._onArrowDown,1,50);
-var _1a=function(cb){
-return function(cnt){
-if(cnt>0){
-cb.call(this,arguments);
-}
-};
-};
-var _1b=function(_1c,cb){
-return function(e){
-dojo.stopEvent(e);
-dijit.typematic.trigger(e,this,_1c,_1a(cb),_1c,1,50);
-};
-};
-this.connect(this.upArrow,"onmouseover",_1b(this.upArrow,this._onArrowUp));
-this.connect(this.downArrow,"onmouseover",_1b(this.downArrow,this._onArrowDown));
-this.inherited(arguments);
-},_buttonMouse:function(e){
-dojo.toggleClass(e.currentTarget,e.currentTarget==this.upArrow?"dijitUpArrowHover":"dijitDownArrowHover",e.type=="mouseenter"||e.type=="mouseover");
-},_createOption:function(_1d){
-var _1e=new Date(this._refDate);
-var _1f=this._clickableIncrementDate;
-_1e.setHours(_1e.getHours()+_1f.getHours()*_1d,_1e.getMinutes()+_1f.getMinutes()*_1d,_1e.getSeconds()+_1f.getSeconds()*_1d);
-if(this.constraints.selector=="time"){
-_1e.setFullYear(1970,0,1);
-}
-var _20=dojo.date.locale.format(_1e,this.constraints);
-if(this._filterString&&_20.toLowerCase().indexOf(this._filterString)!==0){
-return null;
-}
-var div=dojo.create("div",{"class":this.baseClass+"Item"});
-div.date=_1e;
-div.index=_1d;
-dojo.create("div",{"class":this.baseClass+"ItemInner",innerHTML:_20},div);
-if(_1d%this._visibleIncrement<1&&_1d%this._visibleIncrement>-1){
-dojo.addClass(div,this.baseClass+"Marker");
-}else{
-if(!(_1d%this._clickableIncrement)){
-dojo.addClass(div,this.baseClass+"Tick");
-}
-}
-if(this.isDisabledDate(_1e)){
-dojo.addClass(div,this.baseClass+"ItemDisabled");
-}
-if(!dojo.date.compare(this.value,_1e,this.constraints.selector)){
-div.selected=true;
-dojo.addClass(div,this.baseClass+"ItemSelected");
-if(dojo.hasClass(div,this.baseClass+"Marker")){
-dojo.addClass(div,this.baseClass+"MarkerSelected");
-}else{
-dojo.addClass(div,this.baseClass+"TickSelected");
-}
-}
-return div;
-},_onOptionSelected:function(tgt){
-var _21=tgt.target.date||tgt.target.parentNode.date;
-if(!_21||this.isDisabledDate(_21)){
-return;
-}
-this._highlighted_option=null;
-this.set("value",_21);
-this.onValueSelected(_21);
-},onValueSelected:function(_22){
-},_highlightOption:function(_23,_24){
-if(!_23){
-return;
-}
-if(_24){
-if(this._highlighted_option){
-this._highlightOption(this._highlighted_option,false);
-}
-this._highlighted_option=_23;
-}else{
-if(this._highlighted_option!==_23){
-return;
-}else{
-this._highlighted_option=null;
-}
-}
-dojo.toggleClass(_23,this.baseClass+"ItemHover",_24);
-if(dojo.hasClass(_23,this.baseClass+"Marker")){
-dojo.toggleClass(_23,this.baseClass+"MarkerHover",_24);
-}else{
-dojo.toggleClass(_23,this.baseClass+"TickHover",_24);
-}
-},onmouseover:function(e){
-this._keyboardSelected=null;
-var tgr=(e.target.parentNode===this.timeMenu)?e.target:e.target.parentNode;
-if(!dojo.hasClass(tgr,this.baseClass+"Item")){
-return;
-}
-this._highlightOption(tgr,true);
-},onmouseout:function(e){
-this._keyboardSelected=null;
-var tgr=(e.target.parentNode===this.timeMenu)?e.target:e.target.parentNode;
-this._highlightOption(tgr,false);
-},_mouseWheeled:function(e){
-this._keyboardSelected=null;
-dojo.stopEvent(e);
-var _25=(dojo.isIE?e.wheelDelta:-e.detail);
-this[(_25>0?"_onArrowUp":"_onArrowDown")]();
-},_onArrowUp:function(_26){
-if(typeof _26=="number"&&_26==-1){
-return;
-}
-if(!this.timeMenu.childNodes.length){
-return;
-}
-var _27=this.timeMenu.childNodes[0].index;
-var _28=this._getFilteredNodes(_27,1,true);
-if(_28.length){
-this.timeMenu.removeChild(this.timeMenu.childNodes[this.timeMenu.childNodes.length-1]);
-this.timeMenu.insertBefore(_28[0],this.timeMenu.childNodes[0]);
-}
-},_onArrowDown:function(_29){
-if(typeof _29=="number"&&_29==-1){
-return;
-}
-if(!this.timeMenu.childNodes.length){
-return;
-}
-var _2a=this.timeMenu.childNodes[this.timeMenu.childNodes.length-1].index+1;
-var _2b=this._getFilteredNodes(_2a,1,false);
-if(_2b.length){
-this.timeMenu.removeChild(this.timeMenu.childNodes[0]);
-this.timeMenu.appendChild(_2b[0]);
-}
-},handleKey:function(e){
-var dk=dojo.keys;
-if(e.keyChar||e.charOrCode===dk.BACKSPACE||e.charOrCode==dk.DELETE){
-setTimeout(dojo.hitch(this,function(){
-this._filterString=e.target.value.toLowerCase();
-this._showText();
-}),1);
-}else{
-if(e.charOrCode==dk.DOWN_ARROW||e.charOrCode==dk.UP_ARROW){
-dojo.stopEvent(e);
-if(this._highlighted_option&&!this._highlighted_option.parentNode){
-this._highlighted_option=null;
-}
-var _2c=this.timeMenu,tgt=this._highlighted_option||dojo.query("."+this.baseClass+"ItemSelected",_2c)[0];
-if(!tgt){
-tgt=_2c.childNodes[0];
-}else{
-if(_2c.childNodes.length){
-if(e.charOrCode==dk.DOWN_ARROW&&!tgt.nextSibling){
-this._onArrowDown();
-}else{
-if(e.charOrCode==dk.UP_ARROW&&!tgt.previousSibling){
-this._onArrowUp();
-}
-}
-if(e.charOrCode==dk.DOWN_ARROW){
-tgt=tgt.nextSibling;
-}else{
-tgt=tgt.previousSibling;
-}
-}
-}
-this._highlightOption(tgt,true);
-this._keyboardSelected=tgt;
-}else{
-if(this._highlighted_option&&(e.charOrCode==dk.ENTER||e.charOrCode===dk.TAB)){
-if(!this._keyboardSelected&&e.charOrCode===dk.TAB){
-return;
-}
-if(e.charOrCode==dk.ENTER){
-dojo.stopEvent(e);
-}
-this._onOptionSelected({target:this._highlighted_option});
-}
-}
-}
-}});
+
+
+/*=====
+dojo.declare(
+       "dijit._TimePicker.__Constraints",
+       dojo.date.locale.__FormatOptions,
+       {
+               // clickableIncrement: String
+               //              See `dijit._TimePicker.clickableIncrement`
+               clickableIncrement: "T00:15:00",
+
+               // visibleIncrement: String
+               //              See `dijit._TimePicker.visibleIncrement`
+               visibleIncrement: "T01:00:00",
+
+               // visibleRange: String
+               //              See `dijit._TimePicker.visibleRange`
+               visibleRange: "T05:00:00"
+       }
+);
+=====*/
+
+dojo.declare("dijit._TimePicker",
+       [dijit._Widget, dijit._Templated],
+       {
+               // summary:
+               //              A graphical time picker.
+               //              This widget is used internally by other widgets and is not available
+               //              as a standalone widget due to lack of accessibility support.
+
+               templateString: dojo.cache("dijit", "templates/TimePicker.html", "<div id=\"widget_${id}\" class=\"dijitMenu\"\n    ><div dojoAttachPoint=\"upArrow\" class=\"dijitButtonNode dijitUpArrowButton\" dojoAttachEvent=\"onmouseenter:_buttonMouse,onmouseleave:_buttonMouse\"\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" role=\"presentation\">&nbsp;</div\n\t\t><div class=\"dijitArrowButtonChar\">&#9650;</div></div\n    ><div dojoAttachPoint=\"timeMenu,focusNode\" dojoAttachEvent=\"onclick:_onOptionSelected,onmouseover,onmouseout\"></div\n    ><div dojoAttachPoint=\"downArrow\" class=\"dijitButtonNode dijitDownArrowButton\" dojoAttachEvent=\"onmouseenter:_buttonMouse,onmouseleave:_buttonMouse\"\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" role=\"presentation\">&nbsp;</div\n\t\t><div class=\"dijitArrowButtonChar\">&#9660;</div></div\n></div>\n"),
+
+               // baseClass: [protected] String
+               //              The root className to use for the various states of this widget
+               baseClass: "dijitTimePicker",
+
+               // clickableIncrement: String
+               //              ISO-8601 string representing the amount by which
+               //              every clickable element in the time picker increases.
+               //              Set in local time, without a time zone.
+               //              Example: `T00:15:00` creates 15 minute increments
+               //              Must divide dijit._TimePicker.visibleIncrement evenly
+               clickableIncrement: "T00:15:00",
+
+               // visibleIncrement: String
+               //              ISO-8601 string representing the amount by which
+               //              every element with a visible time in the time picker increases.
+               //              Set in local time, without a time zone.
+               //              Example: `T01:00:00` creates text in every 1 hour increment
+               visibleIncrement: "T01:00:00",
+
+               // visibleRange: String
+               //              ISO-8601 string representing the range of this TimePicker.
+               //              The TimePicker will only display times in this range.
+               //              Example: `T05:00:00` displays 5 hours of options
+               visibleRange: "T05:00:00",
+
+               // value: String
+               //              Date to display.
+               //              Defaults to current time and date.
+               //              Can be a Date object or an ISO-8601 string.
+               //              If you specify the GMT time zone (`-01:00`),
+               //              the time will be converted to the local time in the local time zone.
+               //              Otherwise, the time is considered to be in the local time zone.
+               //              If you specify the date and isDate is true, the date is used.
+               //              Example: if your local time zone is `GMT -05:00`,
+               //              `T10:00:00` becomes `T10:00:00-05:00` (considered to be local time),
+               //              `T10:00:00-01:00` becomes `T06:00:00-05:00` (4 hour difference),
+               //              `T10:00:00Z` becomes `T05:00:00-05:00` (5 hour difference between Zulu and local time)
+               //              `yyyy-mm-ddThh:mm:ss` is the format to set the date and time
+               //              Example: `2007-06-01T09:00:00`
+               value: new Date(),
+
+               _visibleIncrement:2,
+               _clickableIncrement:1,
+               _totalIncrements:10,
+
+               // constraints: dijit._TimePicker.__Constraints
+               //              Specifies valid range of times (start time, end time)
+               constraints:{},
+
+/*=====
+               serialize: function(val, options){
+                       // summary:
+                       //              User overridable function used to convert the attr('value') result to a String
+                       // val: Date
+                       //              The current value
+                       // options: Object?
+                       // tags:
+                       //              protected
+               },
+=====*/
+               serialize: dojo.date.stamp.toISOString,
+
+/*=====
+               // filterString: string
+               //              The string to filter by
+               filterString: "",
+=====*/
+
+               setValue: function(/*Date*/ value){
+                       // summary:
+                       //              Deprecated.  Used set('value') instead.
+                       // tags:
+                       //              deprecated
+                       dojo.deprecated("dijit._TimePicker:setValue() is deprecated.  Use set('value', ...) instead.", "", "2.0");
+                       this.set('value', value);
+               },
+
+               _setValueAttr: function(/*Date*/ date){
+                       // summary:
+                       //              Hook so set('value', ...) works.
+                       // description:
+                       //              Set the value of the TimePicker.
+                       //              Redraws the TimePicker around the new date.
+                       // tags:
+                       //              protected
+                       this._set("value", date);
+                       this._showText();
+               },
+
+               _setFilterStringAttr: function(val){
+                       // summary:
+                       //              Called by TimeTextBox to filter the values shown in my list
+                       this._set("filterString", val);
+                       this._showText();
+               },
+
+               isDisabledDate: function(/*Date*/ dateObject, /*String?*/ locale){
+                       // summary:
+                       //              May be overridden to disable certain dates in the TimePicker e.g. `isDisabledDate=dojo.date.locale.isWeekend`
+                       // type:
+                       //              extension
+                       return false; // Boolean
+               },
+
+               _getFilteredNodes: function(/*number*/ start, /*number*/ maxNum, /*Boolean*/ before, /*DOMnode*/ lastNode){
+                       // summary:
+                       //              Returns an array of nodes with the filter applied.  At most maxNum nodes
+                       //              will be returned - but fewer may be returned as well.  If the
+                       //              before parameter is set to true, then it will return the elements
+                       //              before the given index
+                       // tags:
+                       //              private
+                       var
+                               nodes = [],
+                               lastValue = lastNode ? lastNode.date : this._refDate,
+                               n,
+                               i = start,
+                               max = this._maxIncrement + Math.abs(i),
+                               chk = before ? -1 : 1,
+                               dec = before ? 1 : 0,
+                               inc = 1 - dec;
+                       do{
+                               i = i - dec;
+                               n = this._createOption(i);
+                               if(n){
+                                       if((before && n.date > lastValue) || (!before && n.date < lastValue)){
+                                               break; // don't wrap
+                                       }
+                                       nodes[before ? "unshift" : "push"](n);
+                                       lastValue = n.date;
+                               }
+                               i = i + inc;
+                       }while(nodes.length < maxNum && (i*chk) < max);
+                       return nodes;
+               },
+
+               _showText: function(){
+                       // summary:
+                       //              Displays the relevant choices in the drop down list
+                       // tags:
+                       //              private
+                       var fromIso = dojo.date.stamp.fromISOString;
+                       this.timeMenu.innerHTML = "";
+                       this._clickableIncrementDate=fromIso(this.clickableIncrement);
+                       this._visibleIncrementDate=fromIso(this.visibleIncrement);
+                       this._visibleRangeDate=fromIso(this.visibleRange);
+                       // get the value of the increments and the range in seconds (since 00:00:00) to find out how many divs to create
+                       var
+                               sinceMidnight = function(/*Date*/ date){
+                               return date.getHours() * 60 * 60 + date.getMinutes() * 60 + date.getSeconds();
+                               },
+                               clickableIncrementSeconds = sinceMidnight(this._clickableIncrementDate),
+                               visibleIncrementSeconds = sinceMidnight(this._visibleIncrementDate),
+                               visibleRangeSeconds = sinceMidnight(this._visibleRangeDate),
+
+                       // round reference date to previous visible increment
+                               time = (this.value || this.currentFocus).getTime();
+
+                       this._refDate = new Date(time - time % (visibleIncrementSeconds*1000));
+                       this._refDate.setFullYear(1970,0,1); // match parse defaults
+
+                       // assume clickable increment is the smallest unit
+                       this._clickableIncrement = 1;
+                       // divide the visible range by the clickable increment to get the number of divs to create
+                       // example: 10:00:00/00:15:00 -> display 40 divs
+                       this._totalIncrements = visibleRangeSeconds / clickableIncrementSeconds;
+                       // divide the visible increments by the clickable increments to get how often to display the time inline
+                       // example: 01:00:00/00:15:00 -> display the time every 4 divs
+                       this._visibleIncrement = visibleIncrementSeconds / clickableIncrementSeconds;
+                       // divide the number of seconds in a day by the clickable increment in seconds to get the
+                       // absolute max number of increments.
+                       this._maxIncrement = (60 * 60 * 24) / clickableIncrementSeconds;
+
+                       var
+                               // Find the nodes we should display based on our filter.
+                               // Limit to 10 nodes displayed as a half-hearted attempt to stop drop down from overlapping <input>.
+                               after = this._getFilteredNodes(0, Math.min(this._totalIncrements >> 1, 10) - 1),
+                               before = this._getFilteredNodes(0, Math.min(this._totalIncrements, 10) - after.length, true, after[0]);
+                       dojo.forEach(before.concat(after), function(n){this.timeMenu.appendChild(n);}, this);
+               },
+
+               constructor: function(){
+                       this.constraints = {}; // create instance object
+               },
+
+               postMixInProperties: function(){
+                       this.inherited(arguments);
+                       this._setConstraintsAttr(this.constraints); // this needs to happen now (and later) due to codependency on _set*Attr calls
+               },
+
+               _setConstraintsAttr: function(/* Object */ constraints){
+                       // brings in visibleRange, increments, etc.
+                       dojo.mixin(this, constraints);
+
+                       // dojo.date.locale needs the lang in the constraints as locale
+                       if(!constraints.locale){
+                               constraints.locale = this.lang;
+                       }
+               },
+
+               postCreate: function(){
+                       // assign typematic mouse listeners to the arrow buttons
+                       this.connect(this.timeMenu, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
+                       this._connects.push(dijit.typematic.addMouseListener(this.upArrow, this, "_onArrowUp", 33, 250));
+                       this._connects.push(dijit.typematic.addMouseListener(this.downArrow, this, "_onArrowDown", 33, 250));
+
+                       this.inherited(arguments);
+               },
+
+               _buttonMouse: function(/*Event*/ e){
+                       // summary:
+                       //              Handler for hover (and unhover) on up/down arrows
+                       // tags:
+                       //              private
+
+                       // in non-IE browser the "mouseenter" event will become "mouseover",
+                       // but in IE it's still "mouseenter"
+                       dojo.toggleClass(e.currentTarget, e.currentTarget == this.upArrow ? "dijitUpArrowHover" : "dijitDownArrowHover",
+                               e.type == "mouseenter" || e.type == "mouseover");
+               },
+
+               _createOption: function(/*Number*/ index){
+                       // summary:
+                       //              Creates a clickable time option
+                       // tags:
+                       //              private
+                       var date = new Date(this._refDate);
+                       var incrementDate = this._clickableIncrementDate;
+                       date.setHours(date.getHours() + incrementDate.getHours() * index,
+                               date.getMinutes() + incrementDate.getMinutes() * index,
+                               date.getSeconds() + incrementDate.getSeconds() * index);
+                       if(this.constraints.selector == "time"){
+                               date.setFullYear(1970,0,1); // make sure each time is for the same date
+                       }
+                       var dateString = dojo.date.locale.format(date, this.constraints);
+                       if(this.filterString && dateString.toLowerCase().indexOf(this.filterString) !== 0){
+                               // Doesn't match the filter - return null
+                               return null;
+                       }
+
+                       var div = dojo.create("div", {"class": this.baseClass+"Item"});
+                       div.date = date;
+                       div.index = index;
+                       dojo.create('div',{
+                               "class": this.baseClass + "ItemInner",
+                               innerHTML: dateString
+                       }, div);
+
+                       if(index%this._visibleIncrement<1 && index%this._visibleIncrement>-1){
+                               dojo.addClass(div, this.baseClass+"Marker");
+                       }else if(!(index%this._clickableIncrement)){
+                               dojo.addClass(div, this.baseClass+"Tick");
+                       }
+
+                       if(this.isDisabledDate(date)){
+                               // set disabled
+                               dojo.addClass(div, this.baseClass+"ItemDisabled");
+                       }
+                       if(this.value && !dojo.date.compare(this.value, date, this.constraints.selector)){
+                               div.selected = true;
+                               dojo.addClass(div, this.baseClass+"ItemSelected");
+                               if(dojo.hasClass(div, this.baseClass+"Marker")){
+                                       dojo.addClass(div, this.baseClass+"MarkerSelected");
+                               }else{
+                                       dojo.addClass(div, this.baseClass+"TickSelected");
+                               }
+
+                               // Initially highlight the current value.   User can change highlight by up/down arrow keys
+                               // or mouse movement.
+                               this._highlightOption(div, true);
+                       }
+                       return div;
+               },
+
+               _onOptionSelected: function(/*Object*/ tgt){
+                       // summary:
+                       //              Called when user clicks an option in the drop down list
+                       // tags:
+                       //              private
+                       var tdate = tgt.target.date || tgt.target.parentNode.date;
+                       if(!tdate || this.isDisabledDate(tdate)){ return; }
+                       this._highlighted_option = null;
+                       this.set('value', tdate);
+                       this.onChange(tdate);
+               },
+
+               onChange: function(/*Date*/ time){
+                       // summary:
+                       //              Notification that a time was selected.  It may be the same as the previous value.
+                       // tags:
+                       //      public
+               },
+
+               _highlightOption: function(/*node*/ node, /*Boolean*/ highlight){
+                       // summary:
+                       //              Turns on/off highlight effect on a node based on mouse out/over event
+                       // tags:
+                       //              private
+                       if(!node){return;}
+                       if(highlight){
+                               if(this._highlighted_option){
+                                       this._highlightOption(this._highlighted_option, false);
+                               }
+                               this._highlighted_option = node;
+                       }else if(this._highlighted_option !== node){
+                               return;
+                       }else{
+                               this._highlighted_option = null;
+                       }
+                       dojo.toggleClass(node, this.baseClass+"ItemHover", highlight);
+                       if(dojo.hasClass(node, this.baseClass+"Marker")){
+                               dojo.toggleClass(node, this.baseClass+"MarkerHover", highlight);
+                       }else{
+                               dojo.toggleClass(node, this.baseClass+"TickHover", highlight);
+                       }
+               },
+
+               onmouseover: function(/*Event*/ e){
+                       // summary:
+                       //              Handler for onmouseover event
+                       // tags:
+                       //              private
+                       this._keyboardSelected = null;
+                       var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
+                       // if we aren't targeting an item, then we return
+                       if(!dojo.hasClass(tgr, this.baseClass+"Item")){return;}
+                       this._highlightOption(tgr, true);
+               },
+
+               onmouseout: function(/*Event*/ e){
+                       // summary:
+                       //              Handler for onmouseout event
+                       // tags:
+                       //              private
+                       this._keyboardSelected = null;
+                       var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
+                       this._highlightOption(tgr, false);
+               },
+
+               _mouseWheeled: function(/*Event*/ e){
+                       // summary:
+                       //              Handle the mouse wheel events
+                       // tags:
+                       //              private
+                       this._keyboardSelected = null;
+                       dojo.stopEvent(e);
+                       // we're not _measuring_ the scroll amount, just direction
+                       var scrollAmount = (dojo.isIE ? e.wheelDelta : -e.detail);
+                       this[(scrollAmount>0 ? "_onArrowUp" : "_onArrowDown")](); // yes, we're making a new dom node every time you mousewheel, or click
+               },
+
+               _onArrowUp: function(count){
+                       // summary:
+                       //              Handler for up arrow key.
+                       // description:
+                       //              Removes the bottom time and add one to the top
+                       // tags:
+                       //              private
+                       if(typeof count == "number" && count == -1){ return; } // typematic end
+                       if(!this.timeMenu.childNodes.length){ return; }
+                       var index = this.timeMenu.childNodes[0].index;
+                       var divs = this._getFilteredNodes(index, 1, true, this.timeMenu.childNodes[0]);
+                       if(divs.length){
+                               this.timeMenu.removeChild(this.timeMenu.childNodes[this.timeMenu.childNodes.length - 1]);
+                               this.timeMenu.insertBefore(divs[0], this.timeMenu.childNodes[0]);
+                       }
+               },
+
+               _onArrowDown: function(count){
+                       // summary:
+                       //              Handler for up arrow key.
+                       // description:
+                       //              Remove the top time and add one to the bottom
+                       // tags:
+                       //              private
+                       if(typeof count == "number" && count == -1){ return; } // typematic end
+                       if(!this.timeMenu.childNodes.length){ return; }
+                       var index = this.timeMenu.childNodes[this.timeMenu.childNodes.length - 1].index + 1;
+                       var divs = this._getFilteredNodes(index, 1, false, this.timeMenu.childNodes[this.timeMenu.childNodes.length - 1]);
+                       if(divs.length){
+                               this.timeMenu.removeChild(this.timeMenu.childNodes[0]);
+                               this.timeMenu.appendChild(divs[0]);
+                       }
+               },
+
+               handleKey: function(/*Event*/ e){
+                       // summary:
+                       //              Called from `dijit.form._DateTimeTextBox` to pass a keypress event
+                       //              from the `dijit.form.TimeTextBox` to be handled in this widget
+                       // tags:
+                       //              protected
+                       var dk = dojo.keys;
+                       if(e.charOrCode == dk.DOWN_ARROW || e.charOrCode == dk.UP_ARROW){
+                               dojo.stopEvent(e);
+                               // Figure out which option to highlight now and then highlight it
+                               if(this._highlighted_option && !this._highlighted_option.parentNode){
+                                       this._highlighted_option = null;
+                               }
+                               var timeMenu = this.timeMenu,
+                                       tgt = this._highlighted_option || dojo.query("." + this.baseClass + "ItemSelected", timeMenu)[0];
+                               if(!tgt){
+                                       tgt = timeMenu.childNodes[0];
+                               }else if(timeMenu.childNodes.length){
+                                       if(e.charOrCode == dk.DOWN_ARROW && !tgt.nextSibling){
+                                               this._onArrowDown();
+                                       }else if(e.charOrCode == dk.UP_ARROW && !tgt.previousSibling){
+                                               this._onArrowUp();
+                                       }
+                                       if(e.charOrCode == dk.DOWN_ARROW){
+                                               tgt = tgt.nextSibling;
+                                       }else{
+                                               tgt = tgt.previousSibling;
+                                       }
+                               }
+                               this._highlightOption(tgt, true);
+                               this._keyboardSelected = tgt;
+                               return false;
+                       }else if(e.charOrCode == dk.ENTER || e.charOrCode === dk.TAB){
+                               // mouse hover followed by TAB is NO selection
+                               if(!this._keyboardSelected && e.charOrCode === dk.TAB){
+                                       return true;    // true means don't call stopEvent()
+                               }
+
+                               // Accept the currently-highlighted option as the value
+                               if(this._highlighted_option){
+                               this._onOptionSelected({target: this._highlighted_option});
+                       }
+
+                               // Call stopEvent() for ENTER key so that form doesn't submit,
+                               // but not for TAB, so that TAB does switch focus
+                               return e.charOrCode === dk.TAB;
+                       }
+               }
+       }
+);
+
 }
index d4a2ce96a0f747c17e89d2e7dee8956c2fbab34c..f2f5afcf9ac32b3e706e5b894b5542bc204bb205 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._Widget"]){
-dojo._hasResource["dijit._Widget"]=true;
+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._WidgetBase");
 dojo.require("dijit._base");
-dojo.connect(dojo,"_connect",function(_1,_2){
-if(_1&&dojo.isFunction(_1._onConnect)){
-_1._onConnect(_2);
-}
-});
-dijit._connectOnUseEventHandler=function(_3){
-};
-dijit._lastKeyDownNode=null;
+
+
+
+////////////////// DEFERRED CONNECTS ///////////////////
+
+// 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){};
+
+////////////////// ONDIJITCLICK SUPPORT ///////////////////
+
+// 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 _4=function(_5){
-dijit._lastKeyDownNode=_5.srcElement;
-};
-dojo.doc.attachEvent("onkeydown",_4);
-dojo.addOnWindowUnload(function(){
-dojo.doc.detachEvent("onkeydown",_4);
-});
-})();
+       (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(_6){
-dijit._lastKeyDownNode=_6.target;
-},true);
+       dojo.doc.addEventListener('keydown', function(evt){
+               dijit._lastKeyDownNode = evt.target;
+       }, true);
 }
+
 (function(){
-var _7={},_8=function(_9){
-var dc=_9.declaredClass;
-if(!_7[dc]){
-var r=[],_a,_b=_9.constructor.prototype;
-for(var _c in _b){
-if(dojo.isFunction(_b[_c])&&(_a=_c.match(/^_set([a-zA-Z]*)Attr$/))&&_a[1]){
-r.push(_a[1].charAt(0).toLowerCase()+_a[1].substr(1));
-}
-}
-_7[dc]=r;
-}
-return _7[dc]||[];
-};
-dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",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(_d,_e){
-this.create(_d,_e);
-},create:function(_f,_10){
-this.srcNodeRef=dojo.byId(_10);
-this._connects=[];
-this._subscribes=[];
-this._deferredConnects=dojo.clone(this._deferredConnects);
-for(var _11 in this.attributeMap){
-delete this._deferredConnects[_11];
-}
-for(_11 in this._deferredConnects){
-if(this[_11]!==dijit._connectOnUseEventHandler){
-delete this._deferredConnects[_11];
-}
-}
-if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){
-this.id=this.srcNodeRef.id;
-}
-if(_f){
-this.params=_f;
-dojo.mixin(this,_f);
-}
-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 _12=this.srcNodeRef;
-if(_12&&_12.parentNode){
-_12.parentNode.replaceChild(this.domNode,_12);
-}
-for(_11 in this.params){
-this._onConnect(_11);
-}
-}
-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 _13=function(_14,_15){
-if((_15.params&&_14 in _15.params)||_15[_14]){
-_15.set(_14,_15[_14]);
-}
-};
-for(var _16 in this.attributeMap){
-_13(_16,this);
-}
-dojo.forEach(_8(this),function(a){
-if(!(a in this.attributeMap)){
-_13(a,this);
-}
-},this);
-},postMixInProperties:function(){
-},buildRendering:function(){
-this.domNode=this.srcNodeRef||dojo.create("div");
-},postCreate:function(){
-if(this.baseClass){
-var _17=this.baseClass.split(" ");
-if(!this.isLeftToRight()){
-_17=_17.concat(dojo.map(_17,function(_18){
-return _18+"Rtl";
-}));
-}
-dojo.addClass(this.domNode,_17);
-}
-},startup:function(){
-this._started=true;
-},destroyRecursive:function(_19){
-this._beingDestroyed=true;
-this.destroyDescendants(_19);
-this.destroy(_19);
-},destroy:function(_1a){
-this._beingDestroyed=true;
-this.uninitialize();
-var d=dojo,dfe=d.forEach,dun=d.unsubscribe;
-dfe(this._connects,function(_1b){
-dfe(_1b,d.disconnect);
-});
-dfe(this._subscribes,function(_1c){
-dun(_1c);
-});
-dfe(this._supportingWidgets||[],function(w){
-if(w.destroyRecursive){
-w.destroyRecursive();
-}else{
-if(w.destroy){
-w.destroy();
-}
-}
-});
-this.destroyRendering(_1a);
-dijit.registry.remove(this.id);
-this._destroyed=true;
-},destroyRendering:function(_1d){
-if(this.bgIframe){
-this.bgIframe.destroy(_1d);
-delete this.bgIframe;
-}
-if(this.domNode){
-if(_1d){
-dojo.removeAttr(this.domNode,"widgetId");
-}else{
-dojo.destroy(this.domNode);
-}
-delete this.domNode;
-}
-if(this.srcNodeRef){
-if(!_1d){
-dojo.destroy(this.srcNodeRef);
-}
-delete this.srcNodeRef;
-}
-},destroyDescendants:function(_1e){
-dojo.forEach(this.getChildren(),function(_1f){
-if(_1f.destroyRecursive){
-_1f.destroyRecursive(_1e);
-}
+
+dojo.declare("dijit._Widget", dijit._WidgetBase, {
+       // summary:
+       //              Base class for all Dijit widgets.
+       //
+       //              Extends _WidgetBase, adding support for:
+       //                      - deferred connections
+       //                              A call like dojo.connect(myWidget, "onMouseMove", func)
+       //                              will essentially do a dojo.connect(myWidget.domNode, "onMouseMove", func)
+       //                      - ondijitclick
+       //                              Support new dojoAttachEvent="ondijitclick: ..." that is triggered by a mouse click or a SPACE/ENTER keypress
+       //                      - focus related functions
+       //                              In particular, the onFocus()/onBlur() callbacks.   Driven internally by
+       //                              dijit/_base/focus.js.
+       //                      - deprecated methods
+       //                      - onShow(), onHide(), onClose()
+       //
+       //              Also, by loading code in dijit/_base, turns on:
+       //                      - browser sniffing (putting browser id like .dj_ie on <html> node)
+       //                      - high contrast mode sniffing (add .dijit_a11y class to <body> if machine is in high contrast mode)
+       
+
+       ////////////////// DEFERRED CONNECTS ///////////////////
+
+       // _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
+       },
+       =====*/
+
+       create: function(/*Object?*/params, /*DomNode|String?*/srcNodeRef){
+               // 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
+                       }
+               }
+
+               this.inherited(arguments);
+
+               if(this.domNode){
+                       // 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);
+                       }
+               }
+       },
+
+       _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];
+               }
+       },
+
+       ////////////////// FOCUS RELATED ///////////////////
+       // _onFocus() and _onBlur() are called by the focus manager
+
+       // focused: [readonly] Boolean
+       //              This widget or a widget it contains has focus, or is "active" because
+       //              it was recently clicked.
+       focused: false,
+
+       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");
+       },
+
+       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();
+       },
+
+       ////////////////// DEPRECATED METHODS ///////////////////
+
+       setAttribute: function(/*String*/ attr, /*anything*/ value){
+               // summary:
+               //              Deprecated.  Use set() instead.
+               // tags:
+               //              deprecated
+               dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.", "", "2.0");
+               this.set(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:
+               //              This method is deprecated, use get() or set() directly.
+
+               // Print deprecation warning but only once per calling function
+               if(dojo.config.isDebug){
+                       var alreadyCalledHash = arguments.callee._ach || (arguments.callee._ach = {}),
+                               caller = (arguments.callee.caller || "unknown caller").toString();
+                       if(!alreadyCalledHash[caller]){
+                               dojo.deprecated(this.declaredClass + "::attr() is deprecated. Use get() or set() instead, called from " +
+                               caller, "", "2.0");
+                               alreadyCalledHash[caller] = true;
+                       }
+               }
+
+               var args = arguments.length;
+               if(args >= 2 || typeof name === "object"){ // setter
+                       return this.set.apply(this, arguments);
+               }else{ // getter
+                       return this.get(name);
+               }
+       },
+       
+       ////////////////// ONDIJITCLICK SUPPORT ///////////////////
+
+       // 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.
+               //              Events connected with `this.connect` are disconnected upon
+               //              destruction.
+               // 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 = this.inherited(arguments, [obj, event == "ondijitclick" ? "onclick" : event, method]);
+
+               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(d.indexOf(this.nodesWithKeyClick, obj.nodeName.toLowerCase()) == -1){ // is NOT input or button
+                               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;
+                                                       
+                                                       // Stop event to prevent scrolling on space key in IE.
+                                                       // But don't do this for _HasDropDown because it surpresses the onkeypress
+                                                       // event needed to open the drop down when the user presses the SPACE key.
+                                                       if(!("openDropDown" in this && obj == this._buttonNode)){
+                                                               e.preventDefault();
+                                                       }
+                                               }
+                                       }),
+                                       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 &&   // === breaks greasemonkey
+                                                       !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);
+                                               }
+                                       })
+                               );
+                       }
+               }
+
+               return handles;         // _Widget.Handle
+       },
+
+       ////////////////// MISCELLANEOUS METHODS ///////////////////
+
+       _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
+       },
+
+       onClose: function(){
+               // summary:
+               //              Called when this widget is being displayed as a popup (ex: a Calendar popped
+               //              up from a DateTextBox), and it is hidden.
+               //              This is called from the dijit.popup code, and should not be called directly.
+               //
+               //              Also used as a parameter for children of `dijit.layout.StackContainer` or subclasses.
+               //              Callback if a user tries to close the child.   Child will be closed if this function returns true.
+               // tags:
+               //              extension
+
+               return true;            // Boolean
+       }
 });
-},uninitialize:function(){
-return false;
-},onFocus:function(){
-},onBlur:function(){
-},_onFocus:function(e){
-this.onFocus();
-},_onBlur:function(){
-this.onBlur();
-},_onConnect:function(_20){
-if(_20 in this._deferredConnects){
-var _21=this[this._deferredConnects[_20]||"domNode"];
-this.connect(_21,_20.toLowerCase(),_20);
-delete this._deferredConnects[_20];
-}
-},_setClassAttr:function(_22){
-var _23=this[this.attributeMap["class"]||"domNode"];
-dojo.removeClass(_23,this["class"]);
-this["class"]=_22;
-dojo.addClass(_23,_22);
-},_setStyleAttr:function(_24){
-var _25=this[this.attributeMap.style||"domNode"];
-if(dojo.isObject(_24)){
-dojo.style(_25,_24);
-}else{
-if(_25.style.cssText){
-_25.style.cssText+="; "+_24;
-}else{
-_25.style.cssText=_24;
-}
-}
-this.style=_24;
-},setAttribute:function(_26,_27){
-dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");
-this.set(_26,_27);
-},_attrToDom:function(_28,_29){
-var _2a=this.attributeMap[_28];
-dojo.forEach(dojo.isArray(_2a)?_2a:[_2a],function(_2b){
-var _2c=this[_2b.node||_2b||"domNode"];
-var _2d=_2b.type||"attribute";
-switch(_2d){
-case "attribute":
-if(dojo.isFunction(_29)){
-_29=dojo.hitch(this,_29);
-}
-var _2e=_2b.attribute?_2b.attribute:(/^on[A-Z][a-zA-Z]*$/.test(_28)?_28.toLowerCase():_28);
-dojo.attr(_2c,_2e,_29);
-break;
-case "innerText":
-_2c.innerHTML="";
-_2c.appendChild(dojo.doc.createTextNode(_29));
-break;
-case "innerHTML":
-_2c.innerHTML=_29;
-break;
-case "class":
-dojo.removeClass(_2c,this[_28]);
-dojo.addClass(_2c,_29);
-break;
-}
-},this);
-this[_28]=_29;
-},attr:function(_2f,_30){
-if(dojo.config.isDebug){
-var _31=arguments.callee._ach||(arguments.callee._ach={}),_32=(arguments.callee.caller||"unknown caller").toString();
-if(!_31[_32]){
-dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_32,"","2.0");
-_31[_32]=true;
-}
-}
-var _33=arguments.length;
-if(_33>=2||typeof _2f==="object"){
-return this.set.apply(this,arguments);
-}else{
-return this.get(_2f);
-}
-},get:function(_34){
-var _35=this._getAttrNames(_34);
-return this[_35.g]?this[_35.g]():this[_34];
-},set:function(_36,_37){
-if(typeof _36==="object"){
-for(var x in _36){
-this.set(x,_36[x]);
-}
-return this;
-}
-var _38=this._getAttrNames(_36);
-if(this[_38.s]){
-var _39=this[_38.s].apply(this,Array.prototype.slice.call(arguments,1));
-}else{
-if(_36 in this.attributeMap){
-this._attrToDom(_36,_37);
-}
-var _3a=this[_36];
-this[_36]=_37;
-}
-return _39||this;
-},_attrPairNames:{},_getAttrNames:function(_3b){
-var apn=this._attrPairNames;
-if(apn[_3b]){
-return apn[_3b];
-}
-var uc=_3b.charAt(0).toUpperCase()+_3b.substr(1);
-return (apn[_3b]={n:_3b+"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,_3c,_3d){
-var d=dojo,dc=d._connect,_3e=[];
-if(_3c=="ondijitclick"){
-if(dojo.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){
-var m=d.hitch(this,_3d);
-_3e.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;
-e.preventDefault();
-}
-}),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);
-}
-}));
-}
-_3c="onclick";
-}
-_3e.push(dc(obj,_3c,this,_3d));
-this._connects.push(_3e);
-return _3e;
-},disconnect:function(_3f){
-for(var i=0;i<this._connects.length;i++){
-if(this._connects[i]==_3f){
-dojo.forEach(_3f,dojo.disconnect);
-this._connects.splice(i,1);
-return;
-}
-}
-},subscribe:function(_40,_41){
-var d=dojo,_42=d.subscribe(_40,this,_41);
-this._subscribes.push(_42);
-return _42;
-},unsubscribe:function(_43){
-for(var i=0;i<this._subscribes.length;i++){
-if(this._subscribes[i]==_43){
-dojo.unsubscribe(_43);
-this._subscribes.splice(i,1);
-return;
-}
-}
-},isLeftToRight:function(){
-return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();
-},isFocusable:function(){
-return this.focus&&(dojo.style(this.domNode,"display")!="none");
-},placeAt:function(_44,_45){
-if(_44.declaredClass&&_44.addChild){
-_44.addChild(this,_45);
-}else{
-dojo.place(this.domNode,_44,_45);
-}
-return this;
-},_onShow:function(){
-this.onShow();
-},onShow:function(){
-},onHide:function(){
-},onClose:function(){
-return true;
-}});
+
 })();
+
 }
diff --git a/lib/dijit/_WidgetBase.js b/lib/dijit/_WidgetBase.js
new file mode 100644 (file)
index 0000000..868ce6a
--- /dev/null
@@ -0,0 +1,826 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._WidgetBase"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._WidgetBase"] = true;
+dojo.provide("dijit._WidgetBase");
+dojo.require("dijit._base.manager");
+dojo.require("dojo.Stateful");
+
+
+(function(){
+
+dojo.declare("dijit._WidgetBase", dojo.Stateful, {
+       // summary:
+       //              Future base class for all Dijit widgets.
+       //              _Widget extends this class adding support for various features needed by desktop.
+
+       // 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
+       //              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".  If undefined, widgets renders in page's
+       //              default direction.
+       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: "",
+
+       // baseClass: [protected] String
+       //              Root CSS class of the widget (ex: dijitTextBox), used to construct CSS classes to indicate
+       //              widget state.
+       baseClass: "",
+
+       // 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 set('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:""},
+
+       // _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 = [];
+
+               // mix in 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.
+                       // Also calls custom setters for all attributes with custom setters.
+                       this._applyAttributes();
+
+                       // If srcNodeRef was specified, then swap out original srcNode for this widget's DOM tree.
+                       // For 2.0, move this after postCreate().  postCreate() shouldn't depend on the
+                       // widget being attached to the DOM since it isn't when a widget is created programmatically like
+                       // new MyWidget({}).   See #11635.
+                       var source = this.srcNodeRef;
+                       if(source && source.parentNode && this.domNode !== source){
+                               source.parentNode.replaceChild(this.domNode, source);
+                       }
+               }
+
+               if(this.domNode){
+                       // Note: for 2.0 may want to rename widgetId to dojo._scopeName + "_widgetId",
+                       // assuming that dojo._scopeName even exists in 2.0
+                       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.set(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(this._getSetterAttributes(), function(a){
+                       if(!(a in this.attributeMap)){
+                               condAttrApply(a, this);
+                       }
+               }, this);
+       },
+
+       _getSetterAttributes: function(){
+               // summary:
+               //              Returns list of attributes with custom setters for this widget
+               var ctor = this.constructor;
+               if(!ctor._setterAttrs){
+                       var r = (ctor._setterAttrs = []),
+                               attrs,
+                               proto = ctor.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));
+                               }
+                       }
+               }
+               return ctor._setterAttrs;       // String[]
+       },
+
+       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
+
+               if(!this.domNode){
+                       // Create root node if it wasn't created by _Templated
+                       this.domNode = this.srcNodeRef || dojo.create('div');
+               }
+
+               // baseClass is a single class name or occasionally a space-separated list of names.
+               // Add those classes to the DOMNode.  If RTL mode then also add with Rtl suffix.
+               // TODO: make baseClass custom setter
+               if(this.baseClass){
+                       var classes = this.baseClass.split(" ");
+                       if(!this.isLeftToRight()){
+                               classes = classes.concat( dojo.map(classes, function(name){ return name+"Rtl"; }));
+                       }
+                       dojo.addClass(this.domNode, classes);
+               }
+       },
+
+       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;
+       },
+
+       ////////////////// GET/SET, CUSTOM SETTERS, ETC. ///////////////////
+
+       _setClassAttr: function(/*String*/ value){
+               // summary:
+               //              Custom setter for the CSS "class" attribute
+               // tags:
+               //              protected
+               var mapNode = this[this.attributeMap["class"] || 'domNode'];
+               dojo.replaceClass(mapNode, value, this["class"]);
+               this._set("class", value);
+       },
+
+       _setStyleAttr: function(/*String||Object*/ value){
+               // summary:
+               //              Sets the style attribute 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._set("style", value);
+       },
+
+       _attrToDom: function(/*String*/ attr, /*String*/ value){
+               // summary:
+               //              Reflect a widget attribute (title, tabIndex, duration etc.) to
+               //              the widget DOM, as specified in attributeMap.
+               //              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.replaceClass(mapNode, value, this[attr]);
+                                       break;
+                       }
+               }, this);
+       },
+
+       get: function(name){
+               // summary:
+               //              Get a property from a widget.
+               //      name:
+               //              The property to get.
+               // description:
+               //              Get a named property from a widget. The property may
+               //              potentially be retrieved via a getter method. If no getter is defined, this
+               //              just retrieves the object's property.
+               //              For example, if the widget has a properties "foo"
+               //              and "bar" and a method named "_getFooAttr", calling:
+               //      |       myWidget.get("foo");
+               //              would be equivalent to writing:
+               //      |       widget._getFooAttr();
+               //              and:
+               //      |       myWidget.get("bar");
+               //              would be equivalent to writing:
+               //      |       widget.bar;
+               var names = this._getAttrNames(name);
+               return this[names.g] ? this[names.g]() : this[name];
+       },
+       
+       set: function(name, value){
+               // summary:
+               //              Set a property on a widget
+               //      name:
+               //              The property to set.
+               //      value:
+               //              The value to set in the property.
+               // description:
+               //              Sets named properties on a widget which may potentially be handled by a
+               //              setter in the widget.
+               //              For example, if the widget has a properties "foo"
+               //              and "bar" and a method named "_setFooAttr", calling:
+               //      |       myWidget.set("foo", "Howdy!");
+               //              would be equivalent to writing:
+               //      |       widget._setFooAttr("Howdy!");
+               //              and:
+               //      |       myWidget.set("bar", 3);
+               //              would be equivalent to writing:
+               //      |       widget.bar = 3;
+               //
+               //      set() may also be called with a hash of name/value pairs, ex:
+               //      |       myWidget.set({
+               //      |               foo: "Howdy",
+               //      |               bar: 3
+               //      |       })
+               //      This is equivalent to calling set(foo, "Howdy") and set(bar, 3)
+
+               if(typeof name === "object"){
+                       for(var x in name){
+                               this.set(x, name[x]);
+                       }
+                       return this;
+               }
+               var names = this._getAttrNames(name);
+               if(this[names.s]){
+                       // use the explicit setter
+                       var result = this[names.s].apply(this, Array.prototype.slice.call(arguments, 1));
+               }else{
+                       // if param is specified as DOM node attribute, copy it
+                       if(name in this.attributeMap){
+                               this._attrToDom(name, value);
+                       }
+                       this._set(name, value);
+               }
+               return result || this;
+       },
+       
+       _attrPairNames: {},             // shared between all widgets
+       _getAttrNames: function(name){
+               // summary:
+               //              Helper function for get() and set().
+               //              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"
+               });
+       },
+
+       _set: function(/*String*/ name, /*anything*/ value){
+               // summary:
+               //              Helper function to set new value for specified attribute, and call handlers
+               //              registered with watch() if the value has changed.
+               var oldValue = this[name];
+               this[name] = value;
+               if(this._watchCallbacks && this._created && value !== oldValue){
+                       this._watchCallbacks(name, oldValue, value);
+               }
+       },
+
+       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[]
+       },
+
+       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.
+               //              Events connected with `this.connect` are disconnected upon
+               //              destruction.
+               // 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 handles = [dojo._connect(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.set("label", v);
+               //      |       });
+               var handle = dojo.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:
+               //              Return this widget's explicit or implicit orientation (true for LTR, false for RTL)
+               // tags:
+               //              protected
+               return this.dir ? (this.dir == "ltr") : dojo._isBodyLtr(); //Boolean
+       },
+
+       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;
+       }
+});
+
+})();
+
+}
index ad89055f8df59b04c31065396acd65f459621557..3b1695c8b5f138d30cd6a5eb042ba623ad76867d 100644 (file)
@@ -1,12 +1,12 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._base"]){
-dojo._hasResource["dijit._base"]=true;
+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");
 dojo.require("dijit._base.focus");
 dojo.require("dijit._base.manager");
@@ -17,4 +17,7 @@ dojo.require("dijit._base.sniff");
 dojo.require("dijit._base.typematic");
 dojo.require("dijit._base.wai");
 dojo.require("dijit._base.window");
+
+
+
 }
index 32be06aa776648e82e8fb4b3e85d4339259a9dfc..55c5b682d366e39161cadd53debac7ec11f8a303 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._base.focus"]){
-dojo._hasResource["dijit._base.focus"]=true;
+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");
 dojo.require("dojo.window");
 dojo.require("dijit._base.manager");
-dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){
-return dijit.getBookmark().isCollapsed;
-},getBookmark:function(){
-var bm,rg,tg,_1=dojo.doc.selection,cf=dijit._curFocus;
-if(dojo.global.getSelection){
-_1=dojo.global.getSelection();
-if(_1){
-if(_1.isCollapsed){
-tg=cf?cf.tagName:"";
-if(tg){
-tg=tg.toLowerCase();
-if(tg=="textarea"||(tg=="input"&&(!cf.type||cf.type.toLowerCase()=="text"))){
-_1={start:cf.selectionStart,end:cf.selectionEnd,node:cf,pRange:true};
-return {isCollapsed:(_1.end<=_1.start),mark:_1};
-}
-}
-bm={isCollapsed:true};
-}else{
-rg=_1.getRangeAt(0);
-bm={isCollapsed:false,mark:rg.cloneRange()};
-}
-}
-}else{
-if(_1){
-tg=cf?cf.tagName:"";
-tg=tg.toLowerCase();
-if(cf&&tg&&(tg=="button"||tg=="textarea"||tg=="input")){
-if(_1.type&&_1.type.toLowerCase()=="none"){
-return {isCollapsed:true,mark:null};
-}else{
-rg=_1.createRange();
-return {isCollapsed:rg.text&&rg.text.length?false:true,mark:{range:rg,pRange:true}};
-}
-}
-bm={};
-try{
-rg=_1.createRange();
-bm.isCollapsed=!(_1.type=="Text"?rg.htmlText.length:rg.length);
-}
-catch(e){
-bm.isCollapsed=true;
-return bm;
-}
-if(_1.type.toUpperCase()=="CONTROL"){
-if(rg.length){
-bm.mark=[];
-var i=0,_2=rg.length;
-while(i<_2){
-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(_3){
-var _4=dojo.doc,_5=_3.mark;
-if(_5){
-if(dojo.global.getSelection){
-var _6=dojo.global.getSelection();
-if(_6&&_6.removeAllRanges){
-if(_5.pRange){
-var r=_5;
-var n=r.node;
-n.selectionStart=r.start;
-n.selectionEnd=r.end;
-}else{
-_6.removeAllRanges();
-_6.addRange(_5);
-}
-}else{
-console.warn("No idea how to restore selection for this browser!");
-}
-}else{
-if(_4.selection&&_5){
-var rg;
-if(_5.pRange){
-rg=_5.range;
-}else{
-if(dojo.isArray(_5)){
-rg=_4.body.createControlRange();
-dojo.forEach(_5,function(n){
-rg.addElement(n);
+
+
+// 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};
+                                       if(sel.rangeCount){
+                                               bm.mark = sel.getRangeAt(0).cloneRange();
+                                       }
+                               }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);
+                       
+                       // workaround weird IE bug where the click is on an orphaned node
+                       // (first time clicking a Select/DropDownButton inside a TooltipDialog)
+                       if(dojo.isIE && evt && evt.srcElement && evt.srcElement.parentNode == null){
+                               return;
+                       }
+
+                       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){
+                               targetWindow.document.body.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(){
+                                       targetWindow.document.detachEvent('onmousedown', mousedownListener);
+                                       doc.detachEvent('onactivate', activateListener);
+                                       doc.detachEvent('ondeactivate', deactivateListener);
+                                       doc = null;     // prevent memory leak (apparent circular reference via closure)
+                               };
+                       }else{
+                               doc.body.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.body.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=dojo.window.get(node.ownerDocument).frameElement;
+                               }else{
+                                       // if this node is the root node of a widget, then add widget id to stack,
+                                       // except ignore clicks on disabled widgets (actually focusing a disabled widget still works,
+                                       // to support MenuItem)
+                                       var id = node.getAttribute && node.getAttribute("widgetId"),
+                                               widget = id && dijit.byId(id);
+                                       if(widget && !(by == "mouse" && widget.get("disabled"))){
+                                               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.set("focused", false);
+                               widget._hasBeenBlurred = true;
+                               if(widget._onBlur){
+                                       widget._onBlur(by);
+                               }
+                               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;
+                               widget.set("focused", true);
+                               if(widget._onFocus){
+                                       widget._onFocus(by);
+                               }
+                               dojo.publish("widgetFocus", [widget, by]);
+                       }
+               }
+       }
 });
-}else{
-rg=_4.body.createTextRange();
-rg.moveToBookmark(_5);
-}
-}
-rg.select();
-}
-}
-}
-},getFocus:function(_7,_8){
-var _9=!dijit._curFocus||(_7&&dojo.isDescendant(dijit._curFocus,_7.domNode))?dijit._prevFocus:dijit._curFocus;
-return {node:_9,bookmark:(_9==dijit._curFocus)&&dojo.withGlobal(_8||dojo.global,dijit.getBookmark),openedForWindow:_8};
-},focus:function(_a){
-if(!_a){
-return;
-}
-var _b="node" in _a?_a.node:_a,_c=_a.bookmark,_d=_a.openedForWindow,_e=_c?_c.isCollapsed:false;
-if(_b){
-var _f=(_b.tagName.toLowerCase()=="iframe")?_b.contentWindow:_b;
-if(_f&&_f.focus){
-try{
-_f.focus();
-}
-catch(e){
-}
-}
-dijit._onFocusNode(_b);
-}
-if(_c&&dojo.withGlobal(_d||dojo.global,dijit.isCollapsed)&&!_e){
-if(_d){
-_d.focus();
-}
-try{
-dojo.withGlobal(_d||dojo.global,dijit.moveToBookmark,null,[_c]);
-}
-catch(e2){
-}
-}
-},_activeStack:[],registerIframe:function(_10){
-return dijit.registerWin(_10.contentWindow,_10);
-},unregisterIframe:function(_11){
-dijit.unregisterWin(_11);
-},registerWin:function(_12,_13){
-var _14=function(evt){
-dijit._justMouseDowned=true;
-setTimeout(function(){
-dijit._justMouseDowned=false;
-},0);
-if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){
-return;
-}
-dijit._onTouchNode(_13||evt.target||evt.srcElement,"mouse");
-};
-var doc=dojo.isIE?_12.document.documentElement:_12.document;
-if(doc){
-if(dojo.isIE){
-doc.attachEvent("onmousedown",_14);
-var _15=function(evt){
-if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){
-dijit._onFocusNode(_13||evt.srcElement);
-}else{
-dijit._onTouchNode(_13||evt.srcElement);
-}
-};
-doc.attachEvent("onactivate",_15);
-var _16=function(evt){
-dijit._onBlurNode(_13||evt.srcElement);
-};
-doc.attachEvent("ondeactivate",_16);
-return function(){
-doc.detachEvent("onmousedown",_14);
-doc.detachEvent("onactivate",_15);
-doc.detachEvent("ondeactivate",_16);
-doc=null;
-};
-}else{
-doc.addEventListener("mousedown",_14,true);
-var _17=function(evt){
-dijit._onFocusNode(_13||evt.target);
-};
-doc.addEventListener("focus",_17,true);
-var _18=function(evt){
-dijit._onBlurNode(_13||evt.target);
-};
-doc.addEventListener("blur",_18,true);
-return function(){
-doc.removeEventListener("mousedown",_14,true);
-doc.removeEventListener("focus",_17,true);
-doc.removeEventListener("blur",_18,true);
-doc=null;
-};
-}
-}
-},unregisterWin:function(_19){
-_19&&_19();
-},_onBlurNode:function(_1a){
-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(_1b,by){
-if(dijit._clearActiveWidgetsTimer){
-clearTimeout(dijit._clearActiveWidgetsTimer);
-delete dijit._clearActiveWidgetsTimer;
-}
-var _1c=[];
-try{
-while(_1b){
-var _1d=dojo.attr(_1b,"dijitPopupParent");
-if(_1d){
-_1b=dijit.byId(_1d).domNode;
-}else{
-if(_1b.tagName&&_1b.tagName.toLowerCase()=="body"){
-if(_1b===dojo.body()){
-break;
-}
-_1b=dojo.window.get(_1b.ownerDocument).frameElement;
-}else{
-var id=_1b.getAttribute&&_1b.getAttribute("widgetId"),_1e=id&&dijit.byId(id);
-if(_1e&&!(by=="mouse"&&_1e.get("disabled"))){
-_1c.unshift(id);
-}
-_1b=_1b.parentNode;
-}
-}
-}
-}
-catch(e){
-}
-dijit._setStack(_1c,by);
-},_onFocusNode:function(_1f){
-if(!_1f){
-return;
-}
-if(_1f.nodeType==9){
-return;
-}
-dijit._onTouchNode(_1f);
-if(_1f==dijit._curFocus){
-return;
-}
-if(dijit._curFocus){
-dijit._prevFocus=dijit._curFocus;
-}
-dijit._curFocus=_1f;
-dojo.publish("focusNode",[_1f]);
-},_setStack:function(_20,by){
-var _21=dijit._activeStack;
-dijit._activeStack=_20;
-for(var _22=0;_22<Math.min(_21.length,_20.length);_22++){
-if(_21[_22]!=_20[_22]){
-break;
-}
-}
-var _23;
-for(var i=_21.length-1;i>=_22;i--){
-_23=dijit.byId(_21[i]);
-if(_23){
-_23._focused=false;
-_23._hasBeenBlurred=true;
-if(_23._onBlur){
-_23._onBlur(by);
-}
-dojo.publish("widgetBlur",[_23,by]);
-}
-}
-for(i=_22;i<_20.length;i++){
-_23=dijit.byId(_20[i]);
-if(_23){
-_23._focused=true;
-if(_23._onFocus){
-_23._onFocus(by);
-}
-dojo.publish("widgetFocus",[_23,by]);
-}
-}
-}});
+
+// register top window and all the iframes it contains
 dojo.addOnLoad(function(){
-var _24=dijit.registerWin(window);
-if(dojo.isIE){
-dojo.addOnWindowUnload(function(){
-dijit.unregisterWin(_24);
-_24=null;
-});
-}
+       var handle = dijit.registerWin(window);
+       if(dojo.isIE){
+               dojo.addOnWindowUnload(function(){
+                       dijit.unregisterWin(handle);
+                       handle = null;
+               })
+       }
 });
+
 }
index d8d1cf6d5850b4638ffd2bb4bba0547cc9f6c12a..e5f7456221d1a44020fbebd7ead9cadaf41e7260 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._base.manager"]){
-dojo._hasResource["dijit._base.manager"]=true;
+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,{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;
-}});
-(function(){
-dijit.registry=new dijit.WidgetSet();
-var _10=dijit.registry._hash,_11=dojo.attr,_12=dojo.hasAttr,_13=dojo.style;
-dijit.byId=function(id){
-return typeof id=="string"?_10[id]:id;
-};
-var _14={};
-dijit.getUniqueId=function(_15){
-var id;
-do{
-id=_15+"_"+(_15 in _14?++_14[_15]:_14[_15]=0);
-}while(_10[id]);
-return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;
-};
-dijit.findWidgets=function(_16){
-var _17=[];
-function _18(_19){
-for(var _1a=_19.firstChild;_1a;_1a=_1a.nextSibling){
-if(_1a.nodeType==1){
-var _1b=_1a.getAttribute("widgetId");
-if(_1b){
-_17.push(_10[_1b]);
-}else{
-_18(_1a);
-}
-}
-}
-};
-_18(_16);
-return _17;
-};
-dijit._destroyAll=function(){
-dijit._curFocus=null;
-dijit._prevFocus=null;
-dijit._activeStack=[];
-dojo.forEach(dijit.findWidgets(dojo.body()),function(_1c){
-if(!_1c._destroyed){
-if(_1c.destroyRecursive){
-_1c.destroyRecursive();
-}else{
-if(_1c.destroy){
-_1c.destroy();
-}
-}
-}
-});
-};
-if(dojo.isIE){
-dojo.addOnWindowUnload(function(){
-dijit._destroyAll();
-});
-}
-dijit.byNode=function(_1d){
-return _10[_1d.getAttribute("widgetId")];
-};
-dijit.getEnclosingWidget=function(_1e){
-while(_1e){
-var id=_1e.getAttribute&&_1e.getAttribute("widgetId");
-if(id){
-return _10[id];
-}
-_1e=_1e.parentNode;
-}
-return null;
-};
-var _1f=(dijit._isElementShown=function(_20){
-var s=_13(_20);
-return (s.visibility!="hidden")&&(s.visibility!="collapsed")&&(s.display!="none")&&(_11(_20,"type")!="hidden");
-});
-dijit.hasDefaultTabStop=function(_21){
-switch(_21.nodeName.toLowerCase()){
-case "a":
-return _12(_21,"href");
-case "area":
-case "button":
-case "input":
-case "object":
-case "select":
-case "textarea":
-return true;
-case "iframe":
-if(dojo.isMoz){
-try{
-return _21.contentDocument.designMode=="on";
-}
-catch(err){
-return false;
-}
-}else{
-if(dojo.isWebKit){
-var doc=_21.contentDocument,_22=doc&&doc.body;
-return _22&&_22.contentEditable=="true";
-}else{
-try{
-doc=_21.contentWindow.document;
-_22=doc&&doc.body;
-return _22&&_22.firstChild&&_22.firstChild.contentEditable=="true";
-}
-catch(e){
-return false;
-}
-}
-}
-default:
-return _21.contentEditable=="true";
-}
-};
-var _23=(dijit.isTabNavigable=function(_24){
-if(_11(_24,"disabled")){
-return false;
-}else{
-if(_12(_24,"tabIndex")){
-return _11(_24,"tabIndex")>=0;
-}else{
-return dijit.hasDefaultTabStop(_24);
-}
-}
-});
-dijit._getTabNavigable=function(_25){
-var _26,_27,_28,_29,_2a,_2b;
-var _2c=function(_2d){
-dojo.query("> *",_2d).forEach(function(_2e){
-if((dojo.isIE&&_2e.scopeName!=="HTML")||!_1f(_2e)){
-return;
-}
-if(_23(_2e)){
-var _2f=_11(_2e,"tabIndex");
-if(!_12(_2e,"tabIndex")||_2f==0){
-if(!_26){
-_26=_2e;
-}
-_27=_2e;
-}else{
-if(_2f>0){
-if(!_28||_2f<_29){
-_29=_2f;
-_28=_2e;
-}
-if(!_2a||_2f>=_2b){
-_2b=_2f;
-_2a=_2e;
-}
-}
-}
-}
-if(_2e.nodeName.toUpperCase()!="SELECT"){
-_2c(_2e);
-}
+
+
+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 explicitly 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
+       }
+
 });
-};
-if(_1f(_25)){
-_2c(_25);
-}
-return {first:_26,last:_27,lowest:_28,highest:_2a};
-};
-dijit.getFirstInTabbingOrder=function(_30){
-var _31=dijit._getTabNavigable(dojo.byId(_30));
-return _31.lowest?_31.lowest:_31.first;
-};
-dijit.getLastInTabbingOrder=function(_32){
-var _33=dijit._getTabNavigable(dojo.byId(_32));
-return _33.last?_33.last:_33.highest;
-};
-dijit.defaultDuration=dojo.config["defaultDuration"]||200;
+
+(function(){
+
+       /*=====
+       dijit.registry = {
+               // summary:
+               //              A list of widgets on a page.
+               // description:
+               //              Is an instance of `dijit.WidgetSet`
+       };
+       =====*/
+       dijit.registry = new dijit.WidgetSet();
+
+       var hash = dijit.registry._hash,
+               attr = dojo.attr,
+               hasAttr = dojo.hasAttr,
+               style = dojo.style;
+
+       dijit.byId = function(/*String|dijit._Widget*/ id){
+               // summary:
+               //              Returns a widget by it's id, or if passed a widget, no-op (like dojo.byId())
+               return typeof id == "string" ? hash[id] : id; // dijit._Widget
+       };
+
+       var _widgetTypeCtr = {};
+       dijit.getUniqueId = function(/*String*/widgetType){
+               // summary:
+               //              Generates a unique id for a given widgetType
+       
+               var id;
+               do{
+                       id = widgetType + "_" +
+                               (widgetType in _widgetTypeCtr ?
+                                       ++_widgetTypeCtr[widgetType] : _widgetTypeCtr[widgetType] = 0);
+               }while(hash[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 = hash[widgetId];
+                                               if(widget){     // may be null on page w/multiple dojo's loaded
+                                                       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.byNode = function(/*DOMNode*/ node){
+               // summary:
+               //              Returns the widget corresponding to the given DOMNode
+               return hash[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 hash[id];
+                       }
+                       node = node.parentNode;
+               }
+               return null;
+       };
+
+       var shown = (dijit._isElementShown = function(/*Element*/ elem){
+               var s = style(elem);
+               return (s.visibility != "hidden")
+                       && (s.visibility != "collapsed")
+                       && (s.display != "none")
+                       && (attr(elem, "type") != "hidden");
+       });
+       
+       dijit.hasDefaultTabStop = function(/*Element*/ elem){
+               // summary:
+               //              Tests if element is tab-navigable even without an explicit tabIndex setting
+       
+               // 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 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.
+                               var body;
+                               try{
+                                       // non-IE
+                                       var contentDocument = elem.contentDocument;
+                                       if("designMode" in contentDocument && contentDocument.designMode == "on"){
+                                               return true;
+                                       }
+                                       body = contentDocument.body;
+                               }catch(e1){
+                                       // 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{
+                                               body = elem.contentWindow.document.body;
+                                       }catch(e2){
+                                               return false;
+                                       }
+                               }
+                               return body.contentEditable == 'true' || (body.firstChild && body.firstChild.contentEditable == 'true');
+                       default:
+                               return elem.contentEditable == 'true';
+               }
+       };
+       
+       var isTabNavigable = (dijit.isTabNavigable = function(/*Element*/ elem){
+               // summary:
+               //              Tests if an element is tab-navigable
+       
+               // TODO: convert (and rename method) to return effective tabIndex; will save time in _getTabNavigable()
+               if(attr(elem, "disabled")){
+                       return false;
+               }else if(hasAttr(elem, "tabIndex")){
+                       // Explicit tab index setting
+                       return attr(elem, "tabIndex") >= 0; // boolean
+               }else{
+                       // No explicit tabIndex setting, so depends on node type
+                       return dijit.hasDefaultTabStop(elem);
+               }
+       });
+
+       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, radioSelected = {};
+               function radioName(node) {
+                       // If this element is part of a radio button group, return the name for that group.
+                       return node && node.tagName.toLowerCase() == "input" &&
+                               node.type && node.type.toLowerCase() == "radio" &&
+                               node.name && node.name.toLowerCase();
+               }
+               var walkTree = function(/*DOMNode*/parent){
+                       dojo.query("> *", parent).forEach(function(child){
+                               // Skip hidden elements, and also non-HTML elements (those in custom namespaces) in IE,
+                               // since show() invokes getAttribute("type"), which crash on VML nodes in IE.
+                               if((dojo.isIE && child.scopeName!=="HTML") || !shown(child)){
+                                       return;
+                               }
+
+                               if(isTabNavigable(child)){
+                                       var tabindex = attr(child, "tabIndex");
+                                       if(!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;
+                                               }
+                                       }
+                                       var rn = radioName(child);
+                                       if(dojo.attr(child, "checked") && rn) {
+                                               radioSelected[rn] = child;
+                                       }
+                               }
+                               if(child.nodeName.toUpperCase() != 'SELECT'){
+                                       walkTree(child);
+                               }
+                       });
+               };
+               if(shown(root)){ walkTree(root) }
+               function rs(node) {
+                       // substitute checked radio button for unchecked one, if there is a checked one with the same name.
+                       return radioSelected[radioName(node)] || node;
+               }
+               return { first: rs(first), last: rs(last), lowest: rs(lowest), highest: rs(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: 200
+       });
+       =====*/
+       
+       dijit.defaultDuration = dojo.config["defaultDuration"] || 200;
+
 })();
+
 }
index ddc38fd08907cd5aabfab7232513e143065a9aaf..a098f2fa434bced16bc99003c689feb289384d25 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._base.place"]){
-dojo._hasResource["dijit._base.place"]=true;
+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");
 dojo.require("dojo.window");
 dojo.require("dojo.AdapterRegistry");
-dijit.getViewport=function(){
-return dojo.window.getBox();
-};
-dijit.placeOnScreen=function(_1,_2,_3,_4){
-var _5=dojo.map(_3,function(_6){
-var c={corner:_6,pos:{x:_2.x,y:_2.y}};
-if(_4){
-c.pos.x+=_6.charAt(1)=="L"?_4.x:-_4.x;
-c.pos.y+=_6.charAt(0)=="T"?_4.y:-_4.y;
-}
-return c;
-});
-return dijit._place(_1,_5);
+
+
+dijit.getViewport = function(){
+       // summary:
+       //              Returns the dimensions and scroll position of the viewable area of a browser window
+
+       return dojo.window.getBox();
 };
-dijit._place=function(_7,_8,_9){
-var _a=dojo.window.getBox();
-if(!_7.parentNode||String(_7.parentNode.tagName).toLowerCase()!="body"){
-dojo.body().appendChild(_7);
-}
-var _b=null;
-dojo.some(_8,function(_c){
-var _d=_c.corner;
-var _e=_c.pos;
-if(_9){
-_9(_7,_c.aroundCorner,_d);
+
+/*=====
+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;
 }
-var _f=_7.style;
-var _10=_f.display;
-var _11=_f.visibility;
-_f.visibility="hidden";
-_f.display="";
-var mb=dojo.marginBox(_7);
-_f.display=_10;
-_f.visibility=_11;
-var _12=Math.max(_a.l,_d.charAt(1)=="L"?_e.x:(_e.x-mb.w)),_13=Math.max(_a.t,_d.charAt(0)=="T"?_e.y:(_e.y-mb.h)),_14=Math.min(_a.l+_a.w,_d.charAt(1)=="L"?(_12+mb.w):_e.x),_15=Math.min(_a.t+_a.h,_d.charAt(0)=="T"?(_13+mb.h):_e.y),_16=_14-_12,_17=_15-_13,_18=(mb.w-_16)+(mb.h-_17);
-if(_b==null||_18<_b.overflow){
-_b={corner:_d,aroundCorner:_c.aroundCorner,x:_12,y:_13,w:_16,h:_17,overflow:_18};
+=====*/
+
+
+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);
 }
-return !_18;
-});
-_7.style.left=_b.x+"px";
-_7.style.top=_b.y+"px";
-if(_b.overflow&&_9){
-_9(_7,_b.aroundCorner,_b.corner);
+
+dijit._place = function(/*DomNode*/ node, choices, layoutNode, /*Object*/ aroundNodeCoords){
+       // 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, size)
+       //              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.
+       //              It also passes in the available size for the popup, which is useful for tooltips to
+       //              tell them that their width is limited to a certain amount.   layoutNode() may return a value expressing
+       //              how much the popup had to be modified to fit into the available space.   This is used to determine
+       //              what the best placement is.
+       // aroundNodeCoords: Object
+       //              Size of aroundNode, ex: {w: 200, h: 50}
+
+       // get {x: 10, y: 10, w: 100, h:100} type obj representing position of
+       // viewport over document
+       var view = dojo.window.getBox();
+
+       // 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;
+               var overflow = 0;
+
+               // calculate amount of space available given specified position of node
+               var spaceAvailable = {
+                       w: corner.charAt(1) == 'L' ? (view.l + view.w) - pos.x : pos.x - view.l,
+                       h: corner.charAt(1) == 'T' ? (view.t + view.h) - pos.y : pos.y - view.t
+               };
+
+               // 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 tooltip's size changes based on position, due to triangle)
+               if(layoutNode){
+                       var res = layoutNode(node, choice.aroundCorner, corner, spaceAvailable, aroundNodeCoords);
+                       overflow = typeof res == "undefined" ? 0 : res;
+               }
+
+               // 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,
+                               spaceAvailable: spaceAvailable
+                       };
+               }
+               
+               return !overflow;
+       });
+
+       // In case the best position is not the last one we checked, need to call
+       // layoutNode() again.
+       if(best.overflow && layoutNode){
+               layoutNode(node, best.aroundCorner, best.corner, best.spaceAvailable, aroundNodeCoords);
+       }
+
+       // And then position the node.   Do this last, after the layoutNode() above
+       // has sized the node, due to browser quirks when the viewport is scrolled
+       // (specifically that a Tooltip will shrink to fit as though the window was
+       // scrolled to the left).
+       //
+       // In RTL mode, set style.right rather than style.left so in the common case,
+       // window resizes move the popup along with the aroundNode.
+       var l = dojo._isBodyLtr(),
+               s = node.style;
+       s.top = best.y + "px";
+       s[l ? "left" : "right"] = (l ? best.x : view.w - best.x - best.w) + "px";
+       
+       return best;
 }
-return _b;
-};
-dijit.placeOnScreenAroundNode=function(_19,_1a,_1b,_1c){
-_1a=dojo.byId(_1a);
-var _1d=_1a.style.display;
-_1a.style.display="";
-var _1e=dojo.position(_1a,true);
-_1a.style.display=_1d;
-return dijit._placeOnScreenAroundRect(_19,_1e.x,_1e.y,_1e.w,_1e.h,_1b,_1c);
-};
-dijit.placeOnScreenAroundRectangle=function(_1f,_20,_21,_22){
-return dijit._placeOnScreenAroundRect(_1f,_20.x,_20.y,_20.width,_20.height,_21,_22);
+
+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 aroundNodePos = dojo.position(aroundNode, true);
+
+       // place the node around the calculated rectangle
+       return dijit._placeOnScreenAroundRect(node,
+               aroundNodePos.x, aroundNodePos.y, aroundNodePos.w, aroundNodePos.h,     // rectangle
+               aroundCorners, layoutNode);
 };
-dijit._placeOnScreenAroundRect=function(_23,x,y,_24,_25,_26,_27){
-var _28=[];
-for(var _29 in _26){
-_28.push({aroundCorner:_29,corner:_26[_29],pos:{x:x+(_29.charAt(1)=="L"?0:_24),y:y+(_29.charAt(0)=="T"?0:_25)}});
+
+/*=====
+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;
 }
-return dijit._place(_23,_28,_27);
+=====*/
+
+
+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, {w: width, h: height});
 };
-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(_2a,_2b,_2c,_2d){
-return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);
+
+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.getPopupAroundAlignment=function(_2e,_2f){
-var _30={};
-dojo.forEach(_2e,function(pos){
-switch(pos){
-case "after":
-_30[_2f?"BR":"BL"]=_2f?"BL":"BR";
-break;
-case "before":
-_30[_2f?"BL":"BR"]=_2f?"BR":"BL";
-break;
-case "below":
-_30[_2f?"BL":"BR"]=_2f?"TL":"TR";
-_30[_2f?"BR":"BL"]=_2f?"TR":"TL";
-break;
-case "above":
-default:
-_30[_2f?"TL":"TR"]=_2f?"BL":"BR";
-_30[_2f?"TR":"TL"]=_2f?"BR":"BL";
-break;
-}
-});
-return _30;
+
+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-alt":
+                               leftToRight = !leftToRight;
+                               // fall through
+                       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-alt":
+                               leftToRight = !leftToRight;
+                               // fall through
+                       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;
 };
+
 }
index aed046489a5fc5eceb9331d5c9abd7be0f7e8463..e6fa6a5ed6aa0fd9b4abcccd953d95f576ae1b15 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._base.popup"]){
-dojo._hasResource["dijit._base.popup"]=true;
+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");
 dojo.require("dijit._base.focus");
 dojo.require("dijit._base.place");
 dojo.require("dijit._base.window");
-dijit.popup={_stack:[],_beginZIndex:1000,_idGen:1,moveOffScreen:function(_1){
-var _2=_1.parentNode;
-if(!_2||!dojo.hasClass(_2,"dijitPopup")){
-_2=dojo.create("div",{"class":"dijitPopup",style:{visibility:"hidden",top:"-9999px"}},dojo.body());
-dijit.setWaiRole(_2,"presentation");
-_2.appendChild(_1);
-}
-var s=_1.style;
-s.display="";
-s.visibility="";
-s.position="";
-s.top="0px";
-dojo.style(_2,{visibility:"hidden",top:"-9999px"});
-},getTopPopup:function(){
-var _3=this._stack;
-for(var pi=_3.length-1;pi>0&&_3[pi].parent===_3[pi-1].widget;pi--){
-}
-return _3[pi];
-},open:function(_4){
-var _5=this._stack,_6=_4.popup,_7=_4.orient||((_4.parent?_4.parent.isLeftToRight():dojo._isBodyLtr())?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_8=_4.around,id=(_4.around&&_4.around.id)?(_4.around.id+"_dropdown"):("popup_"+this._idGen++);
-var _9=_6.domNode.parentNode;
-if(!_9||!dojo.hasClass(_9,"dijitPopup")){
-this.moveOffScreen(_6.domNode);
-_9=_6.domNode.parentNode;
-}
-dojo.attr(_9,{id:id,style:{zIndex:this._beginZIndex+_5.length},"class":"dijitPopup "+(_6.baseClass||_6["class"]||"").split(" ")[0]+"Popup",dijitPopupParent:_4.parent?_4.parent.id:""});
-if(dojo.isIE||dojo.isMoz){
-var _a=_9.childNodes[1];
-if(!_a){
-_a=new dijit.BackgroundIframe(_9);
-}
-}
-var _b=_8?dijit.placeOnScreenAroundElement(_9,_8,_7,_6.orient?dojo.hitch(_6,"orient"):null):dijit.placeOnScreen(_9,_4,_7=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],_4.padding);
-_9.style.visibility="visible";
-_6.domNode.style.visibility="visible";
-var _c=[];
-_c.push(dojo.connect(_9,"onkeypress",this,function(_d){
-if(_d.charOrCode==dojo.keys.ESCAPE&&_4.onCancel){
-dojo.stopEvent(_d);
-_4.onCancel();
-}else{
-if(_d.charOrCode===dojo.keys.TAB){
-dojo.stopEvent(_d);
-var _e=this.getTopPopup();
-if(_e&&_e.onCancel){
-_e.onCancel();
-}
-}
-}
-}));
-if(_6.onCancel){
-_c.push(dojo.connect(_6,"onCancel",_4.onCancel));
-}
-_c.push(dojo.connect(_6,_6.onExecute?"onExecute":"onChange",this,function(){
-var _f=this.getTopPopup();
-if(_f&&_f.onExecute){
-_f.onExecute();
-}
-}));
-_5.push({wrapper:_9,iframe:_a,widget:_6,parent:_4.parent,onExecute:_4.onExecute,onCancel:_4.onCancel,onClose:_4.onClose,handlers:_c});
-if(_6.onOpen){
-_6.onOpen(_b);
-}
-return _b;
-},close:function(_10){
-var _11=this._stack;
-while(dojo.some(_11,function(_12){
-return _12.widget==_10;
-})){
-var top=_11.pop(),_13=top.wrapper,_14=top.iframe,_15=top.widget,_16=top.onClose;
-if(_15.onClose){
-_15.onClose();
-}
-dojo.forEach(top.handlers,dojo.disconnect);
-if(_15&&_15.domNode){
-this.moveOffScreen(_15.domNode);
-}else{
-dojo.destroy(_13);
-}
-if(_16){
-_16();
-}
-}
-}};
-dijit._frames=new function(){
-var _17=[];
-this.pop=function(){
-var _18;
-if(_17.length){
-_18=_17.pop();
-_18.style.display="";
-}else{
-if(dojo.isIE){
-var _19=dojo.config["dojoBlankHtmlUrl"]||(dojo.moduleUrl("dojo","resources/blank.html")+"")||"javascript:\"\"";
-var _1a="<iframe src='"+_19+"'"+" style='position: absolute; left: 0px; top: 0px;"+"z-index: -1; filter:Alpha(Opacity=\"0\");'>";
-_18=dojo.doc.createElement(_1a);
-}else{
-_18=dojo.create("iframe");
-_18.src="javascript:\"\"";
-_18.className="dijitBackgroundIframe";
-dojo.style(_18,"opacity",0.1);
-}
-_18.tabIndex=-1;
-dijit.setWaiRole(_18,"presentation");
+
+
+/*=====
+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.  (Specify 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;
 }
-return _18;
-};
-this.push=function(_1b){
-_1b.style.display="none";
-_17.push(_1b);
+=====*/
+
+dijit.popup = {
+       // summary:
+       //              This singleton is used to show/hide widgets as popups.
+
+       // _stack: dijit._Widget[]
+       //              Stack of currently popped up widgets.
+       //              (someone opened _stack[0], and then it opened _stack[1], etc.)
+       _stack: [],
+       
+       // _beginZIndex: Number
+       //              Z-index of the first popup.   (If first popup opens other
+       //              popups they get a higher z-index.)
+       _beginZIndex: 1000,
+
+       _idGen: 1,
+
+       _createWrapper: function(/*Widget || DomNode*/ widget){
+               // summary:
+               //              Initialization for widgets that will be used as popups.
+               //              Puts widget inside a wrapper DIV (if not already in one),
+               //              and returns pointer to that wrapper DIV.
+
+               var wrapper = widget.declaredClass ? widget._popupWrapper : (widget.parentNode && dojo.hasClass(widget.parentNode, "dijitPopup")),
+                       node = widget.domNode || widget;
+
+               if(!wrapper){
+                       // Create wrapper <div> for when this widget [in the future] will be used as a popup.
+                       // This is done early because of IE bugs where creating/moving DOM nodes causes focus
+                       // to go wonky, see tests/robot/Toolbar.html to reproduce
+                       wrapper = dojo.create("div",{
+                               "class":"dijitPopup",
+                               style:{ display: "none"},
+                               role: "presentation"
+                       }, dojo.body());
+                       wrapper.appendChild(node);
+
+                       var s = node.style;
+                       s.display = "";
+                       s.visibility = "";
+                       s.position = "";
+                       s.top = "0px";
+
+                       if(widget.declaredClass){               // TODO: in 2.0 change signature to always take widget, then remove if()
+                               widget._popupWrapper = wrapper;
+                               dojo.connect(widget, "destroy", function(){
+                                       dojo.destroy(wrapper);
+                                       delete widget._popupWrapper;
+                               });
+                       }
+               }
+               
+               return wrapper;
+       },
+
+       moveOffScreen: function(/*Widget || DomNode*/ widget){
+               // summary:
+               //              Moves the popup widget off-screen.
+               //              Do not use this method to hide popups when not in use, because
+               //              that will create an accessibility issue: the offscreen popup is
+               //              still in the tabbing order.
+
+               // Create wrapper if not already there
+               var wrapper = this._createWrapper(widget);
+
+               dojo.style(wrapper, {
+                       visibility: "hidden",
+                       top: "-9999px",         // prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111)
+                       display: ""
+               });
+       },
+
+       hide: function(/*dijit._Widget*/ widget){
+               // summary:
+               //              Hide this popup widget (until it is ready to be shown).
+               //              Initialization for widgets that will be used as popups
+               //
+               //              Also puts widget inside a wrapper DIV (if not already in one)
+               //
+               //              If popup widget needs to layout it should
+               //              do so when it is made visible, and popup._onShow() is called.
+
+               // Create wrapper if not already there
+               var wrapper = this._createWrapper(widget);
+
+               dojo.style(wrapper, "display", "none");
+       },
+               
+       getTopPopup: function(){
+               // summary:
+               //              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 stack = this._stack;
+               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];
+       },
+
+       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 stack = this._stack,
+                       widget = args.popup,
+                       orient = args.orient || (
+                               (args.parent ? args.parent.isLeftToRight() : 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_"+this._idGen++);
+
+               // If we are opening a new popup that isn't a child of a currently opened popup, then
+               // close currently opened popup(s).   This should happen automatically when the old popups
+               // gets the _onBlur() event, except that the _onBlur() event isn't reliable on IE, see [22198].
+               while(stack.length && (!args.parent || !dojo.isDescendant(args.parent.domNode, stack[stack.length-1].widget.domNode))){
+                       dijit.popup.close(stack[stack.length-1].widget);
+               }
+
+               // Get pointer to popup wrapper, and create wrapper if it doesn't exist
+               var wrapper = this._createWrapper(widget);
+
+
+               dojo.attr(wrapper, {
+                       id: id,
+                       style: {
+                               zIndex: this._beginZIndex + stack.length
+                       },
+                       "class": "dijitPopup " + (widget.baseClass || widget["class"] || "").split(" ")[0] +"Popup",
+                       dijitPopupParent: args.parent ? args.parent.id : ""
+               });
+
+               if(dojo.isIE || dojo.isMoz){
+                       if(!widget.bgIframe){
+                               // setting widget.bgIframe triggers cleanup in _Widget.destroy()
+                               widget.bgIframe = new dijit.BackgroundIframe(wrapper);
+                       }
+               }
+
+               // position the wrapper node and make it visible
+               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.display = "";
+               wrapper.style.visibility = "visible";
+               widget.domNode.style.visibility = "visible";    // counteract effects from _HasDropDown
+
+               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 = this.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", this, function(){
+                       var topPopup = this.getTopPopup();
+                       if(topPopup && topPopup.onExecute){
+                               topPopup.onExecute();
+                       }
+               }));
+
+               stack.push({
+                       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;
+       },
+
+       close: function(/*dijit._Widget?*/ popup){
+               // summary:
+               //              Close specified popup and any popups that it parented.
+               //              If no popup is specified, closes all popups.
+
+               var stack = this._stack;
+
+               // 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((popup && dojo.some(stack, function(elem){return elem.widget == popup;})) ||
+                       (!popup && stack.length)){
+                       var top = stack.pop(),
+                               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);
+
+                       // Hide the widget and it's wrapper unless it has already been destroyed in above onClose() etc.
+                       if(widget && widget.domNode){
+                               this.hide(widget);
+                       }
+                        
+                       if(onClose){
+                               onClose();
+                       }
+               }
+       }
 };
+
+// TODO: remove dijit._frames, it isn't being used much, since popups never release their
+// iframes (see [22236])
+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 < 9){
+                               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 didn't work.
+                       dijit.setWaiRole(iframe,"presentation");
+               }
+               return iframe;
+       };
+
+       this.push = function(iframe){
+               iframe.style.display="none";
+               queue.push(iframe);
+       }
 }();
-dijit.BackgroundIframe=function(_1c){
-if(!_1c.id){
-throw new Error("no id");
-}
-if(dojo.isIE||dojo.isMoz){
-var _1d=dijit._frames.pop();
-_1c.appendChild(_1d);
-if(dojo.isIE<7){
-this.resize(_1c);
-this._conn=dojo.connect(_1c,"onresize",this,function(){
-this.resize(_1c);
-});
-}else{
-dojo.style(_1d,{width:"100%",height:"100%"});
-}
-this.iframe=_1d;
-}
+
+
+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 = (this.iframe = dijit._frames.pop());
+               node.appendChild(iframe);
+               if(dojo.isIE<7 || dojo.isQuirks){
+                       this.resize(node);
+                       this._conn = dojo.connect(node, 'onresize', this, function(){
+                               this.resize(node);
+                       });
+               }else{
+                       dojo.style(iframe, {
+                               width: '100%',
+                               height: '100%'
+                       });
+               }
+       }
 };
-dojo.extend(dijit.BackgroundIframe,{resize:function(_1e){
-if(this.iframe&&dojo.isIE<7){
-dojo.style(this.iframe,{width:_1e.offsetWidth+"px",height:_1e.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;
-}
-}});
+
+dojo.extend(dijit.BackgroundIframe, {
+       resize: function(node){
+               // summary:
+               //              Resize the iframe so it's the same size as node.
+               //              Needed on IE6 and IE/quirks because height:100% doesn't work right.
+               if(this.iframe){
+                       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;
+               }
+       }
+});
+
 }
index 623cea3922877e13bdda10f1c0303274ee62a74e..1010a4fcadbac33b21f559f27dab73a2172e0c2e 100644 (file)
@@ -1,15 +1,22 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._base.scroll"]){
-dojo._hasResource["dijit._base.scroll"]=true;
+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");
 dojo.require("dojo.window");
-dijit.scrollIntoView=function(_1,_2){
-dojo.window.scrollIntoView(_1,_2);
+
+
+dijit.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
+       // summary:
+       //              Scroll the passed node into view, if it is not already.
+       //              Deprecated, use `dojo.window.scrollIntoView` instead.
+       
+       dojo.window.scrollIntoView(node, pos);
 };
+
 }
index bf5386cfb42a530a4e1f2019e67027e3c9577296..c7c6b94d88fa402ac0ecb3f2dd059a5e885fc405 100644 (file)
@@ -1,12 +1,21 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._base.sniff"]){
-dojo._hasResource["dijit._base.sniff"]=true;
+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;
 dojo.provide("dijit._base.sniff");
 dojo.require("dojo.uacss");
+
+
+// summary:
+//             Applies pre-set CSS classes to the top-level HTML node, see
+//             `dojo.uacss` for details.
+//
+//             Simply doing a require on this module will
+//             establish this CSS.  Modified version of Morris' CSS hack.
+
 }
index 460e9db1a6928a7419ea0df64b96dc6bddf05eda..f424b71d5f44f50f37bde72d8acd98f7089879d7 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._base.typematic"]){
-dojo._hasResource["dijit._base.typematic"]=true;
+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={_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)),this._minDelay);
-this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);
-},trigger:function(_1,_2,_3,_4,_5,_6,_7,_8){
-if(_5!=this._obj){
-this.stop();
-this._initialDelay=_7||500;
-this._subsequentDelay=_6||0.9;
-this._minDelay=_8||10;
-this._obj=_5;
-this._evt=_1;
-this._node=_3;
-this._currentTimeout=-1;
-this._count=-1;
-this._callback=dojo.hitch(_2,_4);
-this._fireEventAndReload();
-this._evt=dojo.mixin({faux:true},_1);
-}
-},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(_9,_a,_b,_c,_d,_e,_f){
-if(_a.keyCode){
-_a.charOrCode=_a.keyCode;
-dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");
-}else{
-if(_a.charCode){
-_a.charOrCode=String.fromCharCode(_a.charCode);
-dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");
-}
-}
-return [dojo.connect(_9,"onkeypress",this,function(evt){
-if(evt.charOrCode==_a.charOrCode&&(_a.ctrlKey===undefined||_a.ctrlKey==evt.ctrlKey)&&(_a.altKey===undefined||_a.altKey==evt.altKey)&&(_a.metaKey===undefined||_a.metaKey==(evt.metaKey||false))&&(_a.shiftKey===undefined||_a.shiftKey==evt.shiftKey)){
-dojo.stopEvent(evt);
-dijit.typematic.trigger(evt,_b,_9,_c,_a,_d,_e,_f);
-}else{
-if(dijit.typematic._obj==_a){
-dijit.typematic.stop();
-}
-}
-}),dojo.connect(_9,"onkeyup",this,function(evt){
-if(dijit.typematic._obj==_a){
-dijit.typematic.stop();
-}
-})];
-},addMouseListener:function(_10,_11,_12,_13,_14,_15){
-var dc=dojo.connect;
-return [dc(_10,"mousedown",this,function(evt){
-dojo.stopEvent(evt);
-dijit.typematic.trigger(evt,_11,_10,_12,_10,_13,_14,_15);
-}),dc(_10,"mouseup",this,function(evt){
-dojo.stopEvent(evt);
-dijit.typematic.stop();
-}),dc(_10,"mouseout",this,function(evt){
-dojo.stopEvent(evt);
-dijit.typematic.stop();
-}),dc(_10,"mousemove",this,function(evt){
-evt.preventDefault();
-}),dc(_10,"dblclick",this,function(evt){
-dojo.stopEvent(evt);
-if(dojo.isIE){
-dijit.typematic.trigger(evt,_11,_10,_12,_10,_13,_14,_15);
-setTimeout(dojo.hitch(this,dijit.typematic.stop),50);
-}
-})];
-},addListener:function(_16,_17,_18,_19,_1a,_1b,_1c,_1d){
-return this.addKeyListener(_17,_18,_19,_1a,_1b,_1c,_1d).concat(this.addMouseListener(_16,_19,_1a,_1b,_1c,_1d));
-}};
+
+
+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, timer is at most minDelay (default 10ms) 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)),
+                       this._minDelay);
+               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, /*Number?*/ minDelay){
+               // 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 (optional):
+               //              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 (optional):
+               //              the number of milliseconds until the 2nd event occurs, default=500ms
+               // minDelay (optional):
+               //              the maximum delay in milliseconds for event to fire, default=10ms
+               if(obj != this._obj){
+                       this.stop();
+                       this._initialDelay = initialDelay || 500;
+                       this._subsequentDelay = subsequentDelay || 0.90;
+                       this._minDelay = minDelay || 10;
+                       this._obj = obj;
+                       this._evt = evt;
+                       this._node = node;
+                       this._currentTimeout = -1;
+                       this._count = -1;
+                       this._callback = dojo.hitch(_this, callback);
+                       this._fireEventAndReload();
+                       this._evt = dojo.mixin({faux: true}, evt);
+               }
+       },
+
+       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, /*Number?*/ minDelay){
+               // 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 callback 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(evt, _this, node, callback, keyObject, subsequentDelay, initialDelay, minDelay);
+                               }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, /*Number?*/ minDelay){
+               // 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, minDelay);
+                       }),
+                       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){
+                               evt.preventDefault();
+                       }),
+                       dc(node, "dblclick", this, function(evt){
+                               dojo.stopEvent(evt);
+                               if(dojo.isIE){
+                                       dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay, minDelay);
+                                       setTimeout(dojo.hitch(this, dijit.typematic.stop), 50);
+                               }
+                       })
+               ];
+       },
+
+       addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+               // 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, minDelay).concat(
+                       this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay, minDelay));
+       }
+};
+
 }
index de67ad17a5dc123426707bc6fd647e6ccf804caf..58c9cdb8f96f90b7686d4fd778b0a81029314d2c 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._base.wai"]){
-dojo._hasResource["dijit._base.wai"]=true;
+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(){
-var _1=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(_1);
-if(cs){
-var _2=cs.backgroundImage;
-var _3=(cs.borderTopColor==cs.borderRightColor)||(_2!=null&&(_2=="none"||_2=="url(invalid-url:)"));
-dojo[_3?"addClass":"removeClass"](dojo.body(),"dijit_a11y");
-if(dojo.isIE){
-_1.outerHTML="";
-}else{
-dojo.body().removeChild(_1);
-}
-}
-}};
-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(_4,_5){
-var _6=this.getWaiRole(_4);
-return _5?(_6.indexOf(_5)>-1):(_6.length>0);
-},getWaiRole:function(_7){
-return dojo.trim((dojo.attr(_7,"role")||"").replace(this._XhtmlRoles,"").replace("wairole:",""));
-},setWaiRole:function(_8,_9){
-var _a=dojo.attr(_8,"role")||"";
-if(!this._XhtmlRoles.test(_a)){
-dojo.attr(_8,"role",_9);
-}else{
-if((" "+_a+" ").indexOf(" "+_9+" ")<0){
-var _b=dojo.trim(_a.replace(this._XhtmlRoles,""));
-var _c=dojo.trim(_a.replace(_b,""));
-dojo.attr(_8,"role",_c+(_c?" ":"")+_9);
-}
-}
-},removeWaiRole:function(_d,_e){
-var _f=dojo.attr(_d,"role");
-if(!_f){
-return;
-}
-if(_e){
-var t=dojo.trim((" "+_f+" ").replace(" "+_e+" "," "));
-dojo.attr(_d,"role",t);
-}else{
-_d.removeAttribute("role");
+
+
+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);
 }
-},hasWaiState:function(_10,_11){
-return _10.hasAttribute?_10.hasAttribute("aria-"+_11):!!_10.getAttribute("aria-"+_11);
-},getWaiState:function(_12,_13){
-return _12.getAttribute("aria-"+_13)||"";
-},setWaiState:function(_14,_15,_16){
-_14.setAttribute("aria-"+_15,_16);
-},removeWaiState:function(_17,_18){
-_17.removeAttribute("aria-"+_18);
-}});
+
+dojo.mixin(dijit, {
+       hasWaiRole: function(/*Element*/ elem, /*String?*/ role){
+               // summary:
+               //              Determines if an element has a particular role.
+               // returns:
+               //              True if elem has the specific role attribute and false if not.
+               //              For backwards compatibility if role parameter not provided,
+               //              returns true if has a role
+               var waiRole = this.getWaiRole(elem);
+               return role ? (waiRole.indexOf(role) > -1) : (waiRole.length > 0);
+       },
+
+       getWaiRole: function(/*Element*/ elem){
+               // summary:
+               //              Gets the role for an element (which should be a wai role).
+               // returns:
+               //              The role of elem or an empty string if elem
+               //              does not have a role.
+                return dojo.trim((dojo.attr(elem, "role") || "").replace("wairole:",""));
+       },
+
+       setWaiRole: function(/*Element*/ elem, /*String*/ role){
+               // summary:
+               //              Sets the role on an element.
+               // description:
+               //              Replace existing role attribute with new role.
+
+                       dojo.attr(elem, "role", role);
+       },
+
+       removeWaiRole: function(/*Element*/ elem, /*String*/ role){
+               // summary:
+               //              Removes the specified 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);
+       }
+});
+
 }
index 57a691436f06352e3f529a036c7e5911aaf27619..713455b90dcfde4a4d3abb14520b3b86764257c6 100644 (file)
@@ -1,15 +1,18 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._base.window"]){
-dojo._hasResource["dijit._base.window"]=true;
+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");
 dojo.require("dojo.window");
-dijit.getDocumentWindow=function(_1){
-return dojo.window.get(_1);
+
+
+dijit.getDocumentWindow = function(doc){
+       return dojo.window.get(doc);
 };
+
 }
index 696715986b6f863686cd93cd56304c48dbb0b1d3..978371557f6685f8e3ad60ff839436e960b5def9 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.RichText"]){
-dojo._hasResource["dijit._editor.RichText"]=true;
+if(!dojo._hasResource["dijit._editor.RichText"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.RichText"] = true;
 dojo.provide("dijit._editor.RichText");
 dojo.require("dijit._Widget");
 dojo.require("dijit._CssStateMixin");
 dojo.require("dijit._editor.selection");
 dojo.require("dijit._editor.range");
 dojo.require("dijit._editor.html");
-if(!dojo.config["useXDomain"]||dojo.config["allowXdRichTextSave"]){
-if(dojo._postLoad){
-(function(){
-var _1=dojo.doc.createElement("textarea");
-_1.id=dijit._scopeName+"._editor.RichText.savedContent";
-dojo.style(_1,{display:"none",position:"absolute",top:"-100px",height:"3px",width:"3px"});
-dojo.body().appendChild(_1);
-})();
-}else{
-try{
-dojo.doc.write("<textarea id=\""+dijit._scopeName+"._editor.RichText.savedContent\" "+"style=\"display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;\"></textarea>");
-}
-catch(e){
-}
-}
-}
-dojo.declare("dijit._editor.RichText",[dijit._Widget,dijit._CssStateMixin],{constructor:function(_2){
-this.contentPreFilters=[];
-this.contentPostFilters=[];
-this.contentDomPreFilters=[];
-this.contentDomPostFilters=[];
-this.editingAreaStyleSheets=[];
-this.events=[].concat(this.events);
-this._keyHandlers={};
-this.contentPreFilters.push(dojo.hitch(this,"_preFixUrlAttributes"));
-if(dojo.isMoz){
-this.contentPreFilters.push(this._normalizeFontStyle);
-this.contentPostFilters.push(this._removeMozBogus);
-}
-if(dojo.isWebKit){
-this.contentPreFilters.push(this._removeWebkitBogus);
-this.contentPostFilters.push(this._removeWebkitBogus);
-}
-if(dojo.isIE){
-this.contentPostFilters.push(this._normalizeFontStyle);
-}
-if(_2&&dojo.isString(_2.value)){
-this.value=_2.value;
-}
-this.onLoadDeferred=new dojo.Deferred();
-},baseClass:"dijitEditor",inheritWidth:false,focusOnLoad:false,name:"",styleSheets:"",_content:"",height:"300px",minHeight:"1em",isClosed:true,isLoaded:false,_SEPARATOR:"@@**%%__RICHTEXTBOUNDRY__%%**@@",onLoadDeferred:null,isTabIndent:false,disableSpellCheck:false,postCreate:function(){
-if("textarea"==this.domNode.tagName.toLowerCase()){
-console.warn("RichText should not be used with the TEXTAREA tag.  See dijit._editor.RichText docs.");
-}
-this.inherited(arguments);
-dojo.publish(dijit._scopeName+"._editor.RichText::init",[this]);
-this.open();
-this.setupDefaultShortcuts();
-},setupDefaultShortcuts:function(){
-var _3=dojo.hitch(this,function(_4,_5){
-return function(){
-return !this.execCommand(_4,_5);
-};
-});
-var _6={b:_3("bold"),i:_3("italic"),u:_3("underline"),a:_3("selectall"),s:function(){
-this.save(true);
-},m:function(){
-this.isTabIndent=!this.isTabIndent;
-},"1":_3("formatblock","h1"),"2":_3("formatblock","h2"),"3":_3("formatblock","h3"),"4":_3("formatblock","h4"),"\\":_3("insertunorderedlist")};
-if(!dojo.isIE){
-_6.Z=_3("redo");
-}
-for(var _7 in _6){
-this.addKeyHandler(_7,true,false,_6[_7]);
-}
-},events:["onKeyPress","onKeyDown","onKeyUp","onClick"],captureEvents:[],_editorCommandsLocalized:false,_localizeEditorCommands:function(){
-if(this._editorCommandsLocalized){
-return;
-}
-this._editorCommandsLocalized=true;
-var _8=["div","p","pre","h1","h2","h3","h4","h5","h6","ol","ul","address"];
-var _9="",_a,i=0;
-while((_a=_8[i++])){
-if(_a.charAt(1)!="l"){
-_9+="<"+_a+"><span>content</span></"+_a+"><br/>";
-}else{
-_9+="<"+_a+"><li>content</li></"+_a+"><br/>";
-}
-}
-var _b=dojo.doc.createElement("div");
-dojo.style(_b,{position:"absolute",top:"-2000px"});
-dojo.doc.body.appendChild(_b);
-_b.innerHTML=_9;
-var _c=_b.firstChild;
-while(_c){
-dijit._editor.selection.selectElement(_c.firstChild);
-dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[_c.firstChild]);
-var _d=_c.tagName.toLowerCase();
-this._local2NativeFormatNames[_d]=document.queryCommandValue("formatblock");
-this._native2LocalFormatNames[this._local2NativeFormatNames[_d]]=_d;
-_c=_c.nextSibling.nextSibling;
-}
-dojo.body().removeChild(_b);
-},open:function(_e){
-if(!this.onLoadDeferred||this.onLoadDeferred.fired>=0){
-this.onLoadDeferred=new dojo.Deferred();
-}
-if(!this.isClosed){
-this.close();
-}
-dojo.publish(dijit._scopeName+"._editor.RichText::open",[this]);
-this._content="";
-if(arguments.length==1&&_e.nodeName){
-this.domNode=_e;
-}
-var dn=this.domNode;
-var _f;
-if(dojo.isString(this.value)){
-_f=this.value;
-delete this.value;
-dn.innerHTML="";
-}else{
-if(dn.nodeName&&dn.nodeName.toLowerCase()=="textarea"){
-var ta=(this.textarea=dn);
-this.name=ta.name;
-_f=ta.value;
-dn=this.domNode=dojo.doc.createElement("div");
-dn.setAttribute("widgetId",this.id);
-ta.removeAttribute("widgetId");
-dn.cssText=ta.cssText;
-dn.className+=" "+ta.className;
-dojo.place(dn,ta,"before");
-var _10=dojo.hitch(this,function(){
-dojo.style(ta,{display:"block",position:"absolute",top:"-1000px"});
-if(dojo.isIE){
-var s=ta.style;
-this.__overflow=s.overflow;
-s.overflow="hidden";
-}
-});
-if(dojo.isIE){
-setTimeout(_10,10);
-}else{
-_10();
-}
-if(ta.form){
-dojo.connect(ta.form,"onsubmit",this,function(){
-ta.value=this.getValue();
-});
-}
-}else{
-_f=dijit._editor.getChildrenHtml(dn);
-dn.innerHTML="";
-}
-}
-var _11=dojo.contentBox(dn);
-this._oldHeight=_11.h;
-this._oldWidth=_11.w;
-this.savedContent=_f;
-if(dn.nodeName&&dn.nodeName=="LI"){
-dn.innerHTML=" <br>";
-}
-this.header=dn.ownerDocument.createElement("div");
-dn.appendChild(this.header);
-this.editingArea=dn.ownerDocument.createElement("div");
-dn.appendChild(this.editingArea);
-this.footer=dn.ownerDocument.createElement("div");
-dn.appendChild(this.footer);
-if(this.name!==""&&(!dojo.config["useXDomain"]||dojo.config["allowXdRichTextSave"])){
-var _12=dojo.byId(dijit._scopeName+"._editor.RichText.savedContent");
-if(_12.value!==""){
-var _13=_12.value.split(this._SEPARATOR),i=0,dat;
-while((dat=_13[i++])){
-var _14=dat.split(":");
-if(_14[0]==this.name){
-_f=_14[1];
-_13.splice(i,1);
-break;
-}
-}
-}
-dojo.addOnUnload(dojo.hitch(this,"_saveContent"));
-}
-this.isClosed=false;
-var ifr=(this.editorObject=this.iframe=dojo.doc.createElement("iframe"));
-ifr.id=this.id+"_iframe";
-this._iframeSrc=this._getIframeDocTxt();
-ifr.style.border="none";
-ifr.style.width="100%";
-if(this._layoutMode){
-ifr.style.height="100%";
-}else{
-if(dojo.isIE>=7){
-if(this.height){
-ifr.style.height=this.height;
-}
-if(this.minHeight){
-ifr.style.minHeight=this.minHeight;
-}
-}else{
-ifr.style.height=this.height?this.height:this.minHeight;
-}
-}
-ifr.frameBorder=0;
-ifr._loadFunc=dojo.hitch(this,function(win){
-this.window=win;
-this.document=this.window.document;
-if(dojo.isIE){
-this._localizeEditorCommands();
-}
-this.onLoad(_f);
-});
-var s="javascript:parent."+dijit._scopeName+".byId(\""+this.id+"\")._iframeSrc";
-ifr.setAttribute("src",s);
-this.editingArea.appendChild(ifr);
-if(dn.nodeName=="LI"){
-dn.lastChild.style.marginTop="-1.2em";
-}
-dojo.addClass(this.domNode,this.baseClass);
-},_local2NativeFormatNames:{},_native2LocalFormatNames:{},_getIframeDocTxt:function(){
-var _15=dojo.getComputedStyle(this.domNode);
-var _16="";
-var _17=true;
-if(dojo.isIE||(!this.height&&!dojo.isMoz)){
-_16="<div id='dijitEditorBody'></div>";
-_17=false;
-}else{
-if(dojo.isMoz){
-this._cursorToStart=true;
-_16="&nbsp;";
-}
-}
-var _18=[_15.fontWeight,_15.fontSize,_15.fontFamily].join(" ");
-var _19=_15.lineHeight;
-if(_19.indexOf("px")>=0){
-_19=parseFloat(_19)/parseFloat(_15.fontSize);
-}else{
-if(_19.indexOf("em")>=0){
-_19=parseFloat(_19);
-}else{
-_19="normal";
-}
-}
-var _1a="";
-var _1b=this;
-this.style.replace(/(^|;)\s*(line-|font-?)[^;]+/ig,function(_1c){
-_1c=_1c.replace(/^;/ig,"")+";";
-var s=_1c.split(":")[0];
-if(s){
-s=dojo.trim(s);
-s=s.toLowerCase();
-var i;
-var sC="";
-for(i=0;i<s.length;i++){
-var c=s.charAt(i);
-switch(c){
-case "-":
-i++;
-c=s.charAt(i).toUpperCase();
-default:
-sC+=c;
-}
-}
-dojo.style(_1b.domNode,sC,"");
-}
-_1a+=_1c+";";
-});
-var _1d=dojo.query("label[for=\""+this.id+"\"]");
-return [this.isLeftToRight()?"<html>\n<head>\n":"<html dir='rtl'>\n<head>\n",(dojo.isMoz&&_1d.length?"<title>"+_1d[0].innerHTML+"</title>\n":""),"<meta http-equiv='Content-Type' content='text/html'>\n","<style>\n","\tbody,html {\n","\t\tbackground:transparent;\n","\t\tpadding: 1px 0 0 0;\n","\t\tmargin: -1px 0 0 0;\n",((dojo.isWebKit)?"\t\twidth: 100%;\n":""),((dojo.isWebKit)?"\t\theight: 100%;\n":""),"\t}\n","\tbody{\n","\t\ttop:0px;\n","\t\tleft:0px;\n","\t\tright:0px;\n","\t\tfont:",_18,";\n",((this.height||dojo.isOpera)?"":"\t\tposition: fixed;\n"),"\t\tmin-height:",this.minHeight,";\n","\t\tline-height:",_19,";\n","\t}\n","\tp{ margin: 1em 0; }\n",(!_17&&!this.height?"\tbody,html {overflow-y: hidden;}\n":""),"\t#dijitEditorBody{overflow-x: auto; overflow-y:"+(this.height?"auto;":"hidden;")+"}\n","\tli > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; }\n","\tli{ min-height:1.2em; }\n","</style>\n",this._applyEditingAreaStyleSheets(),"\n","</head>\n<body ",(_17?"id='dijitEditorBody' ":""),"onload='frameElement._loadFunc(window,document)' style='"+_1a+"'>",_16,"</body>\n</html>"].join("");
-},_applyEditingAreaStyleSheets:function(){
-var _1e=[];
-if(this.styleSheets){
-_1e=this.styleSheets.split(";");
-this.styleSheets="";
-}
-_1e=_1e.concat(this.editingAreaStyleSheets);
-this.editingAreaStyleSheets=[];
-var _1f="",i=0,url;
-while((url=_1e[i++])){
-var _20=(new dojo._Url(dojo.global.location,url)).toString();
-this.editingAreaStyleSheets.push(_20);
-_1f+="<link rel=\"stylesheet\" type=\"text/css\" href=\""+_20+"\"/>";
-}
-return _1f;
-},addStyleSheet:function(uri){
-var url=uri.toString();
-if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){
-url=(new dojo._Url(dojo.global.location,url)).toString();
-}
-if(dojo.indexOf(this.editingAreaStyleSheets,url)>-1){
-return;
-}
-this.editingAreaStyleSheets.push(url);
-this.onLoadDeferred.addCallback(dojo.hitch(function(){
-if(this.document.createStyleSheet){
-this.document.createStyleSheet(url);
-}else{
-var _21=this.document.getElementsByTagName("head")[0];
-var _22=this.document.createElement("link");
-_22.rel="stylesheet";
-_22.type="text/css";
-_22.href=url;
-_21.appendChild(_22);
-}
-}));
-},removeStyleSheet:function(uri){
-var url=uri.toString();
-if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){
-url=(new dojo._Url(dojo.global.location,url)).toString();
-}
-var _23=dojo.indexOf(this.editingAreaStyleSheets,url);
-if(_23==-1){
-return;
-}
-delete this.editingAreaStyleSheets[_23];
-dojo.withGlobal(this.window,"query",dojo,["link:[href=\""+url+"\"]"]).orphan();
-},disabled:false,_mozSettingProps:{"styleWithCSS":false},_setDisabledAttr:function(_24){
-this.disabled=_24;
-if(!this.isLoaded){
-return;
-}
-_24=!!_24;
-if(dojo.isIE||dojo.isWebKit||dojo.isOpera){
-var _25=dojo.isIE&&(this.isLoaded||!this.focusOnLoad);
-if(_25){
-this.editNode.unselectable="on";
-}
-this.editNode.contentEditable=!_24;
-if(_25){
-var _26=this;
-setTimeout(function(){
-_26.editNode.unselectable="off";
-},0);
-}
-}else{
-try{
-this.document.designMode=(_24?"off":"on");
-}
-catch(e){
-return;
-}
-if(!_24&&this._mozSettingProps){
-var ps=this._mozSettingProps;
-for(var n in ps){
-if(ps.hasOwnProperty(n)){
-try{
-this.document.execCommand(n,false,ps[n]);
-}
-catch(e2){
-}
-}
-}
-}
-}
-this._disabledOK=true;
-},onLoad:function(_27){
-if(!this.window.__registeredWindow){
-this.window.__registeredWindow=true;
-this._iframeRegHandle=dijit.registerIframe(this.iframe);
-}
-if(!dojo.isIE&&(this.height||dojo.isMoz)){
-this.editNode=this.document.body;
-}else{
-this.editNode=this.document.body.firstChild;
-var _28=this;
-if(dojo.isIE){
-var _29=(this.tabStop=dojo.doc.createElement("<div tabIndex=-1>"));
-this.editingArea.appendChild(_29);
-this.iframe.onfocus=function(){
-_28.editNode.setActive();
-};
-}
-}
-this.focusNode=this.editNode;
-var _2a=this.events.concat(this.captureEvents);
-var ap=this.iframe?this.document:this.editNode;
-dojo.forEach(_2a,function(_2b){
-this.connect(ap,_2b.toLowerCase(),_2b);
-},this);
-if(dojo.isIE){
-this.connect(this.document,"onmousedown","_onIEMouseDown");
-this.editNode.style.zoom=1;
-}else{
-this.connect(this.document,"onmousedown",function(){
-delete this._cursorToStart;
-});
-}
-if(dojo.isWebKit){
-this._webkitListener=this.connect(this.document,"onmouseup","onDisplayChanged");
-}
-if(dojo.isIE){
-try{
-this.document.execCommand("RespectVisibilityInDesign",true,null);
-}
-catch(e){
-}
-}
-this.isLoaded=true;
-this.set("disabled",this.disabled);
-var _2c=dojo.hitch(this,function(){
-this.setValue(_27);
-if(this.onLoadDeferred){
-this.onLoadDeferred.callback(true);
-}
-this.onDisplayChanged();
-if(this.focusOnLoad){
-dojo.addOnLoad(dojo.hitch(this,function(){
-setTimeout(dojo.hitch(this,"focus"),this.updateInterval);
-}));
-}
-this.savedContent=this.getValue(true);
-});
-if(this.setValueDeferred){
-this.setValueDeferred.addCallback(_2c);
-}else{
-_2c();
-}
-},onKeyDown:function(e){
-if(e.keyCode===dojo.keys.TAB&&this.isTabIndent){
-dojo.stopEvent(e);
-if(this.queryCommandEnabled((e.shiftKey?"outdent":"indent"))){
-this.execCommand((e.shiftKey?"outdent":"indent"));
-}
-}
-if(dojo.isIE){
-if(e.keyCode==dojo.keys.TAB&&!this.isTabIndent){
-if(e.shiftKey&&!e.ctrlKey&&!e.altKey){
-this.iframe.focus();
-}else{
-if(!e.shiftKey&&!e.ctrlKey&&!e.altKey){
-this.tabStop.focus();
-}
-}
-}else{
-if(e.keyCode===dojo.keys.BACKSPACE&&this.document.selection.type==="Control"){
-dojo.stopEvent(e);
-this.execCommand("delete");
-}else{
-if((65<=e.keyCode&&e.keyCode<=90)||(e.keyCode>=37&&e.keyCode<=40)){
-e.charCode=e.keyCode;
-this.onKeyPress(e);
-}
-}
-}
-}
-return true;
-},onKeyUp:function(e){
-return;
-},setDisabled:function(_2d){
-dojo.deprecated("dijit.Editor::setDisabled is deprecated","use dijit.Editor::attr(\"disabled\",boolean) instead",2);
-this.set("disabled",_2d);
-},_setValueAttr:function(_2e){
-this.setValue(_2e);
-},_setDisableSpellCheckAttr:function(_2f){
-if(this.document){
-dojo.attr(this.document.body,"spellcheck",!_2f);
-}else{
-this.onLoadDeferred.addCallback(dojo.hitch(this,function(){
-dojo.attr(this.document.body,"spellcheck",!_2f);
-}));
-}
-this.disableSpellCheck=_2f;
-},onKeyPress:function(e){
-var c=(e.keyChar&&e.keyChar.toLowerCase())||e.keyCode,_30=this._keyHandlers[c],_31=arguments;
-if(_30&&!e.altKey){
-dojo.some(_30,function(h){
-if(!(h.shift^e.shiftKey)&&!(h.ctrl^(e.ctrlKey||e.metaKey))){
-if(!h.handler.apply(this,_31)){
-e.preventDefault();
-}
-return true;
-}
-},this);
-}
-if(!this._onKeyHitch){
-this._onKeyHitch=dojo.hitch(this,"onKeyPressed");
-}
-setTimeout(this._onKeyHitch,1);
-return true;
-},addKeyHandler:function(key,_32,_33,_34){
-if(!dojo.isArray(this._keyHandlers[key])){
-this._keyHandlers[key]=[];
-}
-this._keyHandlers[key].push({shift:_33||false,ctrl:_32||false,handler:_34});
-},onKeyPressed:function(){
-this.onDisplayChanged();
-},onClick:function(e){
-this.onDisplayChanged(e);
-},_onIEMouseDown:function(e){
-if(!this._focused&&!this.disabled){
-this.focus();
-}
-},_onBlur:function(e){
-this.inherited(arguments);
-var _35=this.getValue(true);
-if(_35!=this.savedContent){
-this.onChange(_35);
-this.savedContent=_35;
-}
-},_onFocus:function(e){
-if(!this.disabled){
-if(!this._disabledOK){
-this.set("disabled",false);
-}
-this.inherited(arguments);
-}
-},blur:function(){
-if(!dojo.isIE&&this.window.document.documentElement&&this.window.document.documentElement.focus){
-this.window.document.documentElement.focus();
-}else{
-if(dojo.doc.body.focus){
-dojo.doc.body.focus();
-}
-}
-},focus:function(){
-if(!this.isLoaded){
-this.focusOnLoad=true;
-return;
-}
-if(this._cursorToStart){
-delete this._cursorToStart;
-if(this.editNode.childNodes){
-this.placeCursorAtStart();
-return;
-}
-}
-if(!dojo.isIE){
-dijit.focus(this.iframe);
-}else{
-if(this.editNode&&this.editNode.focus){
-this.iframe.fireEvent("onfocus",document.createEventObject());
-}
-}
-},updateInterval:200,_updateTimer:null,onDisplayChanged:function(e){
-if(this._updateTimer){
-clearTimeout(this._updateTimer);
-}
-if(!this._updateHandler){
-this._updateHandler=dojo.hitch(this,"onNormalizedDisplayChanged");
-}
-this._updateTimer=setTimeout(this._updateHandler,this.updateInterval);
-},onNormalizedDisplayChanged:function(){
-delete this._updateTimer;
-},onChange:function(_36){
-},_normalizeCommand:function(cmd,_37){
-var _38=cmd.toLowerCase();
-if(_38=="formatblock"){
-if(dojo.isSafari&&_37===undefined){
-_38="heading";
-}
-}else{
-if(_38=="hilitecolor"&&!dojo.isMoz){
-_38="backcolor";
-}
-}
-return _38;
-},_qcaCache:{},queryCommandAvailable:function(_39){
-var ca=this._qcaCache[_39];
-if(ca!==undefined){
-return ca;
-}
-return (this._qcaCache[_39]=this._queryCommandAvailable(_39));
-},_queryCommandAvailable:function(_3a){
-var ie=1;
-var _3b=1<<1;
-var _3c=1<<2;
-var _3d=1<<3;
-var _3e=1<<4;
-function _3f(_40){
-return {ie:Boolean(_40&ie),mozilla:Boolean(_40&_3b),webkit:Boolean(_40&_3c),webkit420:Boolean(_40&_3e),opera:Boolean(_40&_3d)};
-};
-var _41=null;
-switch(_3a.toLowerCase()){
-case "bold":
-case "italic":
-case "underline":
-case "subscript":
-case "superscript":
-case "fontname":
-case "fontsize":
-case "forecolor":
-case "hilitecolor":
-case "justifycenter":
-case "justifyfull":
-case "justifyleft":
-case "justifyright":
-case "delete":
-case "selectall":
-case "toggledir":
-_41=_3f(_3b|ie|_3c|_3d);
-break;
-case "createlink":
-case "unlink":
-case "removeformat":
-case "inserthorizontalrule":
-case "insertimage":
-case "insertorderedlist":
-case "insertunorderedlist":
-case "indent":
-case "outdent":
-case "formatblock":
-case "inserthtml":
-case "undo":
-case "redo":
-case "strikethrough":
-case "tabindent":
-_41=_3f(_3b|ie|_3d|_3e);
-break;
-case "blockdirltr":
-case "blockdirrtl":
-case "dirltr":
-case "dirrtl":
-case "inlinedirltr":
-case "inlinedirrtl":
-_41=_3f(ie);
-break;
-case "cut":
-case "copy":
-case "paste":
-_41=_3f(ie|_3b|_3e);
-break;
-case "inserttable":
-_41=_3f(_3b|ie);
-break;
-case "insertcell":
-case "insertcol":
-case "insertrow":
-case "deletecells":
-case "deletecols":
-case "deleterows":
-case "mergecells":
-case "splitcell":
-_41=_3f(ie|_3b);
-break;
-default:
-return false;
-}
-return (dojo.isIE&&_41.ie)||(dojo.isMoz&&_41.mozilla)||(dojo.isWebKit&&_41.webkit)||(dojo.isWebKit>420&&_41.webkit420)||(dojo.isOpera&&_41.opera);
-},execCommand:function(_42,_43){
-var _44;
-this.focus();
-_42=this._normalizeCommand(_42,_43);
-if(_43!==undefined){
-if(_42=="heading"){
-throw new Error("unimplemented");
-}else{
-if((_42=="formatblock")&&dojo.isIE){
-_43="<"+_43+">";
-}
-}
-}
-var _45="_"+_42+"Impl";
-if(this[_45]){
-_44=this[_45](_43);
-}else{
-_43=arguments.length>1?_43:null;
-if(_43||_42!="createlink"){
-_44=this.document.execCommand(_42,false,_43);
-}
-}
-this.onDisplayChanged();
-return _44;
-},queryCommandEnabled:function(_46){
-if(this.disabled||!this._disabledOK){
-return false;
-}
-_46=this._normalizeCommand(_46);
-if(dojo.isMoz||dojo.isWebKit){
-if(_46=="unlink"){
-return this._sCall("hasAncestorElement",["a"]);
-}else{
-if(_46=="inserttable"){
-return true;
-}
-}
-}
-if(dojo.isWebKit){
-if(_46=="copy"){
-_46="cut";
-}else{
-if(_46=="paste"){
-return true;
-}
-}
-}
-var _47=dojo.isIE?this.document.selection.createRange():this.document;
-try{
-return _47.queryCommandEnabled(_46);
-}
-catch(e){
-return false;
-}
-},queryCommandState:function(_48){
-if(this.disabled||!this._disabledOK){
-return false;
-}
-_48=this._normalizeCommand(_48);
-try{
-return this.document.queryCommandState(_48);
-}
-catch(e){
-return false;
-}
-},queryCommandValue:function(_49){
-if(this.disabled||!this._disabledOK){
-return false;
-}
-var r;
-_49=this._normalizeCommand(_49);
-if(dojo.isIE&&_49=="formatblock"){
-r=this._native2LocalFormatNames[this.document.queryCommandValue(_49)];
-}else{
-if(dojo.isMoz&&_49==="hilitecolor"){
-var _4a;
-try{
-_4a=this.document.queryCommandValue("styleWithCSS");
-}
-catch(e){
-_4a=false;
-}
-this.document.execCommand("styleWithCSS",false,true);
-r=this.document.queryCommandValue(_49);
-this.document.execCommand("styleWithCSS",false,_4a);
-}else{
-r=this.document.queryCommandValue(_49);
-}
-}
-return r;
-},_sCall:function(_4b,_4c){
-return dojo.withGlobal(this.window,_4b,dijit._editor.selection,_4c);
-},placeCursorAtStart:function(){
-this.focus();
-var _4d=false;
-if(dojo.isMoz){
-var _4e=this.editNode.firstChild;
-while(_4e){
-if(_4e.nodeType==3){
-if(_4e.nodeValue.replace(/^\s+|\s+$/g,"").length>0){
-_4d=true;
-this._sCall("selectElement",[_4e]);
-break;
-}
-}else{
-if(_4e.nodeType==1){
-_4d=true;
-var tg=_4e.tagName?_4e.tagName.toLowerCase():"";
-if(/br|input|img|base|meta|area|basefont|hr|link/.test(tg)){
-this._sCall("selectElement",[_4e]);
-}else{
-this._sCall("selectElementChildren",[_4e]);
-}
-break;
-}
-}
-_4e=_4e.nextSibling;
-}
-}else{
-_4d=true;
-this._sCall("selectElementChildren",[this.editNode]);
-}
-if(_4d){
-this._sCall("collapse",[true]);
-}
-},placeCursorAtEnd:function(){
-this.focus();
-var _4f=false;
-if(dojo.isMoz){
-var _50=this.editNode.lastChild;
-while(_50){
-if(_50.nodeType==3){
-if(_50.nodeValue.replace(/^\s+|\s+$/g,"").length>0){
-_4f=true;
-this._sCall("selectElement",[_50]);
-break;
-}
-}else{
-if(_50.nodeType==1){
-_4f=true;
-if(_50.lastChild){
-this._sCall("selectElement",[_50.lastChild]);
-}else{
-this._sCall("selectElement",[_50]);
-}
-break;
-}
-}
-_50=_50.previousSibling;
-}
-}else{
-_4f=true;
-this._sCall("selectElementChildren",[this.editNode]);
-}
-if(_4f){
-this._sCall("collapse",[false]);
-}
-},getValue:function(_51){
-if(this.textarea){
-if(this.isClosed||!this.isLoaded){
-return this.textarea.value;
-}
-}
-return this._postFilterContent(null,_51);
-},_getValueAttr:function(){
-return this.getValue(true);
-},setValue:function(_52){
-if(!this.isLoaded){
-this.onLoadDeferred.addCallback(dojo.hitch(this,function(){
-this.setValue(_52);
-}));
-return;
-}
-this._cursorToStart=true;
-if(this.textarea&&(this.isClosed||!this.isLoaded)){
-this.textarea.value=_52;
-}else{
-_52=this._preFilterContent(_52);
-var _53=this.isClosed?this.domNode:this.editNode;
-if(!_52&&dojo.isWebKit){
-_52="&nbsp;";
-}
-_53.innerHTML=_52;
-this._preDomFilterContent(_53);
-}
-this.onDisplayChanged();
-},replaceValue:function(_54){
-if(this.isClosed){
-this.setValue(_54);
-}else{
-if(this.window&&this.window.getSelection&&!dojo.isMoz){
-this.setValue(_54);
-}else{
-if(this.window&&this.window.getSelection){
-_54=this._preFilterContent(_54);
-this.execCommand("selectall");
-if(!_54){
-this._cursorToStart=true;
-_54="&nbsp;";
-}
-this.execCommand("inserthtml",_54);
-this._preDomFilterContent(this.editNode);
-}else{
-if(this.document&&this.document.selection){
-this.setValue(_54);
-}
-}
-}
-}
-},_preFilterContent:function(_55){
-var ec=_55;
-dojo.forEach(this.contentPreFilters,function(ef){
-if(ef){
-ec=ef(ec);
-}
-});
-return ec;
-},_preDomFilterContent:function(dom){
-dom=dom||this.editNode;
-dojo.forEach(this.contentDomPreFilters,function(ef){
-if(ef&&dojo.isFunction(ef)){
-ef(dom);
-}
-},this);
-},_postFilterContent:function(dom,_56){
-var ec;
-if(!dojo.isString(dom)){
-dom=dom||this.editNode;
-if(this.contentDomPostFilters.length){
-if(_56){
-dom=dojo.clone(dom);
-}
-dojo.forEach(this.contentDomPostFilters,function(ef){
-dom=ef(dom);
-});
-}
-ec=dijit._editor.getChildrenHtml(dom);
-}else{
-ec=dom;
-}
-if(!dojo.trim(ec.replace(/^\xA0\xA0*/,"").replace(/\xA0\xA0*$/,"")).length){
-ec="";
+
+
+// used to restore content when user leaves this page then comes back
+// but do not try doing dojo.doc.write if we are using xd loading.
+// dojo.doc.write will only work if RichText.js is included in the dojo.js
+// file. If it is included in dojo.js and you want to allow rich text saving
+// for back/forward actions, then set dojo.config.allowXdRichTextSave = true.
+if(!dojo.config["useXDomain"] || dojo.config["allowXdRichTextSave"]){
+       if(dojo._postLoad){
+               (function(){
+                       var savetextarea = dojo.doc.createElement('textarea');
+                       savetextarea.id = dijit._scopeName + "._editor.RichText.value";
+                       dojo.style(savetextarea, {
+                               display:'none',
+                               position:'absolute',
+                               top:"-100px",
+                               height:"3px",
+                               width:"3px"
+                       });
+                       dojo.body().appendChild(savetextarea);
+               })();
+       }else{
+               //dojo.body() is not available before onLoad is fired
+               try{
+                       dojo.doc.write('<textarea id="' + dijit._scopeName + '._editor.RichText.value" ' +
+                               'style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;"></textarea>');
+               }catch(e){ }
+       }
 }
-dojo.forEach(this.contentPostFilters,function(ef){
-ec=ef(ec);
+
+dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
+       constructor: function(params){
+               // summary:
+               //              dijit._editor.RichText is the core of dijit.Editor, which provides basic
+               //              WYSIWYG editing features.
+               //
+               // description:
+               //              dijit._editor.RichText is the core of dijit.Editor, which provides basic
+               //              WYSIWYG editing features. It also encapsulates the differences
+               //              of different js engines for various browsers.  Do not use this widget
+               //              with an HTML &lt;TEXTAREA&gt; tag, since the browser unescapes XML escape characters,
+               //              like &lt;.  This can have unexpected behavior and lead to security issues
+               //              such as scripting attacks.
+               //
+               // tags:
+               //              private
+
+               // contentPreFilters: Function(String)[]
+               //              Pre content filter function register array.
+               //              these filters will be executed before the actual
+               //              editing area gets the html content.
+               this.contentPreFilters = [];
+
+               // contentPostFilters: Function(String)[]
+               //              post content filter function register array.
+               //              These will be used on the resulting html
+               //              from contentDomPostFilters. The resulting
+               //              content is the final html (returned by getValue()).
+               this.contentPostFilters = [];
+
+               // contentDomPreFilters: Function(DomNode)[]
+               //              Pre content dom filter function register array.
+               //              These filters are applied after the result from
+               //              contentPreFilters are set to the editing area.
+               this.contentDomPreFilters = [];
+
+               // contentDomPostFilters: Function(DomNode)[]
+               //              Post content dom filter function register array.
+               //              These filters are executed on the editing area dom.
+               //              The result from these will be passed to contentPostFilters.
+               this.contentDomPostFilters = [];
+
+               // editingAreaStyleSheets: dojo._URL[]
+               //              array to store all the stylesheets applied to the editing area
+               this.editingAreaStyleSheets = [];
+
+               // Make a copy of this.events before we start writing into it, otherwise we
+               // will modify the prototype which leads to bad things on pages w/multiple editors
+               this.events = [].concat(this.events);
+
+               this._keyHandlers = {};
+
+               if(params && dojo.isString(params.value)){
+                       this.value = params.value;
+               }
+
+               this.onLoadDeferred = new dojo.Deferred();
+       },
+
+       baseClass: "dijitEditor",
+
+       // inheritWidth: Boolean
+       //              whether to inherit the parent's width or simply use 100%
+       inheritWidth: false,
+
+       // focusOnLoad: [deprecated] Boolean
+       //              Focus into this widget when the page is loaded
+       focusOnLoad: false,
+
+       // name: String?
+       //              Specifies the name of a (hidden) <textarea> node on the page that's used to save
+       //              the editor content on page leave.   Used to restore editor contents after navigating
+       //              to a new page and then hitting the back button.
+       name: "",
+
+       // styleSheets: [const] String
+       //              semicolon (";") separated list of css files for the editing area
+       styleSheets: "",
+
+       // height: String
+       //              Set height to fix the editor at a specific height, with scrolling.
+       //              By default, this is 300px.  If you want to have the editor always
+       //              resizes to accommodate the content, use AlwaysShowToolbar plugin
+       //              and set height="".  If this editor is used within a layout widget,
+       //              set height="100%".
+       height: "300px",
+
+       // minHeight: String
+       //              The minimum height that the editor should have.
+       minHeight: "1em",
+
+       // isClosed: [private] Boolean
+       isClosed: true,
+
+       // isLoaded: [private] Boolean
+       isLoaded: false,
+
+       // _SEPARATOR: [private] String
+       //              Used to concat contents from multiple editors into a single string,
+       //              so they can be saved into a single <textarea> node.  See "name" attribute.
+       _SEPARATOR: "@@**%%__RICHTEXTBOUNDRY__%%**@@",
+
+       // _NAME_CONTENT_SEP: [private] String
+       //              USed to separate name from content.  Just a colon isn't safe.
+       _NAME_CONTENT_SEP: "@@**%%:%%**@@",
+
+       // onLoadDeferred: [readonly] dojo.Deferred
+       //              Deferred which is fired when the editor finishes loading.
+       //              Call myEditor.onLoadDeferred.then(callback) it to be informed
+       //              when the rich-text area initialization is finalized.
+       onLoadDeferred: null,
+
+       // isTabIndent: Boolean
+       //              Make tab key and shift-tab indent and outdent rather than navigating.
+       //              Caution: sing this makes web pages inaccessible to users unable to use a mouse.
+       isTabIndent: false,
+
+       // disableSpellCheck: [const] Boolean
+       //              When true, disables the browser's native spell checking, if supported.
+       //              Works only in Firefox.
+       disableSpellCheck: false,
+
+       postCreate: function(){
+               if("textarea" == this.domNode.tagName.toLowerCase()){
+                       console.warn("RichText should not be used with the TEXTAREA tag.  See dijit._editor.RichText docs.");
+               }
+
+               // Push in the builtin filters now, making them the first executed, but not over-riding anything
+               // users passed in.  See: #6062
+               this.contentPreFilters = [dojo.hitch(this, "_preFixUrlAttributes")].concat(this.contentPreFilters);
+               if(dojo.isMoz){
+                       this.contentPreFilters = [this._normalizeFontStyle].concat(this.contentPreFilters);
+                       this.contentPostFilters = [this._removeMozBogus].concat(this.contentPostFilters);
+               }
+               if(dojo.isWebKit){
+                       // Try to clean up WebKit bogus artifacts.  The inserted classes
+                       // made by WebKit sometimes messes things up.
+                       this.contentPreFilters = [this._removeWebkitBogus].concat(this.contentPreFilters);
+                       this.contentPostFilters = [this._removeWebkitBogus].concat(this.contentPostFilters);
+               }
+               if(dojo.isIE){
+                       // IE generates <strong> and <em> but we want to normalize to <b> and <i>
+                       this.contentPostFilters = [this._normalizeFontStyle].concat(this.contentPostFilters);
+               }
+               this.inherited(arguments);
+
+               dojo.publish(dijit._scopeName + "._editor.RichText::init", [this]);
+               this.open();
+               this.setupDefaultShortcuts();
+       },
+
+       setupDefaultShortcuts: function(){
+               // summary:
+               //              Add some default key handlers
+               // description:
+               //              Overwrite this to setup your own handlers. The default
+               //              implementation does not use Editor commands, but directly
+               //              executes the builtin commands within the underlying browser
+               //              support.
+               // tags:
+               //              protected
+               var exec = dojo.hitch(this, function(cmd, arg){
+                       return function(){
+                               return !this.execCommand(cmd,arg);
+                       };
+               });
+
+               var ctrlKeyHandlers = {
+                       b: exec("bold"),
+                       i: exec("italic"),
+                       u: exec("underline"),
+                       a: exec("selectall"),
+                       s: function(){ this.save(true); },
+                       m: function(){ this.isTabIndent = !this.isTabIndent; },
+
+                       "1": exec("formatblock", "h1"),
+                       "2": exec("formatblock", "h2"),
+                       "3": exec("formatblock", "h3"),
+                       "4": exec("formatblock", "h4"),
+
+                       "\\": exec("insertunorderedlist")
+               };
+
+               if(!dojo.isIE){
+                       ctrlKeyHandlers.Z = exec("redo"); //FIXME: undo?
+               }
+
+               for(var key in ctrlKeyHandlers){
+                       this.addKeyHandler(key, true, false, ctrlKeyHandlers[key]);
+               }
+       },
+
+       // events: [private] String[]
+       //               events which should be connected to the underlying editing area
+       events: ["onKeyPress", "onKeyDown", "onKeyUp"], // onClick handled specially
+
+       // captureEvents: [deprecated] String[]
+       //               Events which should be connected to the underlying editing
+       //               area, events in this array will be addListener with
+       //               capture=true.
+       // TODO: looking at the code I don't see any distinction between events and captureEvents,
+       // so get rid of this for 2.0 if not sooner
+       captureEvents: [],
+
+       _editorCommandsLocalized: false,
+       _localizeEditorCommands: function(){
+               // summary:
+               //              When IE is running in a non-English locale, the API actually changes,
+               //              so that we have to say (for example) danraku instead of p (for paragraph).
+               //              Handle that here.
+               // tags:
+               //              private
+               if(dijit._editor._editorCommandsLocalized){
+                       // Use the already generate cache of mappings.  
+                       this._local2NativeFormatNames = dijit._editor._local2NativeFormatNames;
+                       this._native2LocalFormatNames = dijit._editor._native2LocalFormatNames;
+                       return;
+               }
+               dijit._editor._editorCommandsLocalized = true;
+               dijit._editor._local2NativeFormatNames = {};
+               dijit._editor._native2LocalFormatNames = {};
+               this._local2NativeFormatNames = dijit._editor._local2NativeFormatNames;
+               this._native2LocalFormatNames = dijit._editor._native2LocalFormatNames;
+               //in IE, names for blockformat is locale dependent, so we cache the values here
+
+               //put p after div, so if IE returns Normal, we show it as paragraph
+               //We can distinguish p and div if IE returns Normal, however, in order to detect that,
+               //we have to call this.document.selection.createRange().parentElement() or such, which
+               //could slow things down. Leave it as it is for now
+               var formats = ['div', 'p', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'ul', 'address'];
+               var localhtml = "", format, i=0;
+               while((format=formats[i++])){
+                       //append a <br> after each element to separate the elements more reliably
+                       if(format.charAt(1) !== 'l'){
+                               localhtml += "<"+format+"><span>content</span></"+format+"><br/>";
+                       }else{
+                               localhtml += "<"+format+"><li>content</li></"+format+"><br/>";
+                       }
+               }
+               // queryCommandValue returns empty if we hide editNode, so move it out of screen temporary
+               // Also, IE9 does weird stuff unless we do it inside the editor iframe.
+               var style = { position: "absolute", top: "0px", zIndex: 10, opacity: 0.01 };
+               var div = dojo.create('div', {style: style, innerHTML: localhtml});
+               dojo.body().appendChild(div);
+
+               // IE9 has a timing issue with doing this right after setting
+               // the inner HTML, so put a delay in.
+               var inject = dojo.hitch(this, function(){
+                       var node = div.firstChild;
+                       while(node){
+                               try{
+                                       dijit._editor.selection.selectElement(node.firstChild);
+                                       var nativename = node.tagName.toLowerCase();
+                                       this._local2NativeFormatNames[nativename] = document.queryCommandValue("formatblock");
+                                       this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename;
+                                       node = node.nextSibling.nextSibling;
+                                       //console.log("Mapped: ", nativename, " to: ", this._local2NativeFormatNames[nativename]);
+                               }catch(e) { /*Sqelch the occasional IE9 error */ }
+                       }
+                       div.parentNode.removeChild(div);
+                       div.innerHTML = "";
+               });
+               setTimeout(inject, 0);
+       },
+
+       open: function(/*DomNode?*/ element){
+               // summary:
+               //              Transforms the node referenced in this.domNode into a rich text editing
+               //              node.
+               // description:
+               //              Sets up the editing area asynchronously. This will result in
+               //              the creation and replacement with an iframe.
+               // tags:
+               //              private
+
+               if(!this.onLoadDeferred || this.onLoadDeferred.fired >= 0){
+                       this.onLoadDeferred = new dojo.Deferred();
+               }
+
+               if(!this.isClosed){ this.close(); }
+               dojo.publish(dijit._scopeName + "._editor.RichText::open", [ this ]);
+
+               if(arguments.length == 1 && element.nodeName){ // else unchanged
+                       this.domNode = element;
+               }
+
+               var dn = this.domNode;
+
+               // "html" will hold the innerHTML of the srcNodeRef and will be used to
+               // initialize the editor.
+               var html;
+
+               if(dojo.isString(this.value)){
+                       // Allow setting the editor content programmatically instead of
+                       // relying on the initial content being contained within the target
+                       // domNode.
+                       html = this.value;
+                       delete this.value;
+                       dn.innerHTML = "";
+               }else if(dn.nodeName && dn.nodeName.toLowerCase() == "textarea"){
+                       // if we were created from a textarea, then we need to create a
+                       // new editing harness node.
+                       var ta = (this.textarea = dn);
+                       this.name = ta.name;
+                       html = ta.value;
+                       dn = this.domNode = dojo.doc.createElement("div");
+                       dn.setAttribute('widgetId', this.id);
+                       ta.removeAttribute('widgetId');
+                       dn.cssText = ta.cssText;
+                       dn.className += " " + ta.className;
+                       dojo.place(dn, ta, "before");
+                       var tmpFunc = dojo.hitch(this, function(){
+                               //some browsers refuse to submit display=none textarea, so
+                               //move the textarea off screen instead
+                               dojo.style(ta, {
+                                       display: "block",
+                                       position: "absolute",
+                                       top: "-1000px"
+                               });
+
+                               if(dojo.isIE){ //nasty IE bug: abnormal formatting if overflow is not hidden
+                                       var s = ta.style;
+                                       this.__overflow = s.overflow;
+                                       s.overflow = "hidden";
+                               }
+                       });
+                       if(dojo.isIE){
+                               setTimeout(tmpFunc, 10);
+                       }else{
+                               tmpFunc();
+                       }
+
+                       if(ta.form){
+                               var resetValue = ta.value;
+                               this.reset = function(){
+                                       var current = this.getValue();
+                                       if(current != resetValue){
+                                               this.replaceValue(resetValue);
+                                       }
+                               };
+                               dojo.connect(ta.form, "onsubmit", this, function(){
+                                       // Copy value to the <textarea> so it gets submitted along with form.
+                                       // FIXME: should we be calling close() here instead?
+                                       dojo.attr(ta, 'disabled', this.disabled); // don't submit the value if disabled
+                                       ta.value = this.getValue();
+                               });
+                       }
+               }else{
+                       html = dijit._editor.getChildrenHtml(dn);
+                       dn.innerHTML = "";
+               }
+
+               var content = dojo.contentBox(dn);
+               this._oldHeight = content.h;
+               this._oldWidth = content.w;
+
+               this.value = html;
+
+               // If we're a list item we have to put in a blank line to force the
+               // bullet to nicely align at the top of text
+               if(dn.nodeName && dn.nodeName == "LI"){
+                       dn.innerHTML = " <br>";
+               }
+       
+               // Construct the editor div structure.
+               this.header = dn.ownerDocument.createElement("div");
+               dn.appendChild(this.header);
+               this.editingArea = dn.ownerDocument.createElement("div");
+               dn.appendChild(this.editingArea);
+               this.footer = dn.ownerDocument.createElement("div");
+               dn.appendChild(this.footer);
+
+               if(!this.name){
+                       this.name = this.id + "_AUTOGEN";
+               }
+
+               // User has pressed back/forward button so we lost the text in the editor, but it's saved
+               // in a hidden <textarea> (which contains the data for all the editors on this page),
+               // so get editor value from there
+               if(this.name !== "" && (!dojo.config["useXDomain"] || dojo.config["allowXdRichTextSave"])){
+                       var saveTextarea = dojo.byId(dijit._scopeName + "._editor.RichText.value");
+                       if(saveTextarea && saveTextarea.value !== ""){
+                               var datas = saveTextarea.value.split(this._SEPARATOR), i=0, dat;
+                               while((dat=datas[i++])){
+                                       var data = dat.split(this._NAME_CONTENT_SEP);
+                                       if(data[0] == this.name){
+                                               html = data[1];
+                                               datas = datas.splice(i, 1);
+                                               saveTextarea.value = datas.join(this._SEPARATOR);
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if(!dijit._editor._globalSaveHandler){
+                               dijit._editor._globalSaveHandler = {};
+                               dojo.addOnUnload(function() {
+                                       var id;
+                                       for(id in dijit._editor._globalSaveHandler){
+                                               var f = dijit._editor._globalSaveHandler[id];
+                                               if(dojo.isFunction(f)){
+                                                       f();
+                                               }
+                                       }
+                               });
+                       }
+                       dijit._editor._globalSaveHandler[this.id] = dojo.hitch(this, "_saveContent");
+               }
+
+               this.isClosed = false;
+
+               var ifr = (this.editorObject = this.iframe = dojo.doc.createElement('iframe'));
+               ifr.id = this.id+"_iframe";
+               this._iframeSrc = this._getIframeDocTxt();
+               ifr.style.border = "none";
+               ifr.style.width = "100%";
+               if(this._layoutMode){
+                       // iframe should be 100% height, thus getting it's height from surrounding
+                       // <div> (which has the correct height set by Editor)
+                       ifr.style.height = "100%";
+               }else{
+                       if(dojo.isIE >= 7){
+                               if(this.height){
+                                       ifr.style.height = this.height;
+                               }
+                               if(this.minHeight){
+                                       ifr.style.minHeight = this.minHeight;
+                               }
+                       }else{
+                               ifr.style.height = this.height ? this.height : this.minHeight;
+                       }
+               }
+               ifr.frameBorder = 0;
+               ifr._loadFunc = dojo.hitch( this, function(win){
+                       this.window = win;
+                       this.document = this.window.document;
+
+                       if(dojo.isIE){
+                               this._localizeEditorCommands();
+                       }
+                       
+                       // Do final setup and set initial contents of editor
+                       this.onLoad(html);
+               });
+
+               // Set the iframe's initial (blank) content.
+               var s = 'javascript:parent.' + dijit._scopeName + '.byId("'+this.id+'")._iframeSrc';
+               ifr.setAttribute('src', s);
+               this.editingArea.appendChild(ifr);
+
+               if(dojo.isSafari <= 4){
+                       var src = ifr.getAttribute("src");
+                       if(!src || src.indexOf("javascript") == -1){
+                               // Safari 4 and earlier sometimes act oddly
+                               // So we have to set it again.
+                               setTimeout(function(){ifr.setAttribute('src', s);},0);
+                       }
+               }
+
+               // TODO: this is a guess at the default line-height, kinda works
+               if(dn.nodeName == "LI"){
+                       dn.lastChild.style.marginTop = "-1.2em";
+               }
+
+               dojo.addClass(this.domNode, this.baseClass);
+       },
+
+       //static cache variables shared among all instance of this class
+       _local2NativeFormatNames: {},
+       _native2LocalFormatNames: {},
+
+       _getIframeDocTxt: function(){
+               // summary:
+               //              Generates the boilerplate text of the document inside the iframe (ie, <html><head>...</head><body/></html>).
+               //              Editor content (if not blank) should be added afterwards.
+               // tags:
+               //              private
+               var _cs = dojo.getComputedStyle(this.domNode);
+
+               // The contents inside of <body>.  The real contents are set later via a call to setValue().
+               var html = "";
+               var setBodyId = true;
+               if(dojo.isIE || dojo.isWebKit || (!this.height && !dojo.isMoz)){
+                       // In auto-expand mode, need a wrapper div for AlwaysShowToolbar plugin to correctly
+                       // expand/contract the editor as the content changes.
+                       html = "<div id='dijitEditorBody'></div>";
+                       setBodyId = false;
+               }else if(dojo.isMoz){
+                       // workaround bug where can't select then delete text (until user types something
+                       // into the editor)... and/or issue where typing doesn't erase selected text
+                       this._cursorToStart = true;
+                       html = "&nbsp;";
+               }
+
+               var font = [ _cs.fontWeight, _cs.fontSize, _cs.fontFamily ].join(" ");
+
+               // line height is tricky - applying a units value will mess things up.
+               // if we can't get a non-units value, bail out.
+               var lineHeight = _cs.lineHeight;
+               if(lineHeight.indexOf("px") >= 0){
+                       lineHeight = parseFloat(lineHeight)/parseFloat(_cs.fontSize);
+                       // console.debug(lineHeight);
+               }else if(lineHeight.indexOf("em")>=0){
+                       lineHeight = parseFloat(lineHeight);
+               }else{
+                       // If we can't get a non-units value, just default
+                       // it to the CSS spec default of 'normal'.  Seems to
+                       // work better, esp on IE, than '1.0'
+                       lineHeight = "normal";
+               }
+               var userStyle = "";
+               var self = this;
+               this.style.replace(/(^|;)\s*(line-|font-?)[^;]+/ig, function(match){
+                       match = match.replace(/^;/ig,"") + ';';
+                       var s = match.split(":")[0];
+                       if(s){
+                               s = dojo.trim(s);
+                               s = s.toLowerCase();
+                               var i;
+                               var sC = "";
+                               for(i = 0; i < s.length; i++){
+                                       var c = s.charAt(i);
+                                       switch(c){
+                                               case "-":
+                                                       i++;
+                                                       c = s.charAt(i).toUpperCase();
+                                               default:
+                                                       sC += c;
+                                       }
+                               }
+                               dojo.style(self.domNode, sC, "");
+                       }
+                       userStyle += match + ';';
+               });
+
+
+               // need to find any associated label element and update iframe document title
+               var label=dojo.query('label[for="'+this.id+'"]');
+
+               return [
+                       this.isLeftToRight() ? "<html>\n<head>\n" : "<html dir='rtl'>\n<head>\n",
+                       (dojo.isMoz && label.length ? "<title>" + label[0].innerHTML + "</title>\n" : ""),
+                       "<meta http-equiv='Content-Type' content='text/html'>\n",
+                       "<style>\n",
+                       "\tbody,html {\n",
+                       "\t\tbackground:transparent;\n",
+                       "\t\tpadding: 1px 0 0 0;\n",
+                       "\t\tmargin: -1px 0 0 0;\n", // remove extraneous vertical scrollbar on safari and firefox
+
+                       // Set the html/body sizing.  Webkit always needs this, other browsers
+                       // only set it when height is defined (not auto-expanding), otherwise
+                       // scrollers do not appear.
+                       ((dojo.isWebKit)?"\t\twidth: 100%;\n":""),
+                       ((dojo.isWebKit)?"\t\theight: 100%;\n":""),
+                       "\t}\n",
+                       
+                       // TODO: left positioning will cause contents to disappear out of view
+                       //         if it gets too wide for the visible area
+                       "\tbody{\n",
+                       "\t\ttop:0px;\n",
+                       "\t\tleft:0px;\n",
+                       "\t\tright:0px;\n",
+                       "\t\tfont:", font, ";\n",
+                               ((this.height||dojo.isOpera) ? "" : "\t\tposition: fixed;\n"),
+                       // FIXME: IE 6 won't understand min-height?
+                       "\t\tmin-height:", this.minHeight, ";\n",
+                       "\t\tline-height:", lineHeight,";\n",
+                       "\t}\n",
+                       "\tp{ margin: 1em 0; }\n",
+                       
+                       // Determine how scrollers should be applied.  In autoexpand mode (height = "") no scrollers on y at all.
+                       // But in fixed height mode we want both x/y scrollers.  Also, if it's using wrapping div and in auto-expand
+                       // (Mainly IE) we need to kill the y scroller on body and html.
+                       (!setBodyId && !this.height ? "\tbody,html {overflow-y: hidden;}\n" : ""),
+                       "\t#dijitEditorBody{overflow-x: auto; overflow-y:" + (this.height ? "auto;" : "hidden;") + " outline: 0px;}\n",
+                       "\tli > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; }\n",
+                       // Can't set min-height in IE9, it puts layout on li, which puts move/resize handles.
+                       (!dojo.isIE ? "\tli{ min-height:1.2em; }\n" : ""), 
+                       "</style>\n",
+                       this._applyEditingAreaStyleSheets(),"\n",
+                       "</head>\n<body ",
+                       (setBodyId?"id='dijitEditorBody' ":""),
+                       "onload='frameElement._loadFunc(window,document)' style='"+userStyle+"'>", html, "</body>\n</html>"
+               ].join(""); // String
+       },
+
+       _applyEditingAreaStyleSheets: function(){
+               // summary:
+               //              apply the specified css files in styleSheets
+               // tags:
+               //              private
+               var files = [];
+               if(this.styleSheets){
+                       files = this.styleSheets.split(';');
+                       this.styleSheets = '';
+               }
+
+               //empty this.editingAreaStyleSheets here, as it will be filled in addStyleSheet
+               files = files.concat(this.editingAreaStyleSheets);
+               this.editingAreaStyleSheets = [];
+
+               var text='', i=0, url;
+               while((url=files[i++])){
+                       var abstring = (new dojo._Url(dojo.global.location, url)).toString();
+                       this.editingAreaStyleSheets.push(abstring);
+                       text += '<link rel="stylesheet" type="text/css" href="'+abstring+'"/>';
+               }
+               return text;
+       },
+
+       addStyleSheet: function(/*dojo._Url*/ uri){
+               // summary:
+               //              add an external stylesheet for the editing area
+               // uri:
+               //              A dojo.uri.Uri pointing to the url of the external css file
+               var url=uri.toString();
+
+               //if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
+               if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
+                       url = (new dojo._Url(dojo.global.location, url)).toString();
+               }
+
+               if(dojo.indexOf(this.editingAreaStyleSheets, url) > -1){
+//                     console.debug("dijit._editor.RichText.addStyleSheet: Style sheet "+url+" is already applied");
+                       return;
+               }
+
+               this.editingAreaStyleSheets.push(url);
+               this.onLoadDeferred.addCallback(dojo.hitch(this, function(){
+                       if(this.document.createStyleSheet){ //IE
+                               this.document.createStyleSheet(url);
+                       }else{ //other browser
+                               var head = this.document.getElementsByTagName("head")[0];
+                               var stylesheet = this.document.createElement("link");
+                               stylesheet.rel="stylesheet";
+                               stylesheet.type="text/css";
+                               stylesheet.href=url;
+                               head.appendChild(stylesheet);
+                       }
+               }));
+       },
+
+       removeStyleSheet: function(/*dojo._Url*/ uri){
+               // summary:
+               //              remove an external stylesheet for the editing area
+               var url=uri.toString();
+               //if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
+               if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
+                       url = (new dojo._Url(dojo.global.location, url)).toString();
+               }
+               var index = dojo.indexOf(this.editingAreaStyleSheets, url);
+               if(index == -1){
+//                     console.debug("dijit._editor.RichText.removeStyleSheet: Style sheet "+url+" has not been applied");
+                       return;
+               }
+               delete this.editingAreaStyleSheets[index];
+               dojo.withGlobal(this.window,'query', dojo, ['link:[href="'+url+'"]']).orphan();
+       },
+
+       // disabled: Boolean
+       //              The editor is disabled; the text cannot be changed.
+       disabled: false,
+
+       _mozSettingProps: {'styleWithCSS':false},
+       _setDisabledAttr: function(/*Boolean*/ value){
+               value = !!value;
+               this._set("disabled", value);
+               if(!this.isLoaded){ return; } // this method requires init to be complete
+               if(dojo.isIE || dojo.isWebKit || dojo.isOpera){
+                       var preventIEfocus = dojo.isIE && (this.isLoaded || !this.focusOnLoad);
+                       if(preventIEfocus){ this.editNode.unselectable = "on"; }
+                       this.editNode.contentEditable = !value;
+                       if(preventIEfocus){
+                               var _this = this;
+                               setTimeout(function(){ _this.editNode.unselectable = "off"; }, 0);
+                       }
+               }else{ //moz
+                       try{
+                               this.document.designMode=(value?'off':'on');
+                       }catch(e){ return; } // ! _disabledOK
+                       if(!value && this._mozSettingProps){
+                               var ps = this._mozSettingProps;
+                               for(var n in ps){
+                                       if(ps.hasOwnProperty(n)){
+                                               try{
+                                                       this.document.execCommand(n,false,ps[n]);
+                                               }catch(e2){}
+                                       }
+                               }
+                       }
+//                     this.document.execCommand('contentReadOnly', false, value);
+//                             if(value){
+//                                     this.blur(); //to remove the blinking caret
+//                             }
+               }
+               this._disabledOK = true;
+       },
+
+/* Event handlers
+ *****************/
+
+       onLoad: function(/*String*/ html){
+               // summary:
+               //              Handler after the iframe finishes loading.
+               // html: String
+               //              Editor contents should be set to this value
+               // tags:
+               //              protected
+
+               // TODO: rename this to _onLoad, make empty public onLoad() method, deprecate/make protected onLoadDeferred handler?
+
+               if(!this.window.__registeredWindow){
+                       this.window.__registeredWindow = true;
+                       this._iframeRegHandle = dijit.registerIframe(this.iframe);
+               }
+               if(!dojo.isIE && !dojo.isWebKit && (this.height || dojo.isMoz)){
+                       this.editNode=this.document.body;
+               }else{
+                       // there's a wrapper div around the content, see _getIframeDocTxt().
+                       this.editNode=this.document.body.firstChild;
+                       var _this = this;
+                       if(dojo.isIE){ // #4996 IE wants to focus the BODY tag
+                               this.tabStop = dojo.create('div', { tabIndex: -1 }, this.editingArea);
+                               this.iframe.onfocus = function(){ _this.editNode.setActive(); };
+                       }
+               }
+               this.focusNode = this.editNode; // for InlineEditBox
+
+
+               var events = this.events.concat(this.captureEvents);
+               var ap = this.iframe ? this.document : this.editNode;
+               dojo.forEach(events, function(item){
+                       this.connect(ap, item.toLowerCase(), item);
+               }, this);
+
+               this.connect(ap, "onmouseup", "onClick"); // mouseup in the margin does not generate an onclick event
+
+               if(dojo.isIE){ // IE contentEditable
+                       this.connect(this.document, "onmousedown", "_onIEMouseDown"); // #4996 fix focus
+
+                       // give the node Layout on IE
+                       // TODO: this may no longer be needed, since we've reverted IE to using an iframe,
+                       // not contentEditable.   Removing it would also probably remove the need for creating
+                       // the extra <div> in _getIframeDocTxt()
+                       this.editNode.style.zoom = 1.0;
+               }else{
+                       this.connect(this.document, "onmousedown", function(){
+                               // Clear the moveToStart focus, as mouse
+                               // down will set cursor point.  Required to properly
+                               // work with selection/position driven plugins and clicks in
+                               // the window. refs: #10678
+                               delete this._cursorToStart;
+                       });
+               }
+               
+               if(dojo.isWebKit){
+                       //WebKit sometimes doesn't fire right on selections, so the toolbar
+                       //doesn't update right.  Therefore, help it out a bit with an additional
+                       //listener.  A mouse up will typically indicate a display change, so fire this
+                       //and get the toolbar to adapt.  Reference: #9532
+                       this._webkitListener = this.connect(this.document, "onmouseup", "onDisplayChanged");
+                       this.connect(this.document, "onmousedown", function(e){
+                               var t = e.target;
+                               if(t && (t === this.document.body || t === this.document)){
+                                       // Since WebKit uses the inner DIV, we need to check and set position.
+                                       // See: #12024 as to why the change was made.
+                                       setTimeout(dojo.hitch(this, "placeCursorAtEnd"), 0);
+                               }
+                       });
+               }
+               
+               if(dojo.isIE){
+                       // Try to make sure 'hidden' elements aren't visible in edit mode (like browsers other than IE
+                       // do).  See #9103
+                       try{
+                               this.document.execCommand('RespectVisibilityInDesign', true, null);
+                       }catch(e){/* squelch */}
+               }
+
+               this.isLoaded = true;
+
+               this.set('disabled', this.disabled); // initialize content to editable (or not)
+
+               // Note that setValue() call will only work after isLoaded is set to true (above)
+
+               // Set up a function to allow delaying the setValue until a callback is fired
+               // This ensures extensions like dijit.Editor have a way to hold the value set
+               // until plugins load (and do things like register filters).
+               var setContent = dojo.hitch(this, function(){
+                       this.setValue(html);
+                       if(this.onLoadDeferred){
+                               this.onLoadDeferred.callback(true);
+                       }
+                       this.onDisplayChanged();
+                       if(this.focusOnLoad){
+                               // after the document loads, then set focus after updateInterval expires so that
+                               // onNormalizedDisplayChanged has run to avoid input caret issues
+                               dojo.addOnLoad(dojo.hitch(this, function(){ setTimeout(dojo.hitch(this, "focus"), this.updateInterval); }));
+                       }
+                       // Save off the initial content now
+                       this.value = this.getValue(true);
+               });
+               if(this.setValueDeferred){
+                       this.setValueDeferred.addCallback(setContent);
+               }else{
+                       setContent();
+               }
+       },
+
+       onKeyDown: function(/* Event */ e){
+               // summary:
+               //              Handler for onkeydown event
+               // tags:
+               //              protected
+
+               // we need this event at the moment to get the events from control keys
+               // such as the backspace. It might be possible to add this to Dojo, so that
+               // keyPress events can be emulated by the keyDown and keyUp detection.
+
+               if(e.keyCode === dojo.keys.TAB && this.isTabIndent ){
+                       dojo.stopEvent(e); //prevent tab from moving focus out of editor
+
+                       // FIXME: this is a poor-man's indent/outdent. It would be
+                       // better if it added 4 "&nbsp;" chars in an undoable way.
+                       // Unfortunately pasteHTML does not prove to be undoable
+                       if(this.queryCommandEnabled((e.shiftKey ? "outdent" : "indent"))){
+                               this.execCommand((e.shiftKey ? "outdent" : "indent"));
+                       }
+               }
+               if(dojo.isIE){
+                       if(e.keyCode == dojo.keys.TAB && !this.isTabIndent){
+                               if(e.shiftKey && !e.ctrlKey && !e.altKey){
+                                       // focus the BODY so the browser will tab away from it instead
+                                       this.iframe.focus();
+                               }else if(!e.shiftKey && !e.ctrlKey && !e.altKey){
+                                       // focus the BODY so the browser will tab away from it instead
+                                       this.tabStop.focus();
+                               }
+                       }else if(e.keyCode === dojo.keys.BACKSPACE && this.document.selection.type === "Control"){
+                               // IE has a bug where if a non-text object is selected in the editor,
+                               // hitting backspace would act as if the browser's back button was
+                               // clicked instead of deleting the object. see #1069
+                               dojo.stopEvent(e);
+                               this.execCommand("delete");
+                       }else if((65 <= e.keyCode && e.keyCode <= 90) ||
+                               (e.keyCode>=37 && e.keyCode<=40) // FIXME: get this from connect() instead!
+                       ){ //arrow keys
+                               e.charCode = e.keyCode;
+                               this.onKeyPress(e);
+                       }
+               }
+               return true;
+       },
+
+       onKeyUp: function(e){
+               // summary:
+               //              Handler for onkeyup event
+               // tags:
+               //      callback
+               return;
+       },
+
+       setDisabled: function(/*Boolean*/ disabled){
+               // summary:
+               //              Deprecated, use set('disabled', ...) instead.
+               // tags:
+               //              deprecated
+               dojo.deprecated('dijit.Editor::setDisabled is deprecated','use dijit.Editor::attr("disabled",boolean) instead', 2.0);
+               this.set('disabled',disabled);
+       },
+       _setValueAttr: function(/*String*/ value){
+               // summary:
+               //      Registers that attr("value", foo) should call setValue(foo)
+               this.setValue(value);
+       },
+       _setDisableSpellCheckAttr: function(/*Boolean*/ disabled){
+               if(this.document){
+                       dojo.attr(this.document.body, "spellcheck", !disabled);
+               }else{
+                       // try again after the editor is finished loading
+                       this.onLoadDeferred.addCallback(dojo.hitch(this, function(){
+                               dojo.attr(this.document.body, "spellcheck", !disabled);
+                       }));
+               }
+               this._set("disableSpellCheck", disabled);
+       },
+
+       onKeyPress: function(e){
+               // summary:
+               //              Handle the various key events
+               // tags:
+               //              protected
+
+               var c = (e.keyChar && e.keyChar.toLowerCase()) || e.keyCode,
+                       handlers = this._keyHandlers[c],
+                       args = arguments;
+
+               if(handlers && !e.altKey){
+                       dojo.some(handlers, function(h){
+                               // treat meta- same as ctrl-, for benefit of mac users
+                               if(!(h.shift ^ e.shiftKey) && !(h.ctrl ^ (e.ctrlKey||e.metaKey))){
+                                       if(!h.handler.apply(this, args)){
+                                               e.preventDefault();
+                                       }
+                                       return true;
+                               }
+                       }, this);
+               }
+
+               // function call after the character has been inserted
+               if(!this._onKeyHitch){
+                       this._onKeyHitch = dojo.hitch(this, "onKeyPressed");
+               }
+               setTimeout(this._onKeyHitch, 1);
+               return true;
+       },
+
+       addKeyHandler: function(/*String*/ key, /*Boolean*/ ctrl, /*Boolean*/ shift, /*Function*/ handler){
+               // summary:
+               //              Add a handler for a keyboard shortcut
+               // description:
+               //              The key argument should be in lowercase if it is a letter character
+               // tags:
+               //              protected
+               if(!dojo.isArray(this._keyHandlers[key])){
+                       this._keyHandlers[key] = [];
+               }
+               //TODO: would be nice to make this a hash instead of an array for quick lookups
+               this._keyHandlers[key].push({
+                       shift: shift || false,
+                       ctrl: ctrl || false,
+                       handler: handler
+               });
+       },
+
+       onKeyPressed: function(){
+               // summary:
+               //              Handler for after the user has pressed a key, and the display has been updated.
+               //              (Runs on a timer so that it runs after the display is updated)
+               // tags:
+               //              private
+               this.onDisplayChanged(/*e*/); // can't pass in e
+       },
+
+       onClick: function(/*Event*/ e){
+               // summary:
+               //              Handler for when the user clicks.
+               // tags:
+               //              private
+
+               // console.info('onClick',this._tryDesignModeOn);
+               this.onDisplayChanged(e);
+       },
+
+       _onIEMouseDown: function(/*Event*/ e){
+               // summary:
+               //              IE only to prevent 2 clicks to focus
+               // tags:
+               //              protected
+
+               if(!this._focused && !this.disabled){
+                       this.focus();
+               }
+       },
+
+       _onBlur: function(e){
+               // summary:
+               //              Called from focus manager when focus has moved away from this editor
+               // tags:
+               //              protected
+
+               // console.info('_onBlur')
+
+               this.inherited(arguments);
+
+               var newValue = this.getValue(true);
+               if(newValue != this.value){
+                       this.onChange(newValue);
+               }
+               this._set("value", newValue);
+       },
+
+       _onFocus: function(/*Event*/ e){
+               // summary:
+               //              Called from focus manager when focus has moved into this editor
+               // tags:
+               //              protected
+
+               // console.info('_onFocus')
+               if(!this.disabled){
+                       if(!this._disabledOK){
+                               this.set('disabled', false);
+                       }
+                       this.inherited(arguments);
+               }
+       },
+
+       // TODO: remove in 2.0
+       blur: function(){
+               // summary:
+               //              Remove focus from this instance.
+               // tags:
+               //              deprecated
+               if(!dojo.isIE && this.window.document.documentElement && this.window.document.documentElement.focus){
+                       this.window.document.documentElement.focus();
+               }else if(dojo.doc.body.focus){
+                       dojo.doc.body.focus();
+               }
+       },
+
+       focus: function(){
+               // summary:
+               //              Move focus to this editor
+               if(!this.isLoaded){
+                       this.focusOnLoad = true;
+                       return;
+               }
+               if(this._cursorToStart){
+                       delete this._cursorToStart;
+                       if(this.editNode.childNodes){
+                               this.placeCursorAtStart(); // this calls focus() so return
+                               return;
+                       }
+               }
+               if(!dojo.isIE){
+                       dijit.focus(this.iframe);
+               }else if(this.editNode && this.editNode.focus){
+                       // editNode may be hidden in display:none div, lets just punt in this case
+                       //this.editNode.focus(); -> causes IE to scroll always (strict and quirks mode) to the top the Iframe
+                       // if we fire the event manually and let the browser handle the focusing, the latest
+                       // cursor position is focused like in FF
+                       this.iframe.fireEvent('onfocus', document.createEventObject()); // createEventObject only in IE
+               //      }else{
+               // TODO: should we throw here?
+               // console.debug("Have no idea how to focus into the editor!");
+               }
+       },
+
+       // _lastUpdate: 0,
+       updateInterval: 200,
+       _updateTimer: null,
+       onDisplayChanged: function(/*Event*/ e){
+               // summary:
+               //              This event will be fired everytime the display context
+               //              changes and the result needs to be reflected in the UI.
+               // description:
+               //              If you don't want to have update too often,
+               //              onNormalizedDisplayChanged should be used instead
+               // tags:
+               //              private
+
+               // var _t=new Date();
+               if(this._updateTimer){
+                       clearTimeout(this._updateTimer);
+               }
+               if(!this._updateHandler){
+                       this._updateHandler = dojo.hitch(this,"onNormalizedDisplayChanged");
+               }
+               this._updateTimer = setTimeout(this._updateHandler, this.updateInterval);
+               
+               // Technically this should trigger a call to watch("value", ...) registered handlers,
+               // but getValue() is too slow to call on every keystroke so we don't.
+       },
+       onNormalizedDisplayChanged: function(){
+               // summary:
+               //              This event is fired every updateInterval ms or more
+               // description:
+               //              If something needs to happen immediately after a
+               //              user change, please use onDisplayChanged instead.
+               // tags:
+               //              private
+               delete this._updateTimer;
+       },
+       onChange: function(newContent){
+               // summary:
+               //              This is fired if and only if the editor loses focus and
+               //              the content is changed.
+       },
+       _normalizeCommand: function(/*String*/ cmd, /*Anything?*/argument){
+               // summary:
+               //              Used as the advice function by dojo.connect to map our
+               //              normalized set of commands to those supported by the target
+               //              browser.
+               // tags:
+               //              private
+
+               var command = cmd.toLowerCase();
+               if(command == "formatblock"){
+                       if(dojo.isSafari && argument === undefined){ command = "heading"; }
+               }else if(command == "hilitecolor" && !dojo.isMoz){
+                       command = "backcolor";
+               }
+
+               return command;
+       },
+
+       _qcaCache: {},
+       queryCommandAvailable: function(/*String*/ command){
+               // summary:
+               //              Tests whether a command is supported by the host. Clients
+               //              SHOULD check whether a command is supported before attempting
+               //              to use it, behaviour for unsupported commands is undefined.
+               // command:
+               //              The command to test for
+               // tags:
+               //              private
+
+               // memoizing version. See _queryCommandAvailable for computing version
+               var ca = this._qcaCache[command];
+               if(ca !== undefined){ return ca; }
+               return (this._qcaCache[command] = this._queryCommandAvailable(command));
+       },
+
+       _queryCommandAvailable: function(/*String*/ command){
+               // summary:
+               //              See queryCommandAvailable().
+               // tags:
+               //              private
+
+               var ie = 1;
+               var mozilla = 1 << 1;
+               var webkit = 1 << 2;
+               var opera = 1 << 3;
+
+               function isSupportedBy(browsers){
+                       return {
+                               ie: Boolean(browsers & ie),
+                               mozilla: Boolean(browsers & mozilla),
+                               webkit: Boolean(browsers & webkit),
+                               opera: Boolean(browsers & opera)
+                       };
+               }
+
+               var supportedBy = null;
+
+               switch(command.toLowerCase()){
+                       case "bold": case "italic": case "underline":
+                       case "subscript": case "superscript":
+                       case "fontname": case "fontsize":
+                       case "forecolor": case "hilitecolor":
+                       case "justifycenter": case "justifyfull": case "justifyleft":
+                       case "justifyright": case "delete": case "selectall": case "toggledir":
+                               supportedBy = isSupportedBy(mozilla | ie | webkit | opera);
+                               break;
+
+                       case "createlink": case "unlink": case "removeformat":
+                       case "inserthorizontalrule": case "insertimage":
+                       case "insertorderedlist": case "insertunorderedlist":
+                       case "indent": case "outdent": case "formatblock":
+                       case "inserthtml": case "undo": case "redo": case "strikethrough": case "tabindent":
+                               supportedBy = isSupportedBy(mozilla | ie | opera | webkit);
+                               break;
+
+                       case "blockdirltr": case "blockdirrtl":
+                       case "dirltr": case "dirrtl":
+                       case "inlinedirltr": case "inlinedirrtl":
+                               supportedBy = isSupportedBy(ie);
+                               break;
+                       case "cut": case "copy": case "paste":
+                               supportedBy = isSupportedBy( ie | mozilla | webkit);
+                               break;
+
+                       case "inserttable":
+                               supportedBy = isSupportedBy(mozilla | ie);
+                               break;
+
+                       case "insertcell": case "insertcol": case "insertrow":
+                       case "deletecells": case "deletecols": case "deleterows":
+                       case "mergecells": case "splitcell":
+                               supportedBy = isSupportedBy(ie | mozilla);
+                               break;
+
+                       default: return false;
+               }
+
+               return (dojo.isIE && supportedBy.ie) ||
+                       (dojo.isMoz && supportedBy.mozilla) ||
+                       (dojo.isWebKit && supportedBy.webkit) ||
+                       (dojo.isOpera && supportedBy.opera);    // Boolean return true if the command is supported, false otherwise
+       },
+
+       execCommand: function(/*String*/ command, argument){
+               // summary:
+               //              Executes a command in the Rich Text area
+               // command:
+               //              The command to execute
+               // argument:
+               //              An optional argument to the command
+               // tags:
+               //              protected
+               var returnValue;
+
+               //focus() is required for IE to work
+               //In addition, focus() makes sure after the execution of
+               //the command, the editor receives the focus as expected
+               this.focus();
+
+               command = this._normalizeCommand(command, argument);
+
+               if(argument !== undefined){
+                       if(command == "heading"){
+                               throw new Error("unimplemented");
+                       }else if((command == "formatblock") && dojo.isIE){
+                               argument = '<'+argument+'>';
+                       }
+               }
+
+               //Check to see if we have any over-rides for commands, they will be functions on this
+               //widget of the form _commandImpl.  If we don't, fall through to the basic native
+               //exec command of the browser.
+               var implFunc = "_" + command + "Impl";
+               if(this[implFunc]){
+                       returnValue = this[implFunc](argument);
+               }else{
+                       argument = arguments.length > 1 ? argument : null;
+                       if(argument || command!="createlink"){
+                               returnValue = this.document.execCommand(command, false, argument);
+                       }
+               }
+
+               this.onDisplayChanged();
+               return returnValue;
+       },
+
+       queryCommandEnabled: function(/*String*/ command){
+               // summary:
+               //              Check whether a command is enabled or not.
+               // tags:
+               //              protected
+               if(this.disabled || !this._disabledOK){ return false; }
+               command = this._normalizeCommand(command);
+               if(dojo.isMoz || dojo.isWebKit){
+                       if(command == "unlink"){ // mozilla returns true always
+                               // console.debug(this._sCall("hasAncestorElement", ['a']));
+                               return this._sCall("hasAncestorElement", ["a"]);
+                       }else if(command == "inserttable"){
+                               return true;
+                       }
+               }
+               //see #4109
+               if(dojo.isWebKit){
+                       if(command == "cut" || command == "copy") {
+                               // WebKit deems clipboard activity as a security threat and natively would return false
+                               var sel = this.window.getSelection();
+                               if(sel){ sel = sel.toString(); }
+                               return !!sel;
+                       }else if(command == "paste"){
+                               return true;
+                       }
+               }
+
+               var elem = dojo.isIE ? this.document.selection.createRange() : this.document;
+               try{
+                       return elem.queryCommandEnabled(command);
+               }catch(e){
+                       //Squelch, occurs if editor is hidden on FF 3 (and maybe others.)
+                       return false;
+               }
+
+       },
+
+       queryCommandState: function(command){
+               // summary:
+               //              Check the state of a given command and returns true or false.
+               // tags:
+               //              protected
+
+               if(this.disabled || !this._disabledOK){ return false; }
+               command = this._normalizeCommand(command);
+               try{
+                       return this.document.queryCommandState(command);
+               }catch(e){
+                       //Squelch, occurs if editor is hidden on FF 3 (and maybe others.)
+                       return false;
+               }
+       },
+
+       queryCommandValue: function(command){
+               // summary:
+               //              Check the value of a given command. This matters most for
+               //              custom selections and complex values like font value setting.
+               // tags:
+               //              protected
+
+               if(this.disabled || !this._disabledOK){ return false; }
+               var r;
+               command = this._normalizeCommand(command);
+               if(dojo.isIE && command == "formatblock"){
+                       r = this._native2LocalFormatNames[this.document.queryCommandValue(command)];
+               }else if(dojo.isMoz && command === "hilitecolor"){
+                       var oldValue;
+                       try{
+                               oldValue = this.document.queryCommandValue("styleWithCSS");
+                       }catch(e){
+                               oldValue = false;
+                       }
+                       this.document.execCommand("styleWithCSS", false, true);
+                       r = this.document.queryCommandValue(command);
+                       this.document.execCommand("styleWithCSS", false, oldValue);
+               }else{
+                       r = this.document.queryCommandValue(command);
+               }
+               return r;
+       },
+
+       // Misc.
+
+       _sCall: function(name, args){
+               // summary:
+               //              Run the named method of dijit._editor.selection over the
+               //              current editor instance's window, with the passed args.
+               // tags:
+               //              private
+               return dojo.withGlobal(this.window, name, dijit._editor.selection, args);
+       },
+
+       // FIXME: this is a TON of code duplication. Why?
+
+       placeCursorAtStart: function(){
+               // summary:
+               //              Place the cursor at the start of the editing area.
+               // tags:
+               //              private
+
+               this.focus();
+
+               //see comments in placeCursorAtEnd
+               var isvalid=false;
+               if(dojo.isMoz){
+                       // TODO:  Is this branch even necessary?
+                       var first=this.editNode.firstChild;
+                       while(first){
+                               if(first.nodeType == 3){
+                                       if(first.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
+                                               isvalid=true;
+                                               this._sCall("selectElement", [ first ]);
+                                               break;
+                                       }
+                               }else if(first.nodeType == 1){
+                                       isvalid=true;
+                                       var tg = first.tagName ? first.tagName.toLowerCase() : "";
+                                       // Collapse before childless tags.
+                                       if(/br|input|img|base|meta|area|basefont|hr|link/.test(tg)){
+                                               this._sCall("selectElement", [ first ]);
+                                       }else{
+                                               // Collapse inside tags with children.
+                                               this._sCall("selectElementChildren", [ first ]);
+                                       }
+                                       break;
+                               }
+                               first = first.nextSibling;
+                       }
+               }else{
+                       isvalid=true;
+                       this._sCall("selectElementChildren", [ this.editNode ]);
+               }
+               if(isvalid){
+                       this._sCall("collapse", [ true ]);
+               }
+       },
+
+       placeCursorAtEnd: function(){
+               // summary:
+               //              Place the cursor at the end of the editing area.
+               // tags:
+               //              private
+
+               this.focus();
+
+               //In mozilla, if last child is not a text node, we have to use
+               // selectElementChildren on this.editNode.lastChild otherwise the
+               // cursor would be placed at the end of the closing tag of
+               //this.editNode.lastChild
+               var isvalid=false;
+               if(dojo.isMoz){
+                       var last=this.editNode.lastChild;
+                       while(last){
+                               if(last.nodeType == 3){
+                                       if(last.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
+                                               isvalid=true;
+                                               this._sCall("selectElement", [ last ]);
+                                               break;
+                                       }
+                               }else if(last.nodeType == 1){
+                                       isvalid=true;
+                                       if(last.lastChild){
+                                               this._sCall("selectElement", [ last.lastChild ]);
+                                       }else{
+                                               this._sCall("selectElement", [ last ]);
+                                       }
+                                       break;
+                               }
+                               last = last.previousSibling;
+                       }
+               }else{
+                       isvalid=true;
+                       this._sCall("selectElementChildren", [ this.editNode ]);
+               }
+               if(isvalid){
+                       this._sCall("collapse", [ false ]);
+               }
+       },
+
+       getValue: function(/*Boolean?*/ nonDestructive){
+               // summary:
+               //              Return the current content of the editing area (post filters
+               //              are applied).  Users should call get('value') instead.
+               //      nonDestructive:
+               //              defaults to false. Should the post-filtering be run over a copy
+               //              of the live DOM? Most users should pass "true" here unless they
+               //              *really* know that none of the installed filters are going to
+               //              mess up the editing session.
+               // tags:
+               //              private
+               if(this.textarea){
+                       if(this.isClosed || !this.isLoaded){
+                               return this.textarea.value;
+                       }
+               }
+
+               return this._postFilterContent(null, nonDestructive);
+       },
+       _getValueAttr: function(){
+               // summary:
+               //              Hook to make attr("value") work
+               return this.getValue(true);
+       },
+
+       setValue: function(/*String*/ html){
+               // summary:
+               //              This function sets the content. No undo history is preserved.
+               //              Users should use set('value', ...) instead.
+               // tags:
+               //              deprecated
+
+               // TODO: remove this and getValue() for 2.0, and move code to _setValueAttr()
+
+               if(!this.isLoaded){
+                       // try again after the editor is finished loading
+                       this.onLoadDeferred.addCallback(dojo.hitch(this, function(){
+                               this.setValue(html);
+                       }));
+                       return;
+               }
+               this._cursorToStart = true;
+               if(this.textarea && (this.isClosed || !this.isLoaded)){
+                       this.textarea.value=html;
+               }else{
+                       html = this._preFilterContent(html);
+                       var node = this.isClosed ? this.domNode : this.editNode;
+                       if(html && dojo.isMoz && html.toLowerCase() == "<p></p>"){
+                               html = "<p>&nbsp;</p>";
+                       }
+
+                       // Use &nbsp; to avoid webkit problems where editor is disabled until the user clicks it
+                       if(!html && dojo.isWebKit){
+                               html = "&nbsp;";
+                       }
+                       node.innerHTML = html;
+                       this._preDomFilterContent(node);
+               }
+
+               this.onDisplayChanged();
+               this._set("value", this.getValue(true));
+       },
+
+       replaceValue: function(/*String*/ html){
+               // summary:
+               //              This function set the content while trying to maintain the undo stack
+               //              (now only works fine with Moz, this is identical to setValue in all
+               //              other browsers)
+               // tags:
+               //              protected
+
+               if(this.isClosed){
+                       this.setValue(html);
+               }else if(this.window && this.window.getSelection && !dojo.isMoz){ // Safari
+                       // look ma! it's a totally f'd browser!
+                       this.setValue(html);
+               }else if(this.window && this.window.getSelection){ // Moz
+                       html = this._preFilterContent(html);
+                       this.execCommand("selectall");
+                       if(!html){
+                               this._cursorToStart = true;
+                               html = "&nbsp;";
+                       }
+                       this.execCommand("inserthtml", html);
+                       this._preDomFilterContent(this.editNode);
+               }else if(this.document && this.document.selection){//IE
+                       //In IE, when the first element is not a text node, say
+                       //an <a> tag, when replacing the content of the editing
+                       //area, the <a> tag will be around all the content
+                       //so for now, use setValue for IE too
+                       this.setValue(html);
+               }
+
+               this._set("value", this.getValue(true));
+       },
+
+       _preFilterContent: function(/*String*/ html){
+               // summary:
+               //              Filter the input before setting the content of the editing
+               //              area. DOM pre-filtering may happen after this
+               //              string-based filtering takes place but as of 1.2, this is not
+               //              guaranteed for operations such as the inserthtml command.
+               // tags:
+               //              private
+
+               var ec = html;
+               dojo.forEach(this.contentPreFilters, function(ef){ if(ef){ ec = ef(ec); } });
+               return ec;
+       },
+       _preDomFilterContent: function(/*DomNode*/ dom){
+               // summary:
+               //              filter the input's live DOM. All filter operations should be
+               //              considered to be "live" and operating on the DOM that the user
+               //              will be interacting with in their editing session.
+               // tags:
+               //              private
+               dom = dom || this.editNode;
+               dojo.forEach(this.contentDomPreFilters, function(ef){
+                       if(ef && dojo.isFunction(ef)){
+                               ef(dom);
+                       }
+               }, this);
+       },
+
+       _postFilterContent: function(
+               /*DomNode|DomNode[]|String?*/ dom,
+               /*Boolean?*/ nonDestructive){
+               // summary:
+               //              filter the output after getting the content of the editing area
+               //
+               // description:
+               //              post-filtering allows plug-ins and users to specify any number
+               //              of transforms over the editor's content, enabling many common
+               //              use-cases such as transforming absolute to relative URLs (and
+               //              vice-versa), ensuring conformance with a particular DTD, etc.
+               //              The filters are registered in the contentDomPostFilters and
+               //              contentPostFilters arrays. Each item in the
+               //              contentDomPostFilters array is a function which takes a DOM
+               //              Node or array of nodes as its only argument and returns the
+               //              same. It is then passed down the chain for further filtering.
+               //              The contentPostFilters array behaves the same way, except each
+               //              member operates on strings. Together, the DOM and string-based
+               //              filtering allow the full range of post-processing that should
+               //              be necessaray to enable even the most agressive of post-editing
+               //              conversions to take place.
+               //
+               //              If nonDestructive is set to "true", the nodes are cloned before
+               //              filtering proceeds to avoid potentially destructive transforms
+               //              to the content which may still needed to be edited further.
+               //              Once DOM filtering has taken place, the serialized version of
+               //              the DOM which is passed is run through each of the
+               //              contentPostFilters functions.
+               //
+               //      dom:
+               //              a node, set of nodes, which to filter using each of the current
+               //              members of the contentDomPostFilters and contentPostFilters arrays.
+               //
+               //      nonDestructive:
+               //              defaults to "false". If true, ensures that filtering happens on
+               //              a clone of the passed-in content and not the actual node
+               //              itself.
+               //
+               // tags:
+               //              private
+
+               var ec;
+               if(!dojo.isString(dom)){
+                       dom = dom || this.editNode;
+                       if(this.contentDomPostFilters.length){
+                               if(nonDestructive){
+                                       dom = dojo.clone(dom);
+                               }
+                               dojo.forEach(this.contentDomPostFilters, function(ef){
+                                       dom = ef(dom);
+                               });
+                       }
+                       ec = dijit._editor.getChildrenHtml(dom);
+               }else{
+                       ec = dom;
+               }
+
+               if(!dojo.trim(ec.replace(/^\xA0\xA0*/, '').replace(/\xA0\xA0*$/, '')).length){
+                       ec = "";
+               }
+
+               //      if(dojo.isIE){
+               //              //removing appended <P>&nbsp;</P> for IE
+               //              ec = ec.replace(/(?:<p>&nbsp;</p>[\n\r]*)+$/i,"");
+               //      }
+               dojo.forEach(this.contentPostFilters, function(ef){
+                       ec = ef(ec);
+               });
+
+               return ec;
+       },
+
+       _saveContent: function(/*Event*/ e){
+               // summary:
+               //              Saves the content in an onunload event if the editor has not been closed
+               // tags:
+               //              private
+
+               var saveTextarea = dojo.byId(dijit._scopeName + "._editor.RichText.value");
+               if(saveTextarea.value){
+                       saveTextarea.value += this._SEPARATOR;
+               }
+               saveTextarea.value += this.name + this._NAME_CONTENT_SEP + this.getValue(true);
+       },
+
+
+       escapeXml: function(/*String*/ str, /*Boolean*/ noSingleQuotes){
+               // summary:
+               //              Adds escape sequences for special characters in XML.
+               //              Optionally skips escapes for single quotes
+               // tags:
+               //              private
+
+               str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
+               if(!noSingleQuotes){
+                       str = str.replace(/'/gm, "&#39;");
+               }
+               return str; // string
+       },
+
+       getNodeHtml: function(/* DomNode */ node){
+               // summary:
+               //              Deprecated.   Use dijit._editor._getNodeHtml() instead.
+               // tags:
+               //              deprecated
+               dojo.deprecated('dijit.Editor::getNodeHtml is deprecated','use dijit._editor.getNodeHtml instead', 2);
+               return dijit._editor.getNodeHtml(node); // String
+       },
+
+       getNodeChildrenHtml: function(/* DomNode */ dom){
+               // summary:
+               //              Deprecated.   Use dijit._editor.getChildrenHtml() instead.
+               // tags:
+               //              deprecated
+               dojo.deprecated('dijit.Editor::getNodeChildrenHtml is deprecated','use dijit._editor.getChildrenHtml instead', 2);
+               return dijit._editor.getChildrenHtml(dom);
+       },
+
+       close: function(/*Boolean?*/ save){
+               // summary:
+               //              Kills the editor and optionally writes back the modified contents to the
+               //              element from which it originated.
+               // save:
+               //              Whether or not to save the changes. If false, the changes are discarded.
+               // tags:
+               //              private
+
+               if(this.isClosed){ return; }
+
+               if(!arguments.length){ save = true; }
+               if(save){
+                       this._set("value", this.getValue(true));
+               }
+
+               // line height is squashed for iframes
+               // FIXME: why was this here? if (this.iframe){ this.domNode.style.lineHeight = null; }
+
+               if(this.interval){ clearInterval(this.interval); }
+
+               if(this._webkitListener){
+                       //Cleaup of WebKit fix: #9532
+                       this.disconnect(this._webkitListener);
+                       delete this._webkitListener;
+               }
+
+               // Guard against memory leaks on IE (see #9268)
+               if(dojo.isIE){
+                        this.iframe.onfocus = null;
+               }
+               this.iframe._loadFunc = null;
+
+               if(this._iframeRegHandle){
+                       dijit.unregisterIframe(this._iframeRegHandle);
+                       delete this._iframeRegHandle;
+               }
+
+               if(this.textarea){
+                       var s = this.textarea.style;
+                       s.position = "";
+                       s.left = s.top = "";
+                       if(dojo.isIE){
+                               s.overflow = this.__overflow;
+                               this.__overflow = null;
+                       }
+                       this.textarea.value = this.value;
+                       dojo.destroy(this.domNode);
+                       this.domNode = this.textarea;
+               }else{
+                       // Note that this destroys the iframe
+                       this.domNode.innerHTML = this.value;
+               }
+               delete this.iframe;
+
+               dojo.removeClass(this.domNode, this.baseClass);
+               this.isClosed = true;
+               this.isLoaded = false;
+
+               delete this.editNode;
+               delete this.focusNode;
+
+               if(this.window && this.window._frameElement){
+                       this.window._frameElement = null;
+               }
+
+               this.window = null;
+               this.document = null;
+               this.editingArea = null;
+               this.editorObject = null;
+       },
+
+       destroy: function(){
+               if(!this.isClosed){ this.close(false); }
+               this.inherited(arguments);
+               if(dijit._editor._globalSaveHandler){
+                       delete dijit._editor._globalSaveHandler[this.id];
+               }
+       },
+
+       _removeMozBogus: function(/* String */ html){
+               // summary:
+               //              Post filter to remove unwanted HTML attributes generated by mozilla
+               // tags:
+               //              private
+               return html.replace(/\stype="_moz"/gi, '').replace(/\s_moz_dirty=""/gi, '').replace(/_moz_resizing="(true|false)"/gi,''); // String
+       },
+       _removeWebkitBogus: function(/* String */ html){
+               // summary:
+               //              Post filter to remove unwanted HTML attributes generated by webkit
+               // tags:
+               //              private
+               html = html.replace(/\sclass="webkit-block-placeholder"/gi, '');
+               html = html.replace(/\sclass="apple-style-span"/gi, '');
+               // For some reason copy/paste sometime adds extra meta tags for charset on
+               // webkit (chrome) on mac.They need to be removed.  See: #12007"
+               html = html.replace(/<meta charset=\"utf-8\" \/>/gi, '');
+               return html; // String
+       },
+       _normalizeFontStyle: function(/* String */ html){
+               // summary:
+               //              Convert 'strong' and 'em' to 'b' and 'i'.
+               // description:
+               //              Moz can not handle strong/em tags correctly, so to help
+               //              mozilla and also to normalize output, convert them to 'b' and 'i'.
+               //
+               //              Note the IE generates 'strong' and 'em' rather than 'b' and 'i'
+               // tags:
+               //              private
+               return html.replace(/<(\/)?strong([ \>])/gi, '<$1b$2')
+                       .replace(/<(\/)?em([ \>])/gi, '<$1i$2' ); // String
+       },
+
+       _preFixUrlAttributes: function(/* String */ html){
+               // summary:
+               //              Pre-filter to do fixing to href attributes on <a> and <img> tags
+               // tags:
+               //              private
+               return html.replace(/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,
+                               '$1$4$2$3$5$2 _djrealurl=$2$3$5$2')
+                       .replace(/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,
+                               '$1$4$2$3$5$2 _djrealurl=$2$3$5$2'); // String
+       },
+
+       /*****************************************************************************
+               The following functions implement HTML manipulation commands for various
+               browser/contentEditable implementations.  The goal of them is to enforce
+               standard behaviors of them.
+       ******************************************************************************/
+
+       _inserthorizontalruleImpl: function(argument){
+               // summary:
+               //              This function implements the insertion of HTML 'HR' tags.
+               //              into a point on the page.  IE doesn't to it right, so
+               //              we have to use an alternate form
+               // argument:
+               //              arguments to the exec command, if any.
+               // tags:
+               //              protected
+               if(dojo.isIE){
+                       return this._inserthtmlImpl("<hr>");
+               }
+               return this.document.execCommand("inserthorizontalrule", false, argument);
+       },
+
+       _unlinkImpl: function(argument){
+               // summary:
+               //              This function implements the unlink of an 'a' tag.
+               // argument:
+               //              arguments to the exec command, if any.
+               // tags:
+               //              protected
+               if((this.queryCommandEnabled("unlink")) && (dojo.isMoz || dojo.isWebKit)){
+                       var a = this._sCall("getAncestorElement", [ "a" ]);
+                       this._sCall("selectElement", [ a ]);
+                       return this.document.execCommand("unlink", false, null);
+               }
+               return this.document.execCommand("unlink", false, argument);
+       },
+
+       _hilitecolorImpl: function(argument){
+               // summary:
+               //              This function implements the hilitecolor command
+               // argument:
+               //              arguments to the exec command, if any.
+               // tags:
+               //              protected
+               var returnValue;
+               if(dojo.isMoz){
+                       // mozilla doesn't support hilitecolor properly when useCSS is
+                       // set to false (bugzilla #279330)
+                       this.document.execCommand("styleWithCSS", false, true);
+                       returnValue = this.document.execCommand("hilitecolor", false, argument);
+                       this.document.execCommand("styleWithCSS", false, false);
+               }else{
+                       returnValue = this.document.execCommand("hilitecolor", false, argument);
+               }
+               return returnValue;
+       },
+
+       _backcolorImpl: function(argument){
+               // summary:
+               //              This function implements the backcolor command
+               // argument:
+               //              arguments to the exec command, if any.
+               // tags:
+               //              protected
+               if(dojo.isIE){
+                       // Tested under IE 6 XP2, no problem here, comment out
+                       // IE weirdly collapses ranges when we exec these commands, so prevent it
+                       //      var tr = this.document.selection.createRange();
+                       argument = argument ? argument : null;
+               }
+               return this.document.execCommand("backcolor", false, argument);
+       },
+
+       _forecolorImpl: function(argument){
+               // summary:
+               //              This function implements the forecolor command
+               // argument:
+               //              arguments to the exec command, if any.
+               // tags:
+               //              protected
+               if(dojo.isIE){
+                       // Tested under IE 6 XP2, no problem here, comment out
+                       // IE weirdly collapses ranges when we exec these commands, so prevent it
+                       //      var tr = this.document.selection.createRange();
+                       argument = argument? argument : null;
+               }
+               return this.document.execCommand("forecolor", false, argument);
+       },
+
+       _inserthtmlImpl: function(argument){
+               // summary:
+               //              This function implements the insertion of HTML content into
+               //              a point on the page.
+               // argument:
+               //              The content to insert, if any.
+               // tags:
+               //              protected
+               argument = this._preFilterContent(argument);
+               var rv = true;
+               if(dojo.isIE){
+                       var insertRange = this.document.selection.createRange();
+                       if(this.document.selection.type.toUpperCase() == 'CONTROL'){
+                               var n=insertRange.item(0);
+                               while(insertRange.length){
+                                       insertRange.remove(insertRange.item(0));
+                               }
+                               n.outerHTML=argument;
+                       }else{
+                               insertRange.pasteHTML(argument);
+                       }
+                       insertRange.select();
+                       //insertRange.collapse(true);
+               }else if(dojo.isMoz && !argument.length){
+                       //mozilla can not inserthtml an empty html to delete current selection
+                       //so we delete the selection instead in this case
+                       this._sCall("remove"); // FIXME
+               }else{
+                       rv = this.document.execCommand("inserthtml", false, argument);
+               }
+               return rv;
+       },
+
+       _boldImpl: function(argument){
+               // summary:
+               //              This function implements an over-ride of the bold command.
+               // argument:
+               //              Not used, operates by selection.
+               // tags:
+               //              protected
+               if(dojo.isIE){
+                       this._adaptIESelection()
+               }
+               return this.document.execCommand("bold", false, argument);
+       },
+       
+       _italicImpl: function(argument){
+               // summary:
+               //              This function implements an over-ride of the italic command.
+               // argument:
+               //              Not used, operates by selection.
+               // tags:
+               //              protected
+               if(dojo.isIE){
+                       this._adaptIESelection()
+               }
+               return this.document.execCommand("italic", false, argument);
+       },
+
+       _underlineImpl: function(argument){
+               // summary:
+               //              This function implements an over-ride of the underline command.
+               // argument:
+               //              Not used, operates by selection.
+               // tags:
+               //              protected
+               if(dojo.isIE){
+                       this._adaptIESelection()
+               }
+               return this.document.execCommand("underline", false, argument);
+       },
+       
+       _strikethroughImpl: function(argument){
+               // summary:
+               //              This function implements an over-ride of the strikethrough command.
+               // argument:
+               //              Not used, operates by selection.
+               // tags:
+               //              protected
+               if(dojo.isIE){
+                       this._adaptIESelection()
+               }
+               return this.document.execCommand("strikethrough", false, argument);
+       },
+
+       getHeaderHeight: function(){
+               // summary:
+               //              A function for obtaining the height of the header node
+               return this._getNodeChildrenHeight(this.header); // Number
+       },
+
+       getFooterHeight: function(){
+               // summary:
+               //              A function for obtaining the height of the footer node
+               return this._getNodeChildrenHeight(this.footer); // Number
+       },
+
+       _getNodeChildrenHeight: function(node){
+               // summary:
+               //              An internal function for computing the cumulative height of all child nodes of 'node'
+               // node:
+               //              The node to process the children of;
+               var h = 0;
+               if(node && node.childNodes){
+                       // IE didn't compute it right when position was obtained on the node directly is some cases,
+                       // so we have to walk over all the children manually.
+                       var i;
+                       for(i = 0; i < node.childNodes.length; i++){
+                               var size = dojo.position(node.childNodes[i]);
+                               h += size.h;
+                       }
+               }
+               return h; // Number
+       },
+       
+       _isNodeEmpty: function(node, startOffset){
+               // summary:
+               //              Function to test if a node is devoid of real content.
+               // node:
+               //              The node to check.
+               // tags:
+               //              private.
+               if(node.nodeType == 1/*element*/){
+                       if(node.childNodes.length > 0){
+                               return this._isNodeEmpty(node.childNodes[0], startOffset);
+       }
+                       return true;
+               }else if(node.nodeType == 3/*text*/){
+                       return (node.nodeValue.substring(startOffset) == "");
+               }
+               return false;
+       },
+       
+       _removeStartingRangeFromRange: function(node, range){
+               // summary:
+               //              Function to adjust selection range by removing the current
+               //              start node.
+               // node:
+               //              The node to remove from the starting range.
+               // range:
+               //              The range to adapt.
+               // tags:
+               //              private
+               if(node.nextSibling){
+                       range.setStart(node.nextSibling,0);
+               }else{
+                       var parent = node.parentNode;
+                       while(parent && parent.nextSibling == null){
+                               //move up the tree until we find a parent that has another node, that node will be the next node
+                               parent = parent.parentNode;
+                       }
+                       if(parent){
+                               range.setStart(parent.nextSibling,0);
+                       }
+               }
+               return range;
+       },
+       
+       _adaptIESelection: function(){
+               // summary:
+               //              Function to adapt the IE range by removing leading 'newlines'
+               //              Needed to fix issue with bold/italics/underline not working if
+               //              range included leading 'newlines'.
+               //              In IE, if a user starts a selection at the very end of a line,
+               //              then the native browser commands will fail to execute correctly.
+               //              To work around the issue,  we can remove all empty nodes from
+               //              the start of the range selection.
+               var selection = dijit.range.getSelection(this.window);
+               if(selection && selection.rangeCount && !selection.isCollapsed){
+                       var range = selection.getRangeAt(0);
+                       var firstNode = range.startContainer;
+                       var startOffset = range.startOffset;
+
+                       while(firstNode.nodeType == 3/*text*/ && startOffset >= firstNode.length && firstNode.nextSibling){
+                               //traverse the text nodes until we get to the one that is actually highlighted
+                               startOffset = startOffset - firstNode.length;
+                               firstNode = firstNode.nextSibling;
+                       }
+
+                       //Remove the starting ranges until the range does not start with an empty node.
+                       var lastNode=null;
+                       while(this._isNodeEmpty(firstNode, startOffset) && firstNode != lastNode){
+                               lastNode =firstNode; //this will break the loop in case we can't find the next sibling
+                               range = this._removeStartingRangeFromRange(firstNode, range); //move the start container to the next node in the range
+                               firstNode = range.startContainer;
+                               startOffset = 0; //start at the beginning of the new starting range
+                       }
+                       selection.removeAllRanges();// this will work as long as users cannot select multiple ranges. I have not been able to do that in the editor.
+                       selection.addRange(range);
+               }
+       }
 });
-return ec;
-},_saveContent:function(e){
-var _57=dojo.byId(dijit._scopeName+"._editor.RichText.savedContent");
-if(_57.value){
-_57.value+=this._SEPARATOR;
-}
-_57.value+=this.name+":"+this.getValue(true);
-},escapeXml:function(str,_58){
-str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_58){
-str=str.replace(/'/gm,"&#39;");
-}
-return str;
-},getNodeHtml:function(_59){
-dojo.deprecated("dijit.Editor::getNodeHtml is deprecated","use dijit._editor.getNodeHtml instead",2);
-return dijit._editor.getNodeHtml(_59);
-},getNodeChildrenHtml:function(dom){
-dojo.deprecated("dijit.Editor::getNodeChildrenHtml is deprecated","use dijit._editor.getChildrenHtml instead",2);
-return dijit._editor.getChildrenHtml(dom);
-},close:function(_5a){
-if(this.isClosed){
-return false;
-}
-if(!arguments.length){
-_5a=true;
-}
-this._content=this.getValue();
-var _5b=(this.savedContent!=this._content);
-if(this.interval){
-clearInterval(this.interval);
-}
-if(this._webkitListener){
-this.disconnect(this._webkitListener);
-delete this._webkitListener;
-}
-if(dojo.isIE){
-this.iframe.onfocus=null;
-}
-this.iframe._loadFunc=null;
-if(this._iframeRegHandle){
-dijit.unregisterIframe(this._iframeRegHandle);
-delete this._iframeRegHandle;
-}
-if(this.textarea){
-var s=this.textarea.style;
-s.position="";
-s.left=s.top="";
-if(dojo.isIE){
-s.overflow=this.__overflow;
-this.__overflow=null;
-}
-this.textarea.value=_5a?this._content:this.savedContent;
-dojo.destroy(this.domNode);
-this.domNode=this.textarea;
-}else{
-this.domNode.innerHTML=_5a?this._content:this.savedContent;
-}
-delete this.iframe;
-dojo.removeClass(this.domNode,this.baseClass);
-this.isClosed=true;
-this.isLoaded=false;
-delete this.editNode;
-delete this.focusNode;
-if(this.window&&this.window._frameElement){
-this.window._frameElement=null;
-}
-this.window=null;
-this.document=null;
-this.editingArea=null;
-this.editorObject=null;
-return _5b;
-},destroy:function(){
-if(!this.isClosed){
-this.close(false);
-}
-this.inherited(arguments);
-},_removeMozBogus:function(_5c){
-return _5c.replace(/\stype="_moz"/gi,"").replace(/\s_moz_dirty=""/gi,"").replace(/_moz_resizing="(true|false)"/gi,"");
-},_removeWebkitBogus:function(_5d){
-_5d=_5d.replace(/\sclass="webkit-block-placeholder"/gi,"");
-_5d=_5d.replace(/\sclass="apple-style-span"/gi,"");
-return _5d;
-},_normalizeFontStyle:function(_5e){
-return _5e.replace(/<(\/)?strong([ \>])/gi,"<$1b$2").replace(/<(\/)?em([ \>])/gi,"<$1i$2");
-},_preFixUrlAttributes:function(_5f){
-return _5f.replace(/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,"$1$4$2$3$5$2 _djrealurl=$2$3$5$2").replace(/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,"$1$4$2$3$5$2 _djrealurl=$2$3$5$2");
-},_inserthorizontalruleImpl:function(_60){
-if(dojo.isIE){
-return this._inserthtmlImpl("<hr>");
-}
-return this.document.execCommand("inserthorizontalrule",false,_60);
-},_unlinkImpl:function(_61){
-if((this.queryCommandEnabled("unlink"))&&(dojo.isMoz||dojo.isWebKit)){
-var a=this._sCall("getAncestorElement",["a"]);
-this._sCall("selectElement",[a]);
-return this.document.execCommand("unlink",false,null);
-}
-return this.document.execCommand("unlink",false,_61);
-},_hilitecolorImpl:function(_62){
-var _63;
-if(dojo.isMoz){
-this.document.execCommand("styleWithCSS",false,true);
-_63=this.document.execCommand("hilitecolor",false,_62);
-this.document.execCommand("styleWithCSS",false,false);
-}else{
-_63=this.document.execCommand("hilitecolor",false,_62);
-}
-return _63;
-},_backcolorImpl:function(_64){
-if(dojo.isIE){
-_64=_64?_64:null;
-}
-return this.document.execCommand("backcolor",false,_64);
-},_forecolorImpl:function(_65){
-if(dojo.isIE){
-_65=_65?_65:null;
-}
-return this.document.execCommand("forecolor",false,_65);
-},_inserthtmlImpl:function(_66){
-_66=this._preFilterContent(_66);
-var rv=true;
-if(dojo.isIE){
-var _67=this.document.selection.createRange();
-if(this.document.selection.type.toUpperCase()=="CONTROL"){
-var n=_67.item(0);
-while(_67.length){
-_67.remove(_67.item(0));
-}
-n.outerHTML=_66;
-}else{
-_67.pasteHTML(_66);
-}
-_67.select();
-}else{
-if(dojo.isMoz&&!_66.length){
-this._sCall("remove");
-}else{
-rv=this.document.execCommand("inserthtml",false,_66);
-}
-}
-return rv;
-},getHeaderHeight:function(){
-return this._getNodeChildrenHeight(this.header);
-},getFooterHeight:function(){
-return this._getNodeChildrenHeight(this.footer);
-},_getNodeChildrenHeight:function(_68){
-var h=0;
-if(_68&&_68.childNodes){
-var i;
-for(i=0;i<_68.childNodes.length;i++){
-var _69=dojo.position(_68.childNodes[i]);
-h+=_69.h;
-}
-}
-return h;
-}});
+
 }
index f3c95aae044555ded15f522431efb060b90e087a..2f769960dfceefc83e77215be75bf101d072d0b2 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._Plugin"]){
-dojo._hasResource["dijit._editor._Plugin"]=true;
+if(!dojo._hasResource["dijit._editor._Plugin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor._Plugin"] = true;
 dojo.provide("dijit._editor._Plugin");
 dojo.require("dijit._Widget");
 dojo.require("dijit.form.Button");
-dojo.declare("dijit._editor._Plugin",null,{constructor:function(_1,_2){
-this.params=_1||{};
-dojo.mixin(this,this.params);
-this._connects=[];
-},editor:null,iconClassPrefix:"dijitEditorIcon",button:null,command:"",useDefaultCommand:true,buttonClass:dijit.form.Button,getLabel:function(_3){
-return this.editor.commands[_3];
-},_initButton:function(){
-if(this.command.length){
-var _4=this.getLabel(this.command),_5=this.editor,_6=this.iconClassPrefix+" "+this.iconClassPrefix+this.command.charAt(0).toUpperCase()+this.command.substr(1);
-if(!this.button){
-var _7=dojo.mixin({label:_4,dir:_5.dir,lang:_5.lang,showLabel:false,iconClass:_6,dropDown:this.dropDown,tabIndex:"-1"},this.params||{});
-this.button=new this.buttonClass(_7);
-}
-}
-},destroy:function(){
-dojo.forEach(this._connects,dojo.disconnect);
-if(this.dropDown){
-this.dropDown.destroyRecursive();
-}
-},connect:function(o,f,tf){
-this._connects.push(dojo.connect(o,f,this,tf));
-},updateState:function(){
-var e=this.editor,c=this.command,_8,_9;
-if(!e||!e.isLoaded||!c.length){
-return;
-}
-if(this.button){
-try{
-_9=e.queryCommandEnabled(c);
-if(this.enabled!==_9){
-this.enabled=_9;
-this.button.set("disabled",!_9);
-}
-if(typeof this.button.checked=="boolean"){
-_8=e.queryCommandState(c);
-if(this.checked!==_8){
-this.checked=_8;
-this.button.set("checked",e.queryCommandState(c));
-}
-}
-}
-catch(e){
-}
-}
-},setEditor:function(_a){
-this.editor=_a;
-this._initButton();
-if(this.button&&this.useDefaultCommand){
-if(this.editor.queryCommandAvailable(this.command)){
-this.connect(this.button,"onClick",dojo.hitch(this.editor,"execCommand",this.command,this.commandArg));
-}else{
-this.button.domNode.style.display="none";
-}
-}
-this.connect(this.editor,"onNormalizedDisplayChanged","updateState");
-},setToolbar:function(_b){
-if(this.button){
-_b.addChild(this.button);
-}
-}});
+
+
+dojo.declare("dijit._editor._Plugin", null, {
+       // summary
+       //              Base class for a "plugin" to the editor, which is usually
+       //              a single button on the Toolbar and some associated code
+
+       constructor: function(/*Object?*/args, /*DomNode?*/node){
+               this.params = args || {};
+               dojo.mixin(this, this.params);
+               this._connects=[];
+               this._attrPairNames = {};
+       },
+
+       // editor: [const] dijit.Editor
+       //              Points to the parent editor
+       editor: null,
+
+       // iconClassPrefix: [const] String
+       //              The CSS class name for the button node is formed from `iconClassPrefix` and `command`
+       iconClassPrefix: "dijitEditorIcon",
+
+       // button: dijit._Widget?
+       //              Pointer to `dijit.form.Button` or other widget (ex: `dijit.form.FilteringSelect`)
+       //              that is added to the toolbar to control this plugin.
+       //              If not specified, will be created on initialization according to `buttonClass`
+       button: null,
+
+       // command: String
+       //              String like "insertUnorderedList", "outdent", "justifyCenter", etc. that represents an editor command.
+       //              Passed to editor.execCommand() if `useDefaultCommand` is true.
+       command: "",
+
+       // useDefaultCommand: Boolean
+       //              If true, this plugin executes by calling Editor.execCommand() with the argument specified in `command`.
+       useDefaultCommand: true,
+
+       // buttonClass: Widget Class
+       //              Class of widget (ex: dijit.form.Button or dijit.form.FilteringSelect)
+       //              that is added to the toolbar to control this plugin.
+       //              This is used to instantiate the button, unless `button` itself is specified directly.
+       buttonClass: dijit.form.Button,
+
+       // disabled: Boolean
+       //              Flag to indicate if this plugin has been disabled and should do nothing
+       //              helps control button state, among other things.  Set via the setter api.
+       disabled: false,
+
+       getLabel: function(/*String*/key){
+               // summary:
+               //              Returns the label to use for the button
+               // tags:
+               //              private
+               return this.editor.commands[key];               // String
+       },
+
+       _initButton: function(){
+               // summary:
+               //              Initialize the button or other widget that will control this plugin.
+               //              This code only works for plugins controlling built-in commands in the editor.
+               // tags:
+               //              protected extension
+               if(this.command.length){
+                       var label = this.getLabel(this.command),
+                               editor = this.editor,
+                               className = this.iconClassPrefix+" "+this.iconClassPrefix + this.command.charAt(0).toUpperCase() + this.command.substr(1);
+                       if(!this.button){
+                               var props = dojo.mixin({
+                                       label: label,
+                                       dir: editor.dir,
+                                       lang: editor.lang,
+                                       showLabel: false,
+                                       iconClass: className,
+                                       dropDown: this.dropDown,
+                                       tabIndex: "-1"
+                               }, this.params || {});
+                               this.button = new this.buttonClass(props);
+                       }
+               }
+               if(this.get("disabled") && this.button){
+                       this.button.set("disabled", this.get("disabled"));
+               }
+       },
+
+       destroy: function(){
+               // summary:
+               //              Destroy this plugin
+
+               dojo.forEach(this._connects, dojo.disconnect);
+               if(this.dropDown){
+                       this.dropDown.destroyRecursive();
+               }
+       },
+
+       connect: function(o, f, tf){
+               // summary:
+               //              Make a dojo.connect() that is automatically disconnected when this plugin is destroyed.
+               //              Similar to `dijit._Widget.connect`.
+               // tags:
+               //              protected
+               this._connects.push(dojo.connect(o, f, this, tf));
+       },
+
+       updateState: function(){
+               // summary:
+               //              Change state of the plugin to respond to events in the editor.
+               // description:
+               //              This is called on meaningful events in the editor, such as change of selection
+               //              or caret position (but not simple typing of alphanumeric keys).   It gives the
+               //              plugin a chance to update the CSS of its button.
+               //
+               //              For example, the "bold" plugin will highlight/unhighlight the bold button depending on whether the
+               //              characters next to the caret are bold or not.
+               //
+               //              Only makes sense when `useDefaultCommand` is true, as it calls Editor.queryCommandEnabled(`command`).
+               var e = this.editor,
+                       c = this.command,
+                       checked, enabled;
+               if(!e || !e.isLoaded || !c.length){ return; }
+               var disabled = this.get("disabled");
+               if(this.button){
+                       try{
+                               enabled = !disabled && e.queryCommandEnabled(c);
+                               if(this.enabled !== enabled){
+                                       this.enabled = enabled;
+                                       this.button.set('disabled', !enabled);
+                               }
+                               if(typeof this.button.checked == 'boolean'){
+                                       checked = e.queryCommandState(c);
+                                       if(this.checked !== checked){
+                                               this.checked = checked;
+                                               this.button.set('checked', e.queryCommandState(c));
+                                       }
+                               }
+                       }catch(e){
+                               console.log(e); // FIXME: we shouldn't have debug statements in our code.  Log as an error?
+                       }
+               }
+       },
+
+       setEditor: function(/*dijit.Editor*/ editor){
+               // summary:
+               //              Tell the plugin which Editor it is associated with.
+
+               // TODO: refactor code to just pass editor to constructor.
+
+               // FIXME: detach from previous editor!!
+               this.editor = editor;
+
+               // FIXME: prevent creating this if we don't need to (i.e., editor can't handle our command)
+               this._initButton();
+
+               // Processing for buttons that execute by calling editor.execCommand()
+               if(this.button && this.useDefaultCommand){
+                       if(this.editor.queryCommandAvailable(this.command)){
+                               this.connect(this.button, "onClick",
+                                       dojo.hitch(this.editor, "execCommand", this.command, this.commandArg)
+                               );
+                       }else{
+                               // hide button because editor doesn't support command (due to browser limitations)
+                               this.button.domNode.style.display = "none";
+                       }
+               }
+
+               this.connect(this.editor, "onNormalizedDisplayChanged", "updateState");
+       },
+
+       setToolbar: function(/*dijit.Toolbar*/ toolbar){
+               // summary:
+               //              Tell the plugin to add it's controller widget (often a button)
+               //              to the toolbar.  Does nothing if there is no controller widget.
+
+               // TODO: refactor code to just pass toolbar to constructor.
+
+               if(this.button){
+                       toolbar.addChild(this.button);
+               }
+               // console.debug("adding", this.button, "to:", toolbar);
+       },
+       
+       set: function(/* attribute */ name, /* anything */ value){
+               // summary:
+               //              Set a property on a plugin
+               //      name:
+               //              The property to set.
+               //      value:
+               //              The value to set in the property.
+               // description:
+               //              Sets named properties on a plugin which may potentially be handled by a
+               //              setter in the plugin.
+               //              For example, if the plugin has a properties "foo"
+               //              and "bar" and a method named "_setFooAttr", calling:
+               //      |       plugin.set("foo", "Howdy!");
+               //              would be equivalent to writing:
+               //      |       plugin._setFooAttr("Howdy!");
+               //              and:
+               //      |       plugin.set("bar", 3);
+               //              would be equivalent to writing:
+               //      |       plugin.bar = 3;
+               //
+               //      set() may also be called with a hash of name/value pairs, ex:
+               //      |       plugin.set({
+               //      |               foo: "Howdy",
+               //      |               bar: 3
+               //      |       })
+               //      This is equivalent to calling set(foo, "Howdy") and set(bar, 3)
+               if(typeof name === "object"){
+                       for(var x in name){
+                               this.set(x, name[x]);
+       }
+                       return this;
+               }
+               var names = this._getAttrNames(name);
+               if(this[names.s]){
+                       // use the explicit setter
+                       var result = this[names.s].apply(this, Array.prototype.slice.call(arguments, 1));
+               }else{
+                       this._set(name, value);
+               }
+               return result || this;
+       },
+
+       get: function(name){
+               // summary:
+               //              Get a property from a plugin.
+               //      name:
+               //              The property to get.
+               // description:
+               //              Get a named property from a plugin. The property may
+               //              potentially be retrieved via a getter method. If no getter is defined, this
+               //              just retrieves the object's property.
+               //              For example, if the plugin has a properties "foo"
+               //              and "bar" and a method named "_getFooAttr", calling:
+               //      |       plugin.get("foo");
+               //              would be equivalent to writing:
+               //      |       plugin._getFooAttr();
+               //              and:
+               //      |       plugin.get("bar");
+               //              would be equivalent to writing:
+               //      |       plugin.bar;
+               var names = this._getAttrNames(name);
+               return this[names.g] ? this[names.g]() : this[name];
+       },
+
+       _setDisabledAttr: function(disabled){
+               // summary:
+               //              Function to set the plugin state and call updateState to make sure the
+               //              button is updated appropriately.
+               this.disabled = disabled;
+               this.updateState();
+       },
+       
+       _getAttrNames: function(name){
+               // summary:
+               //              Helper function for get() and set().
+               //              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] = {
+                       s: "_set"+uc+"Attr",
+                       g: "_get"+uc+"Attr"
+               });
+       },
+       
+       _set: function(/*String*/ name, /*anything*/ value){
+               // summary:
+               //              Helper function to set new value for specified attribute
+               var oldValue = this[name];
+               this[name] = value;
+       }
+});
+
 }
index 7db85c7d98f4ed95b6c3094f78f625136dcb16bd..196c8a3097ca3bbbec6b67e7ee224593682172a5 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._editor.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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;
+
+dojo.getObject("_editor", true, dijit);
+
+dijit._editor.escapeXml=function(/*String*/str, /*Boolean?*/noSingleQuotes){
+       // summary:
+       //              Adds escape sequences for special characters in XML: &<>"'
+       //              Optionally skips escapes for single quotes
+       str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
+       if(!noSingleQuotes){
+               str = str.replace(/'/gm, "&#39;");
+       }
+       return str; // string
 };
-dijit._editor.getNodeHtml=function(_3){
-var _4;
-switch(_3.nodeType){
-case 1:
-var _5=_3.nodeName.toLowerCase();
-if(!_5||_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.getNodeHtml=function(/* DomNode */node){
+       var output;
+       switch(node.nodeType){
+               case 1: //element node
+                       var lName = node.nodeName.toLowerCase();
+                       if(!lName || lName.charAt(0) == "/"){
+                               // IE does some strange things with malformed HTML input, like
+                               // treating a close tag </span> without an open tag <span>, as
+                               // a new tag with tagName of /span.  Corrupts output HTML, remove
+                               // them.  Other browsers don't prefix tags that way, so will
+                               // never show up.
+                               return "";
+                       }
+                       output = '<' + lName;
+
+                       //store the list of attributes and sort it to have the
+                       //attributes appear in the dictionary order
+                       var attrarray = [];
+                       var attr;
+                       if(dojo.isIE && node.outerHTML){
+                               var s = node.outerHTML;
+                               s = s.substr(0, s.indexOf('>'))
+                                       .replace(/(['"])[^"']*\1/g, ''); //to make the following regexp safe
+                               var reg = /(\b\w+)\s?=/g;
+                               var m, key;
+                               while((m = reg.exec(s))){
+                                       key = m[1];
+                                       if(key.substr(0,3) != '_dj'){
+                                               if(key == 'src' || key == 'href'){
+                                                       if(node.getAttribute('_djrealurl')){
+                                                               attrarray.push([key,node.getAttribute('_djrealurl')]);
+                                                               continue;
+                                                       }
+                                               }
+                                               var val, match;
+                                               switch(key){
+                                                       case 'style':
+                                                               val = node.style.cssText.toLowerCase();
+                                                               break;
+                                                       case 'class':
+                                                               val = node.className;
+                                                               break;
+                                                       case 'width':
+                                                               if(lName === "img"){
+                                                                       // This somehow gets lost on IE for IMG tags and the like
+                                                                       // and we have to find it in outerHTML, known IE oddity.
+                                                                       match=/width=(\S+)/i.exec(s);
+                                                                       if(match){
+                                                                               val = match[1];
+                                                                       }
+                                                                       break;
+                                                               }
+                                                       case 'height':
+                                                               if(lName === "img"){
+                                                                       // This somehow gets lost on IE for IMG tags and the like
+                                                                       // and we have to find it in outerHTML, known IE oddity.
+                                                                       match=/height=(\S+)/i.exec(s);
+                                                                       if(match){
+                                                                               val = match[1];
+                                                                       }
+                                                                       break;
+                                                               }
+                                                       default:
+                                                               val = node.getAttribute(key);
+                                               }
+                                               if(val != null){
+                                                       attrarray.push([key, val.toString()]);
+                                               }
+                                       }
+                               }
+                       }else{
+                               var i = 0;
+                               while((attr = node.attributes[i++])){
+                                       //ignore all attributes starting with _dj which are
+                                       //internal temporary attributes used by the editor
+                                       var n = attr.name;
+                                       if(n.substr(0,3) != '_dj' /*&&
+                                               (attr.specified == undefined || attr.specified)*/){
+                                               var v = attr.value;
+                                               if(n == 'src' || n == 'href'){
+                                                       if(node.getAttribute('_djrealurl')){
+                                                               v = node.getAttribute('_djrealurl');
+                                                       }
+                                               }
+                                               attrarray.push([n,v]);
+                                       }
+                               }
+                       }
+                       attrarray.sort(function(a,b){
+                               return a[0] < b[0] ? -1 : (a[0] == b[0] ? 0 : 1);
+                       });
+                       var j = 0;
+                       while((attr = attrarray[j++])){
+                               output += ' ' + attr[0] + '="' +
+                                       (dojo.isString(attr[1]) ? dijit._editor.escapeXml(attr[1], true) : attr[1]) + '"';
+                       }
+                       if(lName === "script"){
+                               // Browsers handle script tags differently in how you get content,
+                               // but innerHTML always seems to work, so insert its content that way
+                               // Yes, it's bad to allow script tags in the editor code, but some people
+                               // seem to want to do it, so we need to at least return them right.
+                               // other plugins/filters can strip them.
+                               output += '>' + node.innerHTML +'</' + lName + '>';
+                       }else{
+                               if(node.childNodes.length){
+                                       output += '>' + dijit._editor.getChildrenHtml(node)+'</' + lName +'>';
+                               }else{
+                                       switch(lName){
+                                               case 'br':
+                                               case 'hr':
+                                               case 'img':
+                                               case 'input':
+                                               case 'base':
+                                               case 'meta':
+                                               case 'area':
+                                               case 'basefont':
+                                                       // These should all be singly closed
+                                                       output += ' />';
+                                                       break;
+                                               default:
+                                                       // Assume XML style separate closure for everything else.
+                                                       output += '></' + lName + '>';
+                                       }
+                               }
+                       }
+                       break;
+               case 4: // cdata
+               case 3: // text
+                       // FIXME:
+                       output = dijit._editor.escapeXml(node.nodeValue, true);
+                       break;
+               case 8: //comment
+                       // FIXME:
+                       output = '<!--' + dijit._editor.escapeXml(node.nodeValue, true) + '-->';
+                       break;
+               default:
+                       output = "<!-- Element not recognized - Type: " + node.nodeType + " Name: " + node.nodeName + "-->";
+       }
+       return output;
 };
-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;
+
+dijit._editor.getChildrenHtml = function(/* DomNode */dom){
+       // summary:
+       //              Returns the html content of a DomNode and children
+       var out = "";
+       if(!dom){ return out; }
+       var nodes = dom["childNodes"] || dom;
+
+       //IE issue.
+       //If we have an actual node we can check parent relationships on for IE,
+       //We should check, as IE sometimes builds invalid DOMS.  If no parent, we can't check
+       //And should just process it and hope for the best.
+       var checkParent = !dojo.isIE || nodes !== dom;
+
+       var node, i = 0;
+       while((node = nodes[i++])){
+               //IE is broken.  DOMs are supposed to be a tree.  But in the case of malformed HTML, IE generates a graph
+               //meaning one node ends up with multiple references (multiple parents).  This is totally wrong and invalid, but
+               //such is what it is.  We have to keep track and check for this because otherise the source output HTML will have dups.
+               //No other browser generates a graph.  Leave it to IE to break a fundamental DOM rule.  So, we check the parent if we can
+               //If we can't, nothing more we can do other than walk it.
+               if(!checkParent || node.parentNode == dom){
+                       out += dijit._editor.getNodeHtml(node);
+               }
+       }
+       return out; // String
 };
+
 }
index 71683c00881ec65c423cb83f5027a19ab3e2f00a..dd4f9942320c6142907cfec2e05228f85269194e 100644 (file)
@@ -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":"كتابة بحروف متصلة","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"‏لا شيء‏","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
index 1a1b32e5973d3d6b862034eaebdacb781a83bb46..e229c686041cfa0bee8561a8e7060af40dc9c3b3 100644 (file)
@@ -1 +1 @@
-({"text":"الوصف:","insertImageTitle":"خصائص الصورة","set":"تحديد","newWindow":"نافذة جديدة","topWindow":"النافذة العلوية","target":"الهدف: ","createLinkTitle":"خصائص الوصلة","parentWindow":"النافذة الرئيسية","currentWindow":"النافذة الحالية","url":"عنوان URL:"})
\ No newline at end of file
+({"text":"الوصف:","insertImageTitle":"خصائص الصورة","set":"تحديد","newWindow":"‏نافذة جديدة‏","topWindow":"النافذة العلوية","target":"الهدف:","createLinkTitle":"خصائص الوصلة","parentWindow":"النافذة الرئيسية","currentWindow":"النافذة الحالية","url":"‏عنوان URL:‏"})
\ No newline at end of file
index 3e524ea9194590b31d3df6458529e8e20c1937a1..81069e8d2b540aa18bedb0399261713971c3e5b8 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"ازالة النسق","copy":"نسخ","paste":"لصق","selectAll":"اختيار كل","insertOrderedList":"‏كشف مرقم‏","insertTable":"ادراج/تحرير جدول","print":"‏طباعة‏","underline":"~تسطير","foreColor":"لون الواجهة الأمامية","htmlToggle":"مصدر HTML","formatBlock":"نمط الفقرة","newPage":"صفحة جديدة","insertHorizontalRule":"مسطرة أفقية","delete":"حذف","insertUnorderedList":"كشف نقطي","tableProp":"خصائص الجدول","insertImage":"ادراج صورة","superscript":"رمز علوي","subscript":"رمز سفلي","createLink":"تكوين وصلة","undo":"تراجع","fullScreen":"تبديل الشاشة الكاملة","italic":"~مائل","fontName":"اسم طاقم الطباعة","justifyLeft":"محاذاة الى اليسار","unlink":"ازالة وصلة","toggleTableBorder":"تبديل حدود الجدول","viewSource":"‫مشاهدة مصدر HTML‬","ctrlKey":"ctrl+${0}","fontSize":"حجم طاقم الطباعة","systemShortcut":"التصرف \"${0}\" يكون متاحا فقط في برنامج الاستعراض الخاص بك باستخدام المسار المختصر للوحة المفاتيح. استخدم ${1}.","indent":"‏ازاحة للداخل‏","redo":"‏اعادة‏","strikethrough":"تشطيب","justifyFull":"ضبط","justifyCenter":"محاذاة في الوسط","hiliteColor":"‏لون الخلفية‏","deleteTable":"حذف جدول","outdent":"ازاحة للخارج","cut":"قص","plainFormatBlock":"نمط الفقرة","toggleDir":"تبديل الاتجاه","bold":"عري~ض","tabIndent":"ازاحة للداخل باستخدام Tab","justifyRight":"محاذاة الى اليمين","appleKey":"⌘${0}"})
\ No newline at end of file
+({"removeFormat":"ازالة النسق","copy":"نسخ","paste":"لصق","selectAll":"‏اختيار كل‏","insertOrderedList":"‏كشف مرقم‏","insertTable":"ادراج/تحرير جدول","print":"طباعة","underline":"~تسطير","foreColor":"لون الواجهة الأمامية","htmlToggle":"مصدر HTML","formatBlock":"نمط الفقرة","newPage":"صفحة جديدة","insertHorizontalRule":"مسطرة أفقية","delete":"حذف","appleKey":"⌘${0}","insertUnorderedList":"كشف نقطي","tableProp":"خصائص الجدول","insertImage":"ادراج صورة","superscript":"رمز علوي","subscript":"رمز سفلي","createLink":"تكوين وصلة","undo":"تراجع","fullScreen":"تبديل  الشاشة الكاملة","italic":"~مائل","fontName":"اسم طاقم الطباعة","justifyLeft":"محاذاة الى اليسار","unlink":"ازالة وصلة","toggleTableBorder":"تبديل حدود الجدول","viewSource":"مشاهدة مصدر HTML","ctrlKey":"ctrl+${0}","fontSize":"حجم طاقم الطباعة","systemShortcut":"يكون التصرف \"${0}\" متاحا فقط ببرنامج الاستعراض الخاص بك باستخدام المسار المختصر للوحة المفاتيح.  استخدم ${1}.","indent":"ازاحة للداخل","redo":"‏اعادة‏","strikethrough":"تشطيب","justifyFull":"ضبط","justifyCenter":"محاذاة في الوسط","hiliteColor":"‏لون الخلفية‏","deleteTable":"حذف جدول","outdent":"ازاحة للخارج","cut":"قص","plainFormatBlock":"نمط الفقرة","toggleDir":"تبديل الاتجاه","bold":"عري~ض","tabIndent":"ازاحة علامة الجدولة للداخل","justifyRight":"محاذاة الى اليمين"})
\ No newline at end of file
index efba7dec43fa6a8c49d52c70b844569ec5046d57..6a393feaa99ae14e708a8249cd883a87d9078e1b 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Cap","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
index b030a2ceda33a5958a1a2338334234df2765bfa7..f7dd3af07be8a0a35fda5d8e0787f8e6e7bed28a 100644 (file)
@@ -1 +1 @@
-({"text":"Descipció:","insertImageTitle":"Propietats de la imatge","set":"Defineix","newWindow":"Finestra nova","topWindow":"Finestra superior","target":"Destinació:","createLinkTitle":"Propietats de l'enllaç","parentWindow":"Finestra pare","currentWindow":"Finestra actual","url":"URL:"})
\ No newline at end of file
+({"text":"Descripció:","insertImageTitle":"Propietats de la imatge","set":"Defineix","newWindow":"Finestra nova","topWindow":"Finestra superior","target":"Destinació:","createLinkTitle":"Propietats de l'enllaç","parentWindow":"Finestra pare","currentWindow":"Finestra actual","url":"URL:"})
\ No newline at end of file
index f78e71c85b8c5f1ee6d57ec2b029348c05bebe4d..534715e5a3abb54d1435c23504674673f07b81f3 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"Elimina el format","copy":"Copia","paste":"Enganxa","selectAll":"Selecciona-ho tot","insertOrderedList":"Llista numerada","insertTable":"Insereix/edita la taula","print":"Imprimeix","underline":"Subratllat","foreColor":"Color de primer pla","htmlToggle":"Font HTML","formatBlock":"Estil de paràgraf","newPage":"Pàgina nova","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","fullScreen":"Commuta pantalla completa","italic":"Cursiva","fontName":"Nom del tipus de lletra","justifyLeft":"Alinea a la esquerra","unlink":"Elimina l'enllaç","toggleTableBorder":"Inverteix els contorns de taula","viewSource":"Visualitza font HTML","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","appleKey":"⌘${0}"})
\ No newline at end of file
+({"removeFormat":"Elimina el format","copy":"Copia","paste":"Enganxa","selectAll":"Selecciona-ho tot","insertOrderedList":"Llista numerada","insertTable":"Insereix/edita la taula","print":"Imprimeix","underline":"Subratllat","foreColor":"Color de primer pla","htmlToggle":"Font HTML","formatBlock":"Estil de paràgraf","newPage":"Pàgina nova","insertHorizontalRule":"Regla 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","fullScreen":"Commuta pantalla completa","italic":"Cursiva","fontName":"Nom del tipus de lletra","justifyLeft":"Alinea a l'esquerra","unlink":"Elimina l'enllaç","toggleTableBorder":"Inverteix els contorns de taula","viewSource":"Visualitza font HTML","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","appleKey":"⌘${0}"})
\ No newline at end of file
index 447fe6685634674a4786e0c59d07a5f689a7ac8f..b60a8802701a079289db8234a481ac06e95ebe72 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Žádný","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
index ce515587c2946058c375cd634f5614c97e158c5e..c3572d1d25ac077bf399d75ec70ab6cfcb36cc57 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"Odebrat formát","copy":"Kopírovat","paste":"Vložit","selectAll":"Vybrat vše","insertOrderedList":"Číslovaný seznam","insertTable":"Vložit/upravit tabulku","print":"Tisk","underline":"Podtržení","foreColor":"Barva popředí","htmlToggle":"Zdroj HTML","formatBlock":"Styl odstavce","newPage":"Nová stránka","insertHorizontalRule":"Vodorovná čára","delete":"Odstranit","insertUnorderedList":"Seznam s odrážkami","tableProp":"Vlastnost tabulky","insertImage":"Vložit obrázek","superscript":"Horní index","subscript":"Dolní index","createLink":"Vytvořit odkaz","undo":"Zpět","fullScreen":"Přepnout režim celé obrazovky","italic":"Kurzíva","fontName":"Název písma","justifyLeft":"Zarovnat vlevo","unlink":"Odebrat odkaz","toggleTableBorder":"Přepnout ohraničení tabulky","viewSource":"Zobrazit zdroj ve formátu HTML","fontSize":"Velikost písma","systemShortcut":"Akce \"${0}\" je v prohlížeči dostupná pouze prostřednictvím klávesové zkratky. Použijte klávesovou zkratku ${1}.","indent":"Odsadit","redo":"Opakovat","strikethrough":"Přeškrtnutí","justifyFull":"Do bloku","justifyCenter":"Zarovnat na střed","hiliteColor":"Barva pozadí","deleteTable":"Odstranit tabulku","outdent":"Předsadit","cut":"Vyjmout","plainFormatBlock":"Styl odstavce","toggleDir":"Přepnout směr","bold":"Tučné","tabIndent":"Odsazení tabulátoru","justifyRight":"Zarovnat vpravo","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"Odebrat formát","copy":"Kopírovat","paste":"Vložit","selectAll":"Vybrat vše","insertOrderedList":"Číslovaný seznam","insertTable":"Vložit/upravit tabulku","print":"Tisk","underline":"Podtržení","foreColor":"Barva popředí","htmlToggle":"Zdroj HTML","formatBlock":"Styl odstavce","newPage":"Nová stránka","insertHorizontalRule":"Vodorovná čára","delete":"Odstranit","insertUnorderedList":"Seznam s odrážkami","tableProp":"Vlastnost tabulky","insertImage":"Vložit obrázek","superscript":"Horní index","subscript":"Dolní index","createLink":"Vytvořit odkaz","undo":"Zpět","fullScreen":"Přepnout celou obrazovku","italic":"Kurzíva","fontName":"Název písma","justifyLeft":"Zarovnat vlevo","unlink":"Odebrat odkaz","toggleTableBorder":"Přepnout ohraničení tabulky","viewSource":"Zobrazit zdroj HTML","fontSize":"Velikost písma","systemShortcut":"Akce \"${0}\" je v prohlížeči dostupná pouze prostřednictvím klávesové zkratky. Použijte klávesovou zkratku ${1}.","indent":"Odsadit","redo":"Opakovat","strikethrough":"Přeškrtnutí","justifyFull":"Do bloku","justifyCenter":"Zarovnat na střed","hiliteColor":"Barva pozadí","deleteTable":"Odstranit tabulku","outdent":"Předsadit","cut":"Vyjmout","plainFormatBlock":"Styl odstavce","toggleDir":"Přepnout směr","bold":"Tučné","tabIndent":"Odsazení tabulátoru","justifyRight":"Zarovnat vpravo","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index 5b380ece65e49ae4b8538099710c485f16323566..a45c55bc56fef085383358b4dfc00f5b3db9bd97 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Ingen","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
index d2d93547e2e91674be4d844768e5f6edb0bc7ab3..fca175c8076d452b7c5a7fe9f5659f16547a98d6 100644 (file)
@@ -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","print":"Udskriv","underline":"Understreget","foreColor":"Forgrundsfarve","htmlToggle":"HTML-kilde","formatBlock":"Afsnitstypografi","newPage":"Ny side","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","fullScreen":"Aktivér/deaktivér fuldskærm","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejusteret","unlink":"Fjern link","toggleTableBorder":"Skift tabelramme","viewSource":"Vis HTML-kilde","ctrlKey":"Ctrl+${0}","fontSize":"Skriftstørrelse","systemShortcut":"Funktionen \"${0}\" kan kun bruges i din 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","appleKey":"⌘${0}"})
\ No newline at end of file
+({"removeFormat":"Fjern format","copy":"Kopiér","paste":"Sæt ind","selectAll":"Markér alle","insertOrderedList":"Nummereret liste","insertTable":"Indsæt/redigér tabel","print":"Udskriv","underline":"Understreget","foreColor":"Forgrundsfarve","htmlToggle":"HTML-kilde","formatBlock":"Afsnitstypografi","newPage":"Ny side","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","fullScreen":"Aktivér/deaktivér fuldskærm","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejusteret","unlink":"Fjern link","toggleTableBorder":"Skift tabelramme","viewSource":"Vis HTML-kilde","fontSize":"Skriftstørrelse","systemShortcut":"Funktionen \"${0}\" kan kun bruges i din 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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index ed65ff3e7db618cbf3e5821ab7452effb133ec64..c584c18128ba9126d1b630e767cc0062055e235c 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Keine Angabe","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
index 13c661c6358f46b17cbf9b71e0572c40b2f464a4..a529fe873ea9849aacf8bda1806ffe15bcdd0aa2 100644 (file)
@@ -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":"πλάγιοι","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Χωρίς","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
index 905a5609a85d4ca5a78c9367cc2f1185aa4be8dc..fd7d96590d708962ee545506c32c2c413b454c07 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Ninguno","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
index 15802d77a6267cc81cff3c0d48fee5c0afcbaad8..7d69bdb80d5a25e79d6510d27a37d9ddc993c5c3 100644 (file)
@@ -1 +1 @@
-({"text":"Descripción: ","insertImageTitle":"Propiedades de la imagen","set":"Establecer","newWindow":"Nueva ventana","topWindow":"Ventana superior","target":"Destino: ","createLinkTitle":"Propiedades del enlace","parentWindow":"Ventana padre","currentWindow":"Ventana actual","url":"URL:"})
\ No newline at end of file
+({"text":"Descripción:","insertImageTitle":"Propiedades de la imagen","set":"Establecer","newWindow":"Nueva ventana","topWindow":"Ventana superior","target":"Destino:","createLinkTitle":"Propiedades del enlace","parentWindow":"Ventana padre","currentWindow":"Ventana actual","url":"URL:"})
\ No newline at end of file
index 7107971c75a661d69489beb08064b8e319580402..02c68e986b8f6b16e52df66f53765a184e500b76 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Ei mitään","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
index a96fac045651c104b73e5a44bda208ebddd3c970..2e3a9780368dacd78305a8fb144b5d734ce6bedb 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Néant","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
index 70946013ad6c64343896ca257b4c08107dab032c..8103ae329587315ac9d65947a068165232b34a2a 100644 (file)
@@ -1 +1 @@
-({"text":"Description :","insertImageTitle":"Propriétés des images","set":"Définir","newWindow":"Nouvelle fenêtre","topWindow":"Première fenêtre","target":"Cible :","createLinkTitle":"Propriétés des liens","parentWindow":"Fenêtre parent","currentWindow":"Fenêtre en cours","url":"URL :"})
\ No newline at end of file
+({"text":"Description :","insertImageTitle":"Propriétés de l'image","set":"Définir","newWindow":"Nouvelle fenêtre","topWindow":"Fenêtre supérieure","target":"Cible :","createLinkTitle":"Propriétés du lien","parentWindow":"Fenêtre parent","currentWindow":"Fenêtre actuelle","url":"URL :"})
\ No newline at end of file
index df8cb3b921685fa8b88c6383fdf84ff3e7130805..532ac1347ca764e24462f44d03114f293bf52060 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"Supprimer la mise en forme","copy":"Copier","paste":"Coller","selectAll":"Sélectionner tout","insertOrderedList":"Liste numérotée","insertTable":"Insérer/Modifier un tableau","print":"Imprimer","underline":"Souligner","foreColor":"Couleur avant-plan","htmlToggle":"Source HTML","formatBlock":"Style de paragraphe","newPage":"Nouvelle page","insertHorizontalRule":"Règle horizontale","delete":"Supprimer","insertUnorderedList":"Liste à puces","tableProp":"Propriété du tableau","insertImage":"Insérer une image","superscript":"Exposant","subscript":"Indice","createLink":"Créer un lien","undo":"Annuler","fullScreen":"Basculer vers le mode plein écran","italic":"Italique","fontName":"Nom de police","justifyLeft":"Aligner à gauche","unlink":"Supprimer le lien","toggleTableBorder":"Afficher/Masquer la bordure du tableau","viewSource":"Afficher la source HTML","fontSize":"Taille de police","systemShortcut":"Action \"${0}\" uniquement disponible dans votre navigateur via un raccourci clavier. Utilisez ${1}.","indent":"Retrait","redo":"Rétablir","strikethrough":"Barrer","justifyFull":"Justifier","justifyCenter":"Aligner au centre","hiliteColor":"Couleur arrière-plan","deleteTable":"Supprimer le tableau","outdent":"Retrait négatif","cut":"Couper","plainFormatBlock":"Style de paragraphe","toggleDir":"Changer de sens","bold":"Gras","tabIndent":"Retrait de tabulation","justifyRight":"Aligner à droite","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"Supprimer la mise en forme","copy":"Copier","paste":"Coller","selectAll":"Sélectionner tout","insertOrderedList":"Liste numérotée","insertTable":"Insérer/Modifier un tableau","print":"Imprimer","underline":"Souligner","foreColor":"Couleur d'avant-plan","htmlToggle":"Source HTML","formatBlock":"Style de paragraphe","newPage":"Nouvelle page","insertHorizontalRule":"Règle horizontale","delete":"Supprimer","insertUnorderedList":"Liste à puces","tableProp":"Propriété du tableau","insertImage":"Insérer une image","superscript":"Exposant","subscript":"Indice","createLink":"Créer un lien","undo":"Annuler","fullScreen":"Basculer en plein écran","italic":"Italique","fontName":"Nom de police","justifyLeft":"Aligner à gauche","unlink":"Supprimer le lien","toggleTableBorder":"Afficher/Masquer la bordure du tableau","viewSource":"Afficher la source HTML","fontSize":"Taille de police","systemShortcut":"L'action \"${0}\" est disponible dans votre navigateur uniquement, par le biais d'un raccourci-clavier. Utilisez ${1}.","indent":"Retrait","redo":"Rétablir","strikethrough":"Barrer","justifyFull":"Justifier","justifyCenter":"Aligner au centre","hiliteColor":"Couleur d'arrière-plan","deleteTable":"Supprimer le tableau","outdent":"Retrait négatif","cut":"Couper","plainFormatBlock":"Style de paragraphe","toggleDir":"Changer de sens","bold":"Gras","tabIndent":"Retrait de tabulation","justifyRight":"Aligner à droite","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index 37140fb002accda0e725f0084957e7b551e781a2..4c2e16f50770d4de1cac49aedab80bc9a5a2f1f3 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"ללא ","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
index 7b75850de165e40a07564315effb6ce99c8a77c8..493974ca6b5eb28aa22ed09d954b1a6ec5f83dbe 100644 (file)
@@ -1 +1 @@
-({"text":"תיאור:","insertImageTitle":"תכונות תמונה","set":"הגדרה","newWindow":"חלון חדש","topWindow":"חלון עליון ","target":"יעד:","createLinkTitle":"תכונות קישור","parentWindow":"חלון אב","currentWindow":"חלון נוכחי ","url":"URL:‏"})
\ No newline at end of file
+({"text":"תיאור:","insertImageTitle":"תכונות תמונה","set":"הגדרה","newWindow":"חלון חדש","topWindow":"חלון עליון","target":"יעד:","createLinkTitle":"תכונות קישור","parentWindow":"חלון אב","currentWindow":"חלון נוכחי","url":"URL:‏"})
\ No newline at end of file
index 75e95ab3e4743cd6834f8567f2e857d49f90fa47..39d598e94e82c34ea52d89a49b94f7d5305a2354 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"סילוק עיצוב","copy":"עותק","paste":"הדבקה","selectAll":"בחירת הכל","insertOrderedList":"רשימה ממוספרת","insertTable":"הוספת/עריכת טבלה","print":"הדפסה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","newPage":"דף חדש ","insertHorizontalRule":"קו אופקי","delete":"מחיקה","appleKey":"⌘${0}‎","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","fullScreen":"מיתוג מסך מלא ","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","viewSource":"הצגת מקור HTML ","ctrlKey":"ctrl+${0}‎","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין"})
\ No newline at end of file
+({"removeFormat":"סילוק עיצוב","copy":"עותק","paste":"הדבקה","selectAll":"בחירת הכל","insertOrderedList":"רשימה ממוספרת","insertTable":"הוספת/עריכת טבלה","print":"הדפסה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","newPage":"דף חדש","insertHorizontalRule":"קו אופקי","delete":"מחיקה","appleKey":"⌘${0}‎","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","fullScreen":"מיתוג מסך מלא","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","viewSource":"הצגת מקור HTML","ctrlKey":"ctrl+${0}‎","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין"})
\ No newline at end of file
index 7b67d13e96473c8855a0b0326e35da534bfe58a6..831fe99c55da875439e4411c76b0792b3468917e 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Nincs","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
index 50f234087e8c90c67269304cba22ce69028e04bd..a248473b5c256cad23e7b5d9ffb849632b9cce1c 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Nessuna","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
index ad3adef0e0cffc1fd2b73e951d3187c0a2338613..94ebe18d25d623758688d7a04e8cbacecfee87d9 100644 (file)
@@ -1 +1 @@
-({"text":"Descrizione:","insertImageTitle":"Proprietà immagine","set":"Imposta","newWindow":"Nuova finestra","topWindow":"Finestra superiore","target":"Destinazione:","createLinkTitle":"Proprietà collegamento","parentWindow":"Finestra padre","currentWindow":"Finestra corrente","url":"URL:"})
\ No newline at end of file
+({"text":"Descrizione:","insertImageTitle":"Proprietà immagine","set":"Imposta","newWindow":"Nuova finestra","topWindow":"Finestra in primo piano","target":"Destinazione:","createLinkTitle":"Proprietà collegamento","parentWindow":"Finestra parent","currentWindow":"Finestra corrente","url":"URL:"})
\ No newline at end of file
index 4abbd7ec89086c2d39dcc95ce40ae168062c9191..2b08f8170d67aed4259f1d383df49b6b87984b2b 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"Rimuovi formato","copy":"Copia","paste":"Incolla","selectAll":"Seleziona tutto","insertOrderedList":"Elenco numerato","insertTable":"Inserisci/Modifica tabella","print":"Stampa","underline":"Sottolinea","foreColor":"Colore primo piano","htmlToggle":"Origine HTML","formatBlock":"Stile paragrafo","newPage":"Nuova pagina","insertHorizontalRule":"Righello orizzontale","delete":"Elimina","insertUnorderedList":"Elenco puntato","tableProp":"Proprietà tabella","insertImage":"Inserisci immagine","superscript":"Apice","subscript":"Pedice","createLink":"Crea collegamento","undo":"Annulla","fullScreen":"Attiva/Disattiva schermo intero","italic":"Corsivo","fontName":"Nome carattere","justifyLeft":"Allinea a sinistra","unlink":"Rimuovi collegamento","toggleTableBorder":"Attiva/Disattiva bordo tabella","viewSource":"Visualizza origine HTML","fontSize":"Dimensione carattere","systemShortcut":"La azione \"${0}\" è disponibile solo nel browser tramite un tasto di scelta rapida. Utilizzare ${1}.","indent":"Rientro","redo":"Ripristina","strikethrough":"Barrato","justifyFull":"Giustifica","justifyCenter":"Allinea al centro","hiliteColor":"Colore sfondo","deleteTable":"Elimina tabella","outdent":"Annulla rientro","cut":"Taglia","plainFormatBlock":"Stile paragrafo","toggleDir":"Attiva/Disattiva direzione","bold":"Grassetto","tabIndent":"Rientro tabulazione","justifyRight":"Allinea a destra","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"Rimuovi formato","copy":"Copia","paste":"Incolla","selectAll":"Seleziona tutto","insertOrderedList":"Elenco numerato","insertTable":"Inserisci/Modifica tabella","print":"Stampa","underline":"Sottolineato","foreColor":"Colore primo piano","htmlToggle":"Origine HTML","formatBlock":"Stile paragrafo","newPage":"Nuova pagina","insertHorizontalRule":"Righello orizzontale","delete":"Elimina","insertUnorderedList":"Elenco puntato","tableProp":"Proprietà tabella","insertImage":"Inserisci immagine","superscript":"Apice","subscript":"Pedice","createLink":"Crea collegamento","undo":"Annulla","fullScreen":"Attiva/Disattiva schermo intero","italic":"Corsivo","fontName":"Nome carattere","justifyLeft":"Allinea a sinistra","unlink":"Rimuovi collegamento","toggleTableBorder":"Mostra/Nascondi margine tabella","viewSource":"Visualizza origine HTML","fontSize":"Dimensione carattere","systemShortcut":"Azione \"${0}\" disponibile sul proprio browser solo mediante i tasti di scelta rapida della tastiera. Utilizzare ${1}.","indent":"Rientra","redo":"Ripristina","strikethrough":"Barrato","justifyFull":"Giustifica","justifyCenter":"Allinea al centro","hiliteColor":"Colore sfondo","deleteTable":"Elimina tabella","outdent":"Rimuovi rientro","cut":"Taglia","plainFormatBlock":"Stile paragrafo","toggleDir":"Inverti direzione","bold":"Grassetto","tabIndent":"Rientranza tabulazione","justifyRight":"Allinea a destra","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index 6083ab3812932175228f2624e8a1c29022ed4c93..647f90d2d2c6d0052946f3f67861836bf41b8193 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"なし","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
index 618746e2331d8e1e37168bcfef7a519453902c08..2ba1d51bb37288803adea83b115b746015df2522 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"形式の除去","copy":"コピー","paste":"貼り付け","selectAll":"すべて選択","insertOrderedList":"番号付きリスト","insertTable":"テーブルの挿入/編集","print":"印刷","underline":"下線","foreColor":"前景色","htmlToggle":"HTML ソース","formatBlock":"段落スタイル","newPage":"新しいページ","insertHorizontalRule":"水平罫線","delete":"削除","insertUnorderedList":"黒丸付きリスト","tableProp":"テーブルプロパティ","insertImage":"イメージの挿入","superscript":"上付き文字","subscript":"下付き文字","createLink":"リンクの作成","undo":"元に戻す","fullScreen":"全画面表示に切り替え","italic":"斜体","fontName":"フォント名","justifyLeft":"左揃え","unlink":"リンクの削除","toggleTableBorder":"テーブルボーダーの切り替え","viewSource":"HTML ソースの表示","fontSize":"フォントサイズ","systemShortcut":"\"${0}\" アクションを使用できるのは、ブラウザーでキーボードショートカットを使用する場合のみです。 ${1} を使用してください。","indent":"インデント","redo":"やり直し","strikethrough":"取り消し線","justifyFull":"両端揃え","justifyCenter":"中央揃え","hiliteColor":"背景色","deleteTable":"テーブルの削除","outdent":"アウトデント","cut":"切り取り","plainFormatBlock":"段落スタイル","toggleDir":"方向の切り替え","bold":"太字","tabIndent":"タブインデント","justifyRight":"右揃え","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"書式のクリア","copy":"コピー","paste":"貼り付け","selectAll":"すべて選択","insertOrderedList":"番号付きリスト","insertTable":"テーブルの挿入/編集","print":"印刷","underline":"下線","foreColor":"前景色","htmlToggle":"HTML ソース","formatBlock":"段落スタイル","newPage":"新規ページ","insertHorizontalRule":"水平罫線","delete":"削除","insertUnorderedList":"黒丸付きリスト","tableProp":"テーブル・プロパティー","insertImage":"イメージの挿入","superscript":"上付き文字","subscript":"下付き文字","createLink":"リンクの作成","undo":"元に戻す","fullScreen":"全画面表示に切り替え","italic":"イタリック","fontName":"フォント名","justifyLeft":"左揃え","unlink":"リンクの削除","toggleTableBorder":"テーブル・ボーダーの切り替え","viewSource":"HTML ソースの表示","ctrlKey":"Ctrl+${0}","fontSize":"フォント・サイズ","systemShortcut":"\"${0}\" アクションを使用できるのは、ブラウザーでキーボード・ショートカットを使用する場合のみです。${1} を使用してください。","indent":"インデント","redo":"やり直し","strikethrough":"取り消し線","justifyFull":"両端揃え","justifyCenter":"中央揃え","hiliteColor":"マーカー","deleteTable":"テーブルの削除","outdent":"アウトデント","cut":"切り取り","plainFormatBlock":"段落スタイル","toggleDir":"方向の切り替え","bold":"太字","tabIndent":"タブ・インデント","justifyRight":"右揃え","appleKey":"⌘${0}"})
\ No newline at end of file
diff --git a/lib/dijit/_editor/nls/kk/FontChoice.js b/lib/dijit/_editor/nls/kk/FontChoice.js
new file mode 100644 (file)
index 0000000..6a9dbbf
--- /dev/null
@@ -0,0 +1 @@
+({"noFormat":"Ешбір","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":"monospace","fontSize":"Өлшемі","cursive":"көлбеу"})
\ No newline at end of file
diff --git a/lib/dijit/_editor/nls/kk/LinkDialog.js b/lib/dijit/_editor/nls/kk/LinkDialog.js
new file mode 100644 (file)
index 0000000..c1c5ca2
--- /dev/null
@@ -0,0 +1 @@
+({"text":"Сипаттама:","insertImageTitle":"Сурет сипаттары","set":"Орнату","newWindow":"Жаңа терезе","topWindow":"Ең жоғарғы терезе","target":"Мақсат:","createLinkTitle":"Сілтеме сипаттары","parentWindow":"Басты терезе","currentWindow":"Ағымдағы терезе","url":"URL мекенжайы:"})
\ No newline at end of file
diff --git a/lib/dijit/_editor/nls/kk/commands.js b/lib/dijit/_editor/nls/kk/commands.js
new file mode 100644 (file)
index 0000000..ac362d3
--- /dev/null
@@ -0,0 +1 @@
+({"removeFormat":"Пішімді алып тастау","copy":"Көшіру","paste":"Қою","selectAll":"Барлығын таңдау","insertOrderedList":"Нөмірленген тізім","insertTable":"Кестені кірістіру/өңдеу","print":"Басып шығару","underline":"Асты сызылған","foreColor":"Алды түсі","htmlToggle":"HTML көзі","formatBlock":"Еже мәнері","newPage":"Жаңа бет","insertHorizontalRule":"Көлденең сызғыш","delete":"Жою","insertUnorderedList":"Таңбалауыш тізім","tableProp":"Кесте сипаты","insertImage":"Сурет кірістіру","superscript":"Жолүсті","subscript":"Жоласты","createLink":"Сілтеме жасау","undo":"Болдырмау ","fullScreen":"Толық экранды қосу","italic":"Көлбеу","fontName":"Қаріп атауы","justifyLeft":"Сол жақ бойынша туралау","unlink":"Сілтемені жою","toggleTableBorder":"Кесте жиегін қосу","viewSource":"HTML көзін қарау","fontSize":"Қаріп өлшемі","systemShortcut":"\"${0}\" әрекеті шолғышта тек пернелер тіркесімі арқылы қол жетімді. ${1} пайдаланыңыз.","indent":"Шегіндіру","redo":"Қайтару","strikethrough":"Сызылған","justifyFull":"Туралау","justifyCenter":"Ортасы бойынша туралау","hiliteColor":"Өң түсі","deleteTable":"Кестені жою","outdent":"Шығыңқы","cut":"Қиып алу","plainFormatBlock":"Еже мәнері","toggleDir":"Бағытты қосу","bold":"Қалың","tabIndent":"Қойынды шегінісі","justifyRight":"Оң жақ бойынша туралау","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index fda73370231a0cba2e950c98715d6fa3dfa23d77..f3e2dc4adae2a5977d20e608ae2b8ff1d9aabf45 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"없음","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
index 1f46bd71ff2faf9ccd3bee096a503911997d4890..fd1e9d5b069d28454e5e767f44879a60328f0199 100644 (file)
@@ -1 +1 @@
-({"text":"설명:","insertImageTitle":"이미지 특성","set":"설정","newWindow":"새 창","topWindow":"최상위 창","target":"대상:","createLinkTitle":"링크 특성","parentWindow":"상위 창","currentWindow":"현재 창","url":"URL:"})
\ No newline at end of file
+({"text":"설명:","insertImageTitle":"이미지 등록 정보","set":"설정","newWindow":"새 창","topWindow":"최상위 창","target":"대상","createLinkTitle":"링크 등록 정보","parentWindow":"상위 창","currentWindow":"현재 창","url":"URL:"})
\ No newline at end of file
index 4c8f954939197663bd1d569d3847d42354453732..972b047e3503242e87690726ffdb35c68c2817ab 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"í\98\95ì\8b\9d ì \9cê±°","copy":"ë³µì\82¬","paste":"ë¶\99ì\97¬ë\84£ê¸°","selectAll":"모ë\91\90 ì\84 í\83\9d","insertOrderedList":"ë²\88í\98¸ ëª©ë¡\9d","insertTable":"í\85\8cì\9d´ë¸\94 ì\82½ì\9e\85\8e¸ì§\91","print":"ì\9d¸ì\87\84","underline":"ë°\91ì¤\84","foreColor":"ì \84ê²½ì\83\89","htmlToggle":"HTML ì\86\8cì\8a¤","formatBlock":"ë\8b¨ë\9d½ ì\8a¤í\83\80ì\9d¼","newPage":"ì\83\88 í\8e\98ì\9d´ì§\80","insertHorizontalRule":"ì\88\98í\8f\89 ì\9e\90","delete":"ì\82­ì \9c","insertUnorderedList":"ê¸\80머리í\91\9c ëª©ë¡\9d","tableProp":"í\85\8cì\9d´ë¸\94 í\8a¹ì\84±","insertImage":"ì\9d´ë¯¸ì§\80 ì\82½ì\9e\85","superscript":"ì\9c\84첨ì\9e\90","subscript":"ì\95\84ë\9e\98첨ì\9e\90","createLink":"ë§\81í\81¬ ì\9e\91ì\84±","undo":"ì\8b¤í\96\89 ì·¨ì\86\8c","fullScreen":"í\86 ê¸\80 ì \84ì²´ í\99\94ë©´","italic":"기ì\9a¸ì\9e\84ì²´","fontName":"ê¸\80ê¼´ ì\9d´ë¦\84","justifyLeft":"ì\99¼ìª½ ë§\9e춤","unlink":"ë§\81í\81¬ ì \9cê±°","toggleTableBorder":"í\86 ê¸\80 í\85\8cì\9d´ë¸\94 í\85\8cë\91\90리","viewSource":"HTML ì\86\8cì\8a¤ ë³´ê¸°","fontSize":"ê¸\80ê¼´ í\81¬ê¸°","systemShortcut":"\"${0}\" ì¡°ì¹\98ë\8a\94 ë¸\8cë\9d¼ì\9a°ì \80ì\97\90ì\84\9c í\82¤ë³´ë\93\9c ë\8b¨ì¶\95í\82¤ë¥¼ ì\9d´ì\9a©í\95´ì\84\9cë§\8c ì\82¬ì\9a©í\95  ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤. ${1}ì\9d\84(를) ì\82¬ì\9a©í\95\98ì\8b­ì\8b\9cì\98¤.","indent":"ë\93¤ì\97¬ì\93°ê¸°","redo":"ë\8b¤ì\8b\9c ì\8b¤í\96\89","strikethrough":"ì·¨ì\86\8cì\84 ","justifyFull":"ì\96\91쪽 ë§\9e춤","justifyCenter":"ê°\80ì\9a´ë\8d° ë§\9e춤","hiliteColor":"ë°°ê²½ì\83\89","deleteTable":"í\85\8cì\9d´ë¸\94 ì\82­ì \9c","outdent":"ë\82´ì\96´ì\93°ê¸°","cut":"ì\9e\98ë\9d¼ë\82´ê¸°","plainFormatBlock":"ë\8b¨ë\9d½ ì\8a¤í\83\80ì\9d¼","toggleDir":"í\86 ê¸\80 ë°©í\96¥","bold":"êµµì\9d\80ì²´","tabIndent":"탭 들여쓰기","justifyRight":"오른쪽 맞춤","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"í\98\95ì\8b\9d ì \9cê±°","copy":"ë³µì\82¬","paste":"ë¶\99ì\97¬ë\84£ê¸°","selectAll":"모ë\91\90 ì\84 í\83\9d","insertOrderedList":"ë²\88í\98¸ ëª©ë¡\9d","insertTable":"í\85\8cì\9d´ë¸\94 ì\82½ì\9e\85\8e¸ì§\91","print":"ì\9d¸ì\87\84","underline":"ë°\91ì¤\84","foreColor":"ì \84ê²½ì\83\89","htmlToggle":"HTML ì\86\8cì\8a¤","formatBlock":"ë\8b¨ë\9d½ ì\96\91ì\8b\9d","newPage":"ì\83\88 í\8e\98ì\9d´ì§\80","insertHorizontalRule":"ì\88\98í\8f\89 ì\9e\90","delete":"ì\82­ì \9c","insertUnorderedList":"ê¸\80머리í\91\9c ëª©ë¡\9d","tableProp":"í\85\8cì\9d´ë¸\94 í\8a¹ì\84±","insertImage":"ì\9d´ë¯¸ì§\80 ì\82½ì\9e\85","superscript":"ì\9c\84첨ì\9e\90","subscript":"ì\95\84ë\9e\98첨ì\9e\90","createLink":"ë§\81í\81¬ ì\9e\91ì\84±","undo":"ì\8b¤í\96\89 ì·¨ì\86\8c","fullScreen":"ì \84ì²´ í\99\94ë©´ í\86 ê¸\80","italic":"기ì\9a¸ì\9e\84ê¼´","fontName":"ê¸\80ê¼´ ì\9d´ë¦\84","justifyLeft":"ì\99¼ìª½ ë§\9e춤","unlink":"ë§\81í\81¬ ì \9cê±°","toggleTableBorder":"í\85\8cì\9d´ë¸\94 ì\99¸ê³½ì\84  í\86 ê¸\80","viewSource":"HTML ì\86\8cì\8a¤ ë³´ê¸°","fontSize":"ê¸\80ê¼´ í\81¬ê¸°","systemShortcut":"\"${0}\" ì¡°ì¹\98ë\8a\94 ë¸\8cë\9d¼ì\9a°ì \80ì\97\90ì\84\9c í\82¤ë³´ë\93\9c ë\8b¨ì¶\95í\82¤ë¥¼ í\86µí\95´ì\84\9cë§\8c ì\82¬ì\9a© ê°\80ë\8a¥í\95©ë\8b\88ë\8b¤. ${1}ì\9d\84(를) ì\82¬ì\9a©í\95\98ì\8b­ì\8b\9cì\98¤.","indent":"ë\93¤ì\97¬ì\93°ê¸°","redo":"ë\8b¤ì\8b\9c ì\8b¤í\96\89","strikethrough":"ì·¨ì\86\8cì\84 ","justifyFull":"ì\96\91쪽 ë§\9e춤","justifyCenter":"ê°\80ì\9a´ë\8d° ë§\9e춤","hiliteColor":"ë°°ê²½ì\83\89","deleteTable":"í\85\8cì\9d´ë¸\94 ì\82­ì \9c","outdent":"ë\82´ì\96´ì\93°ê¸°","cut":"ì\9e\98ë\9d¼ë\82´ê¸°","plainFormatBlock":"ë\8b¨ë\9d½ ì\96\91ì\8b\9d","toggleDir":"ë°©í\96¥ í\86 ê¸\80","bold":"êµµê²\8c","tabIndent":"탭 들여쓰기","justifyRight":"오른쪽 맞춤","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index b1ad6abf2a9cb7df4cb598066dba0168054d26cc..c7c8f5dd5cab9f2f1f2974f2a193f48de65df6d1 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Ingen","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
index d1f215f5253a6370f4d0e2b43a660b7d853fd25f..daf82898875786cc9f88c0273cb60b8470cb3634 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"Fjern format","copy":"Kopier","paste":"Lim inn","selectAll":"Velg alle","insertOrderedList":"Nummerert liste","insertTable":"Sett inn/rediger tabell","print":"Skriv ut","underline":"Understreking","foreColor":"Forgrunnsfarge","htmlToggle":"HTML-kilde","formatBlock":"Avsnittsstil","newPage":"Ny side","insertHorizontalRule":"Vannrett strek","delete":"Slett","insertUnorderedList":"Punktliste","tableProp":"Tabellegenskap","insertImage":"Sett inn bilde","superscript":"Hevet skrift","subscript":"Senket skrift","createLink":"Opprett kobling","undo":"Angre","fullScreen":"Slå på/av full skjerm","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejuster","unlink":"Fjern kobling","toggleTableBorder":"Bytt tabellkant","viewSource":"Vis HTML-kilde","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"Fjern format","copy":"Kopier","paste":"Lim inn","selectAll":"Velg alle","insertOrderedList":"Nummerert liste","insertTable":"Sett inn/rediger tabell","print":"Skriv ut","underline":"Understreking","foreColor":"Forgrunnsfarge","htmlToggle":"HTML-kilde","formatBlock":"Avsnittsstil","newPage":"Ny side","insertHorizontalRule":"Vannrett strek","delete":"Slett","appleKey":"⌘${0}","insertUnorderedList":"Punktliste","tableProp":"Tabellegenskap","insertImage":"Sett inn bilde","superscript":"Hevet skrift","subscript":"Senket skrift","createLink":"Opprett kobling","undo":"Angre","fullScreen":"Slå på/av full skjerm","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejuster","unlink":"Fjern kobling","toggleTableBorder":"Bytt tabellkant","viewSource":"Vis HTML-kilde","ctrlKey":"ctrl+${0}","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"})
\ No newline at end of file
index d3d4f19f34154207baedc45ca5a6aaf2b5b33b30..2bdbd583edec8a1679e7ccb34023b0ae8d83fb61 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Geen","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
index 8beb6bf6333bdb1c34003bc33301fd4818b55a6f..e555c2812ceba41cc66fc1151990eb1645f8707e 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Brak","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
index 8ee8acfa997a3f3f3849bd6a85a6019b0c6a65f5..0615a6905388b49c50348b50dca46907477be62a 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"Usuń formatowanie","copy":"Kopiuj","paste":"Wklej","selectAll":"Wybierz wszystko","insertOrderedList":"Lista numerowana","insertTable":"Wstaw/edytuj tabelę","print":"Drukuj","underline":"Podkreślenie","foreColor":"Kolor pierwszego planu","htmlToggle":"Źródło HTML","formatBlock":"Styl akapitu","newPage":"Nowa strona","insertHorizontalRule":"Linia pozioma","delete":"Usuń","insertUnorderedList":"Lista wypunktowana","tableProp":"Właściwość tabeli","insertImage":"Wstaw obraz","superscript":"Indeks górny","subscript":"Indeks dolny","createLink":"Utwórz odsyłacz","undo":"Cofnij","fullScreen":"Przełącz pełny ekran","italic":"Kursywa","fontName":"Nazwa czcionki","justifyLeft":"Wyrównaj do lewej","unlink":"Usuń odsyłacz","toggleTableBorder":"Przełącz ramkę tabeli","viewSource":"Wyświetl kod źródłowy HTML","ctrlKey":"Ctrl+${0}","fontSize":"Wielkość czcionki","systemShortcut":"Działanie ${0} jest dostępne w tej przeglądarce wyłącznie przy użyciu skrótu klawiaturowego. Należy użyć klawiszy ${1}.","indent":"Wcięcie","redo":"Ponów","strikethrough":"Przekreślenie","justifyFull":"Wyrównaj do lewej i prawej","justifyCenter":"Wyrównaj do środka","hiliteColor":"Kolor tła","deleteTable":"Usuń tabelę","outdent":"Usuń wcięcie","cut":"Wytnij","plainFormatBlock":"Styl akapitu","toggleDir":"Przełącz kierunek","bold":"Pogrubienie","tabIndent":"Wcięcie o tabulator","justifyRight":"Wyrównaj do prawej","appleKey":"⌘${0}"})
\ No newline at end of file
+({"removeFormat":"Usuń formatowanie","copy":"Kopiuj","paste":"Wklej","selectAll":"Wybierz wszystko","insertOrderedList":"Lista numerowana","insertTable":"Wstaw/edytuj tabelę","print":"Drukuj","underline":"Podkreślenie","foreColor":"Kolor pierwszego planu","htmlToggle":"Kod źródłowy HTML","formatBlock":"Styl akapitu","newPage":"Nowa strona","insertHorizontalRule":"Linia pozioma","delete":"Usuń","insertUnorderedList":"Lista wypunktowana","tableProp":"Właściwość tabeli","insertImage":"Wstaw obraz","superscript":"Indeks górny","subscript":"Indeks dolny","createLink":"Utwórz odsyłacz","undo":"Cofnij","fullScreen":"Przełącz pełny ekran","italic":"Kursywa","fontName":"Nazwa czcionki","justifyLeft":"Wyrównaj do lewej","unlink":"Usuń odsyłacz","toggleTableBorder":"Przełącz ramkę tabeli","viewSource":"Wyświetl kod źródłowy HTML","ctrlKey":"Ctrl+${0}","fontSize":"Wielkość czcionki","systemShortcut":"Działanie ${0} jest dostępne w tej przeglądarce wyłącznie przy użyciu skrótu klawiaturowego. Należy użyć klawiszy ${1}.","indent":"Wcięcie","redo":"Ponów","strikethrough":"Przekreślenie","justifyFull":"Wyrównaj do lewej i prawej","justifyCenter":"Wyrównaj do środka","hiliteColor":"Kolor tła","deleteTable":"Usuń tabelę","outdent":"Usuń wcięcie","cut":"Wytnij","plainFormatBlock":"Styl akapitu","toggleDir":"Przełącz kierunek","bold":"Pogrubienie","tabIndent":"Wcięcie o tabulator","justifyRight":"Wyrównaj do prawej","appleKey":"⌘${0}"})
\ No newline at end of file
index dec5354e13aad62da0b0e7ff1efaaf0f76720e42..b7b8405c4306405d6e23abe210f7cd4aeb2d944a 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Nenhum","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
index fbf5182effe4f203807ea6a8706676e6b8df586b..1f4815dfe5c3e15b31e1d64527704f508e730027 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"Remover formato","copy":"Copiar","paste":"Colar","selectAll":"Seleccionar tudo","insertOrderedList":"Lista numerada","insertTable":"Inserir/Editar tabela","print":"Imprimir","underline":"Sublinhado","foreColor":"Cor de primeiro plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de parágrafo","newPage":"Nova página","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","fullScreen":"Alternar ecrã completo","italic":"Itálico","fontName":"Nome do tipo de letra","justifyLeft":"Alinhar à esquerda","unlink":"Remover ligação","toggleTableBorder":"Alternar contorno da tabela","viewSource":"Ver origem HTML","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"Remover formato","copy":"Copiar","paste":"Colar","selectAll":"Seleccionar tudo","insertOrderedList":"Lista numerada","insertTable":"Inserir/Editar tabela","print":"Imprimir","underline":"Sublinhado","foreColor":"Cor de primeiro plano","htmlToggle":"Código-fonte de HTML","formatBlock":"Estilo de parágrafo","newPage":"Nova página","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","fullScreen":"Alternar ecrã completo","italic":"Itálico","fontName":"Nome do tipo de letra","justifyLeft":"Alinhar à esquerda","unlink":"Remover ligação","toggleTableBorder":"Alternar contorno da tabela","viewSource":"Ver origem HTML","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index 50de220af9f35e1a436e91899410826df50b04b6..2ce4785f3ca2d38c227771ca0fa8688968251d19 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Nenhuma","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
index 271c6cf515cd6fc654e120c443ff47d0954149d4..cef0a157ea65be5afc689ebe98a1ba302749a7c3 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"Remover Formato","copy":"Copiar","paste":"Colar","selectAll":"Selecionar Todos","insertOrderedList":"Lista Numerada","insertTable":"Inserir/Editar Tabela","print":"Impressão","underline":"Sublinhado","foreColor":"Cor do Primeiro Plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de Parágrafo","newPage":"Nova Página","insertHorizontalRule":"Régua Horizontal","delete":"Excluir","insertUnorderedList":"Lista com Marcadores","tableProp":"Propriedade da Tabela","insertImage":"Inserir Imagem","superscript":"Sobrescrito","subscript":"Subscrito","createLink":"Criar Link","undo":"Desfazer","fullScreen":"Comutar Tela Cheia","italic":"Itálico","fontName":"Nome da Fonte","justifyLeft":"Alinhar pela Esquerda","unlink":"Remover Link","toggleTableBorder":"Alternar Moldura da Tabela","viewSource":"Visualizar Origem HTML","fontSize":"Tamanho da Fonte","systemShortcut":"A ação \"${0}\" está disponível em seu navegador apenas usando um atalho do teclado. Use ${1}.","indent":"Recuar","redo":"Refazer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinhar pelo Centro","hiliteColor":"Cor de segundo plano","deleteTable":"Excluir Tabela","outdent":"Não-chanfrado","cut":"Recortar","plainFormatBlock":"Estilo de Parágrafo","toggleDir":"Comutar Direção","bold":"Negrito","tabIndent":"Recuo de Guia","justifyRight":"Alinhar pela Direita","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"Remover Formato","copy":"Copiar","paste":"Colar","selectAll":"Selecionar Todos","insertOrderedList":"Lista Numerada","insertTable":"Inserir/Editar Tabela","print":"Imprimir","underline":"Sublinhado","foreColor":"Cor do Primeiro Plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de Parágrafo","newPage":"Nova Página","insertHorizontalRule":"Régua Horizontal","delete":"Excluir","insertUnorderedList":"Lista com Marcadores","tableProp":"Propriedade da Tabela","insertImage":"Inserir Imagem","superscript":"Sobrescrito","subscript":"Subscrito","createLink":"Criar Link","undo":"Desfazer","fullScreen":"Comutar Tela Cheia","italic":"Itálico","fontName":"Nome da Fonte","justifyLeft":"Alinhar à Esquerda","unlink":"Remover Link","toggleTableBorder":"Alternar Moldura da Tabela","viewSource":"Visualizar Origem HTML","fontSize":"Tamanho da Fonte","systemShortcut":"A ação \"${0}\" está disponível em seu navegador apenas usando um atalho de teclado. Use ${1}.","indent":"Recuar","redo":"Refazer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinhar pelo Centro","hiliteColor":"Cor do Segundo Plano","deleteTable":"Excluir Tabela","outdent":"Não chanfrado","cut":"Recortar","plainFormatBlock":"Estilo de Parágrafo","toggleDir":"Comutar Direção","bold":"Negrito","tabIndent":"Recuo de Guia","justifyRight":"Alinhar à Direita","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index c3cfb3990825bf542325fcf34e1444485df25386..fba0a84236feef81ca50d86e7af97fdb07eec1b4 100644 (file)
@@ -1 +1 @@
-({"text":"Descriere:","insertImageTitle":"Proprietăţi imagine","set":"Setare","newWindow":"Fereastră nouă","topWindow":"Fereastra cea mai de sus","target":"Ţintă:","createLinkTitle":"Proprietăţi legătură","parentWindow":"Fereastra părinte","currentWindow":"Fereastra curentă","url":"URL:"})
\ No newline at end of file
+({"text":"Descriere:","insertImageTitle":"Proprietăţi imagine","set":"Setare","newWindow":"Fereastra nouă","topWindow":"Fereastra cea mai de sus","target":"Destinaţie:","createLinkTitle":"Proprietăţi legătură","parentWindow":"Fereastra părinte","currentWindow":"Fereastra curentă","url":"URL:"})
\ No newline at end of file
index f73017cbf68d142b09fa05159ddaa13f9bb8eca6..776bcb3ae342d8be4c3a7fe49a3ba29199df71e7 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"Înlăturare format","copy":"Copiere","paste":"Lipire","selectAll":"Selectare toate","insertOrderedList":"Listă numerotată","insertTable":"Inserare/Editare tabelă","print":"Tipărire","underline":"Subliniere","foreColor":"Culoare prim plan","htmlToggle":"Sursă HTML","formatBlock":"Stil paragraf","newPage":"Pagină nouă","insertHorizontalRule":"Regulă orizontală","delete":"Ştergere","insertUnorderedList":"Listă cu marcaje","tableProp":"Proprietăţi tabelă","insertImage":"Inserare imagine","superscript":"Scriere indice superior","subscript":"Scriere indice inferior","createLink":"Creare legătură","undo":"Anulare acţiune","fullScreen":"Comutare ecran complet","italic":"Cursive","fontName":"Nume font","justifyLeft":"Aliniere la stânga","unlink":"Înlăturare legătură","toggleTableBorder":"Comutare bordură tabelă","viewSource":"Vizualizare sursă HTML","fontSize":"Dimensiune font","systemShortcut":"Acţiunea \"${0}\" este disponibilă în browser folosind o scurtătură de la tastatură. Folosiţi ${1}.","indent":"Indentare","redo":"Repetare acţiune","strikethrough":"Suprascriere linie","justifyFull":"Aliniere","justifyCenter":"Aliniere pe centru","hiliteColor":"Culoare fundal","deleteTable":"Ştergere tabelă","outdent":"Outdentare","cut":"Tăiere","plainFormatBlock":"Stil paragraf","toggleDir":"Comutare direcţie","bold":"Aldine","tabIndent":"Indentare cu tab","justifyRight":"Aliniere la dreapta","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"Înlăturare format","copy":"Copiere","paste":"Lipire","selectAll":"Selectează tot","insertOrderedList":"Listă numerotată","insertTable":"Inserare/Editare tabelă","print":"Tipărire","underline":"Subliniere","foreColor":"Culoare de prim-plan","htmlToggle":"Sursă HTML","formatBlock":"Stil paragraf","newPage":"Pagină nouă","insertHorizontalRule":"Linie delimitatoare","delete":"Ştergere","insertUnorderedList":"Listă cu marcator","tableProp":"Proprietate tabelă","insertImage":"Inserare imagine","superscript":"Scriere indice superior","subscript":"Scriere indice inferior","createLink":"Creare legătură","undo":"Anulare acţiune","fullScreen":"Comutare ecran complet","italic":"Cursiv","fontName":"Nume font","justifyLeft":"Aliniere stânga","unlink":"Înlăturare legătură","toggleTableBorder":"Comutare bordură tabelă","viewSource":"Vizualizara sursă HTML","fontSize":"Dimensiune font","systemShortcut":"Acţiunea \"${0}\" este disponibilă în browser doar utilizând o comandă rapidă de la tastatură. Utilizaţi ${1}.","indent":"Micşorare indent","redo":"Refacere acţiune","strikethrough":"Tăiere text cu o linie","justifyFull":"Aliniere stânga-dreapta","justifyCenter":"Aliniere centru","hiliteColor":"Culoare de fundal","deleteTable":"Ştergere tabelă","outdent":"Mărire indent","cut":"Tăiere","plainFormatBlock":"Stil paragraf","toggleDir":"Comutare direcţie","bold":"Aldin","tabIndent":"Indentare Tab","justifyRight":"Aliniere dreapta","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index bdc10430ab0c90a3e32437664fb0d89ee28d2602..b836589cffb947053808f9edf6c76d62882dee04 100644 (file)
@@ -1 +1 @@
-({"1":"самый маленький","2":"очень маленький","formatBlock":"Формат","3":"маленький","4":"средний","5":"большой","6":"очень большой","7":"самый большой","fantasy":"артистический","serif":"с засечками","p":"Абзац","pre":"Заранее отформатированный","sans-serif":"без засечек","fontName":"Шрифт","h1":"Заголовок","h2":"Подзаголовок","h3":"Вложенный подзаголовок","monospace":"непропорциональный","fontSize":"Размер","cursive":"курсив","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Нет","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
index ddc2f7b0f1be4d559a467bb045c5b2ef99fef9ef..0b91f4c099e27d06bd6d9ea096a1799b1f56462e 100644 (file)
@@ -1 +1 @@
-({"text":"Ð\9eпиÑ\81ание:","insertImageTitle":"СвойÑ\81Ñ\82ва Ð¸Ð·Ð¾Ð±Ñ\80ажениÑ\8f","set":"Ð\97адаÑ\82Ñ\8c","newWindow":"Ð\9dовое Ð¾ÐºÐ½Ð¾","topWindow":"Ð\9eкно Ð²ÐµÑ\80Ñ\85него Ñ\83Ñ\80овнÑ\8f","target":"Целевой объект:","createLinkTitle":"Свойства ссылки","parentWindow":"Родительское окно","currentWindow":"Текущее окно","url":"URL:"})
\ No newline at end of file
+({"text":"Ð\9eпиÑ\81ание:","insertImageTitle":"СвойÑ\81Ñ\82ва Ð¸Ð·Ð¾Ð±Ñ\80ажениÑ\8f","set":"Ð\97адаÑ\82Ñ\8c","newWindow":"Ð\9dовое Ð¾ÐºÐ½Ð¾","topWindow":"Ð\92еÑ\80Ñ\85нее Ð¾ÐºÐ½Ð¾","target":"Целевой объект:","createLinkTitle":"Свойства ссылки","parentWindow":"Родительское окно","currentWindow":"Текущее окно","url":"URL:"})
\ No newline at end of file
index b7415e83d44fe2689563d76ea2db61e7b308f61f..afe267bccaebe81d0c070959439e34f5d41a0f62 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Žiadny","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
index 2dcfed19116b2c92d3486340b02b33c687300ec4..e6fe9d303afc164238690abe48f823617691aca6 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Brez","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 oblikovan","sans-serif":"sans-serif","fontName":"Pisava","h1":"Naslovni slog","h2":"Podnaslovni slog","h3":"Pod-podnaslovni slog","monospace":"monospace","fontSize":"Velikost","cursive":"cursive"})
\ No newline at end of file
index bad7dd641c05eaaeffe9f93581694e59a1a6ebd1..e485a416382268e9460e372333fcbd59f1c90647 100644 (file)
@@ -1 +1 @@
-({"text":"Opis:","insertImageTitle":"Lastnosti slike","set":"Nastavi","newWindow":"Novo okno","topWindow":"Najvišje okno","target":"Cilj:","createLinkTitle":"Lastnosti povezave","parentWindow":"Nadrejeno okno","currentWindow":"Trenutno okno","url":"URL:"})
\ No newline at end of file
+({"text":"Opis:","insertImageTitle":"Lastnosti slike","set":"Nastavi","newWindow":"Novo okno","topWindow":"Okno na vrhu","target":"Cilj:","createLinkTitle":"Lastnosti povezave","parentWindow":"Nadrejeno okno","currentWindow":"Trenutno okno","url":"URL:"})
\ No newline at end of file
index 72431aa71e48520fcaa030928ac37b5926557db3..e40b8033b24bab072edc317ed3096ed4e4e1b33d 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"Odstrani obliko zapisa","copy":"Prekopiraj","paste":"Prilepi","selectAll":"Izberi vse","insertOrderedList":"Oštevilčen seznam","insertTable":"Vstavi/uredi tabelo","print":"Natisni","underline":"Podčrtano","foreColor":"Barva ospredja","htmlToggle":"Izvorna koda HTML","formatBlock":"Slog odstavka","newPage":"Nova stran","insertHorizontalRule":"Vodoravno ravnilo","delete":"Izbriši","insertUnorderedList":"Naštevni seznam","tableProp":"Lastnost tabele","insertImage":"Vstavi sliko","superscript":"Nadpisano","subscript":"Podpisano","createLink":"Ustvari povezavo","undo":"Razveljavi","fullScreen":"Preklopi na celozaslonski način","italic":"Ležeče","fontName":"Ime pisave","justifyLeft":"Poravnaj levo","unlink":"Odstrani povezavo","toggleTableBorder":"Preklopi na rob tabele","viewSource":"Prikaži izvorno kodo HTML","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":"Obojestranska poravnava","justifyCenter":"Poravnaj na sredino","hiliteColor":"Barva ozadja","deleteTable":"Izbriši tabelo","outdent":"Viseč odstavek","cut":"Izreži","plainFormatBlock":"Slog odstavka","toggleDir":"Preklopi na usmeritev","bold":"Krepko","tabIndent":"Zamik tabulatorja","justifyRight":"Poravnaj desno","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"Odstrani oblikovanje","copy":"Prekopiraj","paste":"Prilepi","selectAll":"Izberi vse","insertOrderedList":"Oštevilčen seznam","insertTable":"Vstavi/uredi tabelo","print":"Natisni","underline":"Podčrtano","foreColor":"Barva ospredja","htmlToggle":"Izvorna koda HTML","formatBlock":"Slog odstavka","newPage":"Nova stran","insertHorizontalRule":"Vodoravno ravnilo","delete":"Izbriši","insertUnorderedList":"Naštevni seznam","tableProp":"Lastnost tabele","insertImage":"Vstavi sliko","superscript":"Nadpisano","subscript":"Podpisano","createLink":"Ustvari povezavo","undo":"Razveljavi","fullScreen":"Preklopi na celozaslonski način","italic":"Ležeče","fontName":"Ime pisave","justifyLeft":"Poravnaj levo","unlink":"Odstrani povezavo","toggleTableBorder":"Preklopi na rob tabele","viewSource":"Prikaži izvorno kodo HTML","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":"Poravnaj obojestransko","justifyCenter":"Poravnaj na sredino","hiliteColor":"Barva ozadja","deleteTable":"Izbriši tabelo","outdent":"Primakni","cut":"Izreži","plainFormatBlock":"Slog odstavka","toggleDir":"Preklopi smer","bold":"Krepko","tabIndent":"Zamik tabulatorja","justifyRight":"Poravnaj desno","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index a778cc83bf9eb15235c8d8c20c7f62f4f730ec4f..0637af9ff5c560105682452ded11beac4d09fd0b 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Ingen","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
index c3e8f811dfd9d857e1d6144247a60fd9a6853c16..02688efaadcff67a088e06f3ebe91a2148d9ec10 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"ไม่มี","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
index d571c53b4e498a94accadf6bc943d9178e824786..4d1aeb2969cd99edd929c3c97a7d4d09dd04c64d 100644 (file)
@@ -1 +1 @@
-({"text":"รายละเอียด","insertImageTitle":"คุณสมบัติอิมเมจ","set":"ตั้งค่า","newWindow":"หน้าต่างใหม่","topWindow":"หน้าต่างบนสุด","target":"เป้าหมาย:","createLinkTitle":"คุณสมบัติลิงก์","parentWindow":"หน้าต่างหลัก","currentWindow":"หน้าต่างปัจจุบัน","url":"URL:"})
\ No newline at end of file
+({"text":"รายละเอียด:","insertImageTitle":"คุณสมบัติอิมเมจ","set":"ตั้งค่า","newWindow":"หน้าต่างใหม่","topWindow":"หน้าต่างบนสุด","target":"เป้าหมาย:","createLinkTitle":"คุณสมบัติลิงก์","parentWindow":"หน้าต่างหลัก","currentWindow":"หน้าต่างปัจจุบัน","url":"URL:"})
\ No newline at end of file
index c9cdfea537b04a9b3b8980fc5f006ae5e90f78ab..28173c929c890c0ae8754cc25614794a7d4b4aca 100644 (file)
@@ -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ı","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"Yok","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
index b821ec0ece677786460b843f2843a353e9d3a5ce..006977983174588b5f099a69644b72eee2c232b0 100644 (file)
@@ -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","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"無","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
index d72dc4ec41d3bbd060a9995cad6b281fce72054b..17f6fea491389d115a00bce570f2b4f43c8b41bb 100644 (file)
@@ -1 +1 @@
-({"removeFormat":"移除格式","copy":"複製","paste":"貼上","selectAll":"全選","insertOrderedList":"編號清單","insertTable":"插入/編輯表格","print":"列印","underline":"底線","foreColor":"前景顏色","htmlToggle":"HTML 原始檔","formatBlock":"段落樣式","newPage":"新建頁面","insertHorizontalRule":"水平尺規","delete":"刪除","insertUnorderedList":"項目符號清單","tableProp":"表格內容","insertImage":"插入影像","superscript":"上標","subscript":"下標","createLink":"建立鏈結","undo":"復原","fullScreen":"切換全螢幕","italic":"斜體","fontName":"字型名稱","justifyLeft":"靠左對齊","unlink":"移除鏈結","toggleTableBorder":"切換表格邊框","viewSource":"檢視 HTML 原始檔","fontSize":"字型大小","systemShortcut":"\"${0}\" 動作只能在瀏覽器中透過使用鍵盤快速鍵來使用。請使用 ${1}。","indent":"縮排","redo":"重做","strikethrough":"加刪除線","justifyFull":"對齊","justifyCenter":"置中對齊","hiliteColor":"背景顏色","deleteTable":"刪除表格","outdent":"凸排","cut":"剪下","plainFormatBlock":"段落樣式","toggleDir":"切換方向","bold":"粗體","tabIndent":"定位點縮排","justifyRight":"靠右對齊","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
+({"removeFormat":"移除格式","copy":"複製","paste":"貼上","selectAll":"全選","insertOrderedList":"編號清單","insertTable":"插入/編輯表格","print":"列印","underline":"底線","foreColor":"前景顏色","htmlToggle":"HTML 原始檔","formatBlock":"段落樣式","newPage":"新頁面","insertHorizontalRule":"水平尺規","delete":"刪除","insertUnorderedList":"項目符號清單","tableProp":"表格內容","insertImage":"插入影像","superscript":"上標","subscript":"下標","createLink":"建立鏈結","undo":"復原","fullScreen":"切換全螢幕","italic":"斜體","fontName":"字型名稱","justifyLeft":"靠左對齊","unlink":"移除鏈結","toggleTableBorder":"切換表格邊框","viewSource":"檢視 HTML 原始檔","fontSize":"字型大小","systemShortcut":"\"${0}\" 動作在您的瀏覽器中,只能使用鍵盤快速鍵。請使用 ${1}。","indent":"縮排","redo":"重做","strikethrough":"刪除線","justifyFull":"對齊","justifyCenter":"置中對齊","hiliteColor":"背景顏色","deleteTable":"刪除表格","outdent":"凸排","cut":"剪下","plainFormatBlock":"段落樣式","toggleDir":"切換方向","bold":"粗體","tabIndent":"標籤縮排","justifyRight":"靠右對齊","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
index 4d52bb78e9e2727863af2b6734c8085c246a55f2..a9850c7fd7b1d05943089a8b6fc66bf14eb031c5 100644 (file)
@@ -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":"草书","noFormat":"None"})
\ No newline at end of file
+({"noFormat":"无","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
index da4c50026b9edbdcf86a5cb715894a26c17fbbfd..5b5390fbc0696339153caf01227531e4c50d5c06 100644 (file)
@@ -1 +1 @@
-({"text":"描述:","insertImageTitle":"图像属性","set":"设置","newWindow":"新窗口","topWindow":"最顶部窗口","target":"目标:","createLinkTitle":"链接属性","parentWindow":"父窗口","currentWindow":"当前窗口","url":"URL:"})
\ No newline at end of file
+({"text":"描述:","insertImageTitle":"图像属性","set":"设置","newWindow":"新建窗口","topWindow":"顶层窗口","target":"目标:","createLinkTitle":"链接属性","parentWindow":"父窗口","currentWindow":"当前窗口","url":"URL:"})
\ No newline at end of file
index 1e0e2ed3fedc80be2bb2eede2aaebd5c2bc8b3c9..9d0b7ded8b1edef81af6356e7ebf4b82324607f8 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.AlwaysShowToolbar"]){
-dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"]=true;
+if(!dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"] = true;
 dojo.provide("dijit._editor.plugins.AlwaysShowToolbar");
-dojo.declare("dijit._editor.plugins.AlwaysShowToolbar",dijit._editor._Plugin,{_handleScroll:true,setEditor:function(e){
-if(!e.iframe){
-return;
-}
-this.editor=e;
-e.onLoadDeferred.addCallback(dojo.hitch(this,this.enable));
-},enable:function(d){
-this._updateHeight();
-this.connect(window,"onscroll","globalOnScrollHandler");
-this.connect(this.editor,"onNormalizedDisplayChanged","_updateHeight");
-return d;
-},_updateHeight:function(){
-var e=this.editor;
-if(!e.isLoaded){
-return;
-}
-if(e.height){
-return;
-}
-var _1=dojo.marginBox(e.editNode).h;
-if(dojo.isOpera){
-_1=e.editNode.scrollHeight;
-}
-if(!_1){
-_1=dojo.marginBox(e.document.body).h;
-}
-if(_1==0){
-return;
-}
-if(dojo.isIE<=7&&this.editor.minHeight){
-var _2=parseInt(this.editor.minHeight);
-if(_1<_2){
-_1=_2;
-}
-}
-if(_1!=this._lastHeight){
-this._lastHeight=_1;
-dojo.marginBox(e.iframe,{h:this._lastHeight});
-}
-},_lastHeight:0,globalOnScrollHandler:function(){
-var _3=dojo.isIE<7;
-if(!this._handleScroll){
-return;
-}
-var _4=this.editor.header;
-var db=dojo.body;
-if(!this._scrollSetUp){
-this._scrollSetUp=true;
-this._scrollThreshold=dojo.position(_4,true).y;
-}
-var _5=dojo._docScroll().y;
-var s=_4.style;
-if(_5>this._scrollThreshold&&_5<this._scrollThreshold+this._lastHeight){
-if(!this._fixEnabled){
-var _6=dojo.marginBox(_4);
-this.editor.iframe.style.marginTop=_6.h+"px";
-if(_3){
-s.left=dojo.position(_4).x;
-if(_4.previousSibling){
-this._IEOriginalPos=["after",_4.previousSibling];
-}else{
-if(_4.nextSibling){
-this._IEOriginalPos=["before",_4.nextSibling];
-}else{
-this._IEOriginalPos=["last",_4.parentNode];
-}
-}
-dojo.body().appendChild(_4);
-dojo.addClass(_4,"dijitIEFixedToolbar");
-}else{
-s.position="fixed";
-s.top="0px";
-}
-dojo.marginBox(_4,{w:_6.w});
-s.zIndex=2000;
-this._fixEnabled=true;
-}
-var _7=(this.height)?parseInt(this.editor.height):this.editor._lastHeight;
-s.display=(_5>this._scrollThreshold+_7)?"none":"";
-}else{
-if(this._fixEnabled){
-this.editor.iframe.style.marginTop="";
-s.position="";
-s.top="";
-s.zIndex="";
-s.display="";
-if(_3){
-s.left="";
-dojo.removeClass(_4,"dijitIEFixedToolbar");
-if(this._IEOriginalPos){
-dojo.place(_4,this._IEOriginalPos[1],this._IEOriginalPos[0]);
-this._IEOriginalPos=null;
-}else{
-dojo.place(_4,this.editor.iframe,"before");
-}
-}
-s.width="";
-this._fixEnabled=false;
-}
-}
-},destroy:function(){
-this._IEOriginalPos=null;
-this._handleScroll=false;
-dojo.forEach(this._connects,dojo.disconnect);
-if(dojo.isIE<7){
-dojo.removeClass(this.editor.header,"dijitIEFixedToolbar");
-}
-}});
+dojo.require("dijit._editor._Plugin");
+
+
+dojo.declare("dijit._editor.plugins.AlwaysShowToolbar", dijit._editor._Plugin,
+       {
+       // summary:
+       //              This plugin is required for Editors in auto-expand mode.
+       //              It handles the auto-expansion as the user adds/deletes text,
+       //              and keeps the editor's toolbar visible even when the top of the editor
+       //              has scrolled off the top of the viewport (usually when editing a long
+       //              document).
+       // description:
+       //              Specify this in extraPlugins (or plugins) parameter and also set
+       //              height to "".
+       // example:
+       //      |       <div dojoType="dijit.Editor" height=""
+       //      |       extraPlugins="['dijit._editor.plugins.AlwaysShowToolbar']">
+
+       // _handleScroll: Boolean
+       //              Enables/disables the handler for scroll events
+       _handleScroll: true,
+
+       setEditor: function(e){
+               // Overrides _Plugin.setEditor().
+               if(!e.iframe){
+                       console.log('Port AlwaysShowToolbar plugin to work with Editor without iframe');
+                       return;
+               }
+
+               this.editor = e;
+
+               e.onLoadDeferred.addCallback(dojo.hitch(this, this.enable));
+       },
+
+       enable: function(d){
+               // summary:
+               //              Enable plugin.  Called when Editor has finished initializing.
+               // tags:
+               //              private
+
+               this._updateHeight();
+               this.connect(window, 'onscroll', "globalOnScrollHandler");
+               this.connect(this.editor, 'onNormalizedDisplayChanged', "_updateHeight");
+               return d;
+       },
+
+       _updateHeight: function(){
+               // summary:
+               //              Updates the height of the editor area to fit the contents.
+               var e = this.editor;
+               if(!e.isLoaded){ return; }
+               if(e.height){ return; }
+
+               var height = dojo._getMarginSize(e.editNode).h;
+               if(dojo.isOpera){
+                       height = e.editNode.scrollHeight;
+               }
+               // console.debug('height',height);
+               // alert(this.editNode);
+
+               //height maybe zero in some cases even though the content is not empty,
+               //we try the height of body instead
+               if(!height){
+                       height = dojo._getMarginSize(e.document.body).h;
+               }
+
+               if(height == 0){
+                       console.debug("Can not figure out the height of the editing area!");
+                       return; //prevent setting height to 0
+               }
+               if(dojo.isIE <= 7 && this.editor.minHeight){
+                       var min = parseInt(this.editor.minHeight);
+                       if(height < min){ height = min; }
+               }
+               if(height != this._lastHeight){
+                       this._lastHeight = height;
+                       // this.editorObject.style.height = this._lastHeight + "px";
+                       dojo.marginBox(e.iframe, { h: this._lastHeight });
+               }
+       },
+
+       // _lastHeight: Integer
+       //              Height in px of the editor at the last time we did sizing
+       _lastHeight: 0,
+
+       globalOnScrollHandler: function(){
+               // summary:
+               //              Handler for scroll events that bubbled up to <html>
+               // tags:
+               //              private
+
+               var isIE6 = dojo.isIE < 7;
+               if(!this._handleScroll){ return; }
+               var tdn = this.editor.header;
+               var db = dojo.body;
+
+               if(!this._scrollSetUp){
+                       this._scrollSetUp = true;
+                       this._scrollThreshold = dojo.position(tdn, true).y;
+//                     console.log("threshold:", this._scrollThreshold);
+                       //what's this for?? comment out for now
+//                     if((isIE6)&&(db)&&(dojo.style(db, "backgroundIimage")=="none")){
+//                             db.style.backgroundImage = "url(" + dojo.uri.moduleUri("dijit", "templates/blank.gif") + ")";
+//                             db.style.backgroundAttachment = "fixed";
+//                     }
+               }
+
+               var scrollPos = dojo._docScroll().y;
+               var s = tdn.style;
+
+               if(scrollPos > this._scrollThreshold && scrollPos < this._scrollThreshold+this._lastHeight){
+                       // dojo.debug(scrollPos);
+                       if(!this._fixEnabled){
+                               var tdnbox = dojo._getMarginSize(tdn);
+                               this.editor.iframe.style.marginTop = tdnbox.h+"px";
+
+                               if(isIE6){
+                                       s.left = dojo.position(tdn).x;
+                                       if(tdn.previousSibling){
+                                               this._IEOriginalPos = ['after',tdn.previousSibling];
+                                       }else if(tdn.nextSibling){
+                                               this._IEOriginalPos = ['before',tdn.nextSibling];
+                                       }else{
+                                               this._IEOriginalPos = ['last',tdn.parentNode];
+                                       }
+                                       dojo.body().appendChild(tdn);
+                                       dojo.addClass(tdn,'dijitIEFixedToolbar');
+                               }else{
+                                       s.position = "fixed";
+                                       s.top = "0px";
+                               }
+
+                               dojo.marginBox(tdn, { w: tdnbox.w });
+                               s.zIndex = 2000;
+                               this._fixEnabled = true;
+                       }
+                       // if we're showing the floating toolbar, make sure that if
+                       // we've scrolled past the bottom of the editor that we hide
+                       // the toolbar for this instance of the editor.
+
+                       // TODO: when we get multiple editor toolbar support working
+                       // correctly, ensure that we check this against the scroll
+                       // position of the bottom-most editor instance.
+                       var eHeight = (this.height) ? parseInt(this.editor.height) : this.editor._lastHeight;
+                       s.display = (scrollPos > this._scrollThreshold+eHeight) ? "none" : "";
+               }else if(this._fixEnabled){
+                       this.editor.iframe.style.marginTop = '';
+                       s.position = "";
+                       s.top = "";
+                       s.zIndex = "";
+                       s.display = "";
+                       if(isIE6){
+                               s.left = "";
+                               dojo.removeClass(tdn,'dijitIEFixedToolbar');
+                               if(this._IEOriginalPos){
+                                       dojo.place(tdn, this._IEOriginalPos[1], this._IEOriginalPos[0]);
+                                       this._IEOriginalPos = null;
+                               }else{
+                                       dojo.place(tdn, this.editor.iframe, 'before');
+                               }
+                       }
+                       s.width = "";
+                       this._fixEnabled = false;
+               }
+       },
+
+       destroy: function(){
+               // Overrides _Plugin.destroy().   TODO: call this.inherited() rather than repeating code.
+               this._IEOriginalPos = null;
+               this._handleScroll = false;
+               dojo.forEach(this._connects, dojo.disconnect);
+//             clearInterval(this.scrollInterval);
+
+               if(dojo.isIE < 7){
+                       dojo.removeClass(this.editor.header, 'dijitIEFixedToolbar');
+               }
+       }
+});
+
 }
index 51a8fdde84d5f9c9256caa6838e6ed960893f075..670d491ae4d2afacba5839f0fb6f89c543c13e1f 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.EnterKeyHandling"]){
-dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]=true;
+if(!dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"] = true;
 dojo.provide("dijit._editor.plugins.EnterKeyHandling");
 dojo.require("dojo.window");
-dojo.declare("dijit._editor.plugins.EnterKeyHandling",dijit._editor._Plugin,{blockNodeForEnter:"BR",constructor:function(_1){
-if(_1){
-dojo.mixin(this,_1);
-}
-},setEditor:function(_2){
-this.editor=_2;
-if(this.blockNodeForEnter=="BR"){
-if(dojo.isIE){
-_2.contentDomPreFilters.push(dojo.hitch(this,"regularPsToSingleLinePs"));
-_2.contentDomPostFilters.push(dojo.hitch(this,"singleLinePsToRegularPs"));
-_2.onLoadDeferred.addCallback(dojo.hitch(this,"_fixNewLineBehaviorForIE"));
-}else{
-_2.onLoadDeferred.addCallback(dojo.hitch(this,function(d){
-try{
-this.editor.document.execCommand("insertBrOnReturn",false,true);
-}
-catch(e){
-}
-return d;
-}));
-}
-}else{
-if(this.blockNodeForEnter){
-dojo["require"]("dijit._editor.range");
-var h=dojo.hitch(this,this.handleEnterKey);
-_2.addKeyHandler(13,0,0,h);
-_2.addKeyHandler(13,0,1,h);
-this.connect(this.editor,"onKeyPressed","onKeyPressed");
-}
-}
-},onKeyPressed:function(e){
-if(this._checkListLater){
-if(dojo.withGlobal(this.editor.window,"isCollapsed",dijit)){
-var _3=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,["LI"]);
-if(!_3){
-dijit._editor.RichText.prototype.execCommand.call(this.editor,"formatblock",this.blockNodeForEnter);
-var _4=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.blockNodeForEnter]);
-if(_4){
-_4.innerHTML=this.bogusHtmlContent;
-if(dojo.isIE){
-var r=this.editor.document.selection.createRange();
-r.move("character",-1);
-r.select();
-}
-}else{
-console.error("onKeyPressed: Cannot find the new block node");
-}
-}else{
-if(dojo.isMoz){
-if(_3.parentNode.parentNode.nodeName=="LI"){
-_3=_3.parentNode.parentNode;
-}
-}
-var fc=_3.firstChild;
-if(fc&&fc.nodeType==1&&(fc.nodeName=="UL"||fc.nodeName=="OL")){
-_3.insertBefore(fc.ownerDocument.createTextNode(" "),fc);
-var _5=dijit.range.create(this.editor.window);
-_5.setStart(_3.firstChild,0);
-var _6=dijit.range.getSelection(this.editor.window,true);
-_6.removeAllRanges();
-_6.addRange(_5);
-}
-}
-}
-this._checkListLater=false;
-}
-if(this._pressedEnterInBlock){
-if(this._pressedEnterInBlock.previousSibling){
-this.removeTrailingBr(this._pressedEnterInBlock.previousSibling);
-}
-delete this._pressedEnterInBlock;
-}
-},bogusHtmlContent:"&nbsp;",blockNodes:/^(?:P|H1|H2|H3|H4|H5|H6|LI)$/,handleEnterKey:function(e){
-var _7,_8,_9,_a=this.editor.document,br;
-if(e.shiftKey){
-var _b=dojo.withGlobal(this.editor.window,"getParentElement",dijit._editor.selection);
-var _c=dijit.range.getAncestor(_b,this.blockNodes);
-if(_c){
-if(!e.shiftKey&&_c.tagName=="LI"){
-return true;
-}
-_7=dijit.range.getSelection(this.editor.window);
-_8=_7.getRangeAt(0);
-if(!_8.collapsed){
-_8.deleteContents();
-_7=dijit.range.getSelection(this.editor.window);
-_8=_7.getRangeAt(0);
-}
-if(dijit.range.atBeginningOfContainer(_c,_8.startContainer,_8.startOffset)){
-if(e.shiftKey){
-br=_a.createElement("br");
-_9=dijit.range.create(this.editor.window);
-_c.insertBefore(br,_c.firstChild);
-_9.setStartBefore(br.nextSibling);
-_7.removeAllRanges();
-_7.addRange(_9);
-}else{
-dojo.place(br,_c,"before");
-}
-}else{
-if(dijit.range.atEndOfContainer(_c,_8.startContainer,_8.startOffset)){
-_9=dijit.range.create(this.editor.window);
-br=_a.createElement("br");
-if(e.shiftKey){
-_c.appendChild(br);
-_c.appendChild(_a.createTextNode(" "));
-_9.setStart(_c.lastChild,0);
-}else{
-dojo.place(br,_c,"after");
-_9.setStartAfter(_c);
-}
-_7.removeAllRanges();
-_7.addRange(_9);
-}else{
-return true;
-}
-}
-}else{
-dijit._editor.RichText.prototype.execCommand.call(this.editor,"inserthtml","<br>");
-}
-return false;
-}
-var _d=true;
-_7=dijit.range.getSelection(this.editor.window);
-_8=_7.getRangeAt(0);
-if(!_8.collapsed){
-_8.deleteContents();
-_7=dijit.range.getSelection(this.editor.window);
-_8=_7.getRangeAt(0);
-}
-var _e=dijit.range.getBlockAncestor(_8.endContainer,null,this.editor.editNode);
-var _f=_e.blockNode;
-if((this._checkListLater=(_f&&(_f.nodeName=="LI"||_f.parentNode.nodeName=="LI")))){
-if(dojo.isMoz){
-this._pressedEnterInBlock=_f;
-}
-if(/^(\s|&nbsp;|\xA0|<span\b[^>]*\bclass=['"]Apple-style-span['"][^>]*>(\s|&nbsp;|\xA0)<\/span>)?(<br>)?$/.test(_f.innerHTML)){
-_f.innerHTML="";
-if(dojo.isWebKit){
-_9=dijit.range.create(this.editor.window);
-_9.setStart(_f,0);
-_7.removeAllRanges();
-_7.addRange(_9);
-}
-this._checkListLater=false;
-}
-return true;
-}
-if(!_e.blockNode||_e.blockNode===this.editor.editNode){
-try{
-dijit._editor.RichText.prototype.execCommand.call(this.editor,"formatblock",this.blockNodeForEnter);
-}
-catch(e2){
-}
-_e={blockNode:dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.blockNodeForEnter]),blockContainer:this.editor.editNode};
-if(_e.blockNode){
-if(_e.blockNode!=this.editor.editNode&&(!(_e.blockNode.textContent||_e.blockNode.innerHTML).replace(/^\s+|\s+$/g,"").length)){
-this.removeTrailingBr(_e.blockNode);
-return false;
-}
-}else{
-_e.blockNode=this.editor.editNode;
-}
-_7=dijit.range.getSelection(this.editor.window);
-_8=_7.getRangeAt(0);
-}
-var _10=_a.createElement(this.blockNodeForEnter);
-_10.innerHTML=this.bogusHtmlContent;
-this.removeTrailingBr(_e.blockNode);
-if(dijit.range.atEndOfContainer(_e.blockNode,_8.endContainer,_8.endOffset)){
-if(_e.blockNode===_e.blockContainer){
-_e.blockNode.appendChild(_10);
-}else{
-dojo.place(_10,_e.blockNode,"after");
-}
-_d=false;
-_9=dijit.range.create(this.editor.window);
-_9.setStart(_10,0);
-_7.removeAllRanges();
-_7.addRange(_9);
-if(this.editor.height){
-dojo.window.scrollIntoView(_10);
-}
-}else{
-if(dijit.range.atBeginningOfContainer(_e.blockNode,_8.startContainer,_8.startOffset)){
-dojo.place(_10,_e.blockNode,_e.blockNode===_e.blockContainer?"first":"before");
-if(_10.nextSibling&&this.editor.height){
-_9=dijit.range.create(this.editor.window);
-_9.setStart(_10.nextSibling,0);
-_7.removeAllRanges();
-_7.addRange(_9);
-dojo.window.scrollIntoView(_10.nextSibling);
-}
-_d=false;
-}else{
-if(_e.blockNode===_e.blockContainer){
-_e.blockNode.appendChild(_10);
-}else{
-dojo.place(_10,_e.blockNode,"after");
-}
-_d=false;
-if(_e.blockNode.style){
-if(_10.style){
-if(_e.blockNode.style.cssText){
-_10.style.cssText=_e.blockNode.style.cssText;
-}
-}
-}
-var rs=_8.startContainer;
-if(rs&&rs.nodeType==3){
-var _11,_12;
-var txt=rs.nodeValue;
-var _13=_a.createTextNode(txt.substring(0,_8.startOffset));
-var _14=_a.createTextNode(txt.substring(_8.startOffset,txt.length));
-dojo.place(_13,rs,"before");
-dojo.place(_14,rs,"after");
-dojo.destroy(rs);
-var _15=_13.parentNode;
-while(_15!==_e.blockNode){
-var tg=_15.tagName;
-var _16=_a.createElement(tg);
-if(_15.style){
-if(_16.style){
-if(_15.style.cssText){
-_16.style.cssText=_15.style.cssText;
-}
-}
-}
-_11=_14;
-while(_11){
-_12=_11.nextSibling;
-_16.appendChild(_11);
-_11=_12;
-}
-dojo.place(_16,_15,"after");
-_13=_15;
-_14=_16;
-_15=_15.parentNode;
-}
-_11=_14;
-if(_11.nodeType==1||(_11.nodeType==3&&_11.nodeValue)){
-_10.innerHTML="";
-}
-while(_11){
-_12=_11.nextSibling;
-_10.appendChild(_11);
-_11=_12;
-}
-}
-_9=dijit.range.create(this.editor.window);
-_9.setStart(_10,0);
-_7.removeAllRanges();
-_7.addRange(_9);
-if(this.editor.height){
-dijit.scrollIntoView(_10);
-}
-if(dojo.isMoz){
-this._pressedEnterInBlock=_e.blockNode;
-}
-}
-}
-return _d;
-},removeTrailingBr:function(_17){
-var _18=/P|DIV|LI/i.test(_17.tagName)?_17:dijit._editor.selection.getParentOfType(_17,["P","DIV","LI"]);
-if(!_18){
-return;
-}
-if(_18.lastChild){
-if((_18.childNodes.length>1&&_18.lastChild.nodeType==3&&/^[\s\xAD]*$/.test(_18.lastChild.nodeValue))||_18.lastChild.tagName=="BR"){
-dojo.destroy(_18.lastChild);
-}
-}
-if(!_18.childNodes.length){
-_18.innerHTML=this.bogusHtmlContent;
-}
-},_fixNewLineBehaviorForIE:function(d){
-var doc=this.editor.document;
-if(doc.__INSERTED_EDITIOR_NEWLINE_CSS===undefined){
-var _19=dojo.create("style",{type:"text/css"},doc.getElementsByTagName("head")[0]);
-_19.styleSheet.cssText="p{margin:0;}";
-this.editor.document.__INSERTED_EDITIOR_NEWLINE_CSS=true;
-}
-return d;
-},regularPsToSingleLinePs:function(_1a,_1b){
-function _1c(el){
-function _1d(_1e){
-var _1f=_1e[0].ownerDocument.createElement("p");
-_1e[0].parentNode.insertBefore(_1f,_1e[0]);
-dojo.forEach(_1e,function(_20){
-_1f.appendChild(_20);
-});
-};
-var _21=0;
-var _22=[];
-var _23;
-while(_21<el.childNodes.length){
-_23=el.childNodes[_21];
-if(_23.nodeType==3||(_23.nodeType==1&&_23.nodeName!="BR"&&dojo.style(_23,"display")!="block")){
-_22.push(_23);
-}else{
-var _24=_23.nextSibling;
-if(_22.length){
-_1d(_22);
-_21=(_21+1)-_22.length;
-if(_23.nodeName=="BR"){
-dojo.destroy(_23);
-}
-}
-_22=[];
-}
-_21++;
-}
-if(_22.length){
-_1d(_22);
-}
-};
-function _25(el){
-var _26=null;
-var _27=[];
-var _28=el.childNodes.length-1;
-for(var i=_28;i>=0;i--){
-_26=el.childNodes[i];
-if(_26.nodeName=="BR"){
-var _29=_26.ownerDocument.createElement("p");
-dojo.place(_29,el,"after");
-if(_27.length==0&&i!=_28){
-_29.innerHTML="&nbsp;";
-}
-dojo.forEach(_27,function(_2a){
-_29.appendChild(_2a);
-});
-dojo.destroy(_26);
-_27=[];
-}else{
-_27.unshift(_26);
-}
-}
-};
-var _2b=[];
-var ps=_1a.getElementsByTagName("p");
-dojo.forEach(ps,function(p){
-_2b.push(p);
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit._editor.range");
+
+
+dojo.declare("dijit._editor.plugins.EnterKeyHandling", dijit._editor._Plugin, {
+       // summary:
+       //              This plugin tries to make all browsers behave consistently with regard to
+       //              how ENTER behaves in the editor window.  It traps the ENTER key and alters
+       //              the way DOM is constructed in certain cases to try to commonize the generated
+       //              DOM and behaviors across browsers.
+       //
+       // description:
+       //              This plugin has three modes:
+       //
+       //                      * blockModeForEnter=BR
+       //                      * blockModeForEnter=DIV
+       //                      * blockModeForEnter=P
+       //
+       //              In blockModeForEnter=P, the ENTER key starts a new
+       //              paragraph, and shift-ENTER starts a new line in the current paragraph.
+       //              For example, the input:
+       //
+       //              |       first paragraph <shift-ENTER>
+       //              |       second line of first paragraph <ENTER>
+       //              |       second paragraph
+       //
+       //              will generate:
+       //
+       //              |       <p>
+       //              |               first paragraph
+       //              |               <br/>
+       //              |               second line of first paragraph
+       //              |       </p>
+       //              |       <p>
+       //              |               second paragraph
+       //              |       </p>
+       //
+       //              In BR and DIV mode, the ENTER key conceptually goes to a new line in the
+       //              current paragraph, and users conceptually create a new paragraph by pressing ENTER twice.
+       //              For example, if the user enters text into an editor like this:
+       //
+       //              |               one <ENTER>
+       //              |               two <ENTER>
+       //              |               three <ENTER>
+       //              |               <ENTER>
+       //              |               four <ENTER>
+       //              |               five <ENTER>
+       //              |               six <ENTER>
+       //
+       //              It will appear on the screen as two 'paragraphs' of three lines each.  Markupwise, this generates:
+       //
+       //              BR:
+       //              |               one<br/>
+       //              |               two<br/>
+       //              |               three<br/>
+       //              |               <br/>
+       //              |               four<br/>
+       //              |               five<br/>
+       //              |               six<br/>
+       //
+       //              DIV:
+       //              |               <div>one</div>
+       //              |               <div>two</div>
+       //              |               <div>three</div>
+       //              |               <div>&nbsp;</div>
+       //              |               <div>four</div>
+       //              |               <div>five</div>
+       //              |               <div>six</div>
+
+       // blockNodeForEnter: String
+       //              This property decides the behavior of Enter key. It can be either P,
+       //              DIV, BR, or empty (which means disable this feature). Anything else
+       //              will trigger errors.  The default is 'BR'
+       //
+       //              See class description for more details.
+       blockNodeForEnter: 'BR',
+
+       constructor: function(args){
+               if(args){
+                       if("blockNodeForEnter" in args){
+                               args.blockNodeForEnter = args.blockNodeForEnter.toUpperCase();
+                       }
+                       dojo.mixin(this,args);
+               }
+       },
+
+       setEditor: function(editor){
+               // Overrides _Plugin.setEditor().
+               if(this.editor === editor) { return; }
+               this.editor = editor;
+               if(this.blockNodeForEnter == 'BR'){
+                       // While Moz has a mode tht mostly works, it's still a little different,
+                       // So, try to just have a common mode and be consistent.  Which means
+                       // we need to enable customUndo, if not already enabled.
+                       this.editor.customUndo = true;
+                               editor.onLoadDeferred.addCallback(dojo.hitch(this,function(d){
+                               this.connect(editor.document, "onkeypress", function(e){
+                                       if(e.charOrCode == dojo.keys.ENTER){
+                                               // Just do it manually.  The handleEnterKey has a shift mode that
+                                               // Always acts like <br>, so just use it.
+                                               var ne = dojo.mixin({},e);
+                                               ne.shiftKey = true;
+                                               if(!this.handleEnterKey(ne)){
+                                                       dojo.stopEvent(e);
+                                               }
+                                       }
+                               });
+                                       return d;
+                               }));
+               }else if(this.blockNodeForEnter){
+                       // add enter key handler
+                       // FIXME: need to port to the new event code!!
+                       var h = dojo.hitch(this,this.handleEnterKey);
+                       editor.addKeyHandler(13, 0, 0, h); //enter
+                       editor.addKeyHandler(13, 0, 1, h); //shift+enter
+                       this.connect(this.editor,'onKeyPressed','onKeyPressed');
+               }
+       },
+       onKeyPressed: function(e){
+               // summary:
+               //              Handler for keypress events.
+               // tags:
+               //              private
+               if(this._checkListLater){
+                       if(dojo.withGlobal(this.editor.window, 'isCollapsed', dijit)){
+                               var liparent=dojo.withGlobal(this.editor.window, 'getAncestorElement', dijit._editor.selection, ['LI']);
+                               if(!liparent){
+                                       // circulate the undo detection code by calling RichText::execCommand directly
+                                       dijit._editor.RichText.prototype.execCommand.call(this.editor, 'formatblock',this.blockNodeForEnter);
+                                       // set the innerHTML of the new block node
+                                       var block = dojo.withGlobal(this.editor.window, 'getAncestorElement', dijit._editor.selection, [this.blockNodeForEnter]);
+                                       if(block){
+                                               block.innerHTML=this.bogusHtmlContent;
+                                               if(dojo.isIE){
+                                                       // move to the start by moving backwards one char
+                                                       var r = this.editor.document.selection.createRange();
+                                                       r.move('character',-1);
+                                                       r.select();
+                                               }
+                                       }else{
+                                               console.error('onKeyPressed: Cannot find the new block node'); // FIXME
+                                       }
+                               }else{
+                                       if(dojo.isMoz){
+                                               if(liparent.parentNode.parentNode.nodeName == 'LI'){
+                                                       liparent=liparent.parentNode.parentNode;
+                                               }
+                                       }
+                                       var fc=liparent.firstChild;
+                                       if(fc && fc.nodeType == 1 && (fc.nodeName == 'UL' || fc.nodeName == 'OL')){
+                                               liparent.insertBefore(fc.ownerDocument.createTextNode('\xA0'),fc);
+                                               var newrange = dijit.range.create(this.editor.window);
+                                               newrange.setStart(liparent.firstChild,0);
+                                               var selection = dijit.range.getSelection(this.editor.window, true);
+                                               selection.removeAllRanges();
+                                               selection.addRange(newrange);
+                                       }
+                               }
+                       }
+                       this._checkListLater = false;
+               }
+               if(this._pressedEnterInBlock){
+                       // the new created is the original current P, so we have previousSibling below
+                       if(this._pressedEnterInBlock.previousSibling){
+                               this.removeTrailingBr(this._pressedEnterInBlock.previousSibling);
+                       }
+                       delete this._pressedEnterInBlock;
+               }
+       },
+
+       // bogusHtmlContent: [private] String
+       //              HTML to stick into a new empty block
+       bogusHtmlContent: '&nbsp;',
+
+       // blockNodes: [private] Regex
+       //              Regex for testing if a given tag is a block level (display:block) tag
+       blockNodes: /^(?:P|H1|H2|H3|H4|H5|H6|LI)$/,
+
+       handleEnterKey: function(e){
+               // summary:
+               //              Handler for enter key events when blockModeForEnter is DIV or P.
+               // description:
+               //              Manually handle enter key event to make the behavior consistent across
+               //              all supported browsers. See class description for details.
+               // tags:
+               //              private
+
+               var selection, range, newrange, startNode, endNode, brNode, doc=this.editor.document,br,rs,txt;
+               if(e.shiftKey){         // shift+enter always generates <br>
+                       var parent = dojo.withGlobal(this.editor.window, "getParentElement", dijit._editor.selection);
+                       var header = dijit.range.getAncestor(parent,this.blockNodes);
+                       if(header){
+                               if(header.tagName == 'LI'){
+                                       return true; // let browser handle
+                               }
+                               selection = dijit.range.getSelection(this.editor.window);
+                               range = selection.getRangeAt(0);
+                               if(!range.collapsed){
+                                       range.deleteContents();
+                                       selection = dijit.range.getSelection(this.editor.window);
+                                       range = selection.getRangeAt(0);
+                               }
+                               if(dijit.range.atBeginningOfContainer(header, range.startContainer, range.startOffset)){
+                                               br=doc.createElement('br');
+                                               newrange = dijit.range.create(this.editor.window);
+                                               header.insertBefore(br,header.firstChild);
+                                               newrange.setStartBefore(br.nextSibling);
+                                               selection.removeAllRanges();
+                                               selection.addRange(newrange);
+                               }else if(dijit.range.atEndOfContainer(header, range.startContainer, range.startOffset)){
+                                       newrange = dijit.range.create(this.editor.window);
+                                       br=doc.createElement('br');
+                                               header.appendChild(br);
+                                               header.appendChild(doc.createTextNode('\xA0'));
+                                               newrange.setStart(header.lastChild,0);
+                                       selection.removeAllRanges();
+                                       selection.addRange(newrange);
+                               }else{
+                                       rs = range.startContainer;
+                                       if(rs && rs.nodeType == 3){
+                                               // Text node, we have to split it.
+                                               txt = rs.nodeValue;
+                                               dojo.withGlobal(this.editor.window, function(){
+                                                       startNode = doc.createTextNode(txt.substring(0, range.startOffset));
+                                                       endNode = doc.createTextNode(txt.substring(range.startOffset));
+                                                       brNode = doc.createElement("br");
+                                                       
+                                                       if(endNode.nodeValue == "" && dojo.isWebKit){
+                                                               endNode = doc.createTextNode('\xA0')
+                                                       }
+                                                       dojo.place(startNode, rs, "after");
+                                                       dojo.place(brNode, startNode, "after");
+                                                       dojo.place(endNode, brNode, "after");
+                                                       dojo.destroy(rs);
+                                                       newrange = dijit.range.create(dojo.gobal);
+                                                       newrange.setStart(endNode,0);
+                                                       selection.removeAllRanges();
+                                                       selection.addRange(newrange);
+                                               });
+                                               return false;
+                                       }
+                                       return true; // let browser handle
+                               }
+                       }else{
+                               selection = dijit.range.getSelection(this.editor.window);
+                               if(selection.rangeCount){
+                                       range = selection.getRangeAt(0);
+                                       if(range && range.startContainer){
+                                               if(!range.collapsed){
+                                                       range.deleteContents();
+                                                       selection = dijit.range.getSelection(this.editor.window);
+                                                       range = selection.getRangeAt(0);
+                                               }
+                                               rs = range.startContainer;
+                                               if(rs && rs.nodeType == 3){
+                                                       // Text node, we have to split it.
+                                                       dojo.withGlobal(this.editor.window, dojo.hitch(this, function(){
+                                                               var endEmpty = false;
+                                                       
+                                                               var offset = range.startOffset;
+                                                               if(rs.length < offset){
+                                                                       //We are not splitting the right node, try to locate the correct one
+                                                                       ret = this._adjustNodeAndOffset(rs, offset);
+                                                                       rs = ret.node;
+                                                                       offset = ret.offset;
+                                                               }
+                                                               txt = rs.nodeValue;
+                               
+                                                               startNode = doc.createTextNode(txt.substring(0, offset));
+                                                               endNode = doc.createTextNode(txt.substring(offset));
+                                                               brNode = doc.createElement("br");
+                                                               
+                                                               if(!endNode.length){
+                                                                       endNode = doc.createTextNode('\xA0');
+                                                                       endEmpty = true;
+                                                               }
+                                                               
+                                                               if(startNode.length){
+                                                                       dojo.place(startNode, rs, "after");
+                                                               }else{
+                                                                       startNode = rs;
+                                                               }
+                                                               dojo.place(brNode, startNode, "after");
+                                                               dojo.place(endNode, brNode, "after");
+                                                               dojo.destroy(rs);
+                                                               newrange = dijit.range.create(dojo.gobal);
+                                                               newrange.setStart(endNode,0);
+                                                               newrange.setEnd(endNode, endNode.length);
+                                                               selection.removeAllRanges();
+                                                               selection.addRange(newrange);
+                                                               if(endEmpty && !dojo.isWebKit){
+                                                                       dijit._editor.selection.remove();
+                                                               }else{
+                                                                       dijit._editor.selection.collapse(true);
+                                                               }
+                                                       }));
+                                               }else{
+                                                       dojo.withGlobal(this.editor.window, dojo.hitch(this, function(){
+                                                               var brNode = doc.createElement("br");
+                                                               rs.appendChild(brNode);
+                                                               var endNode = doc.createTextNode('\xA0');
+                                                               rs.appendChild(endNode);
+                                                               newrange = dijit.range.create(dojo.global);
+                                                               newrange.setStart(endNode,0);
+                                                               newrange.setEnd(endNode, endNode.length);
+                                                               selection.removeAllRanges();
+                                                               selection.addRange(newrange);
+                                                               dijit._editor.selection.collapse(true);
+                                                       }));
+                                               }
+                                       }
+                               }else{
+                                       // don't change this: do not call this.execCommand, as that may have other logic in subclass
+                                       dijit._editor.RichText.prototype.execCommand.call(this.editor, 'inserthtml', '<br>');
+                               }
+                       }
+                       return false;
+               }
+               var _letBrowserHandle = true;
+
+               // first remove selection
+               selection = dijit.range.getSelection(this.editor.window);
+               range = selection.getRangeAt(0);
+               if(!range.collapsed){
+                       range.deleteContents();
+                       selection = dijit.range.getSelection(this.editor.window);
+                       range = selection.getRangeAt(0);
+               }
+
+               var block = dijit.range.getBlockAncestor(range.endContainer, null, this.editor.editNode);
+               var blockNode = block.blockNode;
+
+               // if this is under a LI or the parent of the blockNode is LI, just let browser to handle it
+               if((this._checkListLater = (blockNode && (blockNode.nodeName == 'LI' || blockNode.parentNode.nodeName == 'LI')))){
+                       if(dojo.isMoz){
+                               // press enter in middle of P may leave a trailing <br/>, let's remove it later
+                               this._pressedEnterInBlock = blockNode;
+                       }
+                       // if this li only contains spaces, set the content to empty so the browser will outdent this item
+                       if(/^(\s|&nbsp;|\xA0|<span\b[^>]*\bclass=['"]Apple-style-span['"][^>]*>(\s|&nbsp;|\xA0)<\/span>)?(<br>)?$/.test(blockNode.innerHTML)){
+                               // empty LI node
+                               blockNode.innerHTML = '';
+                               if(dojo.isWebKit){ // WebKit tosses the range when innerHTML is reset
+                                       newrange = dijit.range.create(this.editor.window);
+                                       newrange.setStart(blockNode, 0);
+                                       selection.removeAllRanges();
+                                       selection.addRange(newrange);
+                               }
+                               this._checkListLater = false; // nothing to check since the browser handles outdent
+                       }
+                       return true;
+               }
+
+               // text node directly under body, let's wrap them in a node
+               if(!block.blockNode || block.blockNode===this.editor.editNode){
+                       try{
+                               dijit._editor.RichText.prototype.execCommand.call(this.editor, 'formatblock',this.blockNodeForEnter);
+                       }catch(e2){ /*squelch FF3 exception bug when editor content is a single BR*/ }
+                       // get the newly created block node
+                       // FIXME
+                       block = {blockNode:dojo.withGlobal(this.editor.window, "getAncestorElement", dijit._editor.selection, [this.blockNodeForEnter]),
+                                       blockContainer: this.editor.editNode};
+                       if(block.blockNode){
+                               if(block.blockNode != this.editor.editNode &&
+                                       (!(block.blockNode.textContent || block.blockNode.innerHTML).replace(/^\s+|\s+$/g, "").length)){
+                                       this.removeTrailingBr(block.blockNode);
+                                       return false;
+                               }
+                       }else{  // we shouldn't be here if formatblock worked
+                               block.blockNode = this.editor.editNode;
+                       }
+                       selection = dijit.range.getSelection(this.editor.window);
+                       range = selection.getRangeAt(0);
+               }
+
+               var newblock = doc.createElement(this.blockNodeForEnter);
+               newblock.innerHTML=this.bogusHtmlContent;
+               this.removeTrailingBr(block.blockNode);
+               var endOffset = range.endOffset;
+               var node = range.endContainer;
+               if(node.length < endOffset){
+                       //We are not checking the right node, try to locate the correct one
+                       var ret = this._adjustNodeAndOffset(node, endOffset);
+                       node = ret.node;
+                       endOffset = ret.offset;
+               }
+               if(dijit.range.atEndOfContainer(block.blockNode, node, endOffset)){
+                       if(block.blockNode === block.blockContainer){
+                               block.blockNode.appendChild(newblock);
+                       }else{
+                               dojo.place(newblock, block.blockNode, "after");
+                       }
+                       _letBrowserHandle = false;
+                       // lets move caret to the newly created block
+                       newrange = dijit.range.create(this.editor.window);
+                       newrange.setStart(newblock, 0);
+                       selection.removeAllRanges();
+                       selection.addRange(newrange);
+                       if(this.editor.height){
+                               dojo.window.scrollIntoView(newblock);
+                       }
+               }else if(dijit.range.atBeginningOfContainer(block.blockNode,
+                               range.startContainer, range.startOffset)){
+                       dojo.place(newblock, block.blockNode, block.blockNode === block.blockContainer ? "first" : "before");
+                       if(newblock.nextSibling && this.editor.height){
+                               // position input caret - mostly WebKit needs this
+                               newrange = dijit.range.create(this.editor.window);
+                               newrange.setStart(newblock.nextSibling, 0);
+                               selection.removeAllRanges();
+                               selection.addRange(newrange);
+                               // browser does not scroll the caret position into view, do it manually
+                               dojo.window.scrollIntoView(newblock.nextSibling);
+                       }
+                       _letBrowserHandle = false;
+               }else{ //press enter in the middle of P/DIV/Whatever/
+                       if(block.blockNode === block.blockContainer){
+                               block.blockNode.appendChild(newblock);
+                       }else{
+                               dojo.place(newblock, block.blockNode, "after");
+                       }
+                       _letBrowserHandle = false;
+
+                       // Clone any block level styles.
+                       if(block.blockNode.style){
+                               if(newblock.style){
+                                       if(block.blockNode.style.cssText){
+                                               newblock.style.cssText = block.blockNode.style.cssText;
+                                       }
+                               }
+                       }
+                       
+                       // Okay, we probably have to split.
+                       rs = range.startContainer;
+                       var firstNodeMoved;
+                       if(rs && rs.nodeType == 3){ 
+                               // Text node, we have to split it.
+                               var nodeToMove, tNode;
+                               endOffset = range.endOffset;
+                               if(rs.length < endOffset){
+                                       //We are not splitting the right node, try to locate the correct one
+                                       ret = this._adjustNodeAndOffset(rs, endOffset);
+                                       rs = ret.node;
+                                       endOffset = ret.offset;
+                               }
+                               
+                               txt = rs.nodeValue;
+                               startNode = doc.createTextNode(txt.substring(0, endOffset));
+                               endNode = doc.createTextNode(txt.substring(endOffset, txt.length));
+
+                               // Place the split, then remove original nodes.
+                               dojo.place(startNode, rs, "before");
+                               dojo.place(endNode, rs, "after");
+                               dojo.destroy(rs);
+
+                               // Okay, we split the text.  Now we need to see if we're
+                               // parented to the block element we're splitting and if
+                               // not, we have to split all the way up.  Ugh.
+                               var parentC = startNode.parentNode;
+                               while(parentC !== block.blockNode){
+                                       var tg = parentC.tagName;
+                                       var newTg = doc.createElement(tg);
+                                       // Clone over any 'style' data.
+                                       if(parentC.style){
+                                               if(newTg.style){
+                                                       if(parentC.style.cssText){
+                                                               newTg.style.cssText = parentC.style.cssText;
+                                                       }
+                                               }
+                                       }
+                                       // If font also need to clone over any font data. 
+                                       if(parentC.tagName === "FONT"){
+                                               if(parentC.color){
+                                                       newTg.color = parentC.color;
+                                               }
+                                               if(parentC.face){
+                                                       newTg.face = parentC.face;
+                                               }
+                                               if(parentC.size){  // this check was necessary on IE
+                                                       newTg.size = parentC.size;
+                                               }
+                                       }
+                                       
+                                       nodeToMove = endNode;
+                                       while(nodeToMove){
+                                               tNode = nodeToMove.nextSibling;
+                                               newTg.appendChild(nodeToMove);
+                                               nodeToMove = tNode;
+                                       }
+                                       dojo.place(newTg, parentC, "after");
+                                       startNode = parentC;
+                                       endNode = newTg;
+                                       parentC = parentC.parentNode;
+                               }
+
+                               // Lastly, move the split out tags to the new block.
+                               // as they should now be split properly.
+                               nodeToMove = endNode;
+                               if(nodeToMove.nodeType == 1 || (nodeToMove.nodeType == 3 && nodeToMove.nodeValue)){
+                                       // Non-blank text and non-text nodes need to clear out that blank space
+                                       // before moving the contents.
+                                       newblock.innerHTML = "";
+                               }
+                               firstNodeMoved = nodeToMove;
+                               while(nodeToMove){
+                                       tNode = nodeToMove.nextSibling;
+                                       newblock.appendChild(nodeToMove);
+                                       nodeToMove = tNode;
+                               }
+                       }
+                       
+                       //lets move caret to the newly created block
+                       newrange = dijit.range.create(this.editor.window);
+                       var nodeForCursor;
+                       var innerMostFirstNodeMoved = firstNodeMoved;
+                       if(this.blockNodeForEnter !== 'BR'){
+                               while(innerMostFirstNodeMoved){
+                                       nodeForCursor = innerMostFirstNodeMoved;
+                                       tNode = innerMostFirstNodeMoved.firstChild;
+                                       innerMostFirstNodeMoved = tNode;
+                               }
+                               if(nodeForCursor && nodeForCursor.parentNode){
+                                       newblock = nodeForCursor.parentNode;
+                                       newrange.setStart(newblock, 0);
+                                       selection.removeAllRanges();
+                                       selection.addRange(newrange);
+                                       if(this.editor.height){
+                                               dijit.scrollIntoView(newblock);
+                                       }
+                                       if(dojo.isMoz){
+                                               // press enter in middle of P may leave a trailing <br/>, let's remove it later
+                                               this._pressedEnterInBlock = block.blockNode;
+                                       }                                       
+                               }else{
+                                       _letBrowserHandle = true;
+                               }
+                       }else{
+                               newrange.setStart(newblock, 0);
+                               selection.removeAllRanges();
+                               selection.addRange(newrange);
+                               if(this.editor.height){
+                                       dijit.scrollIntoView(newblock);
+                               }
+                               if(dojo.isMoz){
+                                       // press enter in middle of P may leave a trailing <br/>, let's remove it later
+                                       this._pressedEnterInBlock = block.blockNode;
+                               }
+                       }
+               }
+               return _letBrowserHandle;
+       },
+
+       _adjustNodeAndOffset: function(/*DomNode*/node, /*Int*/offset){
+               // summary:
+               //              In the case there are multiple text nodes in a row the offset may not be within the node.  If the offset is larger than the node length, it will attempt to find
+               //              the next text sibling until it locates the text node in which the offset refers to
+               // node:
+               //              The node to check.
+               // offset:
+               //              The position to find within the text node
+               // tags:
+               //              private.
+               while(node.length < offset && node.nextSibling && node.nextSibling.nodeType==3){
+                       //Adjust the offset and node in the case of multiple text nodes in a row
+                       offset = offset - node.length;
+                       node = node.nextSibling;
+               }
+               var ret = {"node": node, "offset": offset};
+               return ret;
+       },
+
+       removeTrailingBr: function(container){
+               // summary:
+               //              If last child of container is a <br>, then remove it.
+               // tags:
+               //              private
+               var para = /P|DIV|LI/i.test(container.tagName) ?
+                       container : dijit._editor.selection.getParentOfType(container,['P','DIV','LI']);
+
+               if(!para){ return; }
+               if(para.lastChild){
+                       if((para.childNodes.length > 1 && para.lastChild.nodeType == 3 && /^[\s\xAD]*$/.test(para.lastChild.nodeValue)) ||
+                               para.lastChild.tagName=='BR'){
+
+                               dojo.destroy(para.lastChild);
+                       }
+               }
+               if(!para.childNodes.length){
+                       para.innerHTML=this.bogusHtmlContent;
+               }
+       }
 });
-dojo.forEach(_2b,function(p){
-var _2c=p.previousSibling;
-if((_2c)&&(_2c.nodeType==1)&&(_2c.nodeName=="P"||dojo.style(_2c,"display")!="block")){
-var _2d=p.parentNode.insertBefore(this.document.createElement("p"),p);
-_2d.innerHTML=_1b?"":"&nbsp;";
-}
-_25(p);
-},this.editor);
-_1c(_1a);
-return _1a;
-},singleLinePsToRegularPs:function(_2e){
-function _2f(_30){
-var ps=_30.getElementsByTagName("p");
-var _31=[];
-for(var i=0;i<ps.length;i++){
-var p=ps[i];
-var _32=false;
-for(var k=0;k<_31.length;k++){
-if(_31[k]===p.parentNode){
-_32=true;
-break;
-}
-}
-if(!_32){
-_31.push(p.parentNode);
-}
-}
-return _31;
-};
-function _33(_34){
-return (!_34.childNodes.length||_34.innerHTML=="&nbsp;");
-};
-var _35=_2f(_2e);
-for(var i=0;i<_35.length;i++){
-var _36=_35[i];
-var _37=null;
-var _38=_36.firstChild;
-var _39=null;
-while(_38){
-if(_38.nodeType!=1||_38.tagName!="P"||(_38.getAttributeNode("style")||{}).specified){
-_37=null;
-}else{
-if(_33(_38)){
-_39=_38;
-_37=null;
-}else{
-if(_37==null){
-_37=_38;
-}else{
-if((!_37.lastChild||_37.lastChild.nodeName!="BR")&&(_38.firstChild)&&(_38.firstChild.nodeName!="BR")){
-_37.appendChild(this.editor.document.createElement("br"));
-}
-while(_38.firstChild){
-_37.appendChild(_38.firstChild);
-}
-_39=_38;
-}
-}
-}
-_38=_38.nextSibling;
-if(_39){
-dojo.destroy(_39);
-_39=null;
-}
-}
-}
-return _2e;
-}});
+
 }
index c5578e3fb06baf982288a9b2a00617b1625f9e8f..ef91fd6765e15a4a0bc451026db8cc6ae71cc962 100644 (file)
@@ -1,12 +1,12 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.FontChoice"]){
-dojo._hasResource["dijit._editor.plugins.FontChoice"]=true;
+if(!dojo._hasResource["dijit._editor.plugins.FontChoice"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.FontChoice"] = true;
 dojo.provide("dijit._editor.plugins.FontChoice");
 dojo.require("dijit._editor._Plugin");
 dojo.require("dijit._editor.range");
@@ -14,252 +14,570 @@ dojo.require("dijit._editor.selection");
 dojo.require("dijit.form.FilteringSelect");
 dojo.require("dojo.data.ItemFileReadStore");
 dojo.require("dojo.i18n");
-dojo.requireLocalization("dijit._editor","FontChoice",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.declare("dijit._editor.plugins._FontDropDown",[dijit._Widget,dijit._Templated],{label:"",widgetsInTemplate:true,plainText:false,templateString:"<span style='white-space: nowrap' class='dijit dijitReset dijitInline'>"+"<label class='dijitLeft dijitInline' for='${selectId}'>${label}</label>"+"<input dojoType='dijit.form.FilteringSelect' required=false labelType=html labelAttr=label searchAttr=name "+"tabIndex='-1' id='${selectId}' dojoAttachPoint='select' value=''/>"+"</span>",postMixInProperties:function(){
-this.inherited(arguments);
-this.strings=dojo.i18n.getLocalization("dijit._editor","FontChoice");
-this.label=this.strings[this.command];
-this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
-this.selectId=this.id+"_select";
-this.inherited(arguments);
-},postCreate:function(){
-var _1=dojo.map(this.values,function(_2){
-var _3=this.strings[_2]||_2;
-return {label:this.getLabel(_2,_3),name:_3,value:_2};
-},this);
-this.select.store=new dojo.data.ItemFileReadStore({data:{identifier:"value",items:_1}});
-this.select.set("value","",false);
-this.disabled=this.select.get("disabled");
-},_setValueAttr:function(_4,_5){
-_5=_5!==false?true:false;
-this.select.set("value",dojo.indexOf(this.values,_4)<0?"":_4,_5);
-if(!_5){
-this.select._lastValueReported=null;
-}
-},_getValueAttr:function(){
-return this.select.get("value");
-},focus:function(){
-this.select.focus();
-},_setDisabledAttr:function(_6){
-this.disabled=_6;
-this.select.set("disabled",_6);
-}});
-dojo.declare("dijit._editor.plugins._FontNameDropDown",dijit._editor.plugins._FontDropDown,{generic:false,command:"fontName",postMixInProperties:function(){
-if(!this.values){
-this.values=this.generic?["serif","sans-serif","monospace","cursive","fantasy"]:["Arial","Times New Roman","Comic Sans MS","Courier New"];
-}
-this.inherited(arguments);
-},getLabel:function(_7,_8){
-if(this.plainText){
-return _8;
-}else{
-return "<div style='font-family: "+_7+"'>"+_8+"</div>";
-}
-},_setValueAttr:function(_9,_a){
-_a=_a!==false?true:false;
-if(this.generic){
-var _b={"Arial":"sans-serif","Helvetica":"sans-serif","Myriad":"sans-serif","Times":"serif","Times New Roman":"serif","Comic Sans MS":"cursive","Apple Chancery":"cursive","Courier":"monospace","Courier New":"monospace","Papyrus":"fantasy"};
-_9=_b[_9]||_9;
-}
-this.inherited(arguments,[_9,_a]);
-}});
-dojo.declare("dijit._editor.plugins._FontSizeDropDown",dijit._editor.plugins._FontDropDown,{command:"fontSize",values:[1,2,3,4,5,6,7],getLabel:function(_c,_d){
-if(this.plainText){
-return _d;
-}else{
-return "<font size="+_c+"'>"+_d+"</font>";
-}
-},_setValueAttr:function(_e,_f){
-_f=_f!==false?true:false;
-if(_e.indexOf&&_e.indexOf("px")!=-1){
-var _10=parseInt(_e,10);
-_e={10:1,13:2,16:3,18:4,24:5,32:6,48:7}[_10]||_e;
-}
-this.inherited(arguments,[_e,_f]);
-}});
-dojo.declare("dijit._editor.plugins._FormatBlockDropDown",dijit._editor.plugins._FontDropDown,{command:"formatBlock",values:["noFormat","p","h1","h2","h3","pre"],postCreate:function(){
-this.inherited(arguments);
-this.set("value","noFormat",false);
-},getLabel:function(_11,_12){
-if(this.plainText){
-return _12;
-}else{
-return "<"+_11+">"+_12+"</"+_11+">";
-}
-},_execCommand:function(_13,_14,_15){
-if(_15==="noFormat"){
-var _16;
-var end;
-var sel=dijit.range.getSelection(_13.window);
-if(sel&&sel.rangeCount>0){
-var _17=sel.getRangeAt(0);
-var _18,tag;
-if(_17){
-_16=_17.startContainer;
-end=_17.endContainer;
-while(_16&&_16!==_13.editNode&&_16!==_13.document.body&&_16.nodeType!==1){
-_16=_16.parentNode;
-}
-while(end&&end!==_13.editNode&&end!==_13.document.body&&end.nodeType!==1){
-end=end.parentNode;
-}
-var _19=dojo.hitch(this,function(_1a,_1b){
-if(_1a.childNodes&&_1a.childNodes.length){
-var i;
-for(i=0;i<_1a.childNodes.length;i++){
-var c=_1a.childNodes[i];
-if(c.nodeType==1){
-if(dojo.withGlobal(_13.window,"inSelection",dijit._editor.selection,[c])){
-var tag=c.tagName?c.tagName.toLowerCase():"";
-if(dojo.indexOf(this.values,tag)!==-1){
-_1b.push(c);
-}
-_19(c,_1b);
-}
-}
-}
-}
+dojo.requireLocalization("dijit._editor", "FontChoice", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare("dijit._editor.plugins._FontDropDown",
+       [dijit._Widget, dijit._Templated],{
+       // summary:
+       //              Base class for widgets that contains a label (like "Font:")
+       //              and a FilteringSelect drop down to pick a value.
+       //              Used as Toolbar entry.
+
+       // label: [public] String
+       //              The label to apply to this particular FontDropDown.
+       label: "",
+
+       // widgetsInTemplate: [public] boolean
+       //              Over-ride denoting the template has widgets to parse.
+       widgetsInTemplate: true,
+
+       // plainText: [public] boolean
+       //              Flag to indicate that the returned label should be plain text
+       //              instead of an example.
+       plainText: false,
+
+       // templateString: [public] String
+       //              The template used to construct the labeled dropdown.
+       templateString:
+               "<span style='white-space: nowrap' class='dijit dijitReset dijitInline'>" +
+                       "<label class='dijitLeft dijitInline' for='${selectId}'>${label}</label>" +
+                       "<input dojoType='dijit.form.FilteringSelect' required='false' labelType='html' labelAttr='label' searchAttr='name' " +
+                                       "tabIndex='-1' id='${selectId}' dojoAttachPoint='select' value=''/>" +
+               "</span>",
+
+       postMixInProperties: function(){
+               // summary:
+               //              Over-ride to set specific properties.
+               this.inherited(arguments);
+
+               this.strings = dojo.i18n.getLocalization("dijit._editor", "FontChoice");
+
+               // Set some substitution variables used in the template
+               this.label = this.strings[this.command];
+               this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+               this.selectId = this.id + "_select";
+
+               this.inherited(arguments);
+       },
+
+       postCreate: function(){
+               // summary:
+               //              Over-ride for the default postCreate action
+               //              This establishes the filtering selects and the like.
+
+               // Initialize the list of items in the drop down by creating data store with items like:
+               // {value: 1, name: "xx-small", label: "<font size=1>xx-small</font-size>" }
+               var     items = dojo.map(this.values, function(value){
+                               var name = this.strings[value] || value;
+                               return {
+                                       label: this.getLabel(value, name),
+                                       name: name,
+                                       value: value
+                               };
+                       }, this);
+
+               this.select.store = new dojo.data.ItemFileReadStore({
+                       data: {
+                               identifier: "value",
+                               items: items
+                       }
+               });
+
+               this.select.set("value", "", false);
+               this.disabled = this.select.get("disabled");
+       },
+
+       _setValueAttr: function(value, priorityChange){
+               // summary:
+               //              Over-ride for the default action of setting the
+               //              widget value, maps the input to known values
+               // value: Object|String
+               //              The value to set in the select.
+               // priorityChange:
+               //              Optional parameter used to tell the select whether or not to fire
+               //              onChange event.
+
+               //if the value is not a permitted value, just set empty string to prevent showing the warning icon
+               priorityChange = priorityChange !== false?true:false;
+               this.select.set('value', dojo.indexOf(this.values,value) < 0 ? "" : value, priorityChange);
+               if(!priorityChange){
+                       // Clear the last state in case of updateState calls.  Ref: #10466
+                       this.select._lastValueReported=null;
+               }
+       },
+
+       _getValueAttr: function(){
+               // summary:
+               //              Allow retreiving the value from the composite select on
+               //              call to button.get("value");
+               return this.select.get('value');
+       },
+
+       focus: function(){
+               // summary:
+               //              Over-ride for focus control of this widget.  Delegates focus down to the
+               //              filtering select.
+               this.select.focus();
+       },
+
+       _setDisabledAttr: function(value){
+               // summary:
+               //              Over-ride for the button's 'disabled' attribute so that it can be
+               //              disabled programmatically.
+
+               // Save off ths disabled state so the get retrieves it correctly
+               //without needing to have a function proxy it.
+               this.disabled = value;
+               this.select.set("disabled", value);
+       }
 });
-var _1c=dojo.hitch(this,function(_1d){
-if(_1d&&_1d.length){
-_13.beginEditing();
-while(_1d.length){
-this._removeFormat(_13,_1d.pop());
-}
-_13.endEditing();
-}
+
+
+dojo.declare("dijit._editor.plugins._FontNameDropDown", dijit._editor.plugins._FontDropDown, {
+       // summary:
+       //              Dropdown to select a font; goes in editor toolbar.
+
+       // generic: Boolean
+       //              Use generic (web standard) font names
+       generic: false,
+
+       // command: [public] String
+       //              The editor 'command' implemented by this plugin.
+       command: "fontName",
+
+       postMixInProperties: function(){
+               // summary:
+               //              Over-ride for the default posr mixin control
+               if(!this.values){
+                       this.values = this.generic ?
+                               ["serif", "sans-serif", "monospace", "cursive", "fantasy"] : // CSS font-family generics
+                                       ["Arial", "Times New Roman", "Comic Sans MS", "Courier New"];
+               }
+               this.inherited(arguments);
+       },
+
+       getLabel: function(value, name){
+               // summary:
+               //              Function used to generate the labels of the format dropdown
+               //              will return a formatted, or plain label based on the value
+               //              of the plainText option.
+               // value: String
+               //              The 'insert value' associated with a name
+               // name: String
+               //              The text name of the value
+               if(this.plainText){
+                       return name;
+               }else{
+                       return "<div style='font-family: "+value+"'>" + name + "</div>";
+               }
+       },
+
+       _setValueAttr: function(value, priorityChange){
+               // summary:
+               //              Over-ride for the default action of setting the
+               //              widget value, maps the input to known values
+
+               priorityChange = priorityChange !== false?true:false;
+               if(this.generic){
+                       var map = {
+                               "Arial": "sans-serif",
+                               "Helvetica": "sans-serif",
+                               "Myriad": "sans-serif",
+                               "Times": "serif",
+                               "Times New Roman": "serif",
+                               "Comic Sans MS": "cursive",
+                               "Apple Chancery": "cursive",
+                               "Courier": "monospace",
+                               "Courier New": "monospace",
+                               "Papyrus": "fantasy"
+//                                     ,"????": "fantasy" TODO: IE doesn't map fantasy font-family?
+                       };
+                       value = map[value] || value;
+               }
+               this.inherited(arguments, [value, priorityChange]);
+       }
 });
-var _1e=[];
-if(_16==end){
-var _1f;
-_18=_16;
-while(_18&&_18!==_13.editNode&&_18!==_13.document.body){
-if(_18.nodeType==1){
-tag=_18.tagName?_18.tagName.toLowerCase():"";
-if(dojo.indexOf(this.values,tag)!==-1){
-_1f=_18;
-break;
-}
-}
-_18=_18.parentNode;
-}
-_19(_16,_1e);
-if(_1f){
-_1e=[_1f].concat(_1e);
-}
-_1c(_1e);
-}else{
-_18=_16;
-while(dojo.withGlobal(_13.window,"inSelection",dijit._editor.selection,[_18])){
-if(_18.nodeType==1){
-tag=_18.tagName?_18.tagName.toLowerCase():"";
-if(dojo.indexOf(this.values,tag)!==-1){
-_1e.push(_18);
-}
-_19(_18,_1e);
-}
-_18=_18.nextSibling;
-}
-_1c(_1e);
-}
-_13.onDisplayChanged();
-}
-}
-}else{
-_13.execCommand(_14,_15);
-}
-},_removeFormat:function(_20,_21){
-if(_20.customUndo){
-while(_21.firstChild){
-dojo.place(_21.firstChild,_21,"before");
-}
-_21.parentNode.removeChild(_21);
-}else{
-dojo.withGlobal(_20.window,"selectElementChildren",dijit._editor.selection,[_21]);
-var _22=dojo.withGlobal(_20.window,"getSelectedHtml",dijit._editor.selection,[null]);
-dojo.withGlobal(_20.window,"selectElement",dijit._editor.selection,[_21]);
-_20.execCommand("inserthtml",_22||"");
-}
-}});
-dojo.declare("dijit._editor.plugins.FontChoice",dijit._editor._Plugin,{useDefaultCommand:false,_initButton:function(){
-var _23={fontName:dijit._editor.plugins._FontNameDropDown,fontSize:dijit._editor.plugins._FontSizeDropDown,formatBlock:dijit._editor.plugins._FormatBlockDropDown}[this.command],_24=this.params;
-if(this.params.custom){
-_24.values=this.params.custom;
-}
-var _25=this.editor;
-this.button=new _23(dojo.delegate({dir:_25.dir,lang:_25.lang},_24));
-this.connect(this.button.select,"onChange",function(_26){
-this.editor.focus();
-if(this.command=="fontName"&&_26.indexOf(" ")!=-1){
-_26="'"+_26+"'";
-}
-if(this.button._execCommand){
-this.button._execCommand(this.editor,this.command,_26);
-}else{
-this.editor.execCommand(this.command,_26);
-}
-this.editor.customUndo=this.editor.customUndo||dojo.isWebKit;
+
+dojo.declare("dijit._editor.plugins._FontSizeDropDown", dijit._editor.plugins._FontDropDown, {
+       // summary:
+       //              Dropdown to select a font size; goes in editor toolbar.
+
+       // command: [public] String
+       //              The editor 'command' implemented by this plugin.
+       command: "fontSize",
+
+       // values: [public] Number[]
+       //              The HTML font size values supported by this plugin
+       values: [1,2,3,4,5,6,7], // sizes according to the old HTML FONT SIZE
+
+       getLabel: function(value, name){
+               // summary:
+               //              Function used to generate the labels of the format dropdown
+               //              will return a formatted, or plain label based on the value
+               //              of the plainText option.
+               //              We're stuck using the deprecated FONT tag to correspond
+               //              with the size measurements used by the editor
+               // value: String
+               //              The 'insert value' associated with a name
+               // name: String
+               //              The text name of the value
+               if(this.plainText){
+                       return name;
+               }else{
+                       return "<font size=" + value + "'>" + name + "</font>";
+               }
+       },
+
+       _setValueAttr: function(value, priorityChange){
+               // summary:
+               //              Over-ride for the default action of setting the
+               //              widget value, maps the input to known values
+               priorityChange = priorityChange !== false?true:false;
+               if(value.indexOf && value.indexOf("px") != -1){
+                       var pixels = parseInt(value, 10);
+                       value = {10:1, 13:2, 16:3, 18:4, 24:5, 32:6, 48:7}[pixels] || value;
+               }
+
+               this.inherited(arguments, [value, priorityChange]);
+       }
 });
-},updateState:function(){
-var _27=this.editor;
-var _28=this.command;
-if(!_27||!_27.isLoaded||!_28.length){
-return;
-}
-if(this.button){
-var _29;
-try{
-_29=_27.queryCommandValue(_28)||"";
-}
-catch(e){
-_29="";
-}
-var _2a=dojo.isString(_29)&&_29.match(/'([^']*)'/);
-if(_2a){
-_29=_2a[1];
-}
-if(_28==="formatBlock"){
-if(!_29||_29=="p"){
-_29=null;
-var _2b;
-var sel=dijit.range.getSelection(this.editor.window);
-if(sel&&sel.rangeCount>0){
-var _2c=sel.getRangeAt(0);
-if(_2c){
-_2b=_2c.endContainer;
-}
-}
-while(_2b&&_2b!==_27.editNode&&_2b!==_27.document){
-var tg=_2b.tagName?_2b.tagName.toLowerCase():"";
-if(tg&&dojo.indexOf(this.button.values,tg)>-1){
-_29=tg;
-break;
-}
-_2b=_2b.parentNode;
-}
-if(!_29){
-_29="noFormat";
-}
-}else{
-if(dojo.indexOf(this.button.values,_29)<0){
-_29="noFormat";
-}
-}
-}
-if(_29!==this.button.get("value")){
-this.button.set("value",_29,false);
-}
-}
-}});
-dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
-if(o.plugin){
-return;
-}
-switch(o.args.name){
-case "fontName":
-case "fontSize":
-case "formatBlock":
-o.plugin=new dijit._editor.plugins.FontChoice({command:o.args.name,plainText:o.args.plainText?o.args.plainText:false});
-}
+
+
+dojo.declare("dijit._editor.plugins._FormatBlockDropDown", dijit._editor.plugins._FontDropDown, {
+       // summary:
+       //              Dropdown to select a format (like paragraph or heading); goes in editor toolbar.
+
+       // command: [public] String
+       //              The editor 'command' implemented by this plugin.
+       command: "formatBlock",
+
+       // values: [public] Array
+       //              The HTML format tags supported by this plugin
+       values: ["noFormat", "p", "h1", "h2", "h3", "pre"],
+
+       postCreate: function(){
+               // Init and set the default value to no formatting.  Update state will adjust it
+               // as needed.
+               this.inherited(arguments);
+               this.set("value", "noFormat", false);
+       },
+
+       getLabel: function(value, name){
+               // summary:
+               //              Function used to generate the labels of the format dropdown
+               //              will return a formatted, or plain label based on the value
+               //              of the plainText option.
+               // value: String
+               //              The 'insert value' associated with a name
+               // name: String
+               //              The text name of the value
+               if(this.plainText || value == "noFormat"){
+                       return name;
+               }else{
+                       return "<" + value + ">" + name + "</" + value + ">";
+               }
+       },
+
+       _execCommand: function(editor, command, choice){
+               // summary:
+               //              Over-ride for default exec-command label.
+               //              Allows us to treat 'none' as special.
+               if(choice === "noFormat"){
+                       var start;
+                       var end;
+                       var sel = dijit.range.getSelection(editor.window);
+                       if(sel && sel.rangeCount > 0){
+                               var range = sel.getRangeAt(0);
+                               var node, tag;
+                               if(range){
+                                       start = range.startContainer;
+                                       end = range.endContainer;
+
+                                       // find containing nodes of start/end.
+                                       while(start && start !== editor.editNode &&
+                                                 start !== editor.document.body &&
+                                                 start.nodeType !== 1){
+                                               start = start.parentNode;
+                                       }
+
+                                       while(end && end !== editor.editNode &&
+                                                 end !== editor.document.body &&
+                                                 end.nodeType !== 1){
+                                               end = end.parentNode;
+                                       }
+
+                                       var processChildren = dojo.hitch(this, function(node, array){
+                                               if(node.childNodes && node.childNodes.length){
+                                                       var i;
+                                                       for(i = 0; i < node.childNodes.length; i++){
+                                                               var c = node.childNodes[i];
+                                                               if(c.nodeType == 1){
+                                                                       if(dojo.withGlobal(editor.window, "inSelection", dijit._editor.selection, [c])){
+                                                                               var tag = c.tagName? c.tagName.toLowerCase(): "";
+                                                                               if(dojo.indexOf(this.values, tag) !== -1){
+                                                                                       array.push(c);
+                                                                               }
+                                                                               processChildren(c,array);
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                       });
+
+                                       var unformatNodes = dojo.hitch(this, function(nodes){
+                                               // summary:
+                                               //              Internal function to clear format nodes.
+                                               // nodes:
+                                               //              The array of nodes to strip formatting from.
+                                               if(nodes && nodes.length){
+                                                       editor.beginEditing();
+                                                       while(nodes.length){
+                                                               this._removeFormat(editor, nodes.pop());
+                                                       }
+                                                       editor.endEditing();
+                                               }
+                                       });
+
+                                       var clearNodes = [];
+                                       if(start == end){
+                                               //Contained within the same block, may be collapsed, but who cares, see if we
+                                               // have a block element to remove.
+                                               var block;
+                                               node = start;
+                                               while(node && node !== editor.editNode && node !== editor.document.body){
+                                                       if(node.nodeType == 1){
+                                                               tag = node.tagName? node.tagName.toLowerCase(): "";
+                                                               if(dojo.indexOf(this.values, tag) !== -1){
+                                                                       block = node;
+                                                                       break;
+                                                               }
+                                                       }
+                                                       node = node.parentNode;
+                                               }
+
+                                               //Also look for all child nodes in the selection that may need to be
+                                               //cleared of formatting
+                                               processChildren(start, clearNodes);
+                                               if(block) { clearNodes = [block].concat(clearNodes); }
+                                               unformatNodes(clearNodes);
+                                       }else{
+                                               // Probably a multi select, so we have to process it.  Whee.
+                                               node = start;
+                                               while(dojo.withGlobal(editor.window, "inSelection", dijit._editor.selection, [node])){
+                                                       if(node.nodeType == 1){
+                                                               tag = node.tagName? node.tagName.toLowerCase(): "";
+                                                               if(dojo.indexOf(this.values, tag) !== -1){
+                                                                       clearNodes.push(node);
+                                                               }
+                                                               processChildren(node,clearNodes);
+                                                       }
+                                                       node = node.nextSibling;
+                                               }
+                                               unformatNodes(clearNodes);
+                                       }
+                                       editor.onDisplayChanged();
+                               }
+                       }
+               }else{
+                       editor.execCommand(command, choice);
+               }
+       },
+
+       _removeFormat: function(editor, node){
+               // summary:
+               //              function to remove the block format node.
+               // node:
+               //              The block format node to remove (and leave the contents behind)
+               if(editor.customUndo){
+                       // So of course IE doesn't work right with paste-overs.
+                       // We have to do this manually, which is okay since IE already uses
+                       // customUndo and we turned it on for WebKit.  WebKit pasted funny,
+                       // so couldn't use the execCommand approach
+                       while(node.firstChild){
+                               dojo.place(node.firstChild, node, "before");
+                       }
+                       node.parentNode.removeChild(node);
+               }else{
+                       // Everyone else works fine this way, a paste-over and is native
+                       // undo friendly.
+                       dojo.withGlobal(editor.window,
+                                "selectElementChildren", dijit._editor.selection, [node]);
+                       var html =      dojo.withGlobal(editor.window,
+                                "getSelectedHtml", dijit._editor.selection, [null]);
+                       dojo.withGlobal(editor.window,
+                                "selectElement", dijit._editor.selection, [node]);
+                       editor.execCommand("inserthtml", html||"");
+               }
+       }
+});
+
+// TODO: for 2.0, split into FontChoice plugin into three separate classes,
+// one for each command (and change registry below)
+dojo.declare("dijit._editor.plugins.FontChoice", dijit._editor._Plugin,{
+       // summary:
+       //              This plugin provides three drop downs for setting style in the editor
+       //              (font, font size, and format block), as controlled by command.
+       //
+       // description:
+       //              The commands provided by this plugin are:
+       //
+       //              * fontName
+       //      |               Provides a drop down to select from a list of font names
+       //              * fontSize
+       //      |               Provides a drop down to select from a list of font sizes
+       //              * formatBlock
+       //      |               Provides a drop down to select from a list of block styles
+       //      |
+       //
+       //              which can easily be added to an editor by including one or more of the above commands
+       //              in the `plugins` attribute as follows:
+       //
+       //      |       plugins="['fontName','fontSize',...]"
+       //
+       //              It is possible to override the default dropdown list by providing an Array for the `custom` property when
+       //              instantiating this plugin, e.g.
+       //
+       //      |       plugins="[{name:'dijit._editor.plugins.FontChoice', command:'fontName', custom:['Verdana','Myriad','Garamond']},...]"
+       //
+       //              Alternatively, for `fontName` only, `generic:true` may be specified to provide a dropdown with
+       //              [CSS generic font families](http://www.w3.org/TR/REC-CSS2/fonts.html#generic-font-families)
+       //
+       //              Note that the editor is often unable to properly handle font styling information defined outside
+       //              the context of the current editor instance, such as pre-populated HTML.
+
+       // useDefaultCommand: [protected] booleam
+       //              Override _Plugin.useDefaultCommand...
+       //              processing is handled by this plugin, not by dijit.Editor.
+       useDefaultCommand: false,
+
+       _initButton: function(){
+               // summary:
+               //              Overrides _Plugin._initButton(), to initialize the FilteringSelect+label in toolbar,
+               //              rather than a simple button.
+               // tags:
+               //              protected
+
+               // Create the widget to go into the toolbar (the so-called "button")
+               var clazz = {
+                               fontName: dijit._editor.plugins._FontNameDropDown,
+                               fontSize: dijit._editor.plugins._FontSizeDropDown,
+                               formatBlock: dijit._editor.plugins._FormatBlockDropDown
+                       }[this.command],
+               params = this.params;
+
+               // For back-compat reasons support setting custom values via "custom" parameter
+               // rather than "values" parameter
+               if(this.params.custom){
+                       params.values = this.params.custom;
+               }
+
+               var editor = this.editor;
+               this.button = new clazz(dojo.delegate({dir: editor.dir, lang: editor.lang}, params));
+
+               // Reflect changes to the drop down in the editor
+               this.connect(this.button.select, "onChange", function(choice){
+                       // User invoked change, since all internal updates set priorityChange to false and will
+                       // not trigger an onChange event.
+                       this.editor.focus();
+                       
+                       if(this.command == "fontName" && choice.indexOf(" ") != -1){ choice = "'" + choice + "'"; }
+
+                       // Invoke, the editor already normalizes commands called through its
+                       // execCommand.
+                       if(this.button._execCommand){
+                               this.button._execCommand(this.editor, this.command, choice);
+                       }else{
+                               this.editor.execCommand(this.command, choice);
+                       }
+               });
+       },
+
+       updateState: function(){
+               // summary:
+               //              Overrides _Plugin.updateState().  This controls updating the menu
+               //              options to the right values on state changes in the document (that trigger a
+               //              test of the actions.)
+               //              It set value of drop down in toolbar to reflect font/font size/format block
+               //              of text at current caret position.
+               // tags:
+               //              protected
+               var _e = this.editor;
+               var _c = this.command;
+               if(!_e || !_e.isLoaded || !_c.length){ return; }
+               
+               if(this.button){
+                       var disabled = this.get("disabled");
+                       this.button.set("disabled", disabled);
+                       if(disabled){ return; }
+                       var value;
+                       try{
+                               value = _e.queryCommandValue(_c) || "";
+                       }catch(e){
+                               //Firefox may throw error above if the editor is just loaded, ignore it
+                               value = "";
+                       }
+
+                       // strip off single quotes, if any
+                       var quoted = dojo.isString(value) && value.match(/'([^']*)'/);
+                       if(quoted){ value = quoted[1]; }
+
+                       if(_c === "formatBlock"){
+                               if(!value || value == "p"){
+                                       // Some browsers (WebKit) doesn't actually get the tag info right.
+                                       // and IE returns paragraph when in a DIV!, so incorrect a lot,
+                                       // so we have double-check it.
+                                       value = null;
+                                       var elem;
+                                       // Try to find the current element where the caret is.
+                                       var sel = dijit.range.getSelection(this.editor.window);
+                                       if(sel && sel.rangeCount > 0){
+                                               var range = sel.getRangeAt(0);
+                                               if(range){
+                                                       elem = range.endContainer;
+                                               }
+                                       }
+
+                                       // Okay, now see if we can find one of the formatting types we're in.
+                                       while(elem && elem !== _e.editNode && elem !== _e.document){
+                                               var tg = elem.tagName?elem.tagName.toLowerCase():"";
+                                               if(tg && dojo.indexOf(this.button.values, tg) > -1){
+                                                       value = tg;
+                                                       break;
+                                               }
+                                               elem = elem.parentNode;
+                                       }
+                                       if(!value){
+                                               // Still no value, so lets select 'none'.
+                                               value = "noFormat";
+                                       }
+                               }else{
+                                       // Check that the block format is one allowed, if not,
+                                       // null it so that it gets set to empty.
+                                       if(dojo.indexOf(this.button.values, value) < 0){
+                                               value = "noFormat";
+                                       }
+                               }
+                       }
+                       if(value !== this.button.get("value")){
+                               // Set the value, but denote it is not a priority change, so no
+                               // onchange fires.
+                               this.button.set('value', value, false);
+                       }
+               }
+       }
 });
+
+// Register this plugin.
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+       if(o.plugin){ return; }
+       switch(o.args.name){
+       case "fontName": case "fontSize": case "formatBlock":
+               o.plugin = new dijit._editor.plugins.FontChoice({
+                       command: o.args.name,
+                       plainText: o.args.plainText?o.args.plainText:false
+               });
+       }
+});
+
 }
index 7a6dac55dffb52c6b6bab4fefe6f5c034119c903..6978252c8eefa53b59ff9593dde3e4f793cb2266 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._editor.plugins.FullScreen"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.FullScreen"] = true;
 dojo.provide("dijit._editor.plugins.FullScreen");
 dojo.require("dojo.window");
 dojo.require("dojo.i18n");
 dojo.require("dijit._editor._Plugin");
 dojo.require("dijit.form.Button");
-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,ro,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.set("checked",!this.button.get("checked"));
-},_initButton:function(){
-var _1=dojo.i18n.getLocalization("dijit._editor","commands"),_2=this.editor;
-this.button=new dijit.form.ToggleButton({label:_1["fullScreen"],dir:_2.dir,lang:_2.lang,showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"FullScreen",tabIndex:"-1",onChange:dojo.hitch(this,"_setFullScreen")});
-},setEditor:function(_3){
-this.editor=_3;
-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 _4=this._getAltViewNode();
-if(f.node==ed.iframe||(_4&&f.node===_4)){
-setTimeout(dojo.hitch(this,function(){
-ed.toolbar.focus();
-}),10);
-}else{
-if(_4&&dojo.style(ed.iframe,"display")==="none"){
-setTimeout(dojo.hitch(this,function(){
-dijit.focus(_4);
-}),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=dojo.window.getBox();
-dojo.marginBox(this.editor.domNode,{w:vp.w,h:vp.h});
-var _5=this.editor.getHeaderHeight();
-var _6=this.editor.getFooterHeight();
-var _7=dojo._getPadBorderExtents(this.editor.domNode);
-var _8=dojo._getPadBorderExtents(this.editor.iframe.parentNode);
-var _9=dojo._getMarginExtents(this.editor.iframe.parentNode);
-var _a=vp.h-(_5+_7.h+_6);
-dojo.marginBox(this.editor.iframe.parentNode,{h:_a,w:vp.w});
-dojo.marginBox(this.editor.iframe,{h:_a-(_8.h+_9.h)});
-},_getAltViewNode:function(){
-},_setFullScreen:function(_b){
-var vp=dojo.window.getBox();
-var ed=this.editor;
-var _c=dojo.body();
-var _d=ed.domNode.parentNode;
-this.isFullscreen=_b;
-if(_b){
-while(_d&&_d!==dojo.body()){
-dojo.addClass(_d,"dijitForceStatic");
-_d=_d.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 _e=ed.domNode,_f=_e&&_e.style||{};
-this._origState={width:_f.width||"",height:_f.height||"",top:dojo.style(_e,"top")||"",left:dojo.style(_e,"left")||"",position:dojo.style(_e,"position")||"static",marginBox:dojo.marginBox(ed.domNode)};
-var _10=ed.iframe,_11=_10&&_10.style||{};
-var bc=dojo.style(ed.iframe,"backgroundColor");
-this._origiFrameState={backgroundColor:bc||"transparent",width:_11.width||"auto",height:_11.height||"auto",zIndex:_11.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(_c.style&&_c.style.overflow){
-this._oldOverflow=dojo.style(_c,"overflow");
-}else{
-this._oldOverflow="";
-}
-if(dojo.isIE&&!dojo.isQuirks){
-if(_c.parentNode&&_c.parentNode.style&&_c.parentNode.style.overflow){
-this._oldBodyParentOverflow=_c.parentNode.style.overflow;
-}else{
-try{
-this._oldBodyParentOverflow=dojo.style(_c.parentNode,"overflow");
-}
-catch(e){
-this._oldBodyParentOverflow="scroll";
-}
-}
-dojo.style(_c.parentNode,"overflow","hidden");
-}
-dojo.style(_c,"overflow","hidden");
-var _12=function(){
-var vp=dojo.window.getBox();
-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,_12);
-this._resizeHandle2=dojo.connect(ed,"resize",dojo.hitch(this,function(){
-if(this._resizer){
-clearTimeout(this._resizer);
-delete this._resizer;
-}
-this._resizer=setTimeout(dojo.hitch(this,function(){
-delete this._resizer;
-this._resizeEditor();
-}),10);
-}));
-this._resizeEditor();
-var dn=this.editor.toolbar.domNode;
-setTimeout(function(){
-dojo.window.scrollIntoView(dn);
-},250);
-}else{
-if(this._resizeHandle){
-dojo.disconnect(this._resizeHandle);
-this._resizeHandle=null;
-}
-if(this._resizeHandle2){
-dojo.disconnect(this._resizeHandle2);
-this._resizeHandle2=null;
-}
-if(this._rst){
-clearTimeout(this._rst);
-this._rst=null;
-}
-while(_d&&_d!==dojo.body()){
-dojo.removeClass(_d,"dijitForceStatic");
-_d=_d.parentNode;
-}
-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;
-}
-var _13=this;
-setTimeout(function(){
-var mb=_13._origState.marginBox;
-var oh=_13._origState.height;
-if(dojo.isIE&&!dojo.isQuirks){
-_c.parentNode.style.overflow=_13._oldBodyParentOverflow;
-delete _13._oldBodyParentOverflow;
-}
-dojo.style(_c,"overflow",_13._oldOverflow);
-delete _13._oldOverflow;
-dojo.style(ed.domNode,_13._origState);
-dojo.style(ed.iframe.parentNode,{height:"",width:""});
-dojo.style(ed.iframe,_13._origiFrameState);
-delete _13._origState;
-delete _13._origiFrameState;
-var _14=dijit.getEnclosingWidget(ed.domNode.parentNode);
-if(_14&&_14.resize){
-_14.resize();
-}else{
-if(!oh||oh.indexOf("%")<0){
-setTimeout(dojo.hitch(this,function(){
-ed.resize({h:mb.h});
-}),0);
-}
-}
-dojo.window.scrollIntoView(_13.editor.toolbar.domNode);
-},100);
-}
-},destroy:function(){
-if(this._resizeHandle){
-dojo.disconnect(this._resizeHandle);
-this._resizeHandle=null;
-}
-if(this._resizeHandle2){
-dojo.disconnect(this._resizeHandle2);
-this._resizeHandle2=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 _15=o.args.name.toLowerCase();
-if(_15==="fullscreen"){
-o.plugin=new dijit._editor.plugins.FullScreen({zIndex:("zIndex" in o.args)?o.args.zIndex:500});
-}
+dojo.requireLocalization("dijit._editor", "commands", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare("dijit._editor.plugins.FullScreen",dijit._editor._Plugin,{
+       // summary:
+       //              This plugin provides FullScreen cabability to the editor.  When
+       //              toggled on, it will render the editor into the full window and
+       //              overlay everything.  It also binds to the hotkey: CTRL-SHIFT-F11
+       //              for toggling fullscreen mode.
+
+       // zIndex: [public] Number
+       //              zIndex value used for overlaying the full page.
+       //              default is 500.
+       zIndex: 500,
+
+       // _origState: [private] Object
+       //              The original view state of the editor.
+       _origState: null,
+
+       // _origiFrameState: [private] Object
+       //              The original view state of the iframe of the editor.
+       _origiFrameState: null,
+
+       // _resizeHandle: [private] Object
+       //              Connection point used for handling resize when window resizes.
+       _resizeHandle: null,
+
+       // isFullscreen: [const] boolean
+       //              Read-Only variable used to denote of the editor is in fullscreen mode or not.
+       isFullscreen: false,
+
+       toggle: function(){
+               // summary:
+               //              Function to allow programmatic toggling of the view.
+               this.button.set("checked", !this.button.get("checked"));
+       },
+
+       _initButton: function(){
+               // summary:
+               //              Over-ride for creation of the resize button.
+               var strings = dojo.i18n.getLocalization("dijit._editor", "commands"),
+                       editor = this.editor;
+               this.button = new dijit.form.ToggleButton({
+                       label: strings["fullScreen"],
+                       dir: editor.dir,
+                       lang: editor.lang,
+                       showLabel: false,
+                       iconClass: this.iconClassPrefix + " " + this.iconClassPrefix + "FullScreen",
+                       tabIndex: "-1",
+                       onChange: dojo.hitch(this, "_setFullScreen")
+               });
+       },
+
+       setEditor: function(editor){
+               // summary:
+               //              Over-ride for the setting of the editor.
+               // editor: Object
+               //              The editor to configure for this plugin to use.
+               this.editor = editor;
+               this._initButton();
+
+               this.editor.addKeyHandler(dojo.keys.F11, true, true, dojo.hitch(this, function(e){
+                       // Enable the CTRL-SHIFT-F11 hotkey for fullscreen mode.
+                       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){
+               // summary:
+               //              When in Full Screen mode, it's good to try and retain focus in the editor
+               //              so this function is intended to try and constrain the TAB key.
+               // e: Event
+               //              The key event.
+               // tags:
+               //              private
+               if(this.isFullscreen){
+                       var ed = this.editor;
+                       if(!ed.isTabIndent &&
+                               ed._fullscreen_oldOnKeyDown &&
+                               e.keyCode === dojo.keys.TAB){
+                               // If we're in fullscreen mode, we want to take over how tab moves focus a bit.
+                               // to keep it within the editor since it's hiding the rest of the page.
+                               // IE hates changing focus IN the event handler, so need to put calls
+                               // in a timeout.  Gotta love IE.
+                               // Also need to check for alternate view nodes if present and active.
+                               var f = dijit.getFocus();
+                               var avn = this._getAltViewNode();
+                               if(f.node == ed.iframe ||
+                                       (avn && f.node === avn)){
+                                       setTimeout(dojo.hitch(this, function(){
+                                               ed.toolbar.focus();
+                                       }), 10);
+                               }else{
+                                       if(avn && dojo.style(ed.iframe, "display") === "none"){
+                                               setTimeout(dojo.hitch(this, function(){
+                                                       dijit.focus(avn);
+                                               }), 10);
+                                       }else{
+                                               setTimeout(dojo.hitch(this, function(){
+                                                       ed.focus();
+                                               }), 10);
+                                       }
+                               }
+                               dojo.stopEvent(e);
+                       }else if(ed._fullscreen_oldOnKeyDown){
+                               // Only call up when it's a different function.  Traps corner case event issue
+                               // on IE which caused stack overflow on handler cleanup.
+                               ed._fullscreen_oldOnKeyDown(e);
+                       }
+               }
+       },
+
+       _resizeEditor: function(){
+               // summary:
+               //              Function to handle resizing the editor as the viewport
+               //              resizes (window scaled)
+               // tags:
+               //              private
+               var vp = dojo.window.getBox();
+               dojo.marginBox(this.editor.domNode, {
+                       w: vp.w,
+                       h: vp.h
+               });
+
+               //Adjust the inernal heights too, as they can be a bit off.
+               var hHeight = this.editor.getHeaderHeight();
+               var fHeight = this.editor.getFooterHeight();
+               var extents = dojo._getPadBorderExtents(this.editor.domNode);
+               var fcpExtents = dojo._getPadBorderExtents(this.editor.iframe.parentNode);
+               var fcmExtents = dojo._getMarginExtents(this.editor.iframe.parentNode);
+               
+               var cHeight = vp.h - (hHeight + extents.h + fHeight);
+               dojo.marginBox(this.editor.iframe.parentNode, {
+                       h: cHeight,
+                       w: vp.w
+               });
+               dojo.marginBox(this.editor.iframe, {
+                       h: cHeight - (fcpExtents.h + fcmExtents.h)
+               });
+       },
+
+       _getAltViewNode: function(){
+               // summary:
+               //              This function is intended as a hook point for setting an
+               //              alternate view node for when in full screen mode and the
+               //              editable iframe is hidden.
+               // tags:
+               //              protected.
+       },
+
+       _setFullScreen: function(full){
+               // summary:
+               //              Function to handle toggling between full screen and
+               //              regular view.
+               // tags:
+               //              private
+               var vp = dojo.window.getBox();
+
+               //Alias this for shorter code.
+               var ed = this.editor;
+               var body = dojo.body();
+               var editorParent = ed.domNode.parentNode;
+
+               this.isFullscreen = full;
+
+               if(full){
+                       //Parent classes can royally screw up this plugin, so we
+                       //have to set eveything to position static.
+                       while(editorParent && editorParent !== dojo.body()){
+                               dojo.addClass(editorParent, "dijitForceStatic");
+                               editorParent = editorParent.parentNode;
+                       }
+
+                       // Save off the resize function.  We want to kill its behavior.
+                       this._editorResizeHolder = this.editor.resize;
+                       ed.resize = function() {} ;
+
+                       // Try to constrain focus control.
+                       ed._fullscreen_oldOnKeyDown = ed.onKeyDown;
+                       ed.onKeyDown = dojo.hitch(this, this._containFocus);
+
+                       this._origState = {};
+                       this._origiFrameState = {};
+
+                       // Store the basic editor state we have to restore later.
+                       // Not using dojo.style here, had problems, didn't
+                       // give me stuff like 100%, gave me pixel calculated values.
+                       // Need the exact original values.
+                       var domNode = ed.domNode,
+                               domStyle = domNode && domNode.style || {};
+                       this._origState = {
+                               width: domStyle.width || "",
+                               height: domStyle.height || "",
+                               top: dojo.style(domNode, "top") || "",
+                               left: dojo.style(domNode, "left") || "",
+                               position: dojo.style(domNode, "position") || "static",
+                               marginBox: dojo.marginBox(ed.domNode)
+                       };
+
+                       // Store the iframe state we have to restore later.
+                       // Not using dojo.style here, had problems, didn't
+                       // give me stuff like 100%, gave me pixel calculated values.
+                       // Need the exact original values.
+                       var iframe = ed.iframe,
+                               iframeStyle = iframe && iframe.style || {};
+
+                       var bc = dojo.style(ed.iframe, "backgroundColor");
+                       this._origiFrameState = {
+                               backgroundColor: bc || "transparent",
+                               width: iframeStyle.width || "auto",
+                               height: iframeStyle.height || "auto",
+                               zIndex: iframeStyle.zIndex || ""
+                       };
+
+                       // Okay, size everything.
+                       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%"
+                       });
+
+                       // Store the overflow state we have to restore later.
+                       // IE had issues, so have to check that it's defined.  Ugh.
+                       if(body.style && body.style.overflow){
+                               this._oldOverflow = dojo.style(body, "overflow");
+                       }else{
+                               this._oldOverflow = "";
+                       }
+
+                       if(dojo.isIE && !dojo.isQuirks){
+                               // IE will put scrollbars in anyway, html (parent of body)
+                               // also controls them in standards mode, so we have to
+                               // remove them, argh.
+                               if(body.parentNode &&
+                                       body.parentNode.style &&
+                                       body.parentNode.style.overflow){
+                                       this._oldBodyParentOverflow = body.parentNode.style.overflow;
+                               }else{
+                                       try{
+                                               this._oldBodyParentOverflow = dojo.style(body.parentNode, "overflow");
+                                       }catch(e){
+                                               this._oldBodyParentOverflow = "scroll";
+                                       }
+                               }
+                               dojo.style(body.parentNode, "overflow", "hidden");
+                       }
+                       dojo.style(body, "overflow", "hidden");
+
+                       var resizer = function(){
+                               // function to handle resize events.
+                               // Will check current VP and only resize if
+                               // different.
+                               var vp = dojo.window.getBox();
+                               if("_prevW" in this && "_prevH" in this){
+                                       // No actual size change, ignore.
+                                       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;
+                               }
+                               // Timeout it to help avoid spamming resize on IE.
+                               // Works for all browsers.
+                               this._resizer = setTimeout(dojo.hitch(this, function(){
+                                       delete this._resizer;
+                                       this._resizeEditor();
+                               }), 10);
+                       };
+                       this._resizeHandle = dojo.connect(window, "onresize", this, resizer);
+
+                       // Also monitor for direct calls to resize and adapt editor.
+                       this._resizeHandle2 = dojo.connect(ed, "resize", dojo.hitch(this, function(){
+                               if(this._resizer){
+                                       clearTimeout(this._resizer);
+                                       delete this._resizer;
+                               }
+                               this._resizer = setTimeout(dojo.hitch(this, function(){
+                                       delete this._resizer;
+                                       this._resizeEditor();
+                               }), 10);
+                       }));
+
+                       // Call it once to work around IE glitchiness.  Safe for other browsers too.
+                       this._resizeEditor();
+                       var dn = this.editor.toolbar.domNode;
+                       setTimeout(function(){dojo.window.scrollIntoView(dn);}, 250);
+               }else{
+                       if(this._resizeHandle){
+                               // Cleanup resizing listeners
+                               dojo.disconnect(this._resizeHandle);
+                               this._resizeHandle = null;
+                       }
+                       if(this._resizeHandle2){
+                               // Cleanup resizing listeners
+                               dojo.disconnect(this._resizeHandle2);
+                               this._resizeHandle2 = null;
+                       }
+                       if(this._rst){
+                               clearTimeout(this._rst);
+                               this._rst = null;
+                       }
+                       
+                       //Remove all position static class assigns.
+                       while(editorParent && editorParent !== dojo.body()){
+                               dojo.removeClass(editorParent, "dijitForceStatic");
+                               editorParent = editorParent.parentNode;
+                       }
+                       
+                       // Restore resize function
+                       if(this._editorResizeHolder){
+                               this.editor.resize = this._editorResizeHolder;
+                       }
+
+                       if(!this._origState && !this._origiFrameState){
+                               // If we actually didn't toggle, then don't do anything.
+                               return;
+                       }
+                       if(ed._fullscreen_oldOnKeyDown){
+                               ed.onKeyDown = ed._fullscreen_oldOnKeyDown;
+                               delete ed._fullscreen_oldOnKeyDown;
+                       }
+
+                       // Add a timeout to make sure we don't have a resize firing in the
+                       // background at the time of minimize.
+                       var self = this;
+                       setTimeout(function(){
+                               // Restore all the editor state.
+                               var mb = self._origState.marginBox;
+                               var oh = self._origState.height;
+                               if(dojo.isIE && !dojo.isQuirks){
+                                       body.parentNode.style.overflow = self._oldBodyParentOverflow;
+                                       delete self._oldBodyParentOverflow;
+                               }
+                               dojo.style(body, "overflow", self._oldOverflow);
+                               delete self._oldOverflow;
+
+                               dojo.style(ed.domNode, self._origState);
+                               dojo.style(ed.iframe.parentNode, {
+                                       height: "",
+                                       width: ""
+                               });
+                               dojo.style(ed.iframe, self._origiFrameState);
+                               delete self._origState;
+                               delete self._origiFrameState;
+                               // In case it is contained in a layout and the layout changed size,
+                               // go ahead and call resize.
+                               var pWidget = dijit.getEnclosingWidget(ed.domNode.parentNode);
+                               if(pWidget && pWidget.resize){
+                                       pWidget.resize();
+                               }else{
+                                       if(!oh || oh.indexOf("%") < 0){
+                                               // Resize if the original size wasn't set
+                                               // or wasn't in percent.  Timeout is to avoid
+                                               // an IE crash in unit testing.
+                                               setTimeout(dojo.hitch(this, function(){ed.resize({h: mb.h});}), 0);
+                                       }
+                               }
+                               dojo.window.scrollIntoView(self.editor.toolbar.domNode);
+                       }, 100);
+               }
+       },
+
+       updateState: function(){
+               // summary:
+               //              Over-ride for button state control for disabled to work.
+               this.button.set("disabled", this.get("disabled"));
+       },
+
+       destroy: function(){
+               // summary:
+               //              Over-ride to ensure the resize handle gets cleaned up.
+               if(this._resizeHandle){
+                       // Cleanup resizing listeners
+                       dojo.disconnect(this._resizeHandle);
+                       this._resizeHandle = null;
+               }
+               if(this._resizeHandle2){
+                       // Cleanup resizing listeners
+                       dojo.disconnect(this._resizeHandle2);
+                       this._resizeHandle2 = null;
+               }
+               if(this._resizer){
+                       clearTimeout(this._resizer);
+                       this._resizer = null;
+               }
+               this.inherited(arguments);
+       }
 });
+
+
+// Register this plugin.
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+       if(o.plugin){ return; }
+       var name = o.args.name.toLowerCase();
+       if(name === "fullscreen"){
+               o.plugin = new dijit._editor.plugins.FullScreen({
+                       zIndex: ("zIndex" in o.args)?o.args.zIndex:500
+               });
+       }
+});
+
 }
index 71de3ad8faad3777dade156a17dad375f9d6c5ad..feb5cf9ecfe930ed1b887851c66eefe2292c54f2 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.LinkDialog"]){
-dojo._hasResource["dijit._editor.plugins.LinkDialog"]=true;
+if(!dojo._hasResource["dijit._editor.plugins.LinkDialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.LinkDialog"] = true;
 dojo.provide("dijit._editor.plugins.LinkDialog");
 dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
 dojo.require("dijit._editor._Plugin");
 dojo.require("dijit.TooltipDialog");
-dojo.require("dijit.form.Button");
+dojo.require("dijit.form.DropDownButton");
 dojo.require("dijit.form.ValidationTextBox");
 dojo.require("dijit.form.Select");
 dojo.require("dijit._editor.range");
 dojo.require("dojo.i18n");
 dojo.require("dojo.string");
-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,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.requireLocalization("dijit._editor","LinkDialog",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.declare("dijit._editor.plugins.LinkDialog",dijit._editor._Plugin,{buttonClass:dijit.form.DropDownButton,useDefaultCommand:false,urlRegExp:"((https?|ftps?|file)\\://|./|/|)(/[a-zA-Z]{1,1}:/|)(((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)*(?:[a-zA-Z](?:[-\\da-zA-Z]{0,80}[\\da-zA-Z])?)\\.?)|(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])|(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]|(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]|(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])|0[xX]0*[\\da-fA-F]{1,8}|([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}|([\\da-fA-F]{1,4}\\:){6}((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])))(\\:\\d+)?(/(?:[^?#\\s/]+/)*(?:[^?#\\s/]+(?:\\?[^?#\\s/]*)?(?:#.*)?)?)?",emailRegExp:"<?(mailto\\:)([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+"+"@"+"((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)+(?:[a-zA-Z](?:[-\\da-zA-Z]{0,6}[\\da-zA-Z])?)\\.?)|localhost|^[^-][a-zA-Z0-9_-]*>?",htmlTemplate:"<a href=\"${urlInput}\" _djrealurl=\"${urlInput}\""+" target=\"${targetSelect}\""+">${textInput}</a>",tag:"a",_hostRxp:new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),_userAtRxp:new RegExp("^([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+@","i"),linkDialogTemplate:["<table><tr><td>","<label for='${id}_urlInput'>${url}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='true' "+"id='${id}_urlInput' name='urlInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_textInput'>${text}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='true' id='${id}_textInput' "+"name='textInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_targetSelect'>${target}</label>","</td><td>","<select id='${id}_targetSelect' name='targetSelect' dojoType='dijit.form.Select'>","<option selected='selected' value='_self'>${currentWindow}</option>","<option value='_blank'>${newWindow}</option>","<option value='_top'>${topWindow}</option>","<option value='_parent'>${parentWindow}</option>","</select>","</td></tr><tr><td colspan='2'>","<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>","<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>","</td></tr></table>"].join(""),_initButton:function(){
-var _1=this;
-this.tag=this.command=="insertImage"?"img":"a";
-var _2=dojo.mixin(dojo.i18n.getLocalization("dijit","common",this.lang),dojo.i18n.getLocalization("dijit._editor","LinkDialog",this.lang));
-var _3=(this.dropDown=new dijit.TooltipDialog({title:_2[this.command+"Title"],execute:dojo.hitch(this,"setValue"),onOpen:function(){
-_1._onOpenDialog();
-dijit.TooltipDialog.prototype.onOpen.apply(this,arguments);
-},onCancel:function(){
-setTimeout(dojo.hitch(_1,"_onCloseDialog"),0);
-}}));
-_2.urlRegExp=this.urlRegExp;
-_2.id=dijit.getUniqueId(this.editor.id);
-this._uniqueId=_2.id;
-this._setContent(_3.title+"<div style='border-bottom: 1px black solid;padding-bottom:2pt;margin-bottom:4pt'></div>"+dojo.string.substitute(this.linkDialogTemplate,_2));
-_3.startup();
-this._urlInput=dijit.byId(this._uniqueId+"_urlInput");
-this._textInput=dijit.byId(this._uniqueId+"_textInput");
-this._setButton=dijit.byId(this._uniqueId+"_setButton");
-this.connect(dijit.byId(this._uniqueId+"_cancelButton"),"onClick",function(){
-this.dropDown.onCancel();
+dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dijit._editor", "LinkDialog", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare("dijit._editor.plugins.LinkDialog", dijit._editor._Plugin, {
+       // summary:
+       //              This plugin provides the basis for an 'anchor' (link) dialog and an extension of it
+       //              provides the image link dialog.
+       //
+       // description:
+       //              The command provided by this plugin is:
+       //              * createLink
+
+       // Override _Plugin.buttonClass.   This plugin is controlled by a DropDownButton
+       // (which triggers a TooltipDialog).
+       buttonClass: dijit.form.DropDownButton,
+
+       // Override _Plugin.useDefaultCommand... processing is handled by this plugin, not by dijit.Editor.
+       useDefaultCommand: false,
+
+       // urlRegExp: [protected] String
+       //              Used for validating input as correct URL.  While file:// urls are not terribly
+       //              useful, they are technically valid.
+       urlRegExp: "((https?|ftps?|file)\\://|\./|/|)(/[a-zA-Z]{1,1}:/|)(((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)*(?:[a-zA-Z](?:[-\\da-zA-Z]{0,80}[\\da-zA-Z])?)\\.?)|(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])|(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]|(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]|(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])|0[xX]0*[\\da-fA-F]{1,8}|([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}|([\\da-fA-F]{1,4}\\:){6}((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])))(\\:\\d+)?(/(?:[^?#\\s/]+/)*(?:[^?#\\s/]{0,}(?:\\?[^?#\\s/]*)?(?:#.*)?)?)?",
+
+       // emailRegExp: [protected] String
+       //              Used for validating input as correct email address.  Taken from dojox.validate
+       emailRegExp:  "<?(mailto\\:)([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+" /*username*/ + "@" +
+        "((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)+(?:[a-zA-Z](?:[-\\da-zA-Z]{0,6}[\\da-zA-Z])?)\\.?)|localhost|^[^-][a-zA-Z0-9_-]*>?",        // host.
+
+       // htmlTemplate: [protected] String
+       //              String used for templating the HTML to insert at the desired point.
+       htmlTemplate: "<a href=\"${urlInput}\" _djrealurl=\"${urlInput}\"" +
+               " target=\"${targetSelect}\"" +
+               ">${textInput}</a>",
+
+       // tag: [protected] String
+       //              Tag used for the link type.
+       tag: "a",
+
+       // _hostRxp [private] RegExp
+       //              Regular expression used to validate url fragments (ip address, hostname, etc)
+       _hostRxp:  new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),
+
+       // _userAtRxp [private] RegExp
+       //              Regular expression used to validate e-mail address fragment.
+       _userAtRxp: new RegExp("^([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+@", "i"),
+
+       // linkDialogTemplate: [protected] String
+       //              Template for contents of TooltipDialog to pick URL
+       linkDialogTemplate: [
+               "<table><tr><td>",
+               "<label for='${id}_urlInput'>${url}</label>",
+               "</td><td>",
+               "<input dojoType='dijit.form.ValidationTextBox' required='true' " +
+               "id='${id}_urlInput' name='urlInput' intermediateChanges='true'/>",
+               "</td></tr><tr><td>",
+               "<label for='${id}_textInput'>${text}</label>",
+               "</td><td>",
+               "<input dojoType='dijit.form.ValidationTextBox' required='true' id='${id}_textInput' " +
+               "name='textInput' intermediateChanges='true'/>",
+               "</td></tr><tr><td>",
+               "<label for='${id}_targetSelect'>${target}</label>",
+               "</td><td>",
+               "<select id='${id}_targetSelect' name='targetSelect' dojoType='dijit.form.Select'>",
+               "<option selected='selected' value='_self'>${currentWindow}</option>",
+               "<option value='_blank'>${newWindow}</option>",
+               "<option value='_top'>${topWindow}</option>",
+               "<option value='_parent'>${parentWindow}</option>",
+               "</select>",
+               "</td></tr><tr><td colspan='2'>",
+               "<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>",
+               "<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>",
+               "</td></tr></table>"
+       ].join(""),
+
+       _initButton: function(){
+               // Override _Plugin._initButton() to initialize DropDownButton and TooltipDialog.
+               var _this = this;
+               this.tag = this.command == 'insertImage' ? 'img' : 'a';
+               var messages = dojo.mixin(dojo.i18n.getLocalization("dijit", "common", this.lang),
+                       dojo.i18n.getLocalization("dijit._editor", "LinkDialog", this.lang));
+               var dropDown = (this.dropDown = new dijit.TooltipDialog({
+                       title: messages[this.command + "Title"],
+                       execute: dojo.hitch(this, "setValue"),
+                       onOpen: function(){
+                               _this._onOpenDialog();
+                               dijit.TooltipDialog.prototype.onOpen.apply(this, arguments);
+                       },
+                       onCancel: function(){
+                               setTimeout(dojo.hitch(_this, "_onCloseDialog"),0);
+                       }
+               }));
+               messages.urlRegExp = this.urlRegExp;
+               messages.id = dijit.getUniqueId(this.editor.id);
+               this._uniqueId = messages.id;
+               this._setContent(dropDown.title +
+                       "<div style='border-bottom: 1px black solid;padding-bottom:2pt;margin-bottom:4pt'></div>" +
+                       dojo.string.substitute(this.linkDialogTemplate, messages));
+               dropDown.startup();
+               this._urlInput = dijit.byId(this._uniqueId + "_urlInput");
+               this._textInput = dijit.byId(this._uniqueId + "_textInput");
+               this._setButton = dijit.byId(this._uniqueId + "_setButton");
+               this.connect(dijit.byId(this._uniqueId + "_cancelButton"), "onClick", function(){
+                       this.dropDown.onCancel();
+               });
+               if(this._urlInput){
+                       this.connect(this._urlInput, "onChange", "_checkAndFixInput");
+               }
+               if(this._textInput){
+                       this.connect(this._textInput, "onChange", "_checkAndFixInput");
+               }
+
+               // Build up the dual check for http/https/file:, and mailto formats.
+               this._urlRegExp = new RegExp("^" + this.urlRegExp + "$", "i");
+               this._emailRegExp = new RegExp("^" + this.emailRegExp + "$", "i");
+               this._urlInput.isValid = dojo.hitch(this, function(){
+                       // Function over-ride of isValid to test if the input matches a url or a mailto style link.
+                       var value = this._urlInput.get("value");
+                       return this._urlRegExp.test(value) || this._emailRegExp.test(value);
+               });
+
+               this._connectTagEvents();
+               this.inherited(arguments);
+       },
+
+       _checkAndFixInput: function(){
+               // summary:
+               //              A function to listen for onChange events and test the input contents
+               //              for valid information, such as valid urls with http/https/ftp and if
+               //              not present, try and guess if the input url is relative or not, and if
+               //              not, append http:// to it.  Also validates other fields as determined by
+               //              the internal _isValid function.
+               var self = this;
+               var url = this._urlInput.get("value");
+               var fixupUrl = function(url){
+                       var appendHttp = false;
+                       var appendMailto = false;
+                       if(url && url.length > 1){
+                               url = dojo.trim(url);
+                               if(url.indexOf("mailto:") !== 0){
+                                       if(url.indexOf("/") > 0){
+                                               if(url.indexOf("://") === -1){
+                                                       // Check that it doesn't start with / or ./, which would
+                                                       // imply 'target server relativeness'
+                                                       if(url.charAt(0) !== '/' && url.indexOf("./") !== 0){
+                                                               if(self._hostRxp.test(url)){
+                                                                       appendHttp = true;
+                                                               }
+                                                       }
+                                               }
+                                       }else if(self._userAtRxp.test(url)){
+                                               // If it looks like a foo@, append a mailto.
+                                               appendMailto = true;
+                                       }
+                               }
+                       }
+                       if(appendHttp){
+                               self._urlInput.set("value", "http://" + url);
+                       }
+                       if(appendMailto){
+                               self._urlInput.set("value", "mailto:" + url);
+                       }
+                       self._setButton.set("disabled", !self._isValid());
+               };
+               if(this._delayedCheck){
+                       clearTimeout(this._delayedCheck);
+                       this._delayedCheck = null;
+               }
+               this._delayedCheck = setTimeout(function(){
+                       fixupUrl(url);
+               }, 250);
+       },
+
+       _connectTagEvents: function(){
+               // summary:
+               //              Over-ridable function that connects tag specific events.
+               this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){
+                       this.connect(this.editor.editNode, "ondblclick", this._onDblClick);
+               }));
+       },
+
+       _isValid: function(){
+               // summary:
+               //              Internal function to allow validating of the inputs
+               //              for a link to determine if set should be disabled or not
+               // tags:
+               //              protected
+               return this._urlInput.isValid() && this._textInput.isValid();
+       },
+
+       _setContent: function(staticPanel){
+               // summary:
+               //              Helper for _initButton above.   Not sure why it's a separate method.
+               this.dropDown.set({
+                       parserScope: "dojo",            // make parser search for dojoType/data-dojo-type even if page is multi-version
+                       content: staticPanel
+               });
+       },
+
+       _checkValues: function(args){
+               // summary:
+               //              Function to check the values in args and 'fix' them up as needed.
+               // args: Object
+               //              Content being set.
+               // tags:
+               //              protected
+               if(args && args.urlInput){
+                       args.urlInput = args.urlInput.replace(/"/g, "&quot;");
+               }
+               return args;
+       },
+
+       setValue: function(args){
+               // summary:
+               //              Callback from the dialog when user presses "set" button.
+               // tags:
+               //              private
+               //TODO: prevent closing popup if the text is empty
+               this._onCloseDialog();
+               if(dojo.isIE < 9){ //see #4151
+                       var sel = dijit.range.getSelection(this.editor.window);
+                       var range = sel.getRangeAt(0);
+                       var a = range.endContainer;
+                       if(a.nodeType === 3){
+                               // Text node, may be the link contents, so check parent.
+                               // This plugin doesn't really support nested HTML elements
+                               // in the link, it assumes all link content is text.
+                               a = a.parentNode;
+                       }
+                       if(a && (a.nodeName && a.nodeName.toLowerCase() !== this.tag)){
+                               // Stll nothing, one last thing to try on IE, as it might be 'img'
+                               // and thus considered a control.
+                               a = dojo.withGlobal(this.editor.window,
+                                       "getSelectedElement", dijit._editor.selection, [this.tag]);
+                       }
+                       if(a && (a.nodeName && a.nodeName.toLowerCase() === this.tag)){
+                               // Okay, we do have a match.  IE, for some reason, sometimes pastes before
+                               // instead of removing the targetted paste-over element, so we unlink the
+                               // old one first.  If we do not the <a> tag remains, but it has no content,
+                               // so isn't readily visible (but is wrong for the action).
+                               if(this.editor.queryCommandEnabled("unlink")){
+                                       // Select all the link childent, then unlink.  The following insert will
+                                       // then replace the selected text.
+                                       dojo.withGlobal(this.editor.window,
+                                               "selectElementChildren", dijit._editor.selection, [a]);
+                                       this.editor.execCommand("unlink");
+                               }
+                       }
+               }
+               // make sure values are properly escaped, etc.
+               args = this._checkValues(args);
+               this.editor.execCommand('inserthtml',
+                       dojo.string.substitute(this.htmlTemplate, args));
+       },
+
+       _onCloseDialog: function(){
+               // summary:
+               //              Handler for close event on the dialog
+               this.editor.focus();
+       },
+
+       _getCurrentValues: function(a){
+               // summary:
+               //              Over-ride for getting the values to set in the dropdown.
+               // a:
+               //              The anchor/link to process for data for the dropdown.
+               // tags:
+               //              protected
+               var url, text, target;
+               if(a && a.tagName.toLowerCase() === this.tag){
+                       url = a.getAttribute('_djrealurl') || a.getAttribute('href');
+                       target = a.getAttribute('target') || "_self";
+                       text = a.textContent || a.innerText;
+                       dojo.withGlobal(this.editor.window, "selectElement", dijit._editor.selection, [a, true]);
+               }else{
+                       text = dojo.withGlobal(this.editor.window, dijit._editor.selection.getSelectedText);
+               }
+               return {urlInput: url || '', textInput: text || '', targetSelect: target || ''}; //Object;
+       },
+
+       _onOpenDialog: function(){
+               // summary:
+               //              Handler for when the dialog is opened.
+               //              If the caret is currently in a URL then populate the URL's info into the dialog.
+               var a;
+               if(dojo.isIE < 9){
+                       // IE is difficult to select the element in, using the range unified
+                       // API seems to work reasonably well.
+                       var sel = dijit.range.getSelection(this.editor.window);
+                       var range = sel.getRangeAt(0);
+                       a = range.endContainer;
+                       if(a.nodeType === 3){
+                               // Text node, may be the link contents, so check parent.
+                               // This plugin doesn't really support nested HTML elements
+                               // in the link, it assumes all link content is text.
+                               a = a.parentNode;
+                       }
+                       if(a && (a.nodeName && a.nodeName.toLowerCase() !== this.tag)){
+                               // Stll nothing, one last thing to try on IE, as it might be 'img'
+                               // and thus considered a control.
+                               a = dojo.withGlobal(this.editor.window,
+                                       "getSelectedElement", dijit._editor.selection, [this.tag]);
+                       }
+               }else{
+                       a = dojo.withGlobal(this.editor.window,
+                               "getAncestorElement", dijit._editor.selection, [this.tag]);
+               }
+               this.dropDown.reset();
+               this._setButton.set("disabled", true);
+               this.dropDown.set("value", this._getCurrentValues(a));
+       },
+
+       _onDblClick: function(e){
+               // summary:
+               //              Function to define a behavior on double clicks on the element
+               //              type this dialog edits to select it and pop up the editor
+               //              dialog.
+               // e: Object
+               //              The double-click event.
+               // tags:
+               //              protected.
+               if(e && e.target){
+                       var t = e.target;
+                       var tg = t.tagName? t.tagName.toLowerCase() : "";
+                       if(tg === this.tag && dojo.attr(t,"href")){
+                               dojo.withGlobal(this.editor.window,
+                                        "selectElement",
+                                        dijit._editor.selection, [t]);
+                               this.editor.onDisplayChanged();
+                               
+                               setTimeout(dojo.hitch(this, function(){
+                                       // Focus shift outside the event handler.
+                                       // IE doesn't like focus changes in event handles.
+                                       this.button.set("disabled", false);
+                                       this.button.openDropDown();
+                               }), 10);
+                       }
+               }
+       }
 });
-if(this._urlInput){
-this.connect(this._urlInput,"onChange","_checkAndFixInput");
-}
-if(this._textInput){
-this.connect(this._textInput,"onChange","_checkAndFixInput");
-}
-this._urlRegExp=new RegExp("^"+this.urlRegExp+"$","i");
-this._emailRegExp=new RegExp("^"+this.emailRegExp+"$","i");
-this._urlInput.isValid=dojo.hitch(this,function(){
-var _4=this._urlInput.get("value");
-return this._urlRegExp.test(_4)||this._emailRegExp.test(_4);
+
+dojo.declare("dijit._editor.plugins.ImgLinkDialog", [dijit._editor.plugins.LinkDialog], {
+       // summary:
+       //              This plugin extends LinkDialog and adds in a plugin for handling image links.
+       //              provides the image link dialog.
+       //
+       // description:
+       //              The command provided by this plugin is:
+       //              * insertImage
+
+       // linkDialogTemplate: [protected] String
+       //              Over-ride for template since img dialog doesn't need target that anchor tags may.
+       linkDialogTemplate: [
+               "<table><tr><td>",
+               "<label for='${id}_urlInput'>${url}</label>",
+               "</td><td>",
+               "<input dojoType='dijit.form.ValidationTextBox' regExp='${urlRegExp}' " +
+               "required='true' id='${id}_urlInput' name='urlInput' intermediateChanges='true'/>",
+               "</td></tr><tr><td>",
+               "<label for='${id}_textInput'>${text}</label>",
+               "</td><td>",
+               "<input dojoType='dijit.form.ValidationTextBox' required='false' id='${id}_textInput' " +
+               "name='textInput' intermediateChanges='true'/>",
+               "</td></tr><tr><td>",
+               "</td><td>",
+               "</td></tr><tr><td colspan='2'>",
+               "<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>",
+               "<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>",
+               "</td></tr></table>"
+       ].join(""),
+
+       // htmlTemplate: [protected] String
+       //              String used for templating the <img> HTML to insert at the desired point.
+       htmlTemplate: "<img src=\"${urlInput}\" _djrealurl=\"${urlInput}\" alt=\"${textInput}\" />",
+
+       // tag: [protected] String
+       //              Tag used for the link type (img).
+       tag: "img",
+
+       _getCurrentValues: function(img){
+               // summary:
+               //              Over-ride for getting the values to set in the dropdown.
+               // a:
+               //              The anchor/link to process for data for the dropdown.
+               // tags:
+               //              protected
+               var url, text;
+               if(img && img.tagName.toLowerCase() === this.tag){
+                       url = img.getAttribute('_djrealurl') || img.getAttribute('src');
+                       text = img.getAttribute('alt');
+                       dojo.withGlobal(this.editor.window,
+                               "selectElement", dijit._editor.selection, [img, true]);
+               }else{
+                       text = dojo.withGlobal(this.editor.window, dijit._editor.selection.getSelectedText);
+               }
+               return {urlInput: url || '', textInput: text || ''}; //Object;
+       },
+
+       _isValid: function(){
+               // summary:
+               //              Over-ride for images.  You can have alt text of blank, it is valid.
+               // tags:
+               //              protected
+               return this._urlInput.isValid();
+       },
+
+       _connectTagEvents: function(){
+               // summary:
+               //              Over-ridable function that connects tag specific events.
+               this.inherited(arguments);
+               this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){
+                       // Use onmousedown instead of onclick.  Seems that IE eats the first onclick
+                       // to wrap it in a selector box, then the second one acts as onclick.  See #10420
+                       this.connect(this.editor.editNode, "onmousedown", this._selectTag);
+               }));
+       },
+
+       _selectTag: function(e){
+               // summary:
+               //              A simple event handler that lets me select an image if it is clicked on.
+               //              makes it easier to select images in a standard way across browsers.  Otherwise
+               //              selecting an image for edit becomes difficult.
+               // e: Event
+               //              The mousedown event.
+               // tags:
+               //              private
+               if(e && e.target){
+                       var t = e.target;
+                       var tg = t.tagName? t.tagName.toLowerCase() : "";
+                       if(tg === this.tag){
+                               dojo.withGlobal(this.editor.window,
+                                       "selectElement",
+                                       dijit._editor.selection, [t]);
+                       }
+               }
+       },
+
+       _checkValues: function(args){
+               // summary:
+               //              Function to check the values in args and 'fix' them up as needed
+               //              (special characters in the url or alt text)
+               // args: Object
+               //              Content being set.
+               // tags:
+               //              protected
+               if(args && args.urlInput){
+                       args.urlInput = args.urlInput.replace(/"/g, "&quot;");
+               }
+               if(args && args.textInput){
+                       args.textInput = args.textInput.replace(/"/g, "&quot;");
+               }
+               return args;
+       },
+
+       _onDblClick: function(e){
+               // summary:
+               //              Function to define a behavior on double clicks on the element
+               //              type this dialog edits to select it and pop up the editor
+               //              dialog.
+               // e: Object
+               //              The double-click event.
+               // tags:
+               //              protected.
+               if(e && e.target){
+                       var t = e.target;
+                       var tg = t.tagName? t.tagName.toLowerCase() : "";
+                       if(tg === this.tag && dojo.attr(t,"src")){
+                               dojo.withGlobal(this.editor.window,
+                                        "selectElement",
+                                        dijit._editor.selection, [t]);
+                               this.editor.onDisplayChanged();
+                               setTimeout(dojo.hitch(this, function(){
+                                       // Focus shift outside the event handler.
+                                       // IE doesn't like focus changes in event handles.
+                                       this.button.set("disabled", false);
+                                       this.button.openDropDown();
+                               }), 10);
+                       }
+               }
+       }
 });
-this._connectTagEvents();
-this.inherited(arguments);
-},_checkAndFixInput:function(){
-var _5=this;
-var _6=this._urlInput.get("value");
-var _7=function(_8){
-var _9=false;
-var _a=false;
-if(_8&&_8.length>1){
-_8=dojo.trim(_8);
-if(_8.indexOf("mailto:")!==0){
-if(_8.indexOf("/")>0){
-if(_8.indexOf("://")===-1){
-if(_8.charAt(0)!=="/"&&_8.indexOf("./")!==0){
-if(_5._hostRxp.test(_8)){
-_9=true;
-}
-}
-}
-}else{
-if(_5._userAtRxp.test(_8)){
-_a=true;
-}
-}
-}
-}
-if(_9){
-_5._urlInput.set("value","http://"+_8);
-}
-if(_a){
-_5._urlInput.set("value","mailto:"+_8);
-}
-_5._setButton.set("disabled",!_5._isValid());
-};
-if(this._delayedCheck){
-clearTimeout(this._delayedCheck);
-this._delayedCheck=null;
-}
-this._delayedCheck=setTimeout(function(){
-_7(_6);
-},250);
-},_connectTagEvents:function(){
-this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
-this.connect(this.editor.editNode,"ondblclick",this._onDblClick);
-}));
-},_isValid:function(){
-return this._urlInput.isValid()&&this._textInput.isValid();
-},_setContent:function(_b){
-this.dropDown.set("content",_b);
-},_checkValues:function(_c){
-if(_c&&_c.urlInput){
-_c.urlInput=_c.urlInput.replace(/"/g,"&quot;");
-}
-return _c;
-},setValue:function(_d){
-this._onCloseDialog();
-if(dojo.isIE){
-var _e=dijit.range.getSelection(this.editor.window);
-var _f=_e.getRangeAt(0);
-var a=_f.endContainer;
-if(a.nodeType===3){
-a=a.parentNode;
-}
-if(a&&(a.nodeName&&a.nodeName.toLowerCase()!==this.tag)){
-a=dojo.withGlobal(this.editor.window,"getSelectedElement",dijit._editor.selection,[this.tag]);
-}
-if(a&&(a.nodeName&&a.nodeName.toLowerCase()===this.tag)){
-if(this.editor.queryCommandEnabled("unlink")){
-dojo.withGlobal(this.editor.window,"selectElementChildren",dijit._editor.selection,[a]);
-this.editor.execCommand("unlink");
-}
-}
-}
-_d=this._checkValues(_d);
-this.editor.execCommand("inserthtml",dojo.string.substitute(this.htmlTemplate,_d));
-},_onCloseDialog:function(){
-this.editor.focus();
-},_getCurrentValues:function(a){
-var url,_10,_11;
-if(a&&a.tagName.toLowerCase()===this.tag){
-url=a.getAttribute("_djrealurl")||a.getAttribute("href");
-_11=a.getAttribute("target")||"_self";
-_10=a.textContent||a.innerText;
-dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[a,true]);
-}else{
-_10=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);
-}
-return {urlInput:url||"",textInput:_10||"",targetSelect:_11||""};
-},_onOpenDialog:function(){
-var a;
-if(dojo.isIE){
-var sel=dijit.range.getSelection(this.editor.window);
-var _12=sel.getRangeAt(0);
-a=_12.endContainer;
-if(a.nodeType===3){
-a=a.parentNode;
-}
-if(a&&(a.nodeName&&a.nodeName.toLowerCase()!==this.tag)){
-a=dojo.withGlobal(this.editor.window,"getSelectedElement",dijit._editor.selection,[this.tag]);
-}
-}else{
-a=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.tag]);
-}
-this.dropDown.reset();
-this._setButton.set("disabled",true);
-this.dropDown.set("value",this._getCurrentValues(a));
-},_onDblClick:function(e){
-if(e&&e.target){
-var t=e.target;
-var tg=t.tagName?t.tagName.toLowerCase():"";
-if(tg===this.tag&&dojo.attr(t,"href")){
-dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);
-this.editor.onDisplayChanged();
-setTimeout(dojo.hitch(this,function(){
-this.button.set("disabled",false);
-this.button.openDropDown();
-}),10);
-}
-}
-}});
-dojo.declare("dijit._editor.plugins.ImgLinkDialog",[dijit._editor.plugins.LinkDialog],{linkDialogTemplate:["<table><tr><td>","<label for='${id}_urlInput'>${url}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' regExp='${urlRegExp}' "+"required='true' id='${id}_urlInput' name='urlInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_textInput'>${text}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='false' id='${id}_textInput' "+"name='textInput' intermediateChanges='true'>","</td></tr><tr><td>","</td><td>","</td></tr><tr><td colspan='2'>","<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>","<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>","</td></tr></table>"].join(""),htmlTemplate:"<img src=\"${urlInput}\" _djrealurl=\"${urlInput}\" alt=\"${textInput}\" />",tag:"img",_getCurrentValues:function(img){
-var url,_13;
-if(img&&img.tagName.toLowerCase()===this.tag){
-url=img.getAttribute("_djrealurl")||img.getAttribute("src");
-_13=img.getAttribute("alt");
-dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[img,true]);
-}else{
-_13=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);
-}
-return {urlInput:url||"",textInput:_13||""};
-},_isValid:function(){
-return this._urlInput.isValid();
-},_connectTagEvents:function(){
-this.inherited(arguments);
-this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
-this.connect(this.editor.editNode,"onmousedown",this._selectTag);
-}));
-},_selectTag:function(e){
-if(e&&e.target){
-var t=e.target;
-var tg=t.tagName?t.tagName.toLowerCase():"";
-if(tg===this.tag){
-dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);
-}
-}
-},_checkValues:function(_14){
-if(_14&&_14.urlInput){
-_14.urlInput=_14.urlInput.replace(/"/g,"&quot;");
-}
-if(_14&&_14.textInput){
-_14.textInput=_14.textInput.replace(/"/g,"&quot;");
-}
-return _14;
-},_onDblClick:function(e){
-if(e&&e.target){
-var t=e.target;
-var tg=t.tagName?t.tagName.toLowerCase():"";
-if(tg===this.tag&&dojo.attr(t,"src")){
-dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);
-this.editor.onDisplayChanged();
-setTimeout(dojo.hitch(this,function(){
-this.button.set("disabled",false);
-this.button.openDropDown();
-}),10);
-}
-}
-}});
-dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
-if(o.plugin){
-return;
-}
-switch(o.args.name){
-case "createLink":
-o.plugin=new dijit._editor.plugins.LinkDialog({command:o.args.name});
-break;
-case "insertImage":
-o.plugin=new dijit._editor.plugins.ImgLinkDialog({command:o.args.name});
-break;
-}
+
+// Register this plugin.
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+       if(o.plugin){ return; }
+       switch(o.args.name){
+               case "createLink":
+                       o.plugin = new dijit._editor.plugins.LinkDialog({command: o.args.name});
+                       break;
+               case "insertImage":
+                       o.plugin = new dijit._editor.plugins.ImgLinkDialog({command: o.args.name});
+                       break;
+       }
 });
+
 }
index 14c2cfa62ed307f5037a75acc31402e7186f9920..7e628d364568a75461a656672a611652445a0cb6 100644 (file)
@@ -1,36 +1,81 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._editor.plugins.NewPage"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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,ro,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"),_2=this.editor;
-this.button=new dijit.form.Button({label:_1["newPage"],dir:_2.dir,lang:_2.lang,showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"NewPage",tabIndex:"-1",onClick:dojo.hitch(this,"_newPage")});
-},setEditor:function(_3){
-this.editor=_3;
-this._initButton();
-},_newPage:function(){
-this.editor.beginEditing();
-this.editor.set("value",this.content);
-this.editor.endEditing();
-this.editor.focus();
-}});
-dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
-if(o.plugin){
-return;
-}
-var _4=o.args.name.toLowerCase();
-if(_4==="newpage"){
-o.plugin=new dijit._editor.plugins.NewPage({content:("content" in o.args)?o.args.content:"<br>"});
-}
+dojo.requireLocalization("dijit._editor", "commands", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare("dijit._editor.plugins.NewPage",dijit._editor._Plugin,{
+       // summary:
+       //              This plugin provides a simple 'new page' calability.  In other
+       //              words, set content to some default user defined string.
+
+       // content: [public] String
+       //              The default content to insert into the editor as the new page.
+       //              The default is the <br> tag, a single blank line.
+       content: "<br>",
+
+       _initButton: function(){
+               // summary:
+               //              Over-ride for creation of the Print button.
+               var strings = dojo.i18n.getLocalization("dijit._editor", "commands"),
+                       editor = this.editor;
+               this.button = new dijit.form.Button({
+                       label: strings["newPage"],
+                       dir: editor.dir,
+                       lang: editor.lang,
+                       showLabel: false,
+                       iconClass: this.iconClassPrefix + " " + this.iconClassPrefix + "NewPage",
+                       tabIndex: "-1",
+                       onClick: dojo.hitch(this, "_newPage")
+               });
+       },
+
+       setEditor: function(/*dijit.Editor*/ editor){
+               // summary:
+               //              Tell the plugin which Editor it is associated with.
+               // editor: Object
+               //              The editor object to attach the newPage capability to.
+               this.editor = editor;
+               this._initButton();
+       },
+
+       updateState: function(){
+               // summary:
+               //              Over-ride for button state control for disabled to work.
+               this.button.set("disabled", this.get("disabled"));
+       },
+
+       _newPage: function(){
+               // summary:
+               //              Function to set the content to blank.
+               // tags:
+               //              private
+               this.editor.beginEditing();
+               this.editor.set("value", this.content);
+               this.editor.endEditing();
+               this.editor.focus();
+       }
 });
+
+// Register this plugin.
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+       if(o.plugin){ return; }
+       var name = o.args.name.toLowerCase();
+       if(name === "newpage"){
+               o.plugin = new dijit._editor.plugins.NewPage({
+                       content: ("content" in o.args)?o.args.content:"<br>"
+               });
+       }
+});
+
 }
index b2e739aee53268742c9d526bc80d3a10576118ff..83cf0ddc743c5a48cc1f5d70e86c9762354aa3d6 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._editor.plugins.Print"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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,ro,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"),_2=this.editor;
-this.button=new dijit.form.Button({label:_1["print"],dir:_2.dir,lang:_2.lang,showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"Print",tabIndex:"-1",onClick:dojo.hitch(this,"_print")});
-},setEditor:function(_3){
-this.editor=_3;
-this._initButton();
-this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
-if(!this.editor.iframe.contentWindow["print"]){
-this.button.set("disabled",true);
-}
-}));
-},_print:function(){
-var _4=this.editor.iframe;
-if(_4.contentWindow["print"]){
-if(!dojo.isOpera&&!dojo.isChrome){
-dijit.focus(_4);
-_4.contentWindow.print();
-}else{
-var _5=this.editor.document;
-var _6=this.editor.get("value");
-_6="<html><head><meta http-equiv='Content-Type' "+"content='text/html; charset='UTF-8'></head><body>"+_6+"</body></html>";
-var _7=window.open("javascript: ''","","status=0,menubar=0,location=0,toolbar=0,"+"width=1,height=1,resizable=0,scrollbars=0");
-_7.document.open();
-_7.document.write(_6);
-_7.document.close();
-var _8=[];
-var _9=_5.getElementsByTagName("style");
-if(_9){
-var i;
-for(i=0;i<_9.length;i++){
-var _a=_9[i].innerHTML;
-var _b=_7.document.createElement("style");
-_b.appendChild(_7.document.createTextNode(_a));
-_7.document.getElementsByTagName("head")[0].appendChild(_b);
-}
-}
-_7.print();
-_7.close();
-}
-}
-}});
-dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
-if(o.plugin){
-return;
-}
-var _c=o.args.name.toLowerCase();
-if(_c==="print"){
-o.plugin=new dijit._editor.plugins.Print({command:"print"});
-}
+dojo.requireLocalization("dijit._editor", "commands", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare("dijit._editor.plugins.Print",dijit._editor._Plugin,{
+       // summary:
+       //              This plugin provides Print cabability to the editor.  When
+       //              clicked, the document in the editor frame will be printed.
+
+       _initButton: function(){
+               // summary:
+               //              Over-ride for creation of the Print button.
+               var strings = dojo.i18n.getLocalization("dijit._editor", "commands"),
+                       editor = this.editor;
+               this.button = new dijit.form.Button({
+                       label: strings["print"],
+                       dir: editor.dir,
+                       lang: editor.lang,
+                       showLabel: false,
+                       iconClass: this.iconClassPrefix + " " + this.iconClassPrefix + "Print",
+                       tabIndex: "-1",
+                       onClick: dojo.hitch(this, "_print")
+               });
+       },
+
+       setEditor: function(/*dijit.Editor*/ editor){
+               // summary:
+               //              Tell the plugin which Editor it is associated with.
+               // editor: Object
+               //              The editor object to attach the print capability to.
+               this.editor = editor;
+               this._initButton();
+
+               // Set up a check that we have a print function
+               // and disable button if we do not.
+               this.editor.onLoadDeferred.addCallback(
+                       dojo.hitch(this, function(){
+                               if(!this.editor.iframe.contentWindow["print"]){
+                                       this.button.set("disabled", true);
+                               }
+                       })
+               );
+       },
+
+       updateState: function(){
+               // summary:
+               //              Over-ride for button state control for disabled to work.
+               var disabled = this.get("disabled");
+               if(!this.editor.iframe.contentWindow["print"]){
+                       disabled = true;
+               }
+               this.button.set("disabled", disabled);
+       },
+
+       _print: function(){
+               // summary:
+               //              Function to trigger printing of the editor document
+               // tags:
+               //              private
+               var edFrame = this.editor.iframe;
+               if(edFrame.contentWindow["print"]){
+                       // IE requires the frame to be focused for
+                       // print to work, but since this is okay for all
+                       // no special casing.
+                       if(!dojo.isOpera && !dojo.isChrome){
+                               dijit.focus(edFrame);
+                               edFrame.contentWindow.print();
+                       }else{
+                               // Neither Opera nor Chrome 3 et you print single frames.
+                               // So, open a new 'window', print it, and close it.
+                               // Also, can't use size 0x0, have to use 1x1
+                               var edDoc = this.editor.document;
+                               var content = this.editor.get("value");
+                               content = "<html><head><meta http-equiv='Content-Type' " +
+                                       "content='text/html; charset='UTF-8'></head><body>" +
+                                       content + "</body></html>";
+                               var win = window.open("javascript: ''",
+                                       "",
+                                       "status=0,menubar=0,location=0,toolbar=0," +
+                                       "width=1,height=1,resizable=0,scrollbars=0");
+                               win.document.open();
+                               win.document.write(content);
+                               win.document.close();
+                               var styles = [];
+                               var styleNodes = edDoc.getElementsByTagName("style");
+                               if(styleNodes){
+                                       // Clone over any editor view styles, since we can't print the iframe
+                                       // directly.
+                                       var i;
+                                       for(i = 0; i < styleNodes.length; i++){
+                                               var style = styleNodes[i].innerHTML;
+                                               var sNode = win.document.createElement("style");
+                                               sNode.appendChild(win.document.createTextNode(style));
+                                               win.document.getElementsByTagName("head")[0].appendChild(sNode);
+                                       }
+                               }
+                               win.print();
+                               win.close();
+                       }
+               }
+       }
+});
+
+// Register this plugin.
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+       if(o.plugin){ return; }
+       var name = o.args.name.toLowerCase();
+       if(name === "print"){
+               o.plugin = new dijit._editor.plugins.Print({command: "print"});
+       }
 });
+
 }
index 74cda400f0db7924ec41b99a793f062a6fd2189e..eb27f69dd32db0d019e70bf2823cf2de2c323602 100644 (file)
@@ -1,33 +1,69 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._editor.plugins.TabIndent"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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.set("isTabIndent",_1);
-});
-this.updateState();
-},updateState:function(){
-this.button.set("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});
-}
+
+
+dojo.experimental("dijit._editor.plugins.TabIndent");
+
+
+dojo.declare("dijit._editor.plugins.TabIndent",
+       dijit._editor._Plugin,
+       {
+               // summary:
+               //              This plugin is used to allow the use of the tab and shift-tab keys
+               //              to indent/outdent list items.  This overrides the default behavior
+               //              of moving focus from/to the toolbar
+
+               // Override _Plugin.useDefaultCommand... processing is handled by this plugin, not by dijit.Editor.
+               useDefaultCommand: false,
+
+               // Override _Plugin.buttonClass to use a ToggleButton for this plugin rather than a vanilla Button
+               buttonClass: dijit.form.ToggleButton,
+
+               command: "tabIndent",
+
+               _initButton: function(){
+                       // Override _Plugin._initButton() to setup listener on button click
+                       this.inherited(arguments);
+
+                       var e = this.editor;
+                       this.connect(this.button, "onChange", function(val){
+                               e.set("isTabIndent", val);
+                       });
+
+                       // Set initial checked state of button based on Editor.isTabIndent
+                       this.updateState();
+               },
+
+               updateState: function(){
+                       // Overrides _Plugin.updateState().
+                       // Ctrl-m in the editor will switch tabIndent mode on/off, so we need to react to that.
+                       var disabled = this.get("disabled");
+                       this.button.set("disabled", disabled);
+                       if(disabled){
+                               return;
+                       }
+                       this.button.set('checked', this.editor.isTabIndent, false);
+               }
+       }
+);
+
+// Register this plugin.
+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});
+       }
 });
+
 }
index da7bbc9a6edb42827bfea6051fb7cde8bda8b173..2f24d04243c2802d9a2261b1561d25c510086bea 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.TextColor"]){
-dojo._hasResource["dijit._editor.plugins.TextColor"]=true;
+if(!dojo._hasResource["dijit._editor.plugins.TextColor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.TextColor"] = true;
 dojo.provide("dijit._editor.plugins.TextColor");
 dojo.require("dijit._editor._Plugin");
 dojo.require("dijit.ColorPalette");
-dojo.declare("dijit._editor.plugins.TextColor",dijit._editor._Plugin,{buttonClass:dijit.form.DropDownButton,useDefaultCommand:false,constructor:function(){
-this.dropDown=new dijit.ColorPalette();
-this.connect(this.dropDown,"onChange",function(_1){
-this.editor.execCommand(this.command,_1);
+
+
+dojo.declare("dijit._editor.plugins.TextColor", dijit._editor._Plugin, {
+       // summary:
+       //              This plugin provides dropdown color pickers for setting text color and background color
+       //
+       // description:
+       //              The commands provided by this plugin are:
+       //              * foreColor - sets the text color
+       //              * hiliteColor - sets the background color
+       
+       // Override _Plugin.buttonClass to use DropDownButton (with ColorPalette) to control this plugin
+       buttonClass: dijit.form.DropDownButton,
+       
+       // useDefaultCommand: Boolean
+       //              False as we do not use the default editor command/click behavior.
+       useDefaultCommand: false,
+
+       constructor: function(){
+               this.dropDown = new dijit.ColorPalette();
+               this.connect(this.dropDown, "onChange", function(color){
+                       this.editor.execCommand(this.command, color);
+                       
+               });
+       },
+
+       updateState: function(){
+               // summary:
+               //              Overrides _Plugin.updateState().  This updates the ColorPalette
+               //              to show the color of the currently selected text.
+               // tags:
+               //              protected
+               
+               var _e = this.editor;
+               var _c = this.command;
+               if(!_e || !_e.isLoaded || !_c.length){
+                       return;
+               }
+               
+               if(this.button){
+                       var disabled = this.get("disabled");
+                       this.button.set("disabled", disabled);
+                       if(disabled){ return; }
+                       
+                       var value;
+                       try{
+                               value = _e.queryCommandValue(_c)|| "";
+                       }catch(e){
+                               //Firefox may throw error above if the editor is just loaded, ignore it
+                               value = "";
+                       }
+               }
+               
+               if(value == ""){
+                       value = "#000000";
+               }
+               if(value == "transparent"){
+                       value = "#ffffff";
+               }
+
+               if(typeof value == "string"){
+                       //if RGB value, convert to hex value
+                       if(value.indexOf("rgb")> -1){
+                               value = dojo.colorFromRgb(value).toHex();
+                       }
+               }else{  //it's an integer(IE returns an MS access #)
+                       value =((value & 0x0000ff)<< 16)|(value & 0x00ff00)|((value & 0xff0000)>>> 16);
+                       value = value.toString(16);
+                       value = "#000000".slice(0, 7 - value.length)+ value;
+                       
+               }
+               
+               if(value !== this.dropDown.get('value')){
+                       this.dropDown.set('value', value, false);
+               }
+       }
 });
-},updateState:function(){
-var _2=this.editor;
-var _3=this.command;
-if(!_2||!_2.isLoaded||!_3.length){
-return;
-}
-if(this.button){
-var _4;
-try{
-_4=_2.queryCommandValue(_3)||"";
-}
-catch(e){
-_4="";
-}
-}
-if(_4==""){
-_4="#000000";
-}
-if(_4=="transparent"){
-_4="#ffffff";
-}
-if(typeof _4=="string"){
-if(_4.indexOf("rgb")>-1){
-_4=dojo.colorFromRgb(_4).toHex();
-}
-}else{
-_4=((_4&255)<<16)|(_4&65280)|((_4&16711680)>>>16);
-_4=_4.toString(16);
-_4="#000000".slice(0,7-_4.length)+_4;
-}
-if(_4!==this.dropDown.get("value")){
-this.dropDown.set("value",_4,false);
-}
-}});
-dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
-if(o.plugin){
-return;
-}
-switch(o.args.name){
-case "foreColor":
-case "hiliteColor":
-o.plugin=new dijit._editor.plugins.TextColor({command:o.args.name});
-}
+
+// Register this plugin.
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin", null, function(o){
+       if(o.plugin){
+               return;
+       }
+       switch(o.args.name){
+               case "foreColor":
+               case "hiliteColor":
+                       o.plugin = new dijit._editor.plugins.TextColor({
+                               command: o.args.name
+                       });
+       }
 });
+
 }
index f5ecb79092c52eb7a92799e0d73b6cb5223bb126..92e3d91c812e52df609ae247025796e09b7032b9 100644 (file)
@@ -1,42 +1,80 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._editor.plugins.ToggleDir"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.ToggleDir"] = true;
 dojo.provide("dijit._editor.plugins.ToggleDir");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.ToggleButton");
+
+
 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.set("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});
-}
+
+dojo.declare("dijit._editor.plugins.ToggleDir",
+       dijit._editor._Plugin,
+       {
+               // summary:
+               //              This plugin is used to toggle direction of the edited document,
+               //              independent of what direction the whole page is.
+
+               // Override _Plugin.useDefaultCommand: processing is done in this plugin
+               // rather than by sending commands to the Editor
+               useDefaultCommand: false,
+
+               command: "toggleDir",
+
+               // Override _Plugin.buttonClass to use a ToggleButton for this plugin rather than a vanilla Button
+               buttonClass: dijit.form.ToggleButton,
+
+               _initButton: function(){
+                       // Override _Plugin._initButton() to setup handler for button click events.
+                       this.inherited(arguments);
+                       this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){
+                               var editDoc = this.editor.editorObject.contentWindow.document.documentElement;
+                               //IE direction has to toggle on the body, not document itself.
+                               //If you toggle just the document, things get very strange in the
+                               //view.  But, the nice thing is this works for all supported browsers.
+                               editDoc = editDoc.getElementsByTagName("body")[0];
+                               var isLtr = dojo.getComputedStyle(editDoc).direction == "ltr";
+                               this.button.set("checked", !isLtr);
+                               this.connect(this.button, "onChange", "_setRtl");
+                       }));
+               },
+
+               updateState: function(){
+                       // summary:
+                       //              Over-ride for button state control for disabled to work.
+                       this.button.set("disabled", this.get("disabled"));
+               },
+
+               _setRtl: function(rtl){
+                       // summary:
+                       //              Handler for button click events, to switch the text direction of the editor
+                       var dir = "ltr";
+                       if(rtl){
+                               dir = "rtl";
+                       }
+                       var editDoc = this.editor.editorObject.contentWindow.document.documentElement;
+                       editDoc = editDoc.getElementsByTagName("body")[0];
+                       editDoc.dir/*html node*/ = dir;
+               }
+       }
+);
+
+// Register this plugin.
+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});
+       }
 });
+
 }
index 41ea2970fd777a20572c006a840bf09fdf995999..e655ad21d0e377959ec0e9fc6f4f1afd2212a18d 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._editor.plugins.ViewSource"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.ViewSource"] = true;
 dojo.provide("dijit._editor.plugins.ViewSource");
 dojo.require("dojo.window");
 dojo.require("dojo.i18n");
 dojo.require("dijit._editor._Plugin");
 dojo.require("dijit.form.Button");
-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,ro,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.set("checked",!this.button.get("checked"));
-},_initButton:function(){
-var _1=dojo.i18n.getLocalization("dijit._editor","commands"),_2=this.editor;
-this.button=new dijit.form.ToggleButton({label:_1["viewSource"],dir:_2.dir,lang:_2.lang,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.set("readOnly",false);
-},setEditor:function(_3){
-this.editor=_3;
-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(_4){
-var ed=this.editor;
-var _5=ed._plugins;
-var _6;
-this._sourceShown=_4;
-var _7=this;
-try{
-if(!this.sourceArea){
-this._createSourceView();
-}
-if(_4){
-ed._sourceQueryCommandEnabled=ed.queryCommandEnabled;
-ed.queryCommandEnabled=function(_8){
-var _9=_8.toLowerCase();
-if(_9==="viewsource"){
-return true;
-}else{
-return false;
-}
-};
-this.editor.onDisplayChanged();
-_6=ed.get("value");
-_6=this._filter(_6);
-ed.set("value",_6);
-this._pluginList=[];
-this._disabledPlugins=dojo.filter(_5,function(p){
-if(p&&p.button&&!p.button.get("disabled")&&!(p instanceof dijit._editor.plugins.ViewSource)){
-p._vs_updateState=p.updateState;
-p.updateState=function(){
-return false;
-};
-p.button.set("disabled",true);
-if(p.command){
-switch(p.command){
-case "bold":
-case "italic":
-case "underline":
-case "strikethrough":
-case "superscript":
-case "subscript":
-p.button.set("checked",false);
-break;
-default:
-break;
-}
-}
-return true;
-}
-});
-if(this._fsPlugin){
-this._fsPlugin._getAltViewNode=function(){
-return _7.sourceArea;
-};
-}
-this.sourceArea.value=_6;
-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 _a=function(){
-var vp=dojo.window.getBox();
-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,_a);
-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){
-_6=this.sourceArea.value;
-_6=this._filter(_6);
-ed.beginEditing();
-ed.set("value",_6);
-ed.endEditing();
-}
-dojo.forEach(this._disabledPlugins,function(p){
-p.button.set("disabled",false);
-if(p._vs_updateState){
-p.updateState=p._vs_updateState;
-}
+dojo.requireLocalization("dijit._editor", "commands", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare("dijit._editor.plugins.ViewSource",dijit._editor._Plugin,{
+       // summary:
+       //              This plugin provides a simple view source capability.  When view
+       //              source mode is enabled, it disables all other buttons/plugins on the RTE.
+       //              It also binds to the hotkey: CTRL-SHIFT-F11 for toggling ViewSource mode.
+
+       // stripScripts: [public] Boolean
+       //              Boolean flag used to indicate if script tags should be stripped from the document.
+       //              Defaults to true.
+       stripScripts: true,
+
+       // stripComments: [public] Boolean
+       //              Boolean flag used to indicate if comment tags should be stripped from the document.
+       //              Defaults to true.
+       stripComments: true,
+
+       // stripComments: [public] Boolean
+       //              Boolean flag used to indicate if iframe tags should be stripped from the document.
+       //              Defaults to true.
+       stripIFrames: true,
+
+       // readOnly: [const] Boolean
+       //              Boolean flag used to indicate if the source view should be readonly or not.
+       //              Cannot be changed after initialization of the plugin.
+       //              Defaults to false.
+       readOnly: false,
+
+       // _fsPlugin: [private] Object
+       //              Reference to a registered fullscreen plugin so that viewSource knows
+       //              how to scale.
+       _fsPlugin: null,
+
+       toggle: function(){
+               // summary:
+               //              Function to allow programmatic toggling of the view.
+
+               // For Webkit, we have to focus a very particular way.
+               // when swapping views, otherwise focus doesn't shift right
+               // but can't focus this way all the time, only for VS changes.
+               // If we did it all the time, buttons like bold, italic, etc
+               // break.
+               if(dojo.isWebKit){this._vsFocused = true;}
+               this.button.set("checked", !this.button.get("checked"));
+
+       },
+
+       _initButton: function(){
+               // summary:
+               //              Over-ride for creation of the resize button.
+               var strings = dojo.i18n.getLocalization("dijit._editor", "commands"),
+                       editor = this.editor;
+               this.button = new dijit.form.ToggleButton({
+                       label: strings["viewSource"],
+                       dir: editor.dir,
+                       lang: editor.lang,
+                       showLabel: false,
+                       iconClass: this.iconClassPrefix + " " + this.iconClassPrefix + "ViewSource",
+                       tabIndex: "-1",
+                       onChange: dojo.hitch(this, "_showSource")
+               });
+
+               // IE 7 has a horrible bug with zoom, so we have to create this node
+               // to cross-check later.  Sigh.
+               if(dojo.isIE == 7){
+                       this._ieFixNode = dojo.create("div", {
+                               style: {
+                                       opacity: "0",
+                                       zIndex: "-1000",
+                                       position: "absolute",
+                                       top: "-1000px"
+                               }
+                       }, dojo.body());
+               }
+               // Make sure readonly mode doesn't make the wrong cursor appear over the button.
+               this.button.set("readOnly", false);
+       },
+
+
+       setEditor: function(/*dijit.Editor*/ editor){
+               // summary:
+               //              Tell the plugin which Editor it is associated with.
+               // editor: Object
+               //              The editor object to attach the print capability to.
+               this.editor = editor;
+               this._initButton();
+
+               this.editor.addKeyHandler(dojo.keys.F12, true, true, dojo.hitch(this, function(e){
+                       // Move the focus before switching
+                       // It'll focus back.  Hiding a focused
+                       // node causes issues.
+                       this.button.focus();
+                       this.toggle();
+                       dojo.stopEvent(e);
+
+                       // Call the focus shift outside of the handler.
+                       setTimeout(dojo.hitch(this, function(){
+                               // We over-ride focus, so we just need to call.
+                               this.editor.focus();
+                       }), 100);
+               }));
+       },
+
+       _showSource: function(source){
+               // summary:
+               //              Function to toggle between the source and RTE views.
+               // source: boolean
+               //              Boolean value indicating if it should be in source mode or not.
+               // tags:
+               //              private
+               var ed = this.editor;
+               var edPlugins = ed._plugins;
+               var html;
+               this._sourceShown = source;
+               var self = this;
+               try{
+                       if(!this.sourceArea){
+                               this._createSourceView();
+                       }
+                       if(source){
+                               // Update the QueryCommandEnabled function to disable everything but
+                               // the source view mode.  Have to over-ride a function, then kick all
+                               // plugins to check their state.
+                               ed._sourceQueryCommandEnabled = ed.queryCommandEnabled;
+                               ed.queryCommandEnabled = function(cmd){
+                                       var lcmd = cmd.toLowerCase();
+                                       if(lcmd === "viewsource"){
+                                               return true;
+                                       }else{
+                                               return false;
+                                       }
+                               };
+                               this.editor.onDisplayChanged();
+                               html = ed.get("value");
+                               html = this._filter(html);
+                               ed.set("value", html);
+                               this._pluginList = [];
+                               dojo.forEach(edPlugins, function(p){
+                                       // Turn off any plugins not controlled by queryCommandenabled.
+                                       if(!(p instanceof dijit._editor.plugins.ViewSource)){
+                                               p.set("disabled", true)
+                                       }
+                               });
+
+                               // We actually do need to trap this plugin and adjust how we
+                               // display the textarea.
+                               if(this._fsPlugin){
+                                       this._fsPlugin._getAltViewNode = function(){
+                                               return self.sourceArea;
+                                       };
+                               }
+
+                               this.sourceArea.value = html;
+                               var is = dojo._getMarginSize(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 resizer = function(){
+                                       // function to handle resize events.
+                                       // Will check current VP and only resize if
+                                       // different.
+                                       var vp = dojo.window.getBox();
+
+                                       if("_prevW" in this && "_prevH" in this){
+                                               // No actual size change, ignore.
+                                               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;
+                                       }
+                                       // Timeout it to help avoid spamming resize on IE.
+                                       // Works for all browsers.
+                                       this._resizer = setTimeout(dojo.hitch(this, function(){
+                                               delete this._resizer;
+                                               this._resize();
+                                       }), 10);
+                               };
+                               this._resizeHandle = dojo.connect(window, "onresize", this, resizer);
+
+                               //Call this on a delay once to deal with IE glitchiness on initial size.
+                               setTimeout(dojo.hitch(this, this._resize), 100);
+
+                               //Trigger a check for command enablement/disablement.
+                               this.editor.onNormalizedDisplayChanged();
+
+                               this.editor.__oldGetValue = this.editor.getValue;
+                               this.editor.getValue = dojo.hitch(this, function() {
+                                       var txt = this.sourceArea.value;
+                                       txt = this._filter(txt);
+                                       return txt;
+                               });
+                       }else{
+                               // First check that we were in source view before doing anything.
+                               // corner case for being called with a value of false and we hadn't
+                               // actually been in source display mode.
+                               if(!ed._sourceQueryCommandEnabled){
+                                       return;
+                               }
+                               dojo.disconnect(this._resizeHandle);
+                               delete this._resizeHandle;
+
+                               if(this.editor.__oldGetValue){
+                                       this.editor.getValue = this.editor.__oldGetValue;
+                                       delete this.editor.__oldGetValue;
+                               }
+
+                               // Restore all the plugin buttons state.
+                               ed.queryCommandEnabled = ed._sourceQueryCommandEnabled;
+                               if(!this._readOnly){
+                                       html = this.sourceArea.value;
+                                       html = this._filter(html);
+                                       ed.beginEditing();
+                                       ed.set("value", html);
+                                       ed.endEditing();
+                               }
+
+                               dojo.forEach(edPlugins, function(p){
+                                       // Turn back on any plugins we turned off.
+                                       p.set("disabled", false);
+                               });
+
+                               dojo.style(this.sourceArea, "display", "none");
+                               dojo.style(ed.iframe, "display", "block");
+                               delete ed._sourceQueryCommandEnabled;
+                
+                               //Trigger a check for command enablement/disablement.
+                               this.editor.onDisplayChanged();
+                       }
+                       // Call a delayed resize to wait for some things to display in header/footer.
+                       setTimeout(dojo.hitch(this, function(){
+                               // Make resize calls.
+                               var parent = ed.domNode.parentNode;
+                               if(parent){
+                                       var container = dijit.getEnclosingWidget(parent);
+                                       if(container && container.resize){
+                                               container.resize();
+                                       }
+                               }
+                ed.resize();
+                       }), 300);
+               }catch(e){
+                       console.log(e);
+               }
+       },
+
+       updateState: function(){
+               // summary:
+               //              Over-ride for button state control for disabled to work.
+               this.button.set("disabled", this.get("disabled"));
+       },
+
+       _resize: function(){
+               // summary:
+               //              Internal function to resize the source view
+               // tags:
+               //              private
+               var ed = this.editor;
+               var tbH = ed.getHeaderHeight();
+               var fH = ed.getFooterHeight();
+               var eb = dojo.position(ed.domNode);
+
+               // Styles are now applied to the internal source container, so we have
+               // to subtract them off.
+               var containerPadding = dojo._getPadBorderExtents(ed.iframe.parentNode);
+               var containerMargin = dojo._getMarginExtents(ed.iframe.parentNode);
+
+               var extents = dojo._getPadBorderExtents(ed.domNode);
+               var mExtents = dojo._getMarginExtents(ed.domNode);
+               var edb = {
+                       w: eb.w - (extents.w + mExtents.w),
+                       h: eb.h - (tbH + extents.h + mExtents.h + fH)
+               };
+
+               // Fullscreen gets odd, so we need to check for the FS plugin and
+               // adapt.
+               if(this._fsPlugin && this._fsPlugin.isFullscreen){
+                       //Okay, probably in FS, adjust.
+                       var vp = dojo.window.getBox();
+                       edb.w = (vp.w - extents.w);
+                       edb.h = (vp.h - (tbH + extents.h + fH));
+               }
+
+               if(dojo.isIE){
+                       // IE is always off by 2px, so we have to adjust here
+                       // Note that IE ZOOM is broken here.  I can't get
+                       //it to scale right.
+                       edb.h -= 2;
+               }
+
+               // IE has a horrible zoom bug.  So, we have to try and account for
+               // it and fix up the scaling.
+               if(this._ieFixNode){
+                       var _ie7zoom = -this._ieFixNode.offsetTop / 1000;
+                       edb.w = Math.floor((edb.w + 0.9) / _ie7zoom);
+                       edb.h = Math.floor((edb.h + 0.9) / _ie7zoom);
+               }
+
+               dojo.marginBox(this.sourceArea, {
+                       w: edb.w - (containerPadding.w + containerMargin.w),
+                       h: edb.h - (containerPadding.h + containerMargin.h)
+               });
+
+               // Scale the parent container too in this case.
+               dojo.marginBox(ed.iframe.parentNode, {
+                       h: edb.h
+               });
+       },
+
+       _createSourceView: function(){
+               // summary:
+               //              Internal function for creating the source view area.
+               // tags:
+               //              private
+               var ed = this.editor;
+               var edPlugins = 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");
+
+               if(dojo.isIE && ed.iframe.parentNode.lastChild !== ed.iframe){
+                       // There's some weirdo div in IE used for focus control
+                       // But is messed up scaling the textarea if we don't config
+                       // it some so it doesn't have a varying height.
+                       dojo.style(ed.iframe.parentNode.lastChild,{
+                               width: "0px",
+                               height: "0px",
+                               padding: "0px",
+                               margin: "0px",
+                               borderWidth: "0px",
+                               borderStyle: "none"
+                       });
+               }
+
+               // We also need to take over editor focus a bit here, so that focus calls to
+               // focus the editor will focus to the right node when VS is active.
+               ed._viewsource_oldFocus = ed.focus;
+               var self = this;
+               ed.focus = function(){
+                       if(self._sourceShown){
+                               self.setSourceAreaCaret();
+                       }else{
+                               try{
+                                       if(this._vsFocused){
+                                               delete this._vsFocused;
+                                               // Must focus edit node in this case (webkit only) or
+                                               // focus doesn't shift right, but in normal
+                                               // cases we focus with the regular function.
+                                               dijit.focus(ed.editNode);
+                                       }else{
+                                               ed._viewsource_oldFocus();
+                                       }
+                               }catch(e){
+                                       console.log(e);
+                               }
+                       }
+               };
+
+               var i, p;
+               for(i = 0; i < edPlugins.length; i++){
+                       // We actually do need to trap this plugin and adjust how we
+                       // display the textarea.
+                       p = edPlugins[i];
+                       if(p && (p.declaredClass === "dijit._editor.plugins.FullScreen" ||
+                                       p.declaredClass === (dijit._scopeName +
+                                       "._editor.plugins.FullScreen"))){
+                               this._fsPlugin = p;
+                               break;
+                       }
+               }
+               if(this._fsPlugin){
+                       // Found, we need to over-ride the alt-view node function
+                       // on FullScreen with our own, chain up to parent call when appropriate.
+                       this._fsPlugin._viewsource_getAltViewNode = this._fsPlugin._getAltViewNode;
+                       this._fsPlugin._getAltViewNode = function(){
+                               return self._sourceShown?self.sourceArea:this._viewsource_getAltViewNode();
+                       };
+               }
+
+               // Listen to the source area for key events as well, as we need to be able to hotkey toggle
+               // it from there too.
+               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.set("checked", false);
+                               setTimeout(dojo.hitch(this, function(){ed.focus();}), 100);
+                               dojo.stopEvent(e);
+                       }
+               }));
+       },
+
+       _stripScripts: function(html){
+               // summary:
+               //              Strips out script tags from the HTML used in editor.
+               // html: String
+               //              The HTML to filter
+               // tags:
+               //              private
+               if(html){
+                       // Look for closed and unclosed (malformed) script attacks.
+                       html = html.replace(/<\s*script[^>]*>((.|\s)*?)<\\?\/\s*script\s*>/ig, "");
+                       html = html.replace(/<\s*script\b([^<>]|\s)*>?/ig, "");
+                       html = html.replace(/<[^>]*=(\s|)*[("|')]javascript:[^$1][(\s|.)]*[$1][^>]*>/ig, "");
+               }
+               return html;
+       },
+
+       _stripComments: function(html){
+               // summary:
+               //              Strips out comments from the HTML used in editor.
+               // html: String
+               //              The HTML to filter
+               // tags:
+               //              private
+               if(html){
+                       html = html.replace(/<!--(.|\s){1,}?-->/g, "");
+               }
+               return html;
+       },
+
+       _stripIFrames: function(html){
+               // summary:
+               //              Strips out iframe tags from the content, to avoid iframe script
+               //              style injection attacks.
+               // html: String
+               //              The HTML to filter
+               // tags:
+               //              private
+               if(html){
+                       html = html.replace(/<\s*iframe[^>]*>((.|\s)*?)<\\?\/\s*iframe\s*>/ig, "");
+               }
+               return html;
+       },
+
+       _filter: function(html){
+               // summary:
+               //              Internal function to perform some filtering on the HTML.
+               // html: String
+               //              The HTML to filter
+               // tags:
+               //              private
+               if(html){
+                       if(this.stripScripts){
+                               html = this._stripScripts(html);
+                       }
+                       if(this.stripComments){
+                               html = this._stripComments(html);
+                       }
+                       if(this.stripIFrames){
+                               html = this._stripIFrames(html);
+                       }
+               }
+               return html;
+       },
+
+       setSourceAreaCaret: function(){
+               // summary:
+               //              Internal function to set the caret in the sourceArea
+               //              to 0x0
+               var win = dojo.global;
+               var elem = this.sourceArea;
+               dijit.focus(elem);
+               if(this._sourceShown && !this.readOnly){
+                       if(dojo.isIE){
+                               if(this.sourceArea.createTextRange){
+                                       var range = elem.createTextRange();
+                                       range.collapse(true);
+                                       range.moveStart("character", -99999); // move to 0
+                                       range.moveStart("character", 0); // delta from 0 is the correct position
+                                       range.moveEnd("character", 0);
+                                       range.select();
+                               }
+                       }else if(win.getSelection){
+                               if(elem.setSelectionRange){
+                                       elem.setSelectionRange(0,0);
+                               }
+                       }
+               }
+       },
+
+       destroy: function(){
+               // summary:
+               //              Over-ride to remove the node used to correct for IE's
+               //              zoom bug.
+               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);
+       }
 });
-this._disabledPlugins=null;
-dojo.style(this.sourceArea,"display","none");
-dojo.style(ed.iframe,"display","block");
-delete ed._sourceQueryCommandEnabled;
-this.editor.onDisplayChanged();
-}
-setTimeout(dojo.hitch(this,function(){
-var _b=ed.domNode.parentNode;
-if(_b){
-var _c=dijit.getEnclosingWidget(_b);
-if(_c&&_c.resize){
-_c.resize();
-}
-}
-ed.resize();
-}),300);
-}
-catch(e){
-}
-},_resize:function(){
-var ed=this.editor;
-var _d=ed.getHeaderHeight();
-var fH=ed.getFooterHeight();
-var eb=dojo.position(ed.domNode);
-var _e=dojo._getPadBorderExtents(ed.iframe.parentNode);
-var _f=dojo._getMarginExtents(ed.iframe.parentNode);
-var _10=dojo._getPadBorderExtents(ed.domNode);
-var _11=dojo._getMarginExtents(ed.domNode);
-var edb={w:eb.w-(_10.w+_11.w),h:eb.h-(_d+_10.h+_11.h+fH)};
-if(this._fsPlugin&&this._fsPlugin.isFullscreen){
-var vp=dojo.window.getBox();
-edb.w=(vp.w-_10.w);
-edb.h=(vp.h-(_d+_10.h+fH));
-}
-if(dojo.isIE){
-edb.h-=2;
-}
-if(this._ieFixNode){
-var _12=-this._ieFixNode.offsetTop/1000;
-edb.w=Math.floor((edb.w+0.9)/_12);
-edb.h=Math.floor((edb.h+0.9)/_12);
-}
-dojo.marginBox(this.sourceArea,{w:edb.w-(_e.w+_f.w),h:edb.h-(_e.h+_f.h)});
-dojo.marginBox(ed.iframe.parentNode,{h:edb.h});
-},_createSourceView:function(){
-var ed=this.editor;
-var _13=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");
-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 _14=this;
-ed.focus=function(){
-if(_14._sourceShown){
-_14.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<_13.length;i++){
-p=_13[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 _14._sourceShown?_14.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.set("checked",false);
-setTimeout(dojo.hitch(this,function(){
-ed.focus();
-}),100);
-dojo.stopEvent(e);
-}
-}));
-},_stripScripts:function(_15){
-if(_15){
-_15=_15.replace(/<\s*script[^>]*>((.|\s)*?)<\\?\/\s*script\s*>/ig,"");
-_15=_15.replace(/<\s*script\b([^<>]|\s)*>?/ig,"");
-_15=_15.replace(/<[^>]*=(\s|)*[("|')]javascript:[^$1][(\s|.)]*[$1][^>]*>/ig,"");
-}
-return _15;
-},_stripComments:function(_16){
-if(_16){
-_16=_16.replace(/<!--(.|\s){1,}?-->/g,"");
-}
-return _16;
-},_stripIFrames:function(_17){
-if(_17){
-_17=_17.replace(/<\s*iframe[^>]*>((.|\s)*?)<\\?\/\s*iframe\s*>/ig,"");
-}
-return _17;
-},_filter:function(_18){
-if(_18){
-if(this.stripScripts){
-_18=this._stripScripts(_18);
-}
-if(this.stripComments){
-_18=this._stripComments(_18);
-}
-if(this.stripIFrames){
-_18=this._stripIFrames(_18);
-}
-}
-return _18;
-},setSourceAreaCaret:function(){
-var win=dojo.global;
-var _19=this.sourceArea;
-dijit.focus(_19);
-if(this._sourceShown&&!this.readOnly){
-if(dojo.isIE){
-if(this.sourceArea.createTextRange){
-var _1a=_19.createTextRange();
-_1a.collapse(true);
-_1a.moveStart("character",-99999);
-_1a.moveStart("character",0);
-_1a.moveEnd("character",0);
-_1a.select();
-}
-}else{
-if(win.getSelection){
-if(_19.setSelectionRange){
-_19.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 _1b=o.args.name.toLowerCase();
-if(_1b==="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});
-}
+
+// Register this plugin.
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+       if(o.plugin){ return; }
+       var name = o.args.name.toLowerCase();
+       if(name ===  "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
+               });
+       }
 });
+
 }
index 2b1bd81e3dbb743830f97701fe3533c5374c8ba5..2e50745832961d7754565fad63c3a8fe7dffa4a2 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.range"]){
-dojo._hasResource["dijit._editor.range"]=true;
+if(!dojo._hasResource["dijit._editor.range"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.range"] = true;
 dojo.provide("dijit._editor.range");
+
+
 dijit.range={};
-dijit.range.getIndex=function(_1,_2){
-var _3=[],_4=[];
-var _5=_2;
-var _6=_1;
-var _7,n;
-while(_1!=_5){
-var i=0;
-_7=_1.parentNode;
-while((n=_7.childNodes[i++])){
-if(n===_1){
---i;
-break;
-}
-}
-_3.unshift(i);
-_4.unshift(i-_7.childNodes.length);
-_1=_7;
-}
-if(_3.length>0&&_6.nodeType==3){
-n=_6.previousSibling;
-while(n&&n.nodeType==3){
-_3[_3.length-1]--;
-n=n.previousSibling;
-}
-n=_6.nextSibling;
-while(n&&n.nodeType==3){
-_4[_4.length-1]++;
-n=n.nextSibling;
-}
-}
-return {o:_3,r:_4};
-};
-dijit.range.getNode=function(_8,_9){
-if(!dojo.isArray(_8)||_8.length==0){
-return _9;
-}
-var _a=_9;
-dojo.every(_8,function(i){
-if(i>=0&&i<_a.childNodes.length){
-_a=_a.childNodes[i];
-}else{
-_a=null;
-return false;
-}
-return true;
-});
-return _a;
-};
-dijit.range.getCommonAncestor=function(n1,n2,_b){
-_b=_b||n1.ownerDocument.body;
-var _c=function(n){
-var as=[];
-while(n){
-as.unshift(n);
-if(n!==_b){
-n=n.parentNode;
-}else{
-break;
-}
-}
-return as;
-};
-var _d=_c(n1);
-var _e=_c(n2);
-var m=Math.min(_d.length,_e.length);
-var _f=_d[0];
-for(var i=1;i<m;i++){
-if(_d[i]===_e[i]){
-_f=_d[i];
-}else{
-break;
-}
-}
-return _f;
-};
-dijit.range.getAncestor=function(_10,_11,_12){
-_12=_12||_10.ownerDocument.body;
-while(_10&&_10!==_12){
-var _13=_10.nodeName.toUpperCase();
-if(_11.test(_13)){
-return _10;
-}
-_10=_10.parentNode;
-}
-return null;
-};
-dijit.range.BlockTagNames=/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;
-dijit.range.getBlockAncestor=function(_14,_15,_16){
-_16=_16||_14.ownerDocument.body;
-_15=_15||dijit.range.BlockTagNames;
-var _17=null,_18;
-while(_14&&_14!==_16){
-var _19=_14.nodeName.toUpperCase();
-if(!_17&&_15.test(_19)){
-_17=_14;
-}
-if(!_18&&(/^(?:BODY|TD|TH|CAPTION)$/).test(_19)){
-_18=_14;
-}
-_14=_14.parentNode;
-}
-return {blockNode:_17,blockContainer:_18||_14.ownerDocument.body};
-};
-dijit.range.atBeginningOfContainer=function(_1a,_1b,_1c){
-var _1d=false;
-var _1e=(_1c==0);
-if(!_1e&&_1b.nodeType==3){
-if(/^[\s\xA0]+$/.test(_1b.nodeValue.substr(0,_1c))){
-_1e=true;
-}
-}
-if(_1e){
-var _1f=_1b;
-_1d=true;
-while(_1f&&_1f!==_1a){
-if(_1f.previousSibling){
-_1d=false;
-break;
-}
-_1f=_1f.parentNode;
-}
-}
-return _1d;
-};
-dijit.range.atEndOfContainer=function(_20,_21,_22){
-var _23=false;
-var _24=(_22==(_21.length||_21.childNodes.length));
-if(!_24&&_21.nodeType==3){
-if(/^[\s\xA0]+$/.test(_21.nodeValue.substr(_22))){
-_24=true;
+
+dijit.range.getIndex=function(/*DomNode*/node, /*DomNode*/parent){
+//     dojo.profile.start("dijit.range.getIndex");
+       var ret=[], retR=[];
+       var stop = parent;
+       var onode = node;
+
+       var pnode, n;
+       while(node != stop){
+               var i = 0;
+               pnode = node.parentNode;
+               while((n=pnode.childNodes[i++])){
+                       if(n === node){
+                               --i;
+                               break;
+                       }
+               }
+               //if(i>=pnode.childNodes.length){
+                       //dojo.debug("Error finding index of a node in dijit.range.getIndex");
+               //}
+               ret.unshift(i);
+               retR.unshift(i-pnode.childNodes.length);
+               node = pnode;
+       }
+
+       //normalized() can not be called so often to prevent
+       //invalidating selection/range, so we have to detect
+       //here that any text nodes in a row
+       if(ret.length > 0 && onode.nodeType == 3){
+               n = onode.previousSibling;
+               while(n && n.nodeType == 3){
+                       ret[ret.length-1]--;
+                       n = n.previousSibling;
+               }
+               n = onode.nextSibling;
+               while(n && n.nodeType == 3){
+                       retR[retR.length-1]++;
+                       n = n.nextSibling;
+               }
+       }
+//     dojo.profile.end("dijit.range.getIndex");
+       return {o: ret, r:retR};
 }
+
+dijit.range.getNode = function(/*Array*/index, /*DomNode*/parent){
+       if(!dojo.isArray(index) || index.length == 0){
+               return parent;
+       }
+       var node = parent;
+//     if(!node)debugger
+       dojo.every(index, function(i){
+               if(i >= 0 && i < node.childNodes.length){
+                       node = node.childNodes[i];
+               }else{
+                       node = null;
+                       //console.debug('Error: can not find node with index',index,'under parent node',parent );
+                       return false; //terminate dojo.every
+               }
+               return true; //carry on the every loop
+       });
+
+       return node;
 }
-if(_24){
-var _25=_21;
-_23=true;
-while(_25&&_25!==_20){
-if(_25.nextSibling){
-_23=false;
-break;
+
+dijit.range.getCommonAncestor = function(n1,n2,root){
+       root = root||n1.ownerDocument.body;
+       var getAncestors = function(n){
+               var as=[];
+               while(n){
+                       as.unshift(n);
+                       if(n !== root){
+                               n = n.parentNode;
+                       }else{
+                               break;
+                       }
+               }
+               return as;
+       };
+       var n1as = getAncestors(n1);
+       var n2as = getAncestors(n2);
+
+       var m = Math.min(n1as.length,n2as.length);
+       var com = n1as[0]; //at least, one element should be in the array: the root (BODY by default)
+       for(var i=1;i<m;i++){
+               if(n1as[i] === n2as[i]){
+                       com = n1as[i]
+               }else{
+                       break;
+               }
+       }
+       return com;
 }
-_25=_25.parentNode;
+
+dijit.range.getAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
+       root = root || node.ownerDocument.body;
+       while(node && node !== root){
+               var name = node.nodeName.toUpperCase() ;
+               if(regex.test(name)){
+                       return node;
+               }
+
+               node = node.parentNode;
+       }
+       return null;
 }
+
+dijit.range.BlockTagNames = /^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;
+dijit.range.getBlockAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
+       root = root || node.ownerDocument.body;
+       regex = regex || dijit.range.BlockTagNames;
+       var block=null, blockContainer;
+       while(node && node !== root){
+               var name = node.nodeName.toUpperCase() ;
+               if(!block && regex.test(name)){
+                       block = node;
+               }
+               if(!blockContainer && (/^(?:BODY|TD|TH|CAPTION)$/).test(name)){
+                       blockContainer = node;
+               }
+
+               node = node.parentNode;
+       }
+       return {blockNode:block, blockContainer:blockContainer || node.ownerDocument.body};
 }
-return _23;
-};
-dijit.range.adjacentNoneTextNode=function(_26,_27){
-var _28=_26;
-var len=(0-_26.length)||0;
-var _29=_27?"nextSibling":"previousSibling";
-while(_28){
-if(_28.nodeType!=3){
-break;
+
+dijit.range.atBeginningOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
+       var atBeginning = false;
+       var offsetAtBeginning = (offset == 0);
+       if(!offsetAtBeginning && node.nodeType == 3){ //if this is a text node, check whether the left part is all space
+               if(/^[\s\xA0]+$/.test(node.nodeValue.substr(0,offset))){
+                       offsetAtBeginning = true;
+               }
+       }
+       if(offsetAtBeginning){
+               var cnode = node;
+               atBeginning = true;
+               while(cnode && cnode !== container){
+                       if(cnode.previousSibling){
+                               atBeginning = false;
+                               break;
+                       }
+                       cnode = cnode.parentNode;
+               }
+       }
+       return atBeginning;
 }
-len+=_28.length;
-_28=_28[_29];
+
+dijit.range.atEndOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
+       var atEnd = false;
+       var offsetAtEnd = (offset == (node.length || node.childNodes.length));
+       if(!offsetAtEnd && node.nodeType == 3){ //if this is a text node, check whether the right part is all space
+               if(/^[\s\xA0]+$/.test(node.nodeValue.substr(offset))){
+                       offsetAtEnd = true;
+               }
+       }
+       if(offsetAtEnd){
+               var cnode = node;
+               atEnd = true;
+               while(cnode && cnode !== container){
+                       if(cnode.nextSibling){
+                               atEnd = false;
+                               break;
+                       }
+                       cnode = cnode.parentNode;
+               }
+       }
+       return atEnd;
 }
-return [_28,len];
-};
-dijit.range._w3c=Boolean(window["getSelection"]);
-dijit.range.create=function(win){
-if(dijit.range._w3c){
-return (win||dojo.global).document.createRange();
-}else{
-return new dijit.range.W3CRange;
+
+dijit.range.adjacentNoneTextNode=function(startnode, next){
+       var node = startnode;
+       var len = (0-startnode.length) || 0;
+       var prop = next?'nextSibling':'previousSibling';
+       while(node){
+               if(node.nodeType!=3){
+                       break;
+               }
+               len += node.length
+               node = node[prop];
+       }
+       return [node,len];
 }
-};
-dijit.range.getSelection=function(win,_2a){
-if(dijit.range._w3c){
-return win.getSelection();
-}else{
-var s=new dijit.range.ie.selection(win);
-if(!_2a){
-s._getCurrentSelection();
+
+dijit.range._w3c = Boolean(window['getSelection']);
+dijit.range.create = function(/*Window?*/win){
+       if(dijit.range._w3c){
+               return (win || dojo.global).document.createRange();
+       }else{//IE
+               return new dijit.range.W3CRange;
+       }
 }
-return s;
+
+dijit.range.getSelection = function(/*Window*/win, /*Boolean?*/ignoreUpdate){
+       if(dijit.range._w3c){
+               return win.getSelection();
+       }else{//IE
+               var s = new dijit.range.ie.selection(win);
+               if(!ignoreUpdate){
+                       s._getCurrentSelection();
+               }
+               return s;
+       }
 }
-};
+
 if(!dijit.range._w3c){
-dijit.range.ie={cachedSelection:{},selection:function(win){
-this._ranges=[];
-this.addRange=function(r,_2b){
-this._ranges.push(r);
-if(!_2b){
-r._select();
-}
-this.rangeCount=this._ranges.length;
-};
-this.removeAllRanges=function(){
-this._ranges=[];
-this.rangeCount=0;
-};
-var _2c=function(){
-var r=win.document.selection.createRange();
-var _2d=win.document.selection.type.toUpperCase();
-if(_2d=="CONTROL"){
-return new dijit.range.W3CRange(dijit.range.ie.decomposeControlRange(r));
-}else{
-return new dijit.range.W3CRange(dijit.range.ie.decomposeTextRange(r));
-}
-};
-this.getRangeAt=function(i){
-return this._ranges[i];
-};
-this._getCurrentSelection=function(){
-this.removeAllRanges();
-var r=_2c();
-if(r){
-this.addRange(r,true);
-}
-};
-},decomposeControlRange:function(_2e){
-var _2f=_2e.item(0),_30=_2e.item(_2e.length-1);
-var _31=_2f.parentNode,_32=_30.parentNode;
-var _33=dijit.range.getIndex(_2f,_31).o;
-var _34=dijit.range.getIndex(_30,_32).o+1;
-return [_31,_33,_32,_34];
-},getEndPoint:function(_35,end){
-var _36=_35.duplicate();
-_36.collapse(!end);
-var _37="EndTo"+(end?"End":"Start");
-var _38=_36.parentElement();
-var _39,_3a,_3b;
-if(_38.childNodes.length>0){
-dojo.every(_38.childNodes,function(_3c,i){
-var _3d;
-if(_3c.nodeType!=3){
-_36.moveToElementText(_3c);
-if(_36.compareEndPoints(_37,_35)>0){
-if(_3b&&_3b.nodeType==3){
-_39=_3b;
-_3d=true;
-}else{
-_39=_38;
-_3a=i;
-return false;
-}
-}else{
-if(i==_38.childNodes.length-1){
-_39=_38;
-_3a=_38.childNodes.length;
-return false;
-}
-}
-}else{
-if(i==_38.childNodes.length-1){
-_39=_3c;
-_3d=true;
-}
-}
-if(_3d&&_39){
-var _3e=dijit.range.adjacentNoneTextNode(_39)[0];
-if(_3e){
-_39=_3e.nextSibling;
-}else{
-_39=_38.firstChild;
-}
-var _3f=dijit.range.adjacentNoneTextNode(_39);
-_3e=_3f[0];
-var _40=_3f[1];
-if(_3e){
-_36.moveToElementText(_3e);
-_36.collapse(false);
-}else{
-_36.moveToElementText(_38);
-}
-_36.setEndPoint(_37,_35);
-_3a=_36.text.length-_40;
-return false;
+       dijit.range.ie={
+               cachedSelection: {},
+               selection: function(win){
+                       this._ranges = [];
+                       this.addRange = function(r, /*boolean*/internal){
+                               this._ranges.push(r);
+                               if(!internal){
+                                       r._select();
+                               }
+                               this.rangeCount = this._ranges.length;
+                       };
+                       this.removeAllRanges = function(){
+                               //don't detach, the range may be used later
+//                             for(var i=0;i<this._ranges.length;i++){
+//                                     this._ranges[i].detach();
+//                             }
+                               this._ranges = [];
+                               this.rangeCount = 0;
+                       };
+                       var _initCurrentRange = function(){
+                               var r = win.document.selection.createRange();
+                               var type=win.document.selection.type.toUpperCase();
+                               if(type == "CONTROL"){
+                                       //TODO: multiple range selection(?)
+                                       return new dijit.range.W3CRange(dijit.range.ie.decomposeControlRange(r));
+                               }else{
+                                       return new dijit.range.W3CRange(dijit.range.ie.decomposeTextRange(r));
+                               }
+                       };
+                       this.getRangeAt = function(i){
+                               return this._ranges[i];
+                       };
+                       this._getCurrentSelection = function(){
+                               this.removeAllRanges();
+                               var r=_initCurrentRange();
+                               if(r){
+                                       this.addRange(r, true);
+                               }
+                       };
+               },
+               decomposeControlRange: function(range){
+                       var firstnode = range.item(0), lastnode = range.item(range.length-1);
+                       var startContainer = firstnode.parentNode, endContainer = lastnode.parentNode;
+                       var startOffset = dijit.range.getIndex(firstnode, startContainer).o;
+                       var endOffset = dijit.range.getIndex(lastnode, endContainer).o+1;
+                       return [startContainer, startOffset,endContainer, endOffset];
+               },
+               getEndPoint: function(range, end){
+                       var atmrange = range.duplicate();
+                       atmrange.collapse(!end);
+                       var cmpstr = 'EndTo' + (end?'End':'Start');
+                       var parentNode = atmrange.parentElement();
+
+                       var startnode, startOffset, lastNode;
+                       if(parentNode.childNodes.length>0){
+                               dojo.every(parentNode.childNodes, function(node,i){
+                                       var calOffset;
+                                       if(node.nodeType != 3){
+                                               atmrange.moveToElementText(node);
+
+                                               if(atmrange.compareEndPoints(cmpstr,range) > 0){
+                                                       //startnode = node.previousSibling;
+                                                       if(lastNode && lastNode.nodeType == 3){
+                                                               //where shall we put the start? in the text node or after?
+                                                               startnode = lastNode;
+                                                               calOffset = true;
+                                                       }else{
+                                                               startnode = parentNode;
+                                                               startOffset = i;
+                                                               return false;
+                                                       }
+                                               }else{
+                                                       if(i == parentNode.childNodes.length-1){
+                                                               startnode = parentNode;
+                                                               startOffset = parentNode.childNodes.length;
+                                                               return false;
+                                                       }
+                                               }
+                                       }else{
+                                               if(i == parentNode.childNodes.length-1){//at the end of this node
+                                                       startnode = node;
+                                                       calOffset = true;
+                                               }
+                                       }
+               //                      try{
+                                               if(calOffset && startnode){
+                                                       var prevnode = dijit.range.adjacentNoneTextNode(startnode)[0];
+                                                       if(prevnode){
+                                                               startnode = prevnode.nextSibling;
+                                                       }else{
+                                                               startnode = parentNode.firstChild; //firstChild must be a text node
+                                                       }
+                                                       var prevnodeobj = dijit.range.adjacentNoneTextNode(startnode);
+                                                       prevnode = prevnodeobj[0];
+                                                       var lenoffset = prevnodeobj[1];
+                                                       if(prevnode){
+                                                               atmrange.moveToElementText(prevnode);
+                                                               atmrange.collapse(false);
+                                                       }else{
+                                                               atmrange.moveToElementText(parentNode);
+                                                       }
+                                                       atmrange.setEndPoint(cmpstr, range);
+                                                       startOffset = atmrange.text.length-lenoffset;
+
+                                                       return false;
+                                               }
+               //                      }catch(e){ debugger }
+                                       lastNode = node;
+                                       return true;
+                               });
+                       }else{
+                               startnode = parentNode;
+                               startOffset = 0;
+                       }
+
+                       //if at the end of startnode and we are dealing with start container, then
+                       //move the startnode to nextSibling if it is a text node
+                       //TODO: do this for end container?
+                       if(!end && startnode.nodeType == 1 && startOffset == startnode.childNodes.length){
+                               var nextnode=startnode.nextSibling;
+                               if(nextnode && nextnode.nodeType == 3){
+                                       startnode = nextnode;
+                                       startOffset = 0;
+                               }
+                       }
+                       return [startnode, startOffset];
+               },
+               setEndPoint: function(range, container, offset){
+                       //text node
+                       var atmrange = range.duplicate(), node, len;
+                       if(container.nodeType!=3){ //normal node
+                               if(offset > 0){
+                                       node = container.childNodes[offset-1];
+                                       if(node){
+                                               if(node.nodeType == 3){
+                                                       container = node;
+                                                       offset = node.length;
+                                                       //pass through
+                                               }else{
+                                                       if(node.nextSibling && node.nextSibling.nodeType == 3){
+                                                               container=node.nextSibling;
+                                                               offset=0;
+                                                               //pass through
+                                                       }else{
+                                                               atmrange.moveToElementText(node.nextSibling?node:container);
+                                                               var parent = node.parentNode;
+                                                               var tempNode = parent.insertBefore(node.ownerDocument.createTextNode(' '), node.nextSibling);
+                                                               atmrange.collapse(false);
+                                                               parent.removeChild(tempNode);
+                                                       }
+                                               }
+                                       }
+                               }else{
+                                       atmrange.moveToElementText(container);
+                                       atmrange.collapse(true);
+                               }
+                       }
+                       if(container.nodeType == 3){
+                               var prevnodeobj = dijit.range.adjacentNoneTextNode(container);
+                               var prevnode = prevnodeobj[0];
+                               len = prevnodeobj[1];
+                               if(prevnode){
+                                       atmrange.moveToElementText(prevnode);
+                                       atmrange.collapse(false);
+                                       //if contentEditable is not inherit, the above collapse won't make the end point
+                                       //in the correctly position: it always has a -1 offset, so compensate it
+                                       if(prevnode.contentEditable!='inherit'){
+                                               len++;
+                                       }
+                               }else{
+                                       atmrange.moveToElementText(container.parentNode);
+                                       atmrange.collapse(true);
+                               }
+
+                               offset += len;
+                               if(offset>0){
+                                       if(atmrange.move('character',offset) != offset){
+                                               console.error('Error when moving!');
+                                       }
+                               }
+                       }
+
+                       return atmrange;
+               },
+               decomposeTextRange: function(range){
+                       var tmpary = dijit.range.ie.getEndPoint(range);
+                       var startContainer = tmpary[0], startOffset = tmpary[1];
+                       var endContainer = tmpary[0], endOffset = tmpary[1];
+
+                       if(range.htmlText.length){
+                               if(range.htmlText == range.text){ //in the same text node
+                                       endOffset = startOffset+range.text.length;
+                               }else{
+                                       tmpary = dijit.range.ie.getEndPoint(range,true);
+                                       endContainer = tmpary[0], endOffset = tmpary[1];
+//                                     if(startContainer.tagName == "BODY"){
+//                                             startContainer = startContainer.firstChild;
+//                                     }
+                               }
+                       }
+                       return [startContainer, startOffset, endContainer, endOffset];
+               },
+               setRange: function(range, startContainer,
+                       startOffset, endContainer, endOffset, collapsed){
+                       var start=dijit.range.ie.setEndPoint(range, startContainer, startOffset);
+
+                       range.setEndPoint('StartToStart',start);
+                       if(!collapsed){
+                               var end=dijit.range.ie.setEndPoint(range, endContainer, endOffset);
+                       }
+                       range.setEndPoint('EndToEnd',end || start);
+
+                       return range;
+               }
+       }
+
+dojo.declare("dijit.range.W3CRange",null, {
+       constructor: function(){
+               if(arguments.length>0){
+                       this.setStart(arguments[0][0],arguments[0][1]);
+                       this.setEnd(arguments[0][2],arguments[0][3]);
+               }else{
+                       this.commonAncestorContainer = null;
+                       this.startContainer = null;
+                       this.startOffset = 0;
+                       this.endContainer = null;
+                       this.endOffset = 0;
+                       this.collapsed = true;
+               }
+       },
+       _updateInternal: function(){
+               if(this.startContainer !== this.endContainer){
+                       this.commonAncestorContainer = dijit.range.getCommonAncestor(this.startContainer, this.endContainer);
+               }else{
+                       this.commonAncestorContainer = this.startContainer;
+               }
+               this.collapsed = (this.startContainer === this.endContainer) && (this.startOffset == this.endOffset);
+       },
+       setStart: function(node, offset){
+               offset=parseInt(offset);
+               if(this.startContainer === node && this.startOffset == offset){
+                       return;
+               }
+               delete this._cachedBookmark;
+
+               this.startContainer = node;
+               this.startOffset = offset;
+               if(!this.endContainer){
+                       this.setEnd(node, offset);
+               }else{
+                       this._updateInternal();
+               }
+       },
+       setEnd: function(node, offset){
+               offset=parseInt(offset);
+               if(this.endContainer === node && this.endOffset == offset){
+                       return;
+               }
+               delete this._cachedBookmark;
+
+               this.endContainer = node;
+               this.endOffset = offset;
+               if(!this.startContainer){
+                       this.setStart(node, offset);
+               }else{
+                       this._updateInternal();
+               }
+       },
+       setStartAfter: function(node, offset){
+               this._setPoint('setStart', node, offset, 1);
+       },
+       setStartBefore: function(node, offset){
+               this._setPoint('setStart', node, offset, 0);
+       },
+       setEndAfter: function(node, offset){
+               this._setPoint('setEnd', node, offset, 1);
+       },
+       setEndBefore: function(node, offset){
+               this._setPoint('setEnd', node, offset, 0);
+       },
+       _setPoint: function(what, node, offset, ext){
+               var index = dijit.range.getIndex(node, node.parentNode).o;
+               this[what](node.parentNode, index.pop()+ext);
+       },
+       _getIERange: function(){
+               var r = (this._body || this.endContainer.ownerDocument.body).createTextRange();
+               dijit.range.ie.setRange(r, this.startContainer, this.startOffset, this.endContainer, this.endOffset, this.collapsed);
+               return r;
+       },
+       getBookmark: function(body){
+               this._getIERange();
+               return this._cachedBookmark;
+       },
+       _select: function(){
+               var r = this._getIERange();
+               r.select();
+       },
+       deleteContents: function(){
+               var r = this._getIERange();
+               r.pasteHTML('');
+               this.endContainer = this.startContainer;
+               this.endOffset = this.startOffset;
+               this.collapsed = true;
+       },
+       cloneRange: function(){
+               var r = new dijit.range.W3CRange([this.startContainer,this.startOffset,
+                       this.endContainer,this.endOffset]);
+               r._body = this._body;
+               return r;
+       },
+       detach: function(){
+               this._body = null;
+               this.commonAncestorContainer = null;
+               this.startContainer = null;
+               this.startOffset = 0;
+               this.endContainer = null;
+               this.endOffset = 0;
+               this.collapsed = true;
 }
-_3b=_3c;
-return true;
 });
-}else{
-_39=_38;
-_3a=0;
-}
-if(!end&&_39.nodeType==1&&_3a==_39.childNodes.length){
-var _41=_39.nextSibling;
-if(_41&&_41.nodeType==3){
-_39=_41;
-_3a=0;
-}
-}
-return [_39,_3a];
-},setEndPoint:function(_42,_43,_44){
-var _45=_42.duplicate(),_46,len;
-if(_43.nodeType!=3){
-if(_44>0){
-_46=_43.childNodes[_44-1];
-if(_46){
-if(_46.nodeType==3){
-_43=_46;
-_44=_46.length;
-}else{
-if(_46.nextSibling&&_46.nextSibling.nodeType==3){
-_43=_46.nextSibling;
-_44=0;
-}else{
-_45.moveToElementText(_46.nextSibling?_46:_43);
-var _47=_46.parentNode;
-var _48=_47.insertBefore(_46.ownerDocument.createTextNode(" "),_46.nextSibling);
-_45.collapse(false);
-_47.removeChild(_48);
-}
-}
-}
-}else{
-_45.moveToElementText(_43);
-_45.collapse(true);
-}
-}
-if(_43.nodeType==3){
-var _49=dijit.range.adjacentNoneTextNode(_43);
-var _4a=_49[0];
-len=_49[1];
-if(_4a){
-_45.moveToElementText(_4a);
-_45.collapse(false);
-if(_4a.contentEditable!="inherit"){
-len++;
-}
-}else{
-_45.moveToElementText(_43.parentNode);
-_45.collapse(true);
-}
-_44+=len;
-if(_44>0){
-if(_45.move("character",_44)!=_44){
-console.error("Error when moving!");
-}
-}
-}
-return _45;
-},decomposeTextRange:function(_4b){
-var _4c=dijit.range.ie.getEndPoint(_4b);
-var _4d=_4c[0],_4e=_4c[1];
-var _4f=_4c[0],_50=_4c[1];
-if(_4b.htmlText.length){
-if(_4b.htmlText==_4b.text){
-_50=_4e+_4b.text.length;
-}else{
-_4c=dijit.range.ie.getEndPoint(_4b,true);
-_4f=_4c[0],_50=_4c[1];
-}
-}
-return [_4d,_4e,_4f,_50];
-},setRange:function(_51,_52,_53,_54,_55,_56){
-var _57=dijit.range.ie.setEndPoint(_51,_52,_53);
-_51.setEndPoint("StartToStart",_57);
-if(!_56){
-var end=dijit.range.ie.setEndPoint(_51,_54,_55);
-}
-_51.setEndPoint("EndToEnd",end||_57);
-return _51;
-}};
-dojo.declare("dijit.range.W3CRange",null,{constructor:function(){
-if(arguments.length>0){
-this.setStart(arguments[0][0],arguments[0][1]);
-this.setEnd(arguments[0][2],arguments[0][3]);
-}else{
-this.commonAncestorContainer=null;
-this.startContainer=null;
-this.startOffset=0;
-this.endContainer=null;
-this.endOffset=0;
-this.collapsed=true;
-}
-},_updateInternal:function(){
-if(this.startContainer!==this.endContainer){
-this.commonAncestorContainer=dijit.range.getCommonAncestor(this.startContainer,this.endContainer);
-}else{
-this.commonAncestorContainer=this.startContainer;
-}
-this.collapsed=(this.startContainer===this.endContainer)&&(this.startOffset==this.endOffset);
-},setStart:function(_58,_59){
-_59=parseInt(_59);
-if(this.startContainer===_58&&this.startOffset==_59){
-return;
-}
-delete this._cachedBookmark;
-this.startContainer=_58;
-this.startOffset=_59;
-if(!this.endContainer){
-this.setEnd(_58,_59);
-}else{
-this._updateInternal();
-}
-},setEnd:function(_5a,_5b){
-_5b=parseInt(_5b);
-if(this.endContainer===_5a&&this.endOffset==_5b){
-return;
-}
-delete this._cachedBookmark;
-this.endContainer=_5a;
-this.endOffset=_5b;
-if(!this.startContainer){
-this.setStart(_5a,_5b);
-}else{
-this._updateInternal();
-}
-},setStartAfter:function(_5c,_5d){
-this._setPoint("setStart",_5c,_5d,1);
-},setStartBefore:function(_5e,_5f){
-this._setPoint("setStart",_5e,_5f,0);
-},setEndAfter:function(_60,_61){
-this._setPoint("setEnd",_60,_61,1);
-},setEndBefore:function(_62,_63){
-this._setPoint("setEnd",_62,_63,0);
-},_setPoint:function(_64,_65,_66,ext){
-var _67=dijit.range.getIndex(_65,_65.parentNode).o;
-this[_64](_65.parentNode,_67.pop()+ext);
-},_getIERange:function(){
-var r=(this._body||this.endContainer.ownerDocument.body).createTextRange();
-dijit.range.ie.setRange(r,this.startContainer,this.startOffset,this.endContainer,this.endOffset,this.collapsed);
-return r;
-},getBookmark:function(_68){
-this._getIERange();
-return this._cachedBookmark;
-},_select:function(){
-var r=this._getIERange();
-r.select();
-},deleteContents:function(){
-var r=this._getIERange();
-r.pasteHTML("");
-this.endContainer=this.startContainer;
-this.endOffset=this.startOffset;
-this.collapsed=true;
-},cloneRange:function(){
-var r=new dijit.range.W3CRange([this.startContainer,this.startOffset,this.endContainer,this.endOffset]);
-r._body=this._body;
-return r;
-},detach:function(){
-this._body=null;
-this.commonAncestorContainer=null;
-this.startContainer=null;
-this.startOffset=0;
-this.endContainer=null;
-this.endOffset=0;
-this.collapsed=true;
-}});
-}
+} //if(!dijit.range._w3c)
+
 }
index 3c99c0610aef09e28db5aca3c587063115269ed8..6fed82770b951ce1beced8efe3af6d7c55e33065 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.selection"]){
-dojo._hasResource["dijit._editor.selection"]=true;
+if(!dojo._hasResource["dijit._editor.selection"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.selection"] = true;
 dojo.provide("dijit._editor.selection");
-dojo.mixin(dijit._editor.selection,{getType:function(){
-if(dojo.isIE){
-return dojo.doc.selection.type.toLowerCase();
-}else{
-var _1="text";
-var _2;
-try{
-_2=dojo.global.getSelection();
-}
-catch(e){
-}
-if(_2&&_2.rangeCount==1){
-var _3=_2.getRangeAt(0);
-if((_3.startContainer==_3.endContainer)&&((_3.endOffset-_3.startOffset)==1)&&(_3.startContainer.nodeType!=3)){
-_1="control";
-}
-}
-return _1;
-}
-},getSelectedText:function(){
-if(dojo.isIE){
-if(dijit._editor.selection.getType()=="control"){
-return null;
-}
-return dojo.doc.selection.createRange().text;
-}else{
-var _4=dojo.global.getSelection();
-if(_4){
-return _4.toString();
-}
-}
-return "";
-},getSelectedHtml:function(){
-if(dojo.isIE){
-if(dijit._editor.selection.getType()=="control"){
-return null;
-}
-return dojo.doc.selection.createRange().htmlText;
-}else{
-var _5=dojo.global.getSelection();
-if(_5&&_5.rangeCount){
-var i;
-var _6="";
-for(i=0;i<_5.rangeCount;i++){
-var _7=_5.getRangeAt(i).cloneContents();
-var _8=dojo.doc.createElement("div");
-_8.appendChild(_7);
-_6+=_8.innerHTML;
-}
-return _6;
-}
-return null;
-}
-},getSelectedElement:function(){
-if(dijit._editor.selection.getType()=="control"){
-if(dojo.isIE){
-var _9=dojo.doc.selection.createRange();
-if(_9&&_9.item){
-return dojo.doc.selection.createRange().item(0);
-}
-}else{
-var _a=dojo.global.getSelection();
-return _a.anchorNode.childNodes[_a.anchorOffset];
-}
-}
-return null;
-},getParentElement:function(){
-if(dijit._editor.selection.getType()=="control"){
-var p=this.getSelectedElement();
-if(p){
-return p.parentNode;
-}
-}else{
-if(dojo.isIE){
-var r=dojo.doc.selection.createRange();
-r.collapse(true);
-return r.parentElement();
-}else{
-var _b=dojo.global.getSelection();
-if(_b){
-var _c=_b.anchorNode;
-while(_c&&(_c.nodeType!=1)){
-_c=_c.parentNode;
-}
-return _c;
-}
-}
-}
-return null;
-},hasAncestorElement:function(_d){
-return this.getAncestorElement.apply(this,arguments)!=null;
-},getAncestorElement:function(_e){
-var _f=this.getSelectedElement()||this.getParentElement();
-return this.getParentOfType(_f,arguments);
-},isTag:function(_10,_11){
-if(_10&&_10.tagName){
-var _12=_10.tagName.toLowerCase();
-for(var i=0;i<_11.length;i++){
-var _13=String(_11[i]).toLowerCase();
-if(_12==_13){
-return _13;
-}
-}
-}
-return "";
-},getParentOfType:function(_14,_15){
-while(_14){
-if(this.isTag(_14,_15).length){
-return _14;
-}
-_14=_14.parentNode;
-}
-return null;
-},collapse:function(_16){
-if(window.getSelection){
-var _17=dojo.global.getSelection();
-if(_17.removeAllRanges){
-if(_16){
-_17.collapseToStart();
-}else{
-_17.collapseToEnd();
-}
-}else{
-_17.collapse(_16);
-}
-}else{
-if(dojo.isIE){
-var _18=dojo.doc.selection.createRange();
-_18.collapse(_16);
-_18.select();
-}
-}
-},remove:function(){
-var sel=dojo.doc.selection;
-if(dojo.isIE){
-if(sel.type.toLowerCase()!="none"){
-sel.clear();
-}
-return sel;
-}else{
-sel=dojo.global.getSelection();
-sel.deleteFromDocument();
-return sel;
-}
-},selectElementChildren:function(_19,_1a){
-var win=dojo.global;
-var doc=dojo.doc;
-var _1b;
-_19=dojo.byId(_19);
-if(doc.selection&&dojo.isIE&&dojo.body().createTextRange){
-_1b=_19.ownerDocument.body.createTextRange();
-_1b.moveToElementText(_19);
-if(!_1a){
-try{
-_1b.select();
-}
-catch(e){
-}
-}
-}else{
-if(win.getSelection){
-var _1c=dojo.global.getSelection();
-if(dojo.isOpera){
-if(_1c.rangeCount){
-_1b=_1c.getRangeAt(0);
-}else{
-_1b=doc.createRange();
-}
-_1b.setStart(_19,0);
-_1b.setEnd(_19,(_19.nodeType==3)?_19.length:_19.childNodes.length);
-_1c.addRange(_1b);
-}else{
-_1c.selectAllChildren(_19);
-}
-}
-}
-},selectElement:function(_1d,_1e){
-var _1f;
-var doc=dojo.doc;
-var win=dojo.global;
-_1d=dojo.byId(_1d);
-if(dojo.isIE&&dojo.body().createTextRange){
-try{
-_1f=dojo.body().createControlRange();
-_1f.addElement(_1d);
-if(!_1e){
-_1f.select();
-}
-}
-catch(e){
-this.selectElementChildren(_1d,_1e);
-}
-}else{
-if(dojo.global.getSelection){
-var _20=win.getSelection();
-_1f=doc.createRange();
-if(_20.removeAllRanges){
-if(dojo.isOpera){
-if(_20.getRangeAt(0)){
-_1f=_20.getRangeAt(0);
-}
-}
-_1f.selectNode(_1d);
-_20.removeAllRanges();
-_20.addRange(_1f);
-}
-}
-}
-},inSelection:function(_21){
-if(_21){
-var _22;
-var doc=dojo.doc;
-var _23;
-if(dojo.global.getSelection){
-var sel=dojo.global.getSelection();
-if(sel&&sel.rangeCount>0){
-_23=sel.getRangeAt(0);
-}
-if(_23&&_23.compareBoundaryPoints&&doc.createRange){
-try{
-_22=doc.createRange();
-_22.setStart(_21,0);
-if(_23.compareBoundaryPoints(_23.START_TO_END,_22)===1){
-return true;
-}
-}
-catch(e){
-}
-}
-}else{
-if(doc.selection){
-_23=doc.selection.createRange();
-try{
-_22=_21.ownerDocument.body.createControlRange();
-if(_22){
-_22.addElement(_21);
-}
-}
-catch(e1){
-try{
-_22=_21.ownerDocument.body.createTextRange();
-_22.moveToElementText(_21);
-}
-catch(e2){
-}
-}
-if(_23&&_22){
-if(_23.compareEndPoints("EndToStart",_22)===1){
-return true;
-}
-}
-}
-}
-}
-return false;
-}});
+
+
+dojo.getObject("_editor.selection", true, dijit);
+
+// FIXME:
+//             all of these methods branch internally for IE. This is probably
+//             sub-optimal in terms of runtime performance. We should investigate the
+//             size difference for differentiating at definition time.
+
+dojo.mixin(dijit._editor.selection, {
+       getType: function(){
+               // summary:
+               //              Get the selection type (like dojo.doc.select.type in IE).
+               if(dojo.isIE < 9){
+                       return dojo.doc.selection.type.toLowerCase();
+               }else{
+                       var stype = "text";
+
+                       // Check if the actual selection is a CONTROL (IMG, TABLE, HR, etc...).
+                       var oSel;
+                       try{
+                               oSel = dojo.global.getSelection();
+                       }catch(e){ /*squelch*/ }
+
+                       if(oSel && oSel.rangeCount == 1){
+                               var oRange = oSel.getRangeAt(0);
+                               if(     (oRange.startContainer == oRange.endContainer) &&
+                                       ((oRange.endOffset - oRange.startOffset) == 1) &&
+                                       (oRange.startContainer.nodeType != 3 /* text node*/)
+                               ){
+                                       stype = "control";
+                               }
+                       }
+                       return stype; //String
+               }
+       },
+
+       getSelectedText: function(){
+               // summary:
+               //              Return the text (no html tags) included in the current selection or null if no text is selected
+               if(dojo.isIE < 9){
+                       if(dijit._editor.selection.getType() == 'control'){
+                               return null;
+                       }
+                       return dojo.doc.selection.createRange().text;
+               }else{
+                       var selection = dojo.global.getSelection();
+                       if(selection){
+                               return selection.toString(); //String
+                       }
+               }
+               return '';
+       },
+
+       getSelectedHtml: function(){
+               // summary:
+               //              Return the html text of the current selection or null if unavailable
+               if(dojo.isIE < 9){
+                       if(dijit._editor.selection.getType() == 'control'){
+                               return null;
+                       }
+                       return dojo.doc.selection.createRange().htmlText;
+               }else{
+                       var selection = dojo.global.getSelection();
+                       if(selection && selection.rangeCount){
+                               var i;
+                               var html = "";
+                               for(i = 0; i < selection.rangeCount; i++){
+                                       //Handle selections spanning ranges, such as Opera
+                                       var frag = selection.getRangeAt(i).cloneContents();
+                                       var div = dojo.doc.createElement("div");
+                                       div.appendChild(frag);
+                                       html += div.innerHTML;
+                               }
+                               return html; //String
+                       }
+                       return null;
+               }
+       },
+
+       getSelectedElement: function(){
+               // summary:
+               //              Retrieves the selected element (if any), just in the case that
+               //              a single element (object like and image or a table) is
+               //              selected.
+               if(dijit._editor.selection.getType() == "control"){
+                       if(dojo.isIE < 9){
+                               var range = dojo.doc.selection.createRange();
+                               if(range && range.item){
+                                       return dojo.doc.selection.createRange().item(0);
+                               }
+                       }else{
+                               var selection = dojo.global.getSelection();
+                               return selection.anchorNode.childNodes[ selection.anchorOffset ];
+                       }
+               }
+               return null;
+       },
+
+       getParentElement: function(){
+               // summary:
+               //              Get the parent element of the current selection
+               if(dijit._editor.selection.getType() == "control"){
+                       var p = this.getSelectedElement();
+                       if(p){ return p.parentNode; }
+               }else{
+                       if(dojo.isIE < 9){
+                               var r = dojo.doc.selection.createRange();
+                               r.collapse(true);
+                               return r.parentElement();
+                       }else{
+                               var selection = dojo.global.getSelection();
+                               if(selection){
+                                       var node = selection.anchorNode;
+                                       while(node && (node.nodeType != 1)){ // not an element
+                                               node = node.parentNode;
+                                       }
+                                       return node;
+                               }
+                       }
+               }
+               return null;
+       },
+
+       hasAncestorElement: function(/*String*/tagName /* ... */){
+               // summary:
+               //              Check whether current selection has a  parent element which is
+               //              of type tagName (or one of the other specified tagName)
+               // tagName: String
+               //              The tag name to determine if it has an ancestor of.
+               return this.getAncestorElement.apply(this, arguments) != null; //Boolean
+       },
+
+       getAncestorElement: function(/*String*/tagName /* ... */){
+               // summary:
+               //              Return the parent element of the current selection which is of
+               //              type tagName (or one of the other specified tagName)
+               // tagName: String
+               //              The tag name to determine if it has an ancestor of.
+               var node = this.getSelectedElement() || this.getParentElement();
+               return this.getParentOfType(node, arguments); //DOMNode
+       },
+
+       isTag: function(/*DomNode*/ node, /*String[]*/ tags){
+               // summary:
+               //              Function to determine if a node is one of an array of tags.
+               // node:
+               //              The node to inspect.
+               // tags:
+               //              An array of tag name strings to check to see if the node matches.
+               if(node && node.tagName){
+                       var _nlc = node.tagName.toLowerCase();
+                       for(var i=0; i<tags.length; i++){
+                               var _tlc = String(tags[i]).toLowerCase();
+                               if(_nlc == _tlc){
+                                       return _tlc; // String
+                               }
+                       }
+               }
+               return "";
+       },
+
+       getParentOfType: function(/*DomNode*/ node, /*String[]*/ tags){
+               // summary:
+               //              Function to locate a parent node that matches one of a set of tags
+               // node:
+               //              The node to inspect.
+               // tags:
+               //              An array of tag name strings to check to see if the node matches.
+               while(node){
+                       if(this.isTag(node, tags).length){
+                               return node; // DOMNode
+                       }
+                       node = node.parentNode;
+               }
+               return null;
+       },
+
+       collapse: function(/*Boolean*/beginning){
+               // summary:
+               //              Function to collapse (clear), the current selection
+               // beginning: Boolean
+               //              Boolean to indicate whether to collapse the cursor to the beginning of the selection or end.
+               if(window.getSelection){
+                       var selection = dojo.global.getSelection();
+                       if(selection.removeAllRanges){ // Mozilla
+                               if(beginning){
+                                       selection.collapseToStart();
+                               }else{
+                                       selection.collapseToEnd();
+                               }
+                       }else{ // Safari
+                               // pulled from WebCore/ecma/kjs_window.cpp, line 2536
+                               selection.collapse(beginning);
+                       }
+               }else if(dojo.isIE){ // IE
+                       var range = dojo.doc.selection.createRange();
+                       range.collapse(beginning);
+                       range.select();
+               }
+       },
+
+       remove: function(){
+               // summary:
+               //              Function to delete the currently selected content from the document.
+               var sel = dojo.doc.selection;
+               if(dojo.isIE < 9){
+                       if(sel.type.toLowerCase() != "none"){
+                               sel.clear();
+                       }
+                       return sel; //Selection
+               }else{
+                       sel = dojo.global.getSelection();
+                       sel.deleteFromDocument();
+                       return sel; //Selection
+               }
+       },
+
+       selectElementChildren: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
+               // summary:
+               //              clear previous selection and select the content of the node
+               //              (excluding the node itself)
+               // element: DOMNode
+               //              The element you wish to select the children content of.
+               // nochangefocus: Boolean
+               //              Boolean to indicate if the foxus should change or not.
+               var win = dojo.global;
+               var doc = dojo.doc;
+               var range;
+               element = dojo.byId(element);
+               if(doc.selection && dojo.isIE < 9 && dojo.body().createTextRange){ // IE
+                       range = element.ownerDocument.body.createTextRange();
+                       range.moveToElementText(element);
+                       if(!nochangefocus){
+                               try{
+                                       range.select(); // IE throws an exception here if the widget is hidden.  See #5439
+                               }catch(e){ /* squelch */}
+                       }
+               }else if(win.getSelection){
+                       var selection = dojo.global.getSelection();
+                       if(dojo.isOpera){
+                               //Opera's selectAllChildren doesn't seem to work right
+                               //against <body> nodes and possibly others ... so
+                               //we use the W3C range API
+                               if(selection.rangeCount){
+                                       range = selection.getRangeAt(0);
+                               }else{
+                                       range = doc.createRange();
+                               }
+                               range.setStart(element, 0);
+                               range.setEnd(element,(element.nodeType == 3)?element.length:element.childNodes.length);
+                               selection.addRange(range);
+                       }else{
+                               selection.selectAllChildren(element);
+                       }
+               }
+       },
+
+       selectElement: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
+               // summary:
+               //              clear previous selection and select element (including all its children)
+               // element:  DOMNode
+               //              The element to select.
+               // nochangefocus: Boolean
+               //              Boolean indicating if the focus should be changed.  IE only.
+               var range;
+               var doc = dojo.doc;
+               var win = dojo.global;
+               element = dojo.byId(element);
+               if(dojo.isIE < 9 && dojo.body().createTextRange){
+                       try{
+                               var tg = element.tagName ? element.tagName.toLowerCase() : "";
+                               if(tg === "img" || tg === "table"){
+                                       range = dojo.body().createControlRange();
+                               }else{
+                                       range = dojo.body().createRange();
+                               }
+                               range.addElement(element);
+                               if(!nochangefocus){
+                                       range.select();
+                               }
+                       }catch(e){
+                               this.selectElementChildren(element,nochangefocus);
+                       }
+               }else if(dojo.global.getSelection){
+                       var selection = win.getSelection();
+                       range = doc.createRange();
+                       if(selection.removeAllRanges){ // Mozilla
+                               // FIXME: does this work on Safari?
+                               if(dojo.isOpera){
+                                       //Opera works if you use the current range on
+                                       //the selection if present.
+                                       if(selection.getRangeAt(0)){
+                                               range = selection.getRangeAt(0);
+                                       }
+                               }
+                               range.selectNode(element);
+                               selection.removeAllRanges();
+                               selection.addRange(range);
+                       }
+               }
+       },
+
+       inSelection: function(node){
+               // summary:
+               //              This function determines if 'node' is
+               //              in the current selection.
+               // tags:
+               //              public
+               if(node){
+                       var newRange;
+                       var doc = dojo.doc;
+                       var range;
+
+                       if(dojo.global.getSelection){
+                               //WC3
+                               var sel = dojo.global.getSelection();
+                               if(sel && sel.rangeCount > 0){
+                                       range = sel.getRangeAt(0);
+                               }
+                               if(range && range.compareBoundaryPoints && doc.createRange){
+                                       try{
+                                               newRange = doc.createRange();
+                                               newRange.setStart(node, 0);
+                                               if(range.compareBoundaryPoints(range.START_TO_END, newRange) === 1){
+                                                       return true;
+                                               }
+                                       }catch(e){ /* squelch */}
+                               }
+                       }else if(doc.selection){
+                               // Probably IE, so we can't use the range object as the pseudo
+                               // range doesn't implement the boundry checking, we have to
+                               // use IE specific crud.
+                               range = doc.selection.createRange();
+                               try{
+                                       newRange = node.ownerDocument.body.createControlRange();
+                                       if(newRange){
+                                               newRange.addElement(node);
+                                       }
+                               }catch(e1){
+                                       try{
+                                               newRange = node.ownerDocument.body.createTextRange();
+                                               newRange.moveToElementText(node);
+                                       }catch(e2){/* squelch */}
+                               }
+                               if(range && newRange){
+                                       // We can finally compare similar to W3C
+                                       if(range.compareEndPoints("EndToStart", newRange) === 1){
+                                               return true;
+                                       }
+                               }
+                       }
+               }
+               return false; // boolean
+       }
+
+});
+
 }
index 41f9f2adccb36fbc44b8743c55eab2350ade7a39..2f2c968be5fb17e163cdb3693e85d4175a916710 100644 (file)
@@ -1,14 +1,19 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit._tree.dndSource"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._tree.dndSource"] = true;
 dojo.provide("dijit._tree.dndSource");
 dojo.require("dijit.tree.dndSource");
-dojo.deprecated("dijit._tree.dndSource has been moved to dijit.tree.dndSource, use that instead","","2.0");
-dijit._tree.dndSource=dijit.tree.dndSource;
+
+
+// TODO: remove this file in 2.0
+dojo.deprecated("dijit._tree.dndSource has been moved to dijit.tree.dndSource, use that instead", "", "2.0");
+
+dijit._tree.dndSource = dijit.tree.dndSource;
+
 }
index 40393115cb35632205e4ff83a2dc3cb1dbb29878..e504b096ef7e1146893c1b50be35fa632403f8cb 100644 (file)
@@ -1,14 +1,77 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The 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 an optimized version of Dojo, built for deployment and not for
-       development. To get sources and documentation, please visit:
 
-               http://dojotoolkit.org
-*/
+if(!dojo._hasResource["dijit.dijit-all"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.dijit-all"] = true;
+dojo.provide("dijit.dijit-all");
+dojo.require("dijit.dijit");
+dojo.require("dijit.ColorPalette");
+dojo.require("dijit.Declaration");
+dojo.require("dijit.Dialog");
+dojo.require("dijit.DialogUnderlay");
+dojo.require("dijit.TooltipDialog");
+dojo.require("dijit.Editor");
+dojo.require("dijit._editor.plugins.FontChoice");
+dojo.require("dijit._editor.plugins.LinkDialog");
+dojo.require("dijit.Menu");
+dojo.require("dijit.MenuItem");
+dojo.require("dijit.PopupMenuItem");
+dojo.require("dijit.MenuBar");
+dojo.require("dijit.MenuBarItem");
+dojo.require("dijit.PopupMenuBarItem");
+dojo.require("dijit.MenuSeparator");
+dojo.require("dijit.ProgressBar");
+dojo.require("dijit.TitlePane");
+dojo.require("dijit.Toolbar");
+dojo.require("dijit.Tooltip");
+dojo.require("dijit.Tree");
+dojo.require("dijit.InlineEditBox");
+dojo.require("dijit.form.Form");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.form.DropDownButton");
+dojo.require("dijit.form.ComboButton");
+dojo.require("dijit.form.ToggleButton");
+dojo.require("dijit.form.CheckBox");
+dojo.require("dijit.form.RadioButton");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.require("dijit.form.CurrencyTextBox");
+dojo.require("dijit.form.DateTextBox");
+dojo.require("dijit.form.NumberSpinner");
+dojo.require("dijit.form.NumberTextBox");
+dojo.require("dijit.form.ComboBox");
+dojo.require("dijit.form.FilteringSelect");
+dojo.require("dijit.form.MultiSelect");
+dojo.require("dijit.form.Select");
+dojo.require("dijit.form.HorizontalSlider");
+dojo.require("dijit.form.VerticalSlider");
+dojo.require("dijit.form.HorizontalRule");
+dojo.require("dijit.form.VerticalRule");
+dojo.require("dijit.form.HorizontalRuleLabels");
+dojo.require("dijit.form.VerticalRuleLabels");
+dojo.require("dijit.form.SimpleTextarea");
+dojo.require("dijit.form.Textarea");
+dojo.require("dijit.layout.AccordionContainer");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit.layout.BorderContainer");
+dojo.require("dijit.layout.LayoutContainer");
+dojo.require("dijit.layout.LinkPane");
+dojo.require("dijit.layout.SplitContainer");
+dojo.require("dijit.layout.StackContainer");
+dojo.require("dijit.layout.TabContainer");
+
+
+console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool");
+
+/*=====
+dijit["dijit-all"] = {
+       // summary:
+       //              A rollup that includes every dijit. You probably don't need this.
+};
+=====*/
 
-if(!dojo._hasResource["dojo.colors"]){dojo._hasResource["dojo.colors"]=true;dojo.provide("dojo.colors");(function(){var _1=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(_2,_3){var m=_2.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)=="%"){a=dojo.map(c,function(x){return parseFloat(x)*2.56;});if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,_3);}return dojo.colorFromArray(c,_3);}if((t=="hsl"&&l==3)||(t=="hsla"&&l==4)){var H=((parseFloat(c[0])%360)+360)%360/360,S=parseFloat(c[1])/100,L=parseFloat(c[2])/100,m2=L<=0.5?L*(S+1):L+S-L*S,m1=2*L-m2;a=[_1(m1,m2,H+1/3)*256,_1(m1,m2,H)*256,_1(m1,m2,H-1/3)*256,1];if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,_3);}}return null;};var _4=function(c,_5,_6){c=Number(c);return isNaN(c)?_6:c<_5?_5:c>_6?_6:c;};dojo.Color.prototype.sanitize=function(){var t=this;t.r=Math.round(_4(t.r,0,255));t.g=Math.round(_4(t.g,0,255));t.b=Math.round(_4(t.b,0,255));t.a=_4(t.a,0,1);return this;};})();dojo.colors.makeGrey=function(g,a){return dojo.colorFromArray([g,g,g,a]);};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["dojo.i18n"]){dojo._hasResource["dojo.i18n"]=true;dojo.provide("dojo.i18n");dojo.i18n.getLocalization=function(_7,_8,_9){_9=dojo.i18n.normalizeLocale(_9);var _a=_9.split("-");var _b=[_7,"nls",_8].join(".");var _c=dojo._loadedModules[_b];if(_c){var _d;for(var i=_a.length;i>0;i--){var _e=_a.slice(0,i).join("_");if(_c[_e]){_d=_c[_e];break;}}if(!_d){_d=_c.ROOT;}if(_d){var _f=function(){};_f.prototype=_d;return new _f();}}throw new Error("Bundle not found: "+_8+" in "+_7+" , locale="+_9);};dojo.i18n.normalizeLocale=function(_10){var _11=_10?_10.toLowerCase():dojo.locale;if(_11=="root"){_11="ROOT";}return _11;};dojo.i18n._requireLocalization=function(_12,_13,_14,_15){var _16=dojo.i18n.normalizeLocale(_14);var _17=[_12,"nls",_13].join(".");var _18="";if(_15){var _19=_15.split(",");for(var i=0;i<_19.length;i++){if(_16["indexOf"](_19[i])==0){if(_19[i].length>_18.length){_18=_19[i];}}}if(!_18){_18="ROOT";}}var _1a=_15?_18:_16;var _1b=dojo._loadedModules[_17];var _1c=null;if(_1b){if(dojo.config.localizationComplete&&_1b._built){return;}var _1d=_1a.replace(/-/g,"_");var _1e=_17+"."+_1d;_1c=dojo._loadedModules[_1e];}if(!_1c){_1b=dojo["provide"](_17);var _1f=dojo._getModuleSymbols(_12);var _20=_1f.concat("nls").join("/");var _21;dojo.i18n._searchLocalePath(_1a,_15,function(loc){var _22=loc.replace(/-/g,"_");var _23=_17+"."+_22;var _24=false;if(!dojo._loadedModules[_23]){dojo["provide"](_23);var _25=[_20];if(loc!="ROOT"){_25.push(loc);}_25.push(_13);var _26=_25.join("/")+".js";_24=dojo._loadPath(_26,null,function(_27){var _28=function(){};_28.prototype=_21;_1b[_22]=new _28();for(var j in _27){_1b[_22][j]=_27[j];}});}else{_24=true;}if(_24&&_1b[_22]){_21=_1b[_22];}else{_1b[_22]=_21;}if(_15){return true;}});}if(_15&&_16!=_18){_1b[_16.replace(/-/g,"_")]=_1b[_18.replace(/-/g,"_")];}};(function(){var _29=dojo.config.extraLocale;if(_29){if(!_29 instanceof Array){_29=[_29];}var req=dojo.i18n._requireLocalization;dojo.i18n._requireLocalization=function(m,b,_2a,_2b){req(m,b,_2a,_2b);if(_2a){return;}for(var i=0;i<_29.length;i++){req(m,b,_29[i],_2b);}};}})();dojo.i18n._searchLocalePath=function(_2c,_2d,_2e){_2c=dojo.i18n.normalizeLocale(_2c);var _2f=_2c.split("-");var _30=[];for(var i=_2f.length;i>0;i--){_30.push(_2f.slice(0,i).join("-"));}_30.push(false);if(_2d){_30.reverse();}for(var j=_30.length-1;j>=0;j--){var loc=_30[j]||"ROOT";var _31=_2e(loc);if(_31){break;}}};dojo.i18n._preloadLocalizations=function(_32,_33){function _34(_35){_35=dojo.i18n.normalizeLocale(_35);dojo.i18n._searchLocalePath(_35,true,function(loc){for(var i=0;i<_33.length;i++){if(_33[i]==loc){dojo["require"](_32+"_"+loc);return true;}}return false;});};_34();var _36=dojo.config.extraLocale||[];for(var i=0;i<_36.length;i++){_34(_36[i]);}};}if(!dojo._hasResource["dijit._PaletteMixin"]){dojo._hasResource["dijit._PaletteMixin"]=true;dojo.provide("dijit._PaletteMixin");dojo.declare("dijit._PaletteMixin",[dijit._CssStateMixin],{defaultTimeout:500,timeoutChangeRate:0.9,value:null,_selectedCell:-1,tabIndex:"0",cellClass:"dijitPaletteCell",dyeClass:"",_preparePalette:function(_37,_38){this._cells=[];var url=this._blankGif;var _39=dojo.getObject(this.dyeClass);for(var row=0;row<_37.length;row++){var _3a=dojo.create("tr",{tabIndex:"-1"},this.gridNode);for(var col=0;col<_37[row].length;col++){var _3b=_37[row][col];if(_3b){var _3c=new _39(_3b);var _3d=dojo.create("td",{"class":this.cellClass,tabIndex:"-1",title:_38[_3b]});_3c.fillCell(_3d,url);this.connect(_3d,"ondijitclick","_onCellClick");this._trackMouseState(_3d,this.cellClass);dojo.place(_3d,_3a);_3d.index=this._cells.length;this._cells.push({node:_3d,dye:_3c});}}}this._xDim=_37[0].length;this._yDim=_37.length;var _3e={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:this.isLeftToRight()?1:-1,LEFT_ARROW:this.isLeftToRight()?-1:1};for(var key in _3e){this._connects.push(dijit.typematic.addKeyListener(this.domNode,{charOrCode:dojo.keys[key],ctrlKey:false,altKey:false,shiftKey:false},this,function(){var _3f=_3e[key];return function(_40){this._navigateByKey(_3f,_40);};}(),this.timeoutChangeRate,this.defaultTimeout));}},postCreate:function(){this.inherited(arguments);this._setCurrent(this._cells[0].node);},focus:function(){dijit.focus(this._currentFocus);},_onCellClick:function(evt){var _41=evt.currentTarget,_42=this._getDye(_41).getValue();this._setCurrent(_41);setTimeout(dojo.hitch(this,function(){dijit.focus(_41);this._setValueAttr(_42,true);}));dojo.removeClass(_41,"dijitPaletteCellHover");dojo.stopEvent(evt);},_setCurrent:function(_43){if("_currentFocus" in this){dojo.attr(this._currentFocus,"tabIndex","-1");}this._currentFocus=_43;if(_43){dojo.attr(_43,"tabIndex",this.tabIndex);}},_setValueAttr:function(_44,_45){this.value=null;if(this._selectedCell>=0){dojo.removeClass(this._cells[this._selectedCell].node,"dijitPaletteCellSelected");}this._selectedCell=-1;if(_44){for(var i=0;i<this._cells.length;i++){if(_44==this._cells[i].dye.getValue()){this._selectedCell=i;this.value=_44;dojo.addClass(this._cells[i].node,"dijitPaletteCellSelected");if(_45||_45===undefined){this.onChange(_44);}break;}}}},onChange:function(_46){},_navigateByKey:function(_47,_48){if(_48==-1){return;}var _49=this._currentFocus.index+_47;if(_49<this._cells.length&&_49>-1){var _4a=this._cells[_49].node;this._setCurrent(_4a);setTimeout(dojo.hitch(dijit,"focus",_4a),0);}},_getDye:function(_4b){return this._cells[_4b.index].dye;}});}if(!dojo._hasResource["dijit.ColorPalette"]){dojo._hasResource["dijit.ColorPalette"]=true;dojo.provide("dijit.ColorPalette");dojo.declare("dijit.ColorPalette",[dijit._Widget,dijit._Templated,dijit._PaletteMixin],{palette:"7x10",_palettes:{"7x10":[["white","seashell","cornsilk","lemonchiffon","lightyellow","palegreen","paleturquoise","lightcyan","lavender","plum"],["lightgray","pink","bisque","moccasin","khaki","lightgreen","lightseagreen","lightskyblue","cornflowerblue","violet"],["silver","lightcoral","sandybrown","orange","palegoldenrod","chartreuse","mediumturquoise","skyblue","mediumslateblue","orchid"],["gray","red","orangered","darkorange","yellow","limegreen","darkseagreen","royalblue","slateblue","mediumorchid"],["dimgray","crimson","chocolate","coral","gold","forestgreen","seagreen","blue","blueviolet","darkorchid"],["darkslategray","firebrick","saddlebrown","sienna","olive","green","darkcyan","mediumblue","darkslateblue","darkmagenta"],["black","darkred","maroon","brown","darkolivegreen","darkgreen","midnightblue","navy","indigo","purple"]],"3x4":[["white","lime","green","blue"],["silver","yellow","fuchsia","navy"],["gray","red","purple","black"]]},_imagePaths:{"7x10":dojo.moduleUrl("dijit.themes","a11y/colors7x10.png"),"3x4":dojo.moduleUrl("dijit.themes","a11y/colors3x4.png"),"7x10-rtl":dojo.moduleUrl("dijit.themes","a11y/colors7x10-rtl.png"),"3x4-rtl":dojo.moduleUrl("dijit.themes","a11y/colors3x4-rtl.png")},templateString:dojo.cache("dijit","templates/ColorPalette.html","<div class=\"dijitInline dijitColorPalette\">\n\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\"/>\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),baseClass:"dijitColorPalette",dyeClass:"dijit._Color",buildRendering:function(){this.inherited(arguments);this.imageNode.setAttribute("src",this._imagePaths[this.palette+(this.isLeftToRight()?"":"-rtl")].toString());var _4c=dojo.i18n.getLocalization("dojo","colors",this.lang);this._preparePalette(this._palettes[this.palette],_4c);}});dojo.declare("dijit._Color",dojo.Color,{constructor:function(_4d){this._alias=_4d;this.setColor(dojo.Color.named[_4d]);},getValue:function(){return this.toHex();},fillCell:function(_4e,_4f){dojo.create("img",{src:_4f,"class":"dijitPaletteImg",alt:this._alias},_4e);}});}if(!dojo._hasResource["dijit.Declaration"]){dojo._hasResource["dijit.Declaration"]=true;dojo.provide("dijit.Declaration");dojo.declare("dijit.Declaration",dijit._Widget,{_noScript:true,widgetClass:"",defaults:null,mixins:[],buildRendering:function(){var src=this.srcNodeRef.parentNode.removeChild(this.srcNodeRef),_50=dojo.query("> script[type^='dojo/method'][event]",src).orphan(),_51=dojo.query("> script[type^='dojo/method']",src).orphan(),_52=dojo.query("> script[type^='dojo/connect']",src).orphan(),_53=src.nodeName;var _54=this.defaults||{};dojo.forEach(_50,function(s){var evt=s.getAttribute("event"),_55=dojo.parser._functionFromScript(s);_54[evt]=_55;});this.mixins=this.mixins.length?dojo.map(this.mixins,function(_56){return dojo.getObject(_56);}):[dijit._Widget,dijit._Templated];_54.widgetsInTemplate=true;_54._skipNodeCache=true;_54.templateString="<"+_53+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint")||"")+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent")||"")+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+_53+">";dojo.query("[dojoType]",src).forEach(function(_57){_57.removeAttribute("dojoType");});var wc=dojo.declare(this.widgetClass,this.mixins,_54);var _58=_52.concat(_51);dojo.forEach(_58,function(s){var evt=s.getAttribute("event")||"postscript",_59=dojo.parser._functionFromScript(s);dojo.connect(wc.prototype,evt,_59);});}});}if(!dojo._hasResource["dojo.dnd.common"]){dojo._hasResource["dojo.dnd.common"]=true;dojo.provide("dojo.dnd.common");dojo.dnd.getCopyKeyState=dojo.isCopyKey;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 _5a=n.scrollLeft,_5b=n.scrollTop;n.scrollLeft=n.scrollLeft+dx;n.scrollTop=n.scrollTop+dy;if(_5a!=n.scrollLeft||_5b!=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(_5c,e,_5d){this.node=dojo.byId(_5c);this.marginBox={l:e.pageX,t:e.pageY};this.mouseButton=e.button;var h=this.host=_5d,d=_5c.ownerDocument,_5e=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),_5e];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},e);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(e){var s=this.node.style,l,t,h=this.host;switch(s.position){case "relative":case "absolute":l=Math.round(parseFloat(s.left))||0;t=Math.round(parseFloat(s.top))||0;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,e);}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(_5f,_60){this.node=dojo.byId(_5f);if(!_60){_60={};}this.handle=_60.handle?dojo.byId(_60.handle):null;if(!this.handle){this.handle=this.node;}this.delay=_60.delay>0?_60.delay:0;this.skip=_60.skip;this.mover=_60.mover?_60.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(_61,_62){return new dojo.dnd.Moveable(_62,_61);},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(_63){dojo.publish("/dnd/move/start",[_63]);dojo.addClass(dojo.body(),"dojoMove");dojo.addClass(this.node,"dojoMoveItem");},onMoveStop:function(_64){dojo.publish("/dnd/move/stop",[_64]);dojo.removeClass(dojo.body(),"dojoMove");dojo.removeClass(this.node,"dojoMoveItem");},onFirstMove:function(_65,e){},onMove:function(_66,_67,e){this.onMoving(_66,_67);var s=_66.node.style;s.left=_67.l+"px";s.top=_67.t+"px";this.onMoved(_66,_67);},onMoving:function(_68,_69){},onMoved:function(_6a,_6b){}});}if(!dojo._hasResource["dojo.dnd.move"]){dojo._hasResource["dojo.dnd.move"]=true;dojo.provide("dojo.dnd.move");dojo.declare("dojo.dnd.move.constrainedMoveable",dojo.dnd.Moveable,{constraints:function(){},within:false,markupFactory:function(_6c,_6d){return new dojo.dnd.move.constrainedMoveable(_6d,_6c);},constructor:function(_6e,_6f){if(!_6f){_6f={};}this.constraints=_6f.constraints;this.within=_6f.within;},onFirstMove:function(_70){var c=this.constraintBox=this.constraints.call(this,_70);c.r=c.l+c.w;c.b=c.t+c.h;if(this.within){var mb=dojo.marginBox(_70.node);c.r-=mb.w;c.b-=mb.h;}},onMove:function(_71,_72){var c=this.constraintBox,s=_71.node.style;s.left=(_72.l<c.l?c.l:c.r<_72.l?c.r:_72.l)+"px";s.top=(_72.t<c.t?c.t:c.b<_72.t?c.b:_72.t)+"px";}});dojo.declare("dojo.dnd.move.boxConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{box:{},markupFactory:function(_73,_74){return new dojo.dnd.move.boxConstrainedMoveable(_74,_73);},constructor:function(_75,_76){var box=_76&&_76.box;this.constraints=function(){return box;};}});dojo.declare("dojo.dnd.move.parentConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{area:"content",markupFactory:function(_77,_78){return new dojo.dnd.move.parentConstrainedMoveable(_78,_77);},constructor:function(_79,_7a){var _7b=_7a&&_7a.area;this.constraints=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(_7b=="margin"){return mb;}var t=dojo._getMarginExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_7b=="border"){return mb;}t=dojo._getBorderExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_7b=="padding"){return mb;}t=dojo._getPadExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;return mb;};}});dojo.dnd.move.constrainedMover=function(fun,_7c){dojo.deprecated("dojo.dnd.move.constrainedMover, use dojo.dnd.move.constrainedMoveable instead");var _7d=function(_7e,e,_7f){dojo.dnd.Mover.call(this,_7e,e,_7f);};dojo.extend(_7d,dojo.dnd.Mover.prototype);dojo.extend(_7d,{onMouseMove:function(e){dojo.dnd.autoScroll(e);var m=this.marginBox,c=this.constraintBox,l=m.l+e.pageX,t=m.t+e.pageY;l=l<c.l?c.l:c.r<l?c.r:l;t=t<c.t?c.t:c.b<t?c.b:t;this.host.onMove(this,{l:l,t:t});},onFirstMove:function(){dojo.dnd.Mover.prototype.onFirstMove.call(this);var c=this.constraintBox=fun.call(this);c.r=c.l+c.w;c.b=c.t+c.h;if(_7c){var mb=dojo.marginBox(this.node);c.r-=mb.w;c.b-=mb.h;}}});return _7d;};dojo.dnd.move.boxConstrainedMover=function(box,_80){dojo.deprecated("dojo.dnd.move.boxConstrainedMover, use dojo.dnd.move.boxConstrainedMoveable instead");return dojo.dnd.move.constrainedMover(function(){return box;},_80);};dojo.dnd.move.parentConstrainedMover=function(_81,_82){dojo.deprecated("dojo.dnd.move.parentConstrainedMover, use dojo.dnd.move.parentConstrainedMoveable instead");var fun=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(_81=="margin"){return mb;}var t=dojo._getMarginExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_81=="border"){return mb;}t=dojo._getBorderExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_81=="padding"){return mb;}t=dojo._getPadExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;return mb;};return dojo.dnd.move.constrainedMover(fun,_82);};dojo.dnd.constrainedMover=dojo.dnd.move.constrainedMover;dojo.dnd.boxConstrainedMover=dojo.dnd.move.boxConstrainedMover;dojo.dnd.parentConstrainedMover=dojo.dnd.move.parentConstrainedMover;}if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){dojo._hasResource["dojo.dnd.TimedMoveable"]=true;dojo.provide("dojo.dnd.TimedMoveable");(function(){var _83=dojo.dnd.Moveable.prototype.onMove;dojo.declare("dojo.dnd.TimedMoveable",dojo.dnd.Moveable,{timeout:40,constructor:function(_84,_85){if(!_85){_85={};}if(_85.timeout&&typeof _85.timeout=="number"&&_85.timeout>=0){this.timeout=_85.timeout;}},markupFactory:function(_86,_87){return new dojo.dnd.TimedMoveable(_87,_86);},onMoveStop:function(_88){if(_88._timer){clearTimeout(_88._timer);_83.call(this,_88,_88._leftTop);}dojo.dnd.Moveable.prototype.onMoveStop.apply(this,arguments);},onMove:function(_89,_8a){_89._leftTop=_8a;if(!_89._timer){var _8b=this;_89._timer=setTimeout(function(){_89._timer=null;_83.call(_8b,_89,_89._leftTop);},this.timeout);}}});})();}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(_8c){var _8d=this;dojo.mixin(_8d,_8c);_8d.node=_8c.node;_8d._showArgs=dojo.mixin({},_8c);_8d._showArgs.node=_8d.node;_8d._showArgs.duration=_8d.showDuration;_8d.showAnim=_8d.showFunc(_8d._showArgs);_8d._hideArgs=dojo.mixin({},_8c);_8d._hideArgs.node=_8d.node;_8d._hideArgs.duration=_8d.hideDuration;_8d.hideAnim=_8d.hideFunc(_8d._hideArgs);dojo.connect(_8d.showAnim,"beforeBegin",dojo.hitch(_8d.hideAnim,"stop",true));dojo.connect(_8d.hideAnim,"beforeBegin",dojo.hitch(_8d.showAnim,"stop",true));},show:function(_8e){return this.showAnim.play(_8e||0);},hide:function(_8f){return this.hideAnim.play(_8f||0);}});}if(!dojo._hasResource["dojo.fx"]){dojo._hasResource["dojo.fx"]=true;dojo.provide("dojo.fx");(function(){var d=dojo,_90={_fire:function(evt,_91){if(this[evt]){this[evt].apply(this,_91||[]);}return this;}};var _92=function(_93){this._index=-1;this._animations=_93||[];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(_92,{_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{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(_94,_95){if(!this._current){this._current=this._animations[this._index=0];}if(!_95&&this._current.status()=="playing"){return this;}var _96=d.connect(this._current,"beforeBegin",this,function(){this._fire("beforeBegin");}),_97=d.connect(this._current,"onBegin",this,function(arg){this._fire("onBegin",arguments);}),_98=d.connect(this._current,"onPlay",this,function(arg){this._fire("onPlay",arguments);d.disconnect(_96);d.disconnect(_97);d.disconnect(_98);});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(_99,_9a){this.pause();var _9b=this.duration*_99;this._current=null;d.some(this._animations,function(a){if(a.duration<=_9b){this._current=a;return true;}_9b-=a.duration;return false;});if(this._current){this._current.gotoPercent(_9b/this._current.duration,_9a);}return this;},stop:function(_9c){if(this._current){if(_9c){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(_92,_90);dojo.fx.chain=function(_9d){return new _92(_9d);};var _9e=function(_9f){this._animations=_9f||[];this._connects=[];this._finished=0;this.duration=0;d.forEach(_9f,function(a){var _a0=a.duration;if(a.delay){_a0+=a.delay;}if(this.duration<_a0){this.duration=_a0;}this._connects.push(d.connect(a,"onEnd",this,"_onEnd"));},this);this._pseudoAnimation=new d.Animation({curve:[0,1],duration:this.duration});var _a1=this;d.forEach(["beforeBegin","onBegin","onPlay","onAnimate","onPause","onStop","onEnd"],function(evt){_a1._connects.push(d.connect(_a1._pseudoAnimation,evt,function(){_a1._fire(evt,arguments);}));});};d.extend(_9e,{_doAction:function(_a2,_a3){d.forEach(this._animations,function(a){a[_a2].apply(a,_a3);});return this;},_onEnd:function(){if(++this._finished>this._animations.length){this._fire("onEnd");}},_call:function(_a4,_a5){var t=this._pseudoAnimation;t[_a4].apply(t,_a5);},play:function(_a6,_a7){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(_a8,_a9){var ms=this.duration*_a8;d.forEach(this._animations,function(a){a.gotoPercent(a.duration<ms?1:(ms/a.duration),_a9);});this._call("gotoPercent",arguments);return this;},stop:function(_aa){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(_9e,_90);dojo.fx.combine=function(_ab){return new _9e(_ab);};dojo.fx.wipeIn=function(_ac){var _ad=_ac.node=d.byId(_ac.node),s=_ad.style,o;var _ae=d.animateProperty(d.mixin({properties:{height:{start:function(){o=s.overflow;s.overflow="hidden";if(s.visibility=="hidden"||s.display=="none"){s.height="1px";s.display="";s.visibility="";return 1;}else{var _af=d.style(_ad,"height");return Math.max(_af,1);}},end:function(){return _ad.scrollHeight;}}}},_ac));d.connect(_ae,"onEnd",function(){s.height="auto";s.overflow=o;});return _ae;};dojo.fx.wipeOut=function(_b0){var _b1=_b0.node=d.byId(_b0.node),s=_b1.style,o;var _b2=d.animateProperty(d.mixin({properties:{height:{end:1}}},_b0));d.connect(_b2,"beforeBegin",function(){o=s.overflow;s.overflow="hidden";s.display="";});d.connect(_b2,"onEnd",function(){s.overflow=o;s.height="auto";s.display="none";});return _b2;};dojo.fx.slideTo=function(_b3){var _b4=_b3.node=d.byId(_b3.node),top=null,_b5=null;var _b6=(function(n){return function(){var cs=d.getComputedStyle(n);var pos=cs.position;top=(pos=="absolute"?n.offsetTop:parseInt(cs.top)||0);_b5=(pos=="absolute"?n.offsetLeft:parseInt(cs.left)||0);if(pos!="absolute"&&pos!="relative"){var ret=d.position(n,true);top=ret.y;_b5=ret.x;n.style.position="absolute";n.style.top=top+"px";n.style.left=_b5+"px";}};})(_b4);_b6();var _b7=d.animateProperty(d.mixin({properties:{top:_b3.top||0,left:_b3.left||0}},_b3));d.connect(_b7,"beforeBegin",_b7,_b6);return _b7;};})();}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(_b8){if(_b8.reset){_b8.reset();}});},validate:function(){var _b9=false;return dojo.every(dojo.map(this.getDescendants(),function(_ba){_ba._hasBeenBlurred=true;var _bb=_ba.disabled||!_ba.validate||_ba.validate();if(!_bb&&!_b9){dojo.window.scrollIntoView(_ba.containerNode||_ba.domNode);_ba.focus();_b9=true;}return _bb;}),function(_bc){return _bc;});},setValues:function(val){dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(obj){var map={};dojo.forEach(this.getDescendants(),function(_bd){if(!_bd.name){return;}var _be=map[_bd.name]||(map[_bd.name]=[]);_be.push(_bd);});for(var _bf in map){if(!map.hasOwnProperty(_bf)){continue;}var _c0=map[_bf],_c1=dojo.getObject(_bf,false,obj);if(_c1===undefined){continue;}if(!dojo.isArray(_c1)){_c1=[_c1];}if(typeof _c0[0].checked=="boolean"){dojo.forEach(_c0,function(w,i){w.set("value",dojo.indexOf(_c1,w.value)!=-1);});}else{if(_c0[0].multiple){_c0[0].set("value",_c1);}else{dojo.forEach(_c0,function(w,i){w.set("value",_c1[i]);});}}}},getValues:function(){dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_getValueAttr:function(){var obj={};dojo.forEach(this.getDescendants(),function(_c2){var _c3=_c2.name;if(!_c3||_c2.disabled){return;}var _c4=_c2.get("value");if(typeof _c2.checked=="boolean"){if(/Radio/.test(_c2.declaredClass)){if(_c4!==false){dojo.setObject(_c3,_c4,obj);}else{_c4=dojo.getObject(_c3,false,obj);if(_c4===undefined){dojo.setObject(_c3,null,obj);}}}else{var ary=dojo.getObject(_c3,false,obj);if(!ary){ary=[];dojo.setObject(_c3,ary,obj);}if(_c4!==false){ary.push(_c4);}}}else{var _c5=dojo.getObject(_c3,false,obj);if(typeof _c5!="undefined"){if(dojo.isArray(_c5)){_c5.push(_c4);}else{dojo.setObject(_c3,[_c5,_c4],obj);}}else{dojo.setObject(_c3,_c4,obj);}}});return obj;},isValid:function(){this._invalidWidgets=dojo.filter(this.getDescendants(),function(_c6){return !_c6.disabled&&_c6.isValid&&!_c6.isValid();});return !this._invalidWidgets.length;},onValidStateChange:function(_c7){},_widgetChange:function(_c8){var _c9=this._lastValidState;if(!_c8||this._lastValidState===undefined){_c9=this.isValid();if(this._lastValidState===undefined){this._lastValidState=_c9;}}else{if(_c8.isValid){this._invalidWidgets=dojo.filter(this._invalidWidgets||[],function(w){return (w!=_c8);},this);if(!_c8.isValid()&&!_c8.get("disabled")){this._invalidWidgets.push(_c8);}_c9=(this._invalidWidgets.length===0);}}if(_c9!==this._lastValidState){this._lastValidState=_c9;this.onValidStateChange(_c9);}},connectChildren:function(){dojo.forEach(this._changeConnections,dojo.hitch(this,"disconnect"));var _ca=this;var _cb=(this._changeConnections=[]);dojo.forEach(dojo.filter(this.getDescendants(),function(_cc){return _cc.validate;}),function(_cd){_cb.push(_ca.connect(_cd,"validate",dojo.hitch(_ca,"_widgetChange",_cd)));_cb.push(_ca.connect(_cd,"_setDisabledAttr",dojo.hitch(_ca,"_widgetChange",_cd)));});this._widgetChange(null);},startup:function(){this.inherited(arguments);this._changeConnections=[];this.connectChildren();}});}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(_ce){},onCancel:function(){},onExecute:function(){},_onSubmit:function(){this.onExecute();this.execute(this.get("value"));},_getFocusItems:function(_cf){var _d0=dijit._getTabNavigable(dojo.byId(_cf));this._firstFocusItem=_d0.lowest||_d0.first||_cf;this._lastFocusItem=_d0.last||_d0.highest||this._firstFocusItem;if(dojo.isMoz&&this._firstFocusItem.tagName.toLowerCase()=="input"&&dojo.getNodeProp(this._firstFocusItem,"type").toLowerCase()=="file"){dojo.attr(_cf,"tabIndex","0");this._firstFocusItem=_cf;}}});}if(!dojo._hasResource["dijit.DialogUnderlay"]){dojo._hasResource["dijit.DialogUnderlay"]=true;dojo.provide("dijit.DialogUnderlay");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(_d1){this.node.className="dijitDialogUnderlay "+_d1;},postCreate:function(){dojo.body().appendChild(this.domNode);},layout:function(){var is=this.node.style,os=this.domNode.style;os.display="none";var _d2=dojo.window.getBox();os.top=_d2.t+"px";os.left=_d2.l+"px";is.width=_d2.w+"px";is.height=_d2.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);}});}if(!dojo._hasResource["dojo.html"]){dojo._hasResource["dojo.html"]=true;dojo.provide("dojo.html");(function(){var _d3=0,d=dojo;dojo.html._secureForInnerHtml=function(_d4){return _d4.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig,"");};dojo.html._emptyNode=dojo.empty;dojo.html._setNodeContent=function(_d5,_d6){d.empty(_d5);if(_d6){if(typeof _d6=="string"){_d6=d._toDom(_d6,_d5.ownerDocument);}if(!_d6.nodeType&&d.isArrayLike(_d6)){for(var _d7=_d6.length,i=0;i<_d6.length;i=_d7==_d6.length?i+1:0){d.place(_d6[i],_d5,"last");}}else{d.place(_d6,_d5,"last");}}return _d5;};dojo.declare("dojo.html._ContentSetter",null,{node:"",content:"",id:"",cleanContent:false,extractContent:false,parseContent:false,constructor:function(_d8,_d9){dojo.mixin(this,_d8||{});_d9=this.node=dojo.byId(this.node||_d9);if(!this.id){this.id=["Setter",(_d9)?_d9.id||_d9.tagName:"",_d3++].join("_");}},set:function(_da,_db){if(undefined!==_da){this.content=_da;}if(_db){this._mixin(_db);}this.onBegin();this.setContent();this.onEnd();return this.node;},setContent:function(){var _dc=this.node;if(!_dc){throw new Error(this.declaredClass+": setContent given no node");}try{_dc=dojo.html._setNodeContent(_dc,this.content);}catch(e){var _dd=this.onContentError(e);try{_dc.innerHTML=_dd;}catch(e){console.error("Fatal "+this.declaredClass+".setContent could not change content due to "+e.message,e);}}this.node=_dc;},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 _de=this.content;if(dojo.isString(_de)){if(this.cleanContent){_de=dojo.html._secureForInnerHtml(_de);}if(this.extractContent){var _df=_de.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_df){_de=_df[1];}}}this.empty();this.content=_de;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(err){return "Error occured setting content: "+err;},_mixin:function(_e0){var _e1={},key;for(key in _e0){if(key in _e1){continue;}this[key]=_e0[key];}},_parse:function(){var _e2=this.node;try{this.parseResults=dojo.parser.parse({rootNode:_e2,dir:this.dir,lang:this.lang});}catch(e){this._onError("Content",e,"Error parsing in _ContentSetter#"+this.id);}},_onError:function(_e3,err,_e4){var _e5=this["on"+_e3+"Error"].call(this,err);if(_e4){console.error(_e4,err);}else{if(_e5){dojo.html._setNodeContent(this.node,_e5,true);}}}});dojo.html.set=function(_e6,_e7,_e8){if(undefined==_e7){console.warn("dojo.html.set: no cont argument provided, using empty string");_e7="";}if(!_e8){return dojo.html._setNodeContent(_e6,_e7,true);}else{var op=new dojo.html._ContentSetter(dojo.mixin(_e8,{content:_e7,node:_e6}));return op.set();}};})();}if(!dojo._hasResource["dijit.layout.ContentPane"]){dojo._hasResource["dijit.layout.ContentPane"]=true;dojo.provide("dijit.layout.ContentPane");dojo.declare("dijit.layout.ContentPane",dijit._Widget,{href:"",extractContent:false,parseOnLoad:true,preventCache:false,preload:false,refreshOnShow:false,loadingMessage:"<span class='dijitContentPaneLoading'>${loadingState}</span>",errorMessage:"<span class='dijitContentPaneError'>${errorState}</span>",isLoaded:false,baseClass:"dijitContentPane",doLayout:true,ioArgs:{},isContainer:true,isLayoutContainer:true,onLoadDeferred:null,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[]}),postMixInProperties:function(){this.inherited(arguments);var _e9=dojo.i18n.getLocalization("dijit","loading",this.lang);this.loadingMessage=dojo.string.substitute(this.loadingMessage,_e9);this.errorMessage=dojo.string.substitute(this.errorMessage,_e9);if(!this.href&&this.srcNodeRef&&this.srcNodeRef.innerHTML){this.isLoaded=true;}},buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}},postCreate:function(){this.domNode.title="";if(!dojo.attr(this.domNode,"role")){dijit.setWaiRole(this.domNode,"group");}dojo.addClass(this.domNode,this.baseClass);},startup:function(){if(this._started){return;}var _ea=dijit._Contained.prototype.getParent.call(this);this._childOfLayoutWidget=_ea&&_ea.isLayoutContainer;this._needLayout=!this._childOfLayoutWidget;if(this.isLoaded){dojo.forEach(this.getChildren(),function(_eb){_eb.startup();});}if(this._isShown()||this.preload){this._onShow();}this.inherited(arguments);},_checkIfSingleChild:function(){var _ec=dojo.query("> *",this.containerNode).filter(function(_ed){return _ed.tagName!=="SCRIPT";}),_ee=_ec.filter(function(_ef){return dojo.hasAttr(_ef,"dojoType")||dojo.hasAttr(_ef,"widgetId");}),_f0=dojo.filter(_ee.map(dijit.byNode),function(_f1){return _f1&&_f1.domNode&&_f1.resize;});if(_ec.length==_ee.length&&_f0.length==1){this._singleChild=_f0[0];}else{delete this._singleChild;}dojo.toggleClass(this.containerNode,this.baseClass+"SingleChild",!!this._singleChild);},setHref:function(_f2){dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.","","2.0");return this.set("href",_f2);},_setHrefAttr:function(_f3){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this.href=_f3;if(this._created&&(this.preload||this._isShown())){this._load();}else{this._hrefChanged=true;}return this.onLoadDeferred;},setContent:function(_f4){dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated.  Use set('content', ...) instead.","","2.0");this.set("content",_f4);},_setContentAttr:function(_f5){this.href="";this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this._setContent(_f5||"");this._isDownloaded=false;return this.onLoadDeferred;},_getContentAttr:function(){return this.containerNode.innerHTML;},cancel:function(){if(this._xhrDfd&&(this._xhrDfd.fired==-1)){this._xhrDfd.cancel();}delete this._xhrDfd;this.onLoadDeferred=null;},uninitialize:function(){if(this._beingDestroyed){this.cancel();}this.inherited(arguments);},destroyRecursive:function(_f6){if(this._beingDestroyed){return;}this.inherited(arguments);},resize:function(_f7,_f8){if(!this._wasShown){this._onShow();}this._resizeCalled=true;if(_f7){dojo.marginBox(this.domNode,_f7);}var cn=this.containerNode;if(cn===this.domNode){var mb=_f8||{};dojo.mixin(mb,_f7||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(cn),mb);}this._contentBox=dijit.layout.marginBox2contentBox(cn,mb);}else{this._contentBox=dojo.contentBox(cn);}this._layoutChildren();},_isShown:function(){if(this._childOfLayoutWidget){if(this._resizeCalled&&"open" in this){return this.open;}return this._resizeCalled;}else{if("open" in this){return this.open;}else{var _f9=this.domNode;return (_f9.style.display!="none")&&(_f9.style.visibility!="hidden")&&!dojo.hasClass(_f9,"dijitHidden");}}},_onShow:function(){if(this.href){if(!this._xhrDfd&&(!this.isLoaded||this._hrefChanged||this.refreshOnShow)){this.refresh();}}else{if(!this._childOfLayoutWidget&&this._needLayout){this._layoutChildren();}}this.inherited(arguments);this._wasShown=true;},refresh:function(){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this._load();return this.onLoadDeferred;},_load:function(){this._setContent(this.onDownloadStart(),true);var _fa=this;var _fb={preventCache:(this.preventCache||this.refreshOnShow),url:this.href,handleAs:"text"};if(dojo.isObject(this.ioArgs)){dojo.mixin(_fb,this.ioArgs);}var _fc=(this._xhrDfd=(this.ioMethod||dojo.xhrGet)(_fb));_fc.addCallback(function(_fd){try{_fa._isDownloaded=true;_fa._setContent(_fd,false);_fa.onDownloadEnd();}catch(err){_fa._onError("Content",err);}delete _fa._xhrDfd;return _fd;});_fc.addErrback(function(err){if(!_fc.canceled){_fa._onError("Download",err);}delete _fa._xhrDfd;return err;});delete this._hrefChanged;},_onLoadHandler:function(_fe){this.isLoaded=true;try{this.onLoadDeferred.callback(_fe);this.onLoad(_fe);}catch(e){console.error("Error "+this.widgetId+" running custom onLoad code: "+e.message);}},_onUnloadHandler:function(){this.isLoaded=false;try{this.onUnload();}catch(e){console.error("Error "+this.widgetId+" running custom onUnload code: "+e.message);}},destroyDescendants:function(){if(this.isLoaded){this._onUnloadHandler();}var _ff=this._contentSetter;dojo.forEach(this.getChildren(),function(_100){if(_100.destroyRecursive){_100.destroyRecursive();}});if(_ff){dojo.forEach(_ff.parseResults,function(_101){if(_101.destroyRecursive&&_101.domNode&&_101.domNode.parentNode==dojo.body()){_101.destroyRecursive();}});delete _ff.parseResults;}dojo.html._emptyNode(this.containerNode);delete this._singleChild;},_setContent:function(cont,_102){this.destroyDescendants();var _103=this._contentSetter;if(!(_103&&_103 instanceof dojo.html._ContentSetter)){_103=this._contentSetter=new dojo.html._ContentSetter({node:this.containerNode,_onError:dojo.hitch(this,this._onError),onContentError:dojo.hitch(this,function(e){var _104=this.onContentError(e);try{this.containerNode.innerHTML=_104;}catch(e){console.error("Fatal "+this.id+" could not change content due to "+e.message,e);}})});}var _105=dojo.mixin({cleanContent:this.cleanContent,extractContent:this.extractContent,parseContent:this.parseOnLoad,dir:this.dir,lang:this.lang},this._contentSetterParams||{});dojo.mixin(_103,_105);_103.set((dojo.isObject(cont)&&cont.domNode)?cont.domNode:cont);delete this._contentSetterParams;if(!_102){dojo.forEach(this.getChildren(),function(_106){if(!this.parseOnLoad||_106.getParent){_106.startup();}},this);this._scheduleLayout();this._onLoadHandler(cont);}},_onError:function(type,err,_107){this.onLoadDeferred.errback(err);var _108=this["on"+type+"Error"].call(this,err);if(_107){console.error(_107,err);}else{if(_108){this._setContent(_108,true);}}},_scheduleLayout:function(){if(this._isShown()){this._layoutChildren();}else{this._needLayout=true;}},_layoutChildren:function(){if(this.doLayout){this._checkIfSingleChild();}if(this._singleChild&&this._singleChild.resize){var cb=this._contentBox||dojo.contentBox(this.containerNode);this._singleChild.resize({w:cb.w,h:cb.h});}else{dojo.forEach(this.getChildren(),function(_109){if(_109.resize){_109.resize();}});}delete this._needLayout;},onLoad:function(data){},onUnload:function(){},onDownloadStart:function(){return this.loadingMessage;},onContentError:function(_10a){},onDownloadError:function(_10b){return this.errorMessage;},onDownloadEnd:function(){}});}if(!dojo._hasResource["dijit.TooltipDialog"]){dojo._hasResource["dijit.TooltipDialog"]=true;dojo.provide("dijit.TooltipDialog");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(node,_10c,_10d){var c=this._currentOrientClass;if(c){dojo.removeClass(this.domNode,c);}c="dijitTooltipAB"+(_10d.charAt(1)=="L"?"Left":"Right")+" dijitTooltip"+(_10d.charAt(0)=="T"?"Below":"Above");dojo.addClass(this.domNode,c);this._currentOrientClass=c;},onOpen:function(pos){this.orient(this.domNode,pos.aroundCorner,pos.corner);this._onShow();if(this.autofocus){this._getFocusItems(this.containerNode);dijit.focus(this._firstFocusItem);}},onClose:function(){this.onHide();},_onKey:function(evt){var node=evt.target;var dk=dojo.keys;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.containerNode);}var _10e=(this._firstFocusItem==this._lastFocusItem);if(evt.charOrCode==dk.ESCAPE){setTimeout(dojo.hitch(this,"onCancel"),0);dojo.stopEvent(evt);}else{if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_10e){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_10e){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{if(evt.charOrCode===dk.TAB){evt.stopPropagation();}}}}}});}if(!dojo._hasResource["dijit.Dialog"]){dojo._hasResource["dijit.Dialog"]=true;dojo.provide("dijit.Dialog");dojo.declare("dijit._DialogBase",[dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/Dialog.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\"></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\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),baseClass:"dijitDialog",cssStateNodes:{closeButtonNode:"dijitDialogCloseIcon"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[{node:"titleNode",type:"innerHTML"},{node:"titleBar",type:"attribute"}],"aria-describedby":""}),open:false,duration:dijit.defaultDuration,refocus:true,autofocus:true,_firstFocusItem:null,_lastFocusItem:null,doLayout:false,draggable:true,"aria-describedby":"",postMixInProperties:function(){var _10f=dojo.i18n.getLocalization("dijit","common");dojo.mixin(this,_10f);this.inherited(arguments);},postCreate:function(){dojo.style(this.domNode,{display:"none",position:"absolute"});dojo.body().appendChild(this.domNode);this.inherited(arguments);this.connect(this,"onExecute","hide");this.connect(this,"onCancel","hide");this._modalconnects=[];},onLoad:function(){this._position();if(this.autofocus){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}this.inherited(arguments);},_endDrag:function(e){if(e&&e.node&&e.node===this.domNode){this._relativePosition=dojo.position(e.node);}},_setup:function(){var node=this.domNode;if(this.titleBar&&this.draggable){this._moveable=(dojo.isIE==6)?new dojo.dnd.TimedMoveable(node,{handle:this.titleBar}):new dojo.dnd.Moveable(node,{handle:this.titleBar,timeout:0});dojo.subscribe("/dnd/move/stop",this,"_endDrag");}else{dojo.addClass(node,"dijitDialogFixed");}this.underlayAttrs={dialogId:this.id,"class":dojo.map(this["class"].split(/\s/),function(s){return s+"_underlay";}).join(" ")};this._fadeIn=dojo.fadeIn({node:node,duration:this.duration,beforeBegin:dojo.hitch(this,function(){var _110=dijit._underlay;if(!_110){_110=dijit._underlay=new dijit.DialogUnderlay(this.underlayAttrs);}else{_110.set(this.underlayAttrs);}var ds=dijit._dialogStack,_111=948+ds.length*2;if(ds.length==1){_110.show();}dojo.style(dijit._underlay.domNode,"zIndex",_111);dojo.style(this.domNode,"zIndex",_111+1);}),onEnd:dojo.hitch(this,function(){if(this.autofocus){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}})});this._fadeOut=dojo.fadeOut({node:node,duration:this.duration,onEnd:dojo.hitch(this,function(){node.style.display="none";var ds=dijit._dialogStack;if(ds.length==0){dijit._underlay.hide();}else{dojo.style(dijit._underlay.domNode,"zIndex",948+ds.length*2);dijit._underlay.set(ds[ds.length-1].underlayAttrs);}if(this.refocus){var _112=this._savedFocus;if(ds.length>0){var pd=ds[ds.length-1];if(!dojo.isDescendant(_112.node,pd.domNode)){pd._getFocusItems(pd.domNode);_112=pd._firstFocusItem;}}dijit.focus(_112);}})});},uninitialize:function(){var _113=false;if(this._fadeIn&&this._fadeIn.status()=="playing"){_113=true;this._fadeIn.stop();}if(this._fadeOut&&this._fadeOut.status()=="playing"){_113=true;this._fadeOut.stop();}if((this.open||_113)&&!dijit._underlay._destroyed){dijit._underlay.hide();}if(this._moveable){this._moveable.destroy();}this.inherited(arguments);},_size:function(){this._checkIfSingleChild();if(this._singleChild){if(this._singleChildOriginalStyle){this._singleChild.domNode.style.cssText=this._singleChildOriginalStyle;}delete this._singleChildOriginalStyle;}else{dojo.style(this.containerNode,{width:"auto",height:"auto"});}var mb=dojo.marginBox(this.domNode);var _114=dojo.window.getBox();if(mb.w>=_114.w||mb.h>=_114.h){var w=Math.min(mb.w,Math.floor(_114.w*0.75)),h=Math.min(mb.h,Math.floor(_114.h*0.75));if(this._singleChild&&this._singleChild.resize){this._singleChildOriginalStyle=this._singleChild.domNode.style.cssText;this._singleChild.resize({w:w,h:h});}else{dojo.style(this.containerNode,{width:w+"px",height:h+"px",overflow:"auto",position:"relative"});}}else{if(this._singleChild&&this._singleChild.resize){this._singleChild.resize();}}},_position:function(){if(!dojo.hasClass(dojo.body(),"dojoMove")){var node=this.domNode,_115=dojo.window.getBox(),p=this._relativePosition,bb=p?null:dojo._getBorderBox(node),l=Math.floor(_115.l+(p?p.x:(_115.w-bb.w)/2)),t=Math.floor(_115.t+(p?p.y:(_115.h-bb.h)/2));dojo.style(node,{left:l+"px",top:t+"px"});}},_onKey:function(evt){var ds=dijit._dialogStack;if(ds[ds.length-1]!=this){return;}if(evt.charOrCode){var dk=dojo.keys;var node=evt.target;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.domNode);}var _116=(this._firstFocusItem==this._lastFocusItem);if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_116){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_116){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{while(node){if(node==this.domNode||dojo.hasClass(node,"dijitPopup")){if(evt.charOrCode==dk.ESCAPE){this.onCancel();}else{return;}}node=node.parentNode;}if(evt.charOrCode!==dk.TAB){dojo.stopEvent(evt);}else{if(!dojo.isOpera){try{this._firstFocusItem.focus();}catch(e){}}}}}}},show:function(){if(this.open){return;}if(!this._alreadyInitialized){this._setup();this._alreadyInitialized=true;}if(this._fadeOut.status()=="playing"){this._fadeOut.stop();}this._modalconnects.push(dojo.connect(window,"onscroll",this,"layout"));this._modalconnects.push(dojo.connect(window,"onresize",this,function(){var _117=dojo.window.getBox();if(!this._oldViewport||_117.h!=this._oldViewport.h||_117.w!=this._oldViewport.w){this.layout();this._oldViewport=_117;}}));this._modalconnects.push(dojo.connect(dojo.doc.documentElement,"onkeypress",this,"_onKey"));dojo.style(this.domNode,{opacity:0,display:""});this.open=true;this._onShow();this._size();this._position();dijit._dialogStack.push(this);this._fadeIn.play();this._savedFocus=dijit.getFocus(this);},hide:function(){var ds=dijit._dialogStack;if(!this._alreadyInitialized||this!=ds[ds.length-1]){return;}if(this._fadeIn.status()=="playing"){this._fadeIn.stop();}ds.pop();this._fadeOut.play();if(this._scrollConnected){this._scrollConnected=false;}dojo.forEach(this._modalconnects,dojo.disconnect);this._modalconnects=[];if(this._relativePosition){delete this._relativePosition;}this.open=false;this.onHide();},layout:function(){if(this.domNode.style.display!="none"){if(dijit._underlay){dijit._underlay.layout();}this._position();}},destroy:function(){dojo.forEach(this._modalconnects,dojo.disconnect);if(this.refocus&&this.open){setTimeout(dojo.hitch(dijit,"focus",this._savedFocus),25);}this.inherited(arguments);}});dojo.declare("dijit.Dialog",[dijit.layout.ContentPane,dijit._DialogBase],{});dijit._dialogStack=[];}if(!dojo._hasResource["dijit._editor.selection"]){dojo._hasResource["dijit._editor.selection"]=true;dojo.provide("dijit._editor.selection");dojo.mixin(dijit._editor.selection,{getType:function(){if(dojo.isIE){return dojo.doc.selection.type.toLowerCase();}else{var _118="text";var oSel;try{oSel=dojo.global.getSelection();}catch(e){}if(oSel&&oSel.rangeCount==1){var _119=oSel.getRangeAt(0);if((_119.startContainer==_119.endContainer)&&((_119.endOffset-_119.startOffset)==1)&&(_119.startContainer.nodeType!=3)){_118="control";}}return _118;}},getSelectedText:function(){if(dojo.isIE){if(dijit._editor.selection.getType()=="control"){return null;}return dojo.doc.selection.createRange().text;}else{var _11a=dojo.global.getSelection();if(_11a){return _11a.toString();}}return "";},getSelectedHtml:function(){if(dojo.isIE){if(dijit._editor.selection.getType()=="control"){return null;}return dojo.doc.selection.createRange().htmlText;}else{var _11b=dojo.global.getSelection();if(_11b&&_11b.rangeCount){var i;var html="";for(i=0;i<_11b.rangeCount;i++){var frag=_11b.getRangeAt(i).cloneContents();var div=dojo.doc.createElement("div");div.appendChild(frag);html+=div.innerHTML;}return html;}return null;}},getSelectedElement:function(){if(dijit._editor.selection.getType()=="control"){if(dojo.isIE){var _11c=dojo.doc.selection.createRange();if(_11c&&_11c.item){return dojo.doc.selection.createRange().item(0);}}else{var _11d=dojo.global.getSelection();return _11d.anchorNode.childNodes[_11d.anchorOffset];}}return null;},getParentElement:function(){if(dijit._editor.selection.getType()=="control"){var p=this.getSelectedElement();if(p){return p.parentNode;}}else{if(dojo.isIE){var r=dojo.doc.selection.createRange();r.collapse(true);return r.parentElement();}else{var _11e=dojo.global.getSelection();if(_11e){var node=_11e.anchorNode;while(node&&(node.nodeType!=1)){node=node.parentNode;}return node;}}}return null;},hasAncestorElement:function(_11f){return this.getAncestorElement.apply(this,arguments)!=null;},getAncestorElement:function(_120){var node=this.getSelectedElement()||this.getParentElement();return this.getParentOfType(node,arguments);},isTag:function(node,tags){if(node&&node.tagName){var _121=node.tagName.toLowerCase();for(var i=0;i<tags.length;i++){var _122=String(tags[i]).toLowerCase();if(_121==_122){return _122;}}}return "";},getParentOfType:function(node,tags){while(node){if(this.isTag(node,tags).length){return node;}node=node.parentNode;}return null;},collapse:function(_123){if(window.getSelection){var _124=dojo.global.getSelection();if(_124.removeAllRanges){if(_123){_124.collapseToStart();}else{_124.collapseToEnd();}}else{_124.collapse(_123);}}else{if(dojo.isIE){var _125=dojo.doc.selection.createRange();_125.collapse(_123);_125.select();}}},remove:function(){var sel=dojo.doc.selection;if(dojo.isIE){if(sel.type.toLowerCase()!="none"){sel.clear();}return sel;}else{sel=dojo.global.getSelection();sel.deleteFromDocument();return sel;}},selectElementChildren:function(_126,_127){var win=dojo.global;var doc=dojo.doc;var _128;_126=dojo.byId(_126);if(doc.selection&&dojo.isIE&&dojo.body().createTextRange){_128=_126.ownerDocument.body.createTextRange();_128.moveToElementText(_126);if(!_127){try{_128.select();}catch(e){}}}else{if(win.getSelection){var _129=dojo.global.getSelection();if(dojo.isOpera){if(_129.rangeCount){_128=_129.getRangeAt(0);}else{_128=doc.createRange();}_128.setStart(_126,0);_128.setEnd(_126,(_126.nodeType==3)?_126.length:_126.childNodes.length);_129.addRange(_128);}else{_129.selectAllChildren(_126);}}}},selectElement:function(_12a,_12b){var _12c;var doc=dojo.doc;var win=dojo.global;_12a=dojo.byId(_12a);if(dojo.isIE&&dojo.body().createTextRange){try{_12c=dojo.body().createControlRange();_12c.addElement(_12a);if(!_12b){_12c.select();}}catch(e){this.selectElementChildren(_12a,_12b);}}else{if(dojo.global.getSelection){var _12d=win.getSelection();_12c=doc.createRange();if(_12d.removeAllRanges){if(dojo.isOpera){if(_12d.getRangeAt(0)){_12c=_12d.getRangeAt(0);}}_12c.selectNode(_12a);_12d.removeAllRanges();_12d.addRange(_12c);}}}},inSelection:function(node){if(node){var _12e;var doc=dojo.doc;var _12f;if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.rangeCount>0){_12f=sel.getRangeAt(0);}if(_12f&&_12f.compareBoundaryPoints&&doc.createRange){try{_12e=doc.createRange();_12e.setStart(node,0);if(_12f.compareBoundaryPoints(_12f.START_TO_END,_12e)===1){return true;}}catch(e){}}}else{if(doc.selection){_12f=doc.selection.createRange();try{_12e=node.ownerDocument.body.createControlRange();if(_12e){_12e.addElement(node);}}catch(e1){try{_12e=node.ownerDocument.body.createTextRange();_12e.moveToElementText(node);}catch(e2){}}if(_12f&&_12e){if(_12f.compareEndPoints("EndToStart",_12e)===1){return true;}}}}}return false;}});}if(!dojo._hasResource["dijit._editor.range"]){dojo._hasResource["dijit._editor.range"]=true;dojo.provide("dijit._editor.range");dijit.range={};dijit.range.getIndex=function(node,_130){var ret=[],retR=[];var stop=_130;var _131=node;var _132,n;while(node!=stop){var i=0;_132=node.parentNode;while((n=_132.childNodes[i++])){if(n===node){--i;break;}}ret.unshift(i);retR.unshift(i-_132.childNodes.length);node=_132;}if(ret.length>0&&_131.nodeType==3){n=_131.previousSibling;while(n&&n.nodeType==3){ret[ret.length-1]--;n=n.previousSibling;}n=_131.nextSibling;while(n&&n.nodeType==3){retR[retR.length-1]++;n=n.nextSibling;}}return {o:ret,r:retR};};dijit.range.getNode=function(_133,_134){if(!dojo.isArray(_133)||_133.length==0){return _134;}var node=_134;dojo.every(_133,function(i){if(i>=0&&i<node.childNodes.length){node=node.childNodes[i];}else{node=null;return false;}return true;});return node;};dijit.range.getCommonAncestor=function(n1,n2,root){root=root||n1.ownerDocument.body;var _135=function(n){var as=[];while(n){as.unshift(n);if(n!==root){n=n.parentNode;}else{break;}}return as;};var n1as=_135(n1);var n2as=_135(n2);var m=Math.min(n1as.length,n2as.length);var com=n1as[0];for(var i=1;i<m;i++){if(n1as[i]===n2as[i]){com=n1as[i];}else{break;}}return com;};dijit.range.getAncestor=function(node,_136,root){root=root||node.ownerDocument.body;while(node&&node!==root){var name=node.nodeName.toUpperCase();if(_136.test(name)){return node;}node=node.parentNode;}return null;};dijit.range.BlockTagNames=/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;dijit.range.getBlockAncestor=function(node,_137,root){root=root||node.ownerDocument.body;_137=_137||dijit.range.BlockTagNames;var _138=null,_139;while(node&&node!==root){var name=node.nodeName.toUpperCase();if(!_138&&_137.test(name)){_138=node;}if(!_139&&(/^(?:BODY|TD|TH|CAPTION)$/).test(name)){_139=node;}node=node.parentNode;}return {blockNode:_138,blockContainer:_139||node.ownerDocument.body};};dijit.range.atBeginningOfContainer=function(_13a,node,_13b){var _13c=false;var _13d=(_13b==0);if(!_13d&&node.nodeType==3){if(/^[\s\xA0]+$/.test(node.nodeValue.substr(0,_13b))){_13d=true;}}if(_13d){var _13e=node;_13c=true;while(_13e&&_13e!==_13a){if(_13e.previousSibling){_13c=false;break;}_13e=_13e.parentNode;}}return _13c;};dijit.range.atEndOfContainer=function(_13f,node,_140){var _141=false;var _142=(_140==(node.length||node.childNodes.length));if(!_142&&node.nodeType==3){if(/^[\s\xA0]+$/.test(node.nodeValue.substr(_140))){_142=true;}}if(_142){var _143=node;_141=true;while(_143&&_143!==_13f){if(_143.nextSibling){_141=false;break;}_143=_143.parentNode;}}return _141;};dijit.range.adjacentNoneTextNode=function(_144,next){var node=_144;var len=(0-_144.length)||0;var prop=next?"nextSibling":"previousSibling";while(node){if(node.nodeType!=3){break;}len+=node.length;node=node[prop];}return [node,len];};dijit.range._w3c=Boolean(window["getSelection"]);dijit.range.create=function(win){if(dijit.range._w3c){return (win||dojo.global).document.createRange();}else{return new dijit.range.W3CRange;}};dijit.range.getSelection=function(win,_145){if(dijit.range._w3c){return win.getSelection();}else{var s=new dijit.range.ie.selection(win);if(!_145){s._getCurrentSelection();}return s;}};if(!dijit.range._w3c){dijit.range.ie={cachedSelection:{},selection:function(win){this._ranges=[];this.addRange=function(r,_146){this._ranges.push(r);if(!_146){r._select();}this.rangeCount=this._ranges.length;};this.removeAllRanges=function(){this._ranges=[];this.rangeCount=0;};var _147=function(){var r=win.document.selection.createRange();var type=win.document.selection.type.toUpperCase();if(type=="CONTROL"){return new dijit.range.W3CRange(dijit.range.ie.decomposeControlRange(r));}else{return new dijit.range.W3CRange(dijit.range.ie.decomposeTextRange(r));}};this.getRangeAt=function(i){return this._ranges[i];};this._getCurrentSelection=function(){this.removeAllRanges();var r=_147();if(r){this.addRange(r,true);}};},decomposeControlRange:function(_148){var _149=_148.item(0),_14a=_148.item(_148.length-1);var _14b=_149.parentNode,_14c=_14a.parentNode;var _14d=dijit.range.getIndex(_149,_14b).o;var _14e=dijit.range.getIndex(_14a,_14c).o+1;return [_14b,_14d,_14c,_14e];},getEndPoint:function(_14f,end){var _150=_14f.duplicate();_150.collapse(!end);var _151="EndTo"+(end?"End":"Start");var _152=_150.parentElement();var _153,_154,_155;if(_152.childNodes.length>0){dojo.every(_152.childNodes,function(node,i){var _156;if(node.nodeType!=3){_150.moveToElementText(node);if(_150.compareEndPoints(_151,_14f)>0){if(_155&&_155.nodeType==3){_153=_155;_156=true;}else{_153=_152;_154=i;return false;}}else{if(i==_152.childNodes.length-1){_153=_152;_154=_152.childNodes.length;return false;}}}else{if(i==_152.childNodes.length-1){_153=node;_156=true;}}if(_156&&_153){var _157=dijit.range.adjacentNoneTextNode(_153)[0];if(_157){_153=_157.nextSibling;}else{_153=_152.firstChild;}var _158=dijit.range.adjacentNoneTextNode(_153);_157=_158[0];var _159=_158[1];if(_157){_150.moveToElementText(_157);_150.collapse(false);}else{_150.moveToElementText(_152);}_150.setEndPoint(_151,_14f);_154=_150.text.length-_159;return false;}_155=node;return true;});}else{_153=_152;_154=0;}if(!end&&_153.nodeType==1&&_154==_153.childNodes.length){var _15a=_153.nextSibling;if(_15a&&_15a.nodeType==3){_153=_15a;_154=0;}}return [_153,_154];},setEndPoint:function(_15b,_15c,_15d){var _15e=_15b.duplicate(),node,len;if(_15c.nodeType!=3){if(_15d>0){node=_15c.childNodes[_15d-1];if(node){if(node.nodeType==3){_15c=node;_15d=node.length;}else{if(node.nextSibling&&node.nextSibling.nodeType==3){_15c=node.nextSibling;_15d=0;}else{_15e.moveToElementText(node.nextSibling?node:_15c);var _15f=node.parentNode;var _160=_15f.insertBefore(node.ownerDocument.createTextNode(" "),node.nextSibling);_15e.collapse(false);_15f.removeChild(_160);}}}}else{_15e.moveToElementText(_15c);_15e.collapse(true);}}if(_15c.nodeType==3){var _161=dijit.range.adjacentNoneTextNode(_15c);var _162=_161[0];len=_161[1];if(_162){_15e.moveToElementText(_162);_15e.collapse(false);if(_162.contentEditable!="inherit"){len++;}}else{_15e.moveToElementText(_15c.parentNode);_15e.collapse(true);}_15d+=len;if(_15d>0){if(_15e.move("character",_15d)!=_15d){console.error("Error when moving!");}}}return _15e;},decomposeTextRange:function(_163){var _164=dijit.range.ie.getEndPoint(_163);var _165=_164[0],_166=_164[1];var _167=_164[0],_168=_164[1];if(_163.htmlText.length){if(_163.htmlText==_163.text){_168=_166+_163.text.length;}else{_164=dijit.range.ie.getEndPoint(_163,true);_167=_164[0],_168=_164[1];}}return [_165,_166,_167,_168];},setRange:function(_169,_16a,_16b,_16c,_16d,_16e){var _16f=dijit.range.ie.setEndPoint(_169,_16a,_16b);_169.setEndPoint("StartToStart",_16f);if(!_16e){var end=dijit.range.ie.setEndPoint(_169,_16c,_16d);}_169.setEndPoint("EndToEnd",end||_16f);return _169;}};dojo.declare("dijit.range.W3CRange",null,{constructor:function(){if(arguments.length>0){this.setStart(arguments[0][0],arguments[0][1]);this.setEnd(arguments[0][2],arguments[0][3]);}else{this.commonAncestorContainer=null;this.startContainer=null;this.startOffset=0;this.endContainer=null;this.endOffset=0;this.collapsed=true;}},_updateInternal:function(){if(this.startContainer!==this.endContainer){this.commonAncestorContainer=dijit.range.getCommonAncestor(this.startContainer,this.endContainer);}else{this.commonAncestorContainer=this.startContainer;}this.collapsed=(this.startContainer===this.endContainer)&&(this.startOffset==this.endOffset);},setStart:function(node,_170){_170=parseInt(_170);if(this.startContainer===node&&this.startOffset==_170){return;}delete this._cachedBookmark;this.startContainer=node;this.startOffset=_170;if(!this.endContainer){this.setEnd(node,_170);}else{this._updateInternal();}},setEnd:function(node,_171){_171=parseInt(_171);if(this.endContainer===node&&this.endOffset==_171){return;}delete this._cachedBookmark;this.endContainer=node;this.endOffset=_171;if(!this.startContainer){this.setStart(node,_171);}else{this._updateInternal();}},setStartAfter:function(node,_172){this._setPoint("setStart",node,_172,1);},setStartBefore:function(node,_173){this._setPoint("setStart",node,_173,0);},setEndAfter:function(node,_174){this._setPoint("setEnd",node,_174,1);},setEndBefore:function(node,_175){this._setPoint("setEnd",node,_175,0);},_setPoint:function(what,node,_176,ext){var _177=dijit.range.getIndex(node,node.parentNode).o;this[what](node.parentNode,_177.pop()+ext);},_getIERange:function(){var r=(this._body||this.endContainer.ownerDocument.body).createTextRange();dijit.range.ie.setRange(r,this.startContainer,this.startOffset,this.endContainer,this.endOffset,this.collapsed);return r;},getBookmark:function(body){this._getIERange();return this._cachedBookmark;},_select:function(){var r=this._getIERange();r.select();},deleteContents:function(){var r=this._getIERange();r.pasteHTML("");this.endContainer=this.startContainer;this.endOffset=this.startOffset;this.collapsed=true;},cloneRange:function(){var r=new dijit.range.W3CRange([this.startContainer,this.startOffset,this.endContainer,this.endOffset]);r._body=this._body;return r;},detach:function(){this._body=null;this.commonAncestorContainer=null;this.startContainer=null;this.startOffset=0;this.endContainer=null;this.endOffset=0;this.collapsed=true;}});}}if(!dojo._hasResource["dijit._editor.html"]){dojo._hasResource["dijit._editor.html"]=true;dojo.provide("dijit._editor.html");dijit._editor.escapeXml=function(str,_178){str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");if(!_178){str=str.replace(/'/gm,"&#39;");}return str;};dijit._editor.getNodeHtml=function(node){var _179;switch(node.nodeType){case 1:var _17a=node.nodeName.toLowerCase();if(!_17a||_17a.charAt(0)=="/"){return "";}_179="<"+_17a;var _17b=[];var attr;if(dojo.isIE&&node.outerHTML){var s=node.outerHTML;s=s.substr(0,s.indexOf(">")).replace(/(['"])[^"']*\1/g,"");var reg=/(\b\w+)\s?=/g;var m,key;while((m=reg.exec(s))){key=m[1];if(key.substr(0,3)!="_dj"){if(key=="src"||key=="href"){if(node.getAttribute("_djrealurl")){_17b.push([key,node.getAttribute("_djrealurl")]);continue;}}var val,_17c;switch(key){case "style":val=node.style.cssText.toLowerCase();break;case "class":val=node.className;break;case "width":if(_17a==="img"){_17c=/width=(\S+)/i.exec(s);if(_17c){val=_17c[1];}break;}case "height":if(_17a==="img"){_17c=/height=(\S+)/i.exec(s);if(_17c){val=_17c[1];}break;}default:val=node.getAttribute(key);}if(val!=null){_17b.push([key,val.toString()]);}}}}else{var i=0;while((attr=node.attributes[i++])){var n=attr.name;if(n.substr(0,3)!="_dj"){var v=attr.value;if(n=="src"||n=="href"){if(node.getAttribute("_djrealurl")){v=node.getAttribute("_djrealurl");}}_17b.push([n,v]);}}}_17b.sort(function(a,b){return a[0]<b[0]?-1:(a[0]==b[0]?0:1);});var j=0;while((attr=_17b[j++])){_179+=" "+attr[0]+"=\""+(dojo.isString(attr[1])?dijit._editor.escapeXml(attr[1],true):attr[1])+"\"";}if(_17a==="script"){_179+=">"+node.innerHTML+"</"+_17a+">";}else{if(node.childNodes.length){_179+=">"+dijit._editor.getChildrenHtml(node)+"</"+_17a+">";}else{switch(_17a){case "br":case "hr":case "img":case "input":case "base":case "meta":case "area":case "basefont":_179+=" />";break;default:_179+="></"+_17a+">";}}}break;case 4:case 3:_179=dijit._editor.escapeXml(node.nodeValue,true);break;case 8:_179="<!--"+dijit._editor.escapeXml(node.nodeValue,true)+"-->";break;default:_179="<!-- Element not recognized - Type: "+node.nodeType+" Name: "+node.nodeName+"-->";}return _179;};dijit._editor.getChildrenHtml=function(dom){var out="";if(!dom){return out;}var _17d=dom["childNodes"]||dom;var _17e=!dojo.isIE||_17d!==dom;var node,i=0;while((node=_17d[i++])){if(!_17e||node.parentNode==dom){out+=dijit._editor.getNodeHtml(node);}}return out;};}if(!dojo._hasResource["dijit._editor.RichText"]){dojo._hasResource["dijit._editor.RichText"]=true;dojo.provide("dijit._editor.RichText");if(!dojo.config["useXDomain"]||dojo.config["allowXdRichTextSave"]){if(dojo._postLoad){(function(){var _17f=dojo.doc.createElement("textarea");_17f.id=dijit._scopeName+"._editor.RichText.savedContent";dojo.style(_17f,{display:"none",position:"absolute",top:"-100px",height:"3px",width:"3px"});dojo.body().appendChild(_17f);})();}else{try{dojo.doc.write("<textarea id=\""+dijit._scopeName+"._editor.RichText.savedContent\" "+"style=\"display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;\"></textarea>");}catch(e){}}}dojo.declare("dijit._editor.RichText",[dijit._Widget,dijit._CssStateMixin],{constructor:function(_180){this.contentPreFilters=[];this.contentPostFilters=[];this.contentDomPreFilters=[];this.contentDomPostFilters=[];this.editingAreaStyleSheets=[];this.events=[].concat(this.events);this._keyHandlers={};this.contentPreFilters.push(dojo.hitch(this,"_preFixUrlAttributes"));if(dojo.isMoz){this.contentPreFilters.push(this._normalizeFontStyle);this.contentPostFilters.push(this._removeMozBogus);}if(dojo.isWebKit){this.contentPreFilters.push(this._removeWebkitBogus);this.contentPostFilters.push(this._removeWebkitBogus);}if(dojo.isIE){this.contentPostFilters.push(this._normalizeFontStyle);}if(_180&&dojo.isString(_180.value)){this.value=_180.value;}this.onLoadDeferred=new dojo.Deferred();},baseClass:"dijitEditor",inheritWidth:false,focusOnLoad:false,name:"",styleSheets:"",_content:"",height:"300px",minHeight:"1em",isClosed:true,isLoaded:false,_SEPARATOR:"@@**%%__RICHTEXTBOUNDRY__%%**@@",onLoadDeferred:null,isTabIndent:false,disableSpellCheck:false,postCreate:function(){if("textarea"==this.domNode.tagName.toLowerCase()){console.warn("RichText should not be used with the TEXTAREA tag.  See dijit._editor.RichText docs.");}this.inherited(arguments);dojo.publish(dijit._scopeName+"._editor.RichText::init",[this]);this.open();this.setupDefaultShortcuts();},setupDefaultShortcuts:function(){var exec=dojo.hitch(this,function(cmd,arg){return function(){return !this.execCommand(cmd,arg);};});var _181={b:exec("bold"),i:exec("italic"),u:exec("underline"),a:exec("selectall"),s:function(){this.save(true);},m:function(){this.isTabIndent=!this.isTabIndent;},"1":exec("formatblock","h1"),"2":exec("formatblock","h2"),"3":exec("formatblock","h3"),"4":exec("formatblock","h4"),"\\":exec("insertunorderedlist")};if(!dojo.isIE){_181.Z=exec("redo");}for(var key in _181){this.addKeyHandler(key,true,false,_181[key]);}},events:["onKeyPress","onKeyDown","onKeyUp","onClick"],captureEvents:[],_editorCommandsLocalized:false,_localizeEditorCommands:function(){if(this._editorCommandsLocalized){return;}this._editorCommandsLocalized=true;var _182=["div","p","pre","h1","h2","h3","h4","h5","h6","ol","ul","address"];var _183="",_184,i=0;while((_184=_182[i++])){if(_184.charAt(1)!="l"){_183+="<"+_184+"><span>content</span></"+_184+"><br/>";}else{_183+="<"+_184+"><li>content</li></"+_184+"><br/>";}}var div=dojo.doc.createElement("div");dojo.style(div,{position:"absolute",top:"-2000px"});dojo.doc.body.appendChild(div);div.innerHTML=_183;var node=div.firstChild;while(node){dijit._editor.selection.selectElement(node.firstChild);dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[node.firstChild]);var _185=node.tagName.toLowerCase();this._local2NativeFormatNames[_185]=document.queryCommandValue("formatblock");this._native2LocalFormatNames[this._local2NativeFormatNames[_185]]=_185;node=node.nextSibling.nextSibling;}dojo.body().removeChild(div);},open:function(_186){if(!this.onLoadDeferred||this.onLoadDeferred.fired>=0){this.onLoadDeferred=new dojo.Deferred();}if(!this.isClosed){this.close();}dojo.publish(dijit._scopeName+"._editor.RichText::open",[this]);this._content="";if(arguments.length==1&&_186.nodeName){this.domNode=_186;}var dn=this.domNode;var html;if(dojo.isString(this.value)){html=this.value;delete this.value;dn.innerHTML="";}else{if(dn.nodeName&&dn.nodeName.toLowerCase()=="textarea"){var ta=(this.textarea=dn);this.name=ta.name;html=ta.value;dn=this.domNode=dojo.doc.createElement("div");dn.setAttribute("widgetId",this.id);ta.removeAttribute("widgetId");dn.cssText=ta.cssText;dn.className+=" "+ta.className;dojo.place(dn,ta,"before");var _187=dojo.hitch(this,function(){dojo.style(ta,{display:"block",position:"absolute",top:"-1000px"});if(dojo.isIE){var s=ta.style;this.__overflow=s.overflow;s.overflow="hidden";}});if(dojo.isIE){setTimeout(_187,10);}else{_187();}if(ta.form){dojo.connect(ta.form,"onsubmit",this,function(){ta.value=this.getValue();});}}else{html=dijit._editor.getChildrenHtml(dn);dn.innerHTML="";}}var _188=dojo.contentBox(dn);this._oldHeight=_188.h;this._oldWidth=_188.w;this.savedContent=html;if(dn.nodeName&&dn.nodeName=="LI"){dn.innerHTML=" <br>";}this.header=dn.ownerDocument.createElement("div");dn.appendChild(this.header);this.editingArea=dn.ownerDocument.createElement("div");dn.appendChild(this.editingArea);this.footer=dn.ownerDocument.createElement("div");dn.appendChild(this.footer);if(this.name!==""&&(!dojo.config["useXDomain"]||dojo.config["allowXdRichTextSave"])){var _189=dojo.byId(dijit._scopeName+"._editor.RichText.savedContent");if(_189.value!==""){var _18a=_189.value.split(this._SEPARATOR),i=0,dat;while((dat=_18a[i++])){var data=dat.split(":");if(data[0]==this.name){html=data[1];_18a.splice(i,1);break;}}}dojo.addOnUnload(dojo.hitch(this,"_saveContent"));}this.isClosed=false;var ifr=(this.editorObject=this.iframe=dojo.doc.createElement("iframe"));ifr.id=this.id+"_iframe";this._iframeSrc=this._getIframeDocTxt();ifr.style.border="none";ifr.style.width="100%";if(this._layoutMode){ifr.style.height="100%";}else{if(dojo.isIE>=7){if(this.height){ifr.style.height=this.height;}if(this.minHeight){ifr.style.minHeight=this.minHeight;}}else{ifr.style.height=this.height?this.height:this.minHeight;}}ifr.frameBorder=0;ifr._loadFunc=dojo.hitch(this,function(win){this.window=win;this.document=this.window.document;if(dojo.isIE){this._localizeEditorCommands();}this.onLoad(html);});var s="javascript:parent."+dijit._scopeName+".byId(\""+this.id+"\")._iframeSrc";ifr.setAttribute("src",s);this.editingArea.appendChild(ifr);if(dn.nodeName=="LI"){dn.lastChild.style.marginTop="-1.2em";}dojo.addClass(this.domNode,this.baseClass);},_local2NativeFormatNames:{},_native2LocalFormatNames:{},_getIframeDocTxt:function(){var _18b=dojo.getComputedStyle(this.domNode);var html="";var _18c=true;if(dojo.isIE||(!this.height&&!dojo.isMoz)){html="<div id='dijitEditorBody'></div>";_18c=false;}else{if(dojo.isMoz){this._cursorToStart=true;html="&nbsp;";}}var font=[_18b.fontWeight,_18b.fontSize,_18b.fontFamily].join(" ");var _18d=_18b.lineHeight;if(_18d.indexOf("px")>=0){_18d=parseFloat(_18d)/parseFloat(_18b.fontSize);}else{if(_18d.indexOf("em")>=0){_18d=parseFloat(_18d);}else{_18d="normal";}}var _18e="";var self=this;this.style.replace(/(^|;)\s*(line-|font-?)[^;]+/ig,function(_18f){_18f=_18f.replace(/^;/ig,"")+";";var s=_18f.split(":")[0];if(s){s=dojo.trim(s);s=s.toLowerCase();var i;var sC="";for(i=0;i<s.length;i++){var c=s.charAt(i);switch(c){case "-":i++;c=s.charAt(i).toUpperCase();default:sC+=c;}}dojo.style(self.domNode,sC,"");}_18e+=_18f+";";});var _190=dojo.query("label[for=\""+this.id+"\"]");return [this.isLeftToRight()?"<html>\n<head>\n":"<html dir='rtl'>\n<head>\n",(dojo.isMoz&&_190.length?"<title>"+_190[0].innerHTML+"</title>\n":""),"<meta http-equiv='Content-Type' content='text/html'>\n","<style>\n","\tbody,html {\n","\t\tbackground:transparent;\n","\t\tpadding: 1px 0 0 0;\n","\t\tmargin: -1px 0 0 0;\n",((dojo.isWebKit)?"\t\twidth: 100%;\n":""),((dojo.isWebKit)?"\t\theight: 100%;\n":""),"\t}\n","\tbody{\n","\t\ttop:0px;\n","\t\tleft:0px;\n","\t\tright:0px;\n","\t\tfont:",font,";\n",((this.height||dojo.isOpera)?"":"\t\tposition: fixed;\n"),"\t\tmin-height:",this.minHeight,";\n","\t\tline-height:",_18d,";\n","\t}\n","\tp{ margin: 1em 0; }\n",(!_18c&&!this.height?"\tbody,html {overflow-y: hidden;}\n":""),"\t#dijitEditorBody{overflow-x: auto; overflow-y:"+(this.height?"auto;":"hidden;")+"}\n","\tli > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; }\n","\tli{ min-height:1.2em; }\n","</style>\n",this._applyEditingAreaStyleSheets(),"\n","</head>\n<body ",(_18c?"id='dijitEditorBody' ":""),"onload='frameElement._loadFunc(window,document)' style='"+_18e+"'>",html,"</body>\n</html>"].join("");},_applyEditingAreaStyleSheets:function(){var _191=[];if(this.styleSheets){_191=this.styleSheets.split(";");this.styleSheets="";}_191=_191.concat(this.editingAreaStyleSheets);this.editingAreaStyleSheets=[];var text="",i=0,url;while((url=_191[i++])){var _192=(new dojo._Url(dojo.global.location,url)).toString();this.editingAreaStyleSheets.push(_192);text+="<link rel=\"stylesheet\" type=\"text/css\" href=\""+_192+"\"/>";}return text;},addStyleSheet:function(uri){var url=uri.toString();if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){url=(new dojo._Url(dojo.global.location,url)).toString();}if(dojo.indexOf(this.editingAreaStyleSheets,url)>-1){return;}this.editingAreaStyleSheets.push(url);this.onLoadDeferred.addCallback(dojo.hitch(function(){if(this.document.createStyleSheet){this.document.createStyleSheet(url);}else{var head=this.document.getElementsByTagName("head")[0];var _193=this.document.createElement("link");_193.rel="stylesheet";_193.type="text/css";_193.href=url;head.appendChild(_193);}}));},removeStyleSheet:function(uri){var url=uri.toString();if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){url=(new dojo._Url(dojo.global.location,url)).toString();}var _194=dojo.indexOf(this.editingAreaStyleSheets,url);if(_194==-1){return;}delete this.editingAreaStyleSheets[_194];dojo.withGlobal(this.window,"query",dojo,["link:[href=\""+url+"\"]"]).orphan();},disabled:false,_mozSettingProps:{"styleWithCSS":false},_setDisabledAttr:function(_195){this.disabled=_195;if(!this.isLoaded){return;}_195=!!_195;if(dojo.isIE||dojo.isWebKit||dojo.isOpera){var _196=dojo.isIE&&(this.isLoaded||!this.focusOnLoad);if(_196){this.editNode.unselectable="on";}this.editNode.contentEditable=!_195;if(_196){var _197=this;setTimeout(function(){_197.editNode.unselectable="off";},0);}}else{try{this.document.designMode=(_195?"off":"on");}catch(e){return;}if(!_195&&this._mozSettingProps){var ps=this._mozSettingProps;for(var n in ps){if(ps.hasOwnProperty(n)){try{this.document.execCommand(n,false,ps[n]);}catch(e2){}}}}}this._disabledOK=true;},onLoad:function(html){if(!this.window.__registeredWindow){this.window.__registeredWindow=true;this._iframeRegHandle=dijit.registerIframe(this.iframe);}if(!dojo.isIE&&(this.height||dojo.isMoz)){this.editNode=this.document.body;}else{this.editNode=this.document.body.firstChild;var _198=this;if(dojo.isIE){var _199=(this.tabStop=dojo.doc.createElement("<div tabIndex=-1>"));this.editingArea.appendChild(_199);this.iframe.onfocus=function(){_198.editNode.setActive();};}}this.focusNode=this.editNode;var _19a=this.events.concat(this.captureEvents);var ap=this.iframe?this.document:this.editNode;dojo.forEach(_19a,function(item){this.connect(ap,item.toLowerCase(),item);},this);if(dojo.isIE){this.connect(this.document,"onmousedown","_onIEMouseDown");this.editNode.style.zoom=1;}else{this.connect(this.document,"onmousedown",function(){delete this._cursorToStart;});}if(dojo.isWebKit){this._webkitListener=this.connect(this.document,"onmouseup","onDisplayChanged");}if(dojo.isIE){try{this.document.execCommand("RespectVisibilityInDesign",true,null);}catch(e){}}this.isLoaded=true;this.set("disabled",this.disabled);var _19b=dojo.hitch(this,function(){this.setValue(html);if(this.onLoadDeferred){this.onLoadDeferred.callback(true);}this.onDisplayChanged();if(this.focusOnLoad){dojo.addOnLoad(dojo.hitch(this,function(){setTimeout(dojo.hitch(this,"focus"),this.updateInterval);}));}this.savedContent=this.getValue(true);});if(this.setValueDeferred){this.setValueDeferred.addCallback(_19b);}else{_19b();}},onKeyDown:function(e){if(e.keyCode===dojo.keys.TAB&&this.isTabIndent){dojo.stopEvent(e);if(this.queryCommandEnabled((e.shiftKey?"outdent":"indent"))){this.execCommand((e.shiftKey?"outdent":"indent"));}}if(dojo.isIE){if(e.keyCode==dojo.keys.TAB&&!this.isTabIndent){if(e.shiftKey&&!e.ctrlKey&&!e.altKey){this.iframe.focus();}else{if(!e.shiftKey&&!e.ctrlKey&&!e.altKey){this.tabStop.focus();}}}else{if(e.keyCode===dojo.keys.BACKSPACE&&this.document.selection.type==="Control"){dojo.stopEvent(e);this.execCommand("delete");}else{if((65<=e.keyCode&&e.keyCode<=90)||(e.keyCode>=37&&e.keyCode<=40)){e.charCode=e.keyCode;this.onKeyPress(e);}}}}return true;},onKeyUp:function(e){return;},setDisabled:function(_19c){dojo.deprecated("dijit.Editor::setDisabled is deprecated","use dijit.Editor::attr(\"disabled\",boolean) instead",2);this.set("disabled",_19c);},_setValueAttr:function(_19d){this.setValue(_19d);},_setDisableSpellCheckAttr:function(_19e){if(this.document){dojo.attr(this.document.body,"spellcheck",!_19e);}else{this.onLoadDeferred.addCallback(dojo.hitch(this,function(){dojo.attr(this.document.body,"spellcheck",!_19e);}));}this.disableSpellCheck=_19e;},onKeyPress:function(e){var c=(e.keyChar&&e.keyChar.toLowerCase())||e.keyCode,_19f=this._keyHandlers[c],args=arguments;if(_19f&&!e.altKey){dojo.some(_19f,function(h){if(!(h.shift^e.shiftKey)&&!(h.ctrl^(e.ctrlKey||e.metaKey))){if(!h.handler.apply(this,args)){e.preventDefault();}return true;}},this);}if(!this._onKeyHitch){this._onKeyHitch=dojo.hitch(this,"onKeyPressed");}setTimeout(this._onKeyHitch,1);return true;},addKeyHandler:function(key,ctrl,_1a0,_1a1){if(!dojo.isArray(this._keyHandlers[key])){this._keyHandlers[key]=[];}this._keyHandlers[key].push({shift:_1a0||false,ctrl:ctrl||false,handler:_1a1});},onKeyPressed:function(){this.onDisplayChanged();},onClick:function(e){this.onDisplayChanged(e);},_onIEMouseDown:function(e){if(!this._focused&&!this.disabled){this.focus();}},_onBlur:function(e){this.inherited(arguments);var _1a2=this.getValue(true);if(_1a2!=this.savedContent){this.onChange(_1a2);this.savedContent=_1a2;}},_onFocus:function(e){if(!this.disabled){if(!this._disabledOK){this.set("disabled",false);}this.inherited(arguments);}},blur:function(){if(!dojo.isIE&&this.window.document.documentElement&&this.window.document.documentElement.focus){this.window.document.documentElement.focus();}else{if(dojo.doc.body.focus){dojo.doc.body.focus();}}},focus:function(){if(!this.isLoaded){this.focusOnLoad=true;return;}if(this._cursorToStart){delete this._cursorToStart;if(this.editNode.childNodes){this.placeCursorAtStart();return;}}if(!dojo.isIE){dijit.focus(this.iframe);}else{if(this.editNode&&this.editNode.focus){this.iframe.fireEvent("onfocus",document.createEventObject());}}},updateInterval:200,_updateTimer:null,onDisplayChanged:function(e){if(this._updateTimer){clearTimeout(this._updateTimer);}if(!this._updateHandler){this._updateHandler=dojo.hitch(this,"onNormalizedDisplayChanged");}this._updateTimer=setTimeout(this._updateHandler,this.updateInterval);},onNormalizedDisplayChanged:function(){delete this._updateTimer;},onChange:function(_1a3){},_normalizeCommand:function(cmd,_1a4){var _1a5=cmd.toLowerCase();if(_1a5=="formatblock"){if(dojo.isSafari&&_1a4===undefined){_1a5="heading";}}else{if(_1a5=="hilitecolor"&&!dojo.isMoz){_1a5="backcolor";}}return _1a5;},_qcaCache:{},queryCommandAvailable:function(_1a6){var ca=this._qcaCache[_1a6];if(ca!==undefined){return ca;}return (this._qcaCache[_1a6]=this._queryCommandAvailable(_1a6));},_queryCommandAvailable:function(_1a7){var ie=1;var _1a8=1<<1;var _1a9=1<<2;var _1aa=1<<3;var _1ab=1<<4;function _1ac(_1ad){return {ie:Boolean(_1ad&ie),mozilla:Boolean(_1ad&_1a8),webkit:Boolean(_1ad&_1a9),webkit420:Boolean(_1ad&_1ab),opera:Boolean(_1ad&_1aa)};};var _1ae=null;switch(_1a7.toLowerCase()){case "bold":case "italic":case "underline":case "subscript":case "superscript":case "fontname":case "fontsize":case "forecolor":case "hilitecolor":case "justifycenter":case "justifyfull":case "justifyleft":case "justifyright":case "delete":case "selectall":case "toggledir":_1ae=_1ac(_1a8|ie|_1a9|_1aa);break;case "createlink":case "unlink":case "removeformat":case "inserthorizontalrule":case "insertimage":case "insertorderedlist":case "insertunorderedlist":case "indent":case "outdent":case "formatblock":case "inserthtml":case "undo":case "redo":case "strikethrough":case "tabindent":_1ae=_1ac(_1a8|ie|_1aa|_1ab);break;case "blockdirltr":case "blockdirrtl":case "dirltr":case "dirrtl":case "inlinedirltr":case "inlinedirrtl":_1ae=_1ac(ie);break;case "cut":case "copy":case "paste":_1ae=_1ac(ie|_1a8|_1ab);break;case "inserttable":_1ae=_1ac(_1a8|ie);break;case "insertcell":case "insertcol":case "insertrow":case "deletecells":case "deletecols":case "deleterows":case "mergecells":case "splitcell":_1ae=_1ac(ie|_1a8);break;default:return false;}return (dojo.isIE&&_1ae.ie)||(dojo.isMoz&&_1ae.mozilla)||(dojo.isWebKit&&_1ae.webkit)||(dojo.isWebKit>420&&_1ae.webkit420)||(dojo.isOpera&&_1ae.opera);},execCommand:function(_1af,_1b0){var _1b1;this.focus();_1af=this._normalizeCommand(_1af,_1b0);if(_1b0!==undefined){if(_1af=="heading"){throw new Error("unimplemented");}else{if((_1af=="formatblock")&&dojo.isIE){_1b0="<"+_1b0+">";}}}var _1b2="_"+_1af+"Impl";if(this[_1b2]){_1b1=this[_1b2](_1b0);}else{_1b0=arguments.length>1?_1b0:null;if(_1b0||_1af!="createlink"){_1b1=this.document.execCommand(_1af,false,_1b0);}}this.onDisplayChanged();return _1b1;},queryCommandEnabled:function(_1b3){if(this.disabled||!this._disabledOK){return false;}_1b3=this._normalizeCommand(_1b3);if(dojo.isMoz||dojo.isWebKit){if(_1b3=="unlink"){return this._sCall("hasAncestorElement",["a"]);}else{if(_1b3=="inserttable"){return true;}}}if(dojo.isWebKit){if(_1b3=="copy"){_1b3="cut";}else{if(_1b3=="paste"){return true;}}}var elem=dojo.isIE?this.document.selection.createRange():this.document;try{return elem.queryCommandEnabled(_1b3);}catch(e){return false;}},queryCommandState:function(_1b4){if(this.disabled||!this._disabledOK){return false;}_1b4=this._normalizeCommand(_1b4);try{return this.document.queryCommandState(_1b4);}catch(e){return false;}},queryCommandValue:function(_1b5){if(this.disabled||!this._disabledOK){return false;}var r;_1b5=this._normalizeCommand(_1b5);if(dojo.isIE&&_1b5=="formatblock"){r=this._native2LocalFormatNames[this.document.queryCommandValue(_1b5)];}else{if(dojo.isMoz&&_1b5==="hilitecolor"){var _1b6;try{_1b6=this.document.queryCommandValue("styleWithCSS");}catch(e){_1b6=false;}this.document.execCommand("styleWithCSS",false,true);r=this.document.queryCommandValue(_1b5);this.document.execCommand("styleWithCSS",false,_1b6);}else{r=this.document.queryCommandValue(_1b5);}}return r;},_sCall:function(name,args){return dojo.withGlobal(this.window,name,dijit._editor.selection,args);},placeCursorAtStart:function(){this.focus();var _1b7=false;if(dojo.isMoz){var _1b8=this.editNode.firstChild;while(_1b8){if(_1b8.nodeType==3){if(_1b8.nodeValue.replace(/^\s+|\s+$/g,"").length>0){_1b7=true;this._sCall("selectElement",[_1b8]);break;}}else{if(_1b8.nodeType==1){_1b7=true;var tg=_1b8.tagName?_1b8.tagName.toLowerCase():"";if(/br|input|img|base|meta|area|basefont|hr|link/.test(tg)){this._sCall("selectElement",[_1b8]);}else{this._sCall("selectElementChildren",[_1b8]);}break;}}_1b8=_1b8.nextSibling;}}else{_1b7=true;this._sCall("selectElementChildren",[this.editNode]);}if(_1b7){this._sCall("collapse",[true]);}},placeCursorAtEnd:function(){this.focus();var _1b9=false;if(dojo.isMoz){var last=this.editNode.lastChild;while(last){if(last.nodeType==3){if(last.nodeValue.replace(/^\s+|\s+$/g,"").length>0){_1b9=true;this._sCall("selectElement",[last]);break;}}else{if(last.nodeType==1){_1b9=true;if(last.lastChild){this._sCall("selectElement",[last.lastChild]);}else{this._sCall("selectElement",[last]);}break;}}last=last.previousSibling;}}else{_1b9=true;this._sCall("selectElementChildren",[this.editNode]);}if(_1b9){this._sCall("collapse",[false]);}},getValue:function(_1ba){if(this.textarea){if(this.isClosed||!this.isLoaded){return this.textarea.value;}}return this._postFilterContent(null,_1ba);},_getValueAttr:function(){return this.getValue(true);},setValue:function(html){if(!this.isLoaded){this.onLoadDeferred.addCallback(dojo.hitch(this,function(){this.setValue(html);}));return;}this._cursorToStart=true;if(this.textarea&&(this.isClosed||!this.isLoaded)){this.textarea.value=html;}else{html=this._preFilterContent(html);var node=this.isClosed?this.domNode:this.editNode;if(!html&&dojo.isWebKit){html="&nbsp;";}node.innerHTML=html;this._preDomFilterContent(node);}this.onDisplayChanged();},replaceValue:function(html){if(this.isClosed){this.setValue(html);}else{if(this.window&&this.window.getSelection&&!dojo.isMoz){this.setValue(html);}else{if(this.window&&this.window.getSelection){html=this._preFilterContent(html);this.execCommand("selectall");if(!html){this._cursorToStart=true;html="&nbsp;";}this.execCommand("inserthtml",html);this._preDomFilterContent(this.editNode);}else{if(this.document&&this.document.selection){this.setValue(html);}}}}},_preFilterContent:function(html){var ec=html;dojo.forEach(this.contentPreFilters,function(ef){if(ef){ec=ef(ec);}});return ec;},_preDomFilterContent:function(dom){dom=dom||this.editNode;dojo.forEach(this.contentDomPreFilters,function(ef){if(ef&&dojo.isFunction(ef)){ef(dom);}},this);},_postFilterContent:function(dom,_1bb){var ec;if(!dojo.isString(dom)){dom=dom||this.editNode;if(this.contentDomPostFilters.length){if(_1bb){dom=dojo.clone(dom);}dojo.forEach(this.contentDomPostFilters,function(ef){dom=ef(dom);});}ec=dijit._editor.getChildrenHtml(dom);}else{ec=dom;}if(!dojo.trim(ec.replace(/^\xA0\xA0*/,"").replace(/\xA0\xA0*$/,"")).length){ec="";}dojo.forEach(this.contentPostFilters,function(ef){ec=ef(ec);});return ec;},_saveContent:function(e){var _1bc=dojo.byId(dijit._scopeName+"._editor.RichText.savedContent");if(_1bc.value){_1bc.value+=this._SEPARATOR;}_1bc.value+=this.name+":"+this.getValue(true);},escapeXml:function(str,_1bd){str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");if(!_1bd){str=str.replace(/'/gm,"&#39;");}return str;},getNodeHtml:function(node){dojo.deprecated("dijit.Editor::getNodeHtml is deprecated","use dijit._editor.getNodeHtml instead",2);return dijit._editor.getNodeHtml(node);},getNodeChildrenHtml:function(dom){dojo.deprecated("dijit.Editor::getNodeChildrenHtml is deprecated","use dijit._editor.getChildrenHtml instead",2);return dijit._editor.getChildrenHtml(dom);},close:function(save){if(this.isClosed){return false;}if(!arguments.length){save=true;}this._content=this.getValue();var _1be=(this.savedContent!=this._content);if(this.interval){clearInterval(this.interval);}if(this._webkitListener){this.disconnect(this._webkitListener);delete this._webkitListener;}if(dojo.isIE){this.iframe.onfocus=null;}this.iframe._loadFunc=null;if(this._iframeRegHandle){dijit.unregisterIframe(this._iframeRegHandle);delete this._iframeRegHandle;}if(this.textarea){var s=this.textarea.style;s.position="";s.left=s.top="";if(dojo.isIE){s.overflow=this.__overflow;this.__overflow=null;}this.textarea.value=save?this._content:this.savedContent;dojo.destroy(this.domNode);this.domNode=this.textarea;}else{this.domNode.innerHTML=save?this._content:this.savedContent;}delete this.iframe;dojo.removeClass(this.domNode,this.baseClass);this.isClosed=true;this.isLoaded=false;delete this.editNode;delete this.focusNode;if(this.window&&this.window._frameElement){this.window._frameElement=null;}this.window=null;this.document=null;this.editingArea=null;this.editorObject=null;return _1be;},destroy:function(){if(!this.isClosed){this.close(false);}this.inherited(arguments);},_removeMozBogus:function(html){return html.replace(/\stype="_moz"/gi,"").replace(/\s_moz_dirty=""/gi,"").replace(/_moz_resizing="(true|false)"/gi,"");},_removeWebkitBogus:function(html){html=html.replace(/\sclass="webkit-block-placeholder"/gi,"");html=html.replace(/\sclass="apple-style-span"/gi,"");return html;},_normalizeFontStyle:function(html){return html.replace(/<(\/)?strong([ \>])/gi,"<$1b$2").replace(/<(\/)?em([ \>])/gi,"<$1i$2");},_preFixUrlAttributes:function(html){return html.replace(/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,"$1$4$2$3$5$2 _djrealurl=$2$3$5$2").replace(/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,"$1$4$2$3$5$2 _djrealurl=$2$3$5$2");},_inserthorizontalruleImpl:function(_1bf){if(dojo.isIE){return this._inserthtmlImpl("<hr>");}return this.document.execCommand("inserthorizontalrule",false,_1bf);},_unlinkImpl:function(_1c0){if((this.queryCommandEnabled("unlink"))&&(dojo.isMoz||dojo.isWebKit)){var a=this._sCall("getAncestorElement",["a"]);this._sCall("selectElement",[a]);return this.document.execCommand("unlink",false,null);}return this.document.execCommand("unlink",false,_1c0);},_hilitecolorImpl:function(_1c1){var _1c2;if(dojo.isMoz){this.document.execCommand("styleWithCSS",false,true);_1c2=this.document.execCommand("hilitecolor",false,_1c1);this.document.execCommand("styleWithCSS",false,false);}else{_1c2=this.document.execCommand("hilitecolor",false,_1c1);}return _1c2;},_backcolorImpl:function(_1c3){if(dojo.isIE){_1c3=_1c3?_1c3:null;}return this.document.execCommand("backcolor",false,_1c3);},_forecolorImpl:function(_1c4){if(dojo.isIE){_1c4=_1c4?_1c4:null;}return this.document.execCommand("forecolor",false,_1c4);},_inserthtmlImpl:function(_1c5){_1c5=this._preFilterContent(_1c5);var rv=true;if(dojo.isIE){var _1c6=this.document.selection.createRange();if(this.document.selection.type.toUpperCase()=="CONTROL"){var n=_1c6.item(0);while(_1c6.length){_1c6.remove(_1c6.item(0));}n.outerHTML=_1c5;}else{_1c6.pasteHTML(_1c5);}_1c6.select();}else{if(dojo.isMoz&&!_1c5.length){this._sCall("remove");}else{rv=this.document.execCommand("inserthtml",false,_1c5);}}return rv;},getHeaderHeight:function(){return this._getNodeChildrenHeight(this.header);},getFooterHeight:function(){return this._getNodeChildrenHeight(this.footer);},_getNodeChildrenHeight:function(node){var h=0;if(node&&node.childNodes){var i;for(i=0;i<node.childNodes.length;i++){var size=dojo.position(node.childNodes[i]);h+=size.h;}}return h;}});}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(_1c7,_1c8){var _1c9=(this._keyNavCodes={});var prev=dojo.hitch(this,this.focusPrev);var next=dojo.hitch(this,this.focusNext);dojo.forEach(_1c7,function(code){_1c9[code]=prev;});dojo.forEach(_1c8,function(code){_1c9[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(_1ca,_1cb){dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);this._startupChild(_1ca);},focus:function(){this.focusFirstChild();},focusFirstChild:function(){var _1cc=this._getFirstFocusableChild();if(_1cc){this.focusChild(_1cc);}},focusNext:function(){var _1cd=this._getNextFocusableChild(this.focusedChild,1);this.focusChild(_1cd);},focusPrev:function(){var _1ce=this._getNextFocusableChild(this.focusedChild,-1);this.focusChild(_1ce,true);},focusChild:function(_1cf,last){if(this.focusedChild&&_1cf!==this.focusedChild){this._onChildBlur(this.focusedChild);}_1cf.focus(last?"end":"start");this.focusedChild=_1cf;},_startupChild:function(_1d0){_1d0.set("tabIndex","-1");this.connect(_1d0,"_onFocus",function(){_1d0.set("tabIndex",this.tabIndex);});this.connect(_1d0,"_onBlur",function(){_1d0.set("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(_1d1){},_getFirstFocusableChild:function(){return this._getNextFocusableChild(null,1);},_getNextFocusableChild:function(_1d2,dir){if(_1d2){_1d2=this._getSiblingOfChild(_1d2,dir);}var _1d3=this.getChildren();for(var i=0;i<_1d3.length;i++){if(!_1d2){_1d2=_1d3[(dir>0)?0:(_1d3.length-1)];}if(_1d2.isFocusable()){return _1d2;}_1d2=this._getSiblingOfChild(_1d2,dir);}return null;}});}if(!dojo._hasResource["dijit.ToolbarSeparator"]){dojo._hasResource["dijit.ToolbarSeparator"]=true;dojo.provide("dijit.ToolbarSeparator");dojo.declare("dijit.ToolbarSeparator",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitToolbarSeparator dijitInline\" waiRole=\"presentation\"></div>",postCreate:function(){dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dijit.Toolbar"]){dojo._hasResource["dijit.Toolbar"]=true;dojo.provide("dijit.Toolbar");dojo.declare("dijit.Toolbar",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{templateString:"<div class=\"dijit\" waiRole=\"toolbar\" tabIndex=\"${tabIndex}\" dojoAttachPoint=\"containerNode\">"+"</div>",baseClass:"dijitToolbar",postCreate:function(){this.connectKeyNavHandlers(this.isLeftToRight()?[dojo.keys.LEFT_ARROW]:[dojo.keys.RIGHT_ARROW],this.isLeftToRight()?[dojo.keys.RIGHT_ARROW]:[dojo.keys.LEFT_ARROW]);this.inherited(arguments);},startup:function(){if(this._started){return;}this.startupKeyNavChildren();this.inherited(arguments);}});}if(!dojo._hasResource["dijit._HasDropDown"]){dojo._hasResource["dijit._HasDropDown"]=true;dojo.provide("dijit._HasDropDown");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,_onDropDownMouseDown:function(e){if(this.disabled||this.readOnly){return;}this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseUp");this.toggleDropDown();},_onDropDownMouseUp:function(e){if(e&&this._docHandler){this.disconnect(this._docHandler);}var _1d4=this.dropDown,_1d5=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&&!_1d5){if(dojo.hasClass(t,"dijitPopup")){_1d5=true;}else{t=t.parentNode;}}if(_1d5){t=e.target;if(_1d4.onItemClick){var _1d6;while(t&&!(_1d6=dijit.byNode(t))){t=t.parentNode;}if(_1d6&&_1d6.onClick&&_1d6.getParent){_1d6.getParent().onItemClick(_1d6,e);}}return;}}}if(this._opened&&_1d4.focus){window.setTimeout(dojo.hitch(_1d4,"focus"),1);}},_onDropDownClick:function(e){if(this._stopClickEvents){dojo.stopEvent(e);}},_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","_onDropDownMouseDown");this.connect(this._buttonNode,"onclick","_onDropDownClick");this.connect(this._buttonNode,"onkeydown","_onDropDownKeydown");this.connect(this._buttonNode,"onkeyup","_onKey");if(this._setStateClass){this.connect(this,"openDropDown","_setStateClass");this.connect(this,"closeDropDown","_setStateClass");}var _1d7={"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"+_1d7+"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){if(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE){e.preventDefault();}},_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();}else{if(d&&!this._opened&&(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE)){this.toggleDropDown();if(d.focus){setTimeout(dojo.hitch(d,"focus"),1);}}}},_onBlur:function(){this.closeDropDown();this.inherited(arguments);},isLoaded:function(){return true;},loadDropDown:function(_1d8){_1d8();},toggleDropDown:function(){if(this.disabled||this.readOnly){return;}this.focus();var _1d9=this.dropDown;if(!_1d9){return;}if(!this._opened){if(!this.isLoaded()){this.loadDropDown(dojo.hitch(this,"openDropDown"));return;}else{this.openDropDown();}}else{this.closeDropDown();}},openDropDown:function(){var _1da=this.dropDown;var _1db=_1da.domNode;var self=this;if(!this._preparedNode){dijit.popup.moveOffScreen(_1db);this._preparedNode=true;if(_1db.style.width){this._explicitDDWidth=true;}if(_1db.style.height){this._explicitDDHeight=true;}}if(this.maxHeight||this.forceWidth||this.autoWidth){var _1dc={display:"",visibility:"hidden"};if(!this._explicitDDWidth){_1dc.width="";}if(!this._explicitDDHeight){_1dc.height="";}dojo.style(_1db,_1dc);var mb=dojo.marginBox(_1db);var _1dd=(this.maxHeight&&mb.h>this.maxHeight);dojo.style(_1db,{overflowX:"hidden",overflowY:_1dd?"auto":"hidden"});if(_1dd){mb.h=this.maxHeight;if("w" in mb){mb.w+=16;}}else{delete mb.h;}delete mb.t;delete mb.l;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(dojo.isFunction(_1da.resize)){_1da.resize(mb);}else{dojo.marginBox(_1db,mb);}}var _1de=dijit.popup.open({parent:this,popup:_1da,around:this._aroundNode,orient:dijit.getPopupAroundAlignment((this.dropDownPosition&&this.dropDownPosition.length)?this.dropDownPosition:["below"],this.isLeftToRight()),onExecute:function(){self.closeDropDown(true);},onCancel:function(){self.closeDropDown(true);},onClose:function(){dojo.attr(self._popupStateNode,"popupActive",false);dojo.removeClass(self._popupStateNode,"dijitHasDropDownOpen");self._opened=false;self.state="";}});dojo.attr(this._popupStateNode,"popupActive","true");dojo.addClass(self._popupStateNode,"dijitHasDropDownOpen");this._opened=true;this.state="Opened";return _1de;},closeDropDown:function(_1df){if(this._opened){if(_1df){this.focus();}dijit.popup.close(this.dropDown);this._opened=false;this.state="";}}});}if(!dojo._hasResource["dijit.form.Button"]){dojo._hasResource["dijit.form.Button"]=true;dojo.provide("dijit.form.Button");dojo.declare("dijit.form.Button",dijit.form._FormWidget,{label:"",showLabel:true,iconClass:"",type:"button",baseClass:"dijitButton",templateString:dojo.cache("dijit.form","templates/Button.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"valueNode",iconClass:{node:"iconNode",type:"class"}}),_onClick:function(e){if(this.disabled){return false;}this._clicked();return this.onClick(e);},_onButtonClick:function(e){if(this._onClick(e)===false){e.preventDefault();}else{if(this.type=="submit"&&!(this.valueNode||this.focusNode).form){for(var node=this.domNode;node.parentNode;node=node.parentNode){var _1e0=dijit.byNode(node);if(_1e0&&typeof _1e0._onSubmit=="function"){_1e0._onSubmit(e);break;}}}else{if(this.valueNode){this.valueNode.click();e.preventDefault();}}}},_fillContent:function(_1e1){if(_1e1&&(!this.params||!("label" in this.params))){this.set("label",_1e1.innerHTML);}},postCreate:function(){dojo.setSelectable(this.focusNode,false);this.inherited(arguments);},_setShowLabelAttr:function(val){if(this.containerNode){dojo.toggleClass(this.containerNode,"dijitDisplayNone",!val);}this.showLabel=val;},onClick:function(e){return true;},_clicked:function(e){},setLabel:function(_1e2){dojo.deprecated("dijit.form.Button.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");this.set("label",_1e2);},_setLabelAttr:function(_1e3){this.containerNode.innerHTML=this.label=_1e3;if(this.showLabel==false&&!this.params.title){this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}}});dojo.declare("dijit.form.DropDownButton",[dijit.form.Button,dijit._Container,dijit._HasDropDown],{baseClass:"dijitDropDownButton",templateString:dojo.cache("dijit.form","templates/DropDownButton.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),_fillContent:function(){if(this.srcNodeRef){var _1e4=dojo.query("*",this.srcNodeRef);dijit.form.DropDownButton.superclass._fillContent.call(this,_1e4[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}if(!this.dropDown){var _1e5=dojo.query("[widgetId]",this.dropDownContainer)[0];this.dropDown=dijit.byNode(_1e5);delete this.dropDownContainer;}dijit.popup.moveOffScreen(this.dropDown.domNode);this.inherited(arguments);},isLoaded:function(){var _1e6=this.dropDown;return (!_1e6.href||_1e6.isLoaded);},loadDropDown:function(){var _1e7=this.dropDown;if(!_1e7){return;}if(!this.isLoaded()){var _1e8=dojo.connect(_1e7,"onLoad",this,function(){dojo.disconnect(_1e8);this.openDropDown();});_1e7.refresh();}else{this.openDropDown();}},isFocusable:function(){return this.inherited(arguments)&&!this._mouseDown;}});dojo.declare("dijit.form.ComboButton",dijit.form.DropDownButton,{templateString:dojo.cache("dijit.form","templates/ComboButton.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{id:"",tabIndex:["focusNode","titleNode"],title:"titleNode"}),optionsTitle:"",baseClass:"dijitComboButton",cssStateNodes:{"buttonNode":"dijitButtonNode","titleNode":"dijitButtonContents","_popupStateNode":"dijitDownArrowButton"},_focusedNode:null,_onButtonKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"RIGHT_ARROW":"LEFT_ARROW"]){dijit.focus(this._popupStateNode);dojo.stopEvent(evt);}},_onArrowKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"LEFT_ARROW":"RIGHT_ARROW"]){dijit.focus(this.titleNode);dojo.stopEvent(evt);}},focus:function(_1e9){dijit.focus(_1e9=="start"?this.titleNode:this._popupStateNode);}});dojo.declare("dijit.form.ToggleButton",dijit.form.Button,{baseClass:"dijitToggleButton",checked:false,attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{checked:"focusNode"}),_clicked:function(evt){this.set("checked",!this.checked);},_setCheckedAttr:function(_1ea,_1eb){this.checked=_1ea;dojo.attr(this.focusNode||this.domNode,"checked",_1ea);dijit.setWaiState(this.focusNode||this.domNode,"pressed",_1ea);this._handleOnChange(_1ea,_1eb);},setChecked:function(_1ec){dojo.deprecated("setChecked("+_1ec+") is deprecated. Use set('checked',"+_1ec+") instead.","","2.0");this.set("checked",_1ec);},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);}});}if(!dojo._hasResource["dijit._editor._Plugin"]){dojo._hasResource["dijit._editor._Plugin"]=true;dojo.provide("dijit._editor._Plugin");dojo.declare("dijit._editor._Plugin",null,{constructor:function(args,node){this.params=args||{};dojo.mixin(this,this.params);this._connects=[];},editor:null,iconClassPrefix:"dijitEditorIcon",button:null,command:"",useDefaultCommand:true,buttonClass:dijit.form.Button,getLabel:function(key){return this.editor.commands[key];},_initButton:function(){if(this.command.length){var _1ed=this.getLabel(this.command),_1ee=this.editor,_1ef=this.iconClassPrefix+" "+this.iconClassPrefix+this.command.charAt(0).toUpperCase()+this.command.substr(1);if(!this.button){var _1f0=dojo.mixin({label:_1ed,dir:_1ee.dir,lang:_1ee.lang,showLabel:false,iconClass:_1ef,dropDown:this.dropDown,tabIndex:"-1"},this.params||{});this.button=new this.buttonClass(_1f0);}}},destroy:function(){dojo.forEach(this._connects,dojo.disconnect);if(this.dropDown){this.dropDown.destroyRecursive();}},connect:function(o,f,tf){this._connects.push(dojo.connect(o,f,this,tf));},updateState:function(){var e=this.editor,c=this.command,_1f1,_1f2;if(!e||!e.isLoaded||!c.length){return;}if(this.button){try{_1f2=e.queryCommandEnabled(c);if(this.enabled!==_1f2){this.enabled=_1f2;this.button.set("disabled",!_1f2);}if(typeof this.button.checked=="boolean"){_1f1=e.queryCommandState(c);if(this.checked!==_1f1){this.checked=_1f1;this.button.set("checked",e.queryCommandState(c));}}}catch(e){}}},setEditor:function(_1f3){this.editor=_1f3;this._initButton();if(this.button&&this.useDefaultCommand){if(this.editor.queryCommandAvailable(this.command)){this.connect(this.button,"onClick",dojo.hitch(this.editor,"execCommand",this.command,this.commandArg));}else{this.button.domNode.style.display="none";}}this.connect(this.editor,"onNormalizedDisplayChanged","updateState");},setToolbar:function(_1f4){if(this.button){_1f4.addChild(this.button);}}});}if(!dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]){dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]=true;dojo.provide("dijit._editor.plugins.EnterKeyHandling");dojo.declare("dijit._editor.plugins.EnterKeyHandling",dijit._editor._Plugin,{blockNodeForEnter:"BR",constructor:function(args){if(args){dojo.mixin(this,args);}},setEditor:function(_1f5){this.editor=_1f5;if(this.blockNodeForEnter=="BR"){if(dojo.isIE){_1f5.contentDomPreFilters.push(dojo.hitch(this,"regularPsToSingleLinePs"));_1f5.contentDomPostFilters.push(dojo.hitch(this,"singleLinePsToRegularPs"));_1f5.onLoadDeferred.addCallback(dojo.hitch(this,"_fixNewLineBehaviorForIE"));}else{_1f5.onLoadDeferred.addCallback(dojo.hitch(this,function(d){try{this.editor.document.execCommand("insertBrOnReturn",false,true);}catch(e){}return d;}));}}else{if(this.blockNodeForEnter){dojo["require"]("dijit._editor.range");var h=dojo.hitch(this,this.handleEnterKey);_1f5.addKeyHandler(13,0,0,h);_1f5.addKeyHandler(13,0,1,h);this.connect(this.editor,"onKeyPressed","onKeyPressed");}}},onKeyPressed:function(e){if(this._checkListLater){if(dojo.withGlobal(this.editor.window,"isCollapsed",dijit)){var _1f6=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,["LI"]);if(!_1f6){dijit._editor.RichText.prototype.execCommand.call(this.editor,"formatblock",this.blockNodeForEnter);var _1f7=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.blockNodeForEnter]);if(_1f7){_1f7.innerHTML=this.bogusHtmlContent;if(dojo.isIE){var r=this.editor.document.selection.createRange();r.move("character",-1);r.select();}}else{console.error("onKeyPressed: Cannot find the new block node");}}else{if(dojo.isMoz){if(_1f6.parentNode.parentNode.nodeName=="LI"){_1f6=_1f6.parentNode.parentNode;}}var fc=_1f6.firstChild;if(fc&&fc.nodeType==1&&(fc.nodeName=="UL"||fc.nodeName=="OL")){_1f6.insertBefore(fc.ownerDocument.createTextNode(" "),fc);var _1f8=dijit.range.create(this.editor.window);_1f8.setStart(_1f6.firstChild,0);var _1f9=dijit.range.getSelection(this.editor.window,true);_1f9.removeAllRanges();_1f9.addRange(_1f8);}}}this._checkListLater=false;}if(this._pressedEnterInBlock){if(this._pressedEnterInBlock.previousSibling){this.removeTrailingBr(this._pressedEnterInBlock.previousSibling);}delete this._pressedEnterInBlock;}},bogusHtmlContent:"&nbsp;",blockNodes:/^(?:P|H1|H2|H3|H4|H5|H6|LI)$/,handleEnterKey:function(e){var _1fa,_1fb,_1fc,doc=this.editor.document,br;if(e.shiftKey){var _1fd=dojo.withGlobal(this.editor.window,"getParentElement",dijit._editor.selection);var _1fe=dijit.range.getAncestor(_1fd,this.blockNodes);if(_1fe){if(!e.shiftKey&&_1fe.tagName=="LI"){return true;}_1fa=dijit.range.getSelection(this.editor.window);_1fb=_1fa.getRangeAt(0);if(!_1fb.collapsed){_1fb.deleteContents();_1fa=dijit.range.getSelection(this.editor.window);_1fb=_1fa.getRangeAt(0);}if(dijit.range.atBeginningOfContainer(_1fe,_1fb.startContainer,_1fb.startOffset)){if(e.shiftKey){br=doc.createElement("br");_1fc=dijit.range.create(this.editor.window);_1fe.insertBefore(br,_1fe.firstChild);_1fc.setStartBefore(br.nextSibling);_1fa.removeAllRanges();_1fa.addRange(_1fc);}else{dojo.place(br,_1fe,"before");}}else{if(dijit.range.atEndOfContainer(_1fe,_1fb.startContainer,_1fb.startOffset)){_1fc=dijit.range.create(this.editor.window);br=doc.createElement("br");if(e.shiftKey){_1fe.appendChild(br);_1fe.appendChild(doc.createTextNode(" "));_1fc.setStart(_1fe.lastChild,0);}else{dojo.place(br,_1fe,"after");_1fc.setStartAfter(_1fe);}_1fa.removeAllRanges();_1fa.addRange(_1fc);}else{return true;}}}else{dijit._editor.RichText.prototype.execCommand.call(this.editor,"inserthtml","<br>");}return false;}var _1ff=true;_1fa=dijit.range.getSelection(this.editor.window);_1fb=_1fa.getRangeAt(0);if(!_1fb.collapsed){_1fb.deleteContents();_1fa=dijit.range.getSelection(this.editor.window);_1fb=_1fa.getRangeAt(0);}var _200=dijit.range.getBlockAncestor(_1fb.endContainer,null,this.editor.editNode);var _201=_200.blockNode;if((this._checkListLater=(_201&&(_201.nodeName=="LI"||_201.parentNode.nodeName=="LI")))){if(dojo.isMoz){this._pressedEnterInBlock=_201;}if(/^(\s|&nbsp;|\xA0|<span\b[^>]*\bclass=['"]Apple-style-span['"][^>]*>(\s|&nbsp;|\xA0)<\/span>)?(<br>)?$/.test(_201.innerHTML)){_201.innerHTML="";if(dojo.isWebKit){_1fc=dijit.range.create(this.editor.window);_1fc.setStart(_201,0);_1fa.removeAllRanges();_1fa.addRange(_1fc);}this._checkListLater=false;}return true;}if(!_200.blockNode||_200.blockNode===this.editor.editNode){try{dijit._editor.RichText.prototype.execCommand.call(this.editor,"formatblock",this.blockNodeForEnter);}catch(e2){}_200={blockNode:dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.blockNodeForEnter]),blockContainer:this.editor.editNode};if(_200.blockNode){if(_200.blockNode!=this.editor.editNode&&(!(_200.blockNode.textContent||_200.blockNode.innerHTML).replace(/^\s+|\s+$/g,"").length)){this.removeTrailingBr(_200.blockNode);return false;}}else{_200.blockNode=this.editor.editNode;}_1fa=dijit.range.getSelection(this.editor.window);_1fb=_1fa.getRangeAt(0);}var _202=doc.createElement(this.blockNodeForEnter);_202.innerHTML=this.bogusHtmlContent;this.removeTrailingBr(_200.blockNode);if(dijit.range.atEndOfContainer(_200.blockNode,_1fb.endContainer,_1fb.endOffset)){if(_200.blockNode===_200.blockContainer){_200.blockNode.appendChild(_202);}else{dojo.place(_202,_200.blockNode,"after");}_1ff=false;_1fc=dijit.range.create(this.editor.window);_1fc.setStart(_202,0);_1fa.removeAllRanges();_1fa.addRange(_1fc);if(this.editor.height){dojo.window.scrollIntoView(_202);}}else{if(dijit.range.atBeginningOfContainer(_200.blockNode,_1fb.startContainer,_1fb.startOffset)){dojo.place(_202,_200.blockNode,_200.blockNode===_200.blockContainer?"first":"before");if(_202.nextSibling&&this.editor.height){_1fc=dijit.range.create(this.editor.window);_1fc.setStart(_202.nextSibling,0);_1fa.removeAllRanges();_1fa.addRange(_1fc);dojo.window.scrollIntoView(_202.nextSibling);}_1ff=false;}else{if(_200.blockNode===_200.blockContainer){_200.blockNode.appendChild(_202);}else{dojo.place(_202,_200.blockNode,"after");}_1ff=false;if(_200.blockNode.style){if(_202.style){if(_200.blockNode.style.cssText){_202.style.cssText=_200.blockNode.style.cssText;}}}var rs=_1fb.startContainer;if(rs&&rs.nodeType==3){var _203,_204;var txt=rs.nodeValue;var _205=doc.createTextNode(txt.substring(0,_1fb.startOffset));var _206=doc.createTextNode(txt.substring(_1fb.startOffset,txt.length));dojo.place(_205,rs,"before");dojo.place(_206,rs,"after");dojo.destroy(rs);var _207=_205.parentNode;while(_207!==_200.blockNode){var tg=_207.tagName;var _208=doc.createElement(tg);if(_207.style){if(_208.style){if(_207.style.cssText){_208.style.cssText=_207.style.cssText;}}}_203=_206;while(_203){_204=_203.nextSibling;_208.appendChild(_203);_203=_204;}dojo.place(_208,_207,"after");_205=_207;_206=_208;_207=_207.parentNode;}_203=_206;if(_203.nodeType==1||(_203.nodeType==3&&_203.nodeValue)){_202.innerHTML="";}while(_203){_204=_203.nextSibling;_202.appendChild(_203);_203=_204;}}_1fc=dijit.range.create(this.editor.window);_1fc.setStart(_202,0);_1fa.removeAllRanges();_1fa.addRange(_1fc);if(this.editor.height){dijit.scrollIntoView(_202);}if(dojo.isMoz){this._pressedEnterInBlock=_200.blockNode;}}}return _1ff;},removeTrailingBr:function(_209){var para=/P|DIV|LI/i.test(_209.tagName)?_209:dijit._editor.selection.getParentOfType(_209,["P","DIV","LI"]);if(!para){return;}if(para.lastChild){if((para.childNodes.length>1&&para.lastChild.nodeType==3&&/^[\s\xAD]*$/.test(para.lastChild.nodeValue))||para.lastChild.tagName=="BR"){dojo.destroy(para.lastChild);}}if(!para.childNodes.length){para.innerHTML=this.bogusHtmlContent;}},_fixNewLineBehaviorForIE:function(d){var doc=this.editor.document;if(doc.__INSERTED_EDITIOR_NEWLINE_CSS===undefined){var _20a=dojo.create("style",{type:"text/css"},doc.getElementsByTagName("head")[0]);_20a.styleSheet.cssText="p{margin:0;}";this.editor.document.__INSERTED_EDITIOR_NEWLINE_CSS=true;}return d;},regularPsToSingleLinePs:function(_20b,_20c){function _20d(el){function _20e(_20f){var newP=_20f[0].ownerDocument.createElement("p");_20f[0].parentNode.insertBefore(newP,_20f[0]);dojo.forEach(_20f,function(node){newP.appendChild(node);});};var _210=0;var _211=[];var _212;while(_210<el.childNodes.length){_212=el.childNodes[_210];if(_212.nodeType==3||(_212.nodeType==1&&_212.nodeName!="BR"&&dojo.style(_212,"display")!="block")){_211.push(_212);}else{var _213=_212.nextSibling;if(_211.length){_20e(_211);_210=(_210+1)-_211.length;if(_212.nodeName=="BR"){dojo.destroy(_212);}}_211=[];}_210++;}if(_211.length){_20e(_211);}};function _214(el){var _215=null;var _216=[];var _217=el.childNodes.length-1;for(var i=_217;i>=0;i--){_215=el.childNodes[i];if(_215.nodeName=="BR"){var newP=_215.ownerDocument.createElement("p");dojo.place(newP,el,"after");if(_216.length==0&&i!=_217){newP.innerHTML="&nbsp;";}dojo.forEach(_216,function(node){newP.appendChild(node);});dojo.destroy(_215);_216=[];}else{_216.unshift(_215);}}};var _218=[];var ps=_20b.getElementsByTagName("p");dojo.forEach(ps,function(p){_218.push(p);});dojo.forEach(_218,function(p){var _219=p.previousSibling;if((_219)&&(_219.nodeType==1)&&(_219.nodeName=="P"||dojo.style(_219,"display")!="block")){var newP=p.parentNode.insertBefore(this.document.createElement("p"),p);newP.innerHTML=_20c?"":"&nbsp;";}_214(p);},this.editor);_20d(_20b);return _20b;},singleLinePsToRegularPs:function(_21a){function _21b(node){var ps=node.getElementsByTagName("p");var _21c=[];for(var i=0;i<ps.length;i++){var p=ps[i];var _21d=false;for(var k=0;k<_21c.length;k++){if(_21c[k]===p.parentNode){_21d=true;break;}}if(!_21d){_21c.push(p.parentNode);}}return _21c;};function _21e(node){return (!node.childNodes.length||node.innerHTML=="&nbsp;");};var _21f=_21b(_21a);for(var i=0;i<_21f.length;i++){var _220=_21f[i];var _221=null;var node=_220.firstChild;var _222=null;while(node){if(node.nodeType!=1||node.tagName!="P"||(node.getAttributeNode("style")||{}).specified){_221=null;}else{if(_21e(node)){_222=node;_221=null;}else{if(_221==null){_221=node;}else{if((!_221.lastChild||_221.lastChild.nodeName!="BR")&&(node.firstChild)&&(node.firstChild.nodeName!="BR")){_221.appendChild(this.editor.document.createElement("br"));}while(node.firstChild){_221.appendChild(node.firstChild);}_222=node;}}}node=node.nextSibling;if(_222){dojo.destroy(_222);_222=null;}}}return _21a;}});}if(!dojo._hasResource["dijit.Editor"]){dojo._hasResource["dijit.Editor"]=true;dojo.provide("dijit.Editor");dojo.declare("dijit.Editor",dijit._editor.RichText,{plugins:null,extraPlugins:null,constructor:function(){if(!dojo.isArray(this.plugins)){this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|","insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull","dijit._editor.plugins.EnterKeyHandling"];}this._plugins=[];this._editInterval=this.editActionInterval*1000;if(dojo.isIE){this.events.push("onBeforeDeactivate");this.events.push("onBeforeActivate");}},postCreate:function(){this._steps=this._steps.slice(0);this._undoedSteps=this._undoedSteps.slice(0);if(dojo.isArray(this.extraPlugins)){this.plugins=this.plugins.concat(this.extraPlugins);}this.setValueDeferred=new dojo.Deferred();this.inherited(arguments);this.commands=dojo.i18n.getLocalization("dijit._editor","commands",this.lang);if(!this.toolbar){this.toolbar=new dijit.Toolbar({dir:this.dir,lang:this.lang});this.header.appendChild(this.toolbar.domNode);}dojo.forEach(this.plugins,this.addPlugin,this);this.setValueDeferred.callback(true);dojo.addClass(this.iframe.parentNode,"dijitEditorIFrameContainer");dojo.addClass(this.iframe,"dijitEditorIFrame");dojo.attr(this.iframe,"allowTransparency",true);if(dojo.isWebKit){dojo.style(this.domNode,"KhtmlUserSelect","none");}this.toolbar.startup();this.onNormalizedDisplayChanged();},destroy:function(){dojo.forEach(this._plugins,function(p){if(p&&p.destroy){p.destroy();}});this._plugins=[];this.toolbar.destroyRecursive();delete this.toolbar;this.inherited(arguments);},addPlugin:function(_223,_224){var args=dojo.isString(_223)?{name:_223}:_223;if(!args.setEditor){var o={"args":args,"plugin":null,"editor":this};dojo.publish(dijit._scopeName+".Editor.getPlugin",[o]);if(!o.plugin){var pc=dojo.getObject(args.name);if(pc){o.plugin=new pc(args);}}if(!o.plugin){console.warn("Cannot find plugin",_223);return;}_223=o.plugin;}if(arguments.length>1){this._plugins[_224]=_223;}else{this._plugins.push(_223);}_223.setEditor(this);if(dojo.isFunction(_223.setToolbar)){_223.setToolbar(this.toolbar);}},startup:function(){},resize:function(size){if(size){dijit.layout._LayoutWidget.prototype.resize.apply(this,arguments);}},layout:function(){var _225=(this._contentBox.h-(this.getHeaderHeight()+this.getFooterHeight()+dojo._getPadBorderExtents(this.iframe.parentNode).h+dojo._getMarginExtents(this.iframe.parentNode).h));this.editingArea.style.height=_225+"px";if(this.iframe){this.iframe.style.height="100%";}this._layoutMode=true;},_onIEMouseDown:function(e){var _226;var b=this.document.body;var _227=b.clientWidth;var _228=b.clientHeight;var _229=b.clientLeft;var _22a=b.offsetWidth;var _22b=b.offsetHeight;var _22c=b.offsetLeft;bodyDir=b.dir?b.dir.toLowerCase():"";if(bodyDir!="rtl"){if(_227<_22a&&e.x>_227&&e.x<_22a){_226=true;}}else{if(e.x<_229&&e.x>_22c){_226=true;}}if(!_226){if(_228<_22b&&e.y>_228&&e.y<_22b){_226=true;}}if(!_226){delete this._cursorToStart;delete this._savedSelection;if(e.target.tagName=="BODY"){setTimeout(dojo.hitch(this,"placeCursorAtEnd"),0);}this.inherited(arguments);}},onBeforeActivate:function(e){this._restoreSelection();},onBeforeDeactivate:function(e){if(this.customUndo){this.endEditing(true);}if(e.target.tagName!="BODY"){this._saveSelection();}},customUndo:dojo.isIE||dojo.isWebKit,editActionInterval:3,beginEditing:function(cmd){if(!this._inEditing){this._inEditing=true;this._beginEditing(cmd);}if(this.editActionInterval>0){if(this._editTimer){clearTimeout(this._editTimer);}this._editTimer=setTimeout(dojo.hitch(this,this.endEditing),this._editInterval);}},_steps:[],_undoedSteps:[],execCommand:function(cmd){if(this.customUndo&&(cmd=="undo"||cmd=="redo")){return this[cmd]();}else{if(this.customUndo){this.endEditing();this._beginEditing();}var r;try{r=this.inherited("execCommand",arguments);if(dojo.isWebKit&&cmd=="paste"&&!r){throw {code:1011};}}catch(e){if(e.code==1011&&/copy|cut|paste/.test(cmd)){var sub=dojo.string.substitute,_22d={cut:"X",copy:"C",paste:"V"};alert(sub(this.commands.systemShortcut,[this.commands[cmd],sub(this.commands[dojo.isMac?"appleKey":"ctrlKey"],[_22d[cmd]])]));}r=false;}if(this.customUndo){this._endEditing();}return r;}},queryCommandEnabled:function(cmd){if(this.customUndo&&(cmd=="undo"||cmd=="redo")){return cmd=="undo"?(this._steps.length>1):(this._undoedSteps.length>0);}else{return this.inherited("queryCommandEnabled",arguments);}},_moveToBookmark:function(b){var _22e=b.mark;var mark=b.mark;var col=b.isCollapsed;var r,_22f,_230,sel;if(mark){if(dojo.isIE){if(dojo.isArray(mark)){_22e=[];dojo.forEach(mark,function(n){_22e.push(dijit.range.getNode(n,this.editNode));},this);dojo.withGlobal(this.window,"moveToBookmark",dijit,[{mark:_22e,isCollapsed:col}]);}else{if(mark.startContainer&&mark.endContainer){sel=dijit.range.getSelection(this.window);if(sel&&sel.removeAllRanges){sel.removeAllRanges();r=dijit.range.create(this.window);_22f=dijit.range.getNode(mark.startContainer,this.editNode);_230=dijit.range.getNode(mark.endContainer,this.editNode);if(_22f&&_230){r.setStart(_22f,mark.startOffset);r.setEnd(_230,mark.endOffset);sel.addRange(r);}}}}}else{sel=dijit.range.getSelection(this.window);if(sel&&sel.removeAllRanges){sel.removeAllRanges();r=dijit.range.create(this.window);_22f=dijit.range.getNode(mark.startContainer,this.editNode);_230=dijit.range.getNode(mark.endContainer,this.editNode);if(_22f&&_230){r.setStart(_22f,mark.startOffset);r.setEnd(_230,mark.endOffset);sel.addRange(r);}}}}},_changeToStep:function(from,to){this.setValue(to.text);var b=to.bookmark;if(!b){return;}this._moveToBookmark(b);},undo:function(){var ret=false;if(!this._undoRedoActive){this._undoRedoActive=true;this.endEditing(true);var s=this._steps.pop();if(s&&this._steps.length>0){this.focus();this._changeToStep(s,this._steps[this._steps.length-1]);this._undoedSteps.push(s);this.onDisplayChanged();delete this._undoRedoActive;ret=true;}delete this._undoRedoActive;}return ret;},redo:function(){var ret=false;if(!this._undoRedoActive){this._undoRedoActive=true;this.endEditing(true);var s=this._undoedSteps.pop();if(s&&this._steps.length>0){this.focus();this._changeToStep(this._steps[this._steps.length-1],s);this._steps.push(s);this.onDisplayChanged();ret=true;}delete this._undoRedoActive;}return ret;},endEditing:function(_231){if(this._editTimer){clearTimeout(this._editTimer);}if(this._inEditing){this._endEditing(_231);this._inEditing=false;}},_getBookmark:function(){var b=dojo.withGlobal(this.window,dijit.getBookmark);var tmp=[];if(b&&b.mark){var mark=b.mark;if(dojo.isIE){var sel=dijit.range.getSelection(this.window);if(!dojo.isArray(mark)){if(sel){var _232;if(sel.rangeCount){_232=sel.getRangeAt(0);}if(_232){b.mark=_232.cloneRange();}else{b.mark=dojo.withGlobal(this.window,dijit.getBookmark);}}}else{dojo.forEach(b.mark,function(n){tmp.push(dijit.range.getIndex(n,this.editNode).o);},this);b.mark=tmp;}}try{if(b.mark&&b.mark.startContainer){tmp=dijit.range.getIndex(b.mark.startContainer,this.editNode).o;b.mark={startContainer:tmp,startOffset:b.mark.startOffset,endContainer:b.mark.endContainer===b.mark.startContainer?tmp:dijit.range.getIndex(b.mark.endContainer,this.editNode).o,endOffset:b.mark.endOffset};}}catch(e){b.mark=null;}}return b;},_beginEditing:function(cmd){if(this._steps.length===0){this._steps.push({"text":dijit._editor.getChildrenHtml(this.editNode),"bookmark":this._getBookmark()});}},_endEditing:function(_233){var v=dijit._editor.getChildrenHtml(this.editNode);this._undoedSteps=[];this._steps.push({text:v,bookmark:this._getBookmark()});},onKeyDown:function(e){if(!dojo.isIE&&!this.iframe&&e.keyCode==dojo.keys.TAB&&!this.tabIndent){this._saveSelection();}if(!this.customUndo){this.inherited(arguments);return;}var k=e.keyCode,ks=dojo.keys;if(e.ctrlKey&&!e.altKey){if(k==90||k==122){dojo.stopEvent(e);this.undo();return;}else{if(k==89||k==121){dojo.stopEvent(e);this.redo();return;}}}this.inherited(arguments);switch(k){case ks.ENTER:case ks.BACKSPACE:case ks.DELETE:this.beginEditing();break;case 88:case 86:if(e.ctrlKey&&!e.altKey&&!e.metaKey){this.endEditing();if(e.keyCode==88){this.beginEditing("cut");setTimeout(dojo.hitch(this,this.endEditing),1);}else{this.beginEditing("paste");setTimeout(dojo.hitch(this,this.endEditing),1);}break;}default:if(!e.ctrlKey&&!e.altKey&&!e.metaKey&&(e.keyCode<dojo.keys.F1||e.keyCode>dojo.keys.F15)){this.beginEditing();break;}case ks.ALT:this.endEditing();break;case ks.UP_ARROW:case ks.DOWN_ARROW:case ks.LEFT_ARROW:case ks.RIGHT_ARROW:case ks.HOME:case ks.END:case ks.PAGE_UP:case ks.PAGE_DOWN:this.endEditing(true);break;case ks.CTRL:case ks.SHIFT:case ks.TAB:break;}},_onBlur:function(){this.inherited("_onBlur",arguments);this.endEditing(true);},_saveSelection:function(){this._savedSelection=this._getBookmark();},_restoreSelection:function(){if(this._savedSelection){delete this._cursorToStart;if(dojo.withGlobal(this.window,"isCollapsed",dijit)){this._moveToBookmark(this._savedSelection);}delete this._savedSelection;}},onClick:function(){this.endEditing(true);this.inherited(arguments);},_setDisabledAttr:function(_234){if(!this.disabled&&_234){this._buttonEnabledPlugins=dojo.filter(this._plugins,function(p){if(p&&p.button&&!p.button.get("disabled")){p.button.set("disabled",true);return true;}return false;});}else{if(this.disabled&&!_234){dojo.forEach(this._buttonEnabledPlugins,function(p){p.button.attr("disabled",false);p.updateState&&p.updateState();});}}this.inherited(arguments);},_setStateClass:function(){this.inherited(arguments);if(this.document&&this.document.body){dojo.style(this.document.body,"color",dojo.style(this.iframe,"color"));}}});dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){if(o.plugin){return;}var args=o.args,p;var _235=dijit._editor._Plugin;var name=args.name;switch(name){case "undo":case "redo":case "cut":case "copy":case "paste":case "insertOrderedList":case "insertUnorderedList":case "indent":case "outdent":case "justifyCenter":case "justifyFull":case "justifyLeft":case "justifyRight":case "delete":case "selectAll":case "removeFormat":case "unlink":case "insertHorizontalRule":p=new _235({command:name});break;case "bold":case "italic":case "underline":case "strikethrough":case "subscript":case "superscript":p=new _235({buttonClass:dijit.form.ToggleButton,command:name});break;case "|":p=new _235({button:new dijit.ToolbarSeparator(),setEditor:function(_236){this.editor=_236;}});}o.plugin=p;});}if(!dojo._hasResource["dojo.regexp"]){dojo._hasResource["dojo.regexp"]=true;dojo.provide("dojo.regexp");dojo.regexp.escapeString=function(str,_237){return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(ch){if(_237&&_237.indexOf(ch)!=-1){return ch;}return "\\"+ch;});};dojo.regexp.buildGroupRE=function(arr,re,_238){if(!(arr instanceof Array)){return re(arr);}var b=[];for(var i=0;i<arr.length;i++){b.push(re(arr[i]));}return dojo.regexp.group(b.join("|"),_238);};dojo.regexp.group=function(_239,_23a){return "("+(_23a?"?:":"")+_239+")";};}if(!dojo._hasResource["dojo.data.util.sorter"]){dojo._hasResource["dojo.data.util.sorter"]=true;dojo.provide("dojo.data.util.sorter");dojo.data.util.sorter.basicComparator=function(a,b){var r=-1;if(a===null){a=undefined;}if(b===null){b=undefined;}if(a==b){r=0;}else{if(a>b||a==null){r=1;}}return r;};dojo.data.util.sorter.createSortFunction=function(_23b,_23c){var _23d=[];function _23e(attr,dir,comp,s){return function(_23f,_240){var a=s.getValue(_23f,attr);var b=s.getValue(_240,attr);return dir*comp(a,b);};};var _241;var map=_23c.comparatorMap;var bc=dojo.data.util.sorter.basicComparator;for(var i=0;i<_23b.length;i++){_241=_23b[i];var attr=_241.attribute;if(attr){var dir=(_241.descending)?-1:1;var comp=bc;if(map){if(typeof attr!=="string"&&("toString" in attr)){attr=attr.toString();}comp=map[attr]||bc;}_23d.push(_23e(attr,dir,comp,_23c));}}return function(rowA,rowB){var i=0;while(i<_23d.length){var ret=_23d[i++](rowA,rowB);if(ret!==0){return ret;}}return 0;};};}if(!dojo._hasResource["dojo.data.util.simpleFetch"]){dojo._hasResource["dojo.data.util.simpleFetch"]=true;dojo.provide("dojo.data.util.simpleFetch");dojo.data.util.simpleFetch.fetch=function(_242){_242=_242||{};if(!_242.store){_242.store=this;}var self=this;var _243=function(_244,_245){if(_245.onError){var _246=_245.scope||dojo.global;_245.onError.call(_246,_244,_245);}};var _247=function(_248,_249){var _24a=_249.abort||null;var _24b=false;var _24c=_249.start?_249.start:0;var _24d=(_249.count&&(_249.count!==Infinity))?(_24c+_249.count):_248.length;_249.abort=function(){_24b=true;if(_24a){_24a.call(_249);}};var _24e=_249.scope||dojo.global;if(!_249.store){_249.store=self;}if(_249.onBegin){_249.onBegin.call(_24e,_248.length,_249);}if(_249.sort){_248.sort(dojo.data.util.sorter.createSortFunction(_249.sort,self));}if(_249.onItem){for(var i=_24c;(i<_248.length)&&(i<_24d);++i){var item=_248[i];if(!_24b){_249.onItem.call(_24e,item,_249);}}}if(_249.onComplete&&!_24b){var _24f=null;if(!_249.onItem){_24f=_248.slice(_24c,_24d);}_249.onComplete.call(_24e,_24f,_249);}};this._fetchItems(_242,_247,_243);return _242;};}if(!dojo._hasResource["dojo.data.util.filter"]){dojo._hasResource["dojo.data.util.filter"]=true;dojo.provide("dojo.data.util.filter");dojo.data.util.filter.patternToRegExp=function(_250,_251){var rxp="^";var c=null;for(var i=0;i<_250.length;i++){c=_250.charAt(i);switch(c){case "\\":rxp+=c;i++;rxp+=_250.charAt(i);break;case "*":rxp+=".*";break;case "?":rxp+=".";break;case "$":case "^":case "/":case "+":case ".":case "|":case "(":case ")":case "{":case "}":case "[":case "]":rxp+="\\";default:rxp+=c;}}rxp+="$";if(_251){return new RegExp(rxp,"mi");}else{return new RegExp(rxp,"m");}};}if(!dojo._hasResource["dijit.form.TextBox"]){dojo._hasResource["dijit.form.TextBox"]=true;dojo.provide("dijit.form.TextBox");dojo.declare("dijit.form.TextBox",dijit.form._FormValueWidget,{trim:false,uppercase:false,lowercase:false,propercase:false,maxLength:"",selectOnClick:false,placeHolder:"",templateString:dojo.cache("dijit.form","templates/TextBox.html","<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),_singleNodeTemplate:"<input class=\"dijit dijitReset dijitLeft dijitInputField\" dojoAttachPoint=\"textbox,focusNode\" autocomplete=\"off\" type=\"${type}\" ${!nameAttrSetting} />",_buttonInputDisabled:dojo.isIE?"disabled":"",baseClass:"dijitTextBox",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{maxLength:"focusNode"}),postMixInProperties:function(){var type=this.type.toLowerCase();if(this.templateString.toLowerCase()=="input"||((type=="hidden"||type=="file")&&this.templateString==dijit.form.TextBox.prototype.templateString)){this.templateString=this._singleNodeTemplate;}this.inherited(arguments);},_setPlaceHolderAttr:function(v){this.placeHolder=v;if(!this._phspan){this._attachPoints.push("_phspan");this._phspan=dojo.create("span",{className:"dijitPlaceHolder dijitInputField"},this.textbox,"after");}this._phspan.innerHTML="";this._phspan.appendChild(document.createTextNode(v));this._updatePlaceHolder();},_updatePlaceHolder:function(){if(this._phspan){this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";}},_getValueAttr:function(){return this.parse(this.get("displayedValue"),this.constraints);},_setValueAttr:function(_252,_253,_254){var _255;if(_252!==undefined){_255=this.filter(_252);if(typeof _254!="string"){if(_255!==null&&((typeof _255!="number")||!isNaN(_255))){_254=this.filter(this.format(_255,this.constraints));}else{_254="";}}}if(_254!=null&&_254!=undefined&&((typeof _254)!="number"||!isNaN(_254))&&this.textbox.value!=_254){this.textbox.value=_254;}this._updatePlaceHolder();this.inherited(arguments,[_255,_253]);},displayedValue:"",getDisplayedValue:function(){dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.","","2.0");return this.get("displayedValue");},_getDisplayedValueAttr:function(){return this.filter(this.textbox.value);},setDisplayedValue:function(_256){dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.","","2.0");this.set("displayedValue",_256);},_setDisplayedValueAttr:function(_257){if(_257===null||_257===undefined){_257="";}else{if(typeof _257!="string"){_257=String(_257);}}this.textbox.value=_257;this._setValueAttr(this.get("value"),undefined,_257);},format:function(_258,_259){return ((_258==null||_258==undefined)?"":(_258.toString?_258.toString():_258));},parse:function(_25a,_25b){return _25a;},_refreshState:function(){},_onInput:function(e){if(e&&e.type&&/key/i.test(e.type)&&e.keyCode){switch(e.keyCode){case dojo.keys.SHIFT:case dojo.keys.ALT:case dojo.keys.CTRL:case dojo.keys.TAB:return;}}if(this.intermediateChanges){var _25c=this;setTimeout(function(){_25c._handleOnChange(_25c.get("value"),false);},0);}this._refreshState();},postCreate:function(){if(dojo.isIE){var s=dojo.getComputedStyle(this.domNode);if(s){var ff=s.fontFamily;if(ff){var _25d=this.domNode.getElementsByTagName("INPUT");if(_25d){for(var i=0;i<_25d.length;i++){_25d[i].style.fontFamily=ff;}}}}}this.textbox.setAttribute("value",this.textbox.value);this.inherited(arguments);if(dojo.isMoz||dojo.isOpera){this.connect(this.textbox,"oninput",this._onInput);}else{this.connect(this.textbox,"onkeydown",this._onInput);this.connect(this.textbox,"onkeyup",this._onInput);this.connect(this.textbox,"onpaste",this._onInput);this.connect(this.textbox,"oncut",this._onInput);}},_blankValue:"",filter:function(val){if(val===null){return this._blankValue;}if(typeof val!="string"){return val;}if(this.trim){val=dojo.trim(val);}if(this.uppercase){val=val.toUpperCase();}if(this.lowercase){val=val.toLowerCase();}if(this.propercase){val=val.replace(/[^\s]+/g,function(word){return word.substring(0,1).toUpperCase()+word.substring(1);});}return val;},_setBlurValue:function(){this._setValueAttr(this.get("value"),true);},_onBlur:function(e){if(this.disabled){return;}this._setBlurValue();this.inherited(arguments);if(this._selectOnClickHandle){this.disconnect(this._selectOnClickHandle);}if(this.selectOnClick&&dojo.isMoz){this.textbox.selectionStart=this.textbox.selectionEnd=undefined;}this._updatePlaceHolder();},_onFocus:function(by){if(this.disabled||this.readOnly){return;}if(this.selectOnClick&&by=="mouse"){this._selectOnClickHandle=this.connect(this.domNode,"onmouseup",function(){this.disconnect(this._selectOnClickHandle);var _25e;if(dojo.isIE){var _25f=dojo.doc.selection.createRange();var _260=_25f.parentElement();_25e=_260==this.textbox&&_25f.text.length==0;}else{_25e=this.textbox.selectionStart==this.textbox.selectionEnd;}if(_25e){dijit.selectInputText(this.textbox);}});}this._updatePlaceHolder();this._refreshState();this.inherited(arguments);},reset:function(){this.textbox.value="";this.inherited(arguments);}});dijit.selectInputText=function(_261,_262,stop){var _263=dojo.global;var _264=dojo.doc;_261=dojo.byId(_261);if(isNaN(_262)){_262=0;}if(isNaN(stop)){stop=_261.value?_261.value.length:0;}dijit.focus(_261);if(_264["selection"]&&dojo.body()["createTextRange"]){if(_261.createTextRange){var _265=_261.createTextRange();with(_265){collapse(true);moveStart("character",-99999);moveStart("character",_262);moveEnd("character",stop-_262);select();}}}else{if(_263["getSelection"]){if(_261.setSelectionRange){_261.setSelectionRange(_262,stop);}}}};}if(!dojo._hasResource["dijit.Tooltip"]){dojo._hasResource["dijit.Tooltip"]=true;dojo.provide("dijit.Tooltip");dojo.declare("dijit._MasterTooltip",[dijit._Widget,dijit._Templated],{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);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(_266,_267,_268,rtl){if(this.aroundNode&&this.aroundNode===_267){return;}if(this.fadeOut.status()=="playing"){this._onDeck=arguments;return;}this.containerNode.innerHTML=_266;var pos=dijit.placeOnScreenAroundElement(this.domNode,_267,dijit.getPopupAroundAlignment((_268&&_268.length)?_268:dijit.Tooltip.defaultPosition,!rtl),dojo.hitch(this,"orient"));dojo.style(this.domNode,"opacity",0);this.fadeIn.play();this.isShowingNow=true;this.aroundNode=_267;},orient:function(node,_269,_26a){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"}[_269+"-"+_26a];},_onShow:function(){if(dojo.isIE){this.domNode.style.filter="";}},hide:function(_26b){if(this._onDeck&&this._onDeck[1]==_26b){this._onDeck=null;}else{if(this.aroundNode===_26b){this.fadeIn.stop();this.isShowingNow=false;this.aroundNode=null;this.fadeOut.play();}else{}}},_onHide:function(){this.domNode.style.cssText="";this.containerNode.innerHTML="";if(this._onDeck){this.show.apply(this,this._onDeck);this._onDeck=null;}}});dijit.showTooltip=function(_26c,_26d,_26e,rtl){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.show(_26c,_26d,_26e,rtl);};dijit.hideTooltip=function(_26f){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.hide(_26f);};dojo.declare("dijit.Tooltip",dijit._Widget,{label:"",showDelay:400,connectId:[],position:[],constructor:function(){this._nodeConnectionsById={};},_setConnectIdAttr:function(_270){for(var _271 in this._nodeConnectionsById){this.removeTarget(_271);}dojo.forEach(dojo.isArrayLike(_270)?_270:[_270],this.addTarget,this);},_getConnectIdAttr:function(){var ary=[];for(var id in this._nodeConnectionsById){ary.push(id);}return ary;},addTarget:function(id){var node=dojo.byId(id);if(!node){return;}if(node.id in this._nodeConnectionsById){return;}this._nodeConnectionsById[node.id]=[this.connect(node,"onmouseenter","_onTargetMouseEnter"),this.connect(node,"onmouseleave","_onTargetMouseLeave"),this.connect(node,"onfocus","_onTargetFocus"),this.connect(node,"onblur","_onTargetBlur")];},removeTarget:function(node){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);var ids=this.connectId;dojo.forEach(dojo.isArrayLike(ids)?ids:[ids],this.addTarget,this);},_onTargetMouseEnter:function(e){this._onHover(e);},_onTargetMouseLeave:function(e){this._onUnHover(e);},_onTargetFocus:function(e){this._focus=true;this._onHover(e);},_onTargetBlur:function(e){this._focus=false;this._onUnHover(e);},_onHover:function(e){if(!this._showTimer){var _272=e.target;this._showTimer=setTimeout(dojo.hitch(this,function(){this.open(_272);}),this.showDelay);}},_onUnHover:function(e){if(this._focus){return;}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}this.close();},open:function(_273){if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}dijit.showTooltip(this.label||this.domNode.innerHTML,_273,this.position,!this.isLeftToRight());this._connectNode=_273;this.onShow(_273,this.position);},close:function(){if(this._connectNode){dijit.hideTooltip(this._connectNode);delete this._connectNode;this.onHide();}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}},onShow:function(_274,_275){},onHide:function(){},uninitialize:function(){this.close();this.inherited(arguments);}});dijit.Tooltip.defaultPosition=["after","before"];}if(!dojo._hasResource["dijit.form.ValidationTextBox"]){dojo._hasResource["dijit.form.ValidationTextBox"]=true;dojo.provide("dijit.form.ValidationTextBox");dojo.declare("dijit.form.ValidationTextBox",dijit.form.TextBox,{templateString:dojo.cache("dijit.form","templates/ValidationTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitValidationTextBox",required:false,promptMessage:"",invalidMessage:"$_unset_$",missingMessage:"$_unset_$",constraints:{},regExp:".*",regExpGen:function(_276){return this.regExp;},state:"",tooltipPosition:[],_setValueAttr:function(){this.inherited(arguments);this.validate(this._focused);},validator:function(_277,_278){return (new RegExp("^(?:"+this.regExpGen(_278)+")"+(this.required?"":"?")+"$")).test(_277)&&(!this.required||!this._isEmpty(_277))&&(this._isEmpty(_277)||this.parse(_277,_278)!==undefined);},_isValidSubset:function(){return this.textbox.value.search(this._partialre)==0;},isValid:function(_279){return this.validator(this.textbox.value,this.constraints);},_isEmpty:function(_27a){return /^\s*$/.test(_27a);},getErrorMessage:function(_27b){return (this.required&&this._isEmpty(this.textbox.value))?this.missingMessage:this.invalidMessage;},getPromptMessage:function(_27c){return this.promptMessage;},_maskValidSubsetError:true,validate:function(_27d){var _27e="";var _27f=this.disabled||this.isValid(_27d);if(_27f){this._maskValidSubsetError=true;}var _280=this._isEmpty(this.textbox.value);var _281=!_27f&&!_280&&_27d&&this._isValidSubset();this.state=((_27f||((!this._hasBeenBlurred||_27d)&&_280)||_281)&&this._maskValidSubsetError)?"":"Error";if(this.state=="Error"){this._maskValidSubsetError=_27d;}this._setStateClass();dijit.setWaiState(this.focusNode,"invalid",_27f?"false":"true");if(_27d){if(this.state=="Error"){_27e=this.getErrorMessage(true);}else{_27e=this.getPromptMessage(true);}this._maskValidSubsetError=true;}this.displayMessage(_27e);return _27f;},_message:"",displayMessage:function(_282){if(this._message==_282){return;}this._message=_282;dijit.hideTooltip(this.domNode);if(_282){dijit.showTooltip(_282,this.domNode,this.tooltipPosition,!this.isLeftToRight());}},_refreshState:function(){this.validate(this._focused);this.inherited(arguments);},constructor:function(){this.constraints={};},_setConstraintsAttr:function(_283){if(!_283.locale&&this.lang){_283.locale=this.lang;}this.constraints=_283;this._computePartialRE();},_computePartialRE:function(){var p=this.regExpGen(this.constraints);this.regExp=p;var _284="";if(p!=".*"){this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,function(re){switch(re.charAt(0)){case "{":case "+":case "?":case "*":case "^":case "$":case "|":case "(":_284+=re;break;case ")":_284+="|$)";break;default:_284+="(?:"+re+"|$)";break;}});}try{"".search(_284);}catch(e){_284=this.regExp;console.warn("RegExp error in "+this.declaredClass+": "+this.regExp);}this._partialre="^(?:"+_284+")$";},postMixInProperties:function(){this.inherited(arguments);this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);if(this.invalidMessage=="$_unset_$"){this.invalidMessage=this.messages.invalidMessage;}if(!this.invalidMessage){this.invalidMessage=this.promptMessage;}if(this.missingMessage=="$_unset_$"){this.missingMessage=this.messages.missingMessage;}if(!this.missingMessage){this.missingMessage=this.invalidMessage;}this._setConstraintsAttr(this.constraints);},_setDisabledAttr:function(_285){this.inherited(arguments);this._refreshState();},_setRequiredAttr:function(_286){this.required=_286;dijit.setWaiState(this.focusNode,"required",_286);this._refreshState();},reset:function(){this._maskValidSubsetError=true;this.inherited(arguments);},_onBlur:function(){this.displayMessage("");this.inherited(arguments);}});dojo.declare("dijit.form.MappedTextBox",dijit.form.ValidationTextBox,{postMixInProperties:function(){this.inherited(arguments);this.nameAttrSetting="";},serialize:function(val,_287){return val.toString?val.toString():"";},toString:function(){var val=this.filter(this.get("value"));return val!=null?(typeof val=="string"?val:this.serialize(val,this.constraints)):"";},validate:function(){this.valueNode.value=this.toString();return this.inherited(arguments);},buildRendering:function(){this.inherited(arguments);this.valueNode=dojo.place("<input type='hidden'"+(this.name?" name='"+this.name+"'":"")+">",this.textbox,"after");},reset:function(){this.valueNode.value="";this.inherited(arguments);}});dojo.declare("dijit.form.RangeBoundTextBox",dijit.form.MappedTextBox,{rangeMessage:"",rangeCheck:function(_288,_289){return ("min" in _289?(this.compare(_288,_289.min)>=0):true)&&("max" in _289?(this.compare(_288,_289.max)<=0):true);},isInRange:function(_28a){return this.rangeCheck(this.get("value"),this.constraints);},_isDefinitelyOutOfRange:function(){var val=this.get("value");var _28b=false;var _28c=false;if("min" in this.constraints){var min=this.constraints.min;min=this.compare(val,((typeof min=="number")&&min>=0&&val!=0)?0:min);_28b=(typeof min=="number")&&min<0;}if("max" in this.constraints){var max=this.constraints.max;max=this.compare(val,((typeof max!="number")||max>0)?max:0);_28c=(typeof max=="number")&&max>0;}return _28b||_28c;},_isValidSubset:function(){return this.inherited(arguments)&&!this._isDefinitelyOutOfRange();},isValid:function(_28d){return this.inherited(arguments)&&((this._isEmpty(this.textbox.value)&&!this.required)||this.isInRange(_28d));},getErrorMessage:function(_28e){var v=this.get("value");if(v!==null&&v!==""&&v!==undefined&&(typeof v!="number"||!isNaN(v))&&!this.isInRange(_28e)){return this.rangeMessage;}return this.inherited(arguments);},postMixInProperties:function(){this.inherited(arguments);if(!this.rangeMessage){this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);this.rangeMessage=this.messages.rangeMessage;}},_setConstraintsAttr:function(_28f){this.inherited(arguments);if(this.focusNode){if(this.constraints.min!==undefined){dijit.setWaiState(this.focusNode,"valuemin",this.constraints.min);}else{dijit.removeWaiState(this.focusNode,"valuemin");}if(this.constraints.max!==undefined){dijit.setWaiState(this.focusNode,"valuemax",this.constraints.max);}else{dijit.removeWaiState(this.focusNode,"valuemax");}}},_setValueAttr:function(_290,_291){dijit.setWaiState(this.focusNode,"valuenow",_290);this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.ComboBox"]){dojo._hasResource["dijit.form.ComboBox"]=true;dojo.provide("dijit.form.ComboBox");dojo.declare("dijit.form.ComboBoxMixin",null,{item:null,pageSize:Infinity,store:null,fetchProperties:{},query:{},autoComplete:true,highlightMatch:"first",searchDelay:100,searchAttr:"name",labelAttr:"",labelType:"text",queryExpr:"${0}*",ignoreCase:true,hasDownArrow:true,templateString:dojo.cache("dijit.form","templates/ComboBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitComboBox",cssStateNodes:{"downArrowNode":"dijitDownArrowButton"},_getCaretPos:function(_292){var pos=0;if(typeof (_292.selectionStart)=="number"){pos=_292.selectionStart;}else{if(dojo.isIE){var tr=dojo.doc.selection.createRange().duplicate();var ntr=_292.createTextRange();tr.move("character",0);ntr.move("character",0);try{ntr.setEndPoint("EndToEnd",tr);pos=String(ntr.text).replace(/\r/g,"").length;}catch(e){}}}return pos;},_setCaretPos:function(_293,_294){_294=parseInt(_294);dijit.selectInputText(_293,_294,_294);},_setDisabledAttr:function(_295){this.inherited(arguments);dijit.setWaiState(this.comboNode,"disabled",_295);},_abortQuery:function(){if(this.searchTimer){clearTimeout(this.searchTimer);this.searchTimer=null;}if(this._fetchHandle){if(this._fetchHandle.abort){this._fetchHandle.abort();}this._fetchHandle=null;}},_onInput:function(evt){if(!this.searchTimer&&(evt.type=="paste"||evt.type=="input")&&this._lastInput!=this.textbox.value){this.searchTimer=setTimeout(dojo.hitch(this,function(){this._onKeyPress({charOrCode:229});}),100);}this.inherited(arguments);},_onKeyPress:function(evt){var key=evt.charOrCode;if(evt.altKey||((evt.ctrlKey||evt.metaKey)&&(key!="x"&&key!="v"))||key==dojo.keys.SHIFT){return;}var _296=false;var _297="_startSearchFromInput";var pw=this._popupWidget;var dk=dojo.keys;var _298=null;this._prev_key_backspace=false;this._abortQuery();if(this._isShowingNow){pw.handleKey(key);_298=pw.getHighlightedOption();}switch(key){case dk.PAGE_DOWN:case dk.DOWN_ARROW:case dk.PAGE_UP:case dk.UP_ARROW:if(!this._isShowingNow){_296=true;_297="_startSearchAll";}else{this._announceOption(_298);}dojo.stopEvent(evt);break;case dk.ENTER:if(_298){if(_298==pw.nextButton){this._nextSearch(1);dojo.stopEvent(evt);break;}else{if(_298==pw.previousButton){this._nextSearch(-1);dojo.stopEvent(evt);break;}}}else{this._setBlurValue();this._setCaretPos(this.focusNode,this.focusNode.value.length);}evt.preventDefault();case dk.TAB:var _299=this.get("displayedValue");if(pw&&(_299==pw._messages["previousMessage"]||_299==pw._messages["nextMessage"])){break;}if(_298){this._selectOption();}if(this._isShowingNow){this._lastQuery=null;this._hideResultList();}break;case " ":if(_298){dojo.stopEvent(evt);this._selectOption();this._hideResultList();}else{_296=true;}break;case dk.ESCAPE:if(this._isShowingNow){dojo.stopEvent(evt);this._hideResultList();}break;case dk.DELETE:case dk.BACKSPACE:this._prev_key_backspace=true;_296=true;break;default:_296=typeof key=="string"||key==229;}if(_296){this.item=undefined;this.searchTimer=setTimeout(dojo.hitch(this,_297),1);}},_autoCompleteText:function(text){var fn=this.focusNode;dijit.selectInputText(fn,fn.value.length);var _29a=this.ignoreCase?"toLowerCase":"substr";if(text[_29a](0).indexOf(this.focusNode.value[_29a](0))==0){var cpos=this._getCaretPos(fn);if((cpos+1)>fn.value.length){fn.value=text;dijit.selectInputText(fn,cpos);}}else{fn.value=text;dijit.selectInputText(fn);}},_openResultList:function(_29b,_29c){this._fetchHandle=null;if(this.disabled||this.readOnly||(_29c.query[this.searchAttr]!=this._lastQuery)){return;}this._popupWidget.clearResultList();if(!_29b.length&&!this._maxOptions){this._hideResultList();return;}_29c._maxOptions=this._maxOptions;var _29d=this._popupWidget.createOptions(_29b,_29c,dojo.hitch(this,"_getMenuLabelFromItem"));this._showResultList();if(_29c.direction){if(1==_29c.direction){this._popupWidget.highlightFirstOption();}else{if(-1==_29c.direction){this._popupWidget.highlightLastOption();}}this._announceOption(this._popupWidget.getHighlightedOption());}else{if(this.autoComplete&&!this._prev_key_backspace&&!/^[*]+$/.test(_29c.query[this.searchAttr])){this._announceOption(_29d[1]);}}},_showResultList:function(){this._hideResultList();this.displayMessage("");dojo.style(this._popupWidget.domNode,{width:"",height:""});var best=this.open();var _29e=dojo.marginBox(this._popupWidget.domNode);this._popupWidget.domNode.style.overflow=((best.h==_29e.h)&&(best.w==_29e.w))?"hidden":"auto";var _29f=best.w;if(best.h<this._popupWidget.domNode.scrollHeight){_29f+=16;}dojo.marginBox(this._popupWidget.domNode,{h:best.h,w:Math.max(_29f,this.domNode.offsetWidth)});if(_29f<this.domNode.offsetWidth){this._popupWidget.domNode.parentNode.style.left=dojo.position(this.domNode,true).x+"px";}dijit.setWaiState(this.comboNode,"expanded","true");},_hideResultList:function(){this._abortQuery();if(this._isShowingNow){dijit.popup.close(this._popupWidget);this._isShowingNow=false;dijit.setWaiState(this.comboNode,"expanded","false");dijit.removeWaiState(this.focusNode,"activedescendant");}},_setBlurValue:function(){var _2a0=this.get("displayedValue");var pw=this._popupWidget;if(pw&&(_2a0==pw._messages["previousMessage"]||_2a0==pw._messages["nextMessage"])){this._setValueAttr(this._lastValueReported,true);}else{if(typeof this.item=="undefined"){this.item=null;this.set("displayedValue",_2a0);}else{if(this.value!=this._lastValueReported){dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);}this._refreshState();}}},_onBlur:function(){this._hideResultList();this.inherited(arguments);},_setItemAttr:function(item,_2a1,_2a2){if(!_2a2){_2a2=this.labelFunc(item,this.store);}this.value=this._getValueField()!=this.searchAttr?this.store.getIdentity(item):_2a2;this.item=item;dijit.form.ComboBox.superclass._setValueAttr.call(this,this.value,_2a1,_2a2);},_announceOption:function(node){if(!node){return;}var _2a3;if(node==this._popupWidget.nextButton||node==this._popupWidget.previousButton){_2a3=node.innerHTML;this.item=undefined;this.value="";}else{_2a3=this.labelFunc(node.item,this.store);this.set("item",node.item,false,_2a3);}this.focusNode.value=this.focusNode.value.substring(0,this._lastInput.length);dijit.setWaiState(this.focusNode,"activedescendant",dojo.attr(node,"id"));this._autoCompleteText(_2a3);},_selectOption:function(evt){if(evt){this._announceOption(evt.target);}this._hideResultList();this._setCaretPos(this.focusNode,this.focusNode.value.length);dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);},_onArrowMouseDown:function(evt){if(this.disabled||this.readOnly){return;}dojo.stopEvent(evt);this.focus();if(this._isShowingNow){this._hideResultList();}else{this._startSearchAll();}},_startSearchAll:function(){this._startSearch("");},_startSearchFromInput:function(){this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g,"\\$1"));},_getQueryString:function(text){return dojo.string.substitute(this.queryExpr,[text]);},_startSearch:function(key){if(!this._popupWidget){var _2a4=this.id+"_popup";this._popupWidget=new dijit.form._ComboBoxMenu({onChange:dojo.hitch(this,this._selectOption),id:_2a4,dir:this.dir});dijit.removeWaiState(this.focusNode,"activedescendant");dijit.setWaiState(this.textbox,"owns",_2a4);}var _2a5=dojo.clone(this.query);this._lastInput=key;this._lastQuery=_2a5[this.searchAttr]=this._getQueryString(key);this.searchTimer=setTimeout(dojo.hitch(this,function(_2a6,_2a7){this.searchTimer=null;var _2a8={queryOptions:{ignoreCase:this.ignoreCase,deep:true},query:_2a6,onBegin:dojo.hitch(this,"_setMaxOptions"),onComplete:dojo.hitch(this,"_openResultList"),onError:function(_2a9){_2a7._fetchHandle=null;console.error("dijit.form.ComboBox: "+_2a9);dojo.hitch(_2a7,"_hideResultList")();},start:0,count:this.pageSize};dojo.mixin(_2a8,_2a7.fetchProperties);this._fetchHandle=_2a7.store.fetch(_2a8);var _2aa=function(_2ab,_2ac){_2ab.start+=_2ab.count*_2ac;_2ab.direction=_2ac;this._fetchHandle=this.store.fetch(_2ab);};this._nextSearch=this._popupWidget.onPage=dojo.hitch(this,_2aa,this._fetchHandle);},_2a5,this),this.searchDelay);},_setMaxOptions:function(size,_2ad){this._maxOptions=size;},_getValueField:function(){return this.searchAttr;},compositionend:function(evt){this._onKeyPress({charOrCode:229});},constructor:function(){this.query={};this.fetchProperties={};},postMixInProperties:function(){if(!this.store){var _2ae=this.srcNodeRef;this.store=new dijit.form._ComboBoxDataStore(_2ae);if(!("value" in this.params)){var item=this.store.fetchSelectedItem();if(item){var _2af=this._getValueField();this.value=_2af!=this.searchAttr?this.store.getValue(item,_2af):this.labelFunc(item,this.store);}}}this.inherited(arguments);},postCreate:function(){if(!this.hasDownArrow){this.downArrowNode.style.display="none";}var _2b0=dojo.query("label[for=\""+this.id+"\"]");if(_2b0.length){_2b0[0].id=(this.id+"_label");var cn=this.comboNode;dijit.setWaiState(cn,"labelledby",_2b0[0].id);}this.inherited(arguments);},uninitialize:function(){if(this._popupWidget&&!this._popupWidget._destroyed){this._hideResultList();this._popupWidget.destroy();}this.inherited(arguments);},_getMenuLabelFromItem:function(item){var _2b1=this.labelAttr?this.store.getValue(item,this.labelAttr):this.labelFunc(item,this.store);var _2b2=this.labelType;if(this.highlightMatch!="none"&&this.labelType=="text"&&this._lastInput){_2b1=this.doHighlight(_2b1,this._escapeHtml(this._lastInput));_2b2="html";}return {html:_2b2=="html",label:_2b1};},doHighlight:function(_2b3,find){var _2b4="i"+(this.highlightMatch=="all"?"g":"");var _2b5=this._escapeHtml(_2b3);find=dojo.regexp.escapeString(find);var ret=_2b5.replace(new RegExp("(^|\\s)("+find+")",_2b4),"$1<span class=\"dijitComboBoxHighlightMatch\">$2</span>");return ret;},_escapeHtml:function(str){str=String(str).replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");return str;},open:function(){this._isShowingNow=true;return dijit.popup.open({popup:this._popupWidget,around:this.domNode,parent:this});},reset:function(){this.item=null;this.inherited(arguments);},labelFunc:function(item,_2b6){return _2b6.getValue(item,this.searchAttr).toString();}});dojo.declare("dijit.form._ComboBoxMenu",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:"<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"+"</ul>",_messages:null,baseClass:"dijitComboBoxMenu",postMixInProperties:function(){this._messages=dojo.i18n.getLocalization("dijit.form","ComboBox",this.lang);this.inherited(arguments);},_setValueAttr:function(_2b7){this.value=_2b7;this.onChange(_2b7);},onChange:function(_2b8){},onPage:function(_2b9){},postCreate:function(){this.previousButton.innerHTML=this._messages["previousMessage"];this.nextButton.innerHTML=this._messages["nextMessage"];this.inherited(arguments);},onClose:function(){this._blurOptionNode();},_createOption:function(item,_2ba){var _2bb=_2ba(item);var _2bc=dojo.doc.createElement("li");dijit.setWaiRole(_2bc,"option");if(_2bb.html){_2bc.innerHTML=_2bb.label;}else{_2bc.appendChild(dojo.doc.createTextNode(_2bb.label));}if(_2bc.innerHTML==""){_2bc.innerHTML="&nbsp;";}_2bc.item=item;return _2bc;},createOptions:function(_2bd,_2be,_2bf){this.previousButton.style.display=(_2be.start==0)?"none":"";dojo.attr(this.previousButton,"id",this.id+"_prev");dojo.forEach(_2bd,function(item,i){var _2c0=this._createOption(item,_2bf);_2c0.className="dijitReset dijitMenuItem"+(this.isLeftToRight()?"":" dijitMenuItemRtl");dojo.attr(_2c0,"id",this.id+i);this.domNode.insertBefore(_2c0,this.nextButton);},this);var _2c1=false;if(_2be._maxOptions&&_2be._maxOptions!=-1){if((_2be.start+_2be.count)<_2be._maxOptions){_2c1=true;}else{if((_2be.start+_2be.count)>_2be._maxOptions&&_2be.count==_2bd.length){_2c1=true;}}}else{if(_2be.count==_2bd.length){_2c1=true;}}this.nextButton.style.display=_2c1?"":"none";dojo.attr(this.nextButton,"id",this.id+"_next");return this.domNode.childNodes;},clearResultList:function(){while(this.domNode.childNodes.length>2){this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);}},_onMouseDown:function(evt){dojo.stopEvent(evt);},_onMouseUp:function(evt){if(evt.target===this.domNode||!this._highlighted_option){return;}else{if(evt.target==this.previousButton){this.onPage(-1);}else{if(evt.target==this.nextButton){this.onPage(1);}else{var tgt=evt.target;while(!tgt.item){tgt=tgt.parentNode;}this._setValueAttr({target:tgt},true);}}}},_onMouseOver:function(evt){if(evt.target===this.domNode){return;}var tgt=evt.target;if(!(tgt==this.previousButton||tgt==this.nextButton)){while(!tgt.item){tgt=tgt.parentNode;}}this._focusOptionNode(tgt);},_onMouseOut:function(evt){if(evt.target===this.domNode){return;}this._blurOptionNode();},_focusOptionNode:function(node){if(this._highlighted_option!=node){this._blurOptionNode();this._highlighted_option=node;dojo.addClass(this._highlighted_option,"dijitMenuItemSelected");}},_blurOptionNode:function(){if(this._highlighted_option){dojo.removeClass(this._highlighted_option,"dijitMenuItemSelected");this._highlighted_option=null;}},_highlightNextOption:function(){if(!this.getHighlightedOption()){var fc=this.domNode.firstChild;this._focusOptionNode(fc.style.display=="none"?fc.nextSibling:fc);}else{var ns=this._highlighted_option.nextSibling;if(ns&&ns.style.display!="none"){this._focusOptionNode(ns);}else{this.highlightFirstOption();}}dojo.window.scrollIntoView(this._highlighted_option);},highlightFirstOption:function(){var _2c2=this.domNode.firstChild;var _2c3=_2c2.nextSibling;this._focusOptionNode(_2c3.style.display=="none"?_2c2:_2c3);dojo.window.scrollIntoView(this._highlighted_option);},highlightLastOption:function(){this._focusOptionNode(this.domNode.lastChild.previousSibling);dojo.window.scrollIntoView(this._highlighted_option);},_highlightPrevOption:function(){if(!this.getHighlightedOption()){var lc=this.domNode.lastChild;this._focusOptionNode(lc.style.display=="none"?lc.previousSibling:lc);}else{var ps=this._highlighted_option.previousSibling;if(ps&&ps.style.display!="none"){this._focusOptionNode(ps);}else{this.highlightLastOption();}}dojo.window.scrollIntoView(this._highlighted_option);},_page:function(up){var _2c4=0;var _2c5=this.domNode.scrollTop;var _2c6=dojo.style(this.domNode,"height");if(!this.getHighlightedOption()){this._highlightNextOption();}while(_2c4<_2c6){if(up){if(!this.getHighlightedOption().previousSibling||this._highlighted_option.previousSibling.style.display=="none"){break;}this._highlightPrevOption();}else{if(!this.getHighlightedOption().nextSibling||this._highlighted_option.nextSibling.style.display=="none"){break;}this._highlightNextOption();}var _2c7=this.domNode.scrollTop;_2c4+=(_2c7-_2c5)*(up?-1:1);_2c5=_2c7;}},pageUp:function(){this._page(true);},pageDown:function(){this._page(false);},getHighlightedOption:function(){var ho=this._highlighted_option;return (ho&&ho.parentNode)?ho:null;},handleKey:function(key){switch(key){case dojo.keys.DOWN_ARROW:this._highlightNextOption();break;case dojo.keys.PAGE_DOWN:this.pageDown();break;case dojo.keys.UP_ARROW:this._highlightPrevOption();break;case dojo.keys.PAGE_UP:this.pageUp();break;}}});dojo.declare("dijit.form.ComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{_setValueAttr:function(_2c8,_2c9,_2ca){this.item=null;if(!_2c8){_2c8="";}dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,_2c8,_2c9,_2ca);}});dojo.declare("dijit.form._ComboBoxDataStore",null,{constructor:function(root){this.root=root;if(root.tagName!="SELECT"&&root.firstChild){root=dojo.query("select",root);if(root.length>0){root=root[0];}else{this.root.innerHTML="<SELECT>"+this.root.innerHTML+"</SELECT>";root=this.root.firstChild;}this.root=root;}dojo.query("> option",root).forEach(function(node){node.innerHTML=dojo.trim(node.innerHTML);});},getValue:function(item,_2cb,_2cc){return (_2cb=="value")?item.value:(item.innerText||item.textContent||"");},isItemLoaded:function(_2cd){return true;},getFeatures:function(){return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};},_fetchItems:function(args,_2ce,_2cf){if(!args.query){args.query={};}if(!args.query.name){args.query.name="";}if(!args.queryOptions){args.queryOptions={};}var _2d0=dojo.data.util.filter.patternToRegExp(args.query.name,args.queryOptions.ignoreCase),_2d1=dojo.query("> option",this.root).filter(function(_2d2){return (_2d2.innerText||_2d2.textContent||"").match(_2d0);});if(args.sort){_2d1.sort(dojo.data.util.sorter.createSortFunction(args.sort,this));}_2ce(_2d1,args);},close:function(_2d3){return;},getLabel:function(item){return item.innerHTML;},getIdentity:function(item){return dojo.attr(item,"value");},fetchItemByIdentity:function(args){var item=dojo.query("> option[value='"+args.identity+"']",this.root)[0];args.onItem(item);},fetchSelectedItem:function(){var root=this.root,si=root.selectedIndex;return typeof si=="number"?dojo.query("> option:nth-child("+(si!=-1?si+1:1)+")",root)[0]:null;}});dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);}if(!dojo._hasResource["dijit.form.FilteringSelect"]){dojo._hasResource["dijit.form.FilteringSelect"]=true;dojo.provide("dijit.form.FilteringSelect");dojo.declare("dijit.form.FilteringSelect",[dijit.form.MappedTextBox,dijit.form.ComboBoxMixin],{_isvalid:true,required:true,_lastDisplayedValue:"",isValid:function(){return this._isvalid||(!this.required&&this.get("displayedValue")=="");},_refreshState:function(){if(!this.searchTimer){this.inherited(arguments);}},_callbackSetLabel:function(_2d4,_2d5,_2d6){if((_2d5&&_2d5.query[this.searchAttr]!=this._lastQuery)||(!_2d5&&_2d4.length&&this.store.getIdentity(_2d4[0])!=this._lastQuery)){return;}if(!_2d4.length){this.valueNode.value="";dijit.form.TextBox.superclass._setValueAttr.call(this,"",_2d6||(_2d6===undefined&&!this._focused));this._isvalid=false;this.validate(this._focused);this.item=null;}else{this.set("item",_2d4[0],_2d6);}},_openResultList:function(_2d7,_2d8){if(_2d8.query[this.searchAttr]!=this._lastQuery){return;}if(this.item===undefined){this._isvalid=_2d7.length!=0||this._maxOptions!=0;this.validate(true);}dijit.form.ComboBoxMixin.prototype._openResultList.apply(this,arguments);},_getValueAttr:function(){return this.valueNode.value;},_getValueField:function(){return "value";},_setValueAttr:function(_2d9,_2da){if(!this._onChangeActive){_2da=null;}this._lastQuery=_2d9;if(_2d9===null||_2d9===""){this._setDisplayedValueAttr("",_2da);return;}var self=this;this.store.fetchItemByIdentity({identity:_2d9,onItem:function(item){self._callbackSetLabel(item?[item]:[],undefined,_2da);}});},_setItemAttr:function(item,_2db,_2dc){this._isvalid=true;this.inherited(arguments);this.valueNode.value=this.value;this._lastDisplayedValue=this.textbox.value;},_getDisplayQueryString:function(text){return text.replace(/([\\\*\?])/g,"\\$1");},_setDisplayedValueAttr:function(_2dd,_2de){if(!this._created){_2de=false;}if(this.store){this._hideResultList();var _2df=dojo.clone(this.query);this._lastQuery=_2df[this.searchAttr]=this._getDisplayQueryString(_2dd);this.textbox.value=_2dd;this._lastDisplayedValue=_2dd;var _2e0=this;var _2e1={query:_2df,queryOptions:{ignoreCase:this.ignoreCase,deep:true},onComplete:function(_2e2,_2e3){_2e0._fetchHandle=null;dojo.hitch(_2e0,"_callbackSetLabel")(_2e2,_2e3,_2de);},onError:function(_2e4){_2e0._fetchHandle=null;console.error("dijit.form.FilteringSelect: "+_2e4);dojo.hitch(_2e0,"_callbackSetLabel")([],undefined,false);}};dojo.mixin(_2e1,this.fetchProperties);this._fetchHandle=this.store.fetch(_2e1);}},postMixInProperties:function(){this.inherited(arguments);this._isvalid=!this.required;},undo:function(){this.set("displayedValue",this._lastDisplayedValue);}});}if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){dojo._hasResource["dojo.data.ItemFileReadStore"]=true;dojo.provide("dojo.data.ItemFileReadStore");dojo.declare("dojo.data.ItemFileReadStore",null,{constructor:function(_2e5){this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._jsonFileUrl=_2e5.url;this._ccUrl=_2e5.url;this.url=_2e5.url;this._jsonData=_2e5.data;this.data=null;this._datatypeMap=_2e5.typeMap||{};if(!this._datatypeMap["Date"]){this._datatypeMap["Date"]={type:Date,deserialize:function(_2e6){return dojo.date.stamp.fromISOString(_2e6);}};}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(_2e5.urlPreventCache!==undefined){this.urlPreventCache=_2e5.urlPreventCache?true:false;}if(_2e5.hierarchical!==undefined){this.hierarchical=_2e5.hierarchical?true:false;}if(_2e5.clearOnClose){this.clearOnClose=true;}if("failOk" in _2e5){this.failOk=_2e5.failOk?true:false;}},url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,failOk:false,hierarchical:true,_assertIsItem:function(item){if(!this.isItem(item)){throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");}},_assertIsAttribute:function(_2e7){if(typeof _2e7!=="string"){throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");}},getValue:function(item,_2e8,_2e9){var _2ea=this.getValues(item,_2e8);return (_2ea.length>0)?_2ea[0]:_2e9;},getValues:function(item,_2eb){this._assertIsItem(item);this._assertIsAttribute(_2eb);return (item[_2eb]||[]).slice(0);},getAttributes:function(item){this._assertIsItem(item);var _2ec=[];for(var key in item){if((key!==this._storeRefPropName)&&(key!==this._itemNumPropName)&&(key!==this._rootItemPropName)&&(key!==this._reverseRefMap)){_2ec.push(key);}}return _2ec;},hasAttribute:function(item,_2ed){this._assertIsItem(item);this._assertIsAttribute(_2ed);return (_2ed in item);},containsValue:function(item,_2ee,_2ef){var _2f0=undefined;if(typeof _2ef==="string"){_2f0=dojo.data.util.filter.patternToRegExp(_2ef,false);}return this._containsValue(item,_2ee,_2ef,_2f0);},_containsValue:function(item,_2f1,_2f2,_2f3){return dojo.some(this.getValues(item,_2f1),function(_2f4){if(_2f4!==null&&!dojo.isObject(_2f4)&&_2f3){if(_2f4.toString().match(_2f3)){return true;}}else{if(_2f2===_2f4){return true;}}});},isItem:function(_2f5){if(_2f5&&_2f5[this._storeRefPropName]===this){if(this._arrayOfAllItems[_2f5[this._itemNumPropName]]===_2f5){return true;}}return false;},isItemLoaded:function(_2f6){return this.isItem(_2f6);},loadItem:function(_2f7){this._assertIsItem(_2f7.item);},getFeatures:function(){return this._features;},getLabel:function(item){if(this._labelAttr&&this.isItem(item)){return this.getValue(item,this._labelAttr);}return undefined;},getLabelAttributes:function(item){if(this._labelAttr){return [this._labelAttr];}return null;},_fetchItems:function(_2f8,_2f9,_2fa){var self=this,_2fb=function(_2fc,_2fd){var _2fe=[],i,key;if(_2fc.query){var _2ff,_300=_2fc.queryOptions?_2fc.queryOptions.ignoreCase:false;var _301={};for(key in _2fc.query){_2ff=_2fc.query[key];if(typeof _2ff==="string"){_301[key]=dojo.data.util.filter.patternToRegExp(_2ff,_300);}else{if(_2ff instanceof RegExp){_301[key]=_2ff;}}}for(i=0;i<_2fd.length;++i){var _302=true;var _303=_2fd[i];if(_303===null){_302=false;}else{for(key in _2fc.query){_2ff=_2fc.query[key];if(!self._containsValue(_303,key,_2ff,_301[key])){_302=false;}}}if(_302){_2fe.push(_303);}}_2f9(_2fe,_2fc);}else{for(i=0;i<_2fd.length;++i){var item=_2fd[i];if(item!==null){_2fe.push(item);}}_2f9(_2fe,_2fc);}};if(this._loadFinished){_2fb(_2f8,this._getItemsArray(_2f8.queryOptions));}else{if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","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:_2f8,filter:_2fb});}else{this._loadInProgress=true;var _304={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _305=dojo.xhrGet(_304);_305.addCallback(function(data){try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;_2fb(_2f8,self._getItemsArray(_2f8.queryOptions));self._handleQueuedFetches();}catch(e){self._loadFinished=true;self._loadInProgress=false;_2fa(e,_2f8);}});_305.addErrback(function(_306){self._loadInProgress=false;_2fa(_306,_2f8);});var _307=null;if(_2f8.abort){_307=_2f8.abort;}_2f8.abort=function(){var df=_305;if(df&&df.fired===-1){df.cancel();df=null;}if(_307){_307.call(_2f8);}};}}else{if(this._jsonData){try{this._loadFinished=true;this._getItemsFromLoadedData(this._jsonData);this._jsonData=null;_2fb(_2f8,this._getItemsArray(_2f8.queryOptions));}catch(e){_2fa(e,_2f8);}}else{_2fa(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_2f8);}}}},_handleQueuedFetches:function(){if(this._queuedFetches.length>0){for(var i=0;i<this._queuedFetches.length;i++){var _308=this._queuedFetches[i],_309=_308.args,_30a=_308.filter;if(_30a){_30a(_309,this._getItemsArray(_309.queryOptions));}else{this.fetchItemByIdentity(_309);}}this._queuedFetches=[];}},_getItemsArray:function(_30b){if(_30b&&_30b.deep){return this._arrayOfAllItems;}return this._arrayOfTopLevelItems;},close:function(_30c){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(_30d){var _30e=false,self=this;function _30f(_310){var _311=((_310!==null)&&(typeof _310==="object")&&(!dojo.isArray(_310)||_30e)&&(!dojo.isFunction(_310))&&(_310.constructor==Object||dojo.isArray(_310))&&(typeof _310._reference==="undefined")&&(typeof _310._type==="undefined")&&(typeof _310._value==="undefined")&&self.hierarchical);return _311;};function _312(_313){self._arrayOfAllItems.push(_313);for(var _314 in _313){var _315=_313[_314];if(_315){if(dojo.isArray(_315)){var _316=_315;for(var k=0;k<_316.length;++k){var _317=_316[k];if(_30f(_317)){_312(_317);}}}else{if(_30f(_315)){_312(_315);}}}}};this._labelAttr=_30d.label;var i,item;this._arrayOfAllItems=[];this._arrayOfTopLevelItems=_30d.items;for(i=0;i<this._arrayOfTopLevelItems.length;++i){item=this._arrayOfTopLevelItems[i];if(dojo.isArray(item)){_30e=true;}_312(item);item[this._rootItemPropName]=true;}var _318={},key;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){if(key!==this._rootItemPropName){var _319=item[key];if(_319!==null){if(!dojo.isArray(_319)){item[key]=[_319];}}else{item[key]=[null];}}_318[key]=key;}}while(_318[this._storeRefPropName]){this._storeRefPropName+="_";}while(_318[this._itemNumPropName]){this._itemNumPropName+="_";}while(_318[this._reverseRefMap]){this._reverseRefMap+="_";}var _31a;var _31b=_30d.identifier;if(_31b){this._itemsByIdentity={};this._features["dojo.data.api.Identity"]=_31b;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];_31a=item[_31b];var _31c=_31a[0];if(!this._itemsByIdentity[_31c]){this._itemsByIdentity[_31c]=item;}else{if(this._jsonFileUrl){throw new Error("dojo.data.ItemFileReadStore:  The json data as specified by: ["+this._jsonFileUrl+"] is malformed.  Items within the list have identifier: ["+_31b+"].  Value collided: ["+_31c+"]");}else{if(this._jsonData){throw new Error("dojo.data.ItemFileReadStore:  The json data provided by the creation arguments is malformed.  Items within the list have identifier: ["+_31b+"].  Value collided: ["+_31c+"]");}}}}}else{this._features["dojo.data.api.Identity"]=Number;}for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];item[this._storeRefPropName]=this;item[this._itemNumPropName]=i;}for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){_31a=item[key];for(var j=0;j<_31a.length;++j){_319=_31a[j];if(_319!==null&&typeof _319=="object"){if(("_type" in _319)&&("_value" in _319)){var type=_319._type;var _31d=this._datatypeMap[type];if(!_31d){throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+type+"'");}else{if(dojo.isFunction(_31d)){_31a[j]=new _31d(_319._value);}else{if(dojo.isFunction(_31d.deserialize)){_31a[j]=_31d.deserialize(_319._value);}else{throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");}}}}if(_319._reference){var _31e=_319._reference;if(!dojo.isObject(_31e)){_31a[j]=this._getItemByIdentity(_31e);}else{for(var k=0;k<this._arrayOfAllItems.length;++k){var _31f=this._arrayOfAllItems[k],_320=true;for(var _321 in _31e){if(_31f[_321]!=_31e[_321]){_320=false;}}if(_320){_31a[j]=_31f;}}}if(this.referenceIntegrity){var _322=_31a[j];if(this.isItem(_322)){this._addReferenceToMap(_322,item,key);}}}else{if(this.isItem(_319)){if(this.referenceIntegrity){this._addReferenceToMap(_319,item,key);}}}}}}}},_addReferenceToMap:function(_323,_324,_325){},getIdentity:function(item){var _326=this._features["dojo.data.api.Identity"];if(_326===Number){return item[this._itemNumPropName];}else{var _327=item[_326];if(_327){return _327[0];}}return null;},fetchItemByIdentity:function(_328){var item,_329;if(!this._loadFinished){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","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:_328});}else{this._loadInProgress=true;var _32a={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _32b=dojo.xhrGet(_32a);_32b.addCallback(function(data){var _32c=_328.scope?_328.scope:dojo.global;try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;item=self._getItemByIdentity(_328.identity);if(_328.onItem){_328.onItem.call(_32c,item);}self._handleQueuedFetches();}catch(error){self._loadInProgress=false;if(_328.onError){_328.onError.call(_32c,error);}}});_32b.addErrback(function(_32d){self._loadInProgress=false;if(_328.onError){var _32e=_328.scope?_328.scope:dojo.global;_328.onError.call(_32e,_32d);}});}}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;item=self._getItemByIdentity(_328.identity);if(_328.onItem){_329=_328.scope?_328.scope:dojo.global;_328.onItem.call(_329,item);}}}}else{item=this._getItemByIdentity(_328.identity);if(_328.onItem){_329=_328.scope?_328.scope:dojo.global;_328.onItem.call(_329,item);}}},_getItemByIdentity:function(_32f){var item=null;if(this._itemsByIdentity){item=this._itemsByIdentity[_32f];}else{item=this._arrayOfAllItems[_32f];}if(item===undefined){item=null;}return item;},getIdentityAttributes:function(item){var _330=this._features["dojo.data.api.Identity"];if(_330===Number){return null;}else{return [_330];}},_forceLoad:function(){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","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 _331={url:this._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk,sync:true};var _332=dojo.xhrGet(_331);_332.addCallback(function(data){try{if(self._loadInProgress!==true&&!self._loadFinished){self._getItemsFromLoadedData(data);self._loadFinished=true;}else{if(self._loadInProgress){throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress.");}}}catch(e){throw e;}});_332.addErrback(function(_333){throw _333;});}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;}}}});dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);}if(!dojo._hasResource["dijit._editor.plugins.FontChoice"]){dojo._hasResource["dijit._editor.plugins.FontChoice"]=true;dojo.provide("dijit._editor.plugins.FontChoice");dojo.declare("dijit._editor.plugins._FontDropDown",[dijit._Widget,dijit._Templated],{label:"",widgetsInTemplate:true,plainText:false,templateString:"<span style='white-space: nowrap' class='dijit dijitReset dijitInline'>"+"<label class='dijitLeft dijitInline' for='${selectId}'>${label}</label>"+"<input dojoType='dijit.form.FilteringSelect' required=false labelType=html labelAttr=label searchAttr=name "+"tabIndex='-1' id='${selectId}' dojoAttachPoint='select' value=''/>"+"</span>",postMixInProperties:function(){this.inherited(arguments);this.strings=dojo.i18n.getLocalization("dijit._editor","FontChoice");this.label=this.strings[this.command];this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));this.selectId=this.id+"_select";this.inherited(arguments);},postCreate:function(){var _334=dojo.map(this.values,function(_335){var name=this.strings[_335]||_335;return {label:this.getLabel(_335,name),name:name,value:_335};},this);this.select.store=new dojo.data.ItemFileReadStore({data:{identifier:"value",items:_334}});this.select.set("value","",false);this.disabled=this.select.get("disabled");},_setValueAttr:function(_336,_337){_337=_337!==false?true:false;this.select.set("value",dojo.indexOf(this.values,_336)<0?"":_336,_337);if(!_337){this.select._lastValueReported=null;}},_getValueAttr:function(){return this.select.get("value");},focus:function(){this.select.focus();},_setDisabledAttr:function(_338){this.disabled=_338;this.select.set("disabled",_338);}});dojo.declare("dijit._editor.plugins._FontNameDropDown",dijit._editor.plugins._FontDropDown,{generic:false,command:"fontName",postMixInProperties:function(){if(!this.values){this.values=this.generic?["serif","sans-serif","monospace","cursive","fantasy"]:["Arial","Times New Roman","Comic Sans MS","Courier New"];}this.inherited(arguments);},getLabel:function(_339,name){if(this.plainText){return name;}else{return "<div style='font-family: "+_339+"'>"+name+"</div>";}},_setValueAttr:function(_33a,_33b){_33b=_33b!==false?true:false;if(this.generic){var map={"Arial":"sans-serif","Helvetica":"sans-serif","Myriad":"sans-serif","Times":"serif","Times New Roman":"serif","Comic Sans MS":"cursive","Apple Chancery":"cursive","Courier":"monospace","Courier New":"monospace","Papyrus":"fantasy"};_33a=map[_33a]||_33a;}this.inherited(arguments,[_33a,_33b]);}});dojo.declare("dijit._editor.plugins._FontSizeDropDown",dijit._editor.plugins._FontDropDown,{command:"fontSize",values:[1,2,3,4,5,6,7],getLabel:function(_33c,name){if(this.plainText){return name;}else{return "<font size="+_33c+"'>"+name+"</font>";}},_setValueAttr:function(_33d,_33e){_33e=_33e!==false?true:false;if(_33d.indexOf&&_33d.indexOf("px")!=-1){var _33f=parseInt(_33d,10);_33d={10:1,13:2,16:3,18:4,24:5,32:6,48:7}[_33f]||_33d;}this.inherited(arguments,[_33d,_33e]);}});dojo.declare("dijit._editor.plugins._FormatBlockDropDown",dijit._editor.plugins._FontDropDown,{command:"formatBlock",values:["noFormat","p","h1","h2","h3","pre"],postCreate:function(){this.inherited(arguments);this.set("value","noFormat",false);},getLabel:function(_340,name){if(this.plainText){return name;}else{return "<"+_340+">"+name+"</"+_340+">";}},_execCommand:function(_341,_342,_343){if(_343==="noFormat"){var _344;var end;var sel=dijit.range.getSelection(_341.window);if(sel&&sel.rangeCount>0){var _345=sel.getRangeAt(0);var node,tag;if(_345){_344=_345.startContainer;end=_345.endContainer;while(_344&&_344!==_341.editNode&&_344!==_341.document.body&&_344.nodeType!==1){_344=_344.parentNode;}while(end&&end!==_341.editNode&&end!==_341.document.body&&end.nodeType!==1){end=end.parentNode;}var _346=dojo.hitch(this,function(node,_347){if(node.childNodes&&node.childNodes.length){var i;for(i=0;i<node.childNodes.length;i++){var c=node.childNodes[i];if(c.nodeType==1){if(dojo.withGlobal(_341.window,"inSelection",dijit._editor.selection,[c])){var tag=c.tagName?c.tagName.toLowerCase():"";if(dojo.indexOf(this.values,tag)!==-1){_347.push(c);}_346(c,_347);}}}}});var _348=dojo.hitch(this,function(_349){if(_349&&_349.length){_341.beginEditing();while(_349.length){this._removeFormat(_341,_349.pop());}_341.endEditing();}});var _34a=[];if(_344==end){var _34b;node=_344;while(node&&node!==_341.editNode&&node!==_341.document.body){if(node.nodeType==1){tag=node.tagName?node.tagName.toLowerCase():"";if(dojo.indexOf(this.values,tag)!==-1){_34b=node;break;}}node=node.parentNode;}_346(_344,_34a);if(_34b){_34a=[_34b].concat(_34a);}_348(_34a);}else{node=_344;while(dojo.withGlobal(_341.window,"inSelection",dijit._editor.selection,[node])){if(node.nodeType==1){tag=node.tagName?node.tagName.toLowerCase():"";if(dojo.indexOf(this.values,tag)!==-1){_34a.push(node);}_346(node,_34a);}node=node.nextSibling;}_348(_34a);}_341.onDisplayChanged();}}}else{_341.execCommand(_342,_343);}},_removeFormat:function(_34c,node){if(_34c.customUndo){while(node.firstChild){dojo.place(node.firstChild,node,"before");}node.parentNode.removeChild(node);}else{dojo.withGlobal(_34c.window,"selectElementChildren",dijit._editor.selection,[node]);var html=dojo.withGlobal(_34c.window,"getSelectedHtml",dijit._editor.selection,[null]);dojo.withGlobal(_34c.window,"selectElement",dijit._editor.selection,[node]);_34c.execCommand("inserthtml",html||"");}}});dojo.declare("dijit._editor.plugins.FontChoice",dijit._editor._Plugin,{useDefaultCommand:false,_initButton:function(){var _34d={fontName:dijit._editor.plugins._FontNameDropDown,fontSize:dijit._editor.plugins._FontSizeDropDown,formatBlock:dijit._editor.plugins._FormatBlockDropDown}[this.command],_34e=this.params;if(this.params.custom){_34e.values=this.params.custom;}var _34f=this.editor;this.button=new _34d(dojo.delegate({dir:_34f.dir,lang:_34f.lang},_34e));this.connect(this.button.select,"onChange",function(_350){this.editor.focus();if(this.command=="fontName"&&_350.indexOf(" ")!=-1){_350="'"+_350+"'";}if(this.button._execCommand){this.button._execCommand(this.editor,this.command,_350);}else{this.editor.execCommand(this.command,_350);}this.editor.customUndo=this.editor.customUndo||dojo.isWebKit;});},updateState:function(){var _351=this.editor;var _352=this.command;if(!_351||!_351.isLoaded||!_352.length){return;}if(this.button){var _353;try{_353=_351.queryCommandValue(_352)||"";}catch(e){_353="";}var _354=dojo.isString(_353)&&_353.match(/'([^']*)'/);if(_354){_353=_354[1];}if(_352==="formatBlock"){if(!_353||_353=="p"){_353=null;var elem;var sel=dijit.range.getSelection(this.editor.window);if(sel&&sel.rangeCount>0){var _355=sel.getRangeAt(0);if(_355){elem=_355.endContainer;}}while(elem&&elem!==_351.editNode&&elem!==_351.document){var tg=elem.tagName?elem.tagName.toLowerCase():"";if(tg&&dojo.indexOf(this.button.values,tg)>-1){_353=tg;break;}elem=elem.parentNode;}if(!_353){_353="noFormat";}}else{if(dojo.indexOf(this.button.values,_353)<0){_353="noFormat";}}}if(_353!==this.button.get("value")){this.button.set("value",_353,false);}}}});dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){if(o.plugin){return;}switch(o.args.name){case "fontName":case "fontSize":case "formatBlock":o.plugin=new dijit._editor.plugins.FontChoice({command:o.args.name,plainText:o.args.plainText?o.args.plainText:false});}});}if(!dojo._hasResource["dijit.form._FormSelectWidget"]){dojo._hasResource["dijit.form._FormSelectWidget"]=true;dojo.provide("dijit.form._FormSelectWidget");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(_356){var _357=_356,opts=this.options||[],l=opts.length;if(_357===undefined){return opts;}if(dojo.isArray(_357)){return dojo.map(_357,"return this.getOptions(item);",this);}if(dojo.isObject(_356)){if(!dojo.some(this.options,function(o,idx){if(o===_357||(o.value&&o.value===_357.value)){_357=idx;return true;}return false;})){_357=-1;}}if(typeof _357=="string"){for(var i=0;i<l;i++){if(opts[i].value===_357){_357=i;break;}}}if(typeof _357=="number"&&_357>=0&&_357<l){return this.options[_357];}return null;},addOption:function(_358){if(!dojo.isArray(_358)){_358=[_358];}dojo.forEach(_358,function(i){if(i&&dojo.isObject(i)){this.options.push(i);}},this);this._loadChildren();},removeOption:function(_359){if(!dojo.isArray(_359)){_359=[_359];}var _35a=this.getOptions(_359);dojo.forEach(_35a,function(i){if(i){this.options=dojo.filter(this.options,function(node,idx){return (node.value!==i.value);});this._removeOptionItem(i);}},this);this._loadChildren();},updateOption:function(_35b){if(!dojo.isArray(_35b)){_35b=[_35b];}dojo.forEach(_35b,function(i){var _35c=this.getOptions(i),k;if(_35c){for(k in i){_35c[k]=i[k];}}},this);this._loadChildren();},setStore:function(_35d,_35e,_35f){var _360=this.store;_35f=_35f||{};if(_360!==_35d){dojo.forEach(this._notifyConnections||[],dojo.disconnect);delete this._notifyConnections;if(_35d&&_35d.getFeatures()["dojo.data.api.Notification"]){this._notifyConnections=[dojo.connect(_35d,"onNew",this,"_onNewItem"),dojo.connect(_35d,"onDelete",this,"_onDeleteItem"),dojo.connect(_35d,"onSet",this,"_onSetItem")];}this.store=_35d;}this._onChangeActive=false;if(this.options&&this.options.length){this.removeOption(this.options);}if(_35d){var cb=function(_361){if(this.sortByLabel&&!_35f.sort&&_361.length){_361.sort(dojo.data.util.sorter.createSortFunction([{attribute:_35d.getLabelAttributes(_361[0])[0]}],_35d));}if(_35f.onFetch){_361=_35f.onFetch(_361);}dojo.forEach(_361,function(i){this._addOptionForItem(i);},this);this._loadingStore=false;this.set("value",(("_pendingValue" in this)?this._pendingValue:_35e));delete this._pendingValue;if(!this.loadChildrenOnOpen){this._loadChildren();}else{this._pseudoLoadChildren(_361);}this._fetchedWith=opts;this._lastValueReported=this.multiple?[]:null;this._onChangeActive=true;this.onSetStore();this._handleOnChange(this.value);};var opts=dojo.mixin({onComplete:cb,scope:this},_35f);this._loadingStore=true;_35d.fetch(opts);}else{delete this._fetchedWith;}return _360;},_setValueAttr:function(_362,_363){if(this._loadingStore){this._pendingValue=_362;return;}var opts=this.getOptions()||[];if(!dojo.isArray(_362)){_362=[_362];}dojo.forEach(_362,function(i,idx){if(!dojo.isObject(i)){i=i+"";}if(typeof i==="string"){_362[idx]=dojo.filter(opts,function(node){return node.value===i;})[0]||{value:"",label:""};}},this);_362=dojo.filter(_362,function(i){return i&&i.value;});if(!this.multiple&&(!_362[0]||!_362[0].value)&&opts.length){_362[0]=opts[0];}dojo.forEach(opts,function(i){i.selected=dojo.some(_362,function(v){return v.value===i.value;});});var val=dojo.map(_362,function(i){return i.value;}),disp=dojo.map(_362,function(i){return i.label;});this.value=this.multiple?val:val[0];this._setDisplay(this.multiple?disp:disp[0]);this._updateSelection();this._handleOnChange(this.value,_363);},_getDisplayedValueAttr:function(){var val=this.get("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(_364){_364.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(_365){var _366=dojo.some(val,function(v){return _365.option&&(v===_365.option.value);});dojo.toggleClass(_365.domNode,this.baseClass+"SelectedOption",_366);dijit.setWaiState(_365.domNode,"selected",_366);},this);}this._handleOnChange(this.value);},_getValueFromOpts:function(){var opts=this.getOptions()||[];if(!this.multiple&&opts.length){var opt=dojo.filter(opts,function(i){return i.selected;})[0];if(opt&&opt.value){return opt.value;}else{opts[0].selected=true;return opts[0].value;}}else{if(this.multiple){return dojo.map(dojo.filter(opts,function(i){return i.selected;}),function(i){return i.value;})||[];}}return "";},_onNewItem:function(item,_367){if(!_367||!_367.parent){this._addOptionForItem(item);}},_onDeleteItem:function(item){var _368=this.store;this.removeOption(_368.getIdentity(item));},_onSetItem:function(item){this.updateOption(this._getOptionObjForItem(item));},_getOptionObjForItem:function(item){var _369=this.store,_36a=_369.getLabel(item),_36b=(_36a?_369.getIdentity(item):null);return {value:_36b,label:_36a,item:item};},_addOptionForItem:function(item){var _36c=this.store;if(!_36c.isItemLoaded(item)){_36c.loadItem({item:item,onComplete:function(i){this._addOptionForItem(item);},scope:this});return;}var _36d=this._getOptionObjForItem(item);this.addOption(_36d);},constructor:function(_36e){this._oValue=(_36e||{}).value||null;},_fillContent:function(){var opts=this.options;if(!opts){opts=this.options=this.srcNodeRef?dojo.query(">",this.srcNodeRef).map(function(node){if(node.getAttribute("type")==="separator"){return {value:"",label:"",selected:false,disabled:false};}return {value:node.getAttribute("value"),label:String(node.innerHTML),selected:node.getAttribute("selected")||false,disabled:node.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 _36f=this.store,_370={};dojo.forEach(["query","queryOptions","onFetch"],function(i){if(this[i]){_370[i]=this[i];}delete this[i];},this);if(_36f&&_36f.getFeatures()["dojo.data.api.Identity"]){this.store=null;this.setStore(_36f,this._oValue,_370);}},destroy:function(){dojo.forEach(this._notifyConnections||[],dojo.disconnect);this.inherited(arguments);},_addOptionItem:function(_371){},_removeOptionItem:function(_372){},_setDisplay:function(_373){},_getChildren:function(){return [];},_getSelectedOptionsAttr:function(){return this.getOptions(this.get("value"));},_pseudoLoadChildren:function(_374){},onSetStore:function(){}});}if(!dojo._hasResource["dijit.MenuItem"]){dojo._hasResource["dijit.MenuItem"]=true;dojo.provide("dijit.MenuItem");dojo.declare("dijit.MenuItem",[dijit._Widget,dijit._Templated,dijit._Contained,dijit._CssStateMixin],{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 dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon 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"}}),baseClass:"dijitMenuItem",label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_375){if(_375&&!("label" in this.params)){this.set("label",_375.innerHTML);}},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);var _376=this.id+"_text";dojo.attr(this.containerNode,"id",_376);if(this.accelKeyNode){dojo.attr(this.accelKeyNode,"id",this.id+"_accel");_376+=" "+this.id+"_accel";}dijit.setWaiState(this.domNode,"labelledby",_376);},_onHover:function(){this.getParent().onItemHover(this);},_onUnhover:function(){this.getParent().onItemUnhover(this);this._hovering=false;this._setStateClass();},_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(_377){dojo.toggleClass(this.domNode,"dijitMenuItemSelected",_377);},setLabel:function(_378){dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");this.set("label",_378);},setDisabled:function(_379){dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");this.set("disabled",_379);},_setDisabledAttr:function(_37a){this.disabled=_37a;dijit.setWaiState(this.focusNode,"disabled",_37a?"true":"false");},_setAccelKeyAttr:function(_37b){this.accelKey=_37b;this.accelKeyNode.style.display=_37b?"":"none";this.accelKeyNode.innerHTML=_37b;dojo.attr(this.containerNode,"colSpan",_37b?"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 _37c=dojo.query("*",this.srcNodeRef);dijit.PopupMenuItem.superclass._fillContent.call(this,_37c[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.startup();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 dijitMenuItemIconCell\" 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\">&nbsp;</td>\n</tr>\n"),checked:false,_setCheckedAttr:function(_37d){dojo.toggleClass(this.domNode,"dijitCheckedMenuItemChecked",_37d);dijit.setWaiState(this.domNode,"checked",_37d);this.checked=_37d;},onChange:function(_37e){},_onClick:function(e){if(!this.disabled){this.set("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 class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></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(_37f){_37f.startup();});this.startupKeyNavChildren();this.inherited(arguments);},onExecute:function(){},onCancel:function(_380){},_moveToPopup:function(evt){if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){this.focusedChild._onClick(evt);}else{var _381=this._getTopMenu();if(_381&&_381._isMenuBar){_381.focusNext();}}},_onPopupHover:function(evt){if(this.currentPopup&&this.currentPopup._pendingClose_timer){var _382=this.currentPopup.parentMenu;if(_382.focusedChild){_382.focusedChild._setSelected(false);}_382.focusedChild=this.currentPopup.from_item;_382.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 _383=item.popup;if(_383){this._stopPendingCloseTimer(_383);_383._pendingClose_timer=setTimeout(function(){_383._pendingClose_timer=null;if(_383.parentMenu){_383.parentMenu.currentPopup=null;}dijit.popup.close(_383);},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(_384){if(_384._pendingClose_timer){clearTimeout(_384._pendingClose_timer);_384._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(typeof this.isShowingNow=="undefined"){this._markActive();}this.focusChild(item);if(item.disabled){return false;}if(item.popup){this._openPopup();}else{this.onExecute();item.onClick(evt);}},_openPopup:function(){this._stopPopupTimer();var _385=this.focusedChild;if(!_385){return;}var _386=_385.popup;if(_386.isShowingNow){return;}if(this.currentPopup){this._stopPendingCloseTimer(this.currentPopup);dijit.popup.close(this.currentPopup);}_386.parentMenu=this;_386.from_item=_385;var self=this;dijit.popup.open({parent:this,popup:_386,around:_385.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(_385);self._cleanUp();_385._setSelected(true);self.focusedChild=_385;},onExecute:dojo.hitch(this,"_cleanUp")});this.currentPopup=_386;_386.connect(_386.domNode,"onmouseenter",dojo.hitch(self,"_onPopupHover"));if(_386.focus){_386._focus_timer=setTimeout(dojo.hitch(_386,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\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),baseClass:"dijitMenu",targetNodeIds:[],contextMenuForWindow:false,leftClickToOpen:false,refocus:true,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(_387){var win=dojo.window.get(this._iframeContentDocument(_387))||this._iframeContentDocument(_387)["__parent__"]||(_387.name&&dojo.doc.frames[_387.name])||null;return win;},_iframeContentDocument:function(_388){var doc=_388.contentDocument||(_388.contentWindow&&_388.contentWindow.document)||(_388.name&&dojo.doc.frames[_388.name]&&dojo.doc.frames[_388.name].document)||null;return doc;},bindDomNode:function(node){node=dojo.byId(node);var cn;if(node.tagName.toLowerCase()=="iframe"){var _389=node,win=this._iframeContentWindow(_389);cn=dojo.withGlobal(win,dojo.body);}else{cn=(node==dojo.body()?dojo.doc.documentElement:node);}var _38a={node:node,iframe:_389};dojo.attr(node,"_dijitMenu"+this.id,this._bindings.push(_38a));var _38b=dojo.hitch(this,function(cn){return [dojo.connect(cn,this.leftClickToOpen?"onclick":"oncontextmenu",this,function(evt){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_389,{x:evt.pageX,y:evt.pageY});}),dojo.connect(cn,"onkeydown",this,function(evt){if(evt.shiftKey&&evt.keyCode==dojo.keys.F10){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_389);}})];});_38a.connects=cn?_38b(cn):[];if(_389){_38a.onloadHandler=dojo.hitch(this,function(){var win=this._iframeContentWindow(_389);cn=dojo.withGlobal(win,dojo.body);_38a.connects=_38b(cn);});if(_389.addEventListener){_389.addEventListener("load",_38a.onloadHandler,false);}else{_389.attachEvent("onload",_38a.onloadHandler);}}},unBindDomNode:function(_38c){var node;try{node=dojo.byId(_38c);}catch(e){return;}var _38d="_dijitMenu"+this.id;if(node&&dojo.hasAttr(node,_38d)){var bid=dojo.attr(node,_38d)-1,b=this._bindings[bid];dojo.forEach(b.connects,dojo.disconnect);var _38e=b.iframe;if(_38e){if(_38e.removeEventListener){_38e.removeEventListener("load",b.onloadHandler,false);}else{_38e.detachEvent("onload",b.onloadHandler);}}dojo.removeAttr(node,_38d);delete this._bindings[bid];}},_scheduleOpen:function(_38f,_390,_391){if(!this._openTimer){this._openTimer=setTimeout(dojo.hitch(this,function(){delete this._openTimer;this._openMyself({target:_38f,iframe:_390,coords:_391});}),1);}},_openMyself:function(args){var _392=args.target,_393=args.iframe,_394=args.coords;if(_394){if(_393){var od=_392.ownerDocument,ifc=dojo.position(_393,true),win=this._iframeContentWindow(_393),_395=dojo.withGlobal(win,"_docScroll",dojo);var cs=dojo.getComputedStyle(_393),tp=dojo._toPixelValue,left=(dojo.isIE&&dojo.isQuirks?0:tp(_393,cs.paddingLeft))+(dojo.isIE&&dojo.isQuirks?tp(_393,cs.borderLeftWidth):0),top=(dojo.isIE&&dojo.isQuirks?0:tp(_393,cs.paddingTop))+(dojo.isIE&&dojo.isQuirks?tp(_393,cs.borderTopWidth):0);_394.x+=ifc.x+left-_395.x;_394.y+=ifc.y+top-_395.y;}}else{_394=dojo.position(_392,true);_394.x+=10;_394.y+=10;}var self=this;var _396=dijit.getFocus(this);function _397(){if(self.refocus){dijit.focus(_396);}dijit.popup.close(self);};dijit.popup.open({popup:this,x:_394.x,y:_394.y,onExecute:_397,onCancel:_397,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["dijit.form.Select"]){dojo._hasResource["dijit.form.Select"]=true;dojo.provide("dijit.form.Select");dojo.declare("dijit.form._SelectMenu",dijit.Menu,{buildRendering:function(){this.inherited(arguments);var o=(this.menuTableNode=this.domNode);var n=(this.domNode=dojo.create("div",{style:{overflowX:"hidden",overflowY:"scroll"}}));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);},resize:function(mb){if(mb){dojo.marginBox(this.domNode,mb);if("w" in mb){this.menuTableNode.style.width="100%";}}}});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,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\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\"></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({id:this.id+"_menu"});dojo.addClass(this.dropDown.domNode,this.baseClass+"Menu");},_getMenuItemForOption:function(_398){if(!_398.value){return new dijit.MenuSeparator();}else{var _399=dojo.hitch(this,"_setValueAttr",_398);var item=new dijit.MenuItem({option:_398,label:_398.label,onClick:_399,disabled:_398.disabled||false});dijit.setWaiRole(item.focusNode,"listitem");return item;}},_addOptionItem:function(_39a){if(this.dropDown){this.dropDown.addChild(this._getMenuItemForOption(_39a));}},_getChildren:function(){if(!this.dropDown){return [];}return this.dropDown.getChildren();},_loadChildren:function(_39b){if(_39b===true){if(this.dropDown){delete this.dropDown.focusedChild;}if(this.options.length){this.inherited(arguments);}else{dojo.forEach(this._getChildren(),function(_39c){_39c.destroyRecursive();});var item=new dijit.MenuItem({label:"&nbsp;"});this.dropDown.addChild(item);}}else{this._updateSelection();}var len=this.options.length;this._isLoaded=false;this._childrenLoaded=true;if(!this._loadingStore){this._setValueAttr(this.value);}},_setValueAttr:function(_39d){this.inherited(arguments);dojo.attr(this.valueNode,"value",this.get("value"));},_setDisplay:function(_39e){this.containerNode.innerHTML="<span class=\"dijitReset dijitInline "+this.baseClass+"Label\">"+(_39e||this.emptyLabel||"&nbsp;")+"</span>";dijit.setWaiState(this.focusNode,"valuetext",(_39e||this.emptyLabel||"&nbsp;"));},validate:function(_39f){var _3a0=this.isValid(_39f);this.state=_3a0?"":"Error";this._setStateClass();dijit.setWaiState(this.focusNode,"invalid",_3a0?"false":"true");var _3a1=_3a0?"":this._missingMsg;if(this._message!==_3a1){this._message=_3a1;dijit.hideTooltip(this.domNode);if(_3a1){dijit.showTooltip(_3a1,this.domNode,this.tooltipPosition,!this.isLeftToRight());}}return _3a0;},isValid:function(_3a2){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(_3a3){this._loadChildren(true);this._isLoaded=true;_3a3();},closeDropDown:function(){this.inherited(arguments);if(this.dropDown&&this.dropDown.menuTableNode){this.dropDown.menuTableNode.style.width="";}},uninitialize:function(_3a4){if(this.dropDown&&!this.dropDown._destroyed){this.dropDown.destroyRecursive(_3a4);delete this.dropDown;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit._editor.plugins.LinkDialog"]){dojo._hasResource["dijit._editor.plugins.LinkDialog"]=true;dojo.provide("dijit._editor.plugins.LinkDialog");dojo.declare("dijit._editor.plugins.LinkDialog",dijit._editor._Plugin,{buttonClass:dijit.form.DropDownButton,useDefaultCommand:false,urlRegExp:"((https?|ftps?|file)\\://|./|/|)(/[a-zA-Z]{1,1}:/|)(((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)*(?:[a-zA-Z](?:[-\\da-zA-Z]{0,80}[\\da-zA-Z])?)\\.?)|(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])|(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]|(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]|(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])|0[xX]0*[\\da-fA-F]{1,8}|([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}|([\\da-fA-F]{1,4}\\:){6}((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])))(\\:\\d+)?(/(?:[^?#\\s/]+/)*(?:[^?#\\s/]+(?:\\?[^?#\\s/]*)?(?:#.*)?)?)?",emailRegExp:"<?(mailto\\:)([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+"+"@"+"((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)+(?:[a-zA-Z](?:[-\\da-zA-Z]{0,6}[\\da-zA-Z])?)\\.?)|localhost|^[^-][a-zA-Z0-9_-]*>?",htmlTemplate:"<a href=\"${urlInput}\" _djrealurl=\"${urlInput}\""+" target=\"${targetSelect}\""+">${textInput}</a>",tag:"a",_hostRxp:new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),_userAtRxp:new RegExp("^([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+@","i"),linkDialogTemplate:["<table><tr><td>","<label for='${id}_urlInput'>${url}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='true' "+"id='${id}_urlInput' name='urlInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_textInput'>${text}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='true' id='${id}_textInput' "+"name='textInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_targetSelect'>${target}</label>","</td><td>","<select id='${id}_targetSelect' name='targetSelect' dojoType='dijit.form.Select'>","<option selected='selected' value='_self'>${currentWindow}</option>","<option value='_blank'>${newWindow}</option>","<option value='_top'>${topWindow}</option>","<option value='_parent'>${parentWindow}</option>","</select>","</td></tr><tr><td colspan='2'>","<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>","<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>","</td></tr></table>"].join(""),_initButton:function(){var _3a5=this;this.tag=this.command=="insertImage"?"img":"a";var _3a6=dojo.mixin(dojo.i18n.getLocalization("dijit","common",this.lang),dojo.i18n.getLocalization("dijit._editor","LinkDialog",this.lang));var _3a7=(this.dropDown=new dijit.TooltipDialog({title:_3a6[this.command+"Title"],execute:dojo.hitch(this,"setValue"),onOpen:function(){_3a5._onOpenDialog();dijit.TooltipDialog.prototype.onOpen.apply(this,arguments);},onCancel:function(){setTimeout(dojo.hitch(_3a5,"_onCloseDialog"),0);}}));_3a6.urlRegExp=this.urlRegExp;_3a6.id=dijit.getUniqueId(this.editor.id);this._uniqueId=_3a6.id;this._setContent(_3a7.title+"<div style='border-bottom: 1px black solid;padding-bottom:2pt;margin-bottom:4pt'></div>"+dojo.string.substitute(this.linkDialogTemplate,_3a6));_3a7.startup();this._urlInput=dijit.byId(this._uniqueId+"_urlInput");this._textInput=dijit.byId(this._uniqueId+"_textInput");this._setButton=dijit.byId(this._uniqueId+"_setButton");this.connect(dijit.byId(this._uniqueId+"_cancelButton"),"onClick",function(){this.dropDown.onCancel();});if(this._urlInput){this.connect(this._urlInput,"onChange","_checkAndFixInput");}if(this._textInput){this.connect(this._textInput,"onChange","_checkAndFixInput");}this._urlRegExp=new RegExp("^"+this.urlRegExp+"$","i");this._emailRegExp=new RegExp("^"+this.emailRegExp+"$","i");this._urlInput.isValid=dojo.hitch(this,function(){var _3a8=this._urlInput.get("value");return this._urlRegExp.test(_3a8)||this._emailRegExp.test(_3a8);});this._connectTagEvents();this.inherited(arguments);},_checkAndFixInput:function(){var self=this;var url=this._urlInput.get("value");var _3a9=function(url){var _3aa=false;var _3ab=false;if(url&&url.length>1){url=dojo.trim(url);if(url.indexOf("mailto:")!==0){if(url.indexOf("/")>0){if(url.indexOf("://")===-1){if(url.charAt(0)!=="/"&&url.indexOf("./")!==0){if(self._hostRxp.test(url)){_3aa=true;}}}}else{if(self._userAtRxp.test(url)){_3ab=true;}}}}if(_3aa){self._urlInput.set("value","http://"+url);}if(_3ab){self._urlInput.set("value","mailto:"+url);}self._setButton.set("disabled",!self._isValid());};if(this._delayedCheck){clearTimeout(this._delayedCheck);this._delayedCheck=null;}this._delayedCheck=setTimeout(function(){_3a9(url);},250);},_connectTagEvents:function(){this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){this.connect(this.editor.editNode,"ondblclick",this._onDblClick);}));},_isValid:function(){return this._urlInput.isValid()&&this._textInput.isValid();},_setContent:function(_3ac){this.dropDown.set("content",_3ac);},_checkValues:function(args){if(args&&args.urlInput){args.urlInput=args.urlInput.replace(/"/g,"&quot;");}return args;},setValue:function(args){this._onCloseDialog();if(dojo.isIE){var sel=dijit.range.getSelection(this.editor.window);var _3ad=sel.getRangeAt(0);var a=_3ad.endContainer;if(a.nodeType===3){a=a.parentNode;}if(a&&(a.nodeName&&a.nodeName.toLowerCase()!==this.tag)){a=dojo.withGlobal(this.editor.window,"getSelectedElement",dijit._editor.selection,[this.tag]);}if(a&&(a.nodeName&&a.nodeName.toLowerCase()===this.tag)){if(this.editor.queryCommandEnabled("unlink")){dojo.withGlobal(this.editor.window,"selectElementChildren",dijit._editor.selection,[a]);this.editor.execCommand("unlink");}}}args=this._checkValues(args);this.editor.execCommand("inserthtml",dojo.string.substitute(this.htmlTemplate,args));},_onCloseDialog:function(){this.editor.focus();},_getCurrentValues:function(a){var url,text,_3ae;if(a&&a.tagName.toLowerCase()===this.tag){url=a.getAttribute("_djrealurl")||a.getAttribute("href");_3ae=a.getAttribute("target")||"_self";text=a.textContent||a.innerText;dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[a,true]);}else{text=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);}return {urlInput:url||"",textInput:text||"",targetSelect:_3ae||""};},_onOpenDialog:function(){var a;if(dojo.isIE){var sel=dijit.range.getSelection(this.editor.window);var _3af=sel.getRangeAt(0);a=_3af.endContainer;if(a.nodeType===3){a=a.parentNode;}if(a&&(a.nodeName&&a.nodeName.toLowerCase()!==this.tag)){a=dojo.withGlobal(this.editor.window,"getSelectedElement",dijit._editor.selection,[this.tag]);}}else{a=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.tag]);}this.dropDown.reset();this._setButton.set("disabled",true);this.dropDown.set("value",this._getCurrentValues(a));},_onDblClick:function(e){if(e&&e.target){var t=e.target;var tg=t.tagName?t.tagName.toLowerCase():"";if(tg===this.tag&&dojo.attr(t,"href")){dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);this.editor.onDisplayChanged();setTimeout(dojo.hitch(this,function(){this.button.set("disabled",false);this.button.openDropDown();}),10);}}}});dojo.declare("dijit._editor.plugins.ImgLinkDialog",[dijit._editor.plugins.LinkDialog],{linkDialogTemplate:["<table><tr><td>","<label for='${id}_urlInput'>${url}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' regExp='${urlRegExp}' "+"required='true' id='${id}_urlInput' name='urlInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_textInput'>${text}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='false' id='${id}_textInput' "+"name='textInput' intermediateChanges='true'>","</td></tr><tr><td>","</td><td>","</td></tr><tr><td colspan='2'>","<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>","<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>","</td></tr></table>"].join(""),htmlTemplate:"<img src=\"${urlInput}\" _djrealurl=\"${urlInput}\" alt=\"${textInput}\" />",tag:"img",_getCurrentValues:function(img){var url,text;if(img&&img.tagName.toLowerCase()===this.tag){url=img.getAttribute("_djrealurl")||img.getAttribute("src");text=img.getAttribute("alt");dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[img,true]);}else{text=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);}return {urlInput:url||"",textInput:text||""};},_isValid:function(){return this._urlInput.isValid();},_connectTagEvents:function(){this.inherited(arguments);this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){this.connect(this.editor.editNode,"onmousedown",this._selectTag);}));},_selectTag:function(e){if(e&&e.target){var t=e.target;var tg=t.tagName?t.tagName.toLowerCase():"";if(tg===this.tag){dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);}}},_checkValues:function(args){if(args&&args.urlInput){args.urlInput=args.urlInput.replace(/"/g,"&quot;");}if(args&&args.textInput){args.textInput=args.textInput.replace(/"/g,"&quot;");}return args;},_onDblClick:function(e){if(e&&e.target){var t=e.target;var tg=t.tagName?t.tagName.toLowerCase():"";if(tg===this.tag&&dojo.attr(t,"src")){dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);this.editor.onDisplayChanged();setTimeout(dojo.hitch(this,function(){this.button.set("disabled",false);this.button.openDropDown();}),10);}}}});dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){if(o.plugin){return;}switch(o.args.name){case "createLink":o.plugin=new dijit._editor.plugins.LinkDialog({command:o.args.name});break;case "insertImage":o.plugin=new dijit._editor.plugins.ImgLinkDialog({command:o.args.name});break;}});}if(!dojo._hasResource["dijit.MenuBar"]){dojo._hasResource["dijit.MenuBar"]=true;dojo.provide("dijit.MenuBar");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"),baseClass:"dijitMenuBar",_isMenuBar:true,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]);this._orient=this.isLeftToRight()?{BL:"TL"}:{BR:"TR"};},focusChild:function(item){var _3b0=this.focusedChild,_3b1=_3b0&&_3b0.popup&&_3b0.popup.isShowingNow;this.inherited(arguments);if(_3b1&&item.popup&&!item.disabled){this._openPopup();}},_onKeyPress:function(evt){if(evt.ctrlKey||evt.altKey){return;}switch(evt.charOrCode){case dojo.keys.DOWN_ARROW:this._moveToPopup(evt);dojo.stopEvent(evt);}},onItemClick:function(item,evt){if(item.popup&&item.popup.isShowingNow){item.popup.onCancel();}else{this.inherited(arguments);}}});}if(!dojo._hasResource["dijit.MenuBarItem"]){dojo._hasResource["dijit.MenuBarItem"]=true;dojo.provide("dijit.MenuBarItem");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],{});}if(!dojo._hasResource["dijit.PopupMenuBarItem"]){dojo._hasResource["dijit.PopupMenuBarItem"]=true;dojo.provide("dijit.PopupMenuBarItem");dojo.declare("dijit.PopupMenuBarItem",[dijit.PopupMenuItem,dijit._MenuBarItemMixin],{});}if(!dojo._hasResource["dojo.number"]){dojo._hasResource["dojo.number"]=true;dojo.provide("dojo.number");dojo.number.format=function(_3b2,_3b3){_3b3=dojo.mixin({},_3b3||{});var _3b4=dojo.i18n.normalizeLocale(_3b3.locale),_3b5=dojo.i18n.getLocalization("dojo.cldr","number",_3b4);_3b3.customs=_3b5;var _3b6=_3b3.pattern||_3b5[(_3b3.type||"decimal")+"Format"];if(isNaN(_3b2)||Math.abs(_3b2)==Infinity){return null;}return dojo.number._applyPattern(_3b2,_3b6,_3b3);};dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;dojo.number._applyPattern=function(_3b7,_3b8,_3b9){_3b9=_3b9||{};var _3ba=_3b9.customs.group,_3bb=_3b9.customs.decimal,_3bc=_3b8.split(";"),_3bd=_3bc[0];_3b8=_3bc[(_3b7<0)?1:0]||("-"+_3bd);if(_3b8.indexOf("%")!=-1){_3b7*=100;}else{if(_3b8.indexOf("‰")!=-1){_3b7*=1000;}else{if(_3b8.indexOf("¤")!=-1){_3ba=_3b9.customs.currencyGroup||_3ba;_3bb=_3b9.customs.currencyDecimal||_3bb;_3b8=_3b8.replace(/\u00a4{1,3}/,function(_3be){var prop=["symbol","currency","displayName"][_3be.length-1];return _3b9[prop]||_3b9.currency||"";});}else{if(_3b8.indexOf("E")!=-1){throw new Error("exponential notation not supported");}}}}var _3bf=dojo.number._numberPatternRE;var _3c0=_3bd.match(_3bf);if(!_3c0){throw new Error("unable to find a number expression in pattern: "+_3b8);}if(_3b9.fractional===false){_3b9.places=0;}return _3b8.replace(_3bf,dojo.number._formatAbsolute(_3b7,_3c0[0],{decimal:_3bb,group:_3ba,places:_3b9.places,round:_3b9.round}));};dojo.number.round=function(_3c1,_3c2,_3c3){var _3c4=10/(_3c3||10);return (_3c4*+_3c1).toFixed(_3c2)/_3c4;};if((0.9).toFixed()==0){(function(){var _3c5=dojo.number.round;dojo.number.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 _3c5(v,p,m)+(v>0?d:-d);};})();}dojo.number._formatAbsolute=function(_3c6,_3c7,_3c8){_3c8=_3c8||{};if(_3c8.places===true){_3c8.places=0;}if(_3c8.places===Infinity){_3c8.places=6;}var _3c9=_3c7.split("."),_3ca=typeof _3c8.places=="string"&&_3c8.places.indexOf(","),_3cb=_3c8.places;if(_3ca){_3cb=_3c8.places.substring(_3ca+1);}else{if(!(_3cb>=0)){_3cb=(_3c9[1]||[]).length;}}if(!(_3c8.round<0)){_3c6=dojo.number.round(_3c6,_3cb,_3c8.round);}var _3cc=String(Math.abs(_3c6)).split("."),_3cd=_3cc[1]||"";if(_3c9[1]||_3c8.places){if(_3ca){_3c8.places=_3c8.places.substring(0,_3ca);}var pad=_3c8.places!==undefined?_3c8.places:(_3c9[1]&&_3c9[1].lastIndexOf("0")+1);if(pad>_3cd.length){_3cc[1]=dojo.string.pad(_3cd,pad,"0",true);}if(_3cb<_3cd.length){_3cc[1]=_3cd.substr(0,_3cb);}}else{if(_3cc[1]){_3cc.pop();}}var _3ce=_3c9[0].replace(",","");pad=_3ce.indexOf("0");if(pad!=-1){pad=_3ce.length-pad;if(pad>_3cc[0].length){_3cc[0]=dojo.string.pad(_3cc[0],pad);}if(_3ce.indexOf("#")==-1){_3cc[0]=_3cc[0].substr(_3cc[0].length-pad);}}var _3cf=_3c9[0].lastIndexOf(","),_3d0,_3d1;if(_3cf!=-1){_3d0=_3c9[0].length-_3cf-1;var _3d2=_3c9[0].substr(0,_3cf);_3cf=_3d2.lastIndexOf(",");if(_3cf!=-1){_3d1=_3d2.length-_3cf-1;}}var _3d3=[];for(var _3d4=_3cc[0];_3d4;){var off=_3d4.length-_3d0;_3d3.push((off>0)?_3d4.substr(off):_3d4);_3d4=(off>0)?_3d4.slice(0,off):"";if(_3d1){_3d0=_3d1;delete _3d1;}}_3cc[0]=_3d3.reverse().join(_3c8.group||",");return _3cc.join(_3c8.decimal||".");};dojo.number.regexp=function(_3d5){return dojo.number._parseInfo(_3d5).regexp;};dojo.number._parseInfo=function(_3d6){_3d6=_3d6||{};var _3d7=dojo.i18n.normalizeLocale(_3d6.locale),_3d8=dojo.i18n.getLocalization("dojo.cldr","number",_3d7),_3d9=_3d6.pattern||_3d8[(_3d6.type||"decimal")+"Format"],_3da=_3d8.group,_3db=_3d8.decimal,_3dc=1;if(_3d9.indexOf("%")!=-1){_3dc/=100;}else{if(_3d9.indexOf("‰")!=-1){_3dc/=1000;}else{var _3dd=_3d9.indexOf("¤")!=-1;if(_3dd){_3da=_3d8.currencyGroup||_3da;_3db=_3d8.currencyDecimal||_3db;}}}var _3de=_3d9.split(";");if(_3de.length==1){_3de.push("-"+_3de[0]);}var re=dojo.regexp.buildGroupRE(_3de,function(_3df){_3df="(?:"+dojo.regexp.escapeString(_3df,".")+")";return _3df.replace(dojo.number._numberPatternRE,function(_3e0){var _3e1={signed:false,separator:_3d6.strict?_3da:[_3da,""],fractional:_3d6.fractional,decimal:_3db,exponent:false},_3e2=_3e0.split("."),_3e3=_3d6.places;if(_3e2.length==1&&_3dc!=1){_3e2[1]="###";}if(_3e2.length==1||_3e3===0){_3e1.fractional=false;}else{if(_3e3===undefined){_3e3=_3d6.pattern?_3e2[1].lastIndexOf("0")+1:Infinity;}if(_3e3&&_3d6.fractional==undefined){_3e1.fractional=true;}if(!_3d6.places&&(_3e3<_3e2[1].length)){_3e3+=","+_3e2[1].length;}_3e1.places=_3e3;}var _3e4=_3e2[0].split(",");if(_3e4.length>1){_3e1.groupSize=_3e4.pop().length;if(_3e4.length>1){_3e1.groupSize2=_3e4.pop().length;}}return "("+dojo.number._realNumberRegexp(_3e1)+")";});},true);if(_3dd){re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_3e5,_3e6,_3e7,_3e8){var prop=["symbol","currency","displayName"][_3e7.length-1],_3e9=dojo.regexp.escapeString(_3d6[prop]||_3d6.currency||"");_3e6=_3e6?"[\\s\\xa0]":"";_3e8=_3e8?"[\\s\\xa0]":"";if(!_3d6.strict){if(_3e6){_3e6+="*";}if(_3e8){_3e8+="*";}return "(?:"+_3e6+_3e9+_3e8+")?";}return _3e6+_3e9+_3e8;});}return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_3da,decimal:_3db,factor:_3dc};};dojo.number.parse=function(_3ea,_3eb){var info=dojo.number._parseInfo(_3eb),_3ec=(new RegExp("^"+info.regexp+"$")).exec(_3ea);if(!_3ec){return NaN;}var _3ed=_3ec[1];if(!_3ec[1]){if(!_3ec[2]){return NaN;}_3ed=_3ec[2];info.factor*=-1;}_3ed=_3ed.replace(new RegExp("["+info.group+"\\s\\xa0"+"]","g"),"").replace(info.decimal,".");return _3ed*info.factor;};dojo.number._realNumberRegexp=function(_3ee){_3ee=_3ee||{};if(!("places" in _3ee)){_3ee.places=Infinity;}if(typeof _3ee.decimal!="string"){_3ee.decimal=".";}if(!("fractional" in _3ee)||/^0/.test(_3ee.places)){_3ee.fractional=[true,false];}if(!("exponent" in _3ee)){_3ee.exponent=[true,false];}if(!("eSigned" in _3ee)){_3ee.eSigned=[true,false];}var _3ef=dojo.number._integerRegexp(_3ee),_3f0=dojo.regexp.buildGroupRE(_3ee.fractional,function(q){var re="";if(q&&(_3ee.places!==0)){re="\\"+_3ee.decimal;if(_3ee.places==Infinity){re="(?:"+re+"\\d+)?";}else{re+="\\d{"+_3ee.places+"}";}}return re;},true);var _3f1=dojo.regexp.buildGroupRE(_3ee.exponent,function(q){if(q){return "([eE]"+dojo.number._integerRegexp({signed:_3ee.eSigned})+")";}return "";});var _3f2=_3ef+_3f0;if(_3f0){_3f2="(?:(?:"+_3f2+")|(?:"+_3f0+"))";}return _3f2+_3f1;};dojo.number._integerRegexp=function(_3f3){_3f3=_3f3||{};if(!("signed" in _3f3)){_3f3.signed=[true,false];}if(!("separator" in _3f3)){_3f3.separator="";}else{if(!("groupSize" in _3f3)){_3f3.groupSize=3;}}var _3f4=dojo.regexp.buildGroupRE(_3f3.signed,function(q){return q?"[-+]":"";},true);var _3f5=dojo.regexp.buildGroupRE(_3f3.separator,function(sep){if(!sep){return "(?:\\d+)";}sep=dojo.regexp.escapeString(sep);if(sep==" "){sep="\\s";}else{if(sep==" "){sep="\\s\\xa0";}}var grp=_3f3.groupSize,grp2=_3f3.groupSize2;if(grp2){var _3f6="(?:0|[1-9]\\d{0,"+(grp2-1)+"}(?:["+sep+"]\\d{"+grp2+"})*["+sep+"]\\d{"+grp+"})";return ((grp-grp2)>0)?"(?:"+_3f6+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_3f6;}return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";},true);return _3f4+_3f5;};}if(!dojo._hasResource["dijit.ProgressBar"]){dojo._hasResource["dijit.ProgressBar"]=true;dojo.provide("dijit.ProgressBar");dojo.declare("dijit.ProgressBar",[dijit._Widget,dijit._Templated],{progress:"0",maximum:100,places:0,indeterminate:false,name:"",templateString:dojo.cache("dijit","templates/ProgressBar.html","<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),_indeterminateHighContrastImagePath:dojo.moduleUrl("dijit","themes/a11y/indeterminate_progress.gif"),postCreate:function(){this.inherited(arguments);this.indeterminateHighContrastImage.setAttribute("src",this._indeterminateHighContrastImagePath.toString());this.update();},update:function(_3f7){dojo.mixin(this,_3f7||{});var tip=this.internalProgress;var _3f8=1,_3f9;if(this.indeterminate){_3f9="addClass";dijit.removeWaiState(tip,"valuenow");dijit.removeWaiState(tip,"valuemin");dijit.removeWaiState(tip,"valuemax");}else{_3f9="removeClass";if(String(this.progress).indexOf("%")!=-1){_3f8=Math.min(parseFloat(this.progress)/100,1);this.progress=_3f8*this.maximum;}else{this.progress=Math.min(this.progress,this.maximum);_3f8=this.progress/this.maximum;}var text=this.report(_3f8);this.label.firstChild.nodeValue=text;dijit.setWaiState(tip,"describedby",this.label.id);dijit.setWaiState(tip,"valuenow",this.progress);dijit.setWaiState(tip,"valuemin",0);dijit.setWaiState(tip,"valuemax",this.maximum);}dojo[_3f9](this.domNode,"dijitProgressBarIndeterminate");tip.style.width=(_3f8*100)+"%";this.onChange();},_setValueAttr:function(v){if(v==Infinity){this.update({indeterminate:true});}else{this.update({indeterminate:false,progress:v});}},_getValueAttr:function(){return this.progress;},report:function(_3fa){return dojo.number.format(_3fa,{type:"percent",places:this.places,locale:this.lang});},onChange:function(){}});}if(!dojo._hasResource["dijit.TitlePane"]){dojo._hasResource["dijit.TitlePane"]=true;dojo.provide("dijit.TitlePane");dojo.declare("dijit.TitlePane",[dijit.layout.ContentPane,dijit._Templated,dijit._CssStateMixin],{title:"",open:true,toggleable:true,tabIndex:"0",duration:dijit.defaultDuration,baseClass:"dijitTitlePane",templateString:dojo.cache("dijit","templates/TitlePane.html","<div>\n\t<div dojoAttachEvent=\"onclick:_onTitleClick, onkeypress:_onTitleKey\"\n\t\t\tclass=\"dijitTitlePaneTitle\" dojoAttachPoint=\"titleBarNode\">\n\t\t<div class=\"dijitTitlePaneTitleFocus\" dojoAttachPoint=\"focusNode\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"arrowNode\" class=\"dijitArrowNode\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span\n\t\t\t><span dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></span>\n\t\t</div>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\" waiRole=\"presentation\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\" waiRole=\"presentation\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\" id=\"${id}_pane\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc.  Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n"),attributeMap:dojo.delegate(dijit.layout.ContentPane.prototype.attributeMap,{title:{node:"titleNode",type:"innerHTML"},tooltip:{node:"focusNode",type:"attribute",attribute:"title"},id:""}),postCreate:function(){if(!this.open){this.hideNode.style.display=this.wipeNode.style.display="none";}if(this.toggleable){this._trackMouseState(this.titleBarNode,"dijitTitlePaneTitle");}this._setCss();dojo.setSelectable(this.titleNode,false);var _3fb=this.hideNode,_3fc=this.wipeNode;this._wipeIn=dojo.fx.wipeIn({node:this.wipeNode,duration:this.duration,beforeBegin:function(){_3fb.style.display="";}});this._wipeOut=dojo.fx.wipeOut({node:this.wipeNode,duration:this.duration,onEnd:function(){_3fb.style.display="none";}});this.inherited(arguments);},_setOpenAttr:function(open){if(this.open!==open){this.toggle();}dijit.setWaiState(this.containerNode,"hidden",this.open?"false":"true");dijit.setWaiState(this.focusNode,"pressed",this.open?"true":"false");},_setToggleableAttr:function(_3fd){this.toggleable=_3fd;dijit.setWaiRole(this.focusNode,_3fd?"button":"heading");if(_3fd){dijit.setWaiState(this.focusNode,"controls",this.id+"_pane");dojo.attr(this.focusNode,"tabIndex",this.tabIndex);}else{dojo.removeAttr(this.focusNode,"tabIndex");}this._setCss();},_setContentAttr:function(_3fe){if(!this.open||!this._wipeOut||this._wipeOut.status()=="playing"){this.inherited(arguments);}else{if(this._wipeIn&&this._wipeIn.status()=="playing"){this._wipeIn.stop();}dojo.marginBox(this.wipeNode,{h:dojo.marginBox(this.wipeNode).h});this.inherited(arguments);if(this._wipeIn){this._wipeIn.play();}else{this.hideNode.style.display="";}}},toggle:function(){dojo.forEach([this._wipeIn,this._wipeOut],function(_3ff){if(_3ff&&_3ff.status()=="playing"){_3ff.stop();}});var anim=this[this.open?"_wipeOut":"_wipeIn"];if(anim){anim.play();}else{this.hideNode.style.display=this.open?"":"none";}this.open=!this.open;if(this.open){this._onShow();}else{this.onHide();}this._setCss();},_setCss:function(){var node=this.titleBarNode||this.focusNode;if(this._titleBarClass){dojo.removeClass(node,this._titleBarClass);}this._titleBarClass="dijit"+(this.toggleable?"":"Fixed")+(this.open?"Open":"Closed");dojo.addClass(node,this._titleBarClass);this.arrowNodeInner.innerHTML=this.open?"-":"+";},_onTitleKey:function(e){if(e.charOrCode==dojo.keys.ENTER||e.charOrCode==" "){if(this.toggleable){this.toggle();}dojo.stopEvent(e);}else{if(e.charOrCode==dojo.keys.DOWN_ARROW&&this.open){this.containerNode.focus();e.preventDefault();}}},_onTitleClick:function(){if(this.toggleable){this.toggle();}},setTitle:function(_400){dojo.deprecated("dijit.TitlePane.setTitle() is deprecated.  Use set('title', ...) instead.","","2.0");this.set("title",_400);}});}if(!dojo._hasResource["dojo.DeferredList"]){dojo._hasResource["dojo.DeferredList"]=true;dojo.provide("dojo.DeferredList");dojo.DeferredList=function(list,_401,_402,_403,_404){var _405=[];dojo.Deferred.call(this);var self=this;if(list.length===0&&!_401){this.resolve([0,[]]);}var _406=0;dojo.forEach(list,function(item,i){item.then(function(_407){if(_401){self.resolve([i,_407]);}else{_408(true,_407);}},function(_409){if(_402){self.reject(_409);}else{_408(false,_409);}if(_403){return null;}throw _409;});function _408(_40a,_40b){_405[i]=[_40a,_40b];_406++;if(_406===list.length){self.resolve(_405);}};});};dojo.DeferredList.prototype=new dojo.Deferred();dojo.DeferredList.prototype.gatherResults=function(_40c){var d=new dojo.DeferredList(_40c,false,true,false);d.addCallback(function(_40d){var ret=[];dojo.forEach(_40d,function(_40e){ret.push(_40e[1]);});return ret;});return d;};}if(!dojo._hasResource["dojo.cookie"]){dojo._hasResource["dojo.cookie"]=true;dojo.provide("dojo.cookie");dojo.cookie=function(name,_40f,_410){var c=document.cookie;if(arguments.length==1){var _411=c.match(new RegExp("(?:^|; )"+dojo.regexp.escapeString(name)+"=([^;]*)"));return _411?decodeURIComponent(_411[1]):undefined;}else{_410=_410||{};var exp=_410.expires;if(typeof exp=="number"){var d=new Date();d.setTime(d.getTime()+exp*24*60*60*1000);exp=_410.expires=d;}if(exp&&exp.toUTCString){_410.expires=exp.toUTCString();}_40f=encodeURIComponent(_40f);var _412=name+"="+_40f,_413;for(_413 in _410){_412+="; "+_413;var _414=_410[_413];if(_414!==true){_412+="="+_414;}}document.cookie=_412;}};dojo.cookie.isSupported=function(){if(!("cookieEnabled" in navigator)){this("__djCookieTest__","CookiesAllowed");navigator.cookieEnabled=this("__djCookieTest__")=="CookiesAllowed";if(navigator.cookieEnabled){this("__djCookieTest__","",{expires:-1});}}return navigator.cookieEnabled;};}if(!dojo._hasResource["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(args){dojo.mixin(this,args);this.connects=[];var _415=this.store;if(!_415.getFeatures()["dojo.data.api.Identity"]){throw new Error("dijit.Tree: store must support dojo.data.Identity");}if(_415.getFeatures()["dojo.data.api.Notification"]){this.connects=this.connects.concat([dojo.connect(_415,"onNew",this,"onNewItem"),dojo.connect(_415,"onDelete",this,"onDeleteItem"),dojo.connect(_415,"onSet",this,"onSetItem")]);}},destroy:function(){dojo.forEach(this.connects,dojo.disconnect);},getRoot:function(_416,_417){if(this.root){_416(this.root);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_418){if(_418.length!=1){throw new Error(this.declaredClass+": query "+dojo.toJson(this.query)+" returned "+_418.length+" items, but must return exactly one item");}this.root=_418[0];_416(this.root);}),onError:_417});}},mayHaveChildren:function(item){return dojo.some(this.childrenAttrs,function(attr){return this.store.hasAttribute(item,attr);},this);},getChildren:function(_419,_41a,_41b){var _41c=this.store;if(!_41c.isItemLoaded(_419)){var _41d=dojo.hitch(this,arguments.callee);_41c.loadItem({item:_419,onItem:function(_41e){_41d(_41e,_41a,_41b);},onError:_41b});return;}var _41f=[];for(var i=0;i<this.childrenAttrs.length;i++){var vals=_41c.getValues(_419,this.childrenAttrs[i]);_41f=_41f.concat(vals);}var _420=0;if(!this.deferItemLoadingUntilExpand){dojo.forEach(_41f,function(item){if(!_41c.isItemLoaded(item)){_420++;}});}if(_420==0){_41a(_41f);}else{dojo.forEach(_41f,function(item,idx){if(!_41c.isItemLoaded(item)){_41c.loadItem({item:item,onItem:function(item){_41f[idx]=item;if(--_420==0){_41a(_41f);}},onError:_41b});}});}},isItem:function(_421){return this.store.isItem(_421);},fetchItemByIdentity:function(_422){this.store.fetchItemByIdentity(_422);},getIdentity:function(item){return this.store.getIdentity(item);},getLabel:function(item){if(this.labelAttr){return this.store.getValue(item,this.labelAttr);}else{return this.store.getLabel(item);}},newItem:function(args,_423,_424){var _425={parent:_423,attribute:this.childrenAttrs[0],insertIndex:_424};if(this.newItemIdAttr&&args[this.newItemIdAttr]){this.fetchItemByIdentity({identity:args[this.newItemIdAttr],scope:this,onItem:function(item){if(item){this.pasteItem(item,null,_423,true,_424);}else{this.store.newItem(args,_425);}}});}else{this.store.newItem(args,_425);}},pasteItem:function(_426,_427,_428,_429,_42a){var _42b=this.store,_42c=this.childrenAttrs[0];if(_427){dojo.forEach(this.childrenAttrs,function(attr){if(_42b.containsValue(_427,attr,_426)){if(!_429){var _42d=dojo.filter(_42b.getValues(_427,attr),function(x){return x!=_426;});_42b.setValues(_427,attr,_42d);}_42c=attr;}});}if(_428){if(typeof _42a=="number"){var _42e=_42b.getValues(_428,_42c).slice();_42e.splice(_42a,0,_426);_42b.setValues(_428,_42c,_42e);}else{_42b.setValues(_428,_42c,_42b.getValues(_428,_42c).concat(_426));}}},onChange:function(item){},onChildrenChange:function(_42f,_430){},onDelete:function(_431,_432){},onNewItem:function(item,_433){if(!_433){return;}this.getChildren(_433.item,dojo.hitch(this,function(_434){this.onChildrenChange(_433.item,_434);}));},onDeleteItem:function(item){this.onDelete(item);},onSetItem:function(item,_435,_436,_437){if(dojo.indexOf(this.childrenAttrs,_435)!=-1){this.getChildren(item,dojo.hitch(this,function(_438){this.onChildrenChange(item,_438);}));}else{this.onChange(item);}}});}if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){dojo._hasResource["dijit.tree.ForestStoreModel"]=true;dojo.provide("dijit.tree.ForestStoreModel");dojo.declare("dijit.tree.ForestStoreModel",dijit.tree.TreeStoreModel,{rootId:"$root$",rootLabel:"ROOT",query:null,constructor:function(_439){this.root={store:this,root:true,id:_439.rootId,label:_439.rootLabel,children:_439.rootChildren};},mayHaveChildren:function(item){return item===this.root||this.inherited(arguments);},getChildren:function(_43a,_43b,_43c){if(_43a===this.root){if(this.root.children){_43b(this.root.children);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_43d){this.root.children=_43d;_43b(_43d);}),onError:_43c});}}else{this.inherited(arguments);}},isItem:function(_43e){return (_43e===this.root)?true:this.inherited(arguments);},fetchItemByIdentity:function(_43f){if(_43f.identity==this.root.id){var _440=_43f.scope?_43f.scope:dojo.global;if(_43f.onItem){_43f.onItem.call(_440,this.root);}}else{this.inherited(arguments);}},getIdentity:function(item){return (item===this.root)?this.root.id:this.inherited(arguments);},getLabel:function(item){return (item===this.root)?this.root.label:this.inherited(arguments);},newItem:function(args,_441,_442){if(_441===this.root){this.onNewRootItem(args);return this.store.newItem(args);}else{return this.inherited(arguments);}},onNewRootItem:function(args){},pasteItem:function(_443,_444,_445,_446,_447){if(_444===this.root){if(!_446){this.onLeaveRoot(_443);}}dijit.tree.TreeStoreModel.prototype.pasteItem.call(this,_443,_444===this.root?null:_444,_445===this.root?null:_445,_446,_447);if(_445===this.root){this.onAddToRoot(_443);}},onAddToRoot:function(item){},onLeaveRoot:function(item){},_requeryTop:function(){var _448=this.root.children||[];this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_449){this.root.children=_449;if(_448.length!=_449.length||dojo.some(_448,function(item,idx){return _449[idx]!=item;})){this.onChildrenChange(this.root,_449);}})});},onNewItem:function(item,_44a){this._requeryTop();this.inherited(arguments);},onDeleteItem:function(item){if(dojo.indexOf(this.root.children,item)!=-1){this._requeryTop();}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.Tree"]){dojo._hasResource["dijit.Tree"]=true;dojo.provide("dijit.Tree");dojo.declare("dijit._TreeNode",[dijit._Widget,dijit._Templated,dijit._Container,dijit._Contained,dijit._CssStateMixin],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:dojo.cache("dijit","templates/TreeNode.html","<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),baseClass:"dijitTreeNode",cssStateNodes:{rowNode:"dijitTreeRow",labelNode:"dijitTreeLabel"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"labelNode",type:"innerText"},tooltip:{node:"rowNode",type:"attribute",attribute:"title"}}),postCreate:function(){this.inherited(arguments);this._setExpando();this._updateItemClasses(this.item);if(this.isExpandable){dijit.setWaiState(this.labelNode,"expanded",this.isExpanded);}},_setIndentAttr:function(_44b){this.indent=_44b;var _44c=(Math.max(_44b,0)*this.tree._nodePixelIndent)+"px";dojo.style(this.domNode,"backgroundPosition",_44c+" 0px");dojo.style(this.rowNode,this.isLeftToRight()?"paddingLeft":"paddingRight",_44c);dojo.forEach(this.getChildren(),function(_44d){_44d.set("indent",_44b+1);});},markProcessing:function(){this.state="LOADING";this._setExpando(true);},unmarkProcessing:function(){this._setExpando(false);},_updateItemClasses:function(item){var tree=this.tree,_44e=tree.model;if(tree._v10Compat&&item===_44e.root){item=null;}this._applyClassAndStyle(item,"icon","Icon");this._applyClassAndStyle(item,"label","Label");this._applyClassAndStyle(item,"row","Row");},_applyClassAndStyle:function(item,_44f,_450){var _451="_"+_44f+"Class";var _452=_44f+"Node";if(this[_451]){dojo.removeClass(this[_452],this[_451]);}this[_451]=this.tree["get"+_450+"Class"](item,this.isExpanded);if(this[_451]){dojo.addClass(this[_452],this[_451]);}dojo.style(this[_452],this.tree["get"+_450+"Style"](item,this.isExpanded)||{});},_updateLayout:function(){var _453=this.getParent();if(!_453||_453.rowNode.style.display=="none"){dojo.addClass(this.domNode,"dijitTreeIsRoot");}else{dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling());}},_setExpando:function(_454){var _455=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"],_456=["*","-","+","*"],idx=_454?0:(this.isExpandable?(this.isExpanded?1:2):3);dojo.removeClass(this.expandoNode,_455);dojo.addClass(this.expandoNode,_455[idx]);this.expandoNodeText.innerHTML=_456[idx];},expand:function(){if(this._expandDeferred){return this._expandDeferred;}this._wipeOut&&this._wipeOut.stop();this.isExpanded=true;dijit.setWaiState(this.labelNode,"expanded","true");dijit.setWaiRole(this.containerNode,"group");dojo.addClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","true");}var def,_457=dojo.fx.wipeIn({node:this.containerNode,duration:dijit.defaultDuration,onEnd:function(){def.callback(true);}});def=(this._expandDeferred=new dojo.Deferred(function(){_457.stop();}));_457.play();return def;},collapse:function(){if(!this.isExpanded){return;}if(this._expandDeferred){this._expandDeferred.cancel();delete this._expandDeferred;}this.isExpanded=false;dijit.setWaiState(this.labelNode,"expanded","false");if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","false");}dojo.removeClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(!this._wipeOut){this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:dijit.defaultDuration});}this._wipeOut.play();},indent:0,setChildItems:function(_458){var tree=this.tree,_459=tree.model,defs=[];dojo.forEach(this.getChildren(),function(_45a){dijit._Container.prototype.removeChild.call(this,_45a);},this);this.state="LOADED";if(_458&&_458.length>0){this.isExpandable=true;dojo.forEach(_458,function(item){var id=_459.getIdentity(item),_45b=tree._itemNodesMap[id],node;if(_45b){for(var i=0;i<_45b.length;i++){if(_45b[i]&&!_45b[i].getParent()){node=_45b[i];node.set("indent",this.indent+1);break;}}}if(!node){node=this.tree._createTreeNode({item:item,tree:tree,isExpandable:_459.mayHaveChildren(item),label:tree.getLabel(item),tooltip:tree.getTooltip(item),dir:tree.dir,lang:tree.lang,indent:this.indent+1});if(_45b){_45b.push(node);}else{tree._itemNodesMap[id]=[node];}}this.addChild(node);if(this.tree.autoExpand||this.tree._state(item)){defs.push(tree._expandNode(node));}},this);dojo.forEach(this.getChildren(),function(_45c,idx){_45c._updateLayout();});}else{this.isExpandable=false;}if(this._setExpando){this._setExpando(false);}this._updateItemClasses(this.item);if(this==tree.rootNode){var fc=this.tree.showRoot?this:this.getChildren()[0];if(fc){fc.setFocusable(true);tree.lastFocused=fc;}else{tree.domNode.setAttribute("tabIndex","0");}}return new dojo.DeferredList(defs);},removeChild:function(node){this.inherited(arguments);var _45d=this.getChildren();if(_45d.length==0){this.isExpandable=false;this.collapse();}dojo.forEach(_45d,function(_45e){_45e._updateLayout();});},makeExpandable:function(){this.isExpandable=true;this._setExpando(false);},_onLabelFocus:function(evt){this.tree._onNodeFocus(this);},setSelected:function(_45f){dijit.setWaiState(this.labelNode,"selected",_45f);dojo.toggleClass(this.rowNode,"dijitTreeRowSelected",_45f);},setFocusable:function(_460){this.labelNode.setAttribute("tabIndex",_460?"0":"-1");},_onClick:function(evt){this.tree._onClick(this,evt);},_onDblClick:function(evt){this.tree._onDblClick(this,evt);},_onMouseEnter:function(evt){this.tree._onNodeMouseEnter(this,evt);},_onMouseLeave:function(evt){this.tree._onNodeMouseLeave(this,evt);}});dojo.declare("dijit.Tree",[dijit._Widget,dijit._Templated],{store:null,model:null,query:null,label:"",showRoot:true,childrenAttr:["children"],path:[],selectedItem:null,openOnClick:false,openOnDblClick:false,templateString:dojo.cache("dijit","templates/Tree.html","<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),persist:true,autoExpand:false,dndController:null,dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance","dragThreshold","betweenThreshold"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,dragThreshold:5,betweenThreshold:0,_nodePixelIndent:19,_publish:function(_461,_462){dojo.publish(this.id,[dojo.mixin({tree:this,event:_461},_462||{})]);},postMixInProperties:function(){this.tree=this;if(this.autoExpand){this.persist=false;}this._itemNodesMap={};if(!this.cookieName){this.cookieName=this.id+"SaveStateCookie";}this._loadDeferred=new dojo.Deferred();this.inherited(arguments);},postCreate:function(){this._initState();if(!this.model){this._store2model();}this.connect(this.model,"onChange","_onItemChange");this.connect(this.model,"onChildrenChange","_onItemChildrenChange");this.connect(this.model,"onDelete","_onItemDelete");this._load();this.inherited(arguments);if(this.dndController){if(dojo.isString(this.dndController)){this.dndController=dojo.getObject(this.dndController);}var _463={};for(var i=0;i<this.dndParams.length;i++){if(this[this.dndParams[i]]){_463[this.dndParams[i]]=this[this.dndParams[i]];}}this.dndController=new this.dndController(this,_463);}},_store2model:function(){this._v10Compat=true;dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");var _464={id:this.id+"_ForestStoreModel",store:this.store,query:this.query,childrenAttrs:this.childrenAttr};if(this.params.mayHaveChildren){_464.mayHaveChildren=dojo.hitch(this,"mayHaveChildren");}if(this.params.getItemChildren){_464.getChildren=dojo.hitch(this,function(item,_465,_466){this.getItemChildren((this._v10Compat&&item===this.model.root)?null:item,_465,_466);});}this.model=new dijit.tree.ForestStoreModel(_464);this.showRoot=Boolean(this.label);},onLoad:function(){},_load:function(){this.model.getRoot(dojo.hitch(this,function(item){var rn=(this.rootNode=this.tree._createTreeNode({item:item,tree:this,isExpandable:true,label:this.label||this.getLabel(item),indent:this.showRoot?0:-1}));if(!this.showRoot){rn.rowNode.style.display="none";}this.domNode.appendChild(rn.domNode);var _467=this.model.getIdentity(item);if(this._itemNodesMap[_467]){this._itemNodesMap[_467].push(rn);}else{this._itemNodesMap[_467]=[rn];}rn._updateLayout();this._expandNode(rn).addCallback(dojo.hitch(this,function(){this._loadDeferred.callback(true);this.onLoad();}));}),function(err){console.error(this,": error loading root: ",err);});},getNodesByItem:function(item){if(!item){return [];}var _468=dojo.isString(item)?item:this.model.getIdentity(item);return [].concat(this._itemNodesMap[_468]);},_setSelectedItemAttr:function(item){var _469=this.get("selectedItem");var _46a=(!item||dojo.isString(item))?item:this.model.getIdentity(item);if(_46a==_469?this.model.getIdentity(_469):null){return;}var _46b=this._itemNodesMap[_46a];this._selectNode((_46b&&_46b[0])||null);},_getSelectedItemAttr:function(){return this.selectedNode&&this.selectedNode.item;},_setPathAttr:function(path){var d=new dojo.Deferred();this._selectNode(null);if(!path||!path.length){d.resolve(true);return d;}this._loadDeferred.addCallback(dojo.hitch(this,function(){if(!this.rootNode){d.reject(new Error("!this.rootNode"));return;}if(path[0]!==this.rootNode.item&&(dojo.isString(path[0])&&path[0]!=this.model.getIdentity(this.rootNode.item))){d.reject(new Error(this.id+":path[0] doesn't match this.rootNode.item.  Maybe you are using the wrong tree."));return;}path.shift();var node=this.rootNode;function _46c(){var item=path.shift(),_46d=dojo.isString(item)?item:this.model.getIdentity(item);dojo.some(this._itemNodesMap[_46d],function(n){if(n.getParent()==node){node=n;return true;}return false;});if(path.length){this._expandNode(node).addCallback(dojo.hitch(this,_46c));}else{this._selectNode(node);d.resolve(true);}};this._expandNode(node).addCallback(dojo.hitch(this,_46c));}));return d;},_getPathAttr:function(){if(!this.selectedNode){return;}var res=[];var _46e=this.selectedNode;while(_46e&&_46e!==this.rootNode){res.unshift(_46e.item);_46e=_46e.getParent();}res.unshift(this.rootNode.item);return res;},mayHaveChildren:function(item){},getItemChildren:function(_46f,_470){},getLabel:function(item){return this.model.getLabel(item);},getIconClass:function(item,_471){return (!item||this.model.mayHaveChildren(item))?(_471?"dijitFolderOpened":"dijitFolderClosed"):"dijitLeaf";},getLabelClass:function(item,_472){},getRowClass:function(item,_473){},getIconStyle:function(item,_474){},getLabelStyle:function(item,_475){},getRowStyle:function(item,_476){},getTooltip:function(item){return "";},_onKeyPress:function(e){if(e.altKey){return;}var dk=dojo.keys;var _477=dijit.getEnclosingWidget(e.target);if(!_477){return;}var key=e.charOrCode;if(typeof key=="string"){if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){this._onLetterKeyNav({node:_477,key:key.toLowerCase()});dojo.stopEvent(e);}}else{if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}var map=this._keyHandlerMap;if(!map){map={};map[dk.ENTER]="_onEnterKey";map[this.isLeftToRight()?dk.LEFT_ARROW:dk.RIGHT_ARROW]="_onLeftArrow";map[this.isLeftToRight()?dk.RIGHT_ARROW:dk.LEFT_ARROW]="_onRightArrow";map[dk.UP_ARROW]="_onUpArrow";map[dk.DOWN_ARROW]="_onDownArrow";map[dk.HOME]="_onHomeKey";map[dk.END]="_onEndKey";this._keyHandlerMap=map;}if(this._keyHandlerMap[key]){this[this._keyHandlerMap[key]]({node:_477,item:_477.item,evt:e});dojo.stopEvent(e);}}},_onEnterKey:function(_478,evt){this._publish("execute",{item:_478.item,node:_478.node});this._selectNode(_478.node);this.onClick(_478.item,_478.node,evt);},_onDownArrow:function(_479){var node=this._getNextNode(_479.node);if(node&&node.isTreeNode){this.focusNode(node);}},_onUpArrow:function(_47a){var node=_47a.node;var _47b=node.getPreviousSibling();if(_47b){node=_47b;while(node.isExpandable&&node.isExpanded&&node.hasChildren()){var _47c=node.getChildren();node=_47c[_47c.length-1];}}else{var _47d=node.getParent();if(!(!this.showRoot&&_47d===this.rootNode)){node=_47d;}}if(node&&node.isTreeNode){this.focusNode(node);}},_onRightArrow:function(_47e){var node=_47e.node;if(node.isExpandable&&!node.isExpanded){this._expandNode(node);}else{if(node.hasChildren()){node=node.getChildren()[0];if(node&&node.isTreeNode){this.focusNode(node);}}}},_onLeftArrow:function(_47f){var node=_47f.node;if(node.isExpandable&&node.isExpanded){this._collapseNode(node);}else{var _480=node.getParent();if(_480&&_480.isTreeNode&&!(!this.showRoot&&_480===this.rootNode)){this.focusNode(_480);}}},_onHomeKey:function(){var node=this._getRootOrFirstNode();if(node){this.focusNode(node);}},_onEndKey:function(_481){var node=this.rootNode;while(node.isExpanded){var c=node.getChildren();node=c[c.length-1];}if(node&&node.isTreeNode){this.focusNode(node);}},multiCharSearchDuration:250,_onLetterKeyNav:function(_482){var cs=this._curSearch;if(cs){cs.pattern=cs.pattern+_482.key;clearTimeout(cs.timer);}else{cs=this._curSearch={pattern:_482.key,startNode:_482.node};}var self=this;cs.timer=setTimeout(function(){delete self._curSearch;},this.multiCharSearchDuration);var node=cs.startNode;do{node=this._getNextNode(node);if(!node){node=this._getRootOrFirstNode();}}while(node!==cs.startNode&&(node.label.toLowerCase().substr(0,cs.pattern.length)!=cs.pattern));if(node&&node.isTreeNode){if(node!==cs.startNode){this.focusNode(node);}}},_onClick:function(_483,e){var _484=e.target,_485=(_484==_483.expandoNode||_484==_483.expandoNodeText);if((this.openOnClick&&_483.isExpandable)||_485){if(_483.isExpandable){this._onExpandoClick({node:_483});}}else{this._publish("execute",{item:_483.item,node:_483,evt:e});this.onClick(_483.item,_483,e);this.focusNode(_483);}if(!_485){this._selectNode(_483);}dojo.stopEvent(e);},_onDblClick:function(_486,e){var _487=e.target,_488=(_487==_486.expandoNode||_487==_486.expandoNodeText);if((this.openOnDblClick&&_486.isExpandable)||_488){if(_486.isExpandable){this._onExpandoClick({node:_486});}}else{this._publish("execute",{item:_486.item,node:_486,evt:e});this.onDblClick(_486.item,_486,e);this.focusNode(_486);}if(!_488){this._selectNode(_486);}dojo.stopEvent(e);},_onExpandoClick:function(_489){var node=_489.node;this.focusNode(node);if(node.isExpanded){this._collapseNode(node);}else{this._expandNode(node);}},onClick:function(item,node,evt){},onDblClick:function(item,node,evt){},onOpen:function(item,node){},onClose:function(item,node){},_getNextNode:function(node){if(node.isExpandable&&node.isExpanded&&node.hasChildren()){return node.getChildren()[0];}else{while(node&&node.isTreeNode){var _48a=node.getNextSibling();if(_48a){return _48a;}node=node.getParent();}return null;}},_getRootOrFirstNode:function(){return this.showRoot?this.rootNode:this.rootNode.getChildren()[0];},_collapseNode:function(node){if(node._expandNodeDeferred){delete node._expandNodeDeferred;}if(node.isExpandable){if(node.state=="LOADING"){return;}node.collapse();this.onClose(node.item,node);if(node.item){this._state(node.item,false);this._saveState();}}},_expandNode:function(node,_48b){if(node._expandNodeDeferred&&!_48b){return node._expandNodeDeferred;}var _48c=this.model,item=node.item,_48d=this;switch(node.state){case "UNCHECKED":node.markProcessing();var def=(node._expandNodeDeferred=new dojo.Deferred());_48c.getChildren(item,function(_48e){node.unmarkProcessing();var scid=node.setChildItems(_48e);var ed=_48d._expandNode(node,true);scid.addCallback(function(){ed.addCallback(function(){def.callback();});});},function(err){console.error(_48d,": error loading root children: ",err);});break;default:def=(node._expandNodeDeferred=node.expand());this.onOpen(node.item,node);if(item){this._state(item,true);this._saveState();}}return def;},focusNode:function(node){dijit.focus(node.labelNode);},_selectNode:function(node){if(this.selectedNode&&!this.selectedNode._destroyed){this.selectedNode.setSelected(false);}if(node){node.setSelected(true);}this.selectedNode=node;},_onNodeFocus:function(node){if(node&&node!=this.lastFocused){if(this.lastFocused&&!this.lastFocused._destroyed){this.lastFocused.setFocusable(false);}node.setFocusable(true);this.lastFocused=node;}},_onNodeMouseEnter:function(node){},_onNodeMouseLeave:function(node){},_onItemChange:function(item){var _48f=this.model,_490=_48f.getIdentity(item),_491=this._itemNodesMap[_490];if(_491){var _492=this.getLabel(item),_493=this.getTooltip(item);dojo.forEach(_491,function(node){node.set({item:item,label:_492,tooltip:_493});node._updateItemClasses(item);});}},_onItemChildrenChange:function(_494,_495){var _496=this.model,_497=_496.getIdentity(_494),_498=this._itemNodesMap[_497];if(_498){dojo.forEach(_498,function(_499){_499.setChildItems(_495);});}},_onItemDelete:function(item){var _49a=this.model,_49b=_49a.getIdentity(item),_49c=this._itemNodesMap[_49b];if(_49c){dojo.forEach(_49c,function(node){var _49d=node.getParent();if(_49d){_49d.removeChild(node);}node.destroyRecursive();});delete this._itemNodesMap[_49b];}},_initState:function(){if(this.persist){var _49e=dojo.cookie(this.cookieName);this._openedItemIds={};if(_49e){dojo.forEach(_49e.split(","),function(item){this._openedItemIds[item]=true;},this);}}},_state:function(item,_49f){if(!this.persist){return false;}var id=this.model.getIdentity(item);if(arguments.length===1){return this._openedItemIds[id];}if(_49f){this._openedItemIds[id]=true;}else{delete this._openedItemIds[id];}},_saveState:function(){if(!this.persist){return;}var ary=[];for(var id in this._openedItemIds){ary.push(id);}dojo.cookie(this.cookieName,ary.join(","),{expires:365});},destroy:function(){if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}if(this.rootNode){this.rootNode.destroyRecursive();}if(this.dndController&&!dojo.isString(this.dndController)){this.dndController.destroy();}this.rootNode=null;this.inherited(arguments);},destroyRecursive:function(){this.destroy();},resize:function(_4a0){if(_4a0){dojo.marginBox(this.domNode,_4a0);dojo.style(this.domNode,"overflow","auto");}this._nodePixelIndent=dojo.marginBox(this.tree.indentDetector).w;if(this.tree.rootNode){this.tree.rootNode.set("indent",this.showRoot?0:-1);}},_createTreeNode:function(args){return new dijit._TreeNode(args);}});}if(!dojo._hasResource["dijit.InlineEditBox"]){dojo._hasResource["dijit.InlineEditBox"]=true;dojo.provide("dijit.InlineEditBox");dojo.declare("dijit.InlineEditBox",dijit._Widget,{editing:false,autoSave:true,buttonSave:"",buttonCancel:"",renderAsHtml:false,editor:"dijit.form.TextBox",editorWrapper:"dijit._InlineEditor",editorParams:{},onChange:function(_4a1){},onCancel:function(){},width:"100%",value:"",noValueIndicator:dojo.isIE<=6?"<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>":"<span style='text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",constructor:function(){this.editorParams={};},postMixInProperties:function(){this.inherited(arguments);this.displayNode=this.srcNodeRef;var _4a2={ondijitclick:"_onClick",onmouseover:"_onMouseOver",onmouseout:"_onMouseOut",onfocus:"_onMouseOver",onblur:"_onMouseOut"};for(var name in _4a2){this.connect(this.displayNode,name,_4a2[name]);}dijit.setWaiRole(this.displayNode,"button");if(!this.displayNode.getAttribute("tabIndex")){this.displayNode.setAttribute("tabIndex",0);}if(!this.value&&!("value" in this.params)){this.value=dojo.trim(this.renderAsHtml?this.displayNode.innerHTML:(this.displayNode.innerText||this.displayNode.textContent||""));}if(!this.value){this.displayNode.innerHTML=this.noValueIndicator;}dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayMode");},setDisabled:function(_4a3){dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");this.set("disabled",_4a3);},_setDisabledAttr:function(_4a4){this.disabled=_4a4;dijit.setWaiState(this.domNode,"disabled",_4a4);if(_4a4){this.displayNode.removeAttribute("tabIndex");}else{this.displayNode.setAttribute("tabIndex",0);}dojo.toggleClass(this.displayNode,"dijitInlineEditBoxDisplayModeDisabled",_4a4);},_onMouseOver:function(){if(!this.disabled){dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");}},_onMouseOut:function(){dojo.removeClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");},_onClick:function(e){if(this.disabled){return;}if(e){dojo.stopEvent(e);}this._onMouseOut();setTimeout(dojo.hitch(this,"edit"),0);},edit:function(){if(this.disabled||this.editing){return;}this.editing=true;this._savedPosition=dojo.style(this.displayNode,"position")||"static";this._savedOpacity=dojo.style(this.displayNode,"opacity")||"1";this._savedTabIndex=dojo.attr(this.displayNode,"tabIndex")||"0";if(this.wrapperWidget){var ew=this.wrapperWidget.editWidget;ew.set("displayedValue" in ew?"displayedValue":"value",this.value);}else{var _4a5=dojo.create("span",null,this.domNode,"before");var ewc=dojo.getObject(this.editorWrapper);this.wrapperWidget=new ewc({value:this.value,buttonSave:this.buttonSave,buttonCancel:this.buttonCancel,dir:this.dir,lang:this.lang,tabIndex:this._savedTabIndex,editor:this.editor,inlineEditBox:this,sourceStyle:dojo.getComputedStyle(this.displayNode),save:dojo.hitch(this,"save"),cancel:dojo.hitch(this,"cancel")},_4a5);}var ww=this.wrapperWidget;if(dojo.isIE){dijit.focus(dijit.getFocus());}dojo.style(this.displayNode,{position:"absolute",opacity:"0",display:"none"});dojo.style(ww.domNode,{position:this._savedPosition,visibility:"visible",opacity:"1"});dojo.attr(this.displayNode,"tabIndex","-1");setTimeout(dojo.hitch(this,function(){ww.focus();ww._resetValue=ww.getValue();}),0);},_onBlur:function(){this.inherited(arguments);if(!this.editing){}},destroy:function(){if(this.wrapperWidget){this.wrapperWidget.destroy();delete this.wrapperWidget;}this.inherited(arguments);},_showText:function(_4a6){var ww=this.wrapperWidget;dojo.style(ww.domNode,{position:"absolute",visibility:"hidden",opacity:"0"});dojo.style(this.displayNode,{position:this._savedPosition,opacity:this._savedOpacity,display:""});dojo.attr(this.displayNode,"tabIndex",this._savedTabIndex);if(_4a6){dijit.focus(this.displayNode);}},save:function(_4a7){if(this.disabled||!this.editing){return;}this.editing=false;var ww=this.wrapperWidget;var _4a8=ww.getValue();this.set("value",_4a8);setTimeout(dojo.hitch(this,"onChange",_4a8),0);this._showText(_4a7);},setValue:function(val){dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated.  Use set('value', ...) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(val){this.value=val=dojo.trim(val);if(!this.renderAsHtml){val=val.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;").replace(/\n/g,"<br>");}this.displayNode.innerHTML=val||this.noValueIndicator;},getValue:function(){dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated.  Use get('value') instead.","","2.0");return this.get("value");},cancel:function(_4a9){if(this.disabled||!this.editing){return;}this.editing=false;setTimeout(dojo.hitch(this,"onCancel"),0);this._showText(_4a9);}});dojo.declare("dijit._InlineEditor",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/InlineEditBox.html","<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"),widgetsInTemplate:true,postMixInProperties:function(){this.inherited(arguments);this.messages=dojo.i18n.getLocalization("dijit","common",this.lang);dojo.forEach(["buttonSave","buttonCancel"],function(prop){if(!this[prop]){this[prop]=this.messages[prop];}},this);},postCreate:function(){var cls=dojo.getObject(this.editor);var _4aa=this.sourceStyle,_4ab="line-height:"+_4aa.lineHeight+";",_4ac=dojo.getComputedStyle(this.domNode);dojo.forEach(["Weight","Family","Size","Style"],function(prop){var _4ad=_4aa["font"+prop],_4ae=_4ac["font"+prop];if(_4ae!=_4ad){_4ab+="font-"+prop+":"+_4aa["font"+prop]+";";}},this);dojo.forEach(["marginTop","marginBottom","marginLeft","marginRight"],function(prop){this.domNode.style[prop]=_4aa[prop];},this);var _4af=this.inlineEditBox.width;if(_4af=="100%"){_4ab+="width:100%;";this.domNode.style.display="block";}else{_4ab+="width:"+(_4af+(Number(_4af)==_4af?"px":""))+";";}var _4b0=dojo.delegate(this.inlineEditBox.editorParams,{style:_4ab,dir:this.dir,lang:this.lang});_4b0["displayedValue" in cls.prototype?"displayedValue":"value"]=this.value;var ew=(this.editWidget=new cls(_4b0,this.editorPlaceholder));if(this.inlineEditBox.autoSave){dojo.destroy(this.buttonContainer);this.connect(ew,"onChange","_onChange");this.connect(ew,"onKeyPress","_onKeyPress");}else{if("intermediateChanges" in cls.prototype){ew.set("intermediateChanges",true);this.connect(ew,"onChange","_onIntermediateChange");this.saveButton.set("disabled",true);}}},_onIntermediateChange:function(val){this.saveButton.set("disabled",(this.getValue()==this._resetValue)||!this.enableSave());},destroy:function(){this.editWidget.destroy(true);this.inherited(arguments);},getValue:function(){var ew=this.editWidget;return String(ew.get("displayedValue" in ew?"displayedValue":"value"));},_onKeyPress:function(e){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(e.altKey||e.ctrlKey){return;}if(e.charOrCode==dojo.keys.ESCAPE){dojo.stopEvent(e);this.cancel(true);}else{if(e.charOrCode==dojo.keys.ENTER&&e.target.tagName=="INPUT"){dojo.stopEvent(e);this._onChange();}}}},_onBlur:function(){this.inherited(arguments);if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(this.getValue()==this._resetValue){this.cancel(false);}else{if(this.enableSave()){this.save(false);}}}},_onChange:function(){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing&&this.enableSave()){dojo.style(this.inlineEditBox.displayNode,{display:""});dijit.focus(this.inlineEditBox.displayNode);}},enableSave:function(){return (this.editWidget.isValid?this.editWidget.isValid():true);},focus:function(){this.editWidget.focus();setTimeout(dojo.hitch(this,function(){if(this.editWidget.focusNode&&this.editWidget.focusNode.tagName=="INPUT"){dijit.selectInputText(this.editWidget.focusNode);}}),0);}});}if(!dojo._hasResource["dijit.form.Form"]){dojo._hasResource["dijit.form.Form"]=true;dojo.provide("dijit.form.Form");dojo.declare("dijit.form.Form",[dijit._Widget,dijit._Templated,dijit.form._FormMixin],{name:"",action:"",method:"",encType:"","accept-charset":"",accept:"",target:"",templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{action:"",method:"",encType:"","accept-charset":"",accept:"",target:""}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name='"+this.name+"'"):"";this.inherited(arguments);},execute:function(_4b1){},onExecute:function(){},_setEncTypeAttr:function(_4b2){this.encType=_4b2;dojo.attr(this.domNode,"encType",_4b2);if(dojo.isIE){this.domNode.encoding=_4b2;}},postCreate:function(){if(dojo.isIE&&this.srcNodeRef&&this.srcNodeRef.attributes){var item=this.srcNodeRef.attributes.getNamedItem("encType");if(item&&!item.specified&&(typeof item.value=="string")){this.set("encType",item.value);}}this.inherited(arguments);},reset:function(e){var faux={returnValue:true,preventDefault:function(){this.returnValue=false;},stopPropagation:function(){},currentTarget:e?e.target:this.domNode,target:e?e.target:this.domNode};if(!(this.onReset(faux)===false)&&faux.returnValue){this.inherited(arguments,[]);}},onReset:function(e){return true;},_onReset:function(e){this.reset(e);dojo.stopEvent(e);return false;},_onSubmit:function(e){var fp=dijit.form.Form.prototype;if(this.execute!=fp.execute||this.onExecute!=fp.onExecute){dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.","","2.0");this.onExecute();this.execute(this.getValues());}if(this.onSubmit(e)===false){dojo.stopEvent(e);}},onSubmit:function(e){return this.isValid();},submit:function(){if(!(this.onSubmit()===false)){this.containerNode.submit();}}});}if(!dojo._hasResource["dijit.form.DropDownButton"]){dojo._hasResource["dijit.form.DropDownButton"]=true;dojo.provide("dijit.form.DropDownButton");}if(!dojo._hasResource["dijit.form.ComboButton"]){dojo._hasResource["dijit.form.ComboButton"]=true;dojo.provide("dijit.form.ComboButton");}if(!dojo._hasResource["dijit.form.ToggleButton"]){dojo._hasResource["dijit.form.ToggleButton"]=true;dojo.provide("dijit.form.ToggleButton");}if(!dojo._hasResource["dijit.form.CheckBox"]){dojo._hasResource["dijit.form.CheckBox"]=true;dojo.provide("dijit.form.CheckBox");dojo.declare("dijit.form.CheckBox",dijit.form.ToggleButton,{templateString:dojo.cache("dijit.form","templates/CheckBox.html","<div class=\"dijit dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),baseClass:"dijitCheckBox",type:"checkbox",value:"on",readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{readOnly:"focusNode"}),_setReadOnlyAttr:function(_4b3){this.readOnly=_4b3;dojo.attr(this.focusNode,"readOnly",_4b3);dijit.setWaiState(this.focusNode,"readonly",_4b3);},_setValueAttr:function(_4b4,_4b5){if(typeof _4b4=="string"){this.value=_4b4;dojo.attr(this.focusNode,"value",_4b4);_4b4=true;}if(this._created){this.set("checked",_4b4,_4b5);}},_getValueAttr:function(){return (this.checked?this.value:false);},_setLabelAttr:undefined,postMixInProperties:function(){if(this.value==""){this.value="on";}this.checkedAttrSetting=this.checked?"checked":"";this.inherited(arguments);},_fillContent:function(_4b6){},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);this.value=this.params.value||"on";dojo.attr(this.focusNode,"value",this.value);},_onFocus:function(){if(this.id){dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");}this.inherited(arguments);},_onBlur:function(){if(this.id){dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");}this.inherited(arguments);},_onClick:function(e){if(this.readOnly){return false;}return this.inherited(arguments);}});dojo.declare("dijit.form.RadioButton",dijit.form.CheckBox,{type:"radio",baseClass:"dijitRadio",_setCheckedAttr:function(_4b7){this.inherited(arguments);if(!this._created){return;}if(_4b7){var _4b8=this;dojo.query("INPUT[type=radio]",this.focusNode.form||dojo.doc).forEach(function(_4b9){if(_4b9.name==_4b8.name&&_4b9!=_4b8.focusNode&&_4b9.form==_4b8.focusNode.form){var _4ba=dijit.getEnclosingWidget(_4b9);if(_4ba&&_4ba.checked){_4ba.set("checked",false);}}});}},_clicked:function(e){if(!this.checked){this.set("checked",true);}}});}if(!dojo._hasResource["dijit.form.RadioButton"]){dojo._hasResource["dijit.form.RadioButton"]=true;dojo.provide("dijit.form.RadioButton");}if(!dojo._hasResource["dojo.cldr.monetary"]){dojo._hasResource["dojo.cldr.monetary"]=true;dojo.provide("dojo.cldr.monetary");dojo.cldr.monetary.getData=function(code){var _4bb={ADP:0,AFN:0,ALL:0,AMD:0,BHD:3,BIF:0,BYR:0,CLF:0,CLP:0,COP:0,CRC:0,DJF:0,ESP:0,GNF:0,GYD:0,HUF:0,IDR:0,IQD:0,IRR:3,ISK:0,ITL:0,JOD:3,JPY:0,KMF:0,KPW:0,KRW:0,KWD:3,LAK:0,LBP:0,LUF:0,LYD:3,MGA:0,MGF:0,MMK:0,MNT:0,MRO:0,MUR:0,OMR:3,PKR:0,PYG:0,RSD:0,RWF:0,SLL:0,SOS:0,STD:0,SYP:0,TMM:0,TND:3,TRL:0,TZS:0,UGX:0,UZS:0,VND:0,VUV:0,XAF:0,XOF:0,XPF:0,YER:0,ZMK:0,ZWD:0};var _4bc={CHF:5};var _4bd=_4bb[code],_4be=_4bc[code];if(typeof _4bd=="undefined"){_4bd=2;}if(typeof _4be=="undefined"){_4be=0;}return {places:_4bd,round:_4be};};}if(!dojo._hasResource["dojo.currency"]){dojo._hasResource["dojo.currency"]=true;dojo.provide("dojo.currency");dojo.currency._mixInDefaults=function(_4bf){_4bf=_4bf||{};_4bf.type="currency";var _4c0=dojo.i18n.getLocalization("dojo.cldr","currency",_4bf.locale)||{};var iso=_4bf.currency;var data=dojo.cldr.monetary.getData(iso);dojo.forEach(["displayName","symbol","group","decimal"],function(prop){data[prop]=_4c0[iso+"_"+prop];});data.fractional=[true,false];return dojo.mixin(data,_4bf);};dojo.currency.format=function(_4c1,_4c2){return dojo.number.format(_4c1,dojo.currency._mixInDefaults(_4c2));};dojo.currency.regexp=function(_4c3){return dojo.number.regexp(dojo.currency._mixInDefaults(_4c3));};dojo.currency.parse=function(_4c4,_4c5){return dojo.number.parse(_4c4,dojo.currency._mixInDefaults(_4c5));};}if(!dojo._hasResource["dijit.form.NumberTextBox"]){dojo._hasResource["dijit.form.NumberTextBox"]=true;dojo.provide("dijit.form.NumberTextBox");dojo.declare("dijit.form.NumberTextBoxMixin",null,{regExpGen:dojo.number.regexp,value:NaN,editOptions:{pattern:"#.######"},_formatter:dojo.number.format,_setConstraintsAttr:function(_4c6){var _4c7=typeof _4c6.places=="number"?_4c6.places:0;if(_4c7){_4c7++;}if(typeof _4c6.max!="number"){_4c6.max=9*Math.pow(10,15-_4c7);}if(typeof _4c6.min!="number"){_4c6.min=-9*Math.pow(10,15-_4c7);}this.inherited(arguments,[_4c6]);if(this.focusNode&&this.focusNode.value&&!isNaN(this.value)){this.set("value",this.value);}},_onFocus:function(){if(this.disabled){return;}var val=this.get("value");if(typeof val=="number"&&!isNaN(val)){var _4c8=this.format(val,this.constraints);if(_4c8!==undefined){this.textbox.value=_4c8;}}this.inherited(arguments);},format:function(_4c9,_4ca){var _4cb=String(_4c9);if(typeof _4c9!="number"){return _4cb;}if(isNaN(_4c9)){return "";}if(!("rangeCheck" in this&&this.rangeCheck(_4c9,_4ca))&&_4ca.exponent!==false&&/\de[-+]?\d/i.test(_4cb)){return _4cb;}if(this.editOptions&&this._focused){_4ca=dojo.mixin({},_4ca,this.editOptions);}return this._formatter(_4c9,_4ca);},parse:dojo.number.parse,_getDisplayedValueAttr:function(){var v=this.inherited(arguments);return isNaN(v)?this.textbox.value:v;},filter:function(_4cc){return (_4cc===null||_4cc===""||_4cc===undefined)?NaN:this.inherited(arguments);},serialize:function(_4cd,_4ce){return (typeof _4cd!="number"||isNaN(_4cd))?"":this.inherited(arguments);},_setValueAttr:function(_4cf,_4d0,_4d1){if(_4cf!==undefined&&_4d1===undefined){_4d1=String(_4cf);if(typeof _4cf=="number"){if(isNaN(_4cf)){_4d1="";}else{if(("rangeCheck" in this&&this.rangeCheck(_4cf,this.constraints))||this.constraints.exponent===false||!/\de[-+]?\d/i.test(_4d1)){_4d1=undefined;}}}else{if(!_4cf){_4d1="";_4cf=NaN;}else{_4cf=undefined;}}}this.inherited(arguments,[_4cf,_4d0,_4d1]);},_getValueAttr:function(){var v=this.inherited(arguments);if(isNaN(v)&&this.textbox.value!==""){if(this.constraints.exponent!==false&&/\de[-+]?\d/i.test(this.textbox.value)&&(new RegExp("^"+dojo.number._realNumberRegexp(dojo.mixin({},this.constraints))+"$").test(this.textbox.value))){var n=Number(this.textbox.value);return isNaN(n)?undefined:n;}else{return undefined;}}else{return v;}},isValid:function(_4d2){if(!this._focused||this._isEmpty(this.textbox.value)){return this.inherited(arguments);}else{var v=this.get("value");if(!isNaN(v)&&this.rangeCheck(v,this.constraints)){if(this.constraints.exponent!==false&&/\de[-+]?\d/i.test(this.textbox.value)){return true;}else{return this.inherited(arguments);}}else{return false;}}}});dojo.declare("dijit.form.NumberTextBox",[dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],{});}if(!dojo._hasResource["dijit.form.CurrencyTextBox"]){dojo._hasResource["dijit.form.CurrencyTextBox"]=true;dojo.provide("dijit.form.CurrencyTextBox");dojo.declare("dijit.form.CurrencyTextBox",dijit.form.NumberTextBox,{currency:"",baseClass:"dijitTextBox dijitCurrencyTextBox",regExpGen:function(_4d3){return "("+(this._focused?this.inherited(arguments,[dojo.mixin({},_4d3,this.editOptions)])+"|":"")+dojo.currency.regexp(_4d3)+")";},_formatter:dojo.currency.format,parse:function(_4d4,_4d5){var v=dojo.currency.parse(_4d4,_4d5);if(isNaN(v)&&/\d+/.test(_4d4)){return this.inherited(arguments,[_4d4,dojo.mixin({},_4d5,this.editOptions)]);}return v;},_setConstraintsAttr:function(_4d6){if(!_4d6.currency&&this.currency){_4d6.currency=this.currency;}this.inherited(arguments,[dojo.currency._mixInDefaults(dojo.mixin(_4d6,{exponent:false}))]);}});}if(!dojo._hasResource["dojo.cldr.supplemental"]){dojo._hasResource["dojo.cldr.supplemental"]=true;dojo.provide("dojo.cldr.supplemental");dojo.cldr.supplemental.getFirstDayOfWeek=function(_4d7){var _4d8={mv:5,af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,ly:6,ma:6,om:6,qa:6,sa:6,sd:6,so:6,tn:6,ye:6,ar:0,as:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,il:0,"in":0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,mh:0,mn:0,mo:0,mp:0,mt:0,nz:0,ph:0,pk:0,sg:0,sy:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,vi:0,zw:0};var _4d9=dojo.cldr.supplemental._region(_4d7);var dow=_4d8[_4d9];return (dow===undefined)?1:dow;};dojo.cldr.supplemental._region=function(_4da){_4da=dojo.i18n.normalizeLocale(_4da);var tags=_4da.split("-");var _4db=tags[1];if(!_4db){_4db={de:"de",en:"us",es:"es",fi:"fi",fr:"fr",he:"il",hu:"hu",it:"it",ja:"jp",ko:"kr",nl:"nl",pt:"br",sv:"se",zh:"cn"}[tags[0]];}else{if(_4db.length==4){_4db=tags[2];}}return _4db;};dojo.cldr.supplemental.getWeekend=function(_4dc){var _4dd={"in":0,af:4,dz:4,ir:4,om:4,sa:4,ye:4,ae:5,bh:5,eg:5,il:5,iq:5,jo:5,kw:5,ly:5,ma:5,qa:5,sd:5,sy:5,tn:5};var _4de={af:5,dz:5,ir:5,om:5,sa:5,ye:5,ae:6,bh:5,eg:6,il:6,iq:6,jo:6,kw:6,ly:6,ma:6,qa:6,sd:6,sy:6,tn:6};var _4df=dojo.cldr.supplemental._region(_4dc);var _4e0=_4dd[_4df];var end=_4de[_4df];if(_4e0===undefined){_4e0=6;}if(end===undefined){end=0;}return {start:_4e0,end:end};};}if(!dojo._hasResource["dojo.date"]){dojo._hasResource["dojo.date"]=true;dojo.provide("dojo.date");dojo.date.getDaysInMonth=function(_4e1){var _4e2=_4e1.getMonth();var days=[31,28,31,30,31,30,31,31,30,31,30,31];if(_4e2==1&&dojo.date.isLeapYear(_4e1)){return 29;}return days[_4e2];};dojo.date.isLeapYear=function(_4e3){var year=_4e3.getFullYear();return !(year%400)||(!(year%4)&&!!(year%100));};dojo.date.getTimezoneName=function(_4e4){var str=_4e4.toString();var tz="";var _4e5;var pos=str.indexOf("(");if(pos>-1){tz=str.substring(++pos,str.indexOf(")"));}else{var pat=/([A-Z\/]+) \d{4}$/;if((_4e5=str.match(pat))){tz=_4e5[1];}else{str=_4e4.toLocaleString();pat=/ ([A-Z\/]+)$/;if((_4e5=str.match(pat))){tz=_4e5[1];}}}return (tz=="AM"||tz=="PM")?"":tz;};dojo.date.compare=function(_4e6,_4e7,_4e8){_4e6=new Date(+_4e6);_4e7=new Date(+(_4e7||new Date()));if(_4e8=="date"){_4e6.setHours(0,0,0,0);_4e7.setHours(0,0,0,0);}else{if(_4e8=="time"){_4e6.setFullYear(0,0,0);_4e7.setFullYear(0,0,0);}}if(_4e6>_4e7){return 1;}if(_4e6<_4e7){return -1;}return 0;};dojo.date.add=function(date,_4e9,_4ea){var sum=new Date(+date);var _4eb=false;var _4ec="Date";switch(_4e9){case "day":break;case "weekday":var days,_4ed;var mod=_4ea%5;if(!mod){days=(_4ea>0)?5:-5;_4ed=(_4ea>0)?((_4ea-5)/5):((_4ea+5)/5);}else{days=mod;_4ed=parseInt(_4ea/5);}var strt=date.getDay();var adj=0;if(strt==6&&_4ea>0){adj=1;}else{if(strt==0&&_4ea<0){adj=-1;}}var trgt=strt+days;if(trgt==0||trgt==6){adj=(_4ea>0)?2:-2;}_4ea=(7*_4ed)+days+adj;break;case "year":_4ec="FullYear";_4eb=true;break;case "week":_4ea*=7;break;case "quarter":_4ea*=3;case "month":_4eb=true;_4ec="Month";break;default:_4ec="UTC"+_4e9.charAt(0).toUpperCase()+_4e9.substring(1)+"s";}if(_4ec){sum["set"+_4ec](sum["get"+_4ec]()+_4ea);}if(_4eb&&(sum.getDate()<date.getDate())){sum.setDate(0);}return sum;};dojo.date.difference=function(_4ee,_4ef,_4f0){_4ef=_4ef||new Date();_4f0=_4f0||"day";var _4f1=_4ef.getFullYear()-_4ee.getFullYear();var _4f2=1;switch(_4f0){case "quarter":var m1=_4ee.getMonth();var m2=_4ef.getMonth();var q1=Math.floor(m1/3)+1;var q2=Math.floor(m2/3)+1;q2+=(_4f1*4);_4f2=q2-q1;break;case "weekday":var days=Math.round(dojo.date.difference(_4ee,_4ef,"day"));var _4f3=parseInt(dojo.date.difference(_4ee,_4ef,"week"));var mod=days%7;if(mod==0){days=_4f3*5;}else{var adj=0;var aDay=_4ee.getDay();var bDay=_4ef.getDay();_4f3=parseInt(days/7);mod=days%7;var _4f4=new Date(_4ee);_4f4.setDate(_4f4.getDate()+(_4f3*7));var _4f5=_4f4.getDay();if(days>0){switch(true){case aDay==6:adj=-1;break;case aDay==0:adj=0;break;case bDay==6:adj=-1;break;case bDay==0:adj=-2;break;case (_4f5+mod)>5:adj=-2;}}else{if(days<0){switch(true){case aDay==6:adj=0;break;case aDay==0:adj=1;break;case bDay==6:adj=2;break;case bDay==0:adj=1;break;case (_4f5+mod)<0:adj=2;}}}days+=adj;days-=(_4f3*2);}_4f2=days;break;case "year":_4f2=_4f1;break;case "month":_4f2=(_4ef.getMonth()-_4ee.getMonth())+(_4f1*12);break;case "week":_4f2=parseInt(dojo.date.difference(_4ee,_4ef,"day")/7);break;case "day":_4f2/=24;case "hour":_4f2/=60;case "minute":_4f2/=60;case "second":_4f2/=1000;case "millisecond":_4f2*=_4ef.getTime()-_4ee.getTime();}return Math.round(_4f2);};}if(!dojo._hasResource["dojo.date.locale"]){dojo._hasResource["dojo.date.locale"]=true;dojo.provide("dojo.date.locale");(function(){function _4f6(_4f7,_4f8,_4f9,_4fa){return _4fa.replace(/([a-z])\1*/ig,function(_4fb){var s,pad,c=_4fb.charAt(0),l=_4fb.length,_4fc=["abbr","wide","narrow"];switch(c){case "G":s=_4f8[(l<4)?"eraAbbr":"eraNames"][_4f7.getFullYear()<0?0:1];break;case "y":s=_4f7.getFullYear();switch(l){case 1:break;case 2:if(!_4f9.fullYear){s=String(s);s=s.substr(s.length-2);break;}default:pad=true;}break;case "Q":case "q":s=Math.ceil((_4f7.getMonth()+1)/3);pad=true;break;case "M":var m=_4f7.getMonth();if(l<3){s=m+1;pad=true;}else{var _4fd=["months","format",_4fc[l-3]].join("-");s=_4f8[_4fd][m];}break;case "w":var _4fe=0;s=dojo.date.locale._getWeekOfYear(_4f7,_4fe);pad=true;break;case "d":s=_4f7.getDate();pad=true;break;case "D":s=dojo.date.locale._getDayOfYear(_4f7);pad=true;break;case "E":var d=_4f7.getDay();if(l<3){s=d+1;pad=true;}else{var _4ff=["days","format",_4fc[l-3]].join("-");s=_4f8[_4ff][d];}break;case "a":var _500=(_4f7.getHours()<12)?"am":"pm";s=_4f8["dayPeriods-format-wide-"+_500];break;case "h":case "H":case "K":case "k":var h=_4f7.getHours();switch(c){case "h":s=(h%12)||12;break;case "H":s=h;break;case "K":s=(h%12);break;case "k":s=h||24;break;}pad=true;break;case "m":s=_4f7.getMinutes();pad=true;break;case "s":s=_4f7.getSeconds();pad=true;break;case "S":s=Math.round(_4f7.getMilliseconds()*Math.pow(10,l-3));pad=true;break;case "v":case "z":s=dojo.date.locale._getZone(_4f7,true,_4f9);if(s){break;}l=4;case "Z":var _501=dojo.date.locale._getZone(_4f7,false,_4f9);var tz=[(_501<=0?"+":"-"),dojo.string.pad(Math.floor(Math.abs(_501)/60),2),dojo.string.pad(Math.abs(_501)%60,2)];if(l==4){tz.splice(0,0,"GMT");tz.splice(3,0,":");}s=tz.join("");break;default:throw new Error("dojo.date.locale.format: invalid pattern char: "+_4fa);}if(pad){s=dojo.string.pad(s,l);}return s;});};dojo.date.locale._getZone=function(_502,_503,_504){if(_503){return dojo.date.getTimezoneName(_502);}else{return _502.getTimezoneOffset();}};dojo.date.locale.format=function(_505,_506){_506=_506||{};var _507=dojo.i18n.normalizeLocale(_506.locale),_508=_506.formatLength||"short",_509=dojo.date.locale._getGregorianBundle(_507),str=[],_50a=dojo.hitch(this,_4f6,_505,_509,_506);if(_506.selector=="year"){return _50b(_509["dateFormatItem-yyyy"]||"yyyy",_50a);}var _50c;if(_506.selector!="date"){_50c=_506.timePattern||_509["timeFormat-"+_508];if(_50c){str.push(_50b(_50c,_50a));}}if(_506.selector!="time"){_50c=_506.datePattern||_509["dateFormat-"+_508];if(_50c){str.push(_50b(_50c,_50a));}}return str.length==1?str[0]:_509["dateTimeFormat-"+_508].replace(/\{(\d+)\}/g,function(_50d,key){return str[key];});};dojo.date.locale.regexp=function(_50e){return dojo.date.locale._parseInfo(_50e).regexp;};dojo.date.locale._parseInfo=function(_50f){_50f=_50f||{};var _510=dojo.i18n.normalizeLocale(_50f.locale),_511=dojo.date.locale._getGregorianBundle(_510),_512=_50f.formatLength||"short",_513=_50f.datePattern||_511["dateFormat-"+_512],_514=_50f.timePattern||_511["timeFormat-"+_512],_515;if(_50f.selector=="date"){_515=_513;}else{if(_50f.selector=="time"){_515=_514;}else{_515=_511["dateTimeFormat-"+_512].replace(/\{(\d+)\}/g,function(_516,key){return [_514,_513][key];});}}var _517=[],re=_50b(_515,dojo.hitch(this,_518,_517,_511,_50f));return {regexp:re,tokens:_517,bundle:_511};};dojo.date.locale.parse=function(_519,_51a){var info=dojo.date.locale._parseInfo(_51a),_51b=info.tokens,_51c=info.bundle,re=new RegExp("^"+info.regexp+"$",info.strict?"":"i"),_51d=re.exec(_519);if(!_51d){return null;}var _51e=["abbr","wide","narrow"],_51f=[1970,0,1,0,0,0,0],amPm="",_520=dojo.every(_51d,function(v,i){if(!i){return true;}var _521=_51b[i-1];var l=_521.length;switch(_521.charAt(0)){case "y":if(l!=2&&_51a.strict){_51f[0]=v;}else{if(v<100){v=Number(v);var year=""+new Date().getFullYear(),_522=year.substring(0,2)*100,_523=Math.min(Number(year.substring(2,4))+20,99),num=(v<_523)?_522+v:_522-100+v;_51f[0]=num;}else{if(_51a.strict){return false;}_51f[0]=v;}}break;case "M":if(l>2){var _524=_51c["months-format-"+_51e[l-3]].concat();if(!_51a.strict){v=v.replace(".","").toLowerCase();_524=dojo.map(_524,function(s){return s.replace(".","").toLowerCase();});}v=dojo.indexOf(_524,v);if(v==-1){return false;}}else{v--;}_51f[1]=v;break;case "E":case "e":var days=_51c["days-format-"+_51e[l-3]].concat();if(!_51a.strict){v=v.toLowerCase();days=dojo.map(days,function(d){return d.toLowerCase();});}v=dojo.indexOf(days,v);if(v==-1){return false;}break;case "D":_51f[1]=0;case "d":_51f[2]=v;break;case "a":var am=_51a.am||_51c["dayPeriods-format-wide-am"],pm=_51a.pm||_51c["dayPeriods-format-wide-pm"];if(!_51a.strict){var _525=/\./g;v=v.replace(_525,"").toLowerCase();am=am.replace(_525,"").toLowerCase();pm=pm.replace(_525,"").toLowerCase();}if(_51a.strict&&v!=am&&v!=pm){return false;}amPm=(v==pm)?"p":(v==am)?"a":"";break;case "K":if(v==24){v=0;}case "h":case "H":case "k":if(v>23){return false;}_51f[3]=v;break;case "m":_51f[4]=v;break;case "s":_51f[5]=v;break;case "S":_51f[6]=v;}return true;});var _526=+_51f[3];if(amPm==="p"&&_526<12){_51f[3]=_526+12;}else{if(amPm==="a"&&_526==12){_51f[3]=0;}}var _527=new Date(_51f[0],_51f[1],_51f[2],_51f[3],_51f[4],_51f[5],_51f[6]);if(_51a.strict){_527.setFullYear(_51f[0]);}var _528=_51b.join(""),_529=_528.indexOf("d")!=-1,_52a=_528.indexOf("M")!=-1;if(!_520||(_52a&&_527.getMonth()>_51f[1])||(_529&&_527.getDate()>_51f[2])){return null;}if((_52a&&_527.getMonth()<_51f[1])||(_529&&_527.getDate()<_51f[2])){_527=dojo.date.add(_527,"hour",1);}return _527;};function _50b(_52b,_52c,_52d,_52e){var _52f=function(x){return x;};_52c=_52c||_52f;_52d=_52d||_52f;_52e=_52e||_52f;var _530=_52b.match(/(''|[^'])+/g),_531=_52b.charAt(0)=="'";dojo.forEach(_530,function(_532,i){if(!_532){_530[i]="";}else{_530[i]=(_531?_52d:_52c)(_532.replace(/''/g,"'"));_531=!_531;}});return _52e(_530.join(""));};function _518(_533,_534,_535,_536){_536=dojo.regexp.escapeString(_536);if(!_535.strict){_536=_536.replace(" a"," ?a");}return _536.replace(/([a-z])\1*/ig,function(_537){var s,c=_537.charAt(0),l=_537.length,p2="",p3="";if(_535.strict){if(l>1){p2="0"+"{"+(l-1)+"}";}if(l>2){p3="0"+"{"+(l-2)+"}";}}else{p2="0?";p3="0{0,2}";}switch(c){case "y":s="\\d{2,4}";break;case "M":s=(l>2)?"\\S+?":p2+"[1-9]|1[0-2]";break;case "D":s=p2+"[1-9]|"+p3+"[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]";break;case "d":s="3[01]|[12]\\d|"+p2+"[1-9]";break;case "w":s=p2+"[1-9]|[1-4][0-9]|5[0-3]";break;case "E":s="\\S+";break;case "h":s=p2+"[1-9]|1[0-2]";break;case "k":s=p2+"\\d|1[01]";break;case "H":s=p2+"\\d|1\\d|2[0-3]";break;case "K":s=p2+"[1-9]|1\\d|2[0-4]";break;case "m":case "s":s="[0-5]\\d";break;case "S":s="\\d{"+l+"}";break;case "a":var am=_535.am||_534["dayPeriods-format-wide-am"],pm=_535.pm||_534["dayPeriods-format-wide-pm"];if(_535.strict){s=am+"|"+pm;}else{s=am+"|"+pm;if(am!=am.toLowerCase()){s+="|"+am.toLowerCase();}if(pm!=pm.toLowerCase()){s+="|"+pm.toLowerCase();}if(s.indexOf(".")!=-1){s+="|"+s.replace(/\./g,"");}}s=s.replace(/\./g,"\\.");break;default:s=".*";}if(_533){_533.push(_537);}return "("+s+")";}).replace(/[\xa0 ]/g,"[\\s\\xa0]");};})();(function(){var _538=[];dojo.date.locale.addCustomFormats=function(_539,_53a){_538.push({pkg:_539,name:_53a});};dojo.date.locale._getGregorianBundle=function(_53b){var _53c={};dojo.forEach(_538,function(desc){var _53d=dojo.i18n.getLocalization(desc.pkg,desc.name,_53b);_53c=dojo.mixin(_53c,_53d);},this);return _53c;};})();dojo.date.locale.addCustomFormats("dojo.cldr","gregorian");dojo.date.locale.getNames=function(item,type,_53e,_53f){var _540,_541=dojo.date.locale._getGregorianBundle(_53f),_542=[item,_53e,type];if(_53e=="standAlone"){var key=_542.join("-");_540=_541[key];if(_540[0]==1){_540=undefined;}}_542[1]="format";return (_540||_541[_542.join("-")]).concat();};dojo.date.locale.isWeekend=function(_543,_544){var _545=dojo.cldr.supplemental.getWeekend(_544),day=(_543||new Date()).getDay();if(_545.end<_545.start){_545.end+=7;if(day<_545.start){day+=7;}}return day>=_545.start&&day<=_545.end;};dojo.date.locale._getDayOfYear=function(_546){return dojo.date.difference(new Date(_546.getFullYear(),0,1,_546.getHours()),_546)+1;};dojo.date.locale._getWeekOfYear=function(_547,_548){if(arguments.length==1){_548=0;}var _549=new Date(_547.getFullYear(),0,1).getDay(),adj=(_549-_548+7)%7,week=Math.floor((dojo.date.locale._getDayOfYear(_547)+adj-1)/7);if(_549==_548){week++;}return week;};}if(!dojo._hasResource["dijit.Calendar"]){dojo._hasResource["dijit.Calendar"]=true;dojo.provide("dijit.Calendar");dojo.declare("dijit.Calendar",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{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 dijitCalendarArrow' 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 dijitCalendarArrow' 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, onmousedown: _onDayMouseDown, onmouseup: _onDayMouseUp\" 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",baseClass:"dijitCalendar",cssStateNodes:{"decrementMonth":"dijitCalendarArrow","incrementMonth":"dijitCalendarArrow","previousYearLabelNode":"dijitCalendarPreviousYear","nextYearLabelNode":"dijitCalendarNextYear"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{tabIndex:"domNode"}),setValue:function(_54a){dojo.deprecated("dijit.Calendar:setValue() is deprecated.  Use set('value', ...) instead.","","2.0");this.set("value",_54a);},_getValueAttr:function(){var _54b=new this.dateClassObj(this.value);_54b.setHours(0,0,0,0);if(_54b.getDate()<this.value.getDate()){_54b=this.dateFuncObj.add(_54b,"hour",1);}return _54b;},_setValueAttr:function(_54c){if(!this.value||this.dateFuncObj.compare(_54c,this.value)){_54c=new this.dateClassObj(_54c);_54c.setHours(1);this.displayMonth=new this.dateClassObj(_54c);if(!this.isDisabledDate(_54c,this.lang)){this.value=_54c;this.onChange(this.get("value"));}dojo.attr(this.domNode,"aria-label",this.dateLocaleModule.format(_54c,{selector:"date",formatLength:"full"}));this._populateGrid();}},_setText:function(node,text){while(node.firstChild){node.removeChild(node.firstChild);}node.appendChild(dojo.doc.createTextNode(text));},_populateGrid:function(){var _54d=this.displayMonth;_54d.setDate(1);var _54e=_54d.getDay(),_54f=this.dateFuncObj.getDaysInMonth(_54d),_550=this.dateFuncObj.getDaysInMonth(this.dateFuncObj.add(_54d,"month",-1)),_551=new this.dateClassObj(),_552=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);if(_552>_54e){_552-=7;}dojo.query(".dijitCalendarDateTemplate",this.domNode).forEach(function(_553,i){i+=_552;var date=new this.dateClassObj(_54d),_554,_555="dijitCalendar",adj=0;if(i<_54e){_554=_550-_54e+i+1;adj=-1;_555+="Previous";}else{if(i>=(_54e+_54f)){_554=i-_54e-_54f+1;adj=1;_555+="Next";}else{_554=i-_54e+1;_555+="Current";}}if(adj){date=this.dateFuncObj.add(date,"month",adj);}date.setDate(_554);if(!this.dateFuncObj.compare(date,_551,"date")){_555="dijitCalendarCurrentDate "+_555;}if(this._isSelectedDate(date,this.lang)){_555="dijitCalendarSelectedDate "+_555;}if(this.isDisabledDate(date,this.lang)){_555="dijitCalendarDisabledDate "+_555;}var _556=this.getClassForDate(date,this.lang);if(_556){_555=_556+" "+_555;}_553.className=_555+"Month dijitCalendarDateTemplate";_553.dijitDateValue=date.valueOf();var _557=dojo.query(".dijitCalendarDateLabel",_553)[0],text=date.getDateLocalized?date.getDateLocalized(this.lang):date.getDate();this._setText(_557,text);},this);var _558=this.dateLocaleModule.getNames("months","wide","standAlone",this.lang,_54d);this._setText(this.monthLabelNode,_558[_54d.getMonth()]);dojo.query(".dijitCalendarMonthLabelTemplate",this.domNode).forEach(function(node,i){dojo.toggleClass(node,"dijitHidden",!(i in _558));this._setText(node,_558[i]);},this);var y=_54d.getFullYear()-1;var d=new this.dateClassObj();dojo.forEach(["previous","current","next"],function(name){d.setFullYear(y++);this._setText(this[name+"YearLabelNode"],this.dateLocaleModule.format(d,{selector:"year",locale:this.lang}));},this);var _559=this;var _55a=function(_55b,_55c,adj){_559._connects.push(dijit.typematic.addMouseListener(_559[_55b],_559,function(_55d){if(_55d>=0){_559._adjustDisplay(_55c,adj);}},0.8,500));};_55a("incrementMonth","month",1);_55a("decrementMonth","month",-1);_55a("nextYearLabelNode","year",1);_55a("previousYearLabelNode","year",-1);},goToToday:function(){this.set("value",new this.dateClassObj());},constructor:function(args){var _55e=(args.datePackage&&(args.datePackage!="dojo.date"))?args.datePackage+".Date":"Date";this.dateClassObj=dojo.getObject(_55e,false);this.datePackage=args.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 _55f=dojo.hitch(this,function(_560,n){var _561=dojo.query(_560,this.domNode)[0];for(var i=0;i<n;i++){_561.parentNode.appendChild(_561.cloneNode(true));}});_55f(".dijitCalendarDayLabelTemplate",6);_55f(".dijitCalendarDateTemplate",6);_55f(".dijitCalendarWeekTemplate",5);var _562=this.dateLocaleModule.getNames("days",this.dayWidth,"standAlone",this.lang);var _563=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);dojo.query(".dijitCalendarDayLabel",this.domNode).forEach(function(_564,i){this._setText(_564,_562[(i+_563)%7]);},this);var _565=new this.dateClassObj(this.value);var _566=this.dateLocaleModule.getNames("months","wide","standAlone",this.lang,_565);_55f(".dijitCalendarMonthLabelTemplate",_566.length-1);dojo.query(".dijitCalendarMonthLabelTemplate",this.domNode).forEach(function(node,i){dojo.attr(node,"month",i);if(i in _566){this._setText(node,_566[i]);}dojo.place(node.cloneNode(true),this.monthLabelSpacer);},this);this.value=null;this.set("value",_565);},_onMenuHover:function(e){dojo.stopEvent(e);dojo.toggleClass(e.target,"dijitMenuItemHover");},_adjustDisplay:function(part,_567){this.displayMonth=this.dateFuncObj.add(this.displayMonth,part,_567);this._populateGrid();},_onMonthToggle:function(evt){dojo.stopEvent(evt);if(evt.type=="mousedown"){var _568=dojo.position(this.monthLabelNode);var dim={width:_568.w+"px",top:-this.displayMonth.getMonth()*_568.h+"px"};if((dojo.isIE&&dojo.isQuirks)||dojo.isIE<7){dim.left=-_568.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 node=evt.target;node&&!node.dijitDateValue;node=node.parentNode){}if(node&&!dojo.hasClass(node,"dijitCalendarDisabledDate")){this.set("value",node.dijitDateValue);this.onValueSelected(this.get("value"));}},_onDayMouseOver:function(evt){var node=dojo.hasClass(evt.target,"dijitCalendarDateLabel")?evt.target.parentNode:evt.target;if(node&&(node.dijitDateValue||node==this.previousYearLabelNode||node==this.nextYearLabelNode)){dojo.addClass(node,"dijitCalendarHoveredDate");this._currentNode=node;}},_onDayMouseOut:function(evt){if(!this._currentNode){return;}if(evt.relatedTarget&&evt.relatedTarget.parentNode==this._currentNode){return;}dojo.removeClass(this._currentNode,"dijitCalendarHoveredDate");if(dojo.hasClass(this._currentNode,"dijitCalendarActiveDate")){dojo.removeClass(this._currentNode,"dijitCalendarActiveDate");}this._currentNode=null;},_onDayMouseDown:function(evt){var node=evt.target.parentNode;if(node&&node.dijitDateValue){dojo.addClass(node,"dijitCalendarActiveDate");this._currentNode=node;}},_onDayMouseUp:function(evt){var node=evt.target.parentNode;if(node&&node.dijitDateValue){dojo.removeClass(node,"dijitCalendarActiveDate");}},_onKeyPress:function(evt){var dk=dojo.keys,_569=-1,_56a,_56b=this.value;switch(evt.keyCode){case dk.RIGHT_ARROW:_569=1;case dk.LEFT_ARROW:_56a="day";if(!this.isLeftToRight()){_569*=-1;}break;case dk.DOWN_ARROW:_569=1;case dk.UP_ARROW:_56a="week";break;case dk.PAGE_DOWN:_569=1;case dk.PAGE_UP:_56a=evt.ctrlKey?"year":"month";break;case dk.END:_56b=this.dateFuncObj.add(_56b,"month",1);_56a="day";case dk.HOME:_56b=new Date(_56b).setDate(1);break;case dk.ENTER:this.onValueSelected(this.get("value"));break;case dk.ESCAPE:default:return;}dojo.stopEvent(evt);if(_56a){_56b=this.dateFuncObj.add(_56b,_56a,_569);}this.set("value",_56b);},onValueSelected:function(date){},onChange:function(date){},_isSelectedDate:function(_56c,_56d){return !this.dateFuncObj.compare(_56c,this.value,"date");},isDisabledDate:function(_56e,_56f){},getClassForDate:function(_570,_571){}});}if(!dojo._hasResource["dijit.form._DateTimeTextBox"]){dojo._hasResource["dijit.form._DateTimeTextBox"]=true;dojo.provide("dijit.form._DateTimeTextBox");new Date("X");dojo.declare("dijit.form._DateTimeTextBox",dijit.form.RangeBoundTextBox,{regExpGen:dojo.date.locale.regexp,datePackage:"dojo.date",compare:dojo.date.compare,format:function(_572,_573){if(!_572){return "";}return this.dateLocaleModule.format(_572,_573);},parse:function(_574,_575){return this.dateLocaleModule.parse(_574,_575)||(this._isEmpty(_574)?null:undefined);},serialize:function(val,_576){if(val.toGregorian){val=val.toGregorian();}return dojo.date.stamp.toISOString(val,_576);},value:new Date(""),_blankValue:null,popupClass:"",_selector:"",constructor:function(args){var _577=args.datePackage?args.datePackage+".Date":"Date";this.dateClassObj=dojo.getObject(_577,false);this.value=new this.dateClassObj("");this.datePackage=args.datePackage||this.datePackage;this.dateLocaleModule=dojo.getObject(this.datePackage+".locale",false);this.regExpGen=this.dateLocaleModule.regexp;},_setConstraintsAttr:function(_578){_578.selector=this._selector;_578.fullYear=true;var _579=dojo.date.stamp.fromISOString;if(typeof _578.min=="string"){_578.min=_579(_578.min);}if(typeof _578.max=="string"){_578.max=_579(_578.max);}this.inherited(arguments,[_578]);},_onFocus:function(evt){this._open();this.inherited(arguments);},_setValueAttr:function(_57a,_57b,_57c){if(_57a!==undefined){if(!_57a||_57a.toString()==dijit.form._DateTimeTextBox.prototype.value.toString()){_57a=null;}if(_57a instanceof Date&&!(this.dateClassObj instanceof Date)){_57a=new this.dateClassObj(_57a);}}this.inherited(arguments,[_57a,_57b,_57c]);if(this._picker){if(!_57a){_57a=new this.dateClassObj();}this._picker.set("value",_57a);}},_open:function(){if(this.disabled||this.readOnly||!this.popupClass){return;}var _57d=this;if(!this._picker){var _57e=dojo.getObject(this.popupClass,false);this._picker=new _57e({onValueSelected:function(_57f){if(_57d._tabbingAway){delete _57d._tabbingAway;}else{_57d.focus();}setTimeout(dojo.hitch(_57d,"_close"),1);dijit.form._DateTimeTextBox.superclass._setValueAttr.call(_57d,_57f,true);},id:this.id+"_popup",dir:_57d.dir,lang:_57d.lang,value:this.get("value")||new this.dateClassObj(),constraints:_57d.constraints,datePackage:_57d.datePackage,isDisabledDate:function(date){var _580=dojo.date.compare;var _581=_57d.constraints;return _581&&((_581.min&&_580(_581.min,date,_57d._selector)>0)||(_581.max&&_580(_581.max,date,_57d._selector)<0));}});}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(){_57d._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(_582,_583){this._setValueAttr(this.parse(_582,this.constraints),_583,_582);},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(){if(this._picker&&this._opened){dijit.placeOnScreenAroundElement(p.domNode.parentNode,this.domNode,{"BL":"TL","TL":"BL"},p.orient?dojo.hitch(p,"orient"):null);}}),1);}}}}}});}if(!dojo._hasResource["dijit.form.DateTextBox"]){dojo._hasResource["dijit.form.DateTextBox"]=true;dojo.provide("dijit.form.DateTextBox");dojo.declare("dijit.form.DateTextBox",dijit.form._DateTimeTextBox,{baseClass:"dijitTextBox dijitDateTextBox",popupClass:"dijit.Calendar",_selector:"date",value:new Date("")});}if(!dojo._hasResource["dijit.form._Spinner"]){dojo._hasResource["dijit.form._Spinner"]=true;dojo.provide("dijit.form._Spinner");dojo.declare("dijit.form._Spinner",dijit.form.RangeBoundTextBox,{defaultTimeout:500,minimumTimeout:10,timeoutChangeRate:0.9,smallDelta:1,largeDelta:10,templateString:dojo.cache("dijit.form","templates/Spinner.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitButtonNode dijitSpinnerButtonContainer\"\n\t\t><input class=\"dijitReset dijitInputField dijitSpinnerButtonInner\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t/><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitUpArrowButton\"\n\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9650;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t\t><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9660;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onkeypress:_onKeyPress\"\n\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" ${!nameAttrSetting}\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitSpinner",cssStateNodes:{"upArrowNode":"dijitUpArrowButton","downArrowNode":"dijitDownArrowButton"},adjust:function(val,_584){return val;},_arrowPressed:function(_585,_586,_587){if(this.disabled||this.readOnly){return;}this._setValueAttr(this.adjust(this.get("value"),_586*_587),false);dijit.selectInputText(this.textbox,this.textbox.value.length);},_arrowReleased:function(node){this._wheelTimer=null;if(this.disabled||this.readOnly){return;}},_typematicCallback:function(_588,node,evt){var inc=this.smallDelta;if(node==this.textbox){var k=dojo.keys;var key=evt.charOrCode;inc=(key==k.PAGE_UP||key==k.PAGE_DOWN)?this.largeDelta:this.smallDelta;node=(key==k.UP_ARROW||key==k.PAGE_UP)?this.upArrowNode:this.downArrowNode;}if(_588==-1){this._arrowReleased(node);}else{this._arrowPressed(node,(node==this.upArrowNode)?1:-1,inc);}},_wheelTimer:null,_mouseWheeled:function(evt){dojo.stopEvent(evt);var _589=evt.detail?(evt.detail*-1):(evt.wheelDelta/120);if(_589!==0){var node=this[(_589>0?"upArrowNode":"downArrowNode")];this._arrowPressed(node,_589,this.smallDelta);if(!this._wheelTimer){clearTimeout(this._wheelTimer);}this._wheelTimer=setTimeout(dojo.hitch(this,"_arrowReleased",node),50);}},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,!dojo.isMozilla?"onmousewheel":"DOMMouseScroll","_mouseWheeled");this._connects.push(dijit.typematic.addListener(this.upArrowNode,this.textbox,{charOrCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));this._connects.push(dijit.typematic.addListener(this.downArrowNode,this.textbox,{charOrCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));this._connects.push(dijit.typematic.addListener(this.upArrowNode,this.textbox,{charOrCode:dojo.keys.PAGE_UP,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));this._connects.push(dijit.typematic.addListener(this.downArrowNode,this.textbox,{charOrCode:dojo.keys.PAGE_DOWN,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));}});}if(!dojo._hasResource["dijit.form.NumberSpinner"]){dojo._hasResource["dijit.form.NumberSpinner"]=true;dojo.provide("dijit.form.NumberSpinner");dojo.declare("dijit.form.NumberSpinner",[dijit.form._Spinner,dijit.form.NumberTextBoxMixin],{adjust:function(val,_58a){var tc=this.constraints,v=isNaN(val),_58b=!isNaN(tc.max),_58c=!isNaN(tc.min);if(v&&_58a!=0){val=(_58a>0)?_58c?tc.min:_58b?tc.max:0:_58b?this.constraints.max:_58c?tc.min:0;}var _58d=val+_58a;if(v||isNaN(_58d)){return val;}if(_58b&&(_58d>tc.max)){_58d=tc.max;}if(_58c&&(_58d<tc.min)){_58d=tc.min;}return _58d;},_onKeyPress:function(e){if((e.charOrCode==dojo.keys.HOME||e.charOrCode==dojo.keys.END)&&!(e.ctrlKey||e.altKey||e.metaKey)&&typeof this.get("value")!="undefined"){var _58e=this.constraints[(e.charOrCode==dojo.keys.HOME?"min":"max")];if(typeof _58e=="number"){this._setValueAttr(_58e,false);}dojo.stopEvent(e);}}});}if(!dojo._hasResource["dijit.form.MultiSelect"]){dojo._hasResource["dijit.form.MultiSelect"]=true;dojo.provide("dijit.form.MultiSelect");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(_58f){_58f.getSelected().forEach(function(n){this.containerNode.appendChild(n);this.domNode.scrollTop=this.domNode.offsetHeight;var _590=_58f.domNode.scrollTop;_58f.domNode.scrollTop=0;_58f.domNode.scrollTop=_590;},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(_591){dojo.query("option",this.containerNode).forEach(function(n){n.selected=(dojo.indexOf(_591,n.value)!=-1);});},invertSelection:function(_592){dojo.query("option",this.containerNode).forEach(function(n){n.selected=!n.selected;});this._handleOnChange(this.get("value"),_592==true);},_onChange:function(e){this._handleOnChange(this.get("value"),true);},resize:function(size){if(size){dojo.marginBox(this.domNode,size);}},postCreate:function(){this._onChange();}});}if(!dojo._hasResource["dijit.form.HorizontalSlider"]){dojo._hasResource["dijit.form.HorizontalSlider"]=true;dojo.provide("dijit.form.HorizontalSlider");dojo.declare("dijit.form.HorizontalSlider",[dijit.form._FormValueWidget,dijit._Container],{templateString:dojo.cache("dijit.form","templates/HorizontalSlider.html","<table class=\"dijit dijitReset dijitSlider dijitSliderH\" 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 dijitSliderDecoration dijitSliderDecorationT dijitSliderDecorationH\"></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\" 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\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\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 dijitSliderDecoration dijitSliderDecorationB dijitSliderDecorationH\"></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",cssStateNodes:{incrementButton:"dijitSliderIncrementButton",decrementButton:"dijitSliderDecrementButton",focusNode:"dijitSliderThumb"},_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 _593=dojo.position(this.sliderBarContainer,true);var _594=e[this._mousePixelCoord]-_593[this._startingPixelCoord];this._setPixelValue(this._isReversed()?(_593[this._pixelCount]-_594):_594,_593[this._pixelCount],true);this._movable.onMouseDown(e);},_setPixelValue:function(_595,_596,_597){if(this.disabled||this.readOnly){return;}_595=_595<0?0:_596<_595?_596:_595;var _598=this.discreteValues;if(_598<=1||_598==Infinity){_598=_596;}_598--;var _599=_596/_598;var _59a=Math.round(_595/_599);this._setValueAttr((this.maximum-this.minimum)*_59a/_598+this.minimum,_597);},_setValueAttr:function(_59b,_59c){this.valueNode.value=this.value=_59b;dijit.setWaiState(this.focusNode,"valuenow",_59b);this.inherited(arguments);var _59d=(_59b-this.minimum)/(this.maximum-this.minimum);var _59e=(this._descending===false)?this.remainingBar:this.progressBar;var _59f=(this._descending===false)?this.progressBar:this.remainingBar;if(this._inProgressAnim&&this._inProgressAnim.status!="stopped"){this._inProgressAnim.stop(true);}if(_59c&&this.slideDuration>0&&_59e.style[this._progressPixelSize]){var _5a0=this;var _5a1={};var _5a2=parseFloat(_59e.style[this._progressPixelSize]);var _5a3=this.slideDuration*(_59d-_5a2/100);if(_5a3==0){return;}if(_5a3<0){_5a3=0-_5a3;}_5a1[this._progressPixelSize]={start:_5a2,end:_59d*100,units:"%"};this._inProgressAnim=dojo.animateProperty({node:_59e,duration:_5a3,onAnimate:function(v){_59f.style[_5a0._progressPixelSize]=(100-parseFloat(v[_5a0._progressPixelSize]))+"%";},onEnd:function(){delete _5a0._inProgressAnim;},properties:_5a1});this._inProgressAnim.play();}else{_59e.style[this._progressPixelSize]=(_59d*100)+"%";_59f.style[this._progressPixelSize]=((1-_59d)*100)+"%";}},_bumpValue:function(_5a4,_5a5){if(this.disabled||this.readOnly){return;}var s=dojo.getComputedStyle(this.sliderBarContainer);var c=dojo._getContentBox(this.sliderBarContainer,s);var _5a6=this.discreteValues;if(_5a6<=1||_5a6==Infinity){_5a6=c[this._pixelCount];}_5a6--;var _5a7=(this.value-this.minimum)*_5a6/(this.maximum-this.minimum)+_5a4;if(_5a7<0){_5a7=0;}if(_5a7>_5a6){_5a7=_5a6;}_5a7=_5a7*(this.maximum-this.minimum)/_5a6+this.minimum;this._setValueAttr(_5a7,_5a5);},_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 _5a8=!dojo.isMozilla;var _5a9=evt[(_5a8?"wheelDelta":"detail")]*(_5a8?1:-1);this._bumpValue(_5a9<0?-1:1,true);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_5aa){if(this[_5aa.container]!=this.containerNode){this[_5aa.container].appendChild(_5aa.domNode);}},this);this.inherited(arguments);},_typematicCallback:function(_5ab,_5ac,e){if(_5ab==-1){this._setValueAttr(this.value,true);}else{this[(_5ac==(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 _5ad=dojo.declare(dijit.form._SliderMover,{widget:this});this._movable=new dojo.dnd.Moveable(this.sliderHandle,{mover:_5ad});var _5ae=dojo.query("label[for=\""+this.id+"\"]");if(_5ae.length){_5ae[0].id=(this.id+"_label");dijit.setWaiState(this.focusNode,"labelledby",_5ae[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 _5af=this.widget;var _5b0=_5af._abspos;if(!_5b0){_5b0=_5af._abspos=dojo.position(_5af.sliderBarContainer,true);_5af._setPixelValue_=dojo.hitch(_5af,"_setPixelValue");_5af._isReversed_=_5af._isReversed();}var _5b1=e[_5af._mousePixelCoord]-_5b0[_5af._startingPixelCoord];_5af._setPixelValue_(_5af._isReversed_?(_5b0[_5af._pixelCount]-_5b1):_5b1,_5b0[_5af._pixelCount],false);},destroy:function(e){dojo.dnd.Mover.prototype.destroy.apply(this,arguments);var _5b2=this.widget;_5b2._abspos=null;_5b2._setValueAttr(_5b2.value,true);}});}if(!dojo._hasResource["dijit.form.VerticalSlider"]){dojo._hasResource["dijit.form.VerticalSlider"]=true;dojo.provide("dijit.form.VerticalSlider");dojo.declare("dijit.form.VerticalSlider",dijit.form.HorizontalSlider,{templateString:dojo.cache("dijit.form","templates/VerticalSlider.html","<table class=\"dijit dijitReset dijitSlider dijitSliderV\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\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\" 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 dijitSliderDecoration dijitSliderDecorationL dijitSliderDecorationV\"></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 dijitSliderMoveableV\" 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 dijitSliderDecoration dijitSliderDecorationR dijitSliderDecorationV\"></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\" 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></table>\n"),_mousePixelCoord:"pageY",_pixelCount:"h",_startingPixelCoord:"y",_startingPixelCount:"t",_handleOffsetCoord:"top",_progressPixelSize:"height",_descending:true,_isReversed:function(){return this._descending;}});}if(!dojo._hasResource["dijit.form.HorizontalRule"]){dojo._hasResource["dijit.form.HorizontalRule"]=true;dojo.provide("dijit.form.HorizontalRule");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(pos,ndx){return this._positionPrefix+pos+this._positionSuffix+this.ruleStyle+this._suffix;},_isHorizontal:true,postCreate:function(){var _5b3;if(this.count==1){_5b3=this._genHTML(50,0);}else{var i;var _5b4=100/(this.count-1);if(!this._isHorizontal||this.isLeftToRight()){_5b3=this._genHTML(0,0);for(i=1;i<this.count-1;i++){_5b3+=this._genHTML(_5b4*i,i);}_5b3+=this._genHTML(100,this.count-1);}else{_5b3=this._genHTML(100,0);for(i=1;i<this.count-1;i++){_5b3+=this._genHTML(100-_5b4*i,i);}_5b3+=this._genHTML(0,this.count-1);}}this.domNode.innerHTML=_5b3;}});}if(!dojo._hasResource["dijit.form.VerticalRule"]){dojo._hasResource["dijit.form.VerticalRule"]=true;dojo.provide("dijit.form.VerticalRule");dojo.declare("dijit.form.VerticalRule",dijit.form.HorizontalRule,{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerV\"></div>",_positionPrefix:"<div class=\"dijitRuleMark dijitRuleMarkV\" style=\"top:",_isHorizontal:false});}if(!dojo._hasResource["dijit.form.HorizontalRuleLabels"]){dojo._hasResource["dijit.form.HorizontalRuleLabels"]=true;dojo.provide("dijit.form.HorizontalRuleLabels");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:"\"><div class=\"dijitRuleLabel dijitRuleLabelH\">",_suffix:"</div></div>",_calcPosition:function(pos){return pos;},_genHTML:function(pos,ndx){return this._positionPrefix+this._calcPosition(pos)+this._positionSuffix+this.labelStyle+this._labelPrefix+this.labels[ndx]+this._suffix;},getLabels:function(){var _5b5=this.labels;if(!_5b5.length){_5b5=dojo.query("> li",this.srcNodeRef).map(function(node){return String(node.innerHTML);});}this.srcNodeRef.innerHTML="";if(!_5b5.length&&this.count>1){var _5b6=this.minimum;var inc=(this.maximum-_5b6)/(this.count-1);for(var i=0;i<this.count;i++){_5b5.push((i<this.numericMargin||i>=(this.count-this.numericMargin))?"":dojo.number.format(_5b6,this.constraints));_5b6+=inc;}}return _5b5;},postMixInProperties:function(){this.inherited(arguments);this.labels=this.getLabels();this.count=this.labels.length;}});}if(!dojo._hasResource["dijit.form.VerticalRuleLabels"]){dojo._hasResource["dijit.form.VerticalRuleLabels"]=true;dojo.provide("dijit.form.VerticalRuleLabels");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(pos){return 100-pos;},_isHorizontal:false});}if(!dojo._hasResource["dijit.form.SimpleTextarea"]){dojo._hasResource["dijit.form.SimpleTextarea"]=true;dojo.provide("dijit.form.SimpleTextarea");dojo.declare("dijit.form.SimpleTextarea",dijit.form.TextBox,{baseClass:"dijitTextBox 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(_5b7){if(_5b7){_5b7=_5b7.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 _5b8=parseInt(this.maxLength);var _5b9=this.textbox.value.replace(/\r/g,"");var _5ba=_5b9.length-_5b8;if(_5ba>0){if(e){dojo.stopEvent(e);}var _5bb=this.textbox;if(_5bb.selectionStart){var pos=_5bb.selectionStart;var cr=0;if(dojo.isOpera){cr=(this.textbox.value.substring(0,pos).match(/\r/g)||[]).length;}this.textbox.value=_5b9.substring(0,pos-_5ba-cr)+_5b9.substring(pos-cr);_5bb.setSelectionRange(pos-_5ba,pos-_5ba);}else{if(dojo.doc.selection){_5bb.focus();var _5bc=dojo.doc.selection.createRange();_5bc.moveStart("character",-_5ba);_5bc.text="";_5bc.select();}}}this._previousValue=this.textbox.value;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.Textarea"]){dojo._hasResource["dijit.form.Textarea"]=true;dojo.provide("dijit.form.Textarea");dojo.declare("dijit.form.Textarea",dijit.form.SimpleTextarea,{cols:"",_previousNewlines:0,_strictMode:(dojo.doc.compatMode!="BackCompat"),_getHeight:function(_5bd){var newH=_5bd.scrollHeight;if(dojo.isIE){newH+=_5bd.offsetHeight-_5bd.clientHeight-((dojo.isIE<8&&this._strictMode)?dojo._getPadBorderExtents(_5bd).h:0);}else{if(dojo.isMoz){newH+=_5bd.offsetHeight-_5bd.clientHeight;}else{if(dojo.isWebKit&&!(dojo.isSafari<4)){newH+=dojo._getBorderExtents(_5bd).h;}else{newH+=dojo._getPadBorderExtents(_5bd).h;}}}return newH;},_estimateHeight:function(_5be){_5be.style.maxHeight="";_5be.style.height="auto";_5be.rows=(_5be.value.match(/\n/g)||[]).length+1;},_needsHelpShrinking:dojo.isMoz||dojo.isWebKit,_onInput:function(){this.inherited(arguments);if(this._busyResizing){return;}this._busyResizing=true;var _5bf=this.textbox;if(_5bf.scrollHeight&&_5bf.offsetHeight&&_5bf.clientHeight){var newH=this._getHeight(_5bf)+"px";if(_5bf.style.height!=newH){_5bf.style.maxHeight=_5bf.style.height=newH;}if(this._needsHelpShrinking){if(this._setTimeoutHandle){clearTimeout(this._setTimeoutHandle);}this._setTimeoutHandle=setTimeout(dojo.hitch(this,"_shrink"),0);}}else{this._estimateHeight(_5bf);}this._busyResizing=false;},_busyResizing:false,_shrink:function(){this._setTimeoutHandle=null;if(this._needsHelpShrinking&&!this._busyResizing){this._busyResizing=true;var _5c0=this.textbox;var _5c1=false;if(_5c0.value==""){_5c0.value=" ";_5c1=true;}var _5c2=_5c0.scrollHeight;if(!_5c2){this._estimateHeight(_5c0);}else{var _5c3=_5c0.style.paddingBottom;var _5c4=dojo._getPadExtents(_5c0);_5c4=_5c4.h-_5c4.t;_5c0.style.paddingBottom=_5c4+1+"px";var newH=this._getHeight(_5c0)-1+"px";if(_5c0.style.maxHeight!=newH){_5c0.style.paddingBottom=_5c4+_5c2+"px";_5c0.scrollTop=0;_5c0.style.maxHeight=this._getHeight(_5c0)-_5c2+"px";}_5c0.style.paddingBottom=_5c3;}if(_5c1){_5c0.value="";}this._busyResizing=false;}},resize:function(){this._onInput();},_setValueAttr:function(){this.inherited(arguments);this.resize();},postCreate:function(){this.inherited(arguments);dojo.style(this.textbox,{overflowY:"hidden",overflowX:"auto",boxSizing:"border-box",MsBoxSizing:"border-box",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box"});this.connect(this.textbox,"onscroll",this._onInput);this.connect(this.textbox,"onresize",this._onInput);this.connect(this.textbox,"onfocus",this._onInput);this._setTimeoutHandle=setTimeout(dojo.hitch(this,"resize"),0);},uninitialize:function(){if(this._setTimeoutHandle){clearTimeout(this._setTimeoutHandle);}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.StackController"]){dojo._hasResource["dijit.layout.StackController"]=true;dojo.provide("dijit.layout.StackController");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(info){dojo.forEach(info.children,this.onAddChild,this);if(info.selected){this.onSelectChild(info.selected);}},destroy:function(){for(var pane in this.pane2button){this.onRemoveChild(dijit.byId(pane));}this.inherited(arguments);},onAddChild:function(page,_5c5){var cls=dojo.getObject(this.buttonWidget);var _5c6=new cls({id:this.id+"_"+page.id,label:page.title,dir:page.dir,lang:page.lang,showLabel:page.showTitle,iconClass:page.iconClass,closeButton:page.closable,title:page.tooltip});dijit.setWaiState(_5c6.focusNode,"selected","false");this.pane2handles[page.id]=[this.connect(page,"set",function(name,_5c7){var _5c8={title:"label",showTitle:"showLabel",iconClass:"iconClass",closable:"closeButton",tooltip:"title"}[name];if(_5c8){_5c6.set(_5c8,_5c7);}}),this.connect(_5c6,"onClick",dojo.hitch(this,"onButtonClick",page)),this.connect(_5c6,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",page))];this.addChild(_5c6,_5c5);this.pane2button[page.id]=_5c6;page.controlButton=_5c6;if(!this._currentChild){_5c6.focusNode.setAttribute("tabIndex","0");dijit.setWaiState(_5c6.focusNode,"selected","true");this._currentChild=page;}if(!this.isLeftToRight()&&dojo.isIE&&this._rectifyRtlTabList){this._rectifyRtlTabList();}},onRemoveChild:function(page){if(this._currentChild===page){this._currentChild=null;}dojo.forEach(this.pane2handles[page.id],this.disconnect,this);delete this.pane2handles[page.id];var _5c9=this.pane2button[page.id];if(_5c9){this.removeChild(_5c9);delete this.pane2button[page.id];_5c9.destroy();}delete page.controlButton;},onSelectChild:function(page){if(!page){return;}if(this._currentChild){var _5ca=this.pane2button[this._currentChild.id];_5ca.set("checked",false);dijit.setWaiState(_5ca.focusNode,"selected","false");_5ca.focusNode.setAttribute("tabIndex","-1");}var _5cb=this.pane2button[page.id];_5cb.set("checked",true);dijit.setWaiState(_5cb.focusNode,"selected","true");this._currentChild=page;_5cb.focusNode.setAttribute("tabIndex","0");var _5cc=dijit.byId(this.containerId);dijit.setWaiState(_5cc.containerNode,"labelledby",_5cb.id);},onButtonClick:function(page){var _5cd=dijit.byId(this.containerId);_5cd.selectChild(page);},onCloseButtonClick:function(page){var _5ce=dijit.byId(this.containerId);_5ce.closeChild(page);if(this._currentChild){var b=this.pane2button[this._currentChild.id];if(b){dijit.focus(b.focusNode||b.domNode);}}},adjacent:function(_5cf){if(!this.isLeftToRight()&&(!this.tabPosition||/top|bottom/.test(this.tabPosition))){_5cf=!_5cf;}var _5d0=this.getChildren();var _5d1=dojo.indexOf(_5d0,this.pane2button[this._currentChild.id]);var _5d2=_5cf?1:_5d0.length-1;return _5d0[(_5d1+_5d2)%_5d0.length];},onkeypress:function(e){if(this.disabled||e.altKey){return;}var _5d3=null;if(e.ctrlKey||!e._djpage){var k=dojo.keys;switch(e.charOrCode){case k.LEFT_ARROW:case k.UP_ARROW:if(!e._djpage){_5d3=false;}break;case k.PAGE_UP:if(e.ctrlKey){_5d3=false;}break;case k.RIGHT_ARROW:case k.DOWN_ARROW:if(!e._djpage){_5d3=true;}break;case k.PAGE_DOWN:if(e.ctrlKey){_5d3=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(_5d3!==null){this.adjacent(_5d3).onClick();dojo.stopEvent(e);}}},onContainerKeyPress:function(info){info.e._djpage=info.page;this.onkeypress(info.e);}});dojo.declare("dijit.layout._StackButton",dijit.form.ToggleButton,{tabIndex:"-1",postCreate:function(evt){dijit.setWaiRole((this.focusNode||this.domNode),"tab");this.inherited(arguments);},onClick:function(evt){dijit.focus(this.focusNode);},onClickCloseButton:function(evt){evt.stopPropagation();}});}if(!dojo._hasResource["dijit.layout.StackContainer"]){dojo._hasResource["dijit.layout.StackContainer"]=true;dojo.provide("dijit.layout.StackContainer");dojo.declare("dijit.layout.StackContainer",dijit.layout._LayoutWidget,{doLayout:true,persist:false,baseClass:"dijitStackContainer",postCreate:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitLayoutContainer");dijit.setWaiRole(this.containerNode,"tabpanel");this.connect(this.domNode,"onkeypress",this._onKeyPress);},startup:function(){if(this._started){return;}var _5d4=this.getChildren();dojo.forEach(_5d4,this._setupChild,this);if(this.persist){this.selectedChildWidget=dijit.byId(dojo.cookie(this.id+"_selectedChild"));}else{dojo.some(_5d4,function(_5d5){if(_5d5.selected){this.selectedChildWidget=_5d5;}return _5d5.selected;},this);}var _5d6=this.selectedChildWidget;if(!_5d6&&_5d4[0]){_5d6=this.selectedChildWidget=_5d4[0];_5d6.selected=true;}dojo.publish(this.id+"-startup",[{children:_5d4,selected:_5d6}]);this.inherited(arguments);},resize:function(){var _5d7=this.selectedChildWidget;if(_5d7&&!this._hasBeenShown){this._hasBeenShown=true;this._showChild(_5d7);}this.inherited(arguments);},_setupChild:function(_5d8){this.inherited(arguments);dojo.removeClass(_5d8.domNode,"dijitVisible");dojo.addClass(_5d8.domNode,"dijitHidden");_5d8.domNode.title="";},addChild:function(_5d9,_5da){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-addChild",[_5d9,_5da]);this.layout();if(!this.selectedChildWidget){this.selectChild(_5d9);}}},removeChild:function(page){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-removeChild",[page]);}if(this._beingDestroyed){return;}if(this.selectedChildWidget===page){this.selectedChildWidget=undefined;if(this._started){var _5db=this.getChildren();if(_5db.length){this.selectChild(_5db[0]);}}}if(this._started){this.layout();}},selectChild:function(page,_5dc){page=dijit.byId(page);if(this.selectedChildWidget!=page){this._transition(page,this.selectedChildWidget,_5dc);this.selectedChildWidget=page;dojo.publish(this.id+"-selectChild",[page]);if(this.persist){dojo.cookie(this.id+"_selectedChild",this.selectedChildWidget.id);}}},_transition:function(_5dd,_5de){if(_5de){this._hideChild(_5de);}this._showChild(_5dd);if(_5dd.resize){if(this.doLayout){_5dd.resize(this._containerContentBox||this._contentBox);}else{_5dd.resize();}}},_adjacent:function(_5df){var _5e0=this.getChildren();var _5e1=dojo.indexOf(_5e0,this.selectedChildWidget);_5e1+=_5df?1:_5e0.length-1;return _5e0[_5e1%_5e0.length];},forward:function(){this.selectChild(this._adjacent(true),true);},back:function(){this.selectChild(this._adjacent(false),true);},_onKeyPress:function(e){dojo.publish(this.id+"-containerKeyPress",[{e:e,page:this}]);},layout:function(){if(this.doLayout&&this.selectedChildWidget&&this.selectedChildWidget.resize){this.selectedChildWidget.resize(this._containerContentBox||this._contentBox);}},_showChild:function(page){var _5e2=this.getChildren();page.isFirstChild=(page==_5e2[0]);page.isLastChild=(page==_5e2[_5e2.length-1]);page.selected=true;dojo.removeClass(page.domNode,"dijitHidden");dojo.addClass(page.domNode,"dijitVisible");page._onShow();},_hideChild:function(page){page.selected=false;dojo.removeClass(page.domNode,"dijitVisible");dojo.addClass(page.domNode,"dijitHidden");page.onHide();},closeChild:function(page){var _5e3=page.onClose(this,page);if(_5e3){this.removeChild(page);page.destroyRecursive();}},destroyDescendants:function(_5e4){dojo.forEach(this.getChildren(),function(_5e5){this.removeChild(_5e5);_5e5.destroyRecursive(_5e4);},this);}});dojo.extend(dijit._Widget,{selected:false,closable:false,iconClass:"",showTitle:true});}if(!dojo._hasResource["dijit.layout.AccordionPane"]){dojo._hasResource["dijit.layout.AccordionPane"]=true;dojo.provide("dijit.layout.AccordionPane");dojo.declare("dijit.layout.AccordionPane",dijit.layout.ContentPane,{constructor:function(){dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead","","2.0");},onSelected:function(){}});}if(!dojo._hasResource["dijit.layout.AccordionContainer"]){dojo._hasResource["dijit.layout.AccordionContainer"]=true;dojo.provide("dijit.layout.AccordionContainer");dojo.declare("dijit.layout.AccordionContainer",dijit.layout.StackContainer,{duration:dijit.defaultDuration,buttonWidget:"dijit.layout._AccordionButton",_verticalSpace:0,baseClass:"dijitAccordionContainer",postCreate:function(){this.domNode.style.overflow="hidden";this.inherited(arguments);dijit.setWaiRole(this.domNode,"tablist");},startup:function(){if(this._started){return;}this.inherited(arguments);if(this.selectedChildWidget){var _5e6=this.selectedChildWidget.containerNode.style;_5e6.display="";_5e6.overflow="auto";this.selectedChildWidget._wrapperWidget.set("selected",true);}},_getTargetHeight:function(node){var cs=dojo.getComputedStyle(node);return Math.max(this._verticalSpace-dojo._getPadBorderExtents(node,cs).h-dojo._getMarginExtents(node,cs).h,0);},layout:function(){var _5e7=this.selectedChildWidget;if(!_5e7){return;}var _5e8=_5e7._wrapperWidget.domNode,_5e9=dojo._getMarginExtents(_5e8),_5ea=dojo._getPadBorderExtents(_5e8),_5eb=this._contentBox;var _5ec=0;dojo.forEach(this.getChildren(),function(_5ed){if(_5ed!=_5e7){_5ec+=dojo.marginBox(_5ed._wrapperWidget.domNode).h;}});this._verticalSpace=_5eb.h-_5ec-_5e9.h-_5ea.h-_5e7._buttonWidget.getTitleHeight();this._containerContentBox={h:this._verticalSpace,w:this._contentBox.w-_5e9.w-_5ea.w};if(_5e7){_5e7.resize(this._containerContentBox);}},_setupChild:function(_5ee){_5ee._wrapperWidget=new dijit.layout._AccordionInnerContainer({contentWidget:_5ee,buttonWidget:this.buttonWidget,id:_5ee.id+"_wrapper",dir:_5ee.dir,lang:_5ee.lang,parent:this});this.inherited(arguments);},addChild:function(_5ef,_5f0){if(this._started){dojo.place(_5ef.domNode,this.containerNode,_5f0);if(!_5ef._started){_5ef.startup();}this._setupChild(_5ef);dojo.publish(this.id+"-addChild",[_5ef,_5f0]);this.layout();if(!this.selectedChildWidget){this.selectChild(_5ef);}}else{this.inherited(arguments);}},removeChild:function(_5f1){_5f1._wrapperWidget.destroy();delete _5f1._wrapperWidget;dojo.removeClass(_5f1.domNode,"dijitHidden");this.inherited(arguments);},getChildren:function(){return dojo.map(this.inherited(arguments),function(_5f2){return _5f2.declaredClass=="dijit.layout._AccordionInnerContainer"?_5f2.contentWidget:_5f2;},this);},destroy:function(){dojo.forEach(this.getChildren(),function(_5f3){_5f3._wrapperWidget.destroy();});this.inherited(arguments);},_transition:function(_5f4,_5f5,_5f6){if(this._inTransition){return;}var _5f7=[];var _5f8=this._verticalSpace;if(_5f4){_5f4._wrapperWidget.set("selected",true);this._showChild(_5f4);if(this.doLayout&&_5f4.resize){_5f4.resize(this._containerContentBox);}var _5f9=_5f4.domNode;dojo.addClass(_5f9,"dijitVisible");dojo.removeClass(_5f9,"dijitHidden");if(_5f6){var _5fa=_5f9.style.overflow;_5f9.style.overflow="hidden";_5f7.push(dojo.animateProperty({node:_5f9,duration:this.duration,properties:{height:{start:1,end:this._getTargetHeight(_5f9)}},onEnd:function(){_5f9.style.overflow=_5fa;if(dojo.isIE){setTimeout(function(){dojo.removeClass(_5f9.parentNode,"dijitAccordionInnerContainerFocused");setTimeout(function(){dojo.addClass(_5f9.parentNode,"dijitAccordionInnerContainerFocused");},0);},0);}}}));}}if(_5f5){_5f5._wrapperWidget.set("selected",false);var _5fb=_5f5.domNode;if(_5f6){var _5fc=_5fb.style.overflow;_5fb.style.overflow="hidden";_5f7.push(dojo.animateProperty({node:_5fb,duration:this.duration,properties:{height:{start:this._getTargetHeight(_5fb),end:1}},onEnd:function(){dojo.addClass(_5fb,"dijitHidden");dojo.removeClass(_5fb,"dijitVisible");_5fb.style.overflow=_5fc;if(_5f5.onHide){_5f5.onHide();}}}));}else{dojo.addClass(_5fb,"dijitHidden");dojo.removeClass(_5fb,"dijitVisible");if(_5f5.onHide){_5f5.onHide();}}}if(_5f6){this._inTransition=true;var _5fd=dojo.fx.combine(_5f7);_5fd.onEnd=dojo.hitch(this,function(){delete this._inTransition;});_5fd.play();}},_onKeyPress:function(e,_5fe){if(this._inTransition||this.disabled||e.altKey||!(_5fe||e.ctrlKey)){if(this._inTransition){dojo.stopEvent(e);}return;}var k=dojo.keys,c=e.charOrCode;if((_5fe&&(c==k.LEFT_ARROW||c==k.UP_ARROW))||(e.ctrlKey&&c==k.PAGE_UP)){this._adjacent(false)._buttonWidget._onTitleClick();dojo.stopEvent(e);}else{if((_5fe&&(c==k.RIGHT_ARROW||c==k.DOWN_ARROW))||(e.ctrlKey&&(c==k.PAGE_DOWN||c==k.TAB))){this._adjacent(true)._buttonWidget._onTitleClick();dojo.stopEvent(e);}}}});dojo.declare("dijit.layout._AccordionInnerContainer",[dijit._Widget,dijit._CssStateMixin],{baseClass:"dijitAccordionInnerContainer",isContainer:true,isLayoutContainer:true,buildRendering:function(){this.domNode=dojo.place("<div class='"+this.baseClass+"'>",this.contentWidget.domNode,"after");var _5ff=this.contentWidget,cls=dojo.getObject(this.buttonWidget);this.button=_5ff._buttonWidget=(new cls({contentWidget:_5ff,label:_5ff.title,title:_5ff.tooltip,dir:_5ff.dir,lang:_5ff.lang,iconClass:_5ff.iconClass,id:_5ff.id+"_button",parent:this.parent})).placeAt(this.domNode);dojo.place(this.contentWidget.domNode,this.domNode);},postCreate:function(){this.inherited(arguments);this.connect(this.contentWidget,"set",function(name,_600){var _601={title:"label",tooltip:"title",iconClass:"iconClass"}[name];if(_601){this.button.set(_601,_600);}},this);},_setSelectedAttr:function(_602){this.selected=_602;this.button.set("selected",_602);if(_602){var cw=this.contentWidget;if(cw.onSelected){cw.onSelected();}}},startup:function(){this.contentWidget.startup();},destroy:function(){this.button.destroyRecursive();delete this.contentWidget._buttonWidget;delete this.contentWidget._wrapperWidget;this.inherited(arguments);},destroyDescendants:function(){this.contentWidget.destroyRecursive();}});dojo.declare("dijit.layout._AccordionButton",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:dojo.cache("dijit.layout","templates/AccordionButton.html","<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap),{label:{node:"titleTextNode",type:"innerHTML"},title:{node:"titleTextNode",type:"attribute",attribute:"title"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitAccordionTitle",getParent:function(){return this.parent;},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);var _603=dojo.attr(this.domNode,"id").replace(" ","_");dojo.attr(this.titleTextNode,"id",_603+"_title");dijit.setWaiState(this.focusNode,"labelledby",dojo.attr(this.titleTextNode,"id"));},getTitleHeight:function(){return dojo.marginBox(this.domNode).h;},_onTitleClick:function(){var _604=this.getParent();if(!_604._inTransition){_604.selectChild(this.contentWidget,true);dijit.focus(this.focusNode);}},_onTitleKeyPress:function(evt){return this.getParent()._onKeyPress(evt,this.contentWidget);},_setSelectedAttr:function(_605){this.selected=_605;dijit.setWaiState(this.focusNode,"expanded",_605);dijit.setWaiState(this.focusNode,"selected",_605);this.focusNode.setAttribute("tabIndex",_605?"0":"-1");}});}if(!dojo._hasResource["dijit.layout.BorderContainer"]){dojo._hasResource["dijit.layout.BorderContainer"]=true;dojo.provide("dijit.layout.BorderContainer");dojo.declare("dijit.layout.BorderContainer",dijit.layout._LayoutWidget,{design:"headline",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(_606){var _607=_606.region;if(_607){this.inherited(arguments);dojo.addClass(_606.domNode,this.baseClass+"Pane");var ltr=this.isLeftToRight();if(_607=="leading"){_607=ltr?"left":"right";}if(_607=="trailing"){_607=ltr?"right":"left";}this["_"+_607]=_606.domNode;this["_"+_607+"Widget"]=_606;if((_606.splitter||this.gutters)&&!this._splitters[_607]){var _608=dojo.getObject(_606.splitter?this._splitterClass:"dijit.layout._Gutter");var _609=new _608({id:_606.id+"_splitter",container:this,child:_606,region:_607,live:this.liveSplitters});_609.isSplitter=true;this._splitters[_607]=_609.domNode;dojo.place(this._splitters[_607],_606.domNode,"after");_609.startup();}_606.region=_607;}},_computeSplitterThickness:function(_60a){this._splitterThickness[_60a]=this._splitterThickness[_60a]||dojo.marginBox(this._splitters[_60a])[(/top|bottom/.test(_60a)?"h":"w")];},layout:function(){for(var _60b in this._splitters){this._computeSplitterThickness(_60b);}this._layoutChildren();},addChild:function(_60c,_60d){this.inherited(arguments);if(this._started){this.layout();}},removeChild:function(_60e){var _60f=_60e.region;var _610=this._splitters[_60f];if(_610){dijit.byNode(_610).destroy();delete this._splitters[_60f];delete this._splitterThickness[_60f];}this.inherited(arguments);delete this["_"+_60f];delete this["_"+_60f+"Widget"];if(this._started){this._layoutChildren();}dojo.removeClass(_60e.domNode,this.baseClass+"Pane");},getChildren:function(){return dojo.filter(this.inherited(arguments),function(_611){return !_611.isSplitter;});},getSplitter:function(_612){var _613=this._splitters[_612];return _613?dijit.byNode(_613):null;},resize:function(_614,_615){if(!this.cs||!this.pe){var node=this.domNode;this.cs=dojo.getComputedStyle(node);this.pe=dojo._getPadExtents(node,this.cs);this.pe.r=dojo._toPixelValue(node,this.cs.paddingRight);this.pe.b=dojo._toPixelValue(node,this.cs.paddingBottom);dojo.style(node,"padding","0px");}this.inherited(arguments);},_layoutChildren:function(_616,_617){if(!this._borderBox||!this._borderBox.h){return;}var _618=(this.design=="sidebar");var _619=0,_61a=0,_61b=0,_61c=0;var _61d={},_61e={},_61f={},_620={},_621=(this._center&&this._center.style)||{};var _622=/left|right/.test(_616);var _623=!_616||(!_622&&!_618);var _624=!_616||(_622&&_618);if(this._top){_61d=(_616=="top"||_624)&&this._top.style;_619=_616=="top"?_617:dojo.marginBox(this._top).h;}if(this._left){_61e=(_616=="left"||_623)&&this._left.style;_61b=_616=="left"?_617:dojo.marginBox(this._left).w;}if(this._right){_61f=(_616=="right"||_623)&&this._right.style;_61c=_616=="right"?_617:dojo.marginBox(this._right).w;}if(this._bottom){_620=(_616=="bottom"||_624)&&this._bottom.style;_61a=_616=="bottom"?_617:dojo.marginBox(this._bottom).h;}var _625=this._splitters;var _626=_625.top,_627=_625.bottom,_628=_625.left,_629=_625.right;var _62a=this._splitterThickness;var _62b=_62a.top||0,_62c=_62a.left||0,_62d=_62a.right||0,_62e=_62a.bottom||0;if(_62c>50||_62d>50){setTimeout(dojo.hitch(this,function(){this._splitterThickness={};for(var _62f in this._splitters){this._computeSplitterThickness(_62f);}this._layoutChildren();}),50);return false;}var pe=this.pe;var _630={left:(_618?_61b+_62c:0)+pe.l+"px",right:(_618?_61c+_62d:0)+pe.r+"px"};if(_626){dojo.mixin(_626.style,_630);_626.style.top=_619+pe.t+"px";}if(_627){dojo.mixin(_627.style,_630);_627.style.bottom=_61a+pe.b+"px";}_630={top:(_618?0:_619+_62b)+pe.t+"px",bottom:(_618?0:_61a+_62e)+pe.b+"px"};if(_628){dojo.mixin(_628.style,_630);_628.style.left=_61b+pe.l+"px";}if(_629){dojo.mixin(_629.style,_630);_629.style.right=_61c+pe.r+"px";}dojo.mixin(_621,{top:pe.t+_619+_62b+"px",left:pe.l+_61b+_62c+"px",right:pe.r+_61c+_62d+"px",bottom:pe.b+_61a+_62e+"px"});var _631={top:_618?pe.t+"px":_621.top,bottom:_618?pe.b+"px":_621.bottom};dojo.mixin(_61e,_631);dojo.mixin(_61f,_631);_61e.left=pe.l+"px";_61f.right=pe.r+"px";_61d.top=pe.t+"px";_620.bottom=pe.b+"px";if(_618){_61d.left=_620.left=_61b+_62c+pe.l+"px";_61d.right=_620.right=_61c+_62d+pe.r+"px";}else{_61d.left=_620.left=pe.l+"px";_61d.right=_620.right=pe.r+"px";}var _632=this._borderBox.h-pe.t-pe.b,_633=_632-(_619+_62b+_61a+_62e),_634=_618?_632:_633;var _635=this._borderBox.w-pe.l-pe.r,_636=_635-(_61b+_62c+_61c+_62d),_637=_618?_636:_635;var dim={top:{w:_637,h:_619},bottom:{w:_637,h:_61a},left:{w:_61b,h:_634},right:{w:_61c,h:_634},center:{h:_633,w:_636}};if(_616){var _638=this["_"+_616+"Widget"],mb={};mb[/top|bottom/.test(_616)?"h":"w"]=_617;_638.resize?_638.resize(mb,dim[_638.region]):dojo.marginBox(_638.domNode,mb);}var _639=dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.some(this.getChildren(),function(_63a){return _63a.domNode.tagName=="TEXTAREA"||_63a.domNode.tagName=="INPUT";});if(_639){var _63b=function(_63c,_63d,_63e){if(_63c){(_63c.resize?_63c.resize(_63d,_63e):dojo.marginBox(_63c.domNode,_63d));}};if(_628){_628.style.height=_634;}if(_629){_629.style.height=_634;}_63b(this._leftWidget,{h:_634},dim.left);_63b(this._rightWidget,{h:_634},dim.right);if(_626){_626.style.width=_637;}if(_627){_627.style.width=_637;}_63b(this._topWidget,{w:_637},dim.top);_63b(this._bottomWidget,{w:_637},dim.bottom);_63b(this._centerWidget,dim.center);}else{var _63f=!_616||(/top|bottom/.test(_616)&&this.design!="sidebar"),_640=!_616||(/left|right/.test(_616)&&this.design=="sidebar"),_641={center:true,left:_63f,right:_63f,top:_640,bottom:_640};dojo.forEach(this.getChildren(),function(_642){if(_642.resize&&_641[_642.region]){_642.resize(null,dim[_642.region]);}},this);}},destroy:function(){for(var _643 in this._splitters){var _644=this._splitters[_643];dijit.byNode(_644).destroy();dojo.destroy(_644);}delete this._splitters;delete this._splitterThickness;this.inherited(arguments);}});dojo.extend(dijit._Widget,{region:"",splitter:false,minSize:0,maxSize:Infinity});dojo.declare("dijit.layout._Splitter",[dijit._Widget,dijit._Templated],{live:true,templateString:"<div class=\"dijitSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_startDrag,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 _645=dojo.cookie(this._cookieName);if(_645){this.child.domNode.style[this.horizontal?"height":"width"]=_645;}}},_computeMaxSize:function(){var dim=this.horizontal?"h":"w",_646=this.container._splitterThickness[this.region];var flip={left:"right",right:"left",top:"bottom",bottom:"top",leading:"trailing",trailing:"leading"},_647=this.container["_"+flip[this.region]];var _648=dojo.contentBox(this.container.domNode)[dim]-(_647?dojo.marginBox(_647)[dim]:0)-20-_646*2;return Math.min(this.child.maxSize,_648);},_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 _649=this._factor,max=this._computeMaxSize(),min=this.child.minSize||20,_64a=this.horizontal,axis=_64a?"pageY":"pageX",_64b=e[axis],_64c=this.domNode.style,dim=_64a?"h":"w",_64d=dojo.marginBox(this.child.domNode)[dim],_64e=this.region,_64f=parseInt(this.domNode.style[_64e],10),_650=this._resize,_651=this.child.domNode,_652=dojo.hitch(this.container,this.container._layoutChildren),de=dojo.doc;this._handlers=(this._handlers||[]).concat([dojo.connect(de,"onmousemove",this._drag=function(e,_653){var _654=e[axis]-_64b,_655=_649*_654+_64d,_656=Math.max(Math.min(_655,max),min);if(_650||_653){_652(_64e,_656);}_64c[_64e]=_649*_654+_64f+(_656-_655)+"px";}),dojo.connect(de,"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 _657=this.horizontal;var tick=1;var dk=dojo.keys;switch(e.charOrCode){case _657?dk.UP_ARROW:dk.LEFT_ARROW:tick*=-1;case _657?dk.DOWN_ARROW:dk.RIGHT_ARROW:break;default:return;}var _658=dojo.marginBox(this.child.domNode)[_657?"h":"w"]+this._factor*tick;this.container._layoutChildren(this.region,Math.max(Math.min(_658,this._computeMaxSize()),this.child.minSize));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"));}});}if(!dojo._hasResource["dijit.layout.LayoutContainer"]){dojo._hasResource["dijit.layout.LayoutContainer"]=true;dojo.provide("dijit.layout.LayoutContainer");dojo.declare("dijit.layout.LayoutContainer",dijit.layout._LayoutWidget,{baseClass:"dijitLayoutContainer",constructor:function(){dojo.deprecated("dijit.layout.LayoutContainer is deprecated","use BorderContainer instead",2);},layout:function(){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());},addChild:function(_659,_65a){this.inherited(arguments);if(this._started){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());}},removeChild:function(_65b){this.inherited(arguments);if(this._started){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());}}});dojo.extend(dijit._Widget,{layoutAlign:"none"});}if(!dojo._hasResource["dijit.layout.LinkPane"]){dojo._hasResource["dijit.layout.LinkPane"]=true;dojo.provide("dijit.layout.LinkPane");dojo.declare("dijit.layout.LinkPane",[dijit.layout.ContentPane,dijit._Templated],{templateString:"<div class=\"dijitLinkPane\" dojoAttachPoint=\"containerNode\"></div>",postMixInProperties:function(){if(this.srcNodeRef){this.title+=this.srcNodeRef.innerHTML;}this.inherited(arguments);},_fillContent:function(_65c){}});}if(!dojo._hasResource["dijit.layout.SplitContainer"]){dojo._hasResource["dijit.layout.SplitContainer"]=true;dojo.provide("dijit.layout.SplitContainer");dojo.declare("dijit.layout.SplitContainer",dijit.layout._LayoutWidget,{constructor:function(){dojo.deprecated("dijit.layout.SplitContainer is deprecated","use BorderContainer with splitter instead",2);},activeSizing:false,sizerWidth:7,orientation:"horizontal",persist:true,baseClass:"dijitSplitContainer",postMixInProperties:function(){this.inherited("postMixInProperties",arguments);this.isHorizontal=(this.orientation=="horizontal");},postCreate:function(){this.inherited(arguments);this.sizers=[];if(dojo.isMozilla){this.domNode.style.overflow="-moz-scrollbars-none";}if(typeof this.sizerWidth=="object"){try{this.sizerWidth=parseInt(this.sizerWidth.toString());}catch(e){this.sizerWidth=7;}}var _65d=dojo.doc.createElement("div");this.virtualSizer=_65d;_65d.style.position="relative";_65d.style.zIndex=10;_65d.className=this.isHorizontal?"dijitSplitContainerVirtualSizerH":"dijitSplitContainerVirtualSizerV";this.domNode.appendChild(_65d);dojo.setSelectable(_65d,false);},destroy:function(){delete this.virtualSizer;dojo.forEach(this._ownconnects,dojo.disconnect);this.inherited(arguments);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_65e,i,_65f){this._setupChild(_65e);if(i<_65f.length-1){this._addSizer();}},this);if(this.persist){this._restoreState();}this.inherited(arguments);},_setupChild:function(_660){this.inherited(arguments);_660.domNode.style.position="absolute";dojo.addClass(_660.domNode,"dijitSplitPane");},_onSizerMouseDown:function(e){if(e.target.id){for(var i=0;i<this.sizers.length;i++){if(this.sizers[i].id==e.target.id){break;}}if(i<this.sizers.length){this.beginSizing(e,i);}}},_addSizer:function(_661){_661=_661===undefined?this.sizers.length:_661;var _662=dojo.doc.createElement("div");_662.id=dijit.getUniqueId("dijit_layout_SplitterContainer_Splitter");this.sizers.splice(_661,0,_662);this.domNode.appendChild(_662);_662.className=this.isHorizontal?"dijitSplitContainerSizerH":"dijitSplitContainerSizerV";var _663=dojo.doc.createElement("div");_663.className="thumb";_662.appendChild(_663);this.connect(_662,"onmousedown","_onSizerMouseDown");dojo.setSelectable(_662,false);},removeChild:function(_664){if(this.sizers.length){var i=dojo.indexOf(this.getChildren(),_664);if(i!=-1){if(i==this.sizers.length){i--;}dojo.destroy(this.sizers[i]);this.sizers.splice(i,1);}}this.inherited(arguments);if(this._started){this.layout();}},addChild:function(_665,_666){this.inherited(arguments);if(this._started){var _667=this.getChildren();if(_667.length>1){this._addSizer(_666);}this.layout();}},layout:function(){this.paneWidth=this._contentBox.w;this.paneHeight=this._contentBox.h;var _668=this.getChildren();if(!_668.length){return;}var _669=this.isHorizontal?this.paneWidth:this.paneHeight;if(_668.length>1){_669-=this.sizerWidth*(_668.length-1);}var _66a=0;dojo.forEach(_668,function(_66b){_66a+=_66b.sizeShare;});var _66c=_669/_66a;var _66d=0;dojo.forEach(_668.slice(0,_668.length-1),function(_66e){var size=Math.round(_66c*_66e.sizeShare);_66e.sizeActual=size;_66d+=size;});_668[_668.length-1].sizeActual=_669-_66d;this._checkSizes();var pos=0;var size=_668[0].sizeActual;this._movePanel(_668[0],pos,size);_668[0].position=pos;pos+=size;if(!this.sizers){return;}dojo.some(_668.slice(1),function(_66f,i){if(!this.sizers[i]){return true;}this._moveSlider(this.sizers[i],pos,this.sizerWidth);this.sizers[i].position=pos;pos+=this.sizerWidth;size=_66f.sizeActual;this._movePanel(_66f,pos,size);_66f.position=pos;pos+=size;},this);},_movePanel:function(_670,pos,size){if(this.isHorizontal){_670.domNode.style.left=pos+"px";_670.domNode.style.top=0;var box={w:size,h:this.paneHeight};if(_670.resize){_670.resize(box);}else{dojo.marginBox(_670.domNode,box);}}else{_670.domNode.style.left=0;_670.domNode.style.top=pos+"px";var box={w:this.paneWidth,h:size};if(_670.resize){_670.resize(box);}else{dojo.marginBox(_670.domNode,box);}}},_moveSlider:function(_671,pos,size){if(this.isHorizontal){_671.style.left=pos+"px";_671.style.top=0;dojo.marginBox(_671,{w:size,h:this.paneHeight});}else{_671.style.left=0;_671.style.top=pos+"px";dojo.marginBox(_671,{w:this.paneWidth,h:size});}},_growPane:function(_672,pane){if(_672>0){if(pane.sizeActual>pane.sizeMin){if((pane.sizeActual-pane.sizeMin)>_672){pane.sizeActual=pane.sizeActual-_672;_672=0;}else{_672-=pane.sizeActual-pane.sizeMin;pane.sizeActual=pane.sizeMin;}}}return _672;},_checkSizes:function(){var _673=0;var _674=0;var _675=this.getChildren();dojo.forEach(_675,function(_676){_674+=_676.sizeActual;_673+=_676.sizeMin;});if(_673<=_674){var _677=0;dojo.forEach(_675,function(_678){if(_678.sizeActual<_678.sizeMin){_677+=_678.sizeMin-_678.sizeActual;_678.sizeActual=_678.sizeMin;}});if(_677>0){var list=this.isDraggingLeft?_675.reverse():_675;dojo.forEach(list,function(_679){_677=this._growPane(_677,_679);},this);}}else{dojo.forEach(_675,function(_67a){_67a.sizeActual=Math.round(_674*(_67a.sizeMin/_673));});}},beginSizing:function(e,i){var _67b=this.getChildren();this.paneBefore=_67b[i];this.paneAfter=_67b[i+1];this.isSizing=true;this.sizingSplitter=this.sizers[i];if(!this.cover){this.cover=dojo.create("div",{style:{position:"absolute",zIndex:5,top:0,left:0,width:"100%",height:"100%"}},this.domNode);}else{this.cover.style.zIndex=5;}this.sizingSplitter.style.zIndex=6;this.originPos=dojo.position(_67b[0].domNode,true);if(this.isHorizontal){var _67c=e.layerX||e.offsetX||0;var _67d=e.pageX;this.originPos=this.originPos.x;}else{var _67c=e.layerY||e.offsetY||0;var _67d=e.pageY;this.originPos=this.originPos.y;}this.startPoint=this.lastPoint=_67d;this.screenToClientOffset=_67d-_67c;this.dragOffset=this.lastPoint-this.paneBefore.sizeActual-this.originPos-this.paneBefore.position;if(!this.activeSizing){this._showSizingLine();}this._ownconnects=[];this._ownconnects.push(dojo.connect(dojo.doc.documentElement,"onmousemove",this,"changeSizing"));this._ownconnects.push(dojo.connect(dojo.doc.documentElement,"onmouseup",this,"endSizing"));dojo.stopEvent(e);},changeSizing:function(e){if(!this.isSizing){return;}this.lastPoint=this.isHorizontal?e.pageX:e.pageY;this.movePoint();if(this.activeSizing){this._updateSize();}else{this._moveSizingLine();}dojo.stopEvent(e);},endSizing:function(e){if(!this.isSizing){return;}if(this.cover){this.cover.style.zIndex=-1;}if(!this.activeSizing){this._hideSizingLine();}this._updateSize();this.isSizing=false;if(this.persist){this._saveState(this);}dojo.forEach(this._ownconnects,dojo.disconnect);},movePoint:function(){var p=this.lastPoint-this.screenToClientOffset;var a=p-this.dragOffset;a=this.legaliseSplitPoint(a);p=a+this.dragOffset;this.lastPoint=p+this.screenToClientOffset;},legaliseSplitPoint:function(a){a+=this.sizingSplitter.position;this.isDraggingLeft=!!(a>0);if(!this.activeSizing){var min=this.paneBefore.position+this.paneBefore.sizeMin;if(a<min){a=min;}var max=this.paneAfter.position+(this.paneAfter.sizeActual-(this.sizerWidth+this.paneAfter.sizeMin));if(a>max){a=max;}}a-=this.sizingSplitter.position;this._checkSizes();return a;},_updateSize:function(){var pos=this.lastPoint-this.dragOffset-this.originPos;var _67e=this.paneBefore.position;var _67f=this.paneAfter.position+this.paneAfter.sizeActual;this.paneBefore.sizeActual=pos-_67e;this.paneAfter.position=pos+this.sizerWidth;this.paneAfter.sizeActual=_67f-this.paneAfter.position;dojo.forEach(this.getChildren(),function(_680){_680.sizeShare=_680.sizeActual;});if(this._started){this.layout();}},_showSizingLine:function(){this._moveSizingLine();dojo.marginBox(this.virtualSizer,this.isHorizontal?{w:this.sizerWidth,h:this.paneHeight}:{w:this.paneWidth,h:this.sizerWidth});this.virtualSizer.style.display="block";},_hideSizingLine:function(){this.virtualSizer.style.display="none";},_moveSizingLine:function(){var pos=(this.lastPoint-this.startPoint)+this.sizingSplitter.position;dojo.style(this.virtualSizer,(this.isHorizontal?"left":"top"),pos+"px");},_getCookieName:function(i){return this.id+"_"+i;},_restoreState:function(){dojo.forEach(this.getChildren(),function(_681,i){var _682=this._getCookieName(i);var _683=dojo.cookie(_682);if(_683){var pos=parseInt(_683);if(typeof pos=="number"){_681.sizeShare=pos;}}},this);},_saveState:function(){if(!this.persist){return;}dojo.forEach(this.getChildren(),function(_684,i){dojo.cookie(this._getCookieName(i),_684.sizeShare,{expires:365});},this);}});dojo.extend(dijit._Widget,{sizeMin:10,sizeShare:10});}if(!dojo._hasResource["dijit.layout._TabContainerBase"]){dojo._hasResource["dijit.layout._TabContainerBase"]=true;dojo.provide("dijit.layout._TabContainerBase");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(tab){dojo.addClass(tab.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 _685=this.tabPosition.replace(/-h/,"");this.tablist.layoutAlign=_685;var _686=[this.tablist,{domNode:this.tablistSpacer,layoutAlign:_685},{domNode:this.containerNode,layoutAlign:"client"}];dijit.layout.layoutChildren(this.domNode,this._contentBox,_686);this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_686[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);}});}if(!dojo._hasResource["dijit.layout.TabController"]){dojo._hasResource["dijit.layout.TabController"]=true;dojo.provide("dijit.layout.TabController");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 _687=0;for(var pane in this.pane2button){var ow=this.pane2button[pane].innerDiv.scrollWidth;_687=Math.max(_687,ow);}for(pane in this.pane2button){this.pane2button[pane].innerDiv.style.width=_687+"px";}}});dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",cssStateNodes:{closeNode:"dijitTabCloseButton"},templateString:dojo.cache("dijit.layout","templates/_TabButton.html","<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div waiRole=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' waiRole=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>x</span\n\t\t        ></span>\n\t\t\t</div>\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(disp){this.closeButton=disp;dojo.toggleClass(this.innerDiv,"dijitClosable",disp);this.closeNode.style.display=disp?"":"none";if(disp){var _688=dojo.i18n.getLocalization("dijit","common");if(this.closeNode){dojo.attr(this.closeNode,"title",_688.itemClose);}var _688=dojo.i18n.getLocalization("dijit","common");this._closeMenu=new dijit.Menu({id:this.id+"_Menu",dir:this.dir,lang:this.lang,targetNodeIds:[this.domNode]});this._closeMenu.addChild(new dijit.MenuItem({label:_688.itemClose,dir:this.dir,lang:this.lang,onClick:dojo.hitch(this,"onClickCloseButton")}));}else{if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}}},_setLabelAttr:function(_689){this.inherited(arguments);if(this.showLabel==false&&!this.params.title){this.iconNode.alt=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}},destroy:function(){if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){dojo._hasResource["dijit.layout.ScrollingTabController"]=true;dojo.provide("dijit.layout.ScrollingTabController");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\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=false>&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>&#9654;</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'></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(page,_68a){this.inherited(arguments);var _68b;if(this.useMenu){var _68c=this.containerId;_68b=new dijit.MenuItem({id:page.id+"_stcMi",label:page.title,dir:page.dir,lang:page.lang,onClick:dojo.hitch(this,function(){var _68d=dijit.byId(_68c);_68d.selectChild(page);})});this._menuChildren[page.id]=_68b;this._menu.addChild(_68b,_68a);}this.pane2handles[page.id].push(this.connect(this.pane2button[page.id],"set",function(name,_68e){if(this._postStartup){if(name=="label"){if(_68b){_68b.set(name,_68e);}if(this._dim){this.resize(this._dim);}}}}));dojo.style(this.containerNode,"width",(dojo.style(this.containerNode,"width")+200)+"px");},onRemoveChild:function(page,_68f){var _690=this.pane2button[page.id];if(this._selectedTab===_690.domNode){this._selectedTab=null;}if(this.useMenu&&page&&page.id&&this._menuChildren[page.id]){this._menu.removeChild(this._menuChildren[page.id]);this._menuChildren[page.id].destroy();delete this._menuChildren[page.id];}this.inherited(arguments);},_initButtons:function(){this._menuChildren={};this._btnWidth=0;this._buttons=dojo.query("> .tabStripButton",this.domNode).filter(function(btn){if((this.useMenu&&btn==this._menuBtn.domNode)||(this.useSlider&&(btn==this._rightBtn.domNode||btn==this._leftBtn.domNode))){this._btnWidth+=dojo.marginBox(btn).w;return true;}else{dojo.style(btn,"display","none");return false;}},this);if(this.useMenu){this._menu=new dijit.Menu({id:this.id+"_menu",dir:this.dir,lang:this.lang,targetNodeIds:[this._menuBtn.domNode],leftClickToOpen:true,refocus:false});this._supportingWidgets.push(this._menu);}},_getTabsWidth:function(){var _691=this.getChildren();if(_691.length){var _692=_691[this.isLeftToRight()?0:_691.length-1].domNode,_693=_691[this.isLeftToRight()?_691.length-1:0].domNode;return _693.offsetLeft+dojo.style(_693,"width")-_692.offsetLeft;}else{return 0;}},_enableBtn:function(_694){var _695=this._getTabsWidth();_694=_694||dojo.style(this.scrollNode,"width");return _695>0&&_694<_695;},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 _696=this._enableBtn(this._contentBox.w);this._buttons.style("display",_696?"":"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){if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var w=this.scrollNode,sl=this._convertToScrollLeft(this._getScrollForSelectedTab());w.scrollLeft=sl;}this._setButtonClass(this._getScroll());this._postResize=true;},_getScroll:function(){var sl=(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&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.isIE&&dojo.isQuirks)||dojo.isWebKit){return val;}else{var _697=dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width");return (dojo.isIE==8?-1:1)*(val-_697);}},onSelectChild:function(page){var tab=this.pane2button[page.id];if(!tab||!page){return;}var node=tab.domNode;if(this._postResize&&node!=this._selectedTab){this._selectedTab=node;var sl=this._getScroll();if(sl>node.offsetLeft||sl+dojo.style(this.scrollNode,"width")<node.offsetLeft+dojo.style(node,"width")){this.createSmoothScroll().play();}}this.inherited(arguments);},_getScrollBounds:function(){var _698=this.getChildren(),_699=dojo.style(this.scrollNode,"width"),_69a=dojo.style(this.containerNode,"width"),_69b=_69a-_699,_69c=this._getTabsWidth();if(_698.length&&_69c>_699){return {min:this.isLeftToRight()?0:_698[_698.length-1].domNode.offsetLeft,max:this.isLeftToRight()?(_698[_698.length-1].domNode.offsetLeft+dojo.style(_698[_698.length-1].domNode,"width"))-_699:_69b};}else{var _69d=this.isLeftToRight()?0:_69b;return {min:_69d,max:_69d};}},_getScrollForSelectedTab:function(){var w=this.scrollNode,n=this._selectedTab,_69e=dojo.style(this.scrollNode,"width"),_69f=this._getScrollBounds();var pos=(n.offsetLeft+dojo.style(n,"width")/2)-_69e/2;pos=Math.min(Math.max(pos,_69f.min),_69f.max);return pos;},createSmoothScroll:function(x){if(arguments.length>0){var _6a0=this._getScrollBounds();x=Math.min(Math.max(x,_6a0.min),_6a0.max);}else{x=this._getScrollForSelectedTab();}if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var self=this,w=this.scrollNode,anim=new dojo._Animation({beforeBegin:function(){if(this.curve){delete this.curve;}var oldS=w.scrollLeft,newS=self._convertToScrollLeft(x);anim.curve=new dojo._Line(oldS,newS);},onAnimate:function(val){w.scrollLeft=val;}});this._anim=anim;this._setButtonClass(x);return anim;},_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(_6a1,node){if(node&&dojo.hasClass(node,"dijitTabDisabled")){return;}var _6a2=dojo.style(this.scrollNode,"width");var d=(_6a2*0.75)*_6a1;var to=this._getScroll()+d;this._setButtonClass(to);this.createSmoothScroll(to).play();},_setButtonClass:function(_6a3){var _6a4=this._getScrollBounds();this._leftBtn.set("disabled",_6a3<=_6a4.min);this._rightBtn.set("disabled",_6a3>=_6a4.max);}});dojo.declare("dijit.layout._ScrollingTabControllerButton",dijit.form.Button,{baseClass:"dijitTab tabStripButton",templateString:dojo.cache("dijit.layout","templates/_ScrollingTabControllerButton.html","<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div waiRole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div waiRole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img waiRole=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),tabIndex:"-1"});}if(!dojo._hasResource["dijit.layout.TabContainer"]){dojo._hasResource["dijit.layout.TabContainer"]=true;dojo.provide("dijit.layout.TabContainer");dojo.declare("dijit.layout.TabContainer",dijit.layout._TabContainerBase,{useMenu:true,useSlider:true,controllerWidget:"",_makeController:function(_6a5){var cls=this.baseClass+"-tabs"+(this.doLayout?"":" dijitTabNoLayout"),_6a6=dojo.getObject(this.controllerWidget);return new _6a6({id:this.id+"_tablist",dir:this.dir,lang:this.lang,tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id,"class":cls,nested:this.nested,useMenu:this.useMenu,useSlider:this.useSlider,tabStripClass:this.tabStrip?this.baseClass+(this.tabStrip?"":"No")+"Strip":null},_6a5);},postMixInProperties:function(){this.inherited(arguments);if(!this.controllerWidget){this.controllerWidget=(this.tabPosition=="top"||this.tabPosition=="bottom")&&!this.nested?"dijit.layout.ScrollingTabController":"dijit.layout.TabController";}}});}if(!dojo._hasResource["dijit.dijit-all"]){dojo._hasResource["dijit.dijit-all"]=true;console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool");dojo.provide("dijit.dijit-all");}dojo.i18n._preloadLocalizations("dijit.nls.dijit-all",["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/lib/dijit/dijit-all.js.uncompressed.js b/lib/dijit/dijit-all.js.uncompressed.js
deleted file mode 100644 (file)
index 1ce6041..0000000
+++ /dev/null
@@ -1,28580 +0,0 @@
-/*
-       Copyright (c) 2004-2010, The 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 an optimized version of Dojo, built for deployment and not for
-       development. To get sources and documentation, please visit:
-
-               http://dojotoolkit.org
-*/
-
-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["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["dijit._PaletteMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._PaletteMixin"] = true;
-dojo.provide("dijit._PaletteMixin");
-
-
-dojo.declare("dijit._PaletteMixin",
-       [dijit._CssStateMixin],
-       {
-       // summary:
-       //              A keyboard accessible palette, for picking a color/emoticon/etc.
-       // description:
-       //              A mixin for a grid showing various entities, so the user can pick a certain entity.
-
-       // defaultTimeout: Number
-       //              Number of milliseconds before a held key or button becomes typematic
-       defaultTimeout: 500,
-
-       // timeoutChangeRate: Number
-       //              Fraction of time used to change the typematic timer between events
-       //              1.0 means that each typematic event fires at defaultTimeout intervals
-       //              < 1.0 means that each typematic event fires at an increasing faster rate
-       timeoutChangeRate: 0.90,
-
-       // value: String
-       //              Currently selected color/emoticon/etc.
-       value: null,
-       
-       // _selectedCell: [private] Integer
-       //              Index of the currently selected cell. Initially, none selected
-       _selectedCell: -1,
-
-       // _currentFocus: [private] DomNode
-       //              The currently focused cell (if the palette itself has focus), or otherwise
-       //              the cell to be focused when the palette itself gets focus.
-       //              Different from value, which represents the selected (i.e. clicked) cell.
-/*=====
-       _currentFocus: null,
-=====*/
-
-       // _xDim: [protected] Integer
-       //              This is the number of cells horizontally across.
-/*=====
-       _xDim: null,
-=====*/
-
-       // _yDim: [protected] Integer
-       //              This is the number of cells vertically down.
-/*=====
-       _yDim: null,
-=====*/
-
-       // tabIndex: String
-       //              Widget tab index.
-       tabIndex: "0",
-
-       // cellClass: [protected] String
-       //              CSS class applied to each cell in the palette
-       cellClass: "dijitPaletteCell",
-
-       // dyeClass: [protected] String
-       //       Name of javascript class for Object created for each cell of the palette.
-       //       dyeClass should implements dijit.Dye interface
-       dyeClass: '',
-
-       _preparePalette: function(choices, titles) {
-               // summary:
-               //              Subclass must call _preparePalette() from postCreate(), passing in the tooltip
-               //              for each cell
-               // choices: String[][]
-               //              id's for each cell of the palette, used to create Dye JS object for each cell
-               // titles: String[]
-               //              Localized tooltip for each cell
-
-               this._cells = [];
-               var url = this._blankGif;
-               
-               var dyeClassObj = dojo.getObject(this.dyeClass);
-
-               for(var row=0; row < choices.length; row++){
-                       var rowNode = dojo.create("tr", {tabIndex: "-1"}, this.gridNode);
-                       for(var col=0; col < choices[row].length; col++){
-                               var value = choices[row][col];
-                               if(value){
-                                       var cellObject = new dyeClassObj(value);
-                                       
-                                       var cellNode = dojo.create("td", {
-                                               "class": this.cellClass,
-                                               tabIndex: "-1",
-                                               title: titles[value]
-                                       });
-
-                                       // prepare cell inner structure
-                                       cellObject.fillCell(cellNode, url);
-
-                                       this.connect(cellNode, "ondijitclick", "_onCellClick");
-                                       this._trackMouseState(cellNode, this.cellClass);
-
-                                       dojo.place(cellNode, rowNode);
-
-                                       cellNode.index = this._cells.length;
-
-                                       // save cell info into _cells
-                                       this._cells.push({node:cellNode, dye:cellObject});
-                               }
-                       }
-               }
-               this._xDim = choices[0].length;
-               this._yDim = choices.length;
-
-               // Now set all events
-               // The palette itself is navigated to with the tab key on the keyboard
-               // Keyboard navigation within the Palette is with the arrow keys
-               // Spacebar selects the cell.
-               // For the up key the index is changed by negative the x dimension.
-
-               var keyIncrementMap = {
-                       UP_ARROW: -this._xDim,
-                       // The down key the index is increase by the x dimension.
-                       DOWN_ARROW: this._xDim,
-                       // Right and left move the index by 1.
-                       RIGHT_ARROW: this.isLeftToRight() ? 1 : -1,
-                       LEFT_ARROW: this.isLeftToRight() ? -1 : 1
-               };
-               for(var key in keyIncrementMap){
-                       this._connects.push(
-                               dijit.typematic.addKeyListener(
-                                       this.domNode,
-                                       {charOrCode:dojo.keys[key], ctrlKey:false, altKey:false, shiftKey:false},
-                                       this,
-                                       function(){
-                                               var increment = keyIncrementMap[key];
-                                               return function(count){ this._navigateByKey(increment, count); };
-                                       }(),
-                                       this.timeoutChangeRate,
-                                       this.defaultTimeout
-                               )
-                       );
-               }
-       },
-
-       postCreate: function(){
-               this.inherited(arguments);
-
-               // Set initial navigable node.
-               this._setCurrent(this._cells[0].node);
-       },
-
-       focus: function(){
-               // summary:
-               //              Focus this widget.  Puts focus on the most recently focused cell.
-
-               // The cell already has tabIndex set, just need to set CSS and focus it
-               dijit.focus(this._currentFocus);
-       },
-
-       _onCellClick: function(/*Event*/ evt){
-               // summary:
-               //              Handler for click, enter key & space key. Selects the cell.
-               // evt:
-               //              The event.
-               // tags:
-               //              private
-
-               var target = evt.currentTarget, 
-                       value = this._getDye(target).getValue();
-
-               // First focus the clicked cell, and then send onChange() notification.
-               // onChange() (via _setValueAttr) must be after the focus call, because
-               // it may trigger a refocus to somewhere else (like the Editor content area), and that
-               // second focus should win.
-               // Use setTimeout because IE doesn't like changing focus inside of an event handler.
-               this._setCurrent(target);
-               setTimeout(dojo.hitch(this, function(){
-                       dijit.focus(target);            
-                       this._setValueAttr(value, true);                
-               }));
-
-               // workaround bug where hover class is not removed on popup because the popup is
-               // closed and then there's no onblur event on the cell
-               dojo.removeClass(target, "dijitPaletteCellHover");
-
-               dojo.stopEvent(evt);
-       },
-
-       _setCurrent: function(/*DomNode*/ node){
-               // summary:
-               //              Sets which node is the focused cell.
-               // description:
-               //              At any point in time there's exactly one
-               //              cell with tabIndex != -1.   If focus is inside the palette then
-               //              focus is on that cell.
-               //
-               //              After calling this method, arrow key handlers and mouse click handlers
-               //              should focus the cell in a setTimeout().
-               // tags:
-               //              protected
-               if("_currentFocus" in this){
-                       // Remove tabIndex on old cell
-                       dojo.attr(this._currentFocus, "tabIndex", "-1");
-               }
-
-               // Set tabIndex of new cell
-               this._currentFocus = node;
-               if(node){
-                       dojo.attr(node, "tabIndex", this.tabIndex);
-               }
-       },
-
-       _setValueAttr: function(value, priorityChange){
-               // summary:
-               //              This selects a cell. It triggers the onChange event.
-               // value: String value of the cell to select
-               // tags:
-               //              protected
-               // priorityChange:
-               //              Optional parameter used to tell the select whether or not to fire
-               //              onChange event.
-               
-               // clear old value and selected cell
-               this.value = null;
-               if(this._selectedCell >= 0){
-                       dojo.removeClass(this._cells[this._selectedCell].node, "dijitPaletteCellSelected");
-               }
-               this._selectedCell = -1;
-
-               // search for cell matching specified value
-               if(value){
-                       for(var i = 0; i < this._cells.length; i++){
-                               if(value == this._cells[i].dye.getValue()){
-                                       this._selectedCell = i;
-                                       this.value = value;
-
-                                       dojo.addClass(this._cells[i].node, "dijitPaletteCellSelected");
-
-                                       if(priorityChange || priorityChange === undefined){
-                                               this.onChange(value);
-                                       }
-
-                                       break;
-                               }
-                       }
-               }
-       },
-
-       onChange: function(value){
-               // summary:
-               //              Callback when a cell is selected.
-               // value: String
-               //              Value corresponding to cell.
-       },
-
-       _navigateByKey: function(increment, typeCount){
-               // summary:
-               //              This is the callback for typematic.
-               //              It changes the focus and the highlighed cell.
-               // increment:
-               //              How much the key is navigated.
-               // typeCount:
-               //              How many times typematic has fired.
-               // tags:
-               //              private
-
-               // typecount == -1 means the key is released.
-               if(typeCount == -1){ return; }
-
-               var newFocusIndex = this._currentFocus.index + increment;
-               if(newFocusIndex < this._cells.length && newFocusIndex > -1){
-                       var focusNode = this._cells[newFocusIndex].node;
-                       this._setCurrent(focusNode);
-
-                       // Actually focus the node, for the benefit of screen readers.
-                       // Use setTimeout because IE doesn't like changing focus inside of an event handler
-                       setTimeout(dojo.hitch(dijit, "focus", focusNode), 0);
-               }
-       },
-
-       _getDye: function(/*DomNode*/ cell){
-               // summary:
-               //              Get JS object for given cell DOMNode
-
-               return this._cells[cell.index].dye;
-       }
-});
-
-/*=====
-dojo.declare("dijit.Dye",
-       null,
-       {
-               // summary:
-               //              Interface for the JS Object associated with a palette cell (i.e. DOMNode)
-
-               constructor: function(alias){
-                       // summary:
-                       //              Initialize according to value or alias like "white"
-                       // alias: String
-               },
-
-               getValue: function(){
-                       // summary:
-                       //              Return "value" of cell; meaning of "value" varies by subclass.
-                       // description:
-                       //              For example color hex value, emoticon ascii value etc, entity hex value.
-               },
-
-               fillCell: function(cell, blankGif){
-                       // summary:
-                       //              Add cell DOMNode inner structure
-                       //      cell: DomNode
-                       //              The surrounding cell
-                       //      blankGif: String
-                       //              URL for blank cell image
-               }
-       }
-);
-=====*/
-
-}
-
-if(!dojo._hasResource["dijit.ColorPalette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.ColorPalette"] = true;
-dojo.provide("dijit.ColorPalette");
-
-
-
-
-
-
-
-
-
-
-dojo.declare("dijit.ColorPalette",
-       [dijit._Widget, dijit._Templated, dijit._PaletteMixin],
-       {
-       // summary:
-       //              A keyboard accessible color-picking widget
-       // description:
-       //              Grid showing various colors, so the user can pick a certain color.
-       //              Can be used standalone, or as a popup.
-       //
-       // example:
-       // |    <div dojoType="dijit.ColorPalette"></div>
-       //
-       // example:
-       // |    var picker = new dijit.ColorPalette({ },srcNode);
-       // |    picker.startup();
-
-
-       // palette: String
-       //              Size of grid, either "7x10" or "3x4".
-       palette: "7x10",
-
-       // _palettes: [protected] Map
-       //              This represents the value of the colors.
-       //              The first level is a hashmap of the different palettes available.
-       //              The next two dimensions represent the columns and rows of colors.
-       _palettes: {
-               "7x10": [["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan",     "lavender", "plum"],
-                               ["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"],
-                               ["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise",      "skyblue", "mediumslateblue","orchid"],
-                               ["gray", "red", "orangered", "darkorange", "yellow", "limegreen",       "darkseagreen", "royalblue", "slateblue", "mediumorchid"],
-                               ["dimgray", "crimson",  "chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"],
-                               ["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ],
-                               ["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo",        "purple"]],
-
-               "3x4": [["white", "lime", "green", "blue"],
-                       ["silver", "yellow", "fuchsia", "navy"],
-                       ["gray", "red", "purple", "black"]]
-       },
-
-       // _imagePaths: [protected] Map
-       //              This is stores the path to the palette images
-       _imagePaths: {
-               "7x10": dojo.moduleUrl("dijit.themes", "a11y/colors7x10.png"),
-               "3x4": dojo.moduleUrl("dijit.themes", "a11y/colors3x4.png"),
-               "7x10-rtl": dojo.moduleUrl("dijit.themes", "a11y/colors7x10-rtl.png"),
-               "3x4-rtl": dojo.moduleUrl("dijit.themes", "a11y/colors3x4-rtl.png")
-       },
-
-       // templateString: String
-       //              The template of this widget.
-       templateString: dojo.cache("dijit", "templates/ColorPalette.html", "<div class=\"dijitInline dijitColorPalette\">\n\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\"/>\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),
-
-       baseClass: "dijitColorPalette",
-
-       dyeClass: 'dijit._Color',
-
-       buildRendering: function(){
-               // Instantiate the template, which makes a skeleton into which we'll insert a bunch of
-               // <img> nodes
-
-               this.inherited(arguments);
-
-               this.imageNode.setAttribute("src", this._imagePaths[this.palette + (this.isLeftToRight() ? "" : "-rtl")].toString());
-
-               var i18nColorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang);
-               this._preparePalette(
-                       this._palettes[this.palette],
-                       i18nColorNames
-               );
-       }
-});
-
-dojo.declare("dijit._Color", dojo.Color,
-       // summary:
-       //              Object associated with each cell in a ColorPalette palette.
-       //              Implements dijit.Dye.
-       {
-               constructor: function(/*String*/alias){
-                       this._alias = alias;
-                       this.setColor(dojo.Color.named[alias]);
-               },
-
-               getValue: function(){
-                       // summary:
-                       //              Note that although dijit._Color is initialized with a value like "white" getValue() always
-                       //              returns a hex value
-                       return this.toHex();
-               },
-
-               fillCell: function(/*DOMNode*/ cell, /*String*/ blankGif){
-                       dojo.create("img", {
-                               src: blankGif,
-                               "class": "dijitPaletteImg",
-                               alt: this._alias
-                       }, cell);
-               }
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.Declaration"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Declaration"] = true;
-dojo.provide("dijit.Declaration");
-
-
-
-dojo.declare(
-       "dijit.Declaration",
-       dijit._Widget,
-       {
-               // summary:
-               //              The Declaration widget allows a developer to declare new widget
-               //              classes directly from a snippet of markup.
-
-               // _noScript: [private] Boolean
-               //              Flag to parser to leave alone the script tags contained inside of me
-               _noScript: true,
-
-               // widgetClass: String
-               //              Name of class being declared, ex: "acme.myWidget"
-               widgetClass: "",
-
-               // propList: Object
-               //              Set of attributes for this widget along with default values, ex:
-               //              {delay: 100, title: "hello world"}
-               defaults: null,
-
-               // mixins: String[]
-               //              List containing the prototype for this widget, and also any mixins,
-               //              ex: ["dijit._Widget", "dijit._Container"]
-               mixins: [],
-
-               buildRendering: function(){
-                       var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef),
-                               methods = dojo.query("> script[type^='dojo/method'][event]", src).orphan(),
-                               postscriptConnects = dojo.query("> script[type^='dojo/method']", src).orphan(),
-                               regularConnects = dojo.query("> script[type^='dojo/connect']", src).orphan(),
-                               srcType = src.nodeName;
-
-                       var propList = this.defaults || {};
-
-                       // For all methods defined like <script type="dojo/method" event="foo">,
-                       // add that method to prototype
-                       dojo.forEach(methods, function(s){
-                               var evt = s.getAttribute("event"),
-                                       func = dojo.parser._functionFromScript(s);
-                               propList[evt] = func;
-                       });
-
-                       // map array of strings like [ "dijit.form.Button" ] to array of mixin objects
-                       // (note that dojo.map(this.mixins, dojo.getObject) doesn't work because it passes
-                       // a bogus third argument to getObject(), confusing it)
-                       this.mixins = this.mixins.length ?
-                               dojo.map(this.mixins, function(name){ return dojo.getObject(name); } ) :
-                               [ dijit._Widget, dijit._Templated ];
-
-                       propList.widgetsInTemplate = true;
-                       propList._skipNodeCache = true;
-                       propList.templateString = "<"+srcType+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint") || '')+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent") || '')+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+srcType+">";
-
-                       // strip things so we don't create stuff under us in the initial setup phase
-                       dojo.query("[dojoType]", src).forEach(function(node){
-                               node.removeAttribute("dojoType");
-                       });
-
-                       // create the new widget class
-                       var wc = dojo.declare(
-                               this.widgetClass,
-                               this.mixins,
-                               propList
-                       );
-
-                       // Handle <script> blocks of form:
-                       //              <script type="dojo/connect" event="foo">
-                       // and
-                       //              <script type="dojo/method">
-                       // (Note that the second one is just shorthand for a dojo/connect to postscript)
-                       // Since this is a connect in the declaration, we are actually connection to the method
-                       // in the _prototype_.
-                       var connects = regularConnects.concat(postscriptConnects);
-                       dojo.forEach(connects, function(s){
-                               var evt = s.getAttribute("event") || "postscript",
-                                       func = dojo.parser._functionFromScript(s);
-                               dojo.connect(wc.prototype, evt, func);
-                       });
-               }
-       }
-);
-
-}
-
-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.isCopyKey;
-
-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}, e);
-               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(e){
-               // 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)) || 0;
-                               t = Math.round(parseFloat(s.top)) || 0;
-                               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, e);
-               }
-               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, /* Event */ e){
-               // 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, /* Event */ e){
-               // 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["dojo.dnd.move"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.dnd.move"] = true;
-dojo.provide("dojo.dnd.move");
-
-
-
-
-/*=====
-dojo.declare("dojo.dnd.move.__constrainedMoveableArgs", [dojo.dnd.__MoveableArgs], {
-       // constraints: Function
-       //              Calculates a constraint box.
-       //              It is called in a context of the moveable object.
-       constraints: function(){},
-
-       // within: Boolean
-       //              restrict move within boundaries.
-       within: false
-});
-=====*/
-
-dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, {
-       // object attributes (for markup)
-       constraints: function(){},
-       within: false,
-       
-       // markup methods
-       markupFactory: function(params, node){
-               return new dojo.dnd.move.constrainedMoveable(node, params);
-       },
-
-       constructor: function(node, params){
-               // summary:
-               //              an object that makes a node moveable
-               // node: Node
-               //              a node (or node's id) to be moved
-               // params: dojo.dnd.move.__constrainedMoveableArgs?
-               //              an optional object with additional parameters;
-               //              the rest is passed to the base class
-               if(!params){ params = {}; }
-               this.constraints = params.constraints;
-               this.within = params.within;
-       },
-       onFirstMove: function(/* dojo.dnd.Mover */ mover){
-               // summary:
-               //              called during the very first move notification;
-               //              can be used to initialize coordinates, can be overwritten.
-               var c = this.constraintBox = this.constraints.call(this, mover);
-               c.r = c.l + c.w;
-               c.b = c.t + c.h;
-               if(this.within){
-                       var mb = dojo.marginBox(mover.node);
-                       c.r -= mb.w;
-                       c.b -= mb.h;
-               }
-       },
-       onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
-               // summary:
-               //              called during every move notification;
-               //              should actually move the node; can be overwritten.
-               var c = this.constraintBox, s = mover.node.style;
-               s.left = (leftTop.l < c.l ? c.l : c.r < leftTop.l ? c.r : leftTop.l) + "px";
-               s.top  = (leftTop.t < c.t ? c.t : c.b < leftTop.t ? c.b : leftTop.t) + "px";
-       }
-});
-
-/*=====
-dojo.declare("dojo.dnd.move.__boxConstrainedMoveableArgs", [dojo.dnd.move.__constrainedMoveableArgs], {
-       // box: Object
-       //              a constraint box
-       box: {}
-});
-=====*/
-
-dojo.declare("dojo.dnd.move.boxConstrainedMoveable", dojo.dnd.move.constrainedMoveable, {
-       // box:
-       //              object attributes (for markup)
-       box: {},
-       
-       // markup methods
-       markupFactory: function(params, node){
-               return new dojo.dnd.move.boxConstrainedMoveable(node, params);
-       },
-
-       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.move.__boxConstrainedMoveableArgs?
-               //              an optional object with parameters
-               var box = params && params.box;
-               this.constraints = function(){ return box; };
-       }
-});
-
-/*=====
-dojo.declare("dojo.dnd.move.__parentConstrainedMoveableArgs", [dojo.dnd.move.__constrainedMoveableArgs], {
-       // area: String
-       //              A parent's area to restrict the move.
-       //              Can be "margin", "border", "padding", or "content".
-       area: ""
-});
-=====*/
-
-dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constrainedMoveable, {
-       // area:
-       //              object attributes (for markup)
-       area: "content",
-
-       // markup methods
-       markupFactory: function(params, node){
-               return new dojo.dnd.move.parentConstrainedMoveable(node, params);
-       },
-
-       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.move.__parentConstrainedMoveableArgs?
-               //              an optional object with parameters
-               var area = params && params.area;
-               this.constraints = function(){
-                       var n = this.node.parentNode, 
-                               s = dojo.getComputedStyle(n), 
-                               mb = dojo._getMarginBox(n, s);
-                       if(area == "margin"){
-                               return mb;      // Object
-                       }
-                       var t = dojo._getMarginExtents(n, s);
-                       mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-                       if(area == "border"){
-                               return mb;      // Object
-                       }
-                       t = dojo._getBorderExtents(n, s);
-                       mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-                       if(area == "padding"){
-                               return mb;      // Object
-                       }
-                       t = dojo._getPadExtents(n, s);
-                       mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-                       return mb;      // Object
-               };
-       }
-});
-
-// WARNING: below are obsolete objects, instead of custom movers use custom moveables (above)
-
-dojo.dnd.move.constrainedMover = function(fun, within){
-       // summary:
-       //              returns a constrained version of dojo.dnd.Mover
-       // description:
-       //              this function produces n object, which will put a constraint on 
-       //              the margin box of dragged object in absolute coordinates
-       // fun: Function
-       //              called on drag, and returns a constraint box
-       // within: Boolean
-       //              if true, constraints the whole dragged object withtin the rectangle, 
-       //              otherwise the constraint is applied to the left-top corner
-
-       dojo.deprecated("dojo.dnd.move.constrainedMover, use dojo.dnd.move.constrainedMoveable instead");
-       var mover = function(node, e, notifier){
-               dojo.dnd.Mover.call(this, node, e, notifier);
-       };
-       dojo.extend(mover, dojo.dnd.Mover.prototype);
-       dojo.extend(mover, {
-               onMouseMove: function(e){
-                       // summary: event processor for onmousemove
-                       // e: Event: mouse event
-                       dojo.dnd.autoScroll(e);
-                       var m = this.marginBox, c = this.constraintBox,
-                               l = m.l + e.pageX, t = m.t + e.pageY;
-                       l = l < c.l ? c.l : c.r < l ? c.r : l;
-                       t = t < c.t ? c.t : c.b < t ? c.b : t;
-                       this.host.onMove(this, {l: l, t: t});
-               },
-               onFirstMove: function(){
-                       // summary: called once to initialize things; it is meant to be called only once
-                       dojo.dnd.Mover.prototype.onFirstMove.call(this);
-                       var c = this.constraintBox = fun.call(this);
-                       c.r = c.l + c.w;
-                       c.b = c.t + c.h;
-                       if(within){
-                               var mb = dojo.marginBox(this.node);
-                               c.r -= mb.w;
-                               c.b -= mb.h;
-                       }
-               }
-       });
-       return mover;   // Object
-};
-
-dojo.dnd.move.boxConstrainedMover = function(box, within){
-       // summary:
-       //              a specialization of dojo.dnd.constrainedMover, which constrains to the specified box
-       // box: Object
-       //              a constraint box (l, t, w, h)
-       // within: Boolean
-       //              if true, constraints the whole dragged object withtin the rectangle, 
-       //              otherwise the constraint is applied to the left-top corner
-
-       dojo.deprecated("dojo.dnd.move.boxConstrainedMover, use dojo.dnd.move.boxConstrainedMoveable instead");
-       return dojo.dnd.move.constrainedMover(function(){ return box; }, within);       // Object
-};
-
-dojo.dnd.move.parentConstrainedMover = function(area, within){
-       // summary:
-       //              a specialization of dojo.dnd.constrainedMover, which constrains to the parent node
-       // area: String
-       //              "margin" to constrain within the parent's margin box, "border" for the border box,
-       //              "padding" for the padding box, and "content" for the content box; "content" is the default value.
-       // within: Boolean
-       //              if true, constraints the whole dragged object within the rectangle, 
-       //              otherwise the constraint is applied to the left-top corner
-
-       dojo.deprecated("dojo.dnd.move.parentConstrainedMover, use dojo.dnd.move.parentConstrainedMoveable instead");
-       var fun = function(){
-               var n = this.node.parentNode, 
-                       s = dojo.getComputedStyle(n), 
-                       mb = dojo._getMarginBox(n, s);
-               if(area == "margin"){
-                       return mb;      // Object
-               }
-               var t = dojo._getMarginExtents(n, s);
-               mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-               if(area == "border"){
-                       return mb;      // Object
-               }
-               t = dojo._getBorderExtents(n, s);
-               mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-               if(area == "padding"){
-                       return mb;      // Object
-               }
-               t = dojo._getPadExtents(n, s);
-               mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-               return mb;      // Object
-       };
-       return dojo.dnd.move.constrainedMover(fun, within);     // Object
-};
-
-// patching functions one level up for compatibility
-
-dojo.dnd.constrainedMover = dojo.dnd.move.constrainedMover;
-dojo.dnd.boxConstrainedMover = dojo.dnd.move.boxConstrainedMover;
-dojo.dnd.parentConstrainedMover = dojo.dnd.move.parentConstrainedMover;
-
-}
-
-if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.dnd.TimedMoveable"] = true;
-dojo.provide("dojo.dnd.TimedMoveable");
-
-
-
-/*=====
-dojo.declare("dojo.dnd.__TimedMoveableArgs", [dojo.dnd.__MoveableArgs], {
-       // timeout: Number
-       //              delay move by this number of ms,
-       //              accumulating position changes during the timeout
-       timeout: 0
-});
-=====*/
-
-(function(){
-       // precalculate long expressions
-       var oldOnMove = dojo.dnd.Moveable.prototype.onMove;
-               
-       dojo.declare("dojo.dnd.TimedMoveable", dojo.dnd.Moveable, {
-               // summary:
-               //              A specialized version of Moveable to support an FPS throttling.
-               //              This class puts an upper restriction on FPS, which may reduce 
-               //              the CPU load. The additional parameter "timeout" regulates
-               //              the delay before actually moving the moveable object.
-               
-               // object attributes (for markup)
-               timeout: 40,    // in ms, 40ms corresponds to 25 fps
-       
-               constructor: function(node, params){
-                       // summary:
-                       //              an object that makes a node moveable with a timer
-                       // node: Node||String
-                       //              a node (or node's id) to be moved
-                       // params: dojo.dnd.__TimedMoveableArgs
-                       //              object with additional parameters.
-                       
-                       // sanitize parameters
-                       if(!params){ params = {}; }
-                       if(params.timeout && typeof params.timeout == "number" && params.timeout >= 0){
-                               this.timeout = params.timeout;
-                       }
-               },
-       
-               // markup methods
-               markupFactory: function(params, node){
-                       return new dojo.dnd.TimedMoveable(node, params);
-               },
-       
-               onMoveStop: function(/* dojo.dnd.Mover */ mover){
-                       if(mover._timer){
-                               // stop timer
-                               clearTimeout(mover._timer)
-                               // reflect the last received position
-                               oldOnMove.call(this, mover, mover._leftTop)
-                       }
-                       dojo.dnd.Moveable.prototype.onMoveStop.apply(this, arguments);
-               },
-               onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
-                       mover._leftTop = leftTop;
-                       if(!mover._timer){
-                               var _t = this;  // to avoid using dojo.hitch()
-                               mover._timer = setTimeout(function(){
-                                       // we don't have any pending requests
-                                       mover._timer = null;
-                                       // reflect the last received position
-                                       oldOnMove.call(_t, mover, mover._leftTop);
-                               }, this.timeout);
-                       }
-               }
-       });
-})();
-
-}
-
-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["dijit.form._FormMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form._FormMixin"] = true;
-dojo.provide("dijit.form._FormMixin");
-
-
-
-dojo.declare("dijit.form._FormMixin", null,
-       {
-       // summary:
-       //              Mixin for containers of form widgets (i.e. widgets that represent a single value
-       //              and can be children of a <form> node or dijit.form.Form widget)
-       // description:
-       //              Can extract all the form widgets
-       //              values and combine them into a single javascript object, or alternately
-       //              take such an object and set the values for all the contained
-       //              form widgets
-
-/*=====
-    // value: Object
-       //              Name/value hash for each child widget with a name and value.
-       //              Child widgets without names are not part of the hash.
-       // 
-       //              If there are multiple child widgets w/the same name, value is an array,
-       //              unless they are radio buttons in which case value is a scalar (since only
-       //              one radio button can be checked at a time).
-       //
-       //              If a child widget's name is a dot separated list (like a.b.c.d), it's a nested structure.
-       //
-       //              Example:
-       //      |       { name: "John Smith", interests: ["sports", "movies"] }
-=====*/
-
-       //      TODO:
-       //      * Repeater
-       //      * better handling for arrays.  Often form elements have names with [] like
-       //      * people[3].sex (for a list of people [{name: Bill, sex: M}, ...])
-       //
-       //
-
-               reset: function(){
-                       dojo.forEach(this.getDescendants(), function(widget){
-                               if(widget.reset){
-                                       widget.reset();
-                               }
-                       });
-               },
-
-               validate: function(){
-                       // summary:
-                       //              returns if the form is valid - same as isValid - but
-                       //                      provides a few additional (ui-specific) features.
-                       //                      1 - it will highlight any sub-widgets that are not
-                       //                              valid
-                       //                      2 - it will call focus() on the first invalid
-                       //                              sub-widget
-                       var didFocus = false;
-                       return dojo.every(dojo.map(this.getDescendants(), function(widget){
-                               // Need to set this so that "required" widgets get their
-                               // state set.
-                               widget._hasBeenBlurred = true;
-                               var valid = widget.disabled || !widget.validate || widget.validate();
-                               if(!valid && !didFocus){
-                                       // Set focus of the first non-valid widget
-                                       dojo.window.scrollIntoView(widget.containerNode || widget.domNode);
-                                       widget.focus();
-                                       didFocus = true;
-                               }
-                               return valid;
-                       }), function(item){ return item; });
-               },
-
-               setValues: function(val){
-                       dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.", "", "2.0");
-                       return this.set('value', val);
-               },
-               _setValueAttr: function(/*object*/obj){
-                       // summary:
-                       //              Fill in form values from according to an Object (in the format returned by attr('value'))
-
-                       // generate map from name --> [list of widgets with that name]
-                       var map = { };
-                       dojo.forEach(this.getDescendants(), function(widget){
-                               if(!widget.name){ return; }
-                               var entry = map[widget.name] || (map[widget.name] = [] );
-                               entry.push(widget);
-                       });
-
-                       for(var name in map){
-                               if(!map.hasOwnProperty(name)){
-                                       continue;
-                               }
-                               var widgets = map[name],                                                // array of widgets w/this name
-                                       values = dojo.getObject(name, false, obj);      // list of values for those widgets
-
-                               if(values === undefined){
-                                       continue;
-                               }
-                               if(!dojo.isArray(values)){
-                                       values = [ values ];
-                               }
-                               if(typeof widgets[0].checked == 'boolean'){
-                                       // for checkbox/radio, values is a list of which widgets should be checked
-                                       dojo.forEach(widgets, function(w, i){
-                                               w.set('value', dojo.indexOf(values, w.value) != -1);
-                                       });
-                               }else if(widgets[0].multiple){
-                                       // it takes an array (e.g. multi-select)
-                                       widgets[0].set('value', values);
-                               }else{
-                                       // otherwise, values is a list of values to be assigned sequentially to each widget
-                                       dojo.forEach(widgets, function(w, i){
-                                               w.set('value', values[i]);
-                                       });
-                               }
-                       }
-
-                       /***
-                        *      TODO: code for plain input boxes (this shouldn't run for inputs that are part of widgets)
-
-                       dojo.forEach(this.containerNode.elements, function(element){
-                               if(element.name == ''){return}; // like "continue"
-                               var namePath = element.name.split(".");
-                               var myObj=obj;
-                               var name=namePath[namePath.length-1];
-                               for(var j=1,len2=namePath.length;j<len2;++j){
-                                       var p=namePath[j - 1];
-                                       // repeater support block
-                                       var nameA=p.split("[");
-                                       if(nameA.length > 1){
-                                               if(typeof(myObj[nameA[0]]) == "undefined"){
-                                                       myObj[nameA[0]]=[ ];
-                                               } // if
-
-                                               nameIndex=parseInt(nameA[1]);
-                                               if(typeof(myObj[nameA[0]][nameIndex]) == "undefined"){
-                                                       myObj[nameA[0]][nameIndex] = { };
-                                               }
-                                               myObj=myObj[nameA[0]][nameIndex];
-                                               continue;
-                                       } // repeater support ends
-
-                                       if(typeof(myObj[p]) == "undefined"){
-                                               myObj=undefined;
-                                               break;
-                                       };
-                                       myObj=myObj[p];
-                               }
-
-                               if(typeof(myObj) == "undefined"){
-                                       return;         // like "continue"
-                               }
-                               if(typeof(myObj[name]) == "undefined" && this.ignoreNullValues){
-                                       return;         // like "continue"
-                               }
-
-                               // TODO: widget values (just call attr('value', ...) on the widget)
-
-                               // TODO: maybe should call dojo.getNodeProp() instead
-                               switch(element.type){
-                                       case "checkbox":
-                                               element.checked = (name in myObj) &&
-                                                       dojo.some(myObj[name], function(val){ return val == element.value; });
-                                               break;
-                                       case "radio":
-                                               element.checked = (name in myObj) && myObj[name] == element.value;
-                                               break;
-                                       case "select-multiple":
-                                               element.selectedIndex=-1;
-                                               dojo.forEach(element.options, function(option){
-                                                       option.selected = dojo.some(myObj[name], function(val){ return option.value == val; });
-                                               });
-                                               break;
-                                       case "select-one":
-                                               element.selectedIndex="0";
-                                               dojo.forEach(element.options, function(option){
-                                                       option.selected = option.value == myObj[name];
-                                               });
-                                               break;
-                                       case "hidden":
-                                       case "text":
-                                       case "textarea":
-                                       case "password":
-                                               element.value = myObj[name] || "";
-                                               break;
-                               }
-                       });
-                       */
-               },
-
-               getValues: function(){
-                       dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.", "", "2.0");
-                       return this.get('value');
-               },
-               _getValueAttr: function(){
-                       // summary:
-                       //              Returns Object representing form values.
-                       // description:
-                       //              Returns name/value hash for each form element.
-                       //              If there are multiple elements w/the same name, value is an array,
-                       //              unless they are radio buttons in which case value is a scalar since only
-                       //              one can be checked at a time.
-                       //
-                       //              If the name is a dot separated list (like a.b.c.d), creates a nested structure.
-                       //              Only works on widget form elements.
-                       // example:
-                       //              | { name: "John Smith", interests: ["sports", "movies"] }
-
-                       // get widget values
-                       var obj = { };
-                       dojo.forEach(this.getDescendants(), function(widget){
-                               var name = widget.name;
-                               if(!name || widget.disabled){ return; }
-
-                               // Single value widget (checkbox, radio, or plain <input> type widget
-                               var value = widget.get('value');
-
-                               // Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays
-                               if(typeof widget.checked == 'boolean'){
-                                       if(/Radio/.test(widget.declaredClass)){
-                                               // radio button
-                                               if(value !== false){
-                                                       dojo.setObject(name, value, obj);
-                                               }else{
-                                                       // give radio widgets a default of null
-                                                       value = dojo.getObject(name, false, obj);
-                                                       if(value === undefined){
-                                                               dojo.setObject(name, null, obj);
-                                                       }
-                                               }
-                                       }else{
-                                               // checkbox/toggle button
-                                               var ary=dojo.getObject(name, false, obj);
-                                               if(!ary){
-                                                       ary=[];
-                                                       dojo.setObject(name, ary, obj);
-                                               }
-                                               if(value !== false){
-                                                       ary.push(value);
-                                               }
-                                       }
-                               }else{
-                                       var prev=dojo.getObject(name, false, obj);
-                                       if(typeof prev != "undefined"){
-                                               if(dojo.isArray(prev)){
-                                                       prev.push(value);
-                                               }else{
-                                                       dojo.setObject(name, [prev, value], obj);
-                                               }
-                                       }else{
-                                               // unique name
-                                               dojo.setObject(name, value, obj);
-                                       }
-                               }
-                       });
-
-                       /***
-                        * code for plain input boxes (see also dojo.formToObject, can we use that instead of this code?
-                        * but it doesn't understand [] notation, presumably)
-                       var obj = { };
-                       dojo.forEach(this.containerNode.elements, function(elm){
-                               if(!elm.name)   {
-                                       return;         // like "continue"
-                               }
-                               var namePath = elm.name.split(".");
-                               var myObj=obj;
-                               var name=namePath[namePath.length-1];
-                               for(var j=1,len2=namePath.length;j<len2;++j){
-                                       var nameIndex = null;
-                                       var p=namePath[j - 1];
-                                       var nameA=p.split("[");
-                                       if(nameA.length > 1){
-                                               if(typeof(myObj[nameA[0]]) == "undefined"){
-                                                       myObj[nameA[0]]=[ ];
-                                               } // if
-                                               nameIndex=parseInt(nameA[1]);
-                                               if(typeof(myObj[nameA[0]][nameIndex]) == "undefined"){
-                                                       myObj[nameA[0]][nameIndex] = { };
-                                               }
-                                       } else if(typeof(myObj[nameA[0]]) == "undefined"){
-                                               myObj[nameA[0]] = { }
-                                       } // if
-
-                                       if(nameA.length == 1){
-                                               myObj=myObj[nameA[0]];
-                                       } else{
-                                               myObj=myObj[nameA[0]][nameIndex];
-                                       } // if
-                               } // for
-
-                               if((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type == "radio" && elm.checked)){
-                                       if(name == name.split("[")[0]){
-                                               myObj[name]=elm.value;
-                                       } else{
-                                               // can not set value when there is no name
-                                       }
-                               } else if(elm.type == "checkbox" && elm.checked){
-                                       if(typeof(myObj[name]) == 'undefined'){
-                                               myObj[name]=[ ];
-                                       }
-                                       myObj[name].push(elm.value);
-                               } else if(elm.type == "select-multiple"){
-                                       if(typeof(myObj[name]) == 'undefined'){
-                                               myObj[name]=[ ];
-                                       }
-                                       for(var jdx=0,len3=elm.options.length; jdx<len3; ++jdx){
-                                               if(elm.options[jdx].selected){
-                                                       myObj[name].push(elm.options[jdx].value);
-                                               }
-                                       }
-                               } // if
-                               name=undefined;
-                       }); // forEach
-                       ***/
-                       return obj;
-               },
-
-               // TODO: ComboBox might need time to process a recently input value.  This should be async?
-               isValid: function(){
-                       // summary:
-                       //              Returns true if all of the widgets are valid
-
-                       // This also populate this._invalidWidgets[] array with list of invalid widgets...
-                       // TODO: put that into separate function?   It's confusing to have that as a side effect
-                       // of a method named isValid().
-
-                       this._invalidWidgets = dojo.filter(this.getDescendants(), function(widget){
-                               return !widget.disabled && widget.isValid && !widget.isValid();
-                       });
-                       return !this._invalidWidgets.length;
-               },
-
-
-               onValidStateChange: function(isValid){
-                       // summary:
-                       //              Stub function to connect to if you want to do something
-                       //              (like disable/enable a submit button) when the valid
-                       //              state changes on the form as a whole.
-               },
-
-               _widgetChange: function(widget){
-                       // summary:
-                       //              Connected to a widget's onChange function - update our
-                       //              valid state, if needed.
-                       var isValid = this._lastValidState;
-                       if(!widget || this._lastValidState === undefined){
-                               // We have passed a null widget, or we haven't been validated
-                               // yet - let's re-check all our children
-                               // This happens when we connect (or reconnect) our children
-                               isValid = this.isValid();
-                               if(this._lastValidState === undefined){
-                                       // Set this so that we don't fire an onValidStateChange
-                                       // the first time
-                                       this._lastValidState = isValid;
-                               }
-                       }else if(widget.isValid){
-                               this._invalidWidgets = dojo.filter(this._invalidWidgets || [], function(w){
-                                       return (w != widget);
-                               }, this);
-                               if(!widget.isValid() && !widget.get("disabled")){
-                                       this._invalidWidgets.push(widget);
-                               }
-                               isValid = (this._invalidWidgets.length === 0);
-                       }
-                       if(isValid !== this._lastValidState){
-                               this._lastValidState = isValid;
-                               this.onValidStateChange(isValid);
-                       }
-               },
-
-               connectChildren: function(){
-                       // summary:
-                       //              Connects to the onChange function of all children to
-                       //              track valid state changes.  You can call this function
-                       //              directly, ex. in the event that you programmatically
-                       //              add a widget to the form *after* the form has been
-                       //              initialized.
-                       dojo.forEach(this._changeConnections, dojo.hitch(this, "disconnect"));
-                       var _this = this;
-
-                       // we connect to validate - so that it better reflects the states
-                       // of the widgets - also, we only connect if it has a validate
-                       // function (to avoid too many unneeded connections)
-                       var conns = (this._changeConnections = []);
-                       dojo.forEach(dojo.filter(this.getDescendants(),
-                               function(item){ return item.validate; }
-                       ),
-                       function(widget){
-                               // We are interested in whenever the widget is validated - or
-                               // whenever the disabled attribute on that widget is changed
-                               conns.push(_this.connect(widget, "validate",
-                                                                       dojo.hitch(_this, "_widgetChange", widget)));
-                               conns.push(_this.connect(widget, "_setDisabledAttr",
-                                                                       dojo.hitch(_this, "_widgetChange", widget)));
-                       });
-
-                       // Call the widget change function to update the valid state, in
-                       // case something is different now.
-                       this._widgetChange(null);
-               },
-
-               startup: function(){
-                       this.inherited(arguments);
-                       // Initialize our valid state tracking.  Needs to be done in startup
-                       // because it's not guaranteed that our children are initialized
-                       // yet.
-                       this._changeConnections = [];
-                       this.connectChildren();
-               }
-       });
-
-}
-
-if(!dojo._hasResource["dijit._DialogMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._DialogMixin"] = true;
-dojo.provide("dijit._DialogMixin");
-
-
-
-dojo.declare("dijit._DialogMixin", null,
-       {
-               // summary:
-               //              This provides functions useful to Dialog and TooltipDialog
-
-               attributeMap: dijit._Widget.prototype.attributeMap,
-
-               execute: function(/*Object*/ formContents){
-                       // summary:
-                       //              Callback when the user hits the submit button.
-                       //              Override this method to handle Dialog execution.
-                       // description:
-                       //              After the user has pressed the submit button, the Dialog
-                       //              first calls onExecute() to notify the container to hide the
-                       //              dialog and restore focus to wherever it used to be.
-                       //
-                       //              *Then* this method is called.
-                       // type:
-                       //              callback
-               },
-
-               onCancel: function(){
-                       // summary:
-                       //          Called when user has pressed the Dialog's cancel button, to notify container.
-                       // description:
-                       //          Developer shouldn't override or connect to this method;
-                       //              it's a private communication device between the TooltipDialog
-                       //              and the thing that opened it (ex: `dijit.form.DropDownButton`)
-                       // type:
-                       //              protected
-               },
-
-               onExecute: function(){
-                       // summary:
-                       //          Called when user has pressed the dialog's OK button, to notify container.
-                       // description:
-                       //          Developer shouldn't override or connect to this method;
-                       //              it's a private communication device between the TooltipDialog
-                       //              and the thing that opened it (ex: `dijit.form.DropDownButton`)
-                       // type:
-                       //              protected
-               },
-
-               _onSubmit: function(){
-                       // summary:
-                       //              Callback when user hits submit button
-                       // type:
-                       //              protected
-                       this.onExecute();       // notify container that we are about to execute
-                       this.execute(this.get('value'));
-               },
-
-               _getFocusItems: function(/*Node*/ dialogNode){
-                       // summary:
-                       //              Find focusable Items each time a dialog is opened,
-                       //              setting _firstFocusItem and _lastFocusItem
-                       // tags:
-                       //              protected
-
-                       var elems = dijit._getTabNavigable(dojo.byId(dialogNode));
-                       this._firstFocusItem = elems.lowest || elems.first || dialogNode;
-                       this._lastFocusItem = elems.last || elems.highest || this._firstFocusItem;
-                       if(dojo.isMoz && this._firstFocusItem.tagName.toLowerCase() == "input" &&
-                                       dojo.getNodeProp(this._firstFocusItem, "type").toLowerCase() == "file"){
-                               // FF doesn't behave well when first element is input type=file, set first focusable to dialog container
-                               dojo.attr(dialogNode, "tabIndex", "0");
-                               this._firstFocusItem = dialogNode;
-                       }
-               }
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.DialogUnderlay"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.DialogUnderlay"] = true;
-dojo.provide("dijit.DialogUnderlay");
-
-
-
-
-
-
-dojo.declare(
-       "dijit.DialogUnderlay",
-       [dijit._Widget, dijit._Templated],
-       {
-               // summary:
-               //              The component that blocks the screen behind a `dijit.Dialog`
-               //
-               // description:
-               //              A component used to block input behind a `dijit.Dialog`. Only a single
-               //              instance of this widget is created by `dijit.Dialog`, and saved as
-               //              a reference to be shared between all Dialogs as `dijit._underlay`
-               //
-               //              The underlay itself can be styled based on and id:
-               //      |       #myDialog_underlay { background-color:red; }
-               //
-               //              In the case of `dijit.Dialog`, this id is based on the id of the Dialog,
-               //              suffixed with _underlay.
-
-               // Template has two divs; outer div is used for fade-in/fade-out, and also to hold background iframe.
-               // Inner div has opacity specified in CSS file.
-               templateString: "<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",
-
-               // Parameters on creation or updatable later
-
-               // dialogId: String
-               //              Id of the dialog.... DialogUnderlay's id is based on this id
-               dialogId: "",
-
-               // class: String
-               //              This class name is used on the DialogUnderlay node, in addition to dijitDialogUnderlay
-               "class": "",
-
-               attributeMap: { id: "domNode" },
-
-               _setDialogIdAttr: function(id){
-                       dojo.attr(this.node, "id", id + "_underlay");
-               },
-
-               _setClassAttr: function(clazz){
-                       this.node.className = "dijitDialogUnderlay " + clazz;
-               },
-
-               postCreate: function(){
-                       // summary:
-                       //              Append the underlay to the body
-                       dojo.body().appendChild(this.domNode);
-               },
-
-               layout: function(){
-                       // summary:
-                       //              Sets the background to the size of the viewport
-                       //
-                       // description:
-                       //              Sets the background to the size of the viewport (rather than the size
-                       //              of the document) since we need to cover the whole browser window, even
-                       //              if the document is only a few lines long.
-                       // tags:
-                       //              private
-
-                       var is = this.node.style,
-                               os = this.domNode.style;
-
-                       // hide the background temporarily, so that the background itself isn't
-                       // causing scrollbars to appear (might happen when user shrinks browser
-                       // window and then we are called to resize)
-                       os.display = "none";
-
-                       // then resize and show
-                       var viewport = dojo.window.getBox();
-                       os.top = viewport.t + "px";
-                       os.left = viewport.l + "px";
-                       is.width = viewport.w + "px";
-                       is.height = viewport.h + "px";
-                       os.display = "block";
-               },
-
-               show: function(){
-                       // summary:
-                       //              Show the dialog underlay
-                       this.domNode.style.display = "block";
-                       this.layout();
-                       this.bgIframe = new dijit.BackgroundIframe(this.domNode);
-               },
-
-               hide: function(){
-                       // summary:
-                       //              Hides the dialog underlay
-                       this.bgIframe.destroy();
-                       this.domNode.style.display = "none";
-               },
-
-               uninitialize: function(){
-                       if(this.bgIframe){
-                               this.bgIframe.destroy();
-                       }
-                       this.inherited(arguments);
-               }
-       }
-);
-
-}
-
-if(!dojo._hasResource["dojo.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.html"] = true;
-dojo.provide("dojo.html");
-
-// the parser might be needed..
-
-(function(){ // private scope, sort of a namespace
-
-       // idCounter is incremented with each instantiation to allow asignment of a unique id for tracking, logging purposes
-       var idCounter = 0, 
-               d = dojo;
-       
-       dojo.html._secureForInnerHtml = function(/*String*/ cont){
-               // summary:
-               //              removes !DOCTYPE and title elements from the html string.
-               // 
-               //              khtml is picky about dom faults, you can't attach a style or <title> node as child of body
-               //              must go into head, so we need to cut out those tags
-               //      cont:
-               //              An html string for insertion into the dom
-               //      
-               return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig, ""); // String
-       };
-
-/*====
-       dojo.html._emptyNode = function(node){
-               // summary:
-               //              removes all child nodes from the given node
-               //      node: DOMNode
-               //              the parent element
-       };
-=====*/
-       dojo.html._emptyNode = dojo.empty;
-
-       dojo.html._setNodeContent = function(/* DomNode */ node, /* String|DomNode|NodeList */ cont){
-               // summary:
-               //              inserts the given content into the given node
-               //      node:
-               //              the parent element
-               //      content:
-               //              the content to be set on the parent element. 
-               //              This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes
-               
-               // always empty
-               d.empty(node);
-
-               if(cont) {
-                       if(typeof cont == "string") {
-                               cont = d._toDom(cont, node.ownerDocument);
-                       }
-                       if(!cont.nodeType && d.isArrayLike(cont)) {
-                               // handle as enumerable, but it may shrink as we enumerate it
-                               for(var startlen=cont.length, i=0; i<cont.length; i=startlen==cont.length ? i+1 : 0) {
-                                       d.place( cont[i], node, "last");
-                               }
-                       } else {
-                               // pass nodes, documentFragments and unknowns through to dojo.place
-                               d.place(cont, node, "last");
-                       }
-               }
-
-               // return DomNode
-               return node;
-       };
-
-       // we wrap up the content-setting operation in a object
-       dojo.declare("dojo.html._ContentSetter", null, 
-               {
-                       // node: DomNode|String
-                       //              An node which will be the parent element that we set content into
-                       node: "",
-
-                       // content: String|DomNode|DomNode[]
-                       //              The content to be placed in the node. Can be an HTML string, a node reference, or a enumerable list of nodes
-                       content: "",
-                       
-                       // id: String?
-                       //              Usually only used internally, and auto-generated with each instance 
-                       id: "",
-
-                       // cleanContent: Boolean
-                       //              Should the content be treated as a full html document, 
-                       //              and the real content stripped of <html>, <body> wrapper before injection
-                       cleanContent: false,
-                       
-                       // extractContent: Boolean
-                       //              Should the content be treated as a full html document, and the real content stripped of <html>, <body> wrapper before injection
-                       extractContent: false,
-
-                       // parseContent: Boolean
-                       //              Should the node by passed to the parser after the new content is set
-                       parseContent: false,
-                       
-                       // lifecyle methods
-                       constructor: function(/* Object */params, /* String|DomNode */node){
-                               //      summary:
-                               //              Provides a configurable, extensible object to wrap the setting on content on a node
-                               //              call the set() method to actually set the content..
-                               // the original params are mixed directly into the instance "this"
-                               dojo.mixin(this, params || {});
-
-                               // give precedence to params.node vs. the node argument
-                               // and ensure its a node, not an id string
-                               node = this.node = dojo.byId( this.node || node );
-       
-                               if(!this.id){
-                                       this.id = [
-                                               "Setter",
-                                               (node) ? node.id || node.tagName : "", 
-                                               idCounter++
-                                       ].join("_");
-                               }
-                       },
-                       set: function(/* String|DomNode|NodeList? */ cont, /* Object? */ params){
-                               // summary:
-                               //              front-end to the set-content sequence 
-                               //      cont:
-                               //              An html string, node or enumerable list of nodes for insertion into the dom
-                               //              If not provided, the object's content property will be used
-                               if(undefined !== cont){
-                                       this.content = cont;
-                               }
-                               // in the re-use scenario, set needs to be able to mixin new configuration
-                               if(params){
-                                       this._mixin(params);
-                               }
-
-                               this.onBegin();
-                               this.setContent();
-                               this.onEnd();
-
-                               return this.node;
-                       },
-                       setContent: function(){
-                               // summary:
-                               //              sets the content on the node 
-
-                               var node = this.node; 
-                               if(!node) {
-                                   // can't proceed
-                                       throw new Error(this.declaredClass + ": setContent given no node");
-                               }
-                               try{
-                                       node = dojo.html._setNodeContent(node, this.content);
-                               }catch(e){
-                                       // check if a domfault occurs when we are appending this.errorMessage
-                                       // like for instance if domNode is a UL and we try append a DIV
-       
-                                       // FIXME: need to allow the user to provide a content error message string
-                                       var errMess = this.onContentError(e); 
-                                       try{
-                                               node.innerHTML = errMess;
-                                       }catch(e){
-                                               console.error('Fatal ' + this.declaredClass + '.setContent could not change content due to '+e.message, e);
-                                       }
-                               }
-                               // always put back the node for the next method
-                               this.node = node; // DomNode
-                       },
-                       
-                       empty: function() {
-                               // summary
-                               //      cleanly empty out existing content
-
-                               // destroy any widgets from a previous run
-                               // NOTE: if you dont want this you'll need to empty 
-                               // the parseResults array property yourself to avoid bad things happenning
-                               if(this.parseResults && this.parseResults.length) {
-                                       dojo.forEach(this.parseResults, function(w) {
-                                               if(w.destroy){
-                                                       w.destroy();
-                                               }
-                                       });
-                                       delete this.parseResults;
-                               }
-                               // this is fast, but if you know its already empty or safe, you could 
-                               // override empty to skip this step
-                               dojo.html._emptyNode(this.node);
-                       },
-       
-                       onBegin: function(){
-                               // summary
-                               //              Called after instantiation, but before set(); 
-                               //              It allows modification of any of the object properties 
-                               //              - including the node and content provided - before the set operation actually takes place
-                               //              This default implementation checks for cleanContent and extractContent flags to 
-                               //              optionally pre-process html string content
-                               var cont = this.content;
-       
-                               if(dojo.isString(cont)){
-                                       if(this.cleanContent){
-                                               cont = dojo.html._secureForInnerHtml(cont);
-                                       }
-  
-                                       if(this.extractContent){
-                                               var match = cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-                                               if(match){ cont = match[1]; }
-                                       }
-                               }
-
-                               // clean out the node and any cruft associated with it - like widgets
-                               this.empty();
-                               
-                               this.content = cont;
-                               return this.node; /* DomNode */
-                       },
-       
-                       onEnd: function(){
-                               // summary
-                               //              Called after set(), when the new content has been pushed into the node
-                               //              It provides an opportunity for post-processing before handing back the node to the caller
-                               //              This default implementation checks a parseContent flag to optionally run the dojo parser over the new content
-                               if(this.parseContent){
-                                       // populates this.parseResults if you need those..
-                                       this._parse();
-                               }
-                               return this.node; /* DomNode */
-                       },
-       
-                       tearDown: function(){
-                               // summary
-                               //              manually reset the Setter instance if its being re-used for example for another set()
-                               // description
-                               //              tearDown() is not called automatically. 
-                               //              In normal use, the Setter instance properties are simply allowed to fall out of scope
-                               //              but the tearDown method can be called to explicitly reset this instance.
-                               delete this.parseResults; 
-                               delete this.node; 
-                               delete this.content; 
-                       },
-  
-                       onContentError: function(err){
-                               return "Error occured setting content: " + err; 
-                       },
-                       
-                       _mixin: function(params){
-                               // mix properties/methods into the instance
-                               // TODO: the intention with tearDown is to put the Setter's state 
-                               // back to that of the original constructor (vs. deleting/resetting everything regardless of ctor params)
-                               // so we could do something here to move the original properties aside for later restoration
-                               var empty = {}, key;
-                               for(key in params){
-                                       if(key in empty){ continue; }
-                                       // TODO: here's our opportunity to mask the properties we dont consider configurable/overridable
-                                       // .. but history shows we'll almost always guess wrong
-                                       this[key] = params[key]; 
-                               }
-                       },
-                       _parse: function(){
-                               // summary: 
-                               //              runs the dojo parser over the node contents, storing any results in this.parseResults
-                               //              Any errors resulting from parsing are passed to _onError for handling
-
-                               var rootNode = this.node;
-                               try{
-                                       // store the results (widgets, whatever) for potential retrieval
-                                       this.parseResults = dojo.parser.parse({
-                                               rootNode: rootNode,
-                                               dir: this.dir,
-                                               lang: this.lang
-                                       });
-                               }catch(e){
-                                       this._onError('Content', e, "Error parsing in _ContentSetter#"+this.id);
-                               }
-                       },
-  
-                       _onError: function(type, err, consoleText){
-                               // summary:
-                               //              shows user the string that is returned by on[type]Error
-                               //              overide/implement on[type]Error and return your own string to customize
-                               var errText = this['on' + type + 'Error'].call(this, err);
-                               if(consoleText){
-                                       console.error(consoleText, err);
-                               }else if(errText){ // a empty string won't change current content
-                                       dojo.html._setNodeContent(this.node, errText, true);
-                               }
-                       }
-       }); // end dojo.declare()
-
-       dojo.html.set = function(/* DomNode */ node, /* String|DomNode|NodeList */ cont, /* Object? */ params){
-                       // summary:
-                       //              inserts (replaces) the given content into the given node. dojo.place(cont, node, "only")
-                       //              may be a better choice for simple HTML insertion.
-                       // description:
-                       //              Unless you need to use the params capabilities of this method, you should use
-                       //              dojo.place(cont, node, "only"). dojo.place() has more robust support for injecting
-                       //              an HTML string into the DOM, but it only handles inserting an HTML string as DOM
-                       //              elements, or inserting a DOM node. dojo.place does not handle NodeList insertions
-                       //              or the other capabilities as defined by the params object for this method.
-                       //      node:
-                       //              the parent element that will receive the content
-                       //      cont:
-                       //              the content to be set on the parent element. 
-                       //              This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes
-                       //      params: 
-                       //              Optional flags/properties to configure the content-setting. See dojo.html._ContentSetter
-                       //      example:
-                       //              A safe string/node/nodelist content replacement/injection with hooks for extension
-                       //              Example Usage: 
-                       //              dojo.html.set(node, "some string"); 
-                       //              dojo.html.set(node, contentNode, {options}); 
-                       //              dojo.html.set(node, myNode.childNodes, {options}); 
-               if(undefined == cont){
-                       console.warn("dojo.html.set: no cont argument provided, using empty string");
-                       cont = "";
-               }       
-               if(!params){
-                       // simple and fast
-                       return dojo.html._setNodeContent(node, cont, true);
-               }else{ 
-                       // more options but slower
-                       // note the arguments are reversed in order, to match the convention for instantiation via the parser
-                       var op = new dojo.html._ContentSetter(dojo.mixin( 
-                                       params, 
-                                       { content: cont, node: node } 
-                       ));
-                       return op.set();
-               }
-       };
-})();
-
-}
-
-if(!dojo._hasResource["dijit.layout.ContentPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.ContentPane"] = true;
-dojo.provide("dijit.layout.ContentPane");
-
-
-
-       // for dijit.layout.marginBox2contentBox()
-
-
-
-
-
-
-dojo.declare(
-       "dijit.layout.ContentPane", dijit._Widget,
-{
-       // summary:
-       //              A widget that acts as a container for mixed HTML and widgets, and includes an Ajax interface
-       // description:
-       //              A widget that can be used as a stand alone widget
-       //              or as a base class for other widgets.
-       //
-       //              Handles replacement of document fragment using either external uri or javascript
-       //              generated markup or DOM content, instantiating widgets within that content.
-       //              Don't confuse it with an iframe, it only needs/wants document fragments.
-       //              It's useful as a child of LayoutContainer, SplitContainer, or TabContainer.
-       //              But note that those classes can contain any widget as a child.
-       // example:
-       //              Some quick samples:
-       //              To change the innerHTML use .set('content', '<b>new content</b>')
-       //
-       //              Or you can send it a NodeList, .set('content', dojo.query('div [class=selected]', userSelection))
-       //              please note that the nodes in NodeList will copied, not moved
-       //
-       //              To do a ajax update use .set('href', url)
-
-       // href: String
-       //              The href of the content that displays now.
-       //              Set this at construction if you want to load data externally when the
-       //              pane is shown.  (Set preload=true to load it immediately.)
-       //              Changing href after creation doesn't have any effect; Use set('href', ...);
-       href: "",
-
-/*=====
-       // content: String || DomNode || NodeList || dijit._Widget
-       //              The innerHTML of the ContentPane.
-       //              Note that the initialization parameter / argument to attr("content", ...)
-       //              can be a String, DomNode, Nodelist, or _Widget.
-       content: "",
-=====*/
-
-       // extractContent: Boolean
-       //              Extract visible content from inside of <body> .... </body>.
-       //              I.e., strip <html> and <head> (and it's contents) from the href
-       extractContent: false,
-
-       // parseOnLoad: Boolean
-       //              Parse content and create the widgets, if any.
-       parseOnLoad: true,
-
-       // preventCache: Boolean
-       //              Prevent caching of data from href's by appending a timestamp to the href.
-       preventCache: false,
-
-       // preload: Boolean
-       //              Force load of data on initialization even if pane is hidden.
-       preload: false,
-
-       // refreshOnShow: Boolean
-       //              Refresh (re-download) content when pane goes from hidden to shown
-       refreshOnShow: false,
-
-       // loadingMessage: String
-       //              Message that shows while downloading
-       loadingMessage: "<span class='dijitContentPaneLoading'>${loadingState}</span>",
-
-       // errorMessage: String
-       //              Message that shows if an error occurs
-       errorMessage: "<span class='dijitContentPaneError'>${errorState}</span>",
-
-       // isLoaded: [readonly] Boolean
-       //              True if the ContentPane has data in it, either specified
-       //              during initialization (via href or inline content), or set
-       //              via attr('content', ...) / attr('href', ...)
-       //
-       //              False if it doesn't have any content, or if ContentPane is
-       //              still in the process of downloading href.
-       isLoaded: false,
-
-       baseClass: "dijitContentPane",
-
-       // doLayout: Boolean
-       //              - false - don't adjust size of children
-       //              - true - if there is a single visible child widget, set it's size to
-       //                              however big the ContentPane is
-       doLayout: true,
-
-       // ioArgs: Object
-       //              Parameters to pass to xhrGet() request, for example:
-       // |    <div dojoType="dijit.layout.ContentPane" href="./bar" ioArgs="{timeout: 500}">
-       ioArgs: {},
-
-       // 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,
-
-       // isLayoutContainer: [protected] Boolean
-       //              Indicates that this widget will call resize() on it's child widgets
-       //              when they become visible.
-       isLayoutContainer: true,
-
-       // onLoadDeferred: [readonly] dojo.Deferred
-       //              This is the `dojo.Deferred` returned by attr('href', ...) and refresh().
-       //              Calling onLoadDeferred.addCallback() or addErrback() registers your
-       //              callback to be called only once, when the prior attr('href', ...) call or
-       //              the initial href parameter to the constructor finishes loading.
-       //
-       //              This is different than an onLoad() handler which gets called any time any href is loaded.
-       onLoadDeferred: null,
-
-       // Override _Widget's attributeMap because we don't want the title attribute (used to specify
-       // tab labels) to be copied to ContentPane.domNode... otherwise a tooltip shows up over the
-       // entire pane.
-       attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-               title: []
-       }),
-
-       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);
-
-               // Detect if we were initialized with data
-               if(!this.href && this.srcNodeRef && this.srcNodeRef.innerHTML){
-                       this.isLoaded = true;
-               }
-       },
-
-       buildRendering: function(){
-               // Overrides Widget.buildRendering().
-               // Since we have no template we need to set this.containerNode ourselves.
-               // For subclasses of ContentPane do have a template, does nothing.
-               this.inherited(arguments);
-               if(!this.containerNode){
-                       // make getDescendants() work
-                       this.containerNode = this.domNode;
-               }
-       },
-
-       postCreate: function(){
-               // remove the title attribute so it doesn't show up when hovering
-               // over a node
-               this.domNode.title = "";
-
-               if(!dojo.attr(this.domNode,"role")){
-                       dijit.setWaiRole(this.domNode, "group");
-               }
-
-               dojo.addClass(this.domNode, this.baseClass);
-       },
-
-       startup: function(){
-               // summary:
-               //              See `dijit.layout._LayoutWidget.startup` for description.
-               //              Although ContentPane doesn't extend _LayoutWidget, it does implement
-               //              the same API.
-               if(this._started){ return; }
-
-               var parent = dijit._Contained.prototype.getParent.call(this);
-               this._childOfLayoutWidget = parent && parent.isLayoutContainer;
-
-               // I need to call resize() on my child/children (when I become visible), unless
-               // I'm the child of a layout widget in which case my parent will call resize() on me and I'll do it then.
-               this._needLayout = !this._childOfLayoutWidget;
-
-               if(this.isLoaded){
-                       dojo.forEach(this.getChildren(), function(child){
-                               child.startup();
-                       });
-               }
-
-               if(this._isShown() || this.preload){
-                       this._onShow();
-               }
-
-               this.inherited(arguments);
-       },
-
-       _checkIfSingleChild: function(){
-               // summary:
-               //              Test if we have exactly one visible widget as a child,
-               //              and if so assume that we are a container for that widget,
-               //              and should propogate startup() and resize() calls to it.
-               //              Skips over things like data stores since they aren't visible.
-
-               var childNodes = dojo.query("> *", this.containerNode).filter(function(node){
-                               return node.tagName !== "SCRIPT"; // or a regexp for hidden elements like script|area|map|etc..
-                       }),
-                       childWidgetNodes = childNodes.filter(function(node){
-                               return dojo.hasAttr(node, "dojoType") || dojo.hasAttr(node, "widgetId");
-                       }),
-                       candidateWidgets = dojo.filter(childWidgetNodes.map(dijit.byNode), function(widget){
-                               return widget && widget.domNode && widget.resize;
-                       });
-
-               if(
-                       // all child nodes are widgets
-                       childNodes.length == childWidgetNodes.length &&
-
-                       // all but one are invisible (like dojo.data)
-                       candidateWidgets.length == 1
-               ){
-                       this._singleChild = candidateWidgets[0];
-               }else{
-                       delete this._singleChild;
-               }
-
-               // So we can set overflow: hidden to avoid a safari bug w/scrollbars showing up (#9449)
-               dojo.toggleClass(this.containerNode, this.baseClass + "SingleChild", !!this._singleChild);
-       },
-
-       setHref: function(/*String|Uri*/ href){
-               // summary:
-               //              Deprecated.   Use set('href', ...) instead.
-               dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.", "", "2.0");
-               return this.set("href", href);
-       },
-       _setHrefAttr: function(/*String|Uri*/ href){
-               // summary:
-               //              Hook so attr("href", ...) works.
-               // description:
-               //              Reset the (external defined) content of this pane and replace with new url
-               //              Note: It delays the download until widget is shown if preload is false.
-               //      href:
-               //              url to the page you want to get, must be within the same domain as your mainpage
-
-               // Cancel any in-flight requests (an attr('href') will cancel any in-flight attr('href', ...))
-               this.cancel();
-
-               this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
-
-               this.href = href;
-
-               // _setHrefAttr() is called during creation and by the user, after creation.
-               // only in the second case do we actually load the URL; otherwise it's done in startup()
-               if(this._created && (this.preload || this._isShown())){
-                       this._load();
-               }else{
-                       // Set flag to indicate that href needs to be loaded the next time the
-                       // ContentPane is made visible
-                       this._hrefChanged = true;
-               }
-
-               return this.onLoadDeferred;             // dojo.Deferred
-       },
-
-       setContent: function(/*String|DomNode|Nodelist*/data){
-               // summary:
-               //              Deprecated.   Use set('content', ...) instead.
-               dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated.  Use set('content', ...) instead.", "", "2.0");
-               this.set("content", data);
-       },
-       _setContentAttr: function(/*String|DomNode|Nodelist*/data){
-               // summary:
-               //              Hook to make attr("content", ...) work.
-               //              Replaces old content with data content, include style classes from old content
-               //      data:
-               //              the new Content may be String, DomNode or NodeList
-               //
-               //              if data is a NodeList (or an array of nodes) nodes are copied
-               //              so you can import nodes from another document implicitly
-
-               // clear href so we can't run refresh and clear content
-               // refresh should only work if we downloaded the content
-               this.href = "";
-
-               // Cancel any in-flight requests (an attr('content') will cancel any in-flight attr('href', ...))
-               this.cancel();
-
-               // Even though user is just setting content directly, still need to define an onLoadDeferred
-               // because the _onLoadHandler() handler is still getting called from setContent()
-               this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
-
-               this._setContent(data || "");
-
-               this._isDownloaded = false; // mark that content is from a attr('content') not an attr('href')
-
-               return this.onLoadDeferred;     // dojo.Deferred
-       },
-       _getContentAttr: function(){
-               // summary:
-               //              Hook to make attr("content") work
-               return this.containerNode.innerHTML;
-       },
-
-       cancel: function(){
-               // summary:
-               //              Cancels an in-flight download of content
-               if(this._xhrDfd && (this._xhrDfd.fired == -1)){
-                       this._xhrDfd.cancel();
-               }
-               delete this._xhrDfd; // garbage collect
-
-               this.onLoadDeferred = null;
-       },
-
-       uninitialize: function(){
-               if(this._beingDestroyed){
-                       this.cancel();
-               }
-               this.inherited(arguments);
-       },
-
-       destroyRecursive: function(/*Boolean*/ preserveDom){
-               // summary:
-               //              Destroy the ContentPane and its contents
-
-               // if we have multiple controllers destroying us, bail after the first
-               if(this._beingDestroyed){
-                       return;
-               }
-               this.inherited(arguments);
-       },
-
-       resize: function(changeSize, resultSize){
-               // summary:
-               //              See `dijit.layout._LayoutWidget.resize` for description.
-               //              Although ContentPane doesn't extend _LayoutWidget, it does implement
-               //              the same API.
-
-               // For the TabContainer --> BorderContainer --> ContentPane case, _onShow() is
-               // never called, so resize() is our trigger to do the initial href download.
-               if(!this._wasShown){
-                       this._onShow();
-               }
-
-               this._resizeCalled = true;
-
-               // Set margin box size, unless it wasn't specified, in which case use current size.
-               if(changeSize){
-                       dojo.marginBox(this.domNode, changeSize);
-               }
-
-               // Compute content box size of containerNode in case we [later] need to size our single child.
-               var cn = this.containerNode;
-               if(cn === this.domNode){
-                       // If changeSize or resultSize was passed to this method and this.containerNode ==
-                       // this.domNode then we can compute the content-box size without querying the node,
-                       // which is more reliable (similar to LayoutWidget.resize) (see for example #9449).
-                       var mb = resultSize || {};
-                       dojo.mixin(mb, changeSize || {}); // changeSize overrides resultSize
-                       if(!("h" in mb) || !("w" in mb)){
-                               mb = dojo.mixin(dojo.marginBox(cn), mb); // just use dojo.marginBox() to fill in missing values
-                       }
-                       this._contentBox = dijit.layout.marginBox2contentBox(cn, mb);
-               }else{
-                       this._contentBox = dojo.contentBox(cn);
-               }
-
-               // Make my children layout, or size my single child widget
-               this._layoutChildren();
-       },
-
-       _isShown: function(){
-               // summary:
-               //              Returns true if the content is currently shown.
-               // description:
-               //              If I am a child of a layout widget then it actually returns true if I've ever been visible,
-               //              not whether I'm currently visible, since that's much faster than tracing up the DOM/widget
-               //              tree every call, and at least solves the performance problem on page load by deferring loading
-               //              hidden ContentPanes until they are first shown
-
-               if(this._childOfLayoutWidget){
-                       // If we are TitlePane, etc - we return that only *IF* we've been resized
-                       if(this._resizeCalled && "open" in this){
-                               return this.open;
-                       }
-                       return this._resizeCalled;
-               }else if("open" in this){
-                       return this.open;               // for TitlePane, etc.
-               }else{
-                       // TODO: with _childOfLayoutWidget check maybe this branch no longer necessary?
-                       var node = this.domNode;
-                       return (node.style.display != 'none') && (node.style.visibility != 'hidden') && !dojo.hasClass(node, "dijitHidden");
-               }
-       },
-
-       _onShow: function(){
-               // summary:
-               //              Called when the ContentPane is made visible
-               // description:
-               //              For a plain ContentPane, this is called on initialization, from startup().
-               //              If the ContentPane is a hidden pane of a TabContainer etc., then it's
-               //              called whenever the pane is made visible.
-               //
-               //              Does necessary processing, including href download and layout/resize of
-               //              child widget(s)
-
-               if(this.href){
-                       if(!this._xhrDfd && // if there's an href that isn't already being loaded
-                               (!this.isLoaded || this._hrefChanged || this.refreshOnShow)
-                       ){
-                               this.refresh();
-                       }
-               }else{
-                       // If we are the child of a layout widget then the layout widget will call resize() on
-                       // us, and then we will size our child/children.   Otherwise, we need to do it now.
-                       if(!this._childOfLayoutWidget && this._needLayout){
-                               // If a layout has been scheduled for when we become visible, do it now
-                               this._layoutChildren();
-                       }
-               }
-
-               this.inherited(arguments);
-
-               // Need to keep track of whether ContentPane has been shown (which is different than
-               // whether or not it's currently visible).
-               this._wasShown = true;
-       },
-
-       refresh: function(){
-               // summary:
-               //              [Re]download contents of href and display
-               // description:
-               //              1. cancels any currently in-flight requests
-               //              2. posts "loading..." message
-               //              3. sends XHR to download new data
-
-               // Cancel possible prior in-flight request
-               this.cancel();
-
-               this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
-               this._load();
-               return this.onLoadDeferred;
-       },
-
-       _load: function(){
-               // summary:
-               //              Load/reload the href specified in this.href
-
-               // display loading message
-               this._setContent(this.onDownloadStart(), true);
-
-               var self = this;
-               var getArgs = {
-                       preventCache: (this.preventCache || this.refreshOnShow),
-                       url: this.href,
-                       handleAs: "text"
-               };
-               if(dojo.isObject(this.ioArgs)){
-                       dojo.mixin(getArgs, this.ioArgs);
-               }
-
-               var hand = (this._xhrDfd = (this.ioMethod || dojo.xhrGet)(getArgs));
-
-               hand.addCallback(function(html){
-                       try{
-                               self._isDownloaded = true;
-                               self._setContent(html, false);
-                               self.onDownloadEnd();
-                       }catch(err){
-                               self._onError('Content', err); // onContentError
-                       }
-                       delete self._xhrDfd;
-                       return html;
-               });
-
-               hand.addErrback(function(err){
-                       if(!hand.canceled){
-                               // show error message in the pane
-                               self._onError('Download', err); // onDownloadError
-                       }
-                       delete self._xhrDfd;
-                       return err;
-               });
-
-               // Remove flag saying that a load is needed
-               delete this._hrefChanged;
-       },
-
-       _onLoadHandler: function(data){
-               // summary:
-               //              This is called whenever new content is being loaded
-               this.isLoaded = true;
-               try{
-                       this.onLoadDeferred.callback(data);
-                       this.onLoad(data);
-               }catch(e){
-                       console.error('Error '+this.widgetId+' running custom onLoad code: ' + e.message);
-               }
-       },
-
-       _onUnloadHandler: function(){
-               // summary:
-               //              This is called whenever the content is being unloaded
-               this.isLoaded = false;
-               try{
-                       this.onUnload();
-               }catch(e){
-                       console.error('Error '+this.widgetId+' running custom onUnload code: ' + e.message);
-               }
-       },
-
-       destroyDescendants: function(){
-               // summary:
-               //              Destroy all the widgets inside the ContentPane and empty containerNode
-
-               // Make sure we call onUnload (but only when the ContentPane has real content)
-               if(this.isLoaded){
-                       this._onUnloadHandler();
-               }
-
-               // Even if this.isLoaded == false there might still be a "Loading..." message
-               // to erase, so continue...
-
-               // For historical reasons we need to delete all widgets under this.containerNode,
-               // even ones that the user has created manually.
-               var setter = this._contentSetter;
-               dojo.forEach(this.getChildren(), function(widget){
-                       if(widget.destroyRecursive){
-                               widget.destroyRecursive();
-                       }
-               });
-               if(setter){
-                       // Most of the widgets in setter.parseResults have already been destroyed, but
-                       // things like Menu that have been moved to <body> haven't yet
-                       dojo.forEach(setter.parseResults, function(widget){
-                               if(widget.destroyRecursive && widget.domNode && widget.domNode.parentNode == dojo.body()){
-                                       widget.destroyRecursive();
-                               }
-                       });
-                       delete setter.parseResults;
-               }
-
-               // And then clear away all the DOM nodes
-               dojo.html._emptyNode(this.containerNode);
-
-               // Delete any state information we have about current contents
-               delete this._singleChild;
-       },
-
-       _setContent: function(cont, isFakeContent){
-               // summary:
-               //              Insert the content into the container node
-
-               // first get rid of child widgets
-               this.destroyDescendants();
-
-               // dojo.html.set will take care of the rest of the details
-               // we provide an override for the error handling to ensure the widget gets the errors
-               // configure the setter instance with only the relevant widget instance properties
-               // NOTE: unless we hook into attr, or provide property setters for each property,
-               // we need to re-configure the ContentSetter with each use
-               var setter = this._contentSetter;
-               if(! (setter && setter instanceof dojo.html._ContentSetter)){
-                       setter = this._contentSetter = new dojo.html._ContentSetter({
-                               node: this.containerNode,
-                               _onError: dojo.hitch(this, this._onError),
-                               onContentError: dojo.hitch(this, function(e){
-                                       // fires if a domfault occurs when we are appending this.errorMessage
-                                       // like for instance if domNode is a UL and we try append a DIV
-                                       var errMess = this.onContentError(e);
-                                       try{
-                                               this.containerNode.innerHTML = errMess;
-                                       }catch(e){
-                                               console.error('Fatal '+this.id+' could not change content due to '+e.message, e);
-                                       }
-                               })/*,
-                               _onError */
-                       });
-               };
-
-               var setterParams = dojo.mixin({
-                       cleanContent: this.cleanContent,
-                       extractContent: this.extractContent,
-                       parseContent: this.parseOnLoad,
-                       dir: this.dir,
-                       lang: this.lang
-               }, this._contentSetterParams || {});
-
-               dojo.mixin(setter, setterParams);
-
-               setter.set( (dojo.isObject(cont) && cont.domNode) ? cont.domNode : cont );
-
-               // setter params must be pulled afresh from the ContentPane each time
-               delete this._contentSetterParams;
-
-               if(!isFakeContent){
-                       // Startup each top level child widget (and they will start their children, recursively)
-                       dojo.forEach(this.getChildren(), function(child){
-                               // The parser has already called startup on all widgets *without* a getParent() method
-                               if(!this.parseOnLoad || child.getParent){
-                                       child.startup();
-                               }
-                       }, this);
-
-                       // Call resize() on each of my child layout widgets,
-                       // or resize() on my single child layout widget...
-                       // either now (if I'm currently visible)
-                       // or when I become visible
-                       this._scheduleLayout();
-
-                       this._onLoadHandler(cont);
-               }
-       },
-
-       _onError: function(type, err, consoleText){
-               this.onLoadDeferred.errback(err);
-
-               // shows user the string that is returned by on[type]Error
-               // overide on[type]Error and return your own string to customize
-               var errText = this['on' + type + 'Error'].call(this, err);
-               if(consoleText){
-                       console.error(consoleText, err);
-               }else if(errText){// a empty string won't change current content
-                       this._setContent(errText, true);
-               }
-       },
-
-       _scheduleLayout: function(){
-               // summary:
-               //              Call resize() on each of my child layout widgets, either now
-               //              (if I'm currently visible) or when I become visible
-               if(this._isShown()){
-                       this._layoutChildren();
-               }else{
-                       this._needLayout = true;
-               }
-       },
-
-       _layoutChildren: function(){
-               // summary:
-               //              Since I am a Container widget, each of my children expects me to
-               //              call resize() or layout() on them.
-               // description:
-               //              Should be called on initialization and also whenever we get new content
-               //              (from an href, or from attr('content', ...))... but deferred until
-               //              the ContentPane is visible
-
-               if(this.doLayout){
-                       this._checkIfSingleChild();
-               }
-
-               if(this._singleChild && this._singleChild.resize){
-                       var cb = this._contentBox || dojo.contentBox(this.containerNode);
-
-                       // note: if widget has padding this._contentBox will have l and t set,
-                       // but don't pass them to resize() or it will doubly-offset the child
-                       this._singleChild.resize({w: cb.w, h: cb.h});
-               }else{
-                       // All my child widgets are independently sized (rather than matching my size),
-                       // but I still need to call resize() on each child to make it layout.
-                       dojo.forEach(this.getChildren(), function(widget){
-                               if(widget.resize){
-                                       widget.resize();
-                               }
-                       });
-               }
-               delete this._needLayout;
-       },
-
-       // EVENT's, should be overide-able
-       onLoad: function(data){
-               // summary:
-               //              Event hook, is called after everything is loaded and widgetified
-               // tags:
-               //              callback
-       },
-
-       onUnload: function(){
-               // summary:
-               //              Event hook, is called before old content is cleared
-               // tags:
-               //              callback
-       },
-
-       onDownloadStart: function(){
-               // summary:
-               //              Called before download starts.
-               // description:
-               //              The string returned by this function will be the html
-               //              that tells the user we are loading something.
-               //              Override with your own function if you want to change text.
-               // tags:
-               //              extension
-               return this.loadingMessage;
-       },
-
-       onContentError: function(/*Error*/ error){
-               // summary:
-               //              Called on DOM faults, require faults etc. in content.
-               //
-               //              In order to display an error message in the pane, return
-               //              the error message from this method, as an HTML string.
-               //
-               //              By default (if this method is not overriden), it returns
-               //              nothing, so the error message is just printed to the console.
-               // tags:
-               //              extension
-       },
-
-       onDownloadError: function(/*Error*/ error){
-               // summary:
-               //              Called when download error occurs.
-               //
-               //              In order to display an error message in the pane, return
-               //              the error message from this method, as an HTML string.
-               //
-               //              Default behavior (if this method is not overriden) is to display
-               //              the error message inside the pane.
-               // tags:
-               //              extension
-               return this.errorMessage;
-       },
-
-       onDownloadEnd: function(){
-               // summary:
-               //              Called when download is finished.
-               // tags:
-               //              callback
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.TooltipDialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.TooltipDialog"] = true;
-dojo.provide("dijit.TooltipDialog");
-
-
-
-
-
-
-dojo.declare(
-               "dijit.TooltipDialog",
-               [dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin],
-               {
-                       // summary:
-                       //              Pops up a dialog that appears like a Tooltip
-
-                       // title: String
-                       //              Description of tooltip dialog (required for a11y)
-                       title: "",
-
-                       // doLayout: [protected] Boolean
-                       //              Don't change this parameter from the default value.
-                       //              This ContentPane parameter doesn't make sense for TooltipDialog, since TooltipDialog
-                       //              is never a child of a layout container, nor can you specify the size of
-                       //              TooltipDialog in order to control the size of an inner widget.
-                       doLayout: false,
-
-                       // autofocus: Boolean
-                       //              A Toggle to modify the default focus behavior of a Dialog, which
-                       //              is to focus on the first dialog element after opening the dialog.
-                       //              False will disable autofocusing. Default: true
-                       autofocus: true,
-
-                       // baseClass: [protected] String
-                       //              The root className to use for the various states of this widget
-                       baseClass: "dijitTooltipDialog",
-
-                       // _firstFocusItem: [private] [readonly] DomNode
-                       //              The pointer to the first focusable node in the dialog.
-                       //              Set by `dijit._DialogMixin._getFocusItems`.
-                       _firstFocusItem: null,
-
-                       // _lastFocusItem: [private] [readonly] DomNode
-                       //              The pointer to which node has focus prior to our dialog.
-                       //              Set by `dijit._DialogMixin._getFocusItems`.
-                       _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(/*DomNode*/ node, /*String*/ aroundCorner, /*String*/ corner){
-                               // summary:
-                               //              Configure widget to be displayed in given position relative to the button.
-                               //              This is called from the dijit.popup code, and should not be called
-                               //              directly.
-                               // tags:
-                               //              protected
-                               var c = this._currentOrientClass;
-                               if(c){
-                                       dojo.removeClass(this.domNode, c);
-                               }
-                               c = "dijitTooltipAB"+(corner.charAt(1) == 'L'?"Left":"Right")+" dijitTooltip"+(corner.charAt(0) == 'T' ? "Below" : "Above");
-                               dojo.addClass(this.domNode, c);
-                               this._currentOrientClass = c;
-                       },
-
-                       onOpen: function(/*Object*/ pos){
-                               // summary:
-                               //              Called when dialog is displayed.
-                               //              This is called from the dijit.popup code, and should not be called directly.
-                               // tags:
-                               //              protected
-
-                               this.orient(this.domNode,pos.aroundCorner, pos.corner);
-                               this._onShow(); // lazy load trigger
-
-                               if(this.autofocus){
-                                       this._getFocusItems(this.containerNode);
-                                       dijit.focus(this._firstFocusItem);
-                               }
-                       },
-
-                       onClose: function(){
-                               // summary:
-                               //              Called when dialog is hidden.
-                               //              This is called from the dijit.popup code, and should not be called directly.
-                               // tags:
-                               //              protected
-                               this.onHide();
-                       },
-
-                       _onKey: function(/*Event*/ evt){
-                               // summary:
-                               //              Handler for keyboard events
-                               // description:
-                               //              Keep keyboard focus in dialog; close dialog on escape key
-                               // tags:
-                               //              private
-
-                               var node = evt.target;
-                               var dk = dojo.keys;
-                               if(evt.charOrCode === dk.TAB){
-                                       this._getFocusItems(this.containerNode);
-                               }
-                               var singleFocusItem = (this._firstFocusItem == this._lastFocusItem);
-                               if(evt.charOrCode == dk.ESCAPE){
-                                       // Use setTimeout to avoid crash on IE, see #10396.
-                                       setTimeout(dojo.hitch(this, "onCancel"), 0);
-                                       dojo.stopEvent(evt);
-                               }else if(node == this._firstFocusItem && evt.shiftKey && evt.charOrCode === dk.TAB){
-                                       if(!singleFocusItem){
-                                               dijit.focus(this._lastFocusItem); // send focus to last item in dialog
-                                       }
-                                       dojo.stopEvent(evt);
-                               }else if(node == this._lastFocusItem && evt.charOrCode === dk.TAB && !evt.shiftKey){
-                                       if(!singleFocusItem){
-                                               dijit.focus(this._firstFocusItem); // send focus to first item in dialog
-                                       }
-                                       dojo.stopEvent(evt);
-                               }else if(evt.charOrCode === dk.TAB){
-                                       // we want the browser's default tab handling to move focus
-                                       // but we don't want the tab to propagate upwards
-                                       evt.stopPropagation();
-                               }
-                       }
-               }
-       );
-
-}
-
-if(!dojo._hasResource["dijit.Dialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Dialog"] = true;
-dojo.provide("dijit.Dialog");
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/*=====
-dijit._underlay = function(kwArgs){
-       // summary:
-       //              A shared instance of a `dijit.DialogUnderlay`
-       //
-       // description:
-       //              A shared instance of a `dijit.DialogUnderlay` created and
-       //              used by `dijit.Dialog`, though never created until some Dialog
-       //              or subclass thereof is shown.
-};
-=====*/
-
-dojo.declare(
-       "dijit._DialogBase",
-       [dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin, dijit._CssStateMixin],
-       {
-               // summary:
-               //              A modal dialog Widget
-               //
-               // description:
-               //              Pops up a modal dialog window, blocking access to the screen
-               //              and also graying out the screen Dialog is extended from
-               //              ContentPane so it supports all the same parameters (href, etc.)
-               //
-               // example:
-               // |    <div dojoType="dijit.Dialog" href="test.html"></div>
-               //
-               // example:
-               // |    var foo = new dijit.Dialog({ title: "test dialog", content: "test content" };
-               // |    dojo.body().appendChild(foo.domNode);
-               // |    foo.startup();
-
-               templateString: dojo.cache("dijit", "templates/Dialog.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\"></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\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),
-               
-               baseClass: "dijitDialog",
-               
-               cssStateNodes: {
-                       closeButtonNode: "dijitDialogCloseIcon"
-               },
-
-               attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-                       title: [
-                               { node: "titleNode", type: "innerHTML" },
-                               { node: "titleBar", type: "attribute" }
-                       ],
-                       "aria-describedby":""
-               }),
-
-               // open: Boolean
-               //              True if Dialog is currently displayed on screen.
-               open: false,
-
-               // duration: Integer
-               //              The time in milliseconds it takes the dialog to fade in and out
-               duration: dijit.defaultDuration,
-
-               // refocus: Boolean
-               //              A Toggle to modify the default focus behavior of a Dialog, which
-               //              is to re-focus the element which had focus before being opened.
-               //              False will disable refocusing. Default: true
-               refocus: true,
-
-               // autofocus: Boolean
-               //              A Toggle to modify the default focus behavior of a Dialog, which
-               //              is to focus on the first dialog element after opening the dialog.
-               //              False will disable autofocusing. Default: true
-               autofocus: true,
-
-               // _firstFocusItem: [private] [readonly] DomNode
-               //              The pointer to the first focusable node in the dialog.
-               //              Set by `dijit._DialogMixin._getFocusItems`.
-               _firstFocusItem: null,
-
-               // _lastFocusItem: [private] [readonly] DomNode
-               //              The pointer to which node has focus prior to our dialog.
-               //              Set by `dijit._DialogMixin._getFocusItems`.
-               _lastFocusItem: null,
-
-               // doLayout: [protected] Boolean
-               //              Don't change this parameter from the default value.
-               //              This ContentPane parameter doesn't make sense for Dialog, since Dialog
-               //              is never a child of a layout container, nor can you specify the size of
-               //              Dialog in order to control the size of an inner widget.
-               doLayout: false,
-
-               // draggable: Boolean
-               //              Toggles the moveable aspect of the Dialog. If true, Dialog
-               //              can be dragged by it's title. If false it will remain centered
-               //              in the viewport.
-               draggable: true,
-
-               //aria-describedby: String
-               //              Allows the user to add an aria-describedby attribute onto the dialog.   The value should
-               //              be the id of the container element of text that describes the dialog purpose (usually
-               //              the first text in the dialog).
-               //              <div dojoType="dijit.Dialog" aria-describedby="intro" .....>
-               //                      <div id="intro">Introductory text</div>
-               //                      <div>rest of dialog contents</div>
-               //              </div>
-               "aria-describedby":"",
-
-               postMixInProperties: function(){
-                       var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
-                       dojo.mixin(this, _nlsResources);
-                       this.inherited(arguments);
-               },
-
-               postCreate: function(){
-                       dojo.style(this.domNode, {
-                               display: "none",
-                               position:"absolute"
-                       });
-                       dojo.body().appendChild(this.domNode);
-
-                       this.inherited(arguments);
-
-                       this.connect(this, "onExecute", "hide");
-                       this.connect(this, "onCancel", "hide");
-                       this._modalconnects = [];
-               },
-
-               onLoad: function(){
-                       // summary:
-                       //              Called when data has been loaded from an href.
-                       //              Unlike most other callbacks, this function can be connected to (via `dojo.connect`)
-                       //              but should *not* be overriden.
-                       // tags:
-                       //              callback
-
-                       // when href is specified we need to reposition the dialog after the data is loaded
-                       // and find the focusable elements
-                       this._position();
-                       if(this.autofocus){
-                               this._getFocusItems(this.domNode);
-                               dijit.focus(this._firstFocusItem);
-                       }
-                       this.inherited(arguments);
-               },
-
-               _endDrag: function(e){
-                       // summary:
-                       //              Called after dragging the Dialog. Saves the position of the dialog in the viewport.
-                       // tags:
-                       //              private
-                       if(e && e.node && e.node === this.domNode){
-                               this._relativePosition = dojo.position(e.node);
-                       }
-               },
-
-               _setup: function(){
-                       // summary:
-                       //              Stuff we need to do before showing the Dialog for the first
-                       //              time (but we defer it until right beforehand, for
-                       //              performance reasons).
-                       // tags:
-                       //              private
-
-                       var node = this.domNode;
-
-                       if(this.titleBar && this.draggable){
-                               this._moveable = (dojo.isIE == 6) ?
-                                       new dojo.dnd.TimedMoveable(node, { handle: this.titleBar }) :   // prevent overload, see #5285
-                                       new dojo.dnd.Moveable(node, { handle: this.titleBar, timeout: 0 });
-                               dojo.subscribe("/dnd/move/stop",this,"_endDrag");
-                       }else{
-                               dojo.addClass(node,"dijitDialogFixed");
-                       }
-
-                       this.underlayAttrs = {
-                               dialogId: this.id,
-                               "class": dojo.map(this["class"].split(/\s/), function(s){ return s+"_underlay"; }).join(" ")
-                       };
-
-                       this._fadeIn = dojo.fadeIn({
-                               node: node,
-                               duration: this.duration,
-                               beforeBegin: dojo.hitch(this, function(){
-                                       var underlay = dijit._underlay;
-                                       if(!underlay){
-                                               underlay = dijit._underlay = new dijit.DialogUnderlay(this.underlayAttrs);
-                                       }else{
-                                               underlay.set(this.underlayAttrs);
-                                       }
-
-                                       var ds = dijit._dialogStack,
-                                               zIndex = 948 + ds.length*2;
-                                       if(ds.length == 1){     // first dialog
-                                               underlay.show();
-                                       }
-                                       dojo.style(dijit._underlay.domNode, 'zIndex', zIndex);
-                                       dojo.style(this.domNode, 'zIndex', zIndex + 1);
-                               }),
-                               onEnd: dojo.hitch(this, function(){
-                                       if(this.autofocus){
-                                               // find focusable Items each time dialog is shown since if dialog contains a widget the
-                                               // first focusable items can change
-                                               this._getFocusItems(this.domNode);
-                                               dijit.focus(this._firstFocusItem);
-                                       }
-                               })
-                        });
-
-                       this._fadeOut = dojo.fadeOut({
-                               node: node,
-                               duration: this.duration,
-                               onEnd: dojo.hitch(this, function(){
-                                       node.style.display = "none";
-
-                                       // Restore the previous dialog in the stack, or if this is the only dialog
-                                       // then restore to original page
-                                       var ds = dijit._dialogStack;
-                                       if(ds.length == 0){
-                                               dijit._underlay.hide();
-                                       }else{
-                                               dojo.style(dijit._underlay.domNode, 'zIndex', 948 + ds.length*2);
-                                               dijit._underlay.set(ds[ds.length-1].underlayAttrs);
-                                       }
-
-                                       // Restore focus to wherever it was before this dialog was displayed
-                                       if(this.refocus){
-                                               var focus = this._savedFocus;
-
-                                               // If we are returning control to a previous dialog but for some reason
-                                               // that dialog didn't have a focused field, set focus to first focusable item.
-                                               // This situation could happen if two dialogs appeared at nearly the same time,
-                                               // since a dialog doesn't set it's focus until the fade-in is finished.
-                                               if(ds.length > 0){
-                                                       var pd = ds[ds.length-1];
-                                                       if(!dojo.isDescendant(focus.node, pd.domNode)){
-                                                               pd._getFocusItems(pd.domNode);
-                                                               focus = pd._firstFocusItem;
-                                                       }
-                                               }
-
-                                               dijit.focus(focus);
-                                       }
-                               })
-                        });
-               },
-
-               uninitialize: function(){
-                       var wasPlaying = false;
-                       if(this._fadeIn && this._fadeIn.status() == "playing"){
-                               wasPlaying = true;
-                               this._fadeIn.stop();
-                       }
-                       if(this._fadeOut && this._fadeOut.status() == "playing"){
-                               wasPlaying = true;
-                               this._fadeOut.stop();
-                       }
-                       
-                       // Hide the underlay, unless the underlay widget has already been destroyed
-                       // because we are being called during page unload (when all widgets are destroyed)
-                       if((this.open || wasPlaying) && !dijit._underlay._destroyed){
-                               dijit._underlay.hide();
-                       }
-
-                       if(this._moveable){
-                               this._moveable.destroy();
-                       }
-                       this.inherited(arguments);
-               },
-
-               _size: function(){
-                       // summary:
-                       //              If necessary, shrink dialog contents so dialog fits in viewport
-                       // tags:
-                       //              private
-
-                       this._checkIfSingleChild();
-
-                       // If we resized the dialog contents earlier, reset them back to original size, so
-                       // that if the user later increases the viewport size, the dialog can display w/out a scrollbar.
-                       // Need to do this before the dojo.marginBox(this.domNode) call below.
-                       if(this._singleChild){
-                               if(this._singleChildOriginalStyle){
-                                       this._singleChild.domNode.style.cssText = this._singleChildOriginalStyle;
-                               }
-                               delete this._singleChildOriginalStyle;
-                       }else{
-                               dojo.style(this.containerNode, {
-                                       width:"auto",
-                                       height:"auto"
-                               });
-                       }
-
-                       var mb = dojo.marginBox(this.domNode);
-                       var viewport = dojo.window.getBox();
-                       if(mb.w >= viewport.w || mb.h >= viewport.h){
-                               // Reduce size of dialog contents so that dialog fits in viewport
-
-                               var w = Math.min(mb.w, Math.floor(viewport.w * 0.75)),
-                                       h = Math.min(mb.h, Math.floor(viewport.h * 0.75));
-
-                               if(this._singleChild && this._singleChild.resize){
-                                       this._singleChildOriginalStyle = this._singleChild.domNode.style.cssText;
-                                       this._singleChild.resize({w: w, h: h});
-                               }else{
-                                       dojo.style(this.containerNode, {
-                                               width: w + "px",
-                                               height: h + "px",
-                                               overflow: "auto",
-                                               position: "relative"    // workaround IE bug moving scrollbar or dragging dialog
-                                       });
-                               }
-                       }else{
-                               if(this._singleChild && this._singleChild.resize){
-                                       this._singleChild.resize();
-                               }
-                       }
-               },
-
-               _position: function(){
-                       // summary:
-                       //              Position modal dialog in the viewport. If no relative offset
-                       //              in the viewport has been determined (by dragging, for instance),
-                       //              center the node. Otherwise, use the Dialog's stored relative offset,
-                       //              and position the node to top: left: values based on the viewport.
-                       // tags:
-                       //              private
-                       if(!dojo.hasClass(dojo.body(),"dojoMove")){
-                               var node = this.domNode,
-                                       viewport = dojo.window.getBox(),
-                                       p = this._relativePosition,
-                                       bb = p ? null : dojo._getBorderBox(node),
-                                       l = Math.floor(viewport.l + (p ? p.x : (viewport.w - bb.w) / 2)),
-                                       t = Math.floor(viewport.t + (p ? p.y : (viewport.h - bb.h) / 2))
-                               ;
-                               dojo.style(node,{
-                                       left: l + "px",
-                                       top: t + "px"
-                               });
-                       }
-               },
-
-               _onKey: function(/*Event*/ evt){
-                       // summary:
-                       //              Handles the keyboard events for accessibility reasons
-                       // tags:
-                       //              private
-
-                       var ds = dijit._dialogStack;
-                       if(ds[ds.length-1] != this){
-                               // console.debug(this.id + ': skipping because', this, 'is not the active dialog');
-                               return;
-                       }
-
-                       if(evt.charOrCode){
-                               var dk = dojo.keys;
-                               var node = evt.target;
-                               if(evt.charOrCode === dk.TAB){
-                                       this._getFocusItems(this.domNode);
-                               }
-                               var singleFocusItem = (this._firstFocusItem == this._lastFocusItem);
-                               // see if we are shift-tabbing from first focusable item on dialog
-                               if(node == this._firstFocusItem && evt.shiftKey && evt.charOrCode === dk.TAB){
-                                       if(!singleFocusItem){
-                                               dijit.focus(this._lastFocusItem); // send focus to last item in dialog
-                                       }
-                                       dojo.stopEvent(evt);
-                               }else if(node == this._lastFocusItem && evt.charOrCode === dk.TAB && !evt.shiftKey){
-                                       if(!singleFocusItem){
-                                               dijit.focus(this._firstFocusItem); // send focus to first item in dialog
-                                       }
-                                       dojo.stopEvent(evt);
-                               }else{
-                                       // see if the key is for the dialog
-                                       while(node){
-                                               if(node == this.domNode || dojo.hasClass(node, "dijitPopup")){
-                                                       if(evt.charOrCode == dk.ESCAPE){
-                                                               this.onCancel();
-                                                       }else{
-                                                               return; // just let it go
-                                                       }
-                                               }
-                                               node = node.parentNode;
-                                       }
-                                       // this key is for the disabled document window
-                                       if(evt.charOrCode !== dk.TAB){ // allow tabbing into the dialog for a11y
-                                               dojo.stopEvent(evt);
-                                       // opera won't tab to a div
-                                       }else if(!dojo.isOpera){
-                                               try{
-                                                       this._firstFocusItem.focus();
-                                               }catch(e){ /*squelch*/ }
-                                       }
-                               }
-                       }
-               },
-
-               show: function(){
-                       // summary:
-                       //              Display the dialog
-                       if(this.open){ return; }
-
-                       // first time we show the dialog, there's some initialization stuff to do
-                       if(!this._alreadyInitialized){
-                               this._setup();
-                               this._alreadyInitialized=true;
-                       }
-
-                       if(this._fadeOut.status() == "playing"){
-                               this._fadeOut.stop();
-                       }
-
-                       this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout"));
-                       this._modalconnects.push(dojo.connect(window, "onresize", this, function(){
-                               // IE gives spurious resize events and can actually get stuck
-                               // in an infinite loop if we don't ignore them
-                               var viewport = dojo.window.getBox();
-                               if(!this._oldViewport ||
-                                               viewport.h != this._oldViewport.h ||
-                                               viewport.w != this._oldViewport.w){
-                                       this.layout();
-                                       this._oldViewport = viewport;
-                               }
-                       }));
-                       this._modalconnects.push(dojo.connect(dojo.doc.documentElement, "onkeypress", this, "_onKey"));
-
-                       dojo.style(this.domNode, {
-                               opacity:0,
-                               display:""
-                       });
-
-                       this.open = true;
-                       this._onShow(); // lazy load trigger
-
-                       this._size();
-                       this._position();
-                       dijit._dialogStack.push(this);
-                       this._fadeIn.play();
-
-                       this._savedFocus = dijit.getFocus(this);
-               },
-
-               hide: function(){
-                       // summary:
-                       //              Hide the dialog
-
-                       // if we haven't been initialized yet then we aren't showing and we can just return
-                       // or if we aren't the active dialog, don't allow us to close yet
-                       var ds = dijit._dialogStack;
-                       if(!this._alreadyInitialized || this != ds[ds.length-1]){
-                               return;
-                       }
-
-                       if(this._fadeIn.status() == "playing"){
-                               this._fadeIn.stop();
-                       }
-
-                       // throw away current active dialog from stack -- making the previous dialog or the node on the original page active
-                       ds.pop();
-
-                       this._fadeOut.play();
-
-                       if(this._scrollConnected){
-                               this._scrollConnected = false;
-                       }
-                       dojo.forEach(this._modalconnects, dojo.disconnect);
-                       this._modalconnects = [];
-
-                       if(this._relativePosition){
-                               delete this._relativePosition;
-                       }
-                       this.open = false;
-
-                       this.onHide();
-               },
-
-               layout: function(){
-                       // summary:
-                       //              Position the Dialog and the underlay
-                       // tags:
-                       //              private
-                       if(this.domNode.style.display != "none"){
-                               if(dijit._underlay){    // avoid race condition during show()
-                                       dijit._underlay.layout();
-                               }
-                               this._position();
-                       }
-               },
-
-               destroy: function(){
-                       dojo.forEach(this._modalconnects, dojo.disconnect);
-                       if(this.refocus && this.open){
-                               setTimeout(dojo.hitch(dijit,"focus",this._savedFocus), 25);
-                       }
-                       this.inherited(arguments);
-               }
-       }
-);
-
-dojo.declare(
-       "dijit.Dialog",
-       [dijit.layout.ContentPane, dijit._DialogBase],
-       {}
-);
-
-// Stack of currenctly displayed dialogs, layered on top of each other
-dijit._dialogStack = [];
-
-// For back-compat.  TODO: remove in 2.0
-
-
-}
-
-if(!dojo._hasResource["dijit._editor.selection"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.selection"] = true;
-dojo.provide("dijit._editor.selection");
-
-// FIXME:
-//             all of these methods branch internally for IE. This is probably
-//             sub-optimal in terms of runtime performance. We should investigate the
-//             size difference for differentiating at definition time.
-
-dojo.mixin(dijit._editor.selection, {
-       getType: function(){
-               // summary:
-               //              Get the selection type (like dojo.doc.select.type in IE).
-               if(dojo.isIE){
-                       return dojo.doc.selection.type.toLowerCase();
-               }else{
-                       var stype = "text";
-
-                       // Check if the actual selection is a CONTROL (IMG, TABLE, HR, etc...).
-                       var oSel;
-                       try{
-                               oSel = dojo.global.getSelection();
-                       }catch(e){ /*squelch*/ }
-
-                       if(oSel && oSel.rangeCount == 1){
-                               var oRange = oSel.getRangeAt(0);
-                               if(     (oRange.startContainer == oRange.endContainer) &&
-                                       ((oRange.endOffset - oRange.startOffset) == 1) &&
-                                       (oRange.startContainer.nodeType != 3 /* text node*/)
-                               ){
-                                       stype = "control";
-                               }
-                       }
-                       return stype; //String
-               }
-       },
-
-       getSelectedText: function(){
-               // summary:
-               //              Return the text (no html tags) included in the current selection or null if no text is selected
-               if(dojo.isIE){
-                       if(dijit._editor.selection.getType() == 'control'){
-                               return null;
-                       }
-                       return dojo.doc.selection.createRange().text;
-               }else{
-                       var selection = dojo.global.getSelection();
-                       if(selection){
-                               return selection.toString(); //String
-                       }
-               }
-               return '';
-       },
-
-       getSelectedHtml: function(){
-               // summary:
-               //              Return the html text of the current selection or null if unavailable
-               if(dojo.isIE){
-                       if(dijit._editor.selection.getType() == 'control'){
-                               return null;
-                       }
-                       return dojo.doc.selection.createRange().htmlText;
-               }else{
-                       var selection = dojo.global.getSelection();
-                       if(selection && selection.rangeCount){
-                               var i;
-                               var html = "";
-                               for(i = 0; i < selection.rangeCount; i++){
-                                       //Handle selections spanning ranges, such as Opera
-                                       var frag = selection.getRangeAt(i).cloneContents();
-                                       var div = dojo.doc.createElement("div");
-                                       div.appendChild(frag);
-                                       html += div.innerHTML;
-                               }
-                               return html; //String
-                       }
-                       return null;
-               }
-       },
-
-       getSelectedElement: function(){
-               // summary:
-               //              Retrieves the selected element (if any), just in the case that
-               //              a single element (object like and image or a table) is
-               //              selected.
-               if(dijit._editor.selection.getType() == "control"){
-                       if(dojo.isIE){
-                               var range = dojo.doc.selection.createRange();
-                               if(range && range.item){
-                                       return dojo.doc.selection.createRange().item(0);
-                               }
-                       }else{
-                               var selection = dojo.global.getSelection();
-                               return selection.anchorNode.childNodes[ selection.anchorOffset ];
-                       }
-               }
-               return null;
-       },
-
-       getParentElement: function(){
-               // summary:
-               //              Get the parent element of the current selection
-               if(dijit._editor.selection.getType() == "control"){
-                       var p = this.getSelectedElement();
-                       if(p){ return p.parentNode; }
-               }else{
-                       if(dojo.isIE){
-                               var r = dojo.doc.selection.createRange();
-                               r.collapse(true);
-                               return r.parentElement();
-                       }else{
-                               var selection = dojo.global.getSelection();
-                               if(selection){
-                                       var node = selection.anchorNode;
-                                       while(node && (node.nodeType != 1)){ // not an element
-                                               node = node.parentNode;
-                                       }
-                                       return node;
-                               }
-                       }
-               }
-               return null;
-       },
-
-       hasAncestorElement: function(/*String*/tagName /* ... */){
-               // summary:
-               //              Check whether current selection has a  parent element which is
-               //              of type tagName (or one of the other specified tagName)
-               // tagName: String
-               //              The tag name to determine if it has an ancestor of.
-               return this.getAncestorElement.apply(this, arguments) != null; //Boolean
-       },
-
-       getAncestorElement: function(/*String*/tagName /* ... */){
-               // summary:
-               //              Return the parent element of the current selection which is of
-               //              type tagName (or one of the other specified tagName)
-               // tagName: String
-               //              The tag name to determine if it has an ancestor of.
-               var node = this.getSelectedElement() || this.getParentElement();
-               return this.getParentOfType(node, arguments); //DOMNode
-       },
-
-       isTag: function(/*DomNode*/ node, /*String[]*/ tags){
-               // summary:
-               //              Function to determine if a node is one of an array of tags.
-               // node:
-               //              The node to inspect.
-               // tags:
-               //              An array of tag name strings to check to see if the node matches.
-               if(node && node.tagName){
-                       var _nlc = node.tagName.toLowerCase();
-                       for(var i=0; i<tags.length; i++){
-                               var _tlc = String(tags[i]).toLowerCase();
-                               if(_nlc == _tlc){
-                                       return _tlc; // String
-                               }
-                       }
-               }
-               return "";
-       },
-
-       getParentOfType: function(/*DomNode*/ node, /*String[]*/ tags){
-               // summary:
-               //              Function to locate a parent node that matches one of a set of tags
-               // node:
-               //              The node to inspect.
-               // tags:
-               //              An array of tag name strings to check to see if the node matches.
-               while(node){
-                       if(this.isTag(node, tags).length){
-                               return node; // DOMNode
-                       }
-                       node = node.parentNode;
-               }
-               return null;
-       },
-
-       collapse: function(/*Boolean*/beginning){
-               // summary:
-               //              Function to collapse (clear), the current selection
-               // beginning: Boolean
-               //              Boolean to indicate whether to collapse the cursor to the beginning of the selection or end.
-               if(window.getSelection){
-                       var selection = dojo.global.getSelection();
-                       if(selection.removeAllRanges){ // Mozilla
-                               if(beginning){
-                                       selection.collapseToStart();
-                               }else{
-                                       selection.collapseToEnd();
-                               }
-                       }else{ // Safari
-                               // pulled from WebCore/ecma/kjs_window.cpp, line 2536
-                               selection.collapse(beginning);
-                       }
-               }else if(dojo.isIE){ // IE
-                       var range = dojo.doc.selection.createRange();
-                       range.collapse(beginning);
-                       range.select();
-               }
-       },
-
-       remove: function(){
-               // summary:
-               //              Function to delete the currently selected content from the document.
-               var sel = dojo.doc.selection;
-               if(dojo.isIE){
-                       if(sel.type.toLowerCase() != "none"){
-                               sel.clear();
-                       }
-                       return sel; //Selection
-               }else{
-                       sel = dojo.global.getSelection();
-                       sel.deleteFromDocument();
-                       return sel; //Selection
-               }
-       },
-
-       selectElementChildren: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
-               // summary:
-               //              clear previous selection and select the content of the node
-               //              (excluding the node itself)
-               // element: DOMNode
-               //              The element you wish to select the children content of.
-               // nochangefocus: Boolean
-               //              Boolean to indicate if the foxus should change or not.
-               var win = dojo.global;
-               var doc = dojo.doc;
-               var range;
-               element = dojo.byId(element);
-               if(doc.selection && dojo.isIE && dojo.body().createTextRange){ // IE
-                       range = element.ownerDocument.body.createTextRange();
-                       range.moveToElementText(element);
-                       if(!nochangefocus){
-                               try{
-                                       range.select(); // IE throws an exception here if the widget is hidden.  See #5439
-                               }catch(e){ /* squelch */}
-                       }
-               }else if(win.getSelection){
-                       var selection = dojo.global.getSelection();
-                       if(dojo.isOpera){
-                               //Opera's selectAllChildren doesn't seem to work right
-                               //against <body> nodes and possibly others ... so
-                               //we use the W3C range API
-                               if(selection.rangeCount){
-                                       range = selection.getRangeAt(0);
-                               }else{
-                                       range = doc.createRange();
-                               }
-                               range.setStart(element, 0);
-                               range.setEnd(element,(element.nodeType == 3)?element.length:element.childNodes.length);
-                               selection.addRange(range);
-                       }else{
-                               selection.selectAllChildren(element);
-                       }
-               }
-       },
-
-       selectElement: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
-               // summary:
-               //              clear previous selection and select element (including all its children)
-               // element:  DOMNode
-               //              The element to select.
-               // nochangefocus: Boolean
-               //              Boolean indicating if the focus should be changed.  IE only.
-               var range;
-               var doc = dojo.doc;
-               var win = dojo.global;
-               element = dojo.byId(element);
-               if(dojo.isIE && dojo.body().createTextRange){
-                       try{
-                               range = dojo.body().createControlRange();
-                               range.addElement(element);
-                               if(!nochangefocus){
-                                       range.select();
-                               }
-                       }catch(e){
-                               this.selectElementChildren(element,nochangefocus);
-                       }
-               }else if(dojo.global.getSelection){
-                       var selection = win.getSelection();
-                       range = doc.createRange();
-                       if(selection.removeAllRanges){ // Mozilla
-                               // FIXME: does this work on Safari?
-                               if(dojo.isOpera){
-                                       //Opera works if you use the current range on
-                                       //the selection if present.
-                                       if(selection.getRangeAt(0)){
-                                               range = selection.getRangeAt(0);
-                                       }
-                               }
-                               range.selectNode(element);
-                               selection.removeAllRanges();
-                               selection.addRange(range);
-                       }
-               }
-       },
-
-       inSelection: function(node){
-               // summary:
-               //              This function determines if 'node' is
-               //              in the current selection.
-               // tags:
-               //              public
-               if(node){
-                       var newRange;
-                       var doc = dojo.doc;
-                       var range;
-
-                       if(dojo.global.getSelection){
-                               //WC3
-                               var sel = dojo.global.getSelection();
-                               if(sel && sel.rangeCount > 0){
-                                       range = sel.getRangeAt(0);
-                               }
-                               if(range && range.compareBoundaryPoints && doc.createRange){
-                                       try{
-                                               newRange = doc.createRange();
-                                               newRange.setStart(node, 0);
-                                               if(range.compareBoundaryPoints(range.START_TO_END, newRange) === 1){
-                                                       return true;
-                                               }
-                                       }catch(e){ /* squelch */}
-                               }
-                       }else if(doc.selection){
-                               // Probably IE, so we can't use the range object as the pseudo
-                               // range doesn't implement the boundry checking, we have to 
-                               // use IE specific crud.
-                               range = doc.selection.createRange();
-                               try{
-                                       newRange = node.ownerDocument.body.createControlRange();
-                                       if(newRange){
-                                               newRange.addElement(node);
-                                       }
-                               }catch(e1){
-                                       try{
-                                               newRange = node.ownerDocument.body.createTextRange();
-                                               newRange.moveToElementText(node);
-                                       }catch(e2){/* squelch */}
-                               }
-                               if(range && newRange){
-                                       // We can finally compare similar to W3C
-                                       if(range.compareEndPoints("EndToStart", newRange) === 1){
-                                               return true;
-                                       }
-                               }
-                       }
-               }
-               return false; // boolean
-       }
-
-});
-
-}
-
-if(!dojo._hasResource["dijit._editor.range"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.range"] = true;
-dojo.provide("dijit._editor.range");
-
-dijit.range={};
-
-dijit.range.getIndex=function(/*DomNode*/node, /*DomNode*/parent){
-//     dojo.profile.start("dijit.range.getIndex");
-       var ret=[], retR=[];
-       var stop = parent;
-       var onode = node;
-
-       var pnode, n;
-       while(node != stop){
-               var i = 0;
-               pnode = node.parentNode;
-               while((n=pnode.childNodes[i++])){
-                       if(n === node){
-                               --i;
-                               break;
-                       }
-               }
-               //if(i>=pnode.childNodes.length){
-                       //dojo.debug("Error finding index of a node in dijit.range.getIndex");
-               //}
-               ret.unshift(i);
-               retR.unshift(i-pnode.childNodes.length);
-               node = pnode;
-       }
-
-       //normalized() can not be called so often to prevent
-       //invalidating selection/range, so we have to detect
-       //here that any text nodes in a row
-       if(ret.length > 0 && onode.nodeType == 3){
-               n = onode.previousSibling;
-               while(n && n.nodeType == 3){
-                       ret[ret.length-1]--;
-                       n = n.previousSibling;
-               }
-               n = onode.nextSibling;
-               while(n && n.nodeType == 3){
-                       retR[retR.length-1]++;
-                       n = n.nextSibling;
-               }
-       }
-//     dojo.profile.end("dijit.range.getIndex");
-       return {o: ret, r:retR};
-}
-
-dijit.range.getNode = function(/*Array*/index, /*DomNode*/parent){
-       if(!dojo.isArray(index) || index.length == 0){
-               return parent;
-       }
-       var node = parent;
-//     if(!node)debugger
-       dojo.every(index, function(i){
-               if(i >= 0 && i < node.childNodes.length){
-                       node = node.childNodes[i];
-               }else{
-                       node = null;
-                       //console.debug('Error: can not find node with index',index,'under parent node',parent );
-                       return false; //terminate dojo.every
-               }
-               return true; //carry on the every loop
-       });
-
-       return node;
-}
-
-dijit.range.getCommonAncestor = function(n1,n2,root){
-       root = root||n1.ownerDocument.body;
-       var getAncestors = function(n){
-               var as=[];
-               while(n){
-                       as.unshift(n);
-                       if(n !== root){
-                               n = n.parentNode;
-                       }else{
-                               break;
-                       }
-               }
-               return as;
-       };
-       var n1as = getAncestors(n1);
-       var n2as = getAncestors(n2);
-
-       var m = Math.min(n1as.length,n2as.length);
-       var com = n1as[0]; //at least, one element should be in the array: the root (BODY by default)
-       for(var i=1;i<m;i++){
-               if(n1as[i] === n2as[i]){
-                       com = n1as[i]
-               }else{
-                       break;
-               }
-       }
-       return com;
-}
-
-dijit.range.getAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
-       root = root || node.ownerDocument.body;
-       while(node && node !== root){
-               var name = node.nodeName.toUpperCase() ;
-               if(regex.test(name)){
-                       return node;
-               }
-
-               node = node.parentNode;
-       }
-       return null;
-}
-
-dijit.range.BlockTagNames = /^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;
-dijit.range.getBlockAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
-       root = root || node.ownerDocument.body;
-       regex = regex || dijit.range.BlockTagNames;
-       var block=null, blockContainer;
-       while(node && node !== root){
-               var name = node.nodeName.toUpperCase() ;
-               if(!block && regex.test(name)){
-                       block = node;
-               }
-               if(!blockContainer && (/^(?:BODY|TD|TH|CAPTION)$/).test(name)){
-                       blockContainer = node;
-               }
-
-               node = node.parentNode;
-       }
-       return {blockNode:block, blockContainer:blockContainer || node.ownerDocument.body};
-}
-
-dijit.range.atBeginningOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
-       var atBeginning = false;
-       var offsetAtBeginning = (offset == 0);
-       if(!offsetAtBeginning && node.nodeType == 3){ //if this is a text node, check whether the left part is all space
-               if(/^[\s\xA0]+$/.test(node.nodeValue.substr(0,offset))){
-                       offsetAtBeginning = true;
-               }
-       }
-       if(offsetAtBeginning){
-               var cnode = node;
-               atBeginning = true;
-               while(cnode && cnode !== container){
-                       if(cnode.previousSibling){
-                               atBeginning = false;
-                               break;
-                       }
-                       cnode = cnode.parentNode;
-               }
-       }
-       return atBeginning;
-}
-
-dijit.range.atEndOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
-       var atEnd = false;
-       var offsetAtEnd = (offset == (node.length || node.childNodes.length));
-       if(!offsetAtEnd && node.nodeType == 3){ //if this is a text node, check whether the right part is all space
-               if(/^[\s\xA0]+$/.test(node.nodeValue.substr(offset))){
-                       offsetAtEnd = true;
-               }
-       }
-       if(offsetAtEnd){
-               var cnode = node;
-               atEnd = true;
-               while(cnode && cnode !== container){
-                       if(cnode.nextSibling){
-                               atEnd = false;
-                               break;
-                       }
-                       cnode = cnode.parentNode;
-               }
-       }
-       return atEnd;
-}
-
-dijit.range.adjacentNoneTextNode=function(startnode, next){
-       var node = startnode;
-       var len = (0-startnode.length) || 0;
-       var prop = next?'nextSibling':'previousSibling';
-       while(node){
-               if(node.nodeType!=3){
-                       break;
-               }
-               len += node.length
-               node = node[prop];
-       }
-       return [node,len];
-}
-
-dijit.range._w3c = Boolean(window['getSelection']);
-dijit.range.create = function(/*Window?*/win){
-       if(dijit.range._w3c){
-               return (win || dojo.global).document.createRange();
-       }else{//IE
-               return new dijit.range.W3CRange;
-       }
-}
-
-dijit.range.getSelection = function(/*Window*/win, /*Boolean?*/ignoreUpdate){
-       if(dijit.range._w3c){
-               return win.getSelection();
-       }else{//IE
-               var s = new dijit.range.ie.selection(win);
-               if(!ignoreUpdate){
-                       s._getCurrentSelection();
-               }
-               return s;
-       }
-}
-
-if(!dijit.range._w3c){
-       dijit.range.ie={
-               cachedSelection: {},
-               selection: function(win){
-                       this._ranges = [];
-                       this.addRange = function(r, /*boolean*/internal){
-                               this._ranges.push(r);
-                               if(!internal){
-                                       r._select();
-                               }
-                               this.rangeCount = this._ranges.length;
-                       };
-                       this.removeAllRanges = function(){
-                               //don't detach, the range may be used later
-//                             for(var i=0;i<this._ranges.length;i++){
-//                                     this._ranges[i].detach();
-//                             }
-                               this._ranges = [];
-                               this.rangeCount = 0;
-                       };
-                       var _initCurrentRange = function(){
-                               var r = win.document.selection.createRange();
-                               var type=win.document.selection.type.toUpperCase();
-                               if(type == "CONTROL"){
-                                       //TODO: multiple range selection(?)
-                                       return new dijit.range.W3CRange(dijit.range.ie.decomposeControlRange(r));
-                               }else{
-                                       return new dijit.range.W3CRange(dijit.range.ie.decomposeTextRange(r));
-                               }
-                       };
-                       this.getRangeAt = function(i){
-                               return this._ranges[i];
-                       };
-                       this._getCurrentSelection = function(){
-                               this.removeAllRanges();
-                               var r=_initCurrentRange();
-                               if(r){
-                                       this.addRange(r, true);
-                               }
-                       };
-               },
-               decomposeControlRange: function(range){
-                       var firstnode = range.item(0), lastnode = range.item(range.length-1);
-                       var startContainer = firstnode.parentNode, endContainer = lastnode.parentNode;
-                       var startOffset = dijit.range.getIndex(firstnode, startContainer).o;
-                       var endOffset = dijit.range.getIndex(lastnode, endContainer).o+1;
-                       return [startContainer, startOffset,endContainer, endOffset];
-               },
-               getEndPoint: function(range, end){
-                       var atmrange = range.duplicate();
-                       atmrange.collapse(!end);
-                       var cmpstr = 'EndTo' + (end?'End':'Start');
-                       var parentNode = atmrange.parentElement();
-
-                       var startnode, startOffset, lastNode;
-                       if(parentNode.childNodes.length>0){
-                               dojo.every(parentNode.childNodes, function(node,i){
-                                       var calOffset;
-                                       if(node.nodeType != 3){
-                                               atmrange.moveToElementText(node);
-
-                                               if(atmrange.compareEndPoints(cmpstr,range) > 0){
-                                                       //startnode = node.previousSibling;
-                                                       if(lastNode && lastNode.nodeType == 3){
-                                                               //where shall we put the start? in the text node or after?
-                                                               startnode = lastNode;
-                                                               calOffset = true;
-                                                       }else{
-                                                               startnode = parentNode;
-                                                               startOffset = i;
-                                                               return false;
-                                                       }
-                                               }else{
-                                                       if(i == parentNode.childNodes.length-1){
-                                                               startnode = parentNode;
-                                                               startOffset = parentNode.childNodes.length;
-                                                               return false;
-                                                       }
-                                               }
-                                       }else{
-                                               if(i == parentNode.childNodes.length-1){//at the end of this node
-                                                       startnode = node;
-                                                       calOffset = true;
-                                               }
-                                       }
-               //                      try{
-                                               if(calOffset && startnode){
-                                                       var prevnode = dijit.range.adjacentNoneTextNode(startnode)[0];
-                                                       if(prevnode){
-                                                               startnode = prevnode.nextSibling;
-                                                       }else{
-                                                               startnode = parentNode.firstChild; //firstChild must be a text node
-                                                       }
-                                                       var prevnodeobj = dijit.range.adjacentNoneTextNode(startnode);
-                                                       prevnode = prevnodeobj[0];
-                                                       var lenoffset = prevnodeobj[1];
-                                                       if(prevnode){
-                                                               atmrange.moveToElementText(prevnode);
-                                                               atmrange.collapse(false);
-                                                       }else{
-                                                               atmrange.moveToElementText(parentNode);
-                                                       }
-                                                       atmrange.setEndPoint(cmpstr, range);
-                                                       startOffset = atmrange.text.length-lenoffset;
-
-                                                       return false;
-                                               }
-               //                      }catch(e){ debugger }
-                                       lastNode = node;
-                                       return true;
-                               });
-                       }else{
-                               startnode = parentNode;
-                               startOffset = 0;
-                       }
-
-                       //if at the end of startnode and we are dealing with start container, then
-                       //move the startnode to nextSibling if it is a text node
-                       //TODO: do this for end container?
-                       if(!end && startnode.nodeType == 1 && startOffset == startnode.childNodes.length){
-                               var nextnode=startnode.nextSibling;
-                               if(nextnode && nextnode.nodeType == 3){
-                                       startnode = nextnode;
-                                       startOffset = 0;
-                               }
-                       }
-                       return [startnode, startOffset];
-               },
-               setEndPoint: function(range, container, offset){
-                       //text node
-                       var atmrange = range.duplicate(), node, len;
-                       if(container.nodeType!=3){ //normal node
-                               if(offset > 0){
-                                       node = container.childNodes[offset-1];
-                                       if(node){
-                                               if(node.nodeType == 3){
-                                                       container = node;
-                                                       offset = node.length;
-                                                       //pass through
-                                               }else{
-                                                       if(node.nextSibling && node.nextSibling.nodeType == 3){
-                                                               container=node.nextSibling;
-                                                               offset=0;
-                                                               //pass through
-                                                       }else{
-                                                               atmrange.moveToElementText(node.nextSibling?node:container);
-                                                               var parent = node.parentNode;
-                                                               var tempNode = parent.insertBefore(node.ownerDocument.createTextNode(' '), node.nextSibling);
-                                                               atmrange.collapse(false);
-                                                               parent.removeChild(tempNode);
-                                                       }
-                                               }
-                                       }
-                               }else{
-                                       atmrange.moveToElementText(container);
-                                       atmrange.collapse(true);
-                               }
-                       }
-                       if(container.nodeType == 3){
-                               var prevnodeobj = dijit.range.adjacentNoneTextNode(container);
-                               var prevnode = prevnodeobj[0];
-                               len = prevnodeobj[1];
-                               if(prevnode){
-                                       atmrange.moveToElementText(prevnode);
-                                       atmrange.collapse(false);
-                                       //if contentEditable is not inherit, the above collapse won't make the end point
-                                       //in the correctly position: it always has a -1 offset, so compensate it
-                                       if(prevnode.contentEditable!='inherit'){
-                                               len++;
-                                       }
-                               }else{
-                                       atmrange.moveToElementText(container.parentNode);
-                                       atmrange.collapse(true);
-                               }
-
-                               offset += len;
-                               if(offset>0){
-                                       if(atmrange.move('character',offset) != offset){
-                                               console.error('Error when moving!');
-                                       }
-                               }
-                       }
-
-                       return atmrange;
-               },
-               decomposeTextRange: function(range){
-                       var tmpary = dijit.range.ie.getEndPoint(range);
-                       var startContainer = tmpary[0], startOffset = tmpary[1];
-                       var endContainer = tmpary[0], endOffset = tmpary[1];
-
-                       if(range.htmlText.length){
-                               if(range.htmlText == range.text){ //in the same text node
-                                       endOffset = startOffset+range.text.length;
-                               }else{
-                                       tmpary = dijit.range.ie.getEndPoint(range,true);
-                                       endContainer = tmpary[0], endOffset = tmpary[1];
-//                                     if(startContainer.tagName == "BODY"){
-//                                             startContainer = startContainer.firstChild;
-//                                     }
-                               }
-                       }
-                       return [startContainer, startOffset, endContainer, endOffset];
-               },
-               setRange: function(range, startContainer,
-                       startOffset, endContainer, endOffset, collapsed){
-                       var start=dijit.range.ie.setEndPoint(range, startContainer, startOffset);
-
-                       range.setEndPoint('StartToStart',start);
-                       if(!collapsed){
-                               var end=dijit.range.ie.setEndPoint(range, endContainer, endOffset);
-                       }
-                       range.setEndPoint('EndToEnd',end || start);
-
-                       return range;
-               }
-       }
-
-dojo.declare("dijit.range.W3CRange",null, {
-       constructor: function(){
-               if(arguments.length>0){
-                       this.setStart(arguments[0][0],arguments[0][1]);
-                       this.setEnd(arguments[0][2],arguments[0][3]);
-               }else{
-                       this.commonAncestorContainer = null;
-                       this.startContainer = null;
-                       this.startOffset = 0;
-                       this.endContainer = null;
-                       this.endOffset = 0;
-                       this.collapsed = true;
-               }
-       },
-       _updateInternal: function(){
-               if(this.startContainer !== this.endContainer){
-                       this.commonAncestorContainer = dijit.range.getCommonAncestor(this.startContainer, this.endContainer);
-               }else{
-                       this.commonAncestorContainer = this.startContainer;
-               }
-               this.collapsed = (this.startContainer === this.endContainer) && (this.startOffset == this.endOffset);
-       },
-       setStart: function(node, offset){
-               offset=parseInt(offset);
-               if(this.startContainer === node && this.startOffset == offset){
-                       return;
-               }
-               delete this._cachedBookmark;
-
-               this.startContainer = node;
-               this.startOffset = offset;
-               if(!this.endContainer){
-                       this.setEnd(node, offset);
-               }else{
-                       this._updateInternal();
-               }
-       },
-       setEnd: function(node, offset){
-               offset=parseInt(offset);
-               if(this.endContainer === node && this.endOffset == offset){
-                       return;
-               }
-               delete this._cachedBookmark;
-
-               this.endContainer = node;
-               this.endOffset = offset;
-               if(!this.startContainer){
-                       this.setStart(node, offset);
-               }else{
-                       this._updateInternal();
-               }
-       },
-       setStartAfter: function(node, offset){
-               this._setPoint('setStart', node, offset, 1);
-       },
-       setStartBefore: function(node, offset){
-               this._setPoint('setStart', node, offset, 0);
-       },
-       setEndAfter: function(node, offset){
-               this._setPoint('setEnd', node, offset, 1);
-       },
-       setEndBefore: function(node, offset){
-               this._setPoint('setEnd', node, offset, 0);
-       },
-       _setPoint: function(what, node, offset, ext){
-               var index = dijit.range.getIndex(node, node.parentNode).o;
-               this[what](node.parentNode, index.pop()+ext);
-       },
-       _getIERange: function(){
-               var r = (this._body || this.endContainer.ownerDocument.body).createTextRange();
-               dijit.range.ie.setRange(r, this.startContainer, this.startOffset, this.endContainer, this.endOffset, this.collapsed);
-               return r;
-       },
-       getBookmark: function(body){
-               this._getIERange();
-               return this._cachedBookmark;
-       },
-       _select: function(){
-               var r = this._getIERange();
-               r.select();
-       },
-       deleteContents: function(){
-               var r = this._getIERange();
-               r.pasteHTML('');
-               this.endContainer = this.startContainer;
-               this.endOffset = this.startOffset;
-               this.collapsed = true;
-       },
-       cloneRange: function(){
-               var r = new dijit.range.W3CRange([this.startContainer,this.startOffset,
-                       this.endContainer,this.endOffset]);
-               r._body = this._body;
-               return r;
-       },
-       detach: function(){
-               this._body = null;
-               this.commonAncestorContainer = null;
-               this.startContainer = null;
-               this.startOffset = 0;
-               this.endContainer = null;
-               this.endOffset = 0;
-               this.collapsed = true;
-}
-});
-} //if(!dijit.range._w3c)
-
-}
-
-if(!dojo._hasResource["dijit._editor.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.html"] = true;
-dojo.provide("dijit._editor.html");
-
-dijit._editor.escapeXml=function(/*String*/str, /*Boolean?*/noSingleQuotes){
-       // summary:
-       //              Adds escape sequences for special characters in XML: &<>"'
-       //              Optionally skips escapes for single quotes
-       str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
-       if(!noSingleQuotes){
-               str = str.replace(/'/gm, "&#39;");
-       }
-       return str; // string
-};
-
-dijit._editor.getNodeHtml=function(/* DomNode */node){
-       var output;
-       switch(node.nodeType){
-               case 1: //element node
-                       var lName = node.nodeName.toLowerCase();
-                       if(!lName || lName.charAt(0) == "/"){
-                               // IE does some strange things with malformed HTML input, like
-                               // treating a close tag </span> without an open tag <span>, as
-                               // a new tag with tagName of /span.  Corrupts output HTML, remove
-                               // them.  Other browsers don't prefix tags that way, so will
-                               // never show up.
-                               return "";
-                       }
-                       output = '<' + lName;
-
-                       //store the list of attributes and sort it to have the
-                       //attributes appear in the dictionary order
-                       var attrarray = [];
-                       var attr;
-                       if(dojo.isIE && node.outerHTML){
-                               var s = node.outerHTML;
-                               s = s.substr(0, s.indexOf('>'))
-                                       .replace(/(['"])[^"']*\1/g, ''); //to make the following regexp safe
-                               var reg = /(\b\w+)\s?=/g;
-                               var m, key;
-                               while((m = reg.exec(s))){
-                                       key = m[1];
-                                       if(key.substr(0,3) != '_dj'){
-                                               if(key == 'src' || key == 'href'){
-                                                       if(node.getAttribute('_djrealurl')){
-                                                               attrarray.push([key,node.getAttribute('_djrealurl')]);
-                                                               continue;
-                                                       }
-                                               }
-                                               var val, match;
-                                               switch(key){
-                                                       case 'style':
-                                                               val = node.style.cssText.toLowerCase();
-                                                               break;
-                                                       case 'class':
-                                                               val = node.className;
-                                                               break;
-                                                       case 'width':
-                                                               if(lName === "img"){
-                                                                       // This somehow gets lost on IE for IMG tags and the like
-                                                                       // and we have to find it in outerHTML, known IE oddity.
-                                                                       match=/width=(\S+)/i.exec(s);
-                                                                       if(match){
-                                                                               val = match[1];
-                                                                       }
-                                                                       break;
-                                                               }
-                                                       case 'height':
-                                                               if(lName === "img"){
-                                                                       // This somehow gets lost on IE for IMG tags and the like
-                                                                       // and we have to find it in outerHTML, known IE oddity.
-                                                                       match=/height=(\S+)/i.exec(s);
-                                                                       if(match){
-                                                                               val = match[1];
-                                                                       }
-                                                                       break;
-                                                               }
-                                                       default:
-                                                               val = node.getAttribute(key);
-                                               }
-                                               if(val != null){
-                                                       attrarray.push([key, val.toString()]);
-                                               }
-                                       }
-                               }
-                       }else{
-                               var i = 0;
-                               while((attr = node.attributes[i++])){
-                                       //ignore all attributes starting with _dj which are
-                                       //internal temporary attributes used by the editor
-                                       var n = attr.name;
-                                       if(n.substr(0,3) != '_dj' /*&&
-                                               (attr.specified == undefined || attr.specified)*/){
-                                               var v = attr.value;
-                                               if(n == 'src' || n == 'href'){
-                                                       if(node.getAttribute('_djrealurl')){
-                                                               v = node.getAttribute('_djrealurl');
-                                                       }
-                                               }
-                                               attrarray.push([n,v]);
-                                       }
-                               }
-                       }
-                       attrarray.sort(function(a,b){
-                               return a[0] < b[0] ? -1 : (a[0] == b[0] ? 0 : 1);
-                       });
-                       var j = 0;
-                       while((attr = attrarray[j++])){
-                               output += ' ' + attr[0] + '="' +
-                                       (dojo.isString(attr[1]) ? dijit._editor.escapeXml(attr[1], true) : attr[1]) + '"';
-                       }
-                       if(lName === "script"){
-                               // Browsers handle script tags differently in how you get content,
-                               // but innerHTML always seems to work, so insert its content that way
-                               // Yes, it's bad to allow script tags in the editor code, but some people
-                               // seem to want to do it, so we need to at least return them right.
-                               // other plugins/filters can strip them.
-                               output += '>' + node.innerHTML +'</' + lName + '>';
-                       }else{
-                               if(node.childNodes.length){
-                                       output += '>' + dijit._editor.getChildrenHtml(node)+'</' + lName +'>';
-                               }else{
-                                       switch(lName){
-                                               case 'br':
-                                               case 'hr':
-                                               case 'img':
-                                               case 'input':
-                                               case 'base':
-                                               case 'meta':
-                                               case 'area':
-                                               case 'basefont':
-                                                       // These should all be singly closed
-                                                       output += ' />';
-                                                       break;
-                                               default:
-                                                       // Assume XML style separate closure for everything else.
-                                                       output += '></' + lName + '>';
-                                       }
-                               }
-                       }
-                       break;
-               case 4: // cdata
-               case 3: // text
-                       // FIXME:
-                       output = dijit._editor.escapeXml(node.nodeValue, true);
-                       break;
-               case 8: //comment
-                       // FIXME:
-                       output = '<!--' + dijit._editor.escapeXml(node.nodeValue, true) + '-->';
-                       break;
-               default:
-                       output = "<!-- Element not recognized - Type: " + node.nodeType + " Name: " + node.nodeName + "-->";
-       }
-       return output;
-};
-
-dijit._editor.getChildrenHtml = function(/* DomNode */dom){
-       // summary:
-       //              Returns the html content of a DomNode and children
-       var out = "";
-       if(!dom){ return out; }
-       var nodes = dom["childNodes"] || dom;
-
-       //IE issue.
-       //If we have an actual node we can check parent relationships on for IE,
-       //We should check, as IE sometimes builds invalid DOMS.  If no parent, we can't check
-       //And should just process it and hope for the best.
-       var checkParent = !dojo.isIE || nodes !== dom;
-
-       var node, i = 0;
-       while((node = nodes[i++])){
-               //IE is broken.  DOMs are supposed to be a tree.  But in the case of malformed HTML, IE generates a graph
-               //meaning one node ends up with multiple references (multiple parents).  This is totally wrong and invalid, but
-               //such is what it is.  We have to keep track and check for this because otherise the source output HTML will have dups.
-               //No other browser generates a graph.  Leave it to IE to break a fundamental DOM rule.  So, we check the parent if we can
-               //If we can't, nothing more we can do other than walk it.
-               if(!checkParent || node.parentNode == dom){
-                       out += dijit._editor.getNodeHtml(node);
-               }
-       }
-       return out; // String
-};
-
-}
-
-if(!dojo._hasResource["dijit._editor.RichText"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.RichText"] = true;
-dojo.provide("dijit._editor.RichText");
-
-
-
-
-
-
-
-// used to restore content when user leaves this page then comes back
-// but do not try doing dojo.doc.write if we are using xd loading.
-// dojo.doc.write will only work if RichText.js is included in the dojo.js
-// file. If it is included in dojo.js and you want to allow rich text saving
-// for back/forward actions, then set dojo.config.allowXdRichTextSave = true.
-if(!dojo.config["useXDomain"] || dojo.config["allowXdRichTextSave"]){
-       if(dojo._postLoad){
-               (function(){
-                       var savetextarea = dojo.doc.createElement('textarea');
-                       savetextarea.id = dijit._scopeName + "._editor.RichText.savedContent";
-                       dojo.style(savetextarea, {
-                               display:'none',
-                               position:'absolute',
-                               top:"-100px",
-                               height:"3px",
-                               width:"3px"
-                       });
-                       dojo.body().appendChild(savetextarea);
-               })();
-       }else{
-               //dojo.body() is not available before onLoad is fired
-               try{
-                       dojo.doc.write('<textarea id="' + dijit._scopeName + '._editor.RichText.savedContent" ' +
-                               'style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;"></textarea>');
-               }catch(e){ }
-       }
-}
-
-dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
-       constructor: function(params){
-               // summary:
-               //              dijit._editor.RichText is the core of dijit.Editor, which provides basic
-               //              WYSIWYG editing features.
-               //
-               // description:
-               //              dijit._editor.RichText is the core of dijit.Editor, which provides basic
-               //              WYSIWYG editing features. It also encapsulates the differences
-               //              of different js engines for various browsers.  Do not use this widget
-               //              with an HTML &lt;TEXTAREA&gt; tag, since the browser unescapes XML escape characters,
-               //              like &lt;.  This can have unexpected behavior and lead to security issues
-               //              such as scripting attacks.
-               //
-               // tags:
-               //              private
-
-               // contentPreFilters: Function(String)[]
-               //              Pre content filter function register array.
-               //              these filters will be executed before the actual
-               //              editing area gets the html content.
-               this.contentPreFilters = [];
-
-               // contentPostFilters: Function(String)[]
-               //              post content filter function register array.
-               //              These will be used on the resulting html
-               //              from contentDomPostFilters. The resulting
-               //              content is the final html (returned by getValue()).
-               this.contentPostFilters = [];
-
-               // contentDomPreFilters: Function(DomNode)[]
-               //              Pre content dom filter function register array.
-               //              These filters are applied after the result from
-               //              contentPreFilters are set to the editing area.
-               this.contentDomPreFilters = [];
-
-               // contentDomPostFilters: Function(DomNode)[]
-               //              Post content dom filter function register array.
-               //              These filters are executed on the editing area dom.
-               //              The result from these will be passed to contentPostFilters.
-               this.contentDomPostFilters = [];
-
-               // editingAreaStyleSheets: dojo._URL[]
-               //              array to store all the stylesheets applied to the editing area
-               this.editingAreaStyleSheets = [];
-
-               // Make a copy of this.events before we start writing into it, otherwise we
-               // will modify the prototype which leads to bad things on pages w/multiple editors
-               this.events = [].concat(this.events);
-
-               this._keyHandlers = {};
-               this.contentPreFilters.push(dojo.hitch(this, "_preFixUrlAttributes"));
-               if(dojo.isMoz){
-                       this.contentPreFilters.push(this._normalizeFontStyle);
-                       this.contentPostFilters.push(this._removeMozBogus);
-               }
-               if(dojo.isWebKit){
-                       // Try to clean up WebKit bogus artifacts.  The inserted classes
-                       // made by WebKit sometimes messes things up.
-                       this.contentPreFilters.push(this._removeWebkitBogus);
-                       this.contentPostFilters.push(this._removeWebkitBogus);
-               }
-               if(dojo.isIE){
-                       // IE generates <strong> and <em> but we want to normalize to <b> and <i>
-                       this.contentPostFilters.push(this._normalizeFontStyle);
-               }
-               //this.contentDomPostFilters.push(this._postDomFixUrlAttributes);
-
-               if(params && dojo.isString(params.value)){
-                       this.value = params.value;
-               }
-
-               this.onLoadDeferred = new dojo.Deferred();
-       },
-
-       baseClass: "dijitEditor",
-
-       // inheritWidth: Boolean
-       //              whether to inherit the parent's width or simply use 100%
-       inheritWidth: false,
-
-       // focusOnLoad: [deprecated] Boolean
-       //              Focus into this widget when the page is loaded
-       focusOnLoad: false,
-
-       // name: String?
-       //              Specifies the name of a (hidden) <textarea> node on the page that's used to save
-       //              the editor content on page leave.   Used to restore editor contents after navigating
-       //              to a new page and then hitting the back button.
-       name: "",
-
-       // styleSheets: [const] String
-       //              semicolon (";") separated list of css files for the editing area
-       styleSheets: "",
-
-       // _content: [private] String
-       //              temporary content storage
-       _content: "",
-
-       // height: String
-       //              Set height to fix the editor at a specific height, with scrolling.
-       //              By default, this is 300px.  If you want to have the editor always
-       //              resizes to accommodate the content, use AlwaysShowToolbar plugin
-       //              and set height="".  If this editor is used within a layout widget,
-       //              set height="100%".
-       height: "300px",
-
-       // minHeight: String
-       //              The minimum height that the editor should have.
-       minHeight: "1em",
-
-       // isClosed: [private] Boolean
-       isClosed: true,
-
-       // isLoaded: [private] Boolean
-       isLoaded: false,
-
-       // _SEPARATOR: [private] String
-       //              Used to concat contents from multiple editors into a single string,
-       //              so they can be saved into a single <textarea> node.  See "name" attribute.
-       _SEPARATOR: "@@**%%__RICHTEXTBOUNDRY__%%**@@",
-
-       // onLoadDeferred: [protected] dojo.Deferred
-       //              Deferred which is fired when the editor finishes loading
-       onLoadDeferred: null,
-
-       // isTabIndent: Boolean
-       //              Make tab key and shift-tab indent and outdent rather than navigating.
-       //              Caution: sing this makes web pages inaccessible to users unable to use a mouse.
-       isTabIndent: false,
-
-       // disableSpellCheck: [const] Boolean
-       //              When true, disables the browser's native spell checking, if supported.
-       //              Works only in Firefox.
-       disableSpellCheck: false,
-
-       postCreate: function(){
-               if("textarea" == this.domNode.tagName.toLowerCase()){
-                       console.warn("RichText should not be used with the TEXTAREA tag.  See dijit._editor.RichText docs.");
-               }
-
-               this.inherited(arguments);
-
-               dojo.publish(dijit._scopeName + "._editor.RichText::init", [this]);
-               this.open();
-               this.setupDefaultShortcuts();
-       },
-
-       setupDefaultShortcuts: function(){
-               // summary:
-               //              Add some default key handlers
-               // description:
-               //              Overwrite this to setup your own handlers. The default
-               //              implementation does not use Editor commands, but directly
-               //              executes the builtin commands within the underlying browser
-               //              support.
-               // tags:
-               //              protected
-               var exec = dojo.hitch(this, function(cmd, arg){
-                       return function(){
-                               return !this.execCommand(cmd,arg);
-                       };
-               });
-
-               var ctrlKeyHandlers = {
-                       b: exec("bold"),
-                       i: exec("italic"),
-                       u: exec("underline"),
-                       a: exec("selectall"),
-                       s: function(){ this.save(true); },
-                       m: function(){ this.isTabIndent = !this.isTabIndent; },
-
-                       "1": exec("formatblock", "h1"),
-                       "2": exec("formatblock", "h2"),
-                       "3": exec("formatblock", "h3"),
-                       "4": exec("formatblock", "h4"),
-
-                       "\\": exec("insertunorderedlist")
-               };
-
-               if(!dojo.isIE){
-                       ctrlKeyHandlers.Z = exec("redo"); //FIXME: undo?
-               }
-
-               for(var key in ctrlKeyHandlers){
-                       this.addKeyHandler(key, true, false, ctrlKeyHandlers[key]);
-               }
-       },
-
-       // events: [private] String[]
-       //               events which should be connected to the underlying editing area
-       events: ["onKeyPress", "onKeyDown", "onKeyUp", "onClick"],
-
-       // captureEvents: [deprecated] String[]
-       //               Events which should be connected to the underlying editing
-       //               area, events in this array will be addListener with
-       //               capture=true.
-       // TODO: looking at the code I don't see any distinction between events and captureEvents,
-       // so get rid of this for 2.0 if not sooner
-       captureEvents: [],
-
-       _editorCommandsLocalized: false,
-       _localizeEditorCommands: function(){
-               // summary:
-               //              When IE is running in a non-English locale, the API actually changes,
-               //              so that we have to say (for example) danraku instead of p (for paragraph).
-               //              Handle that here.
-               // tags:
-               //              private
-               if(this._editorCommandsLocalized){
-                       return;
-               }
-               this._editorCommandsLocalized = true;
-
-               //in IE, names for blockformat is locale dependent, so we cache the values here
-
-               //if the normal way fails, we try the hard way to get the list
-
-               //do not use _cacheLocalBlockFormatNames here, as it will
-               //trigger security warning in IE7
-
-               //put p after div, so if IE returns Normal, we show it as paragraph
-               //We can distinguish p and div if IE returns Normal, however, in order to detect that,
-               //we have to call this.document.selection.createRange().parentElement() or such, which
-               //could slow things down. Leave it as it is for now
-               var formats = ['div', 'p', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'ul', 'address'];
-               var localhtml = "", format, i=0;
-               while((format=formats[i++])){
-                       //append a <br> after each element to separate the elements more reliably
-                       if(format.charAt(1) != 'l'){
-                               localhtml += "<"+format+"><span>content</span></"+format+"><br/>";
-                       }else{
-                               localhtml += "<"+format+"><li>content</li></"+format+"><br/>";
-                       }
-               }
-               //queryCommandValue returns empty if we hide editNode, so move it out of screen temporary
-               var div = dojo.doc.createElement('div');
-               dojo.style(div, {
-                       position: "absolute",
-                       top: "-2000px"
-               });
-               dojo.doc.body.appendChild(div);
-               div.innerHTML = localhtml;
-               var node = div.firstChild;
-               while(node){
-                       dijit._editor.selection.selectElement(node.firstChild);
-                       dojo.withGlobal(this.window, "selectElement", dijit._editor.selection, [node.firstChild]);
-                       var nativename = node.tagName.toLowerCase();
-                       this._local2NativeFormatNames[nativename] = document.queryCommandValue("formatblock");
-                       //this.queryCommandValue("formatblock");
-                       this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename;
-                       node = node.nextSibling.nextSibling;
-               }
-               dojo.body().removeChild(div);
-       },
-
-       open: function(/*DomNode?*/ element){
-               // summary:
-               //              Transforms the node referenced in this.domNode into a rich text editing
-               //              node.
-               // description:
-               //              Sets up the editing area asynchronously. This will result in
-               //              the creation and replacement with an iframe.
-               //
-               //              A dojo.Deferred object is created at this.onLoadDeferred, and
-               //              users may attach to it to be informed when the rich-text area
-               //              initialization is finalized.
-               // tags:
-               //              private
-
-               if(!this.onLoadDeferred || this.onLoadDeferred.fired >= 0){
-                       this.onLoadDeferred = new dojo.Deferred();
-               }
-
-               if(!this.isClosed){ this.close(); }
-               dojo.publish(dijit._scopeName + "._editor.RichText::open", [ this ]);
-
-               this._content = "";
-               if(arguments.length == 1 && element.nodeName){ // else unchanged
-                       this.domNode = element;
-               }
-
-               var dn = this.domNode;
-
-               // "html" will hold the innerHTML of the srcNodeRef and will be used to
-               // initialize the editor.
-               var html;
-
-               if(dojo.isString(this.value)){
-                       // Allow setting the editor content programmatically instead of
-                       // relying on the initial content being contained within the target
-                       // domNode.
-                       html = this.value;
-                       delete this.value;
-                       dn.innerHTML = "";
-               }else if(dn.nodeName && dn.nodeName.toLowerCase() == "textarea"){
-                       // if we were created from a textarea, then we need to create a
-                       // new editing harness node.
-                       var ta = (this.textarea = dn);
-                       this.name = ta.name;
-                       html = ta.value;
-                       dn = this.domNode = dojo.doc.createElement("div");
-                       dn.setAttribute('widgetId', this.id);
-                       ta.removeAttribute('widgetId');
-                       dn.cssText = ta.cssText;
-                       dn.className += " " + ta.className;
-                       dojo.place(dn, ta, "before");
-                       var tmpFunc = dojo.hitch(this, function(){
-                               //some browsers refuse to submit display=none textarea, so
-                               //move the textarea off screen instead
-                               dojo.style(ta, {
-                                       display: "block",
-                                       position: "absolute",
-                                       top: "-1000px"
-                               });
-
-                               if(dojo.isIE){ //nasty IE bug: abnormal formatting if overflow is not hidden
-                                       var s = ta.style;
-                                       this.__overflow = s.overflow;
-                                       s.overflow = "hidden";
-                               }
-                       });
-                       if(dojo.isIE){
-                               setTimeout(tmpFunc, 10);
-                       }else{
-                               tmpFunc();
-                       }
-
-                       if(ta.form){
-                               dojo.connect(ta.form, "onsubmit", this, function(){
-                                       // FIXME: should we be calling close() here instead?
-                                       ta.value = this.getValue();
-                               });
-                       }
-               }else{
-                       html = dijit._editor.getChildrenHtml(dn);
-                       dn.innerHTML = "";
-               }
-
-               var content = dojo.contentBox(dn);
-               this._oldHeight = content.h;
-               this._oldWidth = content.w;
-
-               this.savedContent = html;
-
-               // If we're a list item we have to put in a blank line to force the
-               // bullet to nicely align at the top of text
-               if(dn.nodeName && dn.nodeName == "LI"){
-                       dn.innerHTML = " <br>";
-               }
-       
-               // Construct the editor div structure.
-               this.header = dn.ownerDocument.createElement("div");
-               dn.appendChild(this.header);
-               this.editingArea = dn.ownerDocument.createElement("div");
-               dn.appendChild(this.editingArea);
-               this.footer = dn.ownerDocument.createElement("div");
-               dn.appendChild(this.footer);
-
-               // User has pressed back/forward button so we lost the text in the editor, but it's saved
-               // in a hidden <textarea> (which contains the data for all the editors on this page),
-               // so get editor value from there
-               if(this.name !== "" && (!dojo.config["useXDomain"] || dojo.config["allowXdRichTextSave"])){
-                       var saveTextarea = dojo.byId(dijit._scopeName + "._editor.RichText.savedContent");
-                       if(saveTextarea.value !== ""){
-                               var datas = saveTextarea.value.split(this._SEPARATOR), i=0, dat;
-                               while((dat=datas[i++])){
-                                       var data = dat.split(":");
-                                       if(data[0] == this.name){
-                                               html = data[1];
-                                               datas.splice(i, 1);     // TODO: this has no effect
-                                               break;
-                                       }
-                               }
-                       }
-
-                       // TODO: this is troublesome if this editor has been destroyed, should have global handler.
-                       // TODO: need to clear <textarea> in global handler
-                       dojo.addOnUnload(dojo.hitch(this, "_saveContent"));
-               }
-
-               this.isClosed = false;
-
-               var ifr = (this.editorObject = this.iframe = dojo.doc.createElement('iframe'));
-               ifr.id = this.id+"_iframe";
-               this._iframeSrc = this._getIframeDocTxt();
-               ifr.style.border = "none";
-               ifr.style.width = "100%";
-               if(this._layoutMode){
-                       // iframe should be 100% height, thus getting it's height from surrounding
-                       // <div> (which has the correct height set by Editor)
-                       ifr.style.height = "100%";
-               }else{
-                       if(dojo.isIE >= 7){
-                               if(this.height){
-                                       ifr.style.height = this.height;
-                               }
-                               if(this.minHeight){
-                                       ifr.style.minHeight = this.minHeight;
-                               }
-                       }else{
-                               ifr.style.height = this.height ? this.height : this.minHeight;
-                       }
-               }
-               ifr.frameBorder = 0;
-               ifr._loadFunc = dojo.hitch( this, function(win){
-                       this.window = win;
-                       this.document = this.window.document;
-
-                       if(dojo.isIE){
-                               this._localizeEditorCommands();
-                       }
-                       
-                       // Do final setup and set initial contents of editor
-                       this.onLoad(html);
-               });
-
-               // Set the iframe's initial (blank) content.
-               var s = 'javascript:parent.' + dijit._scopeName + '.byId("'+this.id+'")._iframeSrc';
-               ifr.setAttribute('src', s);
-               this.editingArea.appendChild(ifr);
-
-               // TODO: this is a guess at the default line-height, kinda works
-               if(dn.nodeName == "LI"){
-                       dn.lastChild.style.marginTop = "-1.2em";
-               }
-
-               dojo.addClass(this.domNode, this.baseClass);
-       },
-
-       //static cache variables shared among all instance of this class
-       _local2NativeFormatNames: {},
-       _native2LocalFormatNames: {},
-
-       _getIframeDocTxt: function(){
-               // summary:
-               //              Generates the boilerplate text of the document inside the iframe (ie, <html><head>...</head><body/></html>).
-               //              Editor content (if not blank) should be added afterwards.
-               // tags:
-               //              private
-               var _cs = dojo.getComputedStyle(this.domNode);
-
-               // The contents inside of <body>.  The real contents are set later via a call to setValue().
-               var html = "";
-               var setBodyId = true;
-               if(dojo.isIE || (!this.height && !dojo.isMoz)){
-                       // In auto-expand mode, need a wrapper div for AlwaysShowToolbar plugin to correctly
-                       // expand/contract the editor as the content changes.
-                       html = "<div id='dijitEditorBody'></div>";
-                       setBodyId = false;
-               }else if(dojo.isMoz){
-                       // workaround bug where can't select then delete text (until user types something
-                       // into the editor)... and/or issue where typing doesn't erase selected text
-                       this._cursorToStart = true;
-                       html = "&nbsp;";
-               }
-
-               var font = [ _cs.fontWeight, _cs.fontSize, _cs.fontFamily ].join(" ");
-
-               // line height is tricky - applying a units value will mess things up.
-               // if we can't get a non-units value, bail out.
-               var lineHeight = _cs.lineHeight;
-               if(lineHeight.indexOf("px") >= 0){
-                       lineHeight = parseFloat(lineHeight)/parseFloat(_cs.fontSize);
-                       // console.debug(lineHeight);
-               }else if(lineHeight.indexOf("em")>=0){
-                       lineHeight = parseFloat(lineHeight);
-               }else{
-                       // If we can't get a non-units value, just default
-                       // it to the CSS spec default of 'normal'.  Seems to
-                       // work better, esp on IE, than '1.0'
-                       lineHeight = "normal";
-               }
-               var userStyle = "";
-               var self = this;
-               this.style.replace(/(^|;)\s*(line-|font-?)[^;]+/ig, function(match){ 
-                       match = match.replace(/^;/ig,"") + ';'; 
-                       var s = match.split(":")[0];
-                       if(s){
-                               s = dojo.trim(s);
-                               s = s.toLowerCase();
-                               var i;
-                               var sC = "";
-                               for(i = 0; i < s.length; i++){
-                                       var c = s.charAt(i);
-                                       switch(c){
-                                               case "-":
-                                                       i++;
-                                                       c = s.charAt(i).toUpperCase();
-                                               default:
-                                                       sC += c;
-                                       }
-                               }
-                               dojo.style(self.domNode, sC, "");
-                       }
-                       userStyle += match + ';'; 
-               });
-
-
-               // need to find any associated label element and update iframe document title
-               var label=dojo.query('label[for="'+this.id+'"]');
-
-               return [
-                       this.isLeftToRight() ? "<html>\n<head>\n" : "<html dir='rtl'>\n<head>\n",
-                       (dojo.isMoz && label.length ? "<title>" + label[0].innerHTML + "</title>\n" : ""),
-                       "<meta http-equiv='Content-Type' content='text/html'>\n",
-                       "<style>\n",
-                       "\tbody,html {\n",
-                       "\t\tbackground:transparent;\n",
-                       "\t\tpadding: 1px 0 0 0;\n",
-                       "\t\tmargin: -1px 0 0 0;\n", // remove extraneous vertical scrollbar on safari and firefox
-
-                       // Set the html/body sizing.  Webkit always needs this, other browsers
-                       // only set it when height is defined (not auto-expanding), otherwise 
-                       // scrollers do not appear.
-                       ((dojo.isWebKit)?"\t\twidth: 100%;\n":""),
-                       ((dojo.isWebKit)?"\t\theight: 100%;\n":""),
-                       "\t}\n",
-                       
-                       // TODO: left positioning will cause contents to disappear out of view
-                       //         if it gets too wide for the visible area
-                       "\tbody{\n",
-                       "\t\ttop:0px;\n",
-                       "\t\tleft:0px;\n",
-                       "\t\tright:0px;\n",
-                       "\t\tfont:", font, ";\n",
-                               ((this.height||dojo.isOpera) ? "" : "\t\tposition: fixed;\n"),
-                       // FIXME: IE 6 won't understand min-height?
-                       "\t\tmin-height:", this.minHeight, ";\n",
-                       "\t\tline-height:", lineHeight,";\n",
-                       "\t}\n",
-                       "\tp{ margin: 1em 0; }\n",
-                       
-                       // Determine how scrollers should be applied.  In autoexpand mode (height = "") no scrollers on y at all.
-                       // But in fixed height mode we want both x/y scrollers.  Also, if it's using wrapping div and in auto-expand
-                       // (Mainly IE) we need to kill the y scroller on body and html.
-                       (!setBodyId && !this.height ? "\tbody,html {overflow-y: hidden;}\n" : ""),
-                       "\t#dijitEditorBody{overflow-x: auto; overflow-y:" + (this.height ? "auto;" : "hidden;") + "}\n",
-                       "\tli > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; }\n",
-                       "\tli{ min-height:1.2em; }\n",
-                       "</style>\n",
-                       this._applyEditingAreaStyleSheets(),"\n",
-                       "</head>\n<body ",
-                       (setBodyId?"id='dijitEditorBody' ":""),
-                       "onload='frameElement._loadFunc(window,document)' style='"+userStyle+"'>", html, "</body>\n</html>"
-               ].join(""); // String
-       },
-
-       _applyEditingAreaStyleSheets: function(){
-               // summary:
-               //              apply the specified css files in styleSheets
-               // tags:
-               //              private
-               var files = [];
-               if(this.styleSheets){
-                       files = this.styleSheets.split(';');
-                       this.styleSheets = '';
-               }
-
-               //empty this.editingAreaStyleSheets here, as it will be filled in addStyleSheet
-               files = files.concat(this.editingAreaStyleSheets);
-               this.editingAreaStyleSheets = [];
-
-               var text='', i=0, url;
-               while((url=files[i++])){
-                       var abstring = (new dojo._Url(dojo.global.location, url)).toString();
-                       this.editingAreaStyleSheets.push(abstring);
-                       text += '<link rel="stylesheet" type="text/css" href="'+abstring+'"/>';
-               }
-               return text;
-       },
-
-       addStyleSheet: function(/*dojo._Url*/ uri){
-               // summary:
-               //              add an external stylesheet for the editing area
-               // uri:
-               //              A dojo.uri.Uri pointing to the url of the external css file
-               var url=uri.toString();
-
-               //if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
-               if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
-                       url = (new dojo._Url(dojo.global.location, url)).toString();
-               }
-
-               if(dojo.indexOf(this.editingAreaStyleSheets, url) > -1){
-//                     console.debug("dijit._editor.RichText.addStyleSheet: Style sheet "+url+" is already applied");
-                       return;
-               }
-
-               this.editingAreaStyleSheets.push(url);
-               this.onLoadDeferred.addCallback(dojo.hitch(function(){
-                       if(this.document.createStyleSheet){ //IE
-                               this.document.createStyleSheet(url);
-                       }else{ //other browser
-                               var head = this.document.getElementsByTagName("head")[0];
-                               var stylesheet = this.document.createElement("link");
-                               stylesheet.rel="stylesheet";
-                               stylesheet.type="text/css";
-                               stylesheet.href=url;
-                               head.appendChild(stylesheet);
-                       }
-               }));
-       },
-
-       removeStyleSheet: function(/*dojo._Url*/ uri){
-               // summary:
-               //              remove an external stylesheet for the editing area
-               var url=uri.toString();
-               //if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
-               if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
-                       url = (new dojo._Url(dojo.global.location, url)).toString();
-               }
-               var index = dojo.indexOf(this.editingAreaStyleSheets, url);
-               if(index == -1){
-//                     console.debug("dijit._editor.RichText.removeStyleSheet: Style sheet "+url+" has not been applied");
-                       return;
-               }
-               delete this.editingAreaStyleSheets[index];
-               dojo.withGlobal(this.window,'query', dojo, ['link:[href="'+url+'"]']).orphan();
-       },
-
-       // disabled: Boolean
-       //              The editor is disabled; the text cannot be changed.
-       disabled: false,
-
-       _mozSettingProps: {'styleWithCSS':false},
-       _setDisabledAttr: function(/*Boolean*/ value){
-               this.disabled = value;
-               if(!this.isLoaded){ return; } // this method requires init to be complete
-               value = !!value;
-               if(dojo.isIE || dojo.isWebKit || dojo.isOpera){
-                       var preventIEfocus = dojo.isIE && (this.isLoaded || !this.focusOnLoad);
-                       if(preventIEfocus){ this.editNode.unselectable = "on"; }
-                       this.editNode.contentEditable = !value;
-                       if(preventIEfocus){
-                               var _this = this;
-                               setTimeout(function(){ _this.editNode.unselectable = "off"; }, 0);
-                       }
-               }else{ //moz
-                       try{
-                               this.document.designMode=(value?'off':'on');
-                       }catch(e){ return; } // ! _disabledOK
-                       if(!value && this._mozSettingProps){
-                               var ps = this._mozSettingProps;
-                               for(var n in ps){
-                                       if(ps.hasOwnProperty(n)){
-                                               try{
-                                                       this.document.execCommand(n,false,ps[n]);
-                                               }catch(e2){}
-                                       }
-                               }
-                       }
-//                     this.document.execCommand('contentReadOnly', false, value);
-//                             if(value){
-//                                     this.blur(); //to remove the blinking caret
-//                             }
-               }
-               this._disabledOK = true;
-       },
-
-/* Event handlers
- *****************/
-
-       onLoad: function(/*String*/ html){
-               // summary:
-               //              Handler after the iframe finishes loading.
-               // html: String
-               //              Editor contents should be set to this value
-               // tags:
-               //              protected
-
-               // TODO: rename this to _onLoad, make empty public onLoad() method, deprecate/make protected onLoadDeferred handler?
-
-               if(!this.window.__registeredWindow){
-                       this.window.__registeredWindow = true;
-                       this._iframeRegHandle = dijit.registerIframe(this.iframe);
-               }
-               if(!dojo.isIE && (this.height || dojo.isMoz)){
-                       this.editNode=this.document.body;
-               }else{
-                       // there's a wrapper div around the content, see _getIframeDocTxt().
-                       this.editNode=this.document.body.firstChild;
-                       var _this = this;
-                       if(dojo.isIE){ // #4996 IE wants to focus the BODY tag
-                               var tabStop = (this.tabStop = dojo.doc.createElement('<div tabIndex=-1>'));
-                               this.editingArea.appendChild(tabStop);
-                               this.iframe.onfocus = function(){ _this.editNode.setActive(); };
-                       }
-               }
-               this.focusNode = this.editNode; // for InlineEditBox
-
-
-               var events = this.events.concat(this.captureEvents);
-               var ap = this.iframe ? this.document : this.editNode;
-               dojo.forEach(events, function(item){
-                       this.connect(ap, item.toLowerCase(), item);
-               }, this);
-
-               if(dojo.isIE){ // IE contentEditable
-                       this.connect(this.document, "onmousedown", "_onIEMouseDown"); // #4996 fix focus
-
-                       // give the node Layout on IE
-                       // TODO: this may no longer be needed, since we've reverted IE to using an iframe,
-                       // not contentEditable.   Removing it would also probably remove the need for creating
-                       // the extra <div> in _getIframeDocTxt()
-                       this.editNode.style.zoom = 1.0;
-               }else{
-                       this.connect(this.document, "onmousedown", function(){
-                               // Clear the moveToStart focus, as mouse 
-                               // down will set cursor point.  Required to properly
-                               // work with selection/position driven plugins and clicks in
-                               // the window. refs: #10678
-                               delete this._cursorToStart;
-                       }); 
-               }
-
-               if(dojo.isWebKit){
-                       //WebKit sometimes doesn't fire right on selections, so the toolbar
-                       //doesn't update right.  Therefore, help it out a bit with an additional
-                       //listener.  A mouse up will typically indicate a display change, so fire this
-                       //and get the toolbar to adapt.  Reference: #9532
-                       this._webkitListener = this.connect(this.document, "onmouseup", "onDisplayChanged");
-               }
-
-               if(dojo.isIE){
-                       // Try to make sure 'hidden' elements aren't visible in edit mode (like browsers other than IE
-                       // do).  See #9103
-                       try{
-                               this.document.execCommand('RespectVisibilityInDesign', true, null);
-                       }catch(e){/* squelch */}
-               }
-
-               this.isLoaded = true;
-
-               this.set('disabled', this.disabled); // initialize content to editable (or not)
-
-               // Note that setValue() call will only work after isLoaded is set to true (above)
-
-               // Set up a function to allow delaying the setValue until a callback is fired
-               // This ensures extensions like dijit.Editor have a way to hold the value set 
-               // until plugins load (and do things like register filters.
-               var setContent = dojo.hitch(this, function(){
-                       this.setValue(html);
-                       if(this.onLoadDeferred){
-                               this.onLoadDeferred.callback(true);
-                       }
-                       this.onDisplayChanged();
-                       if(this.focusOnLoad){
-                               // after the document loads, then set focus after updateInterval expires so that
-                               // onNormalizedDisplayChanged has run to avoid input caret issues
-                               dojo.addOnLoad(dojo.hitch(this, function(){ setTimeout(dojo.hitch(this, "focus"), this.updateInterval); }));
-                       }
-                       // Save off the initial content now
-                       this.savedContent = this.getValue(true);
-               });
-               if(this.setValueDeferred){
-                       this.setValueDeferred.addCallback(setContent);
-               }else{
-                       setContent();
-               }
-
-       },
-
-       onKeyDown: function(/* Event */ e){
-               // summary:
-               //              Handler for onkeydown event
-               // tags:
-               //              protected
-
-               // we need this event at the moment to get the events from control keys
-               // such as the backspace. It might be possible to add this to Dojo, so that
-               // keyPress events can be emulated by the keyDown and keyUp detection.
-
-               if(e.keyCode === dojo.keys.TAB && this.isTabIndent ){
-                       dojo.stopEvent(e); //prevent tab from moving focus out of editor
-
-                       // FIXME: this is a poor-man's indent/outdent. It would be
-                       // better if it added 4 "&nbsp;" chars in an undoable way.
-                       // Unfortunately pasteHTML does not prove to be undoable
-                       if(this.queryCommandEnabled((e.shiftKey ? "outdent" : "indent"))){
-                               this.execCommand((e.shiftKey ? "outdent" : "indent"));
-                       }
-               }
-               if(dojo.isIE){
-                       if(e.keyCode == dojo.keys.TAB && !this.isTabIndent){
-                               if(e.shiftKey && !e.ctrlKey && !e.altKey){
-                                       // focus the BODY so the browser will tab away from it instead
-                                       this.iframe.focus();
-                               }else if(!e.shiftKey && !e.ctrlKey && !e.altKey){
-                                       // focus the BODY so the browser will tab away from it instead
-                                       this.tabStop.focus();
-                               }
-                       }else if(e.keyCode === dojo.keys.BACKSPACE && this.document.selection.type === "Control"){
-                               // IE has a bug where if a non-text object is selected in the editor,
-                               // hitting backspace would act as if the browser's back button was
-                               // clicked instead of deleting the object. see #1069
-                               dojo.stopEvent(e);
-                               this.execCommand("delete");
-                       }else if((65 <= e.keyCode && e.keyCode <= 90) ||
-                               (e.keyCode>=37 && e.keyCode<=40) // FIXME: get this from connect() instead!
-                       ){ //arrow keys
-                               e.charCode = e.keyCode;
-                               this.onKeyPress(e);
-                       }
-               }
-               return true;
-       },
-
-       onKeyUp: function(e){
-               // summary:
-               //              Handler for onkeyup event
-               // tags:
-               //      callback
-               return;
-       },
-
-       setDisabled: function(/*Boolean*/ disabled){
-               // summary:
-               //              Deprecated, use set('disabled', ...) instead.
-               // tags:
-               //              deprecated
-               dojo.deprecated('dijit.Editor::setDisabled is deprecated','use dijit.Editor::attr("disabled",boolean) instead', 2.0);
-               this.set('disabled',disabled);
-       },
-       _setValueAttr: function(/*String*/ value){
-               // summary:
-               //      Registers that attr("value", foo) should call setValue(foo)
-               this.setValue(value);
-       },
-       _setDisableSpellCheckAttr: function(/*Boolean*/ disabled){
-               if(this.document){
-                       dojo.attr(this.document.body, "spellcheck", !disabled);
-               }else{
-                       // try again after the editor is finished loading
-                       this.onLoadDeferred.addCallback(dojo.hitch(this, function(){
-                               dojo.attr(this.document.body, "spellcheck", !disabled);
-                       }));
-               }
-               this.disableSpellCheck = disabled;
-       },
-
-       onKeyPress: function(e){
-               // summary:
-               //              Handle the various key events
-               // tags:
-               //              protected
-
-               var c = (e.keyChar && e.keyChar.toLowerCase()) || e.keyCode,
-                       handlers = this._keyHandlers[c],
-                       args = arguments;
-
-               if(handlers && !e.altKey){
-                       dojo.some(handlers, function(h){
-                               // treat meta- same as ctrl-, for benefit of mac users
-                               if(!(h.shift ^ e.shiftKey) && !(h.ctrl ^ (e.ctrlKey||e.metaKey))){
-                                       if(!h.handler.apply(this, args)){
-                                               e.preventDefault();
-                                       }
-                                       return true;
-                               }
-                       }, this);
-               }
-
-               // function call after the character has been inserted
-               if(!this._onKeyHitch){
-                       this._onKeyHitch = dojo.hitch(this, "onKeyPressed");
-               }
-               setTimeout(this._onKeyHitch, 1);
-               return true;
-       },
-
-       addKeyHandler: function(/*String*/ key, /*Boolean*/ ctrl, /*Boolean*/ shift, /*Function*/ handler){
-               // summary:
-               //              Add a handler for a keyboard shortcut
-               // description:
-               //              The key argument should be in lowercase if it is a letter character
-               // tags:
-               //              protected
-               if(!dojo.isArray(this._keyHandlers[key])){
-                       this._keyHandlers[key] = [];
-               }
-               //TODO: would be nice to make this a hash instead of an array for quick lookups
-               this._keyHandlers[key].push({
-                       shift: shift || false,
-                       ctrl: ctrl || false,
-                       handler: handler
-               });
-       },
-
-       onKeyPressed: function(){
-               // summary:
-               //              Handler for after the user has pressed a key, and the display has been updated.
-               //              (Runs on a timer so that it runs after the display is updated)
-               // tags:
-               //              private
-               this.onDisplayChanged(/*e*/); // can't pass in e
-       },
-
-       onClick: function(/*Event*/ e){
-               // summary:
-               //              Handler for when the user clicks.
-               // tags:
-               //              private
-
-               // console.info('onClick',this._tryDesignModeOn);
-               this.onDisplayChanged(e);
-       },
-
-       _onIEMouseDown: function(/*Event*/ e){
-               // summary:
-               //              IE only to prevent 2 clicks to focus
-               // tags:
-               //              protected
-
-               if(!this._focused && !this.disabled){
-                       this.focus();
-               }
-       },
-
-       _onBlur: function(e){
-               // summary:
-               //              Called from focus manager when focus has moved away from this editor
-               // tags:
-               //              protected
-
-               // console.info('_onBlur')
-
-               this.inherited(arguments);
-               var _c=this.getValue(true);
-
-               if(_c!=this.savedContent){
-                       this.onChange(_c);
-                       this.savedContent=_c;
-               }
-       },
-       _onFocus: function(/*Event*/ e){
-               // summary:
-               //              Called from focus manager when focus has moved into this editor
-               // tags:
-               //              protected
-
-               // console.info('_onFocus')
-               if(!this.disabled){
-                       if(!this._disabledOK){
-                               this.set('disabled', false);
-                       }
-                       this.inherited(arguments);
-               }
-       },
-
-       // TODO: why is this needed - should we deprecate this ?
-       blur: function(){
-               // summary:
-               //              Remove focus from this instance.
-               // tags:
-               //              deprecated
-               if(!dojo.isIE && this.window.document.documentElement && this.window.document.documentElement.focus){
-                       this.window.document.documentElement.focus();
-               }else if(dojo.doc.body.focus){
-                       dojo.doc.body.focus();
-               }
-       },
-
-       focus: function(){
-               // summary:
-               //              Move focus to this editor
-               if(!this.isLoaded){
-                       this.focusOnLoad = true;
-                       return;
-               }
-               if(this._cursorToStart){ 
-                       delete this._cursorToStart;
-                       if(this.editNode.childNodes){
-                               this.placeCursorAtStart(); // this calls focus() so return
-                               return;
-                       }
-               }
-               if(!dojo.isIE){
-                       dijit.focus(this.iframe);
-               }else if(this.editNode && this.editNode.focus){
-                       // editNode may be hidden in display:none div, lets just punt in this case
-                       //this.editNode.focus(); -> causes IE to scroll always (strict and quirks mode) to the top the Iframe
-                       // if we fire the event manually and let the browser handle the focusing, the latest
-                       // cursor position is focused like in FF
-                       this.iframe.fireEvent('onfocus', document.createEventObject()); // createEventObject only in IE
-               //      }else{
-               // TODO: should we throw here?
-               // console.debug("Have no idea how to focus into the editor!");
-               }
-       },
-
-       // _lastUpdate: 0,
-       updateInterval: 200,
-       _updateTimer: null,
-       onDisplayChanged: function(/*Event*/ e){
-               // summary:
-               //              This event will be fired everytime the display context
-               //              changes and the result needs to be reflected in the UI.
-               // description:
-               //              If you don't want to have update too often,
-               //              onNormalizedDisplayChanged should be used instead
-               // tags:
-               //              private
-
-               // var _t=new Date();
-               if(this._updateTimer){
-                       clearTimeout(this._updateTimer);
-               }
-               if(!this._updateHandler){
-                       this._updateHandler = dojo.hitch(this,"onNormalizedDisplayChanged");
-               }
-               this._updateTimer = setTimeout(this._updateHandler, this.updateInterval);
-       },
-       onNormalizedDisplayChanged: function(){
-               // summary:
-               //              This event is fired every updateInterval ms or more
-               // description:
-               //              If something needs to happen immediately after a
-               //              user change, please use onDisplayChanged instead.
-               // tags:
-               //              private
-               delete this._updateTimer;
-       },
-       onChange: function(newContent){
-               // summary:
-               //              This is fired if and only if the editor loses focus and
-               //              the content is changed.
-       },
-       _normalizeCommand: function(/*String*/ cmd, /*Anything?*/argument){
-               // summary:
-               //              Used as the advice function by dojo.connect to map our
-               //              normalized set of commands to those supported by the target
-               //              browser.
-               // tags:
-               //              private
-
-               var command = cmd.toLowerCase();
-               if(command == "formatblock"){
-                       if(dojo.isSafari && argument === undefined){ command = "heading"; }
-               }else if(command == "hilitecolor" && !dojo.isMoz){
-                       command = "backcolor";
-               }
-
-               return command;
-       },
-
-       _qcaCache: {},
-       queryCommandAvailable: function(/*String*/ command){
-               // summary:
-               //              Tests whether a command is supported by the host. Clients
-               //              SHOULD check whether a command is supported before attempting
-               //              to use it, behaviour for unsupported commands is undefined.
-               // command:
-               //              The command to test for
-               // tags:
-               //              private
-
-               // memoizing version. See _queryCommandAvailable for computing version
-               var ca = this._qcaCache[command];
-               if(ca !== undefined){ return ca; }
-               return (this._qcaCache[command] = this._queryCommandAvailable(command));
-       },
-
-       _queryCommandAvailable: function(/*String*/ command){
-               // summary:
-               //              See queryCommandAvailable().
-               // tags:
-               //              private
-
-               var ie = 1;
-               var mozilla = 1 << 1;
-               var webkit = 1 << 2;
-               var opera = 1 << 3;
-               var webkit420 = 1 << 4;
-
-               function isSupportedBy(browsers){
-                       return {
-                               ie: Boolean(browsers & ie),
-                               mozilla: Boolean(browsers & mozilla),
-                               webkit: Boolean(browsers & webkit),
-                               webkit420: Boolean(browsers & webkit420),
-                               opera: Boolean(browsers & opera)
-                       };
-               }
-
-               var supportedBy = null;
-
-               switch(command.toLowerCase()){
-                       case "bold": case "italic": case "underline":
-                       case "subscript": case "superscript":
-                       case "fontname": case "fontsize":
-                       case "forecolor": case "hilitecolor":
-                       case "justifycenter": case "justifyfull": case "justifyleft":
-                       case "justifyright": case "delete": case "selectall": case "toggledir":
-                               supportedBy = isSupportedBy(mozilla | ie | webkit | opera);
-                               break;
-
-                       case "createlink": case "unlink": case "removeformat":
-                       case "inserthorizontalrule": case "insertimage":
-                       case "insertorderedlist": case "insertunorderedlist":
-                       case "indent": case "outdent": case "formatblock":
-                       case "inserthtml": case "undo": case "redo": case "strikethrough": case "tabindent":
-                               supportedBy = isSupportedBy(mozilla | ie | opera | webkit420);
-                               break;
-
-                       case "blockdirltr": case "blockdirrtl":
-                       case "dirltr": case "dirrtl":
-                       case "inlinedirltr": case "inlinedirrtl":
-                               supportedBy = isSupportedBy(ie);
-                               break;
-                       case "cut": case "copy": case "paste":
-                               supportedBy = isSupportedBy( ie | mozilla | webkit420);
-                               break;
-
-                       case "inserttable":
-                               supportedBy = isSupportedBy(mozilla | ie);
-                               break;
-
-                       case "insertcell": case "insertcol": case "insertrow":
-                       case "deletecells": case "deletecols": case "deleterows":
-                       case "mergecells": case "splitcell":
-                               supportedBy = isSupportedBy(ie | mozilla);
-                               break;
-
-                       default: return false;
-               }
-
-               return (dojo.isIE && supportedBy.ie) ||
-                       (dojo.isMoz && supportedBy.mozilla) ||
-                       (dojo.isWebKit && supportedBy.webkit) ||
-                       (dojo.isWebKit > 420 && supportedBy.webkit420) ||
-                       (dojo.isOpera && supportedBy.opera);    // Boolean return true if the command is supported, false otherwise
-       },
-
-       execCommand: function(/*String*/ command, argument){
-               // summary:
-               //              Executes a command in the Rich Text area
-               // command:
-               //              The command to execute
-               // argument:
-               //              An optional argument to the command
-               // tags:
-               //              protected
-               var returnValue;
-
-               //focus() is required for IE to work
-               //In addition, focus() makes sure after the execution of
-               //the command, the editor receives the focus as expected
-               this.focus();
-
-               command = this._normalizeCommand(command, argument);
-
-
-               if(argument !== undefined){
-                       if(command == "heading"){
-                               throw new Error("unimplemented");
-                       }else if((command == "formatblock") && dojo.isIE){
-                               argument = '<'+argument+'>';
-                       }
-               }
-
-               //Check to see if we have any over-rides for commands, they will be functions on this
-               //widget of the form _commandImpl.  If we don't, fall through to the basic native
-               //exec command of the browser.
-               var implFunc = "_" + command + "Impl";
-               if(this[implFunc]){
-                       returnValue = this[implFunc](argument);
-               }else{
-                       argument = arguments.length > 1 ? argument : null;
-                       if(argument || command!="createlink"){
-                               returnValue = this.document.execCommand(command, false, argument);
-                       }
-               }
-
-               this.onDisplayChanged();
-               return returnValue;
-       },
-
-       queryCommandEnabled: function(/*String*/ command){
-               // summary:
-               //              Check whether a command is enabled or not.
-               // tags:
-               //              protected
-               if(this.disabled || !this._disabledOK){ return false; }
-               command = this._normalizeCommand(command);
-               if(dojo.isMoz || dojo.isWebKit){
-                       if(command == "unlink"){ // mozilla returns true always
-                               // console.debug(this._sCall("hasAncestorElement", ['a']));
-                               return this._sCall("hasAncestorElement", ["a"]);
-                       }else if(command == "inserttable"){
-                               return true;
-                       }
-               }
-               //see #4109
-               if(dojo.isWebKit){
-                       if(command == "copy"){
-                               command = "cut";
-                       }else if(command == "paste"){
-                               return true;
-                       }
-               }
-
-               var elem = dojo.isIE ? this.document.selection.createRange() : this.document;
-               try{
-                       return elem.queryCommandEnabled(command);
-               }catch(e){
-                       //Squelch, occurs if editor is hidden on FF 3 (and maybe others.)
-                       return false;
-               }
-
-       },
-
-       queryCommandState: function(command){
-               // summary:
-               //              Check the state of a given command and returns true or false.
-               // tags:
-               //              protected
-
-               if(this.disabled || !this._disabledOK){ return false; }
-               command = this._normalizeCommand(command);
-               try{
-                       return this.document.queryCommandState(command);
-               }catch(e){
-                       //Squelch, occurs if editor is hidden on FF 3 (and maybe others.)
-                       return false;
-               }
-       },
-
-       queryCommandValue: function(command){
-               // summary:
-               //              Check the value of a given command. This matters most for
-               //              custom selections and complex values like font value setting.
-               // tags:
-               //              protected
-
-               if(this.disabled || !this._disabledOK){ return false; }
-               var r;
-               command = this._normalizeCommand(command);
-               if(dojo.isIE && command == "formatblock"){
-                       r = this._native2LocalFormatNames[this.document.queryCommandValue(command)];
-               }else if(dojo.isMoz && command === "hilitecolor"){
-                       var oldValue;
-                       try{
-                               oldValue = this.document.queryCommandValue("styleWithCSS");
-                       }catch(e){
-                               oldValue = false;
-                       }
-                       this.document.execCommand("styleWithCSS", false, true);
-                       r = this.document.queryCommandValue(command);
-                       this.document.execCommand("styleWithCSS", false, oldValue);
-               }else{
-                       r = this.document.queryCommandValue(command);
-               }
-               return r;
-       },
-
-       // Misc.
-
-       _sCall: function(name, args){
-               // summary:
-               //              Run the named method of dijit._editor.selection over the
-               //              current editor instance's window, with the passed args.
-               // tags:
-               //              private
-               return dojo.withGlobal(this.window, name, dijit._editor.selection, args);
-       },
-
-       // FIXME: this is a TON of code duplication. Why?
-
-       placeCursorAtStart: function(){
-               // summary:
-               //              Place the cursor at the start of the editing area.
-               // tags:
-               //              private
-
-               this.focus();
-
-               //see comments in placeCursorAtEnd
-               var isvalid=false;
-               if(dojo.isMoz){
-                       // TODO:  Is this branch even necessary?
-                       var first=this.editNode.firstChild;
-                       while(first){
-                               if(first.nodeType == 3){
-                                       if(first.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
-                                               isvalid=true;
-                                               this._sCall("selectElement", [ first ]);
-                                               break;
-                                       }
-                               }else if(first.nodeType == 1){
-                                       isvalid=true;
-                                       var tg = first.tagName ? first.tagName.toLowerCase() : "";
-                                       // Collapse before childless tags.
-                                       if(/br|input|img|base|meta|area|basefont|hr|link/.test(tg)){
-                                               this._sCall("selectElement", [ first ]);
-                                       }else{
-                                               // Collapse inside tags with children.
-                                               this._sCall("selectElementChildren", [ first ]);
-                                       }
-                                       break;
-                               }
-                               first = first.nextSibling;
-                       }
-               }else{
-                       isvalid=true;
-                       this._sCall("selectElementChildren", [ this.editNode ]);
-               }
-               if(isvalid){
-                       this._sCall("collapse", [ true ]);
-               }
-       },
-
-       placeCursorAtEnd: function(){
-               // summary:
-               //              Place the cursor at the end of the editing area.
-               // tags:
-               //              private
-
-               this.focus();
-
-               //In mozilla, if last child is not a text node, we have to use
-               // selectElementChildren on this.editNode.lastChild otherwise the
-               // cursor would be placed at the end of the closing tag of
-               //this.editNode.lastChild
-               var isvalid=false;
-               if(dojo.isMoz){
-                       var last=this.editNode.lastChild;
-                       while(last){
-                               if(last.nodeType == 3){
-                                       if(last.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
-                                               isvalid=true;
-                                               this._sCall("selectElement", [ last ]);
-                                               break;
-                                       }
-                               }else if(last.nodeType == 1){
-                                       isvalid=true;
-                                       if(last.lastChild){
-                                               this._sCall("selectElement", [ last.lastChild ]);
-                                       }else{
-                                               this._sCall("selectElement", [ last ]);
-                                       }
-                                       break;
-                               }
-                               last = last.previousSibling;
-                       }
-               }else{
-                       isvalid=true;
-                       this._sCall("selectElementChildren", [ this.editNode ]);
-               }
-               if(isvalid){
-                       this._sCall("collapse", [ false ]);
-               }
-       },
-
-       getValue: function(/*Boolean?*/ nonDestructive){
-               // summary:
-               //              Return the current content of the editing area (post filters
-               //              are applied).  Users should call attr('value') instead.
-               //      nonDestructive:
-               //              defaults to false. Should the post-filtering be run over a copy
-               //              of the live DOM? Most users should pass "true" here unless they
-               //              *really* know that none of the installed filters are going to
-               //              mess up the editing session.
-               // tags:
-               //              private
-               if(this.textarea){
-                       if(this.isClosed || !this.isLoaded){
-                               return this.textarea.value;
-                       }
-               }
-
-               return this._postFilterContent(null, nonDestructive);
-       },
-       _getValueAttr: function(){
-               // summary:
-               //              Hook to make attr("value") work
-               return this.getValue(true);
-       },
-
-       setValue: function(/*String*/ html){
-               // summary:
-               //              This function sets the content. No undo history is preserved.
-               //              Users should use set('value', ...) instead.
-               // tags:
-               //              deprecated
-
-               // TODO: remove this and getValue() for 2.0, and move code to _setValueAttr()
-
-               if(!this.isLoaded){
-                       // try again after the editor is finished loading
-                       this.onLoadDeferred.addCallback(dojo.hitch(this, function(){
-                               this.setValue(html);
-                       }));
-                       return;
-               }
-               this._cursorToStart = true;
-               if(this.textarea && (this.isClosed || !this.isLoaded)){
-                       this.textarea.value=html;
-               }else{
-                       html = this._preFilterContent(html);
-                       var node = this.isClosed ? this.domNode : this.editNode;
-
-                       // Use &nbsp; to avoid webkit problems where editor is disabled until the user clicks it
-                       if(!html && dojo.isWebKit){
-                               html = "&nbsp;";
-                       }
-                       node.innerHTML = html;
-                       this._preDomFilterContent(node);
-               }
-               this.onDisplayChanged();
-       },
-
-       replaceValue: function(/*String*/ html){
-               // summary:
-               //              This function set the content while trying to maintain the undo stack
-               //              (now only works fine with Moz, this is identical to setValue in all
-               //              other browsers)
-               // tags:
-               //              protected
-
-               if(this.isClosed){
-                       this.setValue(html);
-               }else if(this.window && this.window.getSelection && !dojo.isMoz){ // Safari
-                       // look ma! it's a totally f'd browser!
-                       this.setValue(html);
-               }else if(this.window && this.window.getSelection){ // Moz
-                       html = this._preFilterContent(html);
-                       this.execCommand("selectall");
-                       if(!html){ 
-                               this._cursorToStart = true;
-                               html = "&nbsp;"; 
-                       }
-                       this.execCommand("inserthtml", html);
-                       this._preDomFilterContent(this.editNode);
-               }else if(this.document && this.document.selection){//IE
-                       //In IE, when the first element is not a text node, say
-                       //an <a> tag, when replacing the content of the editing
-                       //area, the <a> tag will be around all the content
-                       //so for now, use setValue for IE too
-                       this.setValue(html);
-               }
-       },
-
-       _preFilterContent: function(/*String*/ html){
-               // summary:
-               //              Filter the input before setting the content of the editing
-               //              area. DOM pre-filtering may happen after this
-               //              string-based filtering takes place but as of 1.2, this is not
-               //              guaranteed for operations such as the inserthtml command.
-               // tags:
-               //              private
-
-               var ec = html;
-               dojo.forEach(this.contentPreFilters, function(ef){ if(ef){ ec = ef(ec); } });
-               return ec;
-       },
-       _preDomFilterContent: function(/*DomNode*/ dom){
-               // summary:
-               //              filter the input's live DOM. All filter operations should be
-               //              considered to be "live" and operating on the DOM that the user
-               //              will be interacting with in their editing session.
-               // tags:
-               //              private
-               dom = dom || this.editNode;
-               dojo.forEach(this.contentDomPreFilters, function(ef){
-                       if(ef && dojo.isFunction(ef)){
-                               ef(dom);
-                       }
-               }, this);
-       },
-
-       _postFilterContent: function(
-               /*DomNode|DomNode[]|String?*/ dom,
-               /*Boolean?*/ nonDestructive){
-               // summary:
-               //              filter the output after getting the content of the editing area
-               //
-               // description:
-               //              post-filtering allows plug-ins and users to specify any number
-               //              of transforms over the editor's content, enabling many common
-               //              use-cases such as transforming absolute to relative URLs (and
-               //              vice-versa), ensuring conformance with a particular DTD, etc.
-               //              The filters are registered in the contentDomPostFilters and
-               //              contentPostFilters arrays. Each item in the
-               //              contentDomPostFilters array is a function which takes a DOM
-               //              Node or array of nodes as its only argument and returns the
-               //              same. It is then passed down the chain for further filtering.
-               //              The contentPostFilters array behaves the same way, except each
-               //              member operates on strings. Together, the DOM and string-based
-               //              filtering allow the full range of post-processing that should
-               //              be necessaray to enable even the most agressive of post-editing
-               //              conversions to take place.
-               //
-               //              If nonDestructive is set to "true", the nodes are cloned before
-               //              filtering proceeds to avoid potentially destructive transforms
-               //              to the content which may still needed to be edited further.
-               //              Once DOM filtering has taken place, the serialized version of
-               //              the DOM which is passed is run through each of the
-               //              contentPostFilters functions.
-               //
-               //      dom:
-               //              a node, set of nodes, which to filter using each of the current
-               //              members of the contentDomPostFilters and contentPostFilters arrays.
-               //
-               //      nonDestructive:
-               //              defaults to "false". If true, ensures that filtering happens on
-               //              a clone of the passed-in content and not the actual node
-               //              itself.
-               //
-               // tags:
-               //              private
-
-               var ec;
-               if(!dojo.isString(dom)){
-                       dom = dom || this.editNode;
-                       if(this.contentDomPostFilters.length){
-                               if(nonDestructive){
-                                       dom = dojo.clone(dom);
-                               }
-                               dojo.forEach(this.contentDomPostFilters, function(ef){
-                                       dom = ef(dom);
-                               });
-                       }
-                       ec = dijit._editor.getChildrenHtml(dom);
-               }else{
-                       ec = dom;
-               }
-
-               if(!dojo.trim(ec.replace(/^\xA0\xA0*/, '').replace(/\xA0\xA0*$/, '')).length){
-                       ec = "";
-               }
-
-               //      if(dojo.isIE){
-               //              //removing appended <P>&nbsp;</P> for IE
-               //              ec = ec.replace(/(?:<p>&nbsp;</p>[\n\r]*)+$/i,"");
-               //      }
-               dojo.forEach(this.contentPostFilters, function(ef){
-                       ec = ef(ec);
-               });
-
-               return ec;
-       },
-
-       _saveContent: function(/*Event*/ e){
-               // summary:
-               //              Saves the content in an onunload event if the editor has not been closed
-               // tags:
-               //              private
-
-               var saveTextarea = dojo.byId(dijit._scopeName + "._editor.RichText.savedContent");
-               if(saveTextarea.value){
-                       saveTextarea.value += this._SEPARATOR;
-               }
-               saveTextarea.value += this.name + ":" + this.getValue(true);
-       },
-
-
-       escapeXml: function(/*String*/ str, /*Boolean*/ noSingleQuotes){
-               // summary:
-               //              Adds escape sequences for special characters in XML.
-               //              Optionally skips escapes for single quotes
-               // tags:
-               //              private
-
-               str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
-               if(!noSingleQuotes){
-                       str = str.replace(/'/gm, "&#39;");
-               }
-               return str; // string
-       },
-
-       getNodeHtml: function(/* DomNode */ node){
-               // summary:
-               //              Deprecated.   Use dijit._editor._getNodeHtml() instead.
-               // tags:
-               //              deprecated
-               dojo.deprecated('dijit.Editor::getNodeHtml is deprecated','use dijit._editor.getNodeHtml instead', 2);
-               return dijit._editor.getNodeHtml(node); // String
-       },
-
-       getNodeChildrenHtml: function(/* DomNode */ dom){
-               // summary:
-               //              Deprecated.   Use dijit._editor.getChildrenHtml() instead.
-               // tags:
-               //              deprecated
-               dojo.deprecated('dijit.Editor::getNodeChildrenHtml is deprecated','use dijit._editor.getChildrenHtml instead', 2);
-               return dijit._editor.getChildrenHtml(dom);
-       },
-
-       close: function(/*Boolean*/ save){
-               // summary:
-               //              Kills the editor and optionally writes back the modified contents to the
-               //              element from which it originated.
-               // save:
-               //              Whether or not to save the changes. If false, the changes are discarded.
-               // tags:
-               //              private
-
-               if(this.isClosed){return false; }
-
-               if(!arguments.length){ save = true; }
-               this._content = this.getValue();
-               var changed = (this.savedContent != this._content);
-
-               // line height is squashed for iframes
-               // FIXME: why was this here? if (this.iframe){ this.domNode.style.lineHeight = null; }
-
-               if(this.interval){ clearInterval(this.interval); }
-
-               if(this._webkitListener){
-                       //Cleaup of WebKit fix: #9532
-                       this.disconnect(this._webkitListener);
-                       delete this._webkitListener;
-               }
-
-               // Guard against memory leaks on IE (see #9268)
-               if(dojo.isIE){
-                        this.iframe.onfocus = null;
-               }
-               this.iframe._loadFunc = null;
-
-               if(this._iframeRegHandle){
-                       dijit.unregisterIframe(this._iframeRegHandle);
-                       delete this._iframeRegHandle;
-               }
-
-               if(this.textarea){
-                       var s = this.textarea.style;
-                       s.position = "";
-                       s.left = s.top = "";
-                       if(dojo.isIE){
-                               s.overflow = this.__overflow;
-                               this.__overflow = null;
-                       }
-                       this.textarea.value = save ? this._content : this.savedContent;
-                       dojo.destroy(this.domNode);
-                       this.domNode = this.textarea;
-               }else{
-                       // if(save){
-                       // why we treat moz differently? comment out to fix #1061
-                       //              if(dojo.isMoz){
-                       //                      var nc = dojo.doc.createElement("span");
-                       //                      this.domNode.appendChild(nc);
-                       //                      nc.innerHTML = this.editNode.innerHTML;
-                       //              }else{
-                       //                      this.domNode.innerHTML = this._content;
-                       //              }
-                       // }
-
-                       // Note that this destroys the iframe
-                       this.domNode.innerHTML = save ? this._content : this.savedContent;
-               }
-               delete this.iframe;
-
-               dojo.removeClass(this.domNode, this.baseClass);
-               this.isClosed = true;
-               this.isLoaded = false;
-
-               delete this.editNode;
-               delete this.focusNode;
-
-               if(this.window && this.window._frameElement){
-                       this.window._frameElement = null;
-               }
-
-               this.window = null;
-               this.document = null;
-               this.editingArea = null;
-               this.editorObject = null;
-
-               return changed; // Boolean: whether the content has been modified
-       },
-
-       destroy: function(){
-               if(!this.isClosed){ this.close(false); }
-               this.inherited(arguments);
-       },
-
-       _removeMozBogus: function(/* String */ html){
-               // summary:
-               //              Post filter to remove unwanted HTML attributes generated by mozilla
-               // tags:
-               //              private
-               return html.replace(/\stype="_moz"/gi, '').replace(/\s_moz_dirty=""/gi, '').replace(/_moz_resizing="(true|false)"/gi,''); // String
-       },
-       _removeWebkitBogus: function(/* String */ html){
-               // summary:
-               //              Post filter to remove unwanted HTML attributes generated by webkit
-               // tags:
-               //              private
-               html = html.replace(/\sclass="webkit-block-placeholder"/gi, '');
-               html = html.replace(/\sclass="apple-style-span"/gi, '');
-               return html; // String
-       },
-       _normalizeFontStyle: function(/* String */ html){
-               // summary:
-               //              Convert 'strong' and 'em' to 'b' and 'i'.
-               // description:
-               //              Moz can not handle strong/em tags correctly, so to help
-               //              mozilla and also to normalize output, convert them to 'b' and 'i'.
-               //
-               //              Note the IE generates 'strong' and 'em' rather than 'b' and 'i'
-               // tags:
-               //              private
-               return html.replace(/<(\/)?strong([ \>])/gi, '<$1b$2')
-                       .replace(/<(\/)?em([ \>])/gi, '<$1i$2' ); // String
-       },
-
-       _preFixUrlAttributes: function(/* String */ html){
-               // summary:
-               //              Pre-filter to do fixing to href attributes on <a> and <img> tags
-               // tags:
-               //              private
-               return html.replace(/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,
-                               '$1$4$2$3$5$2 _djrealurl=$2$3$5$2')
-                       .replace(/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,
-                               '$1$4$2$3$5$2 _djrealurl=$2$3$5$2'); // String
-       },
-
-       /*****************************************************************************
-               The following functions implement HTML manipulation commands for various
-               browser/contentEditable implementations.  The goal of them is to enforce
-               standard behaviors of them.
-       ******************************************************************************/
-
-       _inserthorizontalruleImpl: function(argument){
-               // summary:
-               //              This function implements the insertion of HTML 'HR' tags.
-               //              into a point on the page.  IE doesn't to it right, so
-               //              we have to use an alternate form
-               // argument:
-               //              arguments to the exec command, if any.
-               // tags:
-               //              protected
-               if(dojo.isIE){
-                       return this._inserthtmlImpl("<hr>");
-               }
-               return this.document.execCommand("inserthorizontalrule", false, argument);
-       },
-
-       _unlinkImpl: function(argument){
-               // summary:
-               //              This function implements the unlink of an 'a' tag.
-               // argument:
-               //              arguments to the exec command, if any.
-               // tags:
-               //              protected
-               if((this.queryCommandEnabled("unlink")) && (dojo.isMoz || dojo.isWebKit)){
-                       var a = this._sCall("getAncestorElement", [ "a" ]);
-                       this._sCall("selectElement", [ a ]);
-                       return this.document.execCommand("unlink", false, null);
-               }
-               return this.document.execCommand("unlink", false, argument);
-       },
-
-       _hilitecolorImpl: function(argument){
-               // summary:
-               //              This function implements the hilitecolor command
-               // argument:
-               //              arguments to the exec command, if any.
-               // tags:
-               //              protected
-               var returnValue;
-               if(dojo.isMoz){
-                       // mozilla doesn't support hilitecolor properly when useCSS is
-                       // set to false (bugzilla #279330)
-                       this.document.execCommand("styleWithCSS", false, true);
-                       returnValue = this.document.execCommand("hilitecolor", false, argument);
-                       this.document.execCommand("styleWithCSS", false, false);
-               }else{
-                       returnValue = this.document.execCommand("hilitecolor", false, argument);
-               }
-               return returnValue;
-       },
-
-       _backcolorImpl: function(argument){
-               // summary:
-               //              This function implements the backcolor command
-               // argument:
-               //              arguments to the exec command, if any.
-               // tags:
-               //              protected
-               if(dojo.isIE){
-                       // Tested under IE 6 XP2, no problem here, comment out
-                       // IE weirdly collapses ranges when we exec these commands, so prevent it
-                       //      var tr = this.document.selection.createRange();
-                       argument = argument ? argument : null;
-               }
-               return this.document.execCommand("backcolor", false, argument);
-       },
-
-       _forecolorImpl: function(argument){
-               // summary:
-               //              This function implements the forecolor command
-               // argument:
-               //              arguments to the exec command, if any.
-               // tags:
-               //              protected
-               if(dojo.isIE){
-                       // Tested under IE 6 XP2, no problem here, comment out
-                       // IE weirdly collapses ranges when we exec these commands, so prevent it
-                       //      var tr = this.document.selection.createRange();
-                       argument = argument? argument : null;
-               }
-               return this.document.execCommand("forecolor", false, argument);
-       },
-
-       _inserthtmlImpl: function(argument){
-               // summary:
-               //              This function implements the insertion of HTML content into
-               //              a point on the page.
-               // argument:
-               //              The content to insert, if any.
-               // tags:
-               //              protected
-               argument = this._preFilterContent(argument);
-               var rv = true;
-               if(dojo.isIE){
-                       var insertRange = this.document.selection.createRange();
-                       if(this.document.selection.type.toUpperCase() == 'CONTROL'){
-                               var n=insertRange.item(0);
-                               while(insertRange.length){
-                                       insertRange.remove(insertRange.item(0));
-                               }
-                               n.outerHTML=argument;
-                       }else{
-                               insertRange.pasteHTML(argument);
-                       }
-                       insertRange.select();
-                       //insertRange.collapse(true);
-               }else if(dojo.isMoz && !argument.length){
-                       //mozilla can not inserthtml an empty html to delete current selection
-                       //so we delete the selection instead in this case
-                       this._sCall("remove"); // FIXME
-               }else{
-                       rv = this.document.execCommand("inserthtml", false, argument);
-               }
-               return rv;
-       },
-
-       getHeaderHeight: function(){
-               // summary:
-               //              A function for obtaining the height of the header node
-               return this._getNodeChildrenHeight(this.header); // Number
-       },
-
-       getFooterHeight: function(){
-               // summary:
-               //              A function for obtaining the height of the footer node
-               return this._getNodeChildrenHeight(this.footer); // Number
-       },
-
-       _getNodeChildrenHeight: function(node){
-               // summary:
-               //              An internal function for computing the cumulative height of all child nodes of 'node'
-               // node:
-               //              The node to process the children of;
-               var h = 0;
-               if(node && node.childNodes){
-                       // IE didn't compute it right when position was obtained on the node directly is some cases, 
-                       // so we have to walk over all the children manually.
-                       var i; 
-                       for(i = 0; i < node.childNodes.length; i++){ 
-                               var size = dojo.position(node.childNodes[i]); 
-                               h += size.h;   
-                       } 
-               }
-               return h; // Number
-       }
-});
-
-}
-
-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.set("tabIndex", "-1");
-                       
-                       this.connect(widget, "_onFocus", function(){
-                               // Set valid tabIndex so tabbing away from widget goes to right place, see #10272
-                               widget.set("tabIndex", this.tabIndex);
-                       });
-                       this.connect(widget, "_onBlur", function(){
-                               widget.set("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 its 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.ToolbarSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.ToolbarSeparator"] = true;
-dojo.provide("dijit.ToolbarSeparator");
-
-
-
-
-dojo.declare("dijit.ToolbarSeparator",
-               [ dijit._Widget, dijit._Templated ],
-               {
-               // summary:
-               //              A spacer between two `dijit.Toolbar` items
-               templateString: '<div class="dijitToolbarSeparator dijitInline" waiRole="presentation"></div>',
-               postCreate: function(){ dojo.setSelectable(this.domNode, false); },
-               isFocusable: function(){
-                       // summary:
-                       //              This widget isn't focusable, so pass along that fact.
-                       // tags:
-                       //              protected
-                       return false;
-               }
-
-       });
-
-
-
-}
-
-if(!dojo._hasResource["dijit.Toolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Toolbar"] = true;
-dojo.provide("dijit.Toolbar");
-
-
-
-
-
-dojo.declare("dijit.Toolbar",
-       [dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
-       {
-       // summary:
-       //              A Toolbar widget, used to hold things like `dijit.Editor` buttons
-
-       templateString:
-               '<div class="dijit" waiRole="toolbar" tabIndex="${tabIndex}" dojoAttachPoint="containerNode">' +
-               //      '<table style="table-layout: fixed" class="dijitReset dijitToolbarTable">' + // factor out style
-               //              '<tr class="dijitReset" dojoAttachPoint="containerNode"></tr>'+
-               //      '</table>' +
-               '</div>',
-
-       baseClass: "dijitToolbar",
-
-       postCreate: function(){
-               this.connectKeyNavHandlers(
-                       this.isLeftToRight() ? [dojo.keys.LEFT_ARROW] : [dojo.keys.RIGHT_ARROW],
-                       this.isLeftToRight() ? [dojo.keys.RIGHT_ARROW] : [dojo.keys.LEFT_ARROW]
-               );
-               this.inherited(arguments);
-       },
-
-       startup: function(){
-               if(this._started){ return; }
-
-               this.startupKeyNavChildren();
-
-               this.inherited(arguments);
-       }
-}
-);
-
-// For back-compat, remove for 2.0
-
-
-}
-
-if(!dojo._hasResource["dijit._HasDropDown"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._HasDropDown"] = true;
-dojo.provide("dijit._HasDropDown");
-
-
-
-
-dojo.declare("dijit._HasDropDown",
-       null,
-       {
-               // summary:
-               //              Mixin for widgets that need drop down ability.
-
-               // _buttonNode: [protected] DomNode
-               //              The button/icon/node to click to display the drop down.
-               //              Can be set via a dojoAttachPoint assignment.
-               //              If missing, then either focusNode or domNode (if focusNode is also missing) will be used.
-               _buttonNode: null,
-
-               // _arrowWrapperNode: [protected] DomNode
-               //              Will set CSS class dijitUpArrow, dijitDownArrow, dijitRightArrow etc. on this node depending
-               //              on where the drop down is set to be positioned.
-               //              Can be set via a dojoAttachPoint assignment.
-               //              If missing, then _buttonNode will be used.
-               _arrowWrapperNode: null,
-
-               // _popupStateNode: [protected] DomNode
-               //              The node to set the popupActive class on.
-               //              Can be set via a dojoAttachPoint assignment.
-               //              If missing, then focusNode or _buttonNode (if focusNode is missing) will be used.
-               _popupStateNode: null,
-
-               // _aroundNode: [protected] DomNode
-               //              The node to display the popup around.
-               //              Can be set via a dojoAttachPoint assignment.
-               //              If missing, then domNode will be used.
-               _aroundNode: null,
-
-               // dropDown: [protected] Widget
-               //              The widget to display as a popup.  This widget *must* be
-               //              defined before the startup function is called.
-               dropDown: null,
-
-               // autoWidth: [protected] Boolean
-               //              Set to true to make the drop down at least as wide as this
-               //              widget.  Set to false if the drop down should just be its
-               //              default width
-               autoWidth: true,
-
-               // forceWidth: [protected] Boolean
-               //              Set to true to make the drop down exactly as wide as this
-               //              widget.  Overrides autoWidth.
-               forceWidth: false,
-
-               // maxHeight: [protected] Integer
-               //              The max height for our dropdown.  Set to 0 for no max height.
-               //              any dropdown taller than this will have scrollbars
-               maxHeight: 0,
-
-               // dropDownPosition: [const] 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.
-               //
-               dropDownPosition: ["below","above"],
-
-               // _stopClickEvents: Boolean
-               //              When set to false, the click events will not be stopped, in
-               //              case you want to use them in your subwidget
-               _stopClickEvents: true,
-
-               _onDropDownMouseDown: function(/*Event*/ e){
-                       // summary:
-                       //              Callback when the user mousedown's on the arrow icon
-
-                       if(this.disabled || this.readOnly){ return; }
-
-                       this._docHandler = this.connect(dojo.doc, "onmouseup", "_onDropDownMouseUp");
-
-                       this.toggleDropDown();
-               },
-
-               _onDropDownMouseUp: function(/*Event?*/ e){
-                       // summary:
-                       //              Callback when the user lifts their mouse after mouse down on the arrow icon.
-                       //              If the drop is a simple menu and the mouse is over the menu, we execute it, otherwise, we focus our
-                       //              dropDown node.  If the event is missing, then we are not
-                       //              a mouseup event.
-                       //
-                       //              This is useful for the common mouse movement pattern
-                       //              with native browser <select> nodes:
-                       //                      1. mouse down on the select node (probably on the arrow)
-                       //                      2. move mouse to a menu item while holding down the mouse button
-                       //                      3. mouse up.  this selects the menu item as though the user had clicked it.
-                       if(e && this._docHandler){
-                               this.disconnect(this._docHandler);
-                       }
-                       var dropDown = this.dropDown, overMenu = false;
-
-                       if(e && this._opened){
-                               // This code deals with the corner-case when the drop down covers the original widget,
-                               // because it's so large.  In that case mouse-up shouldn't select a value from the menu.
-                               // Find out if our target is somewhere in our dropdown widget,
-                               // but not over our _buttonNode (the clickable node)
-                               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 && !overMenu){
-                                               if(dojo.hasClass(t, "dijitPopup")){
-                                                       overMenu = true;
-                                               }else{
-                                                       t = t.parentNode;
-                                               }
-                                       }
-                                       if(overMenu){
-                                               t = e.target;
-                                               if(dropDown.onItemClick){
-                                                       var menuItem;
-                                                       while(t && !(menuItem = dijit.byNode(t))){
-                                                               t = t.parentNode;
-                                                       }
-                                                       if(menuItem && menuItem.onClick && menuItem.getParent){
-                                                               menuItem.getParent().onItemClick(menuItem, e);
-                                                       }
-                                               }
-                                               return;
-                                       }
-                               }
-                       }
-                       if(this._opened && dropDown.focus){
-                               // Focus the dropdown widget - do it on a delay so that we
-                               // don't steal our own focus.
-                               window.setTimeout(dojo.hitch(dropDown, "focus"), 1);
-                       }
-               },
-
-               _onDropDownClick: function(/*Event*/ e){
-                       // the drop down was already opened on mousedown/keydown; just need to call stopEvent()
-                       if(this._stopClickEvents){
-                               dojo.stopEvent(e);
-                       }                       
-               },
-
-               _setupDropdown: function(){
-                       // summary:
-                       //              set up nodes and connect our mouse and keypress events
-                       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", "_onDropDownMouseDown");
-                       this.connect(this._buttonNode, "onclick", "_onDropDownClick");
-                       this.connect(this._buttonNode, "onkeydown", "_onDropDownKeydown");
-                       this.connect(this._buttonNode, "onkeyup", "_onKey");
-
-                       // If we have a _setStateClass function (which happens when
-                       // we are a form widget), then we need to connect our open/close
-                       // functions to it
-                       if(this._setStateClass){
-                               this.connect(this, "openDropDown", "_setStateClass");
-                               this.connect(this, "closeDropDown", "_setStateClass");
-                       }
-
-                       // Add a class to the "dijitDownArrowButton" type class to _buttonNode so theme can set direction of arrow
-                       // based on where drop down will normally appear
-                       var defaultPos = {
-                                       "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" + defaultPos + "ArrowButton");
-               },
-
-               postCreate: function(){
-                       this._setupDropdown();
-                       this.inherited(arguments);
-               },
-
-               destroyDescendants: function(){
-                       if(this.dropDown){
-                               // Destroy the drop down, unless it's already been destroyed.  This can happen because
-                               // the drop down is a direct child of <body> even though it's logically my child.
-                               if(!this.dropDown._destroyed){
-                                       this.dropDown.destroyRecursive();
-                               }
-                               delete this.dropDown;
-                       }
-                       this.inherited(arguments);
-               },
-
-               _onDropDownKeydown: function(/*Event*/ e){
-                       if(e.keyCode == dojo.keys.DOWN_ARROW || e.keyCode == dojo.keys.ENTER || e.keyCode == dojo.keys.SPACE){
-                               e.preventDefault();     // stop IE screen jump
-                       }
-               },
-
-               _onKey: function(/*Event*/ e){
-                       // summary:
-                       //              Callback when the user presses a key while focused on the button node
-
-                       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();
-                       }else if(d && !this._opened && 
-                                       (e.keyCode == dojo.keys.DOWN_ARROW || e.keyCode == dojo.keys.ENTER || e.keyCode == dojo.keys.SPACE)){
-                               this.toggleDropDown();
-                               if(d.focus){
-                                       setTimeout(dojo.hitch(d, "focus"), 1);
-                               }
-                       }
-               },
-
-               _onBlur: function(){
-                       // summary:
-                       //              Called magically when focus has shifted away from this widget and it's dropdown
-
-                       this.closeDropDown();
-                       // don't focus on button.  the user has explicitly focused on something else.
-                       this.inherited(arguments);
-               },
-
-               isLoaded: function(){
-                       // summary:
-                       //              Returns whether or not the dropdown is loaded.  This can
-                       //              be overridden in order to force a call to loadDropDown().
-                       // tags:
-                       //              protected
-
-                       return true;
-               },
-
-               loadDropDown: function(/* Function */ loadCallback){
-                       // summary:
-                       //              Loads the data for the dropdown, and at some point, calls
-                       //              the given callback
-                       // tags:
-                       //              protected
-
-                       loadCallback();
-               },
-
-               toggleDropDown: function(){
-                       // summary:
-                       //              Toggle the drop-down widget; if it is up, close it, if not, open it
-                       // tags:
-                       //              protected
-
-                       if(this.disabled || this.readOnly){ return; }
-                       this.focus();
-                       var dropDown = this.dropDown;
-                       if(!dropDown){ return; }
-                       if(!this._opened){
-                               // If we aren't loaded, load it first so there isn't a flicker
-                               if(!this.isLoaded()){
-                                       this.loadDropDown(dojo.hitch(this, "openDropDown"));
-                                       return;
-                               }else{
-                                       this.openDropDown();
-                               }
-                       }else{
-                               this.closeDropDown();
-                       }
-               },
-
-               openDropDown: function(){
-                       // summary:
-                       //              Opens the dropdown for this widget - it returns the
-                       //              return value of dijit.popup.open
-                       // tags:
-                       //              protected
-
-                       var dropDown = this.dropDown;
-                       var ddNode = dropDown.domNode;
-                       var self = this;
-
-                       // Prepare our popup's height and honor maxHeight if it exists.
-
-                       // TODO: isn't maxHeight dependent on the return value from dijit.popup.open(),
-                       // ie, dependent on how much space is available (BK)
-
-                       if(!this._preparedNode){
-                               dijit.popup.moveOffScreen(ddNode);
-                               this._preparedNode = true;                      
-                               // Check if we have explicitly set width and height on the dropdown widget dom node
-                               if(ddNode.style.width){
-                                       this._explicitDDWidth = true;
-                               }
-                               if(ddNode.style.height){
-                                       this._explicitDDHeight = true;
-                               }
-                       }
-
-                       // Code for resizing dropdown (height limitation, or increasing width to match my width)
-                       if(this.maxHeight || this.forceWidth || this.autoWidth){
-                               var myStyle = {
-                                       display: "",
-                                       visibility: "hidden"
-                               };
-                               if(!this._explicitDDWidth){
-                                       myStyle.width = "";
-                               }
-                               if(!this._explicitDDHeight){
-                                       myStyle.height = "";
-                               }
-                               dojo.style(ddNode, myStyle);
-                               
-                               // Get size of drop down, and determine if vertical scroll bar needed
-                               var mb = dojo.marginBox(ddNode);
-                               var overHeight = (this.maxHeight && mb.h > this.maxHeight);
-                               dojo.style(ddNode, {
-                                       overflowX: "hidden",
-                                       overflowY: overHeight ? "auto" : "hidden"
-                               });
-                               if(overHeight){
-                                       mb.h = this.maxHeight;
-                                       if("w" in mb){
-                                               mb.w += 16;     // room for vertical scrollbar
-                                       }
-                               }else{
-                                       delete mb.h;
-                               }
-                               delete mb.t;
-                               delete mb.l;
-
-                               // Adjust dropdown width to match or be larger than my width
-                               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;
-                               }
-                               
-                               // And finally, resize the dropdown to calculated height and width
-                               if(dojo.isFunction(dropDown.resize)){
-                                       dropDown.resize(mb);
-                               }else{
-                                       dojo.marginBox(ddNode, mb);
-                               }
-                       }
-
-                       var retVal = dijit.popup.open({
-                               parent: this,
-                               popup: dropDown,
-                               around: this._aroundNode,
-                               orient: dijit.getPopupAroundAlignment((this.dropDownPosition && this.dropDownPosition.length) ? this.dropDownPosition : ["below"],this.isLeftToRight()),
-                               onExecute: function(){
-                                       self.closeDropDown(true);
-                               },
-                               onCancel: function(){
-                                       self.closeDropDown(true);
-                               },
-                               onClose: function(){
-                                       dojo.attr(self._popupStateNode, "popupActive", false);
-                                       dojo.removeClass(self._popupStateNode, "dijitHasDropDownOpen");
-                                       self._opened = false;
-                                       self.state = "";
-                               }
-                       });
-                       dojo.attr(this._popupStateNode, "popupActive", "true");
-                       dojo.addClass(self._popupStateNode, "dijitHasDropDownOpen");
-                       this._opened=true;
-                       this.state="Opened";
-                       // TODO: set this.checked and call setStateClass(), to affect button look while drop down is shown
-                       return retVal;
-               },
-
-               closeDropDown: function(/*Boolean*/ focus){
-                       // summary:
-                       //              Closes the drop down on this widget
-                       // tags:
-                       //              protected
-
-                       if(this._opened){
-                               if(focus){ this.focus(); }
-                               dijit.popup.close(this.dropDown);
-                               this._opened = false;
-                               this.state = "";
-                       }
-               }
-
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.form.Button"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.Button"] = true;
-dojo.provide("dijit.form.Button");
-
-
-
-
-
-dojo.declare("dijit.form.Button",
-       dijit.form._FormWidget,
-       {
-       // summary:
-       //              Basically the same thing as a normal HTML button, but with special styling.
-       // description:
-       //              Buttons can display a label, an icon, or both.
-       //              A label should always be specified (through innerHTML) or the label
-       //              attribute.  It can be hidden via showLabel=false.
-       // example:
-       // |    <button dojoType="dijit.form.Button" onClick="...">Hello world</button>
-       //
-       // example:
-       // |    var button1 = new dijit.form.Button({label: "hello world", onClick: foo});
-       // |    dojo.body().appendChild(button1.domNode);
-
-       // label: HTML String
-       //              Text to display in button.
-       //              If the label is hidden (showLabel=false) then and no title has
-       //              been specified, then label is also set as title attribute of icon.
-       label: "",
-
-       // showLabel: Boolean
-       //              Set this to true to hide the label text and display only the icon.
-       //              (If showLabel=false then iconClass must be specified.)
-       //              Especially useful for toolbars.
-       //              If showLabel=true, the label will become the title (a.k.a. tooltip/hint) of the icon.
-       //
-       //              The exception case is for computers in high-contrast mode, where the label
-       //              will still be displayed, since the icon doesn't appear.
-       showLabel: true,
-
-       // iconClass: String
-       //              Class to apply to DOMNode in button to make it display an icon
-       iconClass: "",
-
-       // type: String
-       //              Defines the type of button.  "button", "submit", or "reset".
-       type: "button",
-
-       baseClass: "dijitButton",
-
-       templateString: dojo.cache("dijit.form", "templates/Button.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),
-
-       attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
-               value: "valueNode",
-               iconClass: { node: "iconNode", type: "class" }
-       }),
-
-
-       _onClick: function(/*Event*/ e){
-               // summary:
-               //              Internal function to handle click actions
-               if(this.disabled){
-                       return false;
-               }
-               this._clicked(); // widget click actions
-               return this.onClick(e); // user click actions
-       },
-
-       _onButtonClick: function(/*Event*/ e){
-               // summary:
-               //              Handler when the user activates the button portion.
-               if(this._onClick(e) === false){ // returning nothing is same as true
-                       e.preventDefault(); // needed for checkbox
-               }else if(this.type == "submit" && !(this.valueNode||this.focusNode).form){ // see if a nonform widget needs to be signalled
-                       for(var node=this.domNode; node.parentNode/*#5935*/; node=node.parentNode){
-                               var widget=dijit.byNode(node);
-                               if(widget && typeof widget._onSubmit == "function"){
-                                       widget._onSubmit(e);
-                                       break;
-                               }
-                       }
-               }else if(this.valueNode){
-                       this.valueNode.click();
-                       e.preventDefault(); // cancel BUTTON click and continue with hidden INPUT click
-               }
-       },
-
-       _fillContent: function(/*DomNode*/ source){
-               // Overrides _Templated._fillContent().
-               // If button label is specified as srcNodeRef.innerHTML rather than
-               // this.params.label, handle it here.
-               if(source && (!this.params || !("label" in this.params))){
-                       this.set('label', source.innerHTML);
-               }
-       },
-
-       postCreate: function(){
-               dojo.setSelectable(this.focusNode, false);
-               this.inherited(arguments);
-       },
-
-       _setShowLabelAttr: function(val){
-               if(this.containerNode){
-                       dojo.toggleClass(this.containerNode, "dijitDisplayNone", !val);
-               }
-               this.showLabel = val;
-       },
-
-       onClick: function(/*Event*/ e){
-               // summary:
-               //              Callback for when button is clicked.
-               //              If type="submit", return true to perform submit, or false to cancel it.
-               // type:
-               //              callback
-               return true;            // Boolean
-       },
-
-       _clicked: function(/*Event*/ e){
-               // summary:
-               //              Internal overridable function for when the button is clicked
-       },
-
-       setLabel: function(/*String*/ content){
-               // summary:
-               //              Deprecated.  Use set('label', ...) instead.
-               dojo.deprecated("dijit.form.Button.setLabel() is deprecated.  Use set('label', ...) instead.", "", "2.0");
-               this.set("label", content);
-       },
-
-       _setLabelAttr: function(/*String*/ content){
-               // summary:
-               //              Hook for attr('label', ...) to work.
-               // description:
-               //              Set the label (text) of the button; takes an HTML string.
-               this.containerNode.innerHTML = this.label = content;
-               if(this.showLabel == false && !this.params.title){
-                       this.titleNode.title = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || '');
-               }
-       }
-});
-
-
-dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container, dijit._HasDropDown], {
-       // summary:
-       //              A button with a drop down
-       //
-       // example:
-       // |    <button dojoType="dijit.form.DropDownButton" label="Hello world">
-       // |            <div dojotype="dijit.Menu">...</div>
-       // |    </button>
-       //
-       // example:
-       // |    var button1 = new dijit.form.DropDownButton({ label: "hi", dropDown: new dijit.Menu(...) });
-       // |    dojo.body().appendChild(button1);
-       //
-
-       baseClass : "dijitDropDownButton",
-
-       templateString: dojo.cache("dijit.form", "templates/DropDownButton.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),
-
-       _fillContent: function(){
-               // Overrides Button._fillContent().
-               //
-               // My inner HTML contains both the button contents and a drop down widget, like
-               // <DropDownButton>  <span>push me</span>  <Menu> ... </Menu> </DropDownButton>
-               // The first node is assumed to be the button content. The widget is the popup.
-
-               if(this.srcNodeRef){ // programatically created buttons might not define srcNodeRef
-                       //FIXME: figure out how to filter out the widget and use all remaining nodes as button
-                       //      content, not just nodes[0]
-                       var nodes = dojo.query("*", this.srcNodeRef);
-                       dijit.form.DropDownButton.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; }
-
-               // the child widget from srcNodeRef is the dropdown widget.  Insert it in the page DOM,
-               // make it invisible, and store a reference to pass to the popup code.
-               if(!this.dropDown){
-                       var dropDownNode = dojo.query("[widgetId]", this.dropDownContainer)[0];
-                       this.dropDown = dijit.byNode(dropDownNode);
-                       delete this.dropDownContainer;
-               }
-               dijit.popup.moveOffScreen(this.dropDown.domNode);
-
-               this.inherited(arguments);
-       },
-
-       isLoaded: function(){
-               // Returns whether or not we are loaded - if our dropdown has an href,
-               // then we want to check that.
-               var dropDown = this.dropDown;
-               return (!dropDown.href || dropDown.isLoaded);
-       },
-
-       loadDropDown: function(){
-               // Loads our dropdown
-               var dropDown = this.dropDown;
-               if(!dropDown){ return; }
-               if(!this.isLoaded()){
-                       var handler = dojo.connect(dropDown, "onLoad", this, function(){
-                               dojo.disconnect(handler);
-                               this.openDropDown();
-                       });
-                       dropDown.refresh();
-               }else{
-                       this.openDropDown();
-               }
-       },
-
-       isFocusable: function(){
-               // Overridden so that focus is handled by the _HasDropDown mixin, not by
-               // the _FormWidget mixin.
-               return this.inherited(arguments) && !this._mouseDown;
-       }
-});
-
-dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, {
-       // summary:
-       //              A combination button and drop-down button.
-       //              Users can click one side to "press" the button, or click an arrow
-       //              icon to display the drop down.
-       //
-       // example:
-       // |    <button dojoType="dijit.form.ComboButton" onClick="...">
-       // |            <span>Hello world</span>
-       // |            <div dojoType="dijit.Menu">...</div>
-       // |    </button>
-       //
-       // example:
-       // |    var button1 = new dijit.form.ComboButton({label: "hello world", onClick: foo, dropDown: "myMenu"});
-       // |    dojo.body().appendChild(button1.domNode);
-       //
-
-       templateString: dojo.cache("dijit.form", "templates/ComboButton.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),
-
-       attributeMap: dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), {
-               id: "",
-               tabIndex: ["focusNode", "titleNode"],
-               title: "titleNode"
-       }),
-
-       // optionsTitle: String
-       //              Text that describes the options menu (accessibility)
-       optionsTitle: "",
-
-       baseClass: "dijitComboButton",
-
-       // Set classes like dijitButtonContentsHover or dijitArrowButtonActive depending on
-       // mouse action over specified node
-       cssStateNodes: {
-               "buttonNode": "dijitButtonNode",
-               "titleNode": "dijitButtonContents",
-               "_popupStateNode": "dijitDownArrowButton"
-       },
-
-       _focusedNode: null,
-
-       _onButtonKeyPress: function(/*Event*/ evt){
-               // summary:
-               //              Handler for right arrow key when focus is on left part of button
-               if(evt.charOrCode == dojo.keys[this.isLeftToRight() ? "RIGHT_ARROW" : "LEFT_ARROW"]){
-                       dijit.focus(this._popupStateNode);
-                       dojo.stopEvent(evt);
-               }
-       },
-
-       _onArrowKeyPress: function(/*Event*/ evt){
-               // summary:
-               //              Handler for left arrow key when focus is on right part of button
-               if(evt.charOrCode == dojo.keys[this.isLeftToRight() ? "LEFT_ARROW" : "RIGHT_ARROW"]){
-                       dijit.focus(this.titleNode);
-                       dojo.stopEvent(evt);
-               }
-       },
-       
-       focus: function(/*String*/ position){
-               // summary:
-               //              Focuses this widget to according to position, if specified,
-               //              otherwise on arrow node
-               // position:
-               //              "start" or "end"
-               
-               dijit.focus(position == "start" ? this.titleNode : this._popupStateNode);
-       }
-});
-
-dojo.declare("dijit.form.ToggleButton", dijit.form.Button, {
-       // summary:
-       //              A button that can be in two states (checked or not).
-       //              Can be base class for things like tabs or checkbox or radio buttons
-
-       baseClass: "dijitToggleButton",
-
-       // checked: Boolean
-       //              Corresponds to the native HTML <input> element's attribute.
-       //              In markup, specified as "checked='checked'" or just "checked".
-       //              True if the button is depressed, or the checkbox is checked,
-       //              or the radio button is selected, etc.
-       checked: false,
-
-       attributeMap: dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), {
-               checked:"focusNode"
-       }),
-
-       _clicked: function(/*Event*/ evt){
-               this.set('checked', !this.checked);
-       },
-
-       _setCheckedAttr: function(/*Boolean*/ value, /* Boolean? */ priorityChange){
-               this.checked = value;
-               dojo.attr(this.focusNode || this.domNode, "checked", value);
-               dijit.setWaiState(this.focusNode || this.domNode, "pressed", value);
-               this._handleOnChange(value, priorityChange);
-       },
-
-       setChecked: function(/*Boolean*/ checked){
-               // summary:
-               //              Deprecated.   Use set('checked', true/false) instead.
-               dojo.deprecated("setChecked("+checked+") is deprecated. Use set('checked',"+checked+") instead.", "", "2.0");
-               this.set('checked', checked);
-       },
-
-       reset: function(){
-               // summary:
-               //              Reset the widget's value to what it was at initialization time
-
-               this._hasBeenBlurred = false;
-
-               // set checked state to original setting
-               this.set('checked', this.params.checked || false);
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit._editor._Plugin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor._Plugin"] = true;
-dojo.provide("dijit._editor._Plugin");
-
-
-
-dojo.declare("dijit._editor._Plugin", null, {
-       // summary
-       //              Base class for a "plugin" to the editor, which is usually
-       //              a single button on the Toolbar and some associated code
-
-       constructor: function(/*Object?*/args, /*DomNode?*/node){
-               this.params = args || {};
-               dojo.mixin(this, this.params);
-               this._connects=[];
-       },
-
-       // editor: [const] dijit.Editor
-       //              Points to the parent editor
-       editor: null,
-
-       // iconClassPrefix: [const] String
-       //              The CSS class name for the button node is formed from `iconClassPrefix` and `command`
-       iconClassPrefix: "dijitEditorIcon",
-
-       // button: dijit._Widget?
-       //              Pointer to `dijit.form.Button` or other widget (ex: `dijit.form.FilteringSelect`)
-       //              that is added to the toolbar to control this plugin.
-       //              If not specified, will be created on initialization according to `buttonClass`
-       button: null,
-
-       // command: String
-       //              String like "insertUnorderedList", "outdent", "justifyCenter", etc. that represents an editor command.
-       //              Passed to editor.execCommand() if `useDefaultCommand` is true.
-       command: "",
-
-       // useDefaultCommand: Boolean
-       //              If true, this plugin executes by calling Editor.execCommand() with the argument specified in `command`.
-       useDefaultCommand: true,
-
-       // buttonClass: Widget Class
-       //              Class of widget (ex: dijit.form.Button or dijit.form.FilteringSelect)
-       //              that is added to the toolbar to control this plugin.
-       //              This is used to instantiate the button, unless `button` itself is specified directly.
-       buttonClass: dijit.form.Button,
-
-       getLabel: function(/*String*/key){
-               // summary:
-               //              Returns the label to use for the button
-               // tags:
-               //              private
-               return this.editor.commands[key];               // String
-       },
-
-       _initButton: function(){
-               // summary:
-               //              Initialize the button or other widget that will control this plugin.
-               //              This code only works for plugins controlling built-in commands in the editor.
-               // tags:
-               //              protected extension
-               if(this.command.length){
-                       var label = this.getLabel(this.command),
-                               editor = this.editor,
-                               className = this.iconClassPrefix+" "+this.iconClassPrefix + this.command.charAt(0).toUpperCase() + this.command.substr(1);
-                       if(!this.button){
-                               var props = dojo.mixin({
-                                       label: label,
-                                       dir: editor.dir,
-                                       lang: editor.lang,
-                                       showLabel: false,
-                                       iconClass: className,
-                                       dropDown: this.dropDown,
-                                       tabIndex: "-1"
-                               }, this.params || {});
-                               this.button = new this.buttonClass(props);
-                       }
-               }
-       },
-
-       destroy: function(){
-               // summary:
-               //              Destroy this plugin
-
-               dojo.forEach(this._connects, dojo.disconnect);
-               if(this.dropDown){
-                       this.dropDown.destroyRecursive();
-               }
-       },
-
-       connect: function(o, f, tf){
-               // summary:
-               //              Make a dojo.connect() that is automatically disconnected when this plugin is destroyed.
-               //              Similar to `dijit._Widget.connect`.
-               // tags:
-               //              protected
-               this._connects.push(dojo.connect(o, f, this, tf));
-       },
-
-       updateState: function(){
-               // summary:
-               //              Change state of the plugin to respond to events in the editor.
-               // description:
-               //              This is called on meaningful events in the editor, such as change of selection
-               //              or caret position (but not simple typing of alphanumeric keys).   It gives the
-               //              plugin a chance to update the CSS of its button.
-               //
-               //              For example, the "bold" plugin will highlight/unhighlight the bold button depending on whether the
-               //              characters next to the caret are bold or not.
-               //
-               //              Only makes sense when `useDefaultCommand` is true, as it calls Editor.queryCommandEnabled(`command`).
-               var e = this.editor,
-                       c = this.command,
-                       checked, enabled;
-               if(!e || !e.isLoaded || !c.length){ return; }
-               if(this.button){
-                       try{
-                               enabled = e.queryCommandEnabled(c);
-                               if(this.enabled !== enabled){
-                                       this.enabled = enabled;
-                                       this.button.set('disabled', !enabled);
-                               }
-                               if(typeof this.button.checked == 'boolean'){
-                                       checked = e.queryCommandState(c);
-                                       if(this.checked !== checked){
-                                               this.checked = checked;
-                                               this.button.set('checked', e.queryCommandState(c));
-                                       }
-                               }
-                       }catch(e){
-                               console.log(e); // FIXME: we shouldn't have debug statements in our code.  Log as an error?
-                       }
-               }
-       },
-
-       setEditor: function(/*dijit.Editor*/ editor){
-               // summary:
-               //              Tell the plugin which Editor it is associated with.
-
-               // TODO: refactor code to just pass editor to constructor.
-
-               // FIXME: detach from previous editor!!
-               this.editor = editor;
-
-               // FIXME: prevent creating this if we don't need to (i.e., editor can't handle our command)
-               this._initButton();
-
-               // Processing for buttons that execute by calling editor.execCommand()
-               if(this.button && this.useDefaultCommand){
-                       if(this.editor.queryCommandAvailable(this.command)){
-                               this.connect(this.button, "onClick",
-                                       dojo.hitch(this.editor, "execCommand", this.command, this.commandArg)
-                               );
-                       }else{
-                               // hide button because editor doesn't support command (due to browser limitations)
-                               this.button.domNode.style.display = "none";                     
-                       }
-               }
-
-               this.connect(this.editor, "onNormalizedDisplayChanged", "updateState");
-       },
-
-       setToolbar: function(/*dijit.Toolbar*/ toolbar){
-               // summary:
-               //              Tell the plugin to add it's controller widget (often a button)
-               //              to the toolbar.  Does nothing if there is no controller widget.
-
-               // TODO: refactor code to just pass toolbar to constructor.
-
-               if(this.button){
-                       toolbar.addChild(this.button);
-               }
-               // console.debug("adding", this.button, "to:", toolbar);
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"] = true;
-dojo.provide("dijit._editor.plugins.EnterKeyHandling");
-
-
-
-dojo.declare("dijit._editor.plugins.EnterKeyHandling", dijit._editor._Plugin, {
-       // summary:
-       //              This plugin tries to make all browsers behave consistently w.r.t
-       //              displaying paragraphs, specifically dealing with when the user presses
-       //              the ENTER key.
-       //
-       //              It deals mainly with how the text appears on the screen (specifically
-       //              address the double-spaced line problem on IE), but also has some code
-       //              to normalize what attr('value') returns.
-       //
-       // description:
-       //              This plugin has three modes:
-       //
-       //                      * blockModeForEnter=BR
-       //                      * blockModeForEnter=DIV
-       //                      * blockModeForEnter=P
-       //
-       //              In blockModeForEnter=P, the ENTER key semantically means "start a new
-       //              paragraph", whereas shift-ENTER means  "new line in the current paragraph".
-       //              For example:
-       //
-       //              |       first paragraph <shift-ENTER>
-       //              |       second line of first paragraph <ENTER>
-       //              |
-       //              |       second paragraph
-       //
-       //              In the other two modes, the ENTER key means to go to a new line in the
-       //              current paragraph, and users [visually] create a new paragraph by pressing ENTER twice.
-       //              For example, if the user enters text into an editor like this:
-       //
-       //              |               one <ENTER>
-       //              |               two <ENTER>
-       //              |               three <ENTER>
-       //              |               <ENTER>
-       //              |               four <ENTER>
-       //              |               five <ENTER>
-       //              |               six <ENTER>
-       //
-       //              It will appear on the screen as two paragraphs of three lines each.
-       //
-       //              blockNodeForEnter=BR
-       //              --------------------
-       //              On IE, typing the above keystrokes in the editor will internally produce DOM of:
-       //
-       //              |               <p>one</p>
-       //              |               <p>two</p>
-       //              |               <p>three</p>
-       //              |               <p></p>
-       //              |               <p>four</p>
-       //              |               <p>five</p>
-       //              |               <p>six</p>
-       //
-       //              However, blockNodeForEnter=BR makes the Editor on IE display like other browsers, by
-       //              changing the CSS for the <p> node to not have top/bottom margins,
-       //              thus eliminating the double-spaced appearance.
-       //
-       //              Also, attr('value') when used w/blockNodeForEnter=br on IE will return:
-       //
-       //              |       <p> one <br> two <br> three </p>
-       //              |       <p> four <br> five <br> six </p>
-       //
-       //              This output normalization implemented by a filter when the
-       //              editor writes out it's data, to convert consecutive <p>
-       //              nodes into a single <p> node with internal <br> separators.
-       //
-       //              There's also a pre-filter to mirror the post-filter.
-       //              It converts a single <p> with <br> line breaks
-       //              into separate <p> nodes, and creates empty <p> nodes for spacing
-       //              between paragraphs.
-       //
-       //              On FF typing the above keystrokes will internally generate:
-       //
-       //              |               one <br> two <br> three <br> <br> four <br> five <br> six <br>
-       //
-       //              And on Safari it will generate:
-       //
-       //              |               "one"
-       //              |               <div>two</div>
-       //              |               <div>three</div>
-       //              |               <div><br></div>
-       //              |               <div>four</div>
-       //              |               <div>five</div>
-       //              |               <div>six</div>
-       //
-       //              Thus, Safari and FF already look correct although semantically their content is a bit strange.
-       //              On Safari or Firefox blockNodeForEnter=BR uses the builtin editor command "insertBrOnReturn",
-       //              but that doesn't seem to do anything.
-       //              Thus, attr('value') on safari/FF returns the browser-specific HTML listed above,
-       //              rather than the semantically meaningful value that IE returns: <p>one<br>two</p> <p>three<br>four</p>.
-       //
-       //              (Note: originally based on http://bugs.dojotoolkit.org/ticket/2859)
-       //
-       //              blockNodeForEnter=P
-       //              -------------------
-       //              Plugin will monitor keystrokes and update the editor's content on the fly,
-       //              so that the ENTER key will create a new <p> on FF and Safari (it already
-       //              works that way by default on IE).
-       //
-       //              blockNodeForEnter=DIV
-       //              ---------------------
-       //              Follows the same code path as blockNodeForEnter=P but inserting a <div>
-       //              on ENTER key.  Although it produces strange internal DOM, like this:
-       //
-       //              |       <div>paragraph one</div>
-       //              |       <div>paragraph one, line 2</div>
-       //              |       <div>&nbsp;</div>
-       //              |       <div>paragraph two</div>
-       //
-       //              it does provide a consistent look on all browsers, and the on-the-fly DOM updating
-       //              can be useful for collaborative editing.
-
-       // blockNodeForEnter: String
-       //              This property decides the behavior of Enter key. It can be either P,
-       //              DIV, BR, or empty (which means disable this feature). Anything else
-       //              will trigger errors.
-       //
-       //              See class description for more details.
-       blockNodeForEnter: 'BR',
-
-       constructor: function(args){
-               if(args){
-                       dojo.mixin(this,args);
-               }
-       },
-
-       setEditor: function(editor){
-               // Overrides _Plugin.setEditor().
-               this.editor = editor;
-               if(this.blockNodeForEnter == 'BR'){
-                       if(dojo.isIE){
-                               editor.contentDomPreFilters.push(dojo.hitch(this, "regularPsToSingleLinePs"));
-                               editor.contentDomPostFilters.push(dojo.hitch(this, "singleLinePsToRegularPs"));
-                               editor.onLoadDeferred.addCallback(dojo.hitch(this, "_fixNewLineBehaviorForIE"));
-                       }else{
-                               editor.onLoadDeferred.addCallback(dojo.hitch(this,function(d){
-                                       try{
-                                               this.editor.document.execCommand("insertBrOnReturn", false, true);
-                                       }catch(e){}
-                                       return d;
-                               }));
-                       }
-               }else if(this.blockNodeForEnter){
-                       // add enter key handler
-                       // FIXME: need to port to the new event code!!
-                       dojo['require']('dijit._editor.range');
-                       var h = dojo.hitch(this,this.handleEnterKey);
-                       editor.addKeyHandler(13, 0, 0, h); //enter
-                       editor.addKeyHandler(13, 0, 1, h); //shift+enter
-                       this.connect(this.editor,'onKeyPressed','onKeyPressed');
-               }
-       },
-       onKeyPressed: function(e){
-               // summary:
-               //              Handler for keypress events.
-               // tags:
-               //              private
-               if(this._checkListLater){
-                       if(dojo.withGlobal(this.editor.window, 'isCollapsed', dijit)){
-                               var liparent=dojo.withGlobal(this.editor.window, 'getAncestorElement', dijit._editor.selection, ['LI']);
-                               if(!liparent){
-                                       // circulate the undo detection code by calling RichText::execCommand directly
-                                       dijit._editor.RichText.prototype.execCommand.call(this.editor, 'formatblock',this.blockNodeForEnter);
-                                       // set the innerHTML of the new block node
-                                       var block = dojo.withGlobal(this.editor.window, 'getAncestorElement', dijit._editor.selection, [this.blockNodeForEnter]);
-                                       if(block){
-                                               block.innerHTML=this.bogusHtmlContent;
-                                               if(dojo.isIE){
-                                                       // move to the start by moving backwards one char
-                                                       var r = this.editor.document.selection.createRange();
-                                                       r.move('character',-1);
-                                                       r.select();
-                                               }
-                                       }else{
-                                               console.error('onKeyPressed: Cannot find the new block node'); // FIXME
-                                       }
-                               }else{
-                                       if(dojo.isMoz){
-                                               if(liparent.parentNode.parentNode.nodeName == 'LI'){
-                                                       liparent=liparent.parentNode.parentNode;
-                                               }
-                                       }
-                                       var fc=liparent.firstChild;
-                                       if(fc && fc.nodeType == 1 && (fc.nodeName == 'UL' || fc.nodeName == 'OL')){
-                                               liparent.insertBefore(fc.ownerDocument.createTextNode('\xA0'),fc);
-                                               var newrange = dijit.range.create(this.editor.window);
-                                               newrange.setStart(liparent.firstChild,0);
-                                               var selection = dijit.range.getSelection(this.editor.window, true);
-                                               selection.removeAllRanges();
-                                               selection.addRange(newrange);
-                                       }
-                               }
-                       }
-                       this._checkListLater = false;
-               }
-               if(this._pressedEnterInBlock){
-                       // the new created is the original current P, so we have previousSibling below
-                       if(this._pressedEnterInBlock.previousSibling){
-                               this.removeTrailingBr(this._pressedEnterInBlock.previousSibling);
-                       }
-                       delete this._pressedEnterInBlock;
-               }
-       },
-
-       // bogusHtmlContent: [private] String
-       //              HTML to stick into a new empty block
-       bogusHtmlContent: '&nbsp;',
-
-       // blockNodes: [private] Regex
-       //              Regex for testing if a given tag is a block level (display:block) tag
-       blockNodes: /^(?:P|H1|H2|H3|H4|H5|H6|LI)$/,
-
-       handleEnterKey: function(e){
-               // summary:
-               //              Handler for enter key events when blockModeForEnter is DIV or P.
-               // description:
-               //              Manually handle enter key event to make the behavior consistent across
-               //              all supported browsers. See class description for details.
-               // tags:
-               //              private
-
-               var selection, range, newrange, doc=this.editor.document,br;
-               if(e.shiftKey){         // shift+enter always generates <br>
-                       var parent = dojo.withGlobal(this.editor.window, "getParentElement", dijit._editor.selection);
-                       var header = dijit.range.getAncestor(parent,this.blockNodes);
-                       if(header){
-                               if(!e.shiftKey && header.tagName == 'LI'){
-                                       return true; // let browser handle
-                               }
-                               selection = dijit.range.getSelection(this.editor.window);
-                               range = selection.getRangeAt(0);
-                               if(!range.collapsed){
-                                       range.deleteContents();
-                                       selection = dijit.range.getSelection(this.editor.window);
-                                       range = selection.getRangeAt(0);
-                               }
-                               if(dijit.range.atBeginningOfContainer(header, range.startContainer, range.startOffset)){
-                                       if(e.shiftKey){
-                                               br=doc.createElement('br');
-                                               newrange = dijit.range.create(this.editor.window);
-                                               header.insertBefore(br,header.firstChild);
-                                               newrange.setStartBefore(br.nextSibling);
-                                               selection.removeAllRanges();
-                                               selection.addRange(newrange);
-                                       }else{
-                                               dojo.place(br, header, "before");
-                                       }
-                               }else if(dijit.range.atEndOfContainer(header, range.startContainer, range.startOffset)){
-                                       newrange = dijit.range.create(this.editor.window);
-                                       br=doc.createElement('br');
-                                       if(e.shiftKey){
-                                               header.appendChild(br);
-                                               header.appendChild(doc.createTextNode('\xA0'));
-                                               newrange.setStart(header.lastChild,0);
-                                       }else{
-                                               dojo.place(br, header, "after");
-                                               newrange.setStartAfter(header);
-                                       }
-
-                                       selection.removeAllRanges();
-                                       selection.addRange(newrange);
-                               }else{
-                                       return true; // let browser handle
-                               }
-                       }else{
-                               // don't change this: do not call this.execCommand, as that may have other logic in subclass
-                               dijit._editor.RichText.prototype.execCommand.call(this.editor, 'inserthtml', '<br>');
-                       }
-                       return false;
-               }
-               var _letBrowserHandle = true;
-
-               // first remove selection
-               selection = dijit.range.getSelection(this.editor.window);
-               range = selection.getRangeAt(0);
-               if(!range.collapsed){
-                       range.deleteContents();
-                       selection = dijit.range.getSelection(this.editor.window);
-                       range = selection.getRangeAt(0);
-               }
-
-               var block = dijit.range.getBlockAncestor(range.endContainer, null, this.editor.editNode);
-               var blockNode = block.blockNode;
-
-               // if this is under a LI or the parent of the blockNode is LI, just let browser to handle it
-               if((this._checkListLater = (blockNode && (blockNode.nodeName == 'LI' || blockNode.parentNode.nodeName == 'LI')))){
-                       if(dojo.isMoz){
-                               // press enter in middle of P may leave a trailing <br/>, let's remove it later
-                               this._pressedEnterInBlock = blockNode;
-                       }
-                       // if this li only contains spaces, set the content to empty so the browser will outdent this item
-                       if(/^(\s|&nbsp;|\xA0|<span\b[^>]*\bclass=['"]Apple-style-span['"][^>]*>(\s|&nbsp;|\xA0)<\/span>)?(<br>)?$/.test(blockNode.innerHTML)){
-                               // empty LI node
-                               blockNode.innerHTML = '';
-                               if(dojo.isWebKit){ // WebKit tosses the range when innerHTML is reset
-                                       newrange = dijit.range.create(this.editor.window);
-                                       newrange.setStart(blockNode, 0);
-                                       selection.removeAllRanges();
-                                       selection.addRange(newrange);
-                               }
-                               this._checkListLater = false; // nothing to check since the browser handles outdent
-                       }
-                       return true;
-               }
-
-               // text node directly under body, let's wrap them in a node
-               if(!block.blockNode || block.blockNode===this.editor.editNode){
-                       try{
-                               dijit._editor.RichText.prototype.execCommand.call(this.editor, 'formatblock',this.blockNodeForEnter);
-                       }catch(e2){ /*squelch FF3 exception bug when editor content is a single BR*/ }
-                       // get the newly created block node
-                       // FIXME
-                       block = {blockNode:dojo.withGlobal(this.editor.window, "getAncestorElement", dijit._editor.selection, [this.blockNodeForEnter]),
-                                       blockContainer: this.editor.editNode};
-                       if(block.blockNode){
-                               if(block.blockNode != this.editor.editNode &&
-                                       (!(block.blockNode.textContent || block.blockNode.innerHTML).replace(/^\s+|\s+$/g, "").length)){
-                                       this.removeTrailingBr(block.blockNode);
-                                       return false;
-                               }
-                       }else{  // we shouldn't be here if formatblock worked
-                               block.blockNode = this.editor.editNode;
-                       }
-                       selection = dijit.range.getSelection(this.editor.window);
-                       range = selection.getRangeAt(0);
-               }
-
-               var newblock = doc.createElement(this.blockNodeForEnter);
-               newblock.innerHTML=this.bogusHtmlContent;
-               this.removeTrailingBr(block.blockNode);
-               if(dijit.range.atEndOfContainer(block.blockNode, range.endContainer, range.endOffset)){
-                       if(block.blockNode === block.blockContainer){
-                               block.blockNode.appendChild(newblock);
-                       }else{
-                               dojo.place(newblock, block.blockNode, "after");
-                       }
-                       _letBrowserHandle = false;
-                       // lets move caret to the newly created block
-                       newrange = dijit.range.create(this.editor.window);
-                       newrange.setStart(newblock, 0);
-                       selection.removeAllRanges();
-                       selection.addRange(newrange);
-                       if(this.editor.height){
-                               dojo.window.scrollIntoView(newblock);
-                       }
-               }else if(dijit.range.atBeginningOfContainer(block.blockNode,
-                               range.startContainer, range.startOffset)){
-                       dojo.place(newblock, block.blockNode, block.blockNode === block.blockContainer ? "first" : "before");
-                       if(newblock.nextSibling && this.editor.height){
-                               // position input caret - mostly WebKit needs this
-                               newrange = dijit.range.create(this.editor.window);
-                               newrange.setStart(newblock.nextSibling, 0);
-                               selection.removeAllRanges();
-                               selection.addRange(newrange);
-                               // browser does not scroll the caret position into view, do it manually
-                               dojo.window.scrollIntoView(newblock.nextSibling);
-                       }
-                       _letBrowserHandle = false;
-               }else{ //press enter in the middle of P/DIV/Whatever/
-                       if(block.blockNode === block.blockContainer){
-                               block.blockNode.appendChild(newblock);
-                       }else{
-                               dojo.place(newblock, block.blockNode, "after");
-                       }
-                       _letBrowserHandle = false;
-
-                       // Clone any block level styles.
-                       if(block.blockNode.style){
-                               if(newblock.style){
-                                       if(block.blockNode.style.cssText){
-                                               newblock.style.cssText = block.blockNode.style.cssText;
-                                       }
-                               }
-                       }
-                       
-                       // Okay, we probably have to split.
-                       var rs = range.startContainer;
-                       if(rs && rs.nodeType == 3){
-                               // Text node, we have to split it.
-                               var nodeToMove, tNode;
-                               var txt = rs.nodeValue;
-                               var startNode = doc.createTextNode(txt.substring(0, range.startOffset));
-                               var endNode = doc.createTextNode(txt.substring(range.startOffset, txt.length));
-
-                               // Place the split, then remove original nodes.
-                               dojo.place(startNode, rs, "before");
-                               dojo.place(endNode, rs, "after");
-                               dojo.destroy(rs);
-
-                               // Okay, we split the text.  Now we need to see if we're
-                               // parented to the block element we're splitting and if
-                               // not, we have to split all the way up.  Ugh.
-                               var parentC = startNode.parentNode;
-                               while(parentC !== block.blockNode){
-                                       var tg = parentC.tagName;
-                                       var newTg = doc.createElement(tg);
-                                       // Clone over any 'style' data. 
-                                       if(parentC.style){
-                                               if(newTg.style){
-                                                       if(parentC.style.cssText){
-                                                               newTg.style.cssText = parentC.style.cssText;
-                                                       }
-                                               }
-                                       }
-
-                                       nodeToMove = endNode;
-                                       while(nodeToMove){
-                                               tNode = nodeToMove.nextSibling;
-                                               newTg.appendChild(nodeToMove);
-                                               nodeToMove = tNode;
-                                       }
-                                       dojo.place(newTg, parentC, "after");
-                                       startNode = parentC;
-                                       endNode = newTg;
-                                       parentC = parentC.parentNode;
-                               }
-
-                               // Lastly, move the split out tags to the new block.
-                               // as they should now be split properly.
-                               nodeToMove = endNode;
-                               if(nodeToMove.nodeType == 1 || (nodeToMove.nodeType == 3 && nodeToMove.nodeValue)){
-                                       // Non-blank text and non-text nodes need to clear out that blank space
-                                       // before moving the contents.
-                                       newblock.innerHTML = "";
-                               }
-                               while(nodeToMove){
-                                       tNode = nodeToMove.nextSibling;
-                                       newblock.appendChild(nodeToMove);
-                                       nodeToMove = tNode;
-                               }
-                       }
-                       
-                       //lets move caret to the newly created block
-                       newrange = dijit.range.create(this.editor.window);
-                       newrange.setStart(newblock, 0);
-                       selection.removeAllRanges();
-                       selection.addRange(newrange);
-                       if(this.editor.height){
-                               dijit.scrollIntoView(newblock);
-                       }
-                       if(dojo.isMoz){
-                               // press enter in middle of P may leave a trailing <br/>, let's remove it later
-                               this._pressedEnterInBlock = block.blockNode;
-                       }
-               }
-               return _letBrowserHandle;
-       },
-
-       removeTrailingBr: function(container){
-               // summary:
-               //              If last child of container is a <br>, then remove it.
-               // tags:
-               //              private
-               var para = /P|DIV|LI/i.test(container.tagName) ?
-                       container : dijit._editor.selection.getParentOfType(container,['P','DIV','LI']);
-
-               if(!para){ return; }
-               if(para.lastChild){
-                       if((para.childNodes.length > 1 && para.lastChild.nodeType == 3 && /^[\s\xAD]*$/.test(para.lastChild.nodeValue)) ||
-                               para.lastChild.tagName=='BR'){
-
-                               dojo.destroy(para.lastChild);
-                       }
-               }
-               if(!para.childNodes.length){
-                       para.innerHTML=this.bogusHtmlContent;
-               }
-       },
-       _fixNewLineBehaviorForIE: function(d){
-               // summary:
-               //              Insert CSS so <p> nodes don't have spacing around them,
-               //              thus hiding the fact that ENTER key on IE is creating new
-               //              paragraphs
-
-               // cannot use !important since there may be custom user styling;
-               var doc = this.editor.document;
-               if(doc.__INSERTED_EDITIOR_NEWLINE_CSS === undefined){
-                       var style = dojo.create("style", {type: "text/css"}, doc.getElementsByTagName("head")[0]);
-                       style.styleSheet.cssText = "p{margin:0;}"; // cannot use !important since there may be custom user styling;
-                       this.editor.document.__INSERTED_EDITIOR_NEWLINE_CSS = true;
-               }
-               return d;
-       },
-       regularPsToSingleLinePs: function(element, noWhiteSpaceInEmptyP){
-               // summary:
-               //              Converts a <p> node containing <br>'s into multiple <p> nodes.
-               // description:
-               //              See singleLinePsToRegularPs().   This method does the
-               //              opposite thing, and is used as a pre-filter when loading the
-               //              editor, to mirror the effects of the post-filter at end of edit.
-               // tags:
-               //              private
-               function wrapLinesInPs(el){
-                 // move "lines" of top-level text nodes into ps
-                       function wrapNodes(nodes){
-                               // nodes are assumed to all be siblings
-                               var newP = nodes[0].ownerDocument.createElement('p'); // FIXME: not very idiomatic
-                               nodes[0].parentNode.insertBefore(newP, nodes[0]);
-                               dojo.forEach(nodes, function(node){
-                                       newP.appendChild(node);
-                               });
-                       }
-
-                       var currentNodeIndex = 0;
-                       var nodesInLine = [];
-                       var currentNode;
-                       while(currentNodeIndex < el.childNodes.length){
-                               currentNode = el.childNodes[currentNodeIndex];
-                               if( currentNode.nodeType==3 ||  // text node
-                                       (currentNode.nodeType==1 && currentNode.nodeName!='BR' && dojo.style(currentNode, "display")!="block")
-                               ){
-                                       nodesInLine.push(currentNode);
-                               }else{
-                                       // hit line delimiter; process nodesInLine if there are any
-                                       var nextCurrentNode = currentNode.nextSibling;
-                                       if(nodesInLine.length){
-                                               wrapNodes(nodesInLine);
-                                               currentNodeIndex = (currentNodeIndex+1)-nodesInLine.length;
-                                               if(currentNode.nodeName=="BR"){
-                                                       dojo.destroy(currentNode);
-                                               }
-                                       }
-                                       nodesInLine = [];
-                               }
-                               currentNodeIndex++;
-                       }
-                       if(nodesInLine.length){ wrapNodes(nodesInLine); }
-               }
-
-               function splitP(el){
-                       // split a paragraph into seperate paragraphs at BRs
-                       var currentNode = null;
-                       var trailingNodes = [];
-                       var lastNodeIndex = el.childNodes.length-1;
-                       for(var i=lastNodeIndex; i>=0; i--){
-                               currentNode = el.childNodes[i];
-                               if(currentNode.nodeName=="BR"){
-                                       var newP = currentNode.ownerDocument.createElement('p');
-                                       dojo.place(newP, el, "after");
-                                       if(trailingNodes.length==0 && i != lastNodeIndex){
-                                               newP.innerHTML = "&nbsp;"
-                                       }
-                                       dojo.forEach(trailingNodes, function(node){
-                                               newP.appendChild(node);
-                                       });
-                                       dojo.destroy(currentNode);
-                                       trailingNodes = [];
-                               }else{
-                                       trailingNodes.unshift(currentNode);
-                               }
-                       }
-               }
-
-               var pList = [];
-               var ps = element.getElementsByTagName('p');
-               dojo.forEach(ps, function(p){ pList.push(p); });
-               dojo.forEach(pList, function(p){
-                       var prevSib = p.previousSibling;
-                       if(     (prevSib) && (prevSib.nodeType == 1) && 
-                               (prevSib.nodeName == 'P' || dojo.style(prevSib, 'display') != 'block')
-                       ){
-                               var newP = p.parentNode.insertBefore(this.document.createElement('p'), p);
-                               // this is essential to prevent IE from losing the P.
-                               // if it's going to be innerHTML'd later we need
-                               // to add the &nbsp; to _really_ force the issue
-                               newP.innerHTML = noWhiteSpaceInEmptyP ? "" : "&nbsp;";
-                       }
-                       splitP(p);
-               },this.editor);
-               wrapLinesInPs(element);
-               return element;
-       },
-
-       singleLinePsToRegularPs: function(element){
-               // summary:
-               //              Called as post-filter.
-               //              Apparently collapses adjacent <p> nodes into a single <p>
-               //              nodes with <br> separating each line.
-               //
-               // example:
-               //              Given this input:
-               //      |       <p>line 1</p>
-               //      |       <p>line 2</p>
-               //      |       <ol>
-               //      |               <li>item 1
-               //      |               <li>item 2
-               //      |       </ol>
-               //      |       <p>line 3</p>
-               //      |       <p>line 4</p>
-               //
-               //              Will convert to:
-               //      |       <p>line 1<br>line 2</p>
-               //      |       <ol>
-               //      |               <li>item 1
-               //      |               <li>item 2
-               //      |       </ol>
-               //      |       <p>line 3<br>line 4</p>
-               //
-               //              Not sure why this situation would even come up after the pre-filter and
-               //              the enter-key-handling code.
-               //
-               // tags:
-               //              private
-
-               function getParagraphParents(node){
-                       // summary:
-                       //              Used to get list of all nodes that contain paragraphs.
-                       //              Seems like that would just be the very top node itself, but apparently not.
-                       var ps = node.getElementsByTagName('p');
-                       var parents = [];
-                       for(var i=0; i<ps.length; i++){
-                               var p = ps[i];
-                               var knownParent = false;
-                               for(var k=0; k < parents.length; k++){
-                                       if(parents[k] === p.parentNode){
-                                               knownParent = true;
-                                               break;
-                                       }
-                               }
-                               if(!knownParent){
-                                       parents.push(p.parentNode);
-                               }
-                       }
-                       return parents;
-               }
-
-               function isParagraphDelimiter(node){
-                       return (!node.childNodes.length || node.innerHTML=="&nbsp;");
-               }
-
-               var paragraphContainers = getParagraphParents(element);
-               for(var i=0; i<paragraphContainers.length; i++){
-                       var container = paragraphContainers[i];
-                       var firstPInBlock = null;
-                       var node = container.firstChild;
-                       var deleteNode = null;
-                       while(node){
-                               if(node.nodeType != 1 || node.tagName != 'P' ||
-                                               (node.getAttributeNode('style') || {/*no style*/}).specified){
-                                       firstPInBlock = null;
-                               }else if(isParagraphDelimiter(node)){
-                                       deleteNode = node;
-                                       firstPInBlock = null;
-                               }else{
-                                       if(firstPInBlock == null){
-                                               firstPInBlock = node;
-                                       }else{
-                                               if( (!firstPInBlock.lastChild || firstPInBlock.lastChild.nodeName != 'BR') &&
-                                                       (node.firstChild) &&
-                                                       (node.firstChild.nodeName != 'BR')
-                                               ){
-                                                       firstPInBlock.appendChild(this.editor.document.createElement('br'));
-                                               }
-                                               while(node.firstChild){
-                                                       firstPInBlock.appendChild(node.firstChild);
-                                               }
-                                               deleteNode = node;
-                                       }
-                               }
-                               node = node.nextSibling;
-                               if(deleteNode){
-                                       dojo.destroy(deleteNode);
-                                       deleteNode = null;
-                               }
-                       }
-               }
-               return element;
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.Editor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Editor"] = true;
-dojo.provide("dijit.Editor");
-
-
-
-
-
-
-
-
-
-
-
-
-
-dojo.declare(
-       "dijit.Editor",
-       dijit._editor.RichText,
-       {
-               // summary:
-               //              A rich text Editing widget
-               //
-               // description:
-               //              This widget provides basic WYSIWYG editing features, based on the browser's
-               //              underlying rich text editing capability, accompanied by a toolbar (`dijit.Toolbar`).
-               //              A plugin model is available to extend the editor's capabilities as well as the
-               //              the options available in the toolbar.  Content generation may vary across
-               //              browsers, and clipboard operations may have different results, to name
-               //              a few limitations.  Note: this widget should not be used with the HTML
-               //              &lt;TEXTAREA&gt; tag -- see dijit._editor.RichText for details.
-
-               // plugins: Object[]
-               //              A list of plugin names (as strings) or instances (as objects)
-               //              for this widget.
-               //
-               //              When declared in markup, it might look like:
-               //      |       plugins="['bold',{name:'dijit._editor.plugins.FontChoice', command:'fontName', generic:true}]"
-               plugins: null,
-
-               // extraPlugins: Object[]
-               //              A list of extra plugin names which will be appended to plugins array
-               extraPlugins: null,
-
-               constructor: function(){
-                       // summary:
-                       //              Runs on widget initialization to setup arrays etc.
-                       // tags:
-                       //              private
-
-                       if(!dojo.isArray(this.plugins)){
-                               this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|",
-                               "insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull",
-                               "dijit._editor.plugins.EnterKeyHandling" /*, "createLink"*/];
-                       }
-
-                       this._plugins=[];
-                       this._editInterval = this.editActionInterval * 1000;
-
-                       //IE will always lose focus when other element gets focus, while for FF and safari,
-                       //when no iframe is used, focus will be lost whenever another element gets focus.
-                       //For IE, we can connect to onBeforeDeactivate, which will be called right before
-                       //the focus is lost, so we can obtain the selected range. For other browsers,
-                       //no equivelent of onBeforeDeactivate, so we need to do two things to make sure
-                       //selection is properly saved before focus is lost: 1) when user clicks another
-                       //element in the page, in which case we listen to mousedown on the entire page and
-                       //see whether user clicks out of a focus editor, if so, save selection (focus will
-                       //only lost after onmousedown event is fired, so we can obtain correct caret pos.)
-                       //2) when user tabs away from the editor, which is handled in onKeyDown below.
-                       if(dojo.isIE){
-                               this.events.push("onBeforeDeactivate");
-                               this.events.push("onBeforeActivate");
-                       }
-               },
-
-               postCreate: function(){
-                       //for custom undo/redo, if enabled.
-                       this._steps=this._steps.slice(0);
-                       this._undoedSteps=this._undoedSteps.slice(0);
-
-                       if(dojo.isArray(this.extraPlugins)){
-                               this.plugins=this.plugins.concat(this.extraPlugins);
-                       }
-
-                       // Set up a deferred so that the value isn't applied to the editor 
-                       // until all the plugins load, needed to avoid timing condition
-                       // reported in #10537.
-                       this.setValueDeferred = new dojo.Deferred();
-
-                       this.inherited(arguments);
-
-                       this.commands = dojo.i18n.getLocalization("dijit._editor", "commands", this.lang);
-
-                       if(!this.toolbar){
-                               // if we haven't been assigned a toolbar, create one
-                               this.toolbar = new dijit.Toolbar({
-                                       dir: this.dir,
-                                       lang: this.lang
-                               });
-                               this.header.appendChild(this.toolbar.domNode);
-                       }
-
-                       dojo.forEach(this.plugins, this.addPlugin, this);
-
-                       // Okay, denote the value can now be set.
-                       this.setValueDeferred.callback(true);
-
-                       dojo.addClass(this.iframe.parentNode, "dijitEditorIFrameContainer");
-                       dojo.addClass(this.iframe, "dijitEditorIFrame");
-                       dojo.attr(this.iframe, "allowTransparency", true);
-
-                       if(dojo.isWebKit){
-                               // Disable selecting the entire editor by inadvertant double-clicks.
-                               // on buttons, title bar, etc.  Otherwise clicking too fast on
-                               // a button such as undo/redo selects the entire editor.
-                               dojo.style(this.domNode, "KhtmlUserSelect", "none");
-                       }
-                       this.toolbar.startup();
-                       this.onNormalizedDisplayChanged(); //update toolbar button status
-               },
-               destroy: function(){
-                       dojo.forEach(this._plugins, function(p){
-                               if(p && p.destroy){
-                                       p.destroy();
-                               }
-                       });
-                       this._plugins=[];
-                       this.toolbar.destroyRecursive();
-                       delete this.toolbar;
-                       this.inherited(arguments);
-               },
-               addPlugin: function(/*String||Object*/plugin, /*Integer?*/index){
-                       // summary:
-                       //              takes a plugin name as a string or a plugin instance and
-                       //              adds it to the toolbar and associates it with this editor
-                       //              instance. The resulting plugin is added to the Editor's
-                       //              plugins array. If index is passed, it's placed in the plugins
-                       //              array at that index. No big magic, but a nice helper for
-                       //              passing in plugin names via markup.
-                       //
-                       // plugin: String, args object or plugin instance
-                       //
-                       // args:
-                       //              This object will be passed to the plugin constructor
-                       //
-                       // index: Integer
-                       //              Used when creating an instance from
-                       //              something already in this.plugins. Ensures that the new
-                       //              instance is assigned to this.plugins at that index.
-                       var args=dojo.isString(plugin)?{name:plugin}:plugin;
-                       if(!args.setEditor){
-                               var o={"args":args,"plugin":null,"editor":this};
-                               dojo.publish(dijit._scopeName + ".Editor.getPlugin",[o]);
-                               if(!o.plugin){
-                                       var pc = dojo.getObject(args.name);
-                                       if(pc){
-                                               o.plugin=new pc(args);
-                                       }
-                               }
-                               if(!o.plugin){
-                                       console.warn('Cannot find plugin',plugin);
-                                       return;
-                               }
-                               plugin=o.plugin;
-                       }
-                       if(arguments.length > 1){
-                               this._plugins[index] = plugin;
-                       }else{
-                               this._plugins.push(plugin);
-                       }
-                       plugin.setEditor(this);
-                       if(dojo.isFunction(plugin.setToolbar)){
-                               plugin.setToolbar(this.toolbar);
-                       }
-               },
-               //the following 3 functions are required to make the editor play nice under a layout widget, see #4070
-               startup: function(){
-                       // summary:
-                       //              Exists to make Editor work as a child of a layout widget.
-                       //              Developers don't need to call this method.
-                       // tags:
-                       //              protected
-                       //console.log('startup',arguments);
-               },
-               resize: function(size){
-                       // summary:
-                       //              Resize the editor to the specified size, see `dijit.layout._LayoutWidget.resize`
-                       if(size){
-                               // we've been given a height/width for the entire editor (toolbar + contents), calls layout()
-                               // to split the allocated size between the toolbar and the contents
-                               dijit.layout._LayoutWidget.prototype.resize.apply(this, arguments);
-                       }
-                       /*
-                       else{
-                               // do nothing, the editor is already laid out correctly.   The user has probably specified
-                               // the height parameter, which was used to set a size on the iframe
-                       }
-                       */
-               },
-               layout: function(){
-                       // summary:
-                       //              Called from `dijit.layout._LayoutWidget.resize`.  This shouldn't be called directly
-                       // tags:
-                       //              protected
-
-                       // Converts the iframe (or rather the <div> surrounding it) to take all the available space
-                       // except what's needed for the header (toolbars) and footer (breadcrumbs, etc).
-                       // A class was added to the iframe container and some themes style it, so we have to
-                       // calc off the added margins and padding too. See tracker: #10662
-                       var areaHeight = (this._contentBox.h - 
-                               (this.getHeaderHeight() + this.getFooterHeight() + 
-                                dojo._getPadBorderExtents(this.iframe.parentNode).h +
-                                dojo._getMarginExtents(this.iframe.parentNode).h));
-                       this.editingArea.style.height = areaHeight + "px";
-                       if(this.iframe){
-                               this.iframe.style.height="100%";
-                       }
-                       this._layoutMode = true;
-               },
-               _onIEMouseDown: function(/*Event*/ e){
-                       // summary:
-                       //              IE only to prevent 2 clicks to focus
-                       // tags:
-                       //              private
-                       var outsideClientArea;
-                       // IE 8's componentFromPoint is broken, which is a shame since it
-                       // was smaller code, but oh well.  We have to do this brute force
-                       // to detect if the click was scroller or not.
-                       var b = this.document.body;
-                       var clientWidth = b.clientWidth;
-                       var clientHeight = b.clientHeight;
-                       var clientLeft = b.clientLeft;
-                       var offsetWidth = b.offsetWidth;
-                       var offsetHeight = b.offsetHeight;
-                       var offsetLeft = b.offsetLeft;
-
-                       //Check for vertical scroller click.
-                       bodyDir = b.dir?b.dir.toLowerCase():""
-                       if(bodyDir != "rtl"){
-                               if(clientWidth < offsetWidth && e.x > clientWidth && e.x < offsetWidth){ 
-                                       // Check the click was between width and offset width, if so, scroller
-                                       outsideClientArea = true;
-                               }
-                       }else{
-                               // RTL mode, we have to go by the left offsets.
-                               if(e.x < clientLeft && e.x > offsetLeft){
-                                       // Check the click was between width and offset width, if so, scroller
-                                       outsideClientArea = true;
-                               }
-                       }
-                       if(!outsideClientArea){
-                               // Okay, might be horiz scroller, check that.
-                               if(clientHeight < offsetHeight && e.y > clientHeight && e.y < offsetHeight){
-                                       // Horizontal scroller.
-                                       outsideClientArea = true;
-                               }
-                       }
-                       if(!outsideClientArea){
-                               delete this._cursorToStart; // Remove the force to cursor to start position. 
-                               delete this._savedSelection; // new mouse position overrides old selection
-                               if(e.target.tagName == "BODY"){
-                                       setTimeout(dojo.hitch(this, "placeCursorAtEnd"), 0);
-                               }
-                               this.inherited(arguments);
-                       }
-               },
-               onBeforeActivate: function(e){
-                       this._restoreSelection();
-               },
-               onBeforeDeactivate: function(e){
-                       // summary:
-                       //              Called on IE right before focus is lost.   Saves the selected range.
-                       // tags:
-                       //              private
-                       if(this.customUndo){
-                               this.endEditing(true);
-                       }
-                       //in IE, the selection will be lost when other elements get focus,
-                       //let's save focus before the editor is deactivated
-                       if(e.target.tagName != "BODY"){
-                               this._saveSelection();
-                       }
-                       //console.log('onBeforeDeactivate',this);
-               },
-
-               /* beginning of custom undo/redo support */
-
-               // customUndo: Boolean
-               //              Whether we shall use custom undo/redo support instead of the native
-               //              browser support. By default, we only enable customUndo for IE, as it
-               //              has broken native undo/redo support. Note: the implementation does
-               //              support other browsers which have W3C DOM2 Range API implemented.
-               //              It was also enabled on WebKit, to fix undo/redo enablement. (#9613)
-               customUndo: dojo.isIE || dojo.isWebKit,
-
-               // editActionInterval: Integer
-               //              When using customUndo, not every keystroke will be saved as a step.
-               //              Instead typing (including delete) will be grouped together: after
-               //              a user stops typing for editActionInterval seconds, a step will be
-               //              saved; if a user resume typing within editActionInterval seconds,
-               //              the timeout will be restarted. By default, editActionInterval is 3
-               //              seconds.
-               editActionInterval: 3,
-
-               beginEditing: function(cmd){
-                       // summary:
-                       //              Called to note that the user has started typing alphanumeric characters, if it's not already noted.
-                       //              Deals with saving undo; see editActionInterval parameter.
-                       // tags:
-                       //              private
-                       if(!this._inEditing){
-                               this._inEditing=true;
-                               this._beginEditing(cmd);
-                       }
-                       if(this.editActionInterval>0){
-                               if(this._editTimer){
-                                       clearTimeout(this._editTimer);
-                               }
-                               this._editTimer = setTimeout(dojo.hitch(this, this.endEditing), this._editInterval);
-                       }
-               },
-               _steps:[],
-               _undoedSteps:[],
-               execCommand: function(cmd){
-                       // summary:
-                       //              Main handler for executing any commands to the editor, like paste, bold, etc.
-                       //      Called by plugins, but not meant to be called by end users.
-                       // tags:
-                       //              protected
-                       if(this.customUndo && (cmd == 'undo' || cmd == 'redo')){
-                               return this[cmd]();
-                       }else{
-                               if(this.customUndo){
-                                       this.endEditing();
-                                       this._beginEditing();
-                               }
-                               var r;
-                               try{
-                                       r = this.inherited('execCommand', arguments);
-                                       if(dojo.isWebKit && cmd == 'paste' && !r){ //see #4598: safari does not support invoking paste from js
-                                               throw { code: 1011 }; // throw an object like Mozilla's error
-                                       }
-                               }catch(e){
-                                       //TODO: when else might we get an exception?  Do we need the Mozilla test below?
-                                       if(e.code == 1011 /* Mozilla: service denied */ && /copy|cut|paste/.test(cmd)){
-                                               // Warn user of platform limitation.  Cannot programmatically access clipboard. See ticket #4136
-                                               var sub = dojo.string.substitute,
-                                                       accel = {cut:'X', copy:'C', paste:'V'};
-                                               alert(sub(this.commands.systemShortcut,
-                                                       [this.commands[cmd], sub(this.commands[dojo.isMac ? 'appleKey' : 'ctrlKey'], [accel[cmd]])]));
-                                       }
-                                       r = false;
-                               }
-                               if(this.customUndo){
-                                       this._endEditing();
-                               }
-                               return r;
-                       }
-               },
-               queryCommandEnabled: function(cmd){
-                       // summary:
-                       //              Returns true if specified editor command is enabled.
-                       //      Used by the plugins to know when to highlight/not highlight buttons.
-                       // tags:
-                       //              protected
-                       if(this.customUndo && (cmd == 'undo' || cmd == 'redo')){
-                               return cmd == 'undo' ? (this._steps.length > 1) : (this._undoedSteps.length > 0);
-                       }else{
-                               return this.inherited('queryCommandEnabled',arguments);
-                       }
-               },
-               _moveToBookmark: function(b){
-                       // summary:
-                       //              Selects the text specified in bookmark b
-                       // tags:
-                       //              private
-                       var bookmark = b.mark;
-                       var mark = b.mark;
-                       var col = b.isCollapsed;
-                       var r, sNode, eNode, sel;
-                       if(mark){
-                               if(dojo.isIE){
-                                       if(dojo.isArray(mark)){
-                                               //IE CONTROL, have to use the native bookmark.
-                                               bookmark = [];
-                                               dojo.forEach(mark,function(n){
-                                                       bookmark.push(dijit.range.getNode(n,this.editNode));
-                                               },this);
-                                               dojo.withGlobal(this.window,'moveToBookmark',dijit,[{mark: bookmark, isCollapsed: col}]);
-                                       }else{
-                                               if(mark.startContainer && mark.endContainer){
-                                                       // Use the pseudo WC3 range API.  This works better for positions
-                                                       // than the IE native bookmark code.
-                                                       sel = dijit.range.getSelection(this.window);
-                                                       if(sel && sel.removeAllRanges){
-                                                               sel.removeAllRanges();
-                                                               r = dijit.range.create(this.window);
-                                                               sNode = dijit.range.getNode(mark.startContainer,this.editNode);
-                                                               eNode = dijit.range.getNode(mark.endContainer,this.editNode);
-                                                               if(sNode && eNode){
-                                                                       // Okay, we believe we found the position, so add it into the selection
-                                                                       // There are cases where it may not be found, particularly in undo/redo, when
-                                                                       // IE changes the underlying DOM on us (wraps text in a <p> tag or similar.
-                                                                       // So, in those cases, don't bother restoring selection.
-                                                                       r.setStart(sNode,mark.startOffset);
-                                                                       r.setEnd(eNode,mark.endOffset);
-                                                                       sel.addRange(r);
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }else{//w3c range
-                                       sel = dijit.range.getSelection(this.window);
-                                       if(sel && sel.removeAllRanges){
-                                               sel.removeAllRanges();
-                                               r = dijit.range.create(this.window);
-                                               sNode = dijit.range.getNode(mark.startContainer,this.editNode);
-                                               eNode = dijit.range.getNode(mark.endContainer,this.editNode);
-                                               if(sNode && eNode){
-                                                       // Okay, we believe we found the position, so add it into the selection
-                                                       // There are cases where it may not be found, particularly in undo/redo, when
-                                                       // formatting as been done and so on, so don't restore selection then.
-                                                       r.setStart(sNode,mark.startOffset);
-                                                       r.setEnd(eNode,mark.endOffset);
-                                                       sel.addRange(r);
-                                               }
-                                       }
-                               }
-                       }
-               },
-               _changeToStep: function(from, to){
-                       // summary:
-                       //              Reverts editor to "to" setting, from the undo stack.
-                       // tags:
-                       //              private
-                       this.setValue(to.text);
-                       var b=to.bookmark;
-                       if(!b){ return; }
-                       this._moveToBookmark(b);
-               },
-               undo: function(){
-                       // summary:
-                       //              Handler for editor undo (ex: ctrl-z) operation
-                       // tags:
-                       //              private
-                       //console.log('undo');
-                       var ret = false;
-                       if(!this._undoRedoActive){
-                               this._undoRedoActive = true;
-                               this.endEditing(true);
-                               var s=this._steps.pop();
-                               if(s && this._steps.length>0){
-                                       this.focus();
-                                       this._changeToStep(s,this._steps[this._steps.length-1]);
-                                       this._undoedSteps.push(s);
-                                       this.onDisplayChanged();
-                                       delete this._undoRedoActive;
-                                       ret = true;
-                               }
-                               delete this._undoRedoActive;
-                       }       
-                       return ret;
-               },
-               redo: function(){
-                       // summary:
-                       //              Handler for editor redo (ex: ctrl-y) operation
-                       // tags:
-                       //              private
-                       //console.log('redo');
-                       var ret = false;
-                       if(!this._undoRedoActive){
-                               this._undoRedoActive = true;
-                               this.endEditing(true);
-                               var s=this._undoedSteps.pop();
-                               if(s && this._steps.length>0){
-                                       this.focus();
-                                       this._changeToStep(this._steps[this._steps.length-1],s);
-                                       this._steps.push(s);
-                                       this.onDisplayChanged();
-                                       ret = true;
-                               }
-                               delete this._undoRedoActive;
-                       }
-                       return ret;
-               },
-               endEditing: function(ignore_caret){
-                       // summary:
-                       //              Called to note that the user has stopped typing alphanumeric characters, if it's not already noted.
-                       //              Deals with saving undo; see editActionInterval parameter.
-                       // tags:
-                       //              private
-                       if(this._editTimer){
-                               clearTimeout(this._editTimer);
-                       }
-                       if(this._inEditing){
-                               this._endEditing(ignore_caret);
-                               this._inEditing=false;
-                       }
-               },
-
-               _getBookmark: function(){
-                       // summary:
-                       //              Get the currently selected text
-                       // tags:
-                       //              protected
-                       var b=dojo.withGlobal(this.window,dijit.getBookmark);
-                       var tmp=[];
-                       if(b && b.mark){
-                               var mark = b.mark;
-                               if(dojo.isIE){
-                                       // Try to use the pseudo range API on IE for better accuracy.
-                                       var sel = dijit.range.getSelection(this.window);
-                                       if(!dojo.isArray(mark)){
-                                               if(sel){
-                                                       var range;
-                                                       if(sel.rangeCount){
-                                                               range = sel.getRangeAt(0);
-                                                       }
-                                                       if(range){
-                                                               b.mark = range.cloneRange();
-                                                       }else{
-                                                               b.mark = dojo.withGlobal(this.window,dijit.getBookmark);
-                                                       }
-                                               }
-                                       }else{
-                                               // Control ranges (img, table, etc), handle differently.
-                                               dojo.forEach(b.mark,function(n){
-                                                       tmp.push(dijit.range.getIndex(n,this.editNode).o);
-                                               },this);
-                                               b.mark = tmp;
-                                       }
-                               }
-                               try{
-                                       if(b.mark && b.mark.startContainer){
-                                               tmp=dijit.range.getIndex(b.mark.startContainer,this.editNode).o;
-                                               b.mark={startContainer:tmp,
-                                                       startOffset:b.mark.startOffset,
-                                                       endContainer:b.mark.endContainer===b.mark.startContainer?tmp:dijit.range.getIndex(b.mark.endContainer,this.editNode).o,
-                                                       endOffset:b.mark.endOffset};
-                                       }
-                               }catch(e){
-                                       b.mark = null;
-                               }
-                       }
-                       return b;
-               },
-               _beginEditing: function(cmd){
-                       // summary:
-                       //              Called when the user starts typing alphanumeric characters.
-                       //              Deals with saving undo; see editActionInterval parameter.
-                       // tags:
-                       //              private
-                       if(this._steps.length === 0){
-                               // You want to use the editor content without post filtering
-                               // to make sure selection restores right for the 'initial' state.
-                               // and undo is called.  So not using this.savedContent, as it was 'processed'
-                               // and the line-up for selections may have been altered.
-                               this._steps.push({'text':dijit._editor.getChildrenHtml(this.editNode),'bookmark':this._getBookmark()});
-                       }
-               },
-               _endEditing: function(ignore_caret){
-                       // summary:
-                       //              Called when the user stops typing alphanumeric characters.
-                       //              Deals with saving undo; see editActionInterval parameter.
-                       // tags:
-                       //              private
-                       // Avoid filtering to make sure selections restore.
-                       var v = dijit._editor.getChildrenHtml(this.editNode);
-
-                       this._undoedSteps=[];//clear undoed steps
-                       this._steps.push({text: v, bookmark: this._getBookmark()});
-               },
-               onKeyDown: function(e){
-                       // summary:
-                       //              Handler for onkeydown event.
-                       // tags:
-                       //              private
-
-                       //We need to save selection if the user TAB away from this editor
-                       //no need to call _saveSelection for IE, as that will be taken care of in onBeforeDeactivate
-                       if(!dojo.isIE && !this.iframe && e.keyCode == dojo.keys.TAB && !this.tabIndent){
-                               this._saveSelection();
-                       }
-                       if(!this.customUndo){
-                               this.inherited(arguments);
-                               return;
-                       }
-                       var k = e.keyCode, ks = dojo.keys;
-                       if(e.ctrlKey && !e.altKey){//undo and redo only if the special right Alt + z/y are not pressed #5892
-                               if(k == 90 || k == 122){ //z
-                                       dojo.stopEvent(e);
-                                       this.undo();
-                                       return;
-                               }else if(k == 89 || k == 121){ //y
-                                       dojo.stopEvent(e);
-                                       this.redo();
-                                       return;
-                               }
-                       }
-                       this.inherited(arguments);
-
-                       switch(k){
-                                       case ks.ENTER:
-                                       case ks.BACKSPACE:
-                                       case ks.DELETE:
-                                               this.beginEditing();
-                                               break;
-                                       case 88: //x
-                                       case 86: //v
-                                               if(e.ctrlKey && !e.altKey && !e.metaKey){
-                                                       this.endEditing();//end current typing step if any
-                                                       if(e.keyCode == 88){
-                                                               this.beginEditing('cut');
-                                                               //use timeout to trigger after the cut is complete
-                                                               setTimeout(dojo.hitch(this, this.endEditing), 1);
-                                                       }else{
-                                                               this.beginEditing('paste');
-                                                               //use timeout to trigger after the paste is complete
-                                                               setTimeout(dojo.hitch(this, this.endEditing), 1);
-                                                       }
-                                                       break;
-                                               }
-                                               //pass through
-                                       default:
-                                               if(!e.ctrlKey && !e.altKey && !e.metaKey && (e.keyCode<dojo.keys.F1 || e.keyCode>dojo.keys.F15)){
-                                                       this.beginEditing();
-                                                       break;
-                                               }
-                                               //pass through
-                                       case ks.ALT:
-                                               this.endEditing();
-                                               break;
-                                       case ks.UP_ARROW:
-                                       case ks.DOWN_ARROW:
-                                       case ks.LEFT_ARROW:
-                                       case ks.RIGHT_ARROW:
-                                       case ks.HOME:
-                                       case ks.END:
-                                       case ks.PAGE_UP:
-                                       case ks.PAGE_DOWN:
-                                               this.endEditing(true);
-                                               break;
-                                       //maybe ctrl+backspace/delete, so don't endEditing when ctrl is pressed
-                                       case ks.CTRL:
-                                       case ks.SHIFT:
-                                       case ks.TAB:
-                                               break;
-                               }
-               },
-               _onBlur: function(){
-                       // summary:
-                       //              Called from focus manager when focus has moved away from this editor
-                       // tags:
-                       //              protected
-
-                       //this._saveSelection();
-                       this.inherited('_onBlur',arguments);
-                       this.endEditing(true);
-               },
-               _saveSelection: function(){
-                       // summary:
-                       //              Save the currently selected text in _savedSelection attribute
-                       // tags:
-                       //              private
-                       this._savedSelection=this._getBookmark();
-                       //console.log('save selection',this._savedSelection,this);
-               },
-               _restoreSelection: function(){
-                       // summary:
-                       //              Re-select the text specified in _savedSelection attribute;
-                       //              see _saveSelection().
-                       // tags:
-                       //              private
-                       if(this._savedSelection){
-                               // Clear off cursor to start, we're deliberately going to a selection.
-                               delete this._cursorToStart;
-                               // only restore the selection if the current range is collapsed
-                               // if not collapsed, then it means the editor does not lose
-                               // selection and there is no need to restore it
-                               if(dojo.withGlobal(this.window,'isCollapsed',dijit)){
-                                       this._moveToBookmark(this._savedSelection);
-                               }
-                               delete this._savedSelection;
-                       }
-               },
-
-               onClick: function(){
-                       // summary:
-                       //              Handler for when editor is clicked
-                       // tags:
-                       //              protected
-                       this.endEditing(true);
-                       this.inherited(arguments);
-               },
-
-               _setDisabledAttr: function(/*Boolean*/ value){
-                       if(!this.disabled && value){
-                               // Disable editor: disable all enabled buttons and remember that list
-                               this._buttonEnabledPlugins = dojo.filter(this._plugins, function(p){
-                                       if (p && p.button && !p.button.get("disabled")) {
-                                               p.button.set("disabled", true);
-                                               return true;
-                                       }
-                                       return false;
-                               });
-                       }else if(this.disabled && !value){
-                               // Enable editor: we only want to enable the buttons that should be
-                               // enabled (for example, the outdent button shouldn't be enabled if the current
-                               // text can't be outdented).
-                               dojo.forEach(this._buttonEnabledPlugins, function(p){
-                                       p.button.attr("disabled", false);
-                                       p.updateState && p.updateState();       // just in case something changed, like caret position
-                               });
-                       }
-                       
-                       this.inherited(arguments);
-               },
-               
-               _setStateClass: function(){
-                       this.inherited(arguments);
-                       
-                       // Let theme set the editor's text color based on editor enabled/disabled state.
-                       // We need to jump through hoops because the main document (where the theme CSS is)
-                       // is separate from the iframe's document.
-                       if(this.document && this.document.body){
-                               dojo.style(this.document.body, "color", dojo.style(this.iframe, "color"));
-                       }
-               }
-       }
-);
-
-// Register the "default plugins", ie, the built-in editor commands
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-       if(o.plugin){ return; }
-       var args = o.args, p;
-       var _p = dijit._editor._Plugin;
-       var name = args.name;
-       switch(name){
-               case "undo": case "redo": case "cut": case "copy": case "paste": case "insertOrderedList":
-               case "insertUnorderedList": case "indent": case "outdent": case "justifyCenter":
-               case "justifyFull": case "justifyLeft": case "justifyRight": case "delete":
-               case "selectAll": case "removeFormat": case "unlink":
-               case "insertHorizontalRule":
-                       p = new _p({ command: name });
-                       break;
-
-               case "bold": case "italic": case "underline": case "strikethrough":
-               case "subscript": case "superscript":
-                       p = new _p({ buttonClass: dijit.form.ToggleButton, command: name });
-                       break;
-               case "|":
-                       p = new _p({ button: new dijit.ToolbarSeparator(), setEditor: function(editor) {this.editor = editor;} });
-       }
-//     console.log('name',name,p);
-       o.plugin=p;
-});
-
-}
-
-if(!dojo._hasResource["dojo.regexp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.regexp"] = true;
-dojo.provide("dojo.regexp");
-
-/*=====
-dojo.regexp = {
-       // summary: Regular expressions and Builder resources
-};
-=====*/
-
-dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){
-       //      summary:
-       //              Adds escape sequences for special characters in regular expressions
-       // except:
-       //              a String with special characters to be left unescaped
-
-       return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, function(ch){
-               if(except && except.indexOf(ch) != -1){
-                       return ch;
-               }
-               return "\\" + ch;
-       }); // String
-}
-
-dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){
-       //      summary:
-       //              Builds a regular expression that groups subexpressions
-       //      description:
-       //              A utility function used by some of the RE generators. The
-       //              subexpressions are constructed by the function, re, in the second
-       //              parameter.  re builds one subexpression for each elem in the array
-       //              a, in the first parameter. Returns a string for a regular
-       //              expression that groups all the subexpressions.
-       // arr:
-       //              A single value or an array of values.
-       // re:
-       //              A function. Takes one parameter and converts it to a regular
-       //              expression. 
-       // nonCapture:
-       //              If true, uses non-capturing match, otherwise matches are retained
-       //              by regular expression. Defaults to false
-
-       // case 1: a is a single value.
-       if(!(arr instanceof Array)){
-               return re(arr); // String
-       }
-
-       // case 2: a is an array
-       var b = [];
-       for(var i = 0; i < arr.length; i++){
-               // convert each elem to a RE
-               b.push(re(arr[i]));
-       }
-
-        // join the REs as alternatives in a RE group.
-       return dojo.regexp.group(b.join("|"), nonCapture); // String
-}
-
-dojo.regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){
-       // summary:
-       //              adds group match to expression
-       // nonCapture:
-       //              If true, uses non-capturing match, otherwise matches are retained
-       //              by regular expression. 
-       return "(" + (nonCapture ? "?:":"") + expression + ")"; // String
-}
-
-}
-
-if(!dojo._hasResource["dojo.data.util.sorter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.data.util.sorter"] = true;
-dojo.provide("dojo.data.util.sorter");
-
-dojo.data.util.sorter.basicComparator = function(      /*anything*/ a, 
-                                                                                                       /*anything*/ b){
-       //      summary:  
-       //              Basic comparision function that compares if an item is greater or less than another item
-       //      description:  
-       //              returns 1 if a > b, -1 if a < b, 0 if equal.
-       //              'null' values (null, undefined) are treated as larger values so that they're pushed to the end of the list.
-       //              And compared to each other, null is equivalent to undefined.
-       
-       //null is a problematic compare, so if null, we set to undefined.
-       //Makes the check logic simple, compact, and consistent
-       //And (null == undefined) === true, so the check later against null
-       //works for undefined and is less bytes.
-       var r = -1;
-       if(a === null){
-               a = undefined;
-       }
-       if(b === null){
-               b = undefined;
-       }
-       if(a == b){
-               r = 0; 
-       }else if(a > b || a == null){
-               r = 1; 
-       }
-       return r; //int {-1,0,1}
-};
-
-dojo.data.util.sorter.createSortFunction = function(   /* attributes array */sortSpec,
-                                                                                                               /*dojo.data.core.Read*/ store){
-       //      summary:  
-       //              Helper function to generate the sorting function based off the list of sort attributes.
-       //      description:  
-       //              The sort function creation will look for a property on the store called 'comparatorMap'.  If it exists
-       //              it will look in the mapping for comparisons function for the attributes.  If one is found, it will
-       //              use it instead of the basic comparator, which is typically used for strings, ints, booleans, and dates.
-       //              Returns the sorting function for this particular list of attributes and sorting directions.
-       //
-       //      sortSpec: array
-       //              A JS object that array that defines out what attribute names to sort on and whether it should be descenting or asending.
-       //              The objects should be formatted as follows:
-       //              {
-       //                      attribute: "attributeName-string" || attribute,
-       //                      descending: true|false;   // Default is false.
-       //              }
-       //      store: object
-       //              The datastore object to look up item values from.
-       //
-       var sortFunctions=[];
-
-       function createSortFunction(attr, dir, comp, s){
-               //Passing in comp and s (comparator and store), makes this
-               //function much faster.
-               return function(itemA, itemB){
-                       var a = s.getValue(itemA, attr);
-                       var b = s.getValue(itemB, attr);
-                       return dir * comp(a,b); //int
-               };
-       }
-       var sortAttribute;
-       var map = store.comparatorMap;
-       var bc = dojo.data.util.sorter.basicComparator;
-       for(var i = 0; i < sortSpec.length; i++){
-               sortAttribute = sortSpec[i];
-               var attr = sortAttribute.attribute;
-               if(attr){
-                       var dir = (sortAttribute.descending) ? -1 : 1;
-                       var comp = bc;
-                       if(map){
-                               if(typeof attr !== "string" && ("toString" in attr)){
-                                        attr = attr.toString();
-                               }
-                               comp = map[attr] || bc;
-                       }
-                       sortFunctions.push(createSortFunction(attr, 
-                               dir, comp, store));
-               }
-       }
-       return function(rowA, rowB){
-               var i=0;
-               while(i < sortFunctions.length){
-                       var ret = sortFunctions[i++](rowA, rowB);
-                       if(ret !== 0){
-                               return ret;//int
-                       }
-               }
-               return 0; //int  
-       }; // Function
-};
-
-}
-
-if(!dojo._hasResource["dojo.data.util.simpleFetch"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.data.util.simpleFetch"] = true;
-dojo.provide("dojo.data.util.simpleFetch");
-
-
-dojo.data.util.simpleFetch.fetch = function(/* Object? */ request){
-       //      summary:
-       //              The simpleFetch mixin is designed to serve as a set of function(s) that can
-       //              be mixed into other datastore implementations to accelerate their development.  
-       //              The simpleFetch mixin should work well for any datastore that can respond to a _fetchItems() 
-       //              call by returning an array of all the found items that matched the query.  The simpleFetch mixin
-       //              is not designed to work for datastores that respond to a fetch() call by incrementally
-       //              loading items, or sequentially loading partial batches of the result
-       //              set.  For datastores that mixin simpleFetch, simpleFetch 
-       //              implements a fetch method that automatically handles eight of the fetch()
-       //              arguments -- onBegin, onItem, onComplete, onError, start, count, sort and scope
-       //              The class mixing in simpleFetch should not implement fetch(),
-       //              but should instead implement a _fetchItems() method.  The _fetchItems() 
-       //              method takes three arguments, the keywordArgs object that was passed 
-       //              to fetch(), a callback function to be called when the result array is
-       //              available, and an error callback to be called if something goes wrong.
-       //              The _fetchItems() method should ignore any keywordArgs parameters for
-       //              start, count, onBegin, onItem, onComplete, onError, sort, and scope.  
-       //              The _fetchItems() method needs to correctly handle any other keywordArgs
-       //              parameters, including the query parameter and any optional parameters 
-       //              (such as includeChildren).  The _fetchItems() method should create an array of 
-       //              result items and pass it to the fetchHandler along with the original request object 
-       //              -- or, the _fetchItems() method may, if it wants to, create an new request object 
-       //              with other specifics about the request that are specific to the datastore and pass 
-       //              that as the request object to the handler.
-       //
-       //              For more information on this specific function, see dojo.data.api.Read.fetch()
-       request = request || {};
-       if(!request.store){
-               request.store = this;
-       }
-       var self = this;
-
-       var _errorHandler = function(errorData, requestObject){
-               if(requestObject.onError){
-                       var scope = requestObject.scope || dojo.global;
-                       requestObject.onError.call(scope, errorData, requestObject);
-               }
-       };
-
-       var _fetchHandler = function(items, requestObject){
-               var oldAbortFunction = requestObject.abort || null;
-               var aborted = false;
-
-               var startIndex = requestObject.start?requestObject.start:0;
-               var endIndex = (requestObject.count && (requestObject.count !== Infinity))?(startIndex + requestObject.count):items.length;
-
-               requestObject.abort = function(){
-                       aborted = true;
-                       if(oldAbortFunction){
-                               oldAbortFunction.call(requestObject);
-                       }
-               };
-
-               var scope = requestObject.scope || dojo.global;
-               if(!requestObject.store){
-                       requestObject.store = self;
-               }
-               if(requestObject.onBegin){
-                       requestObject.onBegin.call(scope, items.length, requestObject);
-               }
-               if(requestObject.sort){
-                       items.sort(dojo.data.util.sorter.createSortFunction(requestObject.sort, self));
-               }
-               if(requestObject.onItem){
-                       for(var i = startIndex; (i < items.length) && (i < endIndex); ++i){
-                               var item = items[i];
-                               if(!aborted){
-                                       requestObject.onItem.call(scope, item, requestObject);
-                               }
-                       }
-               }
-               if(requestObject.onComplete && !aborted){
-                       var subset = null;
-                       if(!requestObject.onItem){
-                               subset = items.slice(startIndex, endIndex);
-                       }
-                       requestObject.onComplete.call(scope, subset, requestObject);
-               }
-       };
-       this._fetchItems(request, _fetchHandler, _errorHandler);
-       return request; // Object
-};
-
-}
-
-if(!dojo._hasResource["dojo.data.util.filter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.data.util.filter"] = true;
-dojo.provide("dojo.data.util.filter");
-
-dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase){
-       //      summary:  
-       //              Helper function to convert a simple pattern to a regular expression for matching.
-       //      description:
-       //              Returns a regular expression object that conforms to the defined conversion rules.
-       //              For example:  
-       //                      ca*   -> /^ca.*$/
-       //                      *ca*  -> /^.*ca.*$/
-       //                      *c\*a*  -> /^.*c\*a.*$/
-       //                      *c\*a?*  -> /^.*c\*a..*$/
-       //                      and so on.
-       //
-       //      pattern: string
-       //              A simple matching pattern to convert that follows basic rules:
-       //                      * Means match anything, so ca* means match anything starting with ca
-       //                      ? Means match single character.  So, b?b will match to bob and bab, and so on.
-       //              \ is an escape character.  So for example, \* means do not treat * as a match, but literal character *.
-       //                              To use a \ as a character in the string, it must be escaped.  So in the pattern it should be 
-       //                              represented by \\ to be treated as an ordinary \ character instead of an escape.
-       //
-       //      ignoreCase:
-       //              An optional flag to indicate if the pattern matching should be treated as case-sensitive or not when comparing
-       //              By default, it is assumed case sensitive.
-
-       var rxp = "^";
-       var c = null;
-       for(var i = 0; i < pattern.length; i++){
-               c = pattern.charAt(i);
-               switch(c){
-                       case '\\':
-                               rxp += c;
-                               i++;
-                               rxp += pattern.charAt(i);
-                               break;
-                       case '*':
-                               rxp += ".*"; break;
-                       case '?':
-                               rxp += "."; break;
-                       case '$':
-                       case '^':
-                       case '/':
-                       case '+':
-                       case '.':
-                       case '|':
-                       case '(':
-                       case ')':
-                       case '{':
-                       case '}':
-                       case '[':
-                       case ']':
-                               rxp += "\\"; //fallthrough
-                       default:
-                               rxp += c;
-               }
-       }
-       rxp += "$";
-       if(ignoreCase){
-               return new RegExp(rxp,"mi"); //RegExp
-       }else{
-               return new RegExp(rxp,"m"); //RegExp
-       }
-       
-};
-
-}
-
-if(!dojo._hasResource["dijit.form.TextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.TextBox"] = true;
-dojo.provide("dijit.form.TextBox");
-
-
-
-dojo.declare(
-       "dijit.form.TextBox",
-       dijit.form._FormValueWidget,
-       {
-               // summary:
-               //              A base class for textbox form inputs
-
-               // trim: Boolean
-               //              Removes leading and trailing whitespace if true.  Default is false.
-               trim: false,
-
-               // uppercase: Boolean
-               //              Converts all characters to uppercase if true.  Default is false.
-               uppercase: false,
-
-               // lowercase: Boolean
-               //              Converts all characters to lowercase if true.  Default is false.
-               lowercase: false,
-
-               // propercase: Boolean
-               //              Converts the first character of each word to uppercase if true.
-               propercase: false,
-
-               //      maxLength: String
-               //              HTML INPUT tag maxLength declaration.
-               maxLength: "",
-
-               //      selectOnClick: [const] Boolean
-               //              If true, all text will be selected when focused with mouse
-               selectOnClick: false,
-
-               //      placeHolder: String
-               //              Defines a hint to help users fill out the input field (as defined in HTML 5).
-               //              This should only contain plain text (no html markup).
-               placeHolder: "",
-               
-               templateString: dojo.cache("dijit.form", "templates/TextBox.html", "<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),
-               _singleNodeTemplate: '<input class="dijit dijitReset dijitLeft dijitInputField" dojoAttachPoint="textbox,focusNode" autocomplete="off" type="${type}" ${!nameAttrSetting} />',
-
-               _buttonInputDisabled: dojo.isIE ? "disabled" : "", // allows IE to disallow focus, but Firefox cannot be disabled for mousedown events
-
-               baseClass: "dijitTextBox",
-
-               attributeMap: dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap, {
-                       maxLength: "focusNode"
-               }),
-               
-               postMixInProperties: function(){
-                       var type = this.type.toLowerCase();
-                       if(this.templateString.toLowerCase() == "input" || ((type == "hidden" || type == "file") && this.templateString == dijit.form.TextBox.prototype.templateString)){
-                               this.templateString = this._singleNodeTemplate;
-                       }
-                       this.inherited(arguments);
-               },
-
-               _setPlaceHolderAttr: function(v){
-                       this.placeHolder = v;
-                       if(!this._phspan){
-                               this._attachPoints.push('_phspan');
-                               /* dijitInputField class gives placeHolder same padding as the input field
-                                * parent node already has dijitInputField class but it doesn't affect this <span>
-                                * since it's position: absolute.
-                                */
-                               this._phspan = dojo.create('span',{className:'dijitPlaceHolder dijitInputField'},this.textbox,'after');
-                       }
-                       this._phspan.innerHTML="";
-                       this._phspan.appendChild(document.createTextNode(v));
-                       
-                       this._updatePlaceHolder();
-               },
-               
-               _updatePlaceHolder: function(){
-                       if(this._phspan){
-                               this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";
-                       }
-               },
-
-               _getValueAttr: function(){
-                       // summary:
-                       //              Hook so attr('value') works as we like.
-                       // description:
-                       //              For `dijit.form.TextBox` this basically returns the value of the <input>.
-                       //
-                       //              For `dijit.form.MappedTextBox` subclasses, which have both
-                       //              a "displayed value" and a separate "submit value",
-                       //              This treats the "displayed value" as the master value, computing the
-                       //              submit value from it via this.parse().
-                       return this.parse(this.get('displayedValue'), this.constraints);
-               },
-
-               _setValueAttr: function(value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){
-                       // summary:
-                       //              Hook so attr('value', ...) works.
-                       //
-                       // description:
-                       //              Sets the value of the widget to "value" which can be of
-                       //              any type as determined by the widget.
-                       //
-                       // value:
-                       //              The visual element value is also set to a corresponding,
-                       //              but not necessarily the same, value.
-                       //
-                       // formattedValue:
-                       //              If specified, used to set the visual element value,
-                       //              otherwise a computed visual value is used.
-                       //
-                       // priorityChange:
-                       //              If true, an onChange event is fired immediately instead of
-                       //              waiting for the next blur event.
-
-                       var filteredValue;
-                       if(value !== undefined){
-                               // TODO: this is calling filter() on both the display value and the actual value.
-                               // I added a comment to the filter() definition about this, but it should be changed.
-                               filteredValue = this.filter(value);
-                               if(typeof formattedValue != "string"){
-                                       if(filteredValue !== null && ((typeof filteredValue != "number") || !isNaN(filteredValue))){
-                                               formattedValue = this.filter(this.format(filteredValue, this.constraints));
-                                       }else{ formattedValue = ''; }
-                               }
-                       }
-                       if(formattedValue != null && formattedValue != undefined && ((typeof formattedValue) != "number" || !isNaN(formattedValue)) && this.textbox.value != formattedValue){
-                               this.textbox.value = formattedValue;
-                       }
-
-                       this._updatePlaceHolder();
-
-                       this.inherited(arguments, [filteredValue, priorityChange]);
-               },
-
-               // displayedValue: String
-               //              For subclasses like ComboBox where the displayed value
-               //              (ex: Kentucky) and the serialized value (ex: KY) are different,
-               //              this represents the displayed value.
-               //
-               //              Setting 'displayedValue' through attr('displayedValue', ...)
-               //              updates 'value', and vice-versa.  Otherwise 'value' is updated
-               //              from 'displayedValue' periodically, like onBlur etc.
-               //
-               //              TODO: move declaration to MappedTextBox?
-               //              Problem is that ComboBox references displayedValue,
-               //              for benefit of FilteringSelect.
-               displayedValue: "",
-
-               getDisplayedValue: function(){
-                       // summary:
-                       //              Deprecated.   Use set('displayedValue') instead.
-                       // tags:
-                       //              deprecated
-                       dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.", "", "2.0");
-                       return this.get('displayedValue');
-               },
-
-               _getDisplayedValueAttr: function(){
-                       // summary:
-                       //              Hook so attr('displayedValue') works.
-                       // description:
-                       //              Returns the displayed value (what the user sees on the screen),
-                       //              after filtering (ie, trimming spaces etc.).
-                       //
-                       //              For some subclasses of TextBox (like ComboBox), the displayed value
-                       //              is different from the serialized value that's actually
-                       //              sent to the server (see dijit.form.ValidationTextBox.serialize)
-
-                       return this.filter(this.textbox.value);
-               },
-
-               setDisplayedValue: function(/*String*/value){
-                       // summary:
-                       //              Deprecated.   Use set('displayedValue', ...) instead.
-                       // tags:
-                       //              deprecated
-                       dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.", "", "2.0");
-                       this.set('displayedValue', value);
-               },
-
-               _setDisplayedValueAttr: function(/*String*/value){
-                       // summary:
-                       //              Hook so attr('displayedValue', ...) works.
-                       // description:
-                       //              Sets the value of the visual element to the string "value".
-                       //              The widget value is also set to a corresponding,
-                       //              but not necessarily the same, value.
-
-                       if(value === null || value === undefined){ value = '' }
-                       else if(typeof value != "string"){ value = String(value) }
-                       this.textbox.value = value;
-                       this._setValueAttr(this.get('value'), undefined, value);
-               },
-
-               format: function(/* String */ value, /* Object */ constraints){
-                       // summary:
-                       //              Replacable function to convert a value to a properly formatted string.
-                       // tags:
-                       //              protected extension
-                       return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value));
-               },
-
-               parse: function(/* String */ value, /* Object */ constraints){
-                       // summary:
-                       //              Replacable function to convert a formatted string to a value
-                       // tags:
-                       //              protected extension
-
-                       return value;   // String
-               },
-
-               _refreshState: function(){
-                       // summary:
-                       //              After the user types some characters, etc., this method is
-                       //              called to check the field for validity etc.  The base method
-                       //              in `dijit.form.TextBox` does nothing, but subclasses override.
-                       // tags:
-                       //              protected
-               },
-
-               _onInput: function(e){
-                       if(e && e.type && /key/i.test(e.type) && e.keyCode){
-                               switch(e.keyCode){
-                                       case dojo.keys.SHIFT:
-                                       case dojo.keys.ALT:
-                                       case dojo.keys.CTRL:
-                                       case dojo.keys.TAB:
-                                               return;
-                               }
-                       }
-                       if(this.intermediateChanges){
-                               var _this = this;
-                               // the setTimeout allows the key to post to the widget input box
-                               setTimeout(function(){ _this._handleOnChange(_this.get('value'), false); }, 0);
-                       }
-                       this._refreshState();
-               },
-
-               postCreate: function(){
-                       // setting the value here is needed since value="" in the template causes "undefined"
-                       // and setting in the DOM (instead of the JS object) helps with form reset actions
-                       if(dojo.isIE){ // IE INPUT tag fontFamily has to be set directly using STYLE
-                               var s = dojo.getComputedStyle(this.domNode);
-                               if(s){
-                                       var ff = s.fontFamily;
-                                       if(ff){
-                                               var inputs = this.domNode.getElementsByTagName("INPUT");
-                                               if(inputs){
-                                                       for(var i=0; i < inputs.length; i++){
-                                                               inputs[i].style.fontFamily = ff;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-                       this.textbox.setAttribute("value", this.textbox.value); // DOM and JS values shuld be the same
-                       this.inherited(arguments);
-                       if(dojo.isMoz || dojo.isOpera){
-                               this.connect(this.textbox, "oninput", this._onInput);
-                       }else{
-                               this.connect(this.textbox, "onkeydown", this._onInput);
-                               this.connect(this.textbox, "onkeyup", this._onInput);
-                               this.connect(this.textbox, "onpaste", this._onInput);
-                               this.connect(this.textbox, "oncut", this._onInput);
-                       }
-               },
-
-               _blankValue: '', // if the textbox is blank, what value should be reported
-               filter: function(val){
-                       // summary:
-                       //              Auto-corrections (such as trimming) that are applied to textbox
-                       //              value on blur or form submit.
-                       // description:
-                       //              For MappedTextBox subclasses, this is called twice
-                       //                      - once with the display value
-                       //                      - once the value as set/returned by attr('value', ...)
-                       //              and attr('value'), ex: a Number for NumberTextBox.
-                       //
-                       //              In the latter case it does corrections like converting null to NaN.  In
-                       //              the former case the NumberTextBox.filter() method calls this.inherited()
-                       //              to execute standard trimming code in TextBox.filter().
-                       //
-                       //              TODO: break this into two methods in 2.0
-                       //
-                       // tags:
-                       //              protected extension
-                       if(val === null){ return this._blankValue; }
-                       if(typeof val != "string"){ return val; }
-                       if(this.trim){
-                               val = dojo.trim(val);
-                       }
-                       if(this.uppercase){
-                               val = val.toUpperCase();
-                       }
-                       if(this.lowercase){
-                               val = val.toLowerCase();
-                       }
-                       if(this.propercase){
-                               val = val.replace(/[^\s]+/g, function(word){
-                                       return word.substring(0,1).toUpperCase() + word.substring(1);
-                               });
-                       }
-                       return val;
-               },
-
-               _setBlurValue: function(){
-                       this._setValueAttr(this.get('value'), true);
-               },
-
-               _onBlur: function(e){
-                       if(this.disabled){ return; }
-                       this._setBlurValue();
-                       this.inherited(arguments);
-
-                       if(this._selectOnClickHandle){
-                               this.disconnect(this._selectOnClickHandle);
-                       }
-                       if(this.selectOnClick && dojo.isMoz){
-                               this.textbox.selectionStart = this.textbox.selectionEnd = undefined; // clear selection so that the next mouse click doesn't reselect
-                       }
-                       
-                       this._updatePlaceHolder();
-               },
-
-               _onFocus: function(/*String*/ by){
-                       if(this.disabled || this.readOnly){ return; }
-
-                       // Select all text on focus via click if nothing already selected.
-                       // Since mouse-up will clear the selection need to defer selection until after mouse-up.
-                       // Don't do anything on focus by tabbing into the widget since there's no associated mouse-up event.
-                       if(this.selectOnClick && by == "mouse"){
-                               this._selectOnClickHandle = this.connect(this.domNode, "onmouseup", function(){
-                                       // Only select all text on first click; otherwise users would have no way to clear
-                                       // the selection.
-                                       this.disconnect(this._selectOnClickHandle);
-
-                                       // Check if the user selected some text manually (mouse-down, mouse-move, mouse-up)
-                                       // and if not, then select all the text
-                                       var textIsNotSelected;
-                                       if(dojo.isIE){
-                                               var range = dojo.doc.selection.createRange();
-                                               var parent = range.parentElement();
-                                               textIsNotSelected = parent == this.textbox && range.text.length == 0;
-                                       }else{
-                                               textIsNotSelected = this.textbox.selectionStart == this.textbox.selectionEnd;
-                                       }
-                                       if(textIsNotSelected){
-                                               dijit.selectInputText(this.textbox);
-                                       }
-                               });
-                       }
-
-                       this._updatePlaceHolder();
-                       
-                       this._refreshState();
-                       this.inherited(arguments);
-               },
-
-               reset: function(){
-                       // Overrides dijit._FormWidget.reset().
-                       // Additionally resets the displayed textbox value to ''
-                       this.textbox.value = '';
-                       this.inherited(arguments);
-               }
-       }
-);
-
-dijit.selectInputText = function(/*DomNode*/element, /*Number?*/ start, /*Number?*/ stop){
-       // summary:
-       //              Select text in the input element argument, from start (default 0), to stop (default end).
-
-       // TODO: use functions in _editor/selection.js?
-       var _window = dojo.global;
-       var _document = dojo.doc;
-       element = dojo.byId(element);
-       if(isNaN(start)){ start = 0; }
-       if(isNaN(stop)){ stop = element.value ? element.value.length : 0; }
-       dijit.focus(element);
-       if(_document["selection"] && dojo.body()["createTextRange"]){ // IE
-               if(element.createTextRange){
-                       var range = element.createTextRange();
-                       with(range){
-                               collapse(true);
-                               moveStart("character", -99999); // move to 0
-                               moveStart("character", start); // delta from 0 is the correct position
-                               moveEnd("character", stop-start);
-                               select();
-                       }
-               }
-       }else if(_window["getSelection"]){
-               if(element.setSelectionRange){
-                       element.setSelectionRange(start, stop);
-               }
-       }
-};
-
-}
-
-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, /*Boolean*/ rtl){
-                       // summary:
-                       //              Display tooltip w/specified contents to right of specified node
-                       //              (To left if there's no space on the right, or if rtl == true)
-
-                       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;
-
-                       var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, dijit.getPopupAroundAlignment((position && position.length) ? position : dijit.Tooltip.defaultPosition, !rtl), 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
-                       this.containerNode.innerHTML="";
-                       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, /*Boolean*/ rtl){
-       // 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, rtl);
-};
-
-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")
-                       ];
-               },
-
-               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.isLeftToRight());
-
-                       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["dijit.form.ValidationTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.ValidationTextBox"] = true;
-dojo.provide("dijit.form.ValidationTextBox");
-
-
-
-
-
-
-
-
-/*=====
-       dijit.form.ValidationTextBox.__Constraints = function(){
-               // locale: String
-               //              locale used for validation, picks up value from this widget's lang attribute
-               // _flags_: anything
-               //              various flags passed to regExpGen function
-               this.locale = "";
-               this._flags_ = "";
-       }
-=====*/
-
-dojo.declare(
-       "dijit.form.ValidationTextBox",
-       dijit.form.TextBox,
-       {
-               // summary:
-               //              Base class for textbox widgets with the ability to validate content of various types and provide user feedback.
-               // tags:
-               //              protected
-
-               templateString: dojo.cache("dijit.form", "templates/ValidationTextBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),
-               baseClass: "dijitTextBox dijitValidationTextBox",
-
-               // required: Boolean
-               //              User is required to enter data into this field.
-               required: false,
-
-               // promptMessage: String
-               //              If defined, display this hint string immediately on focus to the textbox, if empty.
-               //              Think of this like a tooltip that tells the user what to do, not an error message
-               //              that tells the user what they've done wrong.
-               //
-               //              Message disappears when user starts typing.
-               promptMessage: "",
-
-               // invalidMessage: String
-               //              The message to display if value is invalid.
-               //              The translated string value is read from the message file by default.
-               //              Set to "" to use the promptMessage instead.
-               invalidMessage: "$_unset_$",
-
-               // missingMessage: String
-               //              The message to display if value is empty and the field is required.
-               //              The translated string value is read from the message file by default.
-               //              Set to "" to use the invalidMessage instead.
-               missingMessage: "$_unset_$",
-
-               // constraints: dijit.form.ValidationTextBox.__Constraints
-               //              user-defined object needed to pass parameters to the validator functions
-               constraints: {},
-
-               // regExp: [extension protected] String
-               //              regular expression string used to validate the input
-               //              Do not specify both regExp and regExpGen
-               regExp: ".*",
-
-               regExpGen: function(/*dijit.form.ValidationTextBox.__Constraints*/constraints){
-                       // summary:
-                       //              Overridable function used to generate regExp when dependent on constraints.
-                       //              Do not specify both regExp and regExpGen.
-                       // tags:
-                       //              extension protected
-                       return this.regExp; // String
-               },
-
-               // state: [readonly] String
-               //              Shows current state (ie, validation result) of input (Normal, Warning, or Error)
-               state: "",
-
-               // tooltipPosition: String[]
-               //              See description of `dijit.Tooltip.defaultPosition` for details on this parameter.
-               tooltipPosition: [],
-
-               _setValueAttr: function(){
-                       // summary:
-                       //              Hook so attr('value', ...) works.
-                       this.inherited(arguments);
-                       this.validate(this._focused);
-               },
-
-               validator: function(/*anything*/value, /*dijit.form.ValidationTextBox.__Constraints*/constraints){
-                       // summary:
-                       //              Overridable function used to validate the text input against the regular expression.
-                       // tags:
-                       //              protected
-                       return (new RegExp("^(?:" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value) &&
-                               (!this.required || !this._isEmpty(value)) &&
-                               (this._isEmpty(value) || this.parse(value, constraints) !== undefined); // Boolean
-               },
-
-               _isValidSubset: function(){
-                       // summary:
-                       //              Returns true if the value is either already valid or could be made valid by appending characters.
-                       //              This is used for validation while the user [may be] still typing.
-                       return this.textbox.value.search(this._partialre) == 0;
-               },
-
-               isValid: function(/*Boolean*/ isFocused){
-                       // summary:
-                       //              Tests if value is valid.
-                       //              Can override with your own routine in a subclass.
-                       // tags:
-                       //              protected
-                       return this.validator(this.textbox.value, this.constraints);
-               },
-
-               _isEmpty: function(value){
-                       // summary:
-                       //              Checks for whitespace
-                       return /^\s*$/.test(value); // Boolean
-               },
-
-               getErrorMessage: function(/*Boolean*/ isFocused){
-                       // summary:
-                       //              Return an error message to show if appropriate
-                       // tags:
-                       //              protected
-                       return (this.required && this._isEmpty(this.textbox.value)) ? this.missingMessage : this.invalidMessage; // String
-               },
-
-               getPromptMessage: function(/*Boolean*/ isFocused){
-                       // summary:
-                       //              Return a hint message to show when widget is first focused
-                       // tags:
-                       //              protected
-                       return this.promptMessage; // String
-               },
-
-               _maskValidSubsetError: true,
-               validate: function(/*Boolean*/ isFocused){
-                       // summary:
-                       //              Called by oninit, onblur, and onkeypress.
-                       // description:
-                       //              Show missing or invalid messages if appropriate, and highlight textbox field.
-                       // tags:
-                       //              protected
-                       var message = "";
-                       var isValid = this.disabled || this.isValid(isFocused);
-                       if(isValid){ this._maskValidSubsetError = true; }
-                       var isEmpty = this._isEmpty(this.textbox.value);
-                       var isValidSubset = !isValid && !isEmpty && isFocused && this._isValidSubset();
-                       this.state = ((isValid || ((!this._hasBeenBlurred || isFocused) && isEmpty) || isValidSubset) && this._maskValidSubsetError) ? "" : "Error";
-                       if(this.state == "Error"){ this._maskValidSubsetError = isFocused; } // we want the error to show up afer a blur and refocus
-                       this._setStateClass();
-                       dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
-                       if(isFocused){
-                               if(this.state == "Error"){
-                                       message = this.getErrorMessage(true);
-                               }else{
-                                       message = this.getPromptMessage(true); // show the prompt whever there's no error
-                               }
-                               this._maskValidSubsetError = true; // since we're focused, always mask warnings
-                       }
-                       this.displayMessage(message);
-                       return isValid;
-               },
-
-               // _message: String
-               //              Currently displayed message
-               _message: "",
-
-               displayMessage: function(/*String*/ message){
-                       // summary:
-                       //              Overridable method to display validation errors/hints.
-                       //              By default uses a tooltip.
-                       // tags:
-                       //              extension
-                       if(this._message == message){ return; }
-                       this._message = message;
-                       dijit.hideTooltip(this.domNode);
-                       if(message){
-                               dijit.showTooltip(message, this.domNode, this.tooltipPosition, !this.isLeftToRight());
-                       }
-               },
-
-               _refreshState: function(){
-                       // Overrides TextBox._refreshState()
-                       this.validate(this._focused);
-                       this.inherited(arguments);
-               },
-
-               //////////// INITIALIZATION METHODS ///////////////////////////////////////
-
-               constructor: function(){
-                       this.constraints = {};
-               },
-
-               _setConstraintsAttr: function(/* Object */ constraints){
-                       if(!constraints.locale && this.lang){
-                               constraints.locale = this.lang;
-                       }
-                       this.constraints = constraints;
-                       this._computePartialRE();
-               },
-
-               _computePartialRE: function(){
-                       var p = this.regExpGen(this.constraints);
-                       this.regExp = p;
-                       var partialre = "";
-                       // parse the regexp and produce a new regexp that matches valid subsets
-                       // if the regexp is .* then there's no use in matching subsets since everything is valid
-                       if(p != ".*"){ this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,
-                               function (re){
-                                       switch(re.charAt(0)){
-                                               case '{':
-                                               case '+':
-                                               case '?':
-                                               case '*':
-                                               case '^':
-                                               case '$':
-                                               case '|':
-                                               case '(':
-                                                       partialre += re;
-                                                       break;
-                                               case ")":
-                                                       partialre += "|$)";
-                                                       break;
-                                                default:
-                                                       partialre += "(?:"+re+"|$)";
-                                                       break;
-                                       }
-                               }
-                       );}
-                       try{ // this is needed for now since the above regexp parsing needs more test verification
-                               "".search(partialre);
-                       }catch(e){ // should never be here unless the original RE is bad or the parsing is bad
-                               partialre = this.regExp;
-                               console.warn('RegExp error in ' + this.declaredClass + ': ' + this.regExp);
-                       } // should never be here unless the original RE is bad or the parsing is bad
-                       this._partialre = "^(?:" + partialre + ")$";
-               },
-
-               postMixInProperties: function(){
-                       this.inherited(arguments);
-                       this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
-                       if(this.invalidMessage == "$_unset_$"){ this.invalidMessage = this.messages.invalidMessage; }
-                       if(!this.invalidMessage){ this.invalidMessage = this.promptMessage; }
-                       if(this.missingMessage == "$_unset_$"){ this.missingMessage = this.messages.missingMessage; }
-                       if(!this.missingMessage){ this.missingMessage = this.invalidMessage; }
-                       this._setConstraintsAttr(this.constraints); // this needs to happen now (and later) due to codependency on _set*Attr calls attachPoints
-               },
-
-               _setDisabledAttr: function(/*Boolean*/ value){
-                       this.inherited(arguments);      // call FormValueWidget._setDisabledAttr()
-                       this._refreshState();
-               },
-
-               _setRequiredAttr: function(/*Boolean*/ value){
-                       this.required = value;
-                       dijit.setWaiState(this.focusNode, "required", value);
-                       this._refreshState();
-               },
-
-               reset:function(){
-                       // Overrides dijit.form.TextBox.reset() by also
-                       // hiding errors about partial matches
-                       this._maskValidSubsetError = true;
-                       this.inherited(arguments);
-               },
-
-               _onBlur: function(){
-                       this.displayMessage('');
-                       this.inherited(arguments);
-               }
-       }
-);
-
-dojo.declare(
-       "dijit.form.MappedTextBox",
-       dijit.form.ValidationTextBox,
-       {
-               // summary:
-               //              A dijit.form.ValidationTextBox subclass which provides a base class for widgets that have
-               //              a visible formatted display value, and a serializable
-               //              value in a hidden input field which is actually sent to the server.
-               // description:
-               //              The visible display may
-               //              be locale-dependent and interactive.  The value sent to the server is stored in a hidden
-               //              input field which uses the `name` attribute declared by the original widget.  That value sent
-               //              to the server is defined by the dijit.form.MappedTextBox.serialize method and is typically
-               //              locale-neutral.
-               // tags:
-               //              protected
-
-               postMixInProperties: function(){
-                       this.inherited(arguments);
-
-                       // we want the name attribute to go to the hidden <input>, not the displayed <input>,
-                       // so override _FormWidget.postMixInProperties() setting of nameAttrSetting
-                       this.nameAttrSetting = "";
-               },
-
-               serialize: function(/*anything*/val, /*Object?*/options){
-                       // summary:
-                       //              Overridable function used to convert the attr('value') result to a canonical
-                       //              (non-localized) string.  For example, will print dates in ISO format, and
-                       //              numbers the same way as they are represented in javascript.
-                       // tags:
-                       //              protected extension
-                       return val.toString ? val.toString() : ""; // String
-               },
-
-               toString: function(){
-                       // summary:
-                       //              Returns widget as a printable string using the widget's value
-                       // tags:
-                       //              protected
-                       var val = this.filter(this.get('value')); // call filter in case value is nonstring and filter has been customized
-                       return val != null ? (typeof val == "string" ? val : this.serialize(val, this.constraints)) : ""; // String
-               },
-
-               validate: function(){
-                       // Overrides `dijit.form.TextBox.validate`
-                       this.valueNode.value = this.toString();
-                       return this.inherited(arguments);
-               },
-
-               buildRendering: function(){
-                       // Overrides `dijit._Templated.buildRendering`
-
-                       this.inherited(arguments);
-
-                       // Create a hidden <input> node with the serialized value used for submit
-                       // (as opposed to the displayed value).
-                       // Passing in name as markup rather than calling dojo.create() with an attrs argument
-                       // to make dojo.query(input[name=...]) work on IE. (see #8660)
-                       this.valueNode = dojo.place("<input type='hidden'" + (this.name ? " name='" + this.name + "'" : "") + ">", this.textbox, "after");
-               },
-
-               reset:function(){
-                       // Overrides `dijit.form.ValidationTextBox.reset` to
-                       // reset the hidden textbox value to ''
-                       this.valueNode.value = '';
-                       this.inherited(arguments);
-               }
-       }
-);
-
-/*=====
-       dijit.form.RangeBoundTextBox.__Constraints = function(){
-               // min: Number
-               //              Minimum signed value.  Default is -Infinity
-               // max: Number
-               //              Maximum signed value.  Default is +Infinity
-               this.min = min;
-               this.max = max;
-       }
-=====*/
-
-dojo.declare(
-       "dijit.form.RangeBoundTextBox",
-       dijit.form.MappedTextBox,
-       {
-               // summary:
-               //              Base class for textbox form widgets which defines a range of valid values.
-
-               // rangeMessage: String
-               //              The message to display if value is out-of-range
-               rangeMessage: "",
-
-               /*=====
-               // constraints: dijit.form.RangeBoundTextBox.__Constraints
-               constraints: {},
-               ======*/
-
-               rangeCheck: function(/*Number*/ primitive, /*dijit.form.RangeBoundTextBox.__Constraints*/ constraints){
-                       // summary:
-                       //              Overridable function used to validate the range of the numeric input value.
-                       // tags:
-                       //              protected
-                       return  ("min" in constraints? (this.compare(primitive,constraints.min) >= 0) : true) &&
-                               ("max" in constraints? (this.compare(primitive,constraints.max) <= 0) : true); // Boolean
-               },
-
-               isInRange: function(/*Boolean*/ isFocused){
-                       // summary:
-                       //              Tests if the value is in the min/max range specified in constraints
-                       // tags:
-                       //              protected
-                       return this.rangeCheck(this.get('value'), this.constraints);
-               },
-
-               _isDefinitelyOutOfRange: function(){
-                       // summary:
-                       //              Returns true if the value is out of range and will remain
-                       //              out of range even if the user types more characters
-                       var val = this.get('value');
-                       var isTooLittle = false;
-                       var isTooMuch = false;
-                       if("min" in this.constraints){
-                               var min = this.constraints.min;
-                               min = this.compare(val, ((typeof min == "number") && min >= 0 && val !=0) ? 0 : min);
-                               isTooLittle = (typeof min == "number") && min < 0;
-                       }
-                       if("max" in this.constraints){
-                               var max = this.constraints.max;
-                               max = this.compare(val, ((typeof max != "number") || max > 0) ? max : 0);
-                               isTooMuch = (typeof max == "number") && max > 0;
-                       }
-                       return isTooLittle || isTooMuch;
-               },
-
-               _isValidSubset: function(){
-                       // summary:
-                       //              Overrides `dijit.form.ValidationTextBox._isValidSubset`.
-                       //              Returns true if the input is syntactically valid, and either within
-                       //              range or could be made in range by more typing.
-                       return this.inherited(arguments) && !this._isDefinitelyOutOfRange();
-               },
-
-               isValid: function(/*Boolean*/ isFocused){
-                       // Overrides dijit.form.ValidationTextBox.isValid to check that the value is also in range.
-                       return this.inherited(arguments) &&
-                               ((this._isEmpty(this.textbox.value) && !this.required) || this.isInRange(isFocused)); // Boolean
-               },
-
-               getErrorMessage: function(/*Boolean*/ isFocused){
-                       // Overrides dijit.form.ValidationTextBox.getErrorMessage to print "out of range" message if appropriate
-                       var v = this.get('value');
-                       if(v !== null && v !== '' && v !== undefined && (typeof v != "number" || !isNaN(v)) && !this.isInRange(isFocused)){ // don't check isInRange w/o a real value
-                               return this.rangeMessage; // String
-                       }
-                       return this.inherited(arguments);
-               },
-
-               postMixInProperties: function(){
-                       this.inherited(arguments);
-                       if(!this.rangeMessage){
-                               this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
-                               this.rangeMessage = this.messages.rangeMessage;
-                       }
-               },
-
-               _setConstraintsAttr: function(/* Object */ constraints){
-                       this.inherited(arguments);
-                       if(this.focusNode){ // not set when called from postMixInProperties
-                               if(this.constraints.min !== undefined){
-                                       dijit.setWaiState(this.focusNode, "valuemin", this.constraints.min);
-                               }else{
-                                       dijit.removeWaiState(this.focusNode, "valuemin");
-                               }
-                               if(this.constraints.max !== undefined){
-                                       dijit.setWaiState(this.focusNode, "valuemax", this.constraints.max);
-                               }else{
-                                       dijit.removeWaiState(this.focusNode, "valuemax");
-                               }
-                       }
-               },
-
-               _setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange){
-                       // summary:
-                       //              Hook so attr('value', ...) works.
-
-                       dijit.setWaiState(this.focusNode, "valuenow", value);
-                       this.inherited(arguments);
-               }
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.form.ComboBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.ComboBox"] = true;
-dojo.provide("dijit.form.ComboBox");
-
-
-
-
-
-
-
-
-
-
-
-
-dojo.declare(
-       "dijit.form.ComboBoxMixin",
-       null,
-       {
-               // summary:
-               //              Implements the base functionality for `dijit.form.ComboBox`/`dijit.form.FilteringSelect`
-               // description:
-               //              All widgets that mix in dijit.form.ComboBoxMixin must extend `dijit.form._FormValueWidget`.
-               // tags:
-               //              protected
-
-               // item: Object
-               //              This is the item returned by the dojo.data.store implementation that
-               //              provides the data for this ComboBox, it's the currently selected item.
-               item: null,
-
-               // pageSize: Integer
-               //              Argument to data provider.
-               //              Specifies number of search results per page (before hitting "next" button)
-               pageSize: Infinity,
-
-               // store: Object
-               //              Reference to data provider object used by this ComboBox
-               store: null,
-
-               // fetchProperties: Object
-               //              Mixin to the dojo.data store's fetch.
-               //              For example, to set the sort order of the ComboBox menu, pass:
-               //      |       { sort: {attribute:"name",descending: true} }
-               //              To override the default queryOptions so that deep=false, do:
-               //      |       { queryOptions: {ignoreCase: true, deep: false} }
-               fetchProperties:{},
-
-               // query: Object
-               //              A query that can be passed to 'store' to initially filter the items,
-               //              before doing further filtering based on `searchAttr` and the key.
-               //              Any reference to the `searchAttr` is ignored.
-               query: {},
-
-               // autoComplete: Boolean
-               //              If user types in a partial string, and then tab out of the `<input>` box,
-               //              automatically copy the first entry displayed in the drop down list to
-               //              the `<input>` field
-               autoComplete: true,
-
-               // highlightMatch: String
-               //              One of: "first", "all" or "none".
-               //
-               //              If the ComboBox/FilteringSelect opens with the search results and the searched
-               //              string can be found, it will be highlighted.  If set to "all"
-               //              then will probably want to change `queryExpr` parameter to '*${0}*'
-               //
-               //              Highlighting is only performed when `labelType` is "text", so as to not
-               //              interfere with any HTML markup an HTML label might contain.
-               highlightMatch: "first",
-
-               // searchDelay: Integer
-               //              Delay in milliseconds between when user types something and we start
-               //              searching based on that value
-               searchDelay: 100,
-
-               // searchAttr: String
-               //              Search for items in the data store where this attribute (in the item)
-               //              matches what the user typed
-               searchAttr: "name",
-
-               // labelAttr: String?
-               //              The entries in the drop down list come from this attribute in the
-               //              dojo.data items.
-               //              If not specified, the searchAttr attribute is used instead.
-               labelAttr: "",
-
-               // labelType: String
-               //              Specifies how to interpret the labelAttr in the data store items.
-               //              Can be "html" or "text".
-               labelType: "text",
-
-               // queryExpr: String
-               //              This specifies what query ComboBox/FilteringSelect sends to the data store,
-               //              based on what the user has typed.  Changing this expression will modify
-               //              whether the drop down shows only exact matches, a "starting with" match,
-               //              etc.   Use it in conjunction with highlightMatch.
-               //              dojo.data query expression pattern.
-               //              `${0}` will be substituted for the user text.
-               //              `*` is used for wildcards.
-               //              `${0}*` means "starts with", `*${0}*` means "contains", `${0}` means "is"
-               queryExpr: "${0}*",
-
-               // ignoreCase: Boolean
-               //              Set true if the ComboBox/FilteringSelect should ignore case when matching possible items
-               ignoreCase: true,
-
-               // hasDownArrow: [const] Boolean
-               //              Set this textbox to have a down arrow button, to display the drop down list.
-               //              Defaults to true.
-               hasDownArrow: true,
-
-               templateString: dojo.cache("dijit.form", "templates/ComboBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"),
-
-               baseClass: "dijitTextBox dijitComboBox",
-
-               // Set classes like dijitDownArrowButtonHover depending on
-               // mouse action over button node
-               cssStateNodes: {
-                       "downArrowNode": "dijitDownArrowButton"
-               },
-
-               _getCaretPos: function(/*DomNode*/ element){
-                       // khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22
-                       var pos = 0;
-                       if(typeof(element.selectionStart) == "number"){
-                               // FIXME: this is totally borked on Moz < 1.3. Any recourse?
-                               pos = element.selectionStart;
-                       }else if(dojo.isIE){
-                               // in the case of a mouse click in a popup being handled,
-                               // then the dojo.doc.selection is not the textarea, but the popup
-                               // var r = dojo.doc.selection.createRange();
-                               // hack to get IE 6 to play nice. What a POS browser.
-                               var tr = dojo.doc.selection.createRange().duplicate();
-                               var ntr = element.createTextRange();
-                               tr.move("character",0);
-                               ntr.move("character",0);
-                               try{
-                                       // If control doesnt have focus, you get an exception.
-                                       // Seems to happen on reverse-tab, but can also happen on tab (seems to be a race condition - only happens sometimes).
-                                       // There appears to be no workaround for this - googled for quite a while.
-                                       ntr.setEndPoint("EndToEnd", tr);
-                                       pos = String(ntr.text).replace(/\r/g,"").length;
-                               }catch(e){
-                                       // If focus has shifted, 0 is fine for caret pos.
-                               }
-                       }
-                       return pos;
-               },
-
-               _setCaretPos: function(/*DomNode*/ element, /*Number*/ location){
-                       location = parseInt(location);
-                       dijit.selectInputText(element, location, location);
-               },
-
-               _setDisabledAttr: function(/*Boolean*/ value){
-                       // Additional code to set disabled state of ComboBox node.
-                       // Overrides _FormValueWidget._setDisabledAttr() or ValidationTextBox._setDisabledAttr().
-                       this.inherited(arguments);
-                       dijit.setWaiState(this.comboNode, "disabled", value);
-               },
-
-               _abortQuery: function(){
-                       // stop in-progress query
-                       if(this.searchTimer){
-                               clearTimeout(this.searchTimer);
-                               this.searchTimer = null;
-                       }
-                       if(this._fetchHandle){
-                               if(this._fetchHandle.abort){ this._fetchHandle.abort(); }
-                               this._fetchHandle = null;
-                       }
-               },
-
-               _onInput: function(/*Event*/ evt){
-                       // summary:
-                       //              Handles paste events
-                       if(!this.searchTimer && (evt.type == 'paste'/*IE|WebKit*/ || evt.type == 'input'/*Firefox*/) && this._lastInput != this.textbox.value){
-                               this.searchTimer = setTimeout(dojo.hitch(this, function(){
-                                       this._onKeyPress({charOrCode: 229}); // fake IME key to cause a search
-                               }), 100); // long delay that will probably be preempted by keyboard input
-                       }
-                       this.inherited(arguments);
-               },
-
-               _onKeyPress: function(/*Event*/ evt){
-                       // summary:
-                       //              Handles keyboard events
-                       var key = evt.charOrCode;
-                       // except for cutting/pasting case - ctrl + x/v
-                       if(evt.altKey || ((evt.ctrlKey || evt.metaKey) && (key != 'x' && key != 'v')) || key == dojo.keys.SHIFT){
-                               return; // throw out weird key combinations and spurious events
-                       }
-                       var doSearch = false;
-                       var searchFunction = "_startSearchFromInput";
-                       var pw = this._popupWidget;
-                       var dk = dojo.keys;
-                       var highlighted = null;
-                       this._prev_key_backspace = false;
-                       this._abortQuery();
-                       if(this._isShowingNow){
-                               pw.handleKey(key);
-                               highlighted = pw.getHighlightedOption();
-                       }
-                       switch(key){
-                               case dk.PAGE_DOWN:
-                               case dk.DOWN_ARROW:
-                               case dk.PAGE_UP:
-                               case dk.UP_ARROW:
-                                       if(!this._isShowingNow){
-                                               doSearch = true;
-                                               searchFunction = "_startSearchAll";
-                                       }else{
-                                               this._announceOption(highlighted);
-                                       }
-                                       dojo.stopEvent(evt);
-                                       break;
-
-                               case dk.ENTER:
-                                       // prevent submitting form if user presses enter. Also
-                                       // prevent accepting the value if either Next or Previous
-                                       // are selected
-                                       if(highlighted){
-                                               // only stop event on prev/next
-                                               if(highlighted == pw.nextButton){
-                                                       this._nextSearch(1);
-                                                       dojo.stopEvent(evt);
-                                                       break;
-                                               }else if(highlighted == pw.previousButton){
-                                                       this._nextSearch(-1);
-                                                       dojo.stopEvent(evt);
-                                                       break;
-                                               }
-                                       }else{
-                                               // Update 'value' (ex: KY) according to currently displayed text
-                                               this._setBlurValue(); // set value if needed
-                                               this._setCaretPos(this.focusNode, this.focusNode.value.length); // move cursor to end and cancel highlighting
-                                       }
-                                       // default case:
-                                       // prevent submit, but allow event to bubble
-                                       evt.preventDefault();
-                                       // fall through
-
-                               case dk.TAB:
-                                       var newvalue = this.get('displayedValue');
-                                       //      if the user had More Choices selected fall into the
-                                       //      _onBlur handler
-                                       if(pw && (
-                                               newvalue == pw._messages["previousMessage"] ||
-                                               newvalue == pw._messages["nextMessage"])
-                                       ){
-                                               break;
-                                       }
-                                       if(highlighted){
-                                               this._selectOption();
-                                       }
-                                       if(this._isShowingNow){
-                                               this._lastQuery = null; // in case results come back later
-                                               this._hideResultList();
-                                       }
-                                       break;
-
-                               case ' ':
-                                       if(highlighted){
-                                               dojo.stopEvent(evt);
-                                               this._selectOption();
-                                               this._hideResultList();
-                                       }else{
-                                               doSearch = true;
-                                       }
-                                       break;
-
-                               case dk.ESCAPE:
-                                       if(this._isShowingNow){
-                                               dojo.stopEvent(evt);
-                                               this._hideResultList();
-                                       }
-                                       break;
-
-                               case dk.DELETE:
-                               case dk.BACKSPACE:
-                                       this._prev_key_backspace = true;
-                                       doSearch = true;
-                                       break;
-
-                               default:
-                                       // Non char keys (F1-F12 etc..)  shouldn't open list.
-                                       // Ascii characters and IME input (Chinese, Japanese etc.) should.
-                                       // On IE and safari, IME input produces keycode == 229, and we simulate
-                                       // it on firefox by attaching to compositionend event (see compositionend method)
-                                       doSearch = typeof key == 'string' || key == 229;
-                       }
-                       if(doSearch){
-                               // need to wait a tad before start search so that the event
-                               // bubbles through DOM and we have value visible
-                               this.item = undefined; // undefined means item needs to be set
-                               this.searchTimer = setTimeout(dojo.hitch(this, searchFunction),1);
-                       }
-               },
-
-               _autoCompleteText: function(/*String*/ text){
-                       // summary:
-                       //              Fill in the textbox with the first item from the drop down
-                       //              list, and highlight the characters that were
-                       //              auto-completed. For example, if user typed "CA" and the
-                       //              drop down list appeared, the textbox would be changed to
-                       //              "California" and "ifornia" would be highlighted.
-
-                       var fn = this.focusNode;
-
-                       // IE7: clear selection so next highlight works all the time
-                       dijit.selectInputText(fn, fn.value.length);
-                       // does text autoComplete the value in the textbox?
-                       var caseFilter = this.ignoreCase? 'toLowerCase' : 'substr';
-                       if(text[caseFilter](0).indexOf(this.focusNode.value[caseFilter](0)) == 0){
-                               var cpos = this._getCaretPos(fn);
-                               // only try to extend if we added the last character at the end of the input
-                               if((cpos+1) > fn.value.length){
-                                       // only add to input node as we would overwrite Capitalisation of chars
-                                       // actually, that is ok
-                                       fn.value = text;//.substr(cpos);
-                                       // visually highlight the autocompleted characters
-                                       dijit.selectInputText(fn, cpos);
-                               }
-                       }else{
-                               // text does not autoComplete; replace the whole value and highlight
-                               fn.value = text;
-                               dijit.selectInputText(fn);
-                       }
-               },
-
-               _openResultList: function(/*Object*/ results, /*Object*/ dataObject){
-                       this._fetchHandle = null;
-                       if(     this.disabled ||
-                               this.readOnly ||
-                               (dataObject.query[this.searchAttr] != this._lastQuery)
-                       ){
-                               return;
-                       }
-                       this._popupWidget.clearResultList();
-                       if(!results.length && !this._maxOptions){ // this condition needs to match !this._isvalid set in FilteringSelect::_openResultList
-                               this._hideResultList();
-                               return;
-                       }
-
-
-                       // Fill in the textbox with the first item from the drop down list,
-                       // and highlight the characters that were auto-completed. For
-                       // example, if user typed "CA" and the drop down list appeared, the
-                       // textbox would be changed to "California" and "ifornia" would be
-                       // highlighted.
-
-                       dataObject._maxOptions = this._maxOptions;
-                       var nodes = this._popupWidget.createOptions(
-                               results,
-                               dataObject,
-                               dojo.hitch(this, "_getMenuLabelFromItem")
-                       );
-
-                       // show our list (only if we have content, else nothing)
-                       this._showResultList();
-
-                       // #4091:
-                       //              tell the screen reader that the paging callback finished by
-                       //              shouting the next choice
-                       if(dataObject.direction){
-                               if(1 == dataObject.direction){
-                                       this._popupWidget.highlightFirstOption();
-                               }else if(-1 == dataObject.direction){
-                                       this._popupWidget.highlightLastOption();
-                               }
-                               this._announceOption(this._popupWidget.getHighlightedOption());
-                       }else if(this.autoComplete && !this._prev_key_backspace /*&& !dataObject.direction*/
-                               // when the user clicks the arrow button to show the full list,
-                               // startSearch looks for "*".
-                               // it does not make sense to autocomplete
-                               // if they are just previewing the options available.
-                               && !/^[*]+$/.test(dataObject.query[this.searchAttr])){
-                                       this._announceOption(nodes[1]); // 1st real item
-                       }
-               },
-
-               _showResultList: function(){
-                       this._hideResultList();
-                       // hide the tooltip
-                       this.displayMessage("");
-
-                       // Position the list and if it's too big to fit on the screen then
-                       // size it to the maximum possible height
-                       // Our dear friend IE doesnt take max-height so we need to
-                       // calculate that on our own every time
-
-                       // TODO: want to redo this, see
-                       //              http://trac.dojotoolkit.org/ticket/3272
-                       //      and
-                       //              http://trac.dojotoolkit.org/ticket/4108
-
-
-                       // natural size of the list has changed, so erase old
-                       // width/height settings, which were hardcoded in a previous
-                       // call to this function (via dojo.marginBox() call)
-                       dojo.style(this._popupWidget.domNode, {width: "", height: ""});
-
-                       var best = this.open();
-                       // #3212:
-                       //              only set auto scroll bars if necessary prevents issues with
-                       //              scroll bars appearing when they shouldn't when node is made
-                       //              wider (fractional pixels cause this)
-                       var popupbox = dojo.marginBox(this._popupWidget.domNode);
-                       this._popupWidget.domNode.style.overflow =
-                               ((best.h == popupbox.h) && (best.w == popupbox.w)) ? "hidden" : "auto";
-                       // #4134:
-                       //              borrow TextArea scrollbar test so content isn't covered by
-                       //              scrollbar and horizontal scrollbar doesn't appear
-                       var newwidth = best.w;
-                       if(best.h < this._popupWidget.domNode.scrollHeight){
-                               newwidth += 16;
-                       }
-                       dojo.marginBox(this._popupWidget.domNode, {
-                               h: best.h,
-                               w: Math.max(newwidth, this.domNode.offsetWidth)
-                       });
-                       
-                       // If we increased the width of drop down to match the width of ComboBox.domNode,
-                       // then need to reposition the drop down (wrapper) so (all of) the drop down still
-                       // appears underneath the ComboBox.domNode
-                       if(newwidth < this.domNode.offsetWidth){
-                               this._popupWidget.domNode.parentNode.style.left = dojo.position(this.domNode, true).x + "px";
-                       }
-
-                       dijit.setWaiState(this.comboNode, "expanded", "true");
-               },
-
-               _hideResultList: function(){
-                       this._abortQuery();
-                       if(this._isShowingNow){
-                               dijit.popup.close(this._popupWidget);
-                               this._isShowingNow=false;
-                               dijit.setWaiState(this.comboNode, "expanded", "false");
-                               dijit.removeWaiState(this.focusNode,"activedescendant");
-                       }
-               },
-
-               _setBlurValue: function(){
-                       // if the user clicks away from the textbox OR tabs away, set the
-                       // value to the textbox value
-                       // #4617:
-                       //              if value is now more choices or previous choices, revert
-                       //              the value
-                       var newvalue = this.get('displayedValue');
-                       var pw = this._popupWidget;
-                       if(pw && (
-                               newvalue == pw._messages["previousMessage"] ||
-                               newvalue == pw._messages["nextMessage"]
-                               )
-                       ){
-                               this._setValueAttr(this._lastValueReported, true);
-                       }else if(typeof this.item == "undefined"){
-                               // Update 'value' (ex: KY) according to currently displayed text
-                               this.item = null;
-                               this.set('displayedValue', newvalue);
-                       }else{
-                               if(this.value != this._lastValueReported){
-                                       dijit.form._FormValueWidget.prototype._setValueAttr.call(this, this.value, true);
-                               }
-                               this._refreshState();
-                       }
-               },
-
-               _onBlur: function(){
-                       // summary:
-                       //              Called magically when focus has shifted away from this widget and it's drop down
-                       this._hideResultList();
-                       this.inherited(arguments);
-               },
-
-               _setItemAttr: function(/*item*/ item, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
-                       // summary:
-                       //              Set the displayed valued in the input box, and the hidden value
-                       //              that gets submitted, based on a dojo.data store item.
-                       // description:
-                       //              Users shouldn't call this function; they should be calling
-                       //              attr('item', value)
-                       // tags:
-                       //              private
-                       if(!displayedValue){ displayedValue = this.labelFunc(item, this.store); }
-                       this.value = this._getValueField() != this.searchAttr? this.store.getIdentity(item) : displayedValue;
-                       this.item = item;
-                       dijit.form.ComboBox.superclass._setValueAttr.call(this, this.value, priorityChange, displayedValue);
-               },
-
-               _announceOption: function(/*Node*/ node){
-                       // summary:
-                       //              a11y code that puts the highlighted option in the textbox.
-                       //              This way screen readers will know what is happening in the
-                       //              menu.
-
-                       if(!node){
-                               return;
-                       }
-                       // pull the text value from the item attached to the DOM node
-                       var newValue;
-                       if(node == this._popupWidget.nextButton ||
-                               node == this._popupWidget.previousButton){
-                               newValue = node.innerHTML;
-                               this.item = undefined;
-                               this.value = '';
-                       }else{
-                               newValue = this.labelFunc(node.item, this.store);
-                               this.set('item', node.item, false, newValue);
-                       }
-                       // get the text that the user manually entered (cut off autocompleted text)
-                       this.focusNode.value = this.focusNode.value.substring(0, this._lastInput.length);
-                       // set up ARIA activedescendant
-                       dijit.setWaiState(this.focusNode, "activedescendant", dojo.attr(node, "id"));
-                       // autocomplete the rest of the option to announce change
-                       this._autoCompleteText(newValue);
-               },
-
-               _selectOption: function(/*Event*/ evt){
-                       // summary:
-                       //              Menu callback function, called when an item in the menu is selected.
-                       if(evt){
-                               this._announceOption(evt.target);
-                       }
-                       this._hideResultList();
-                       this._setCaretPos(this.focusNode, this.focusNode.value.length);
-                       dijit.form._FormValueWidget.prototype._setValueAttr.call(this, this.value, true); // set this.value and fire onChange
-               },
-
-               _onArrowMouseDown: function(evt){
-                       // summary:
-                       //              Callback when arrow is clicked
-                       if(this.disabled || this.readOnly){
-                               return;
-                       }
-                       dojo.stopEvent(evt);
-                       this.focus();
-                       if(this._isShowingNow){
-                               this._hideResultList();
-                       }else{
-                               // forces full population of results, if they click
-                               // on the arrow it means they want to see more options
-                               this._startSearchAll();
-                       }
-               },
-
-               _startSearchAll: function(){
-                       this._startSearch('');
-               },
-
-               _startSearchFromInput: function(){
-                       this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g, "\\$1"));
-               },
-
-               _getQueryString: function(/*String*/ text){
-                       return dojo.string.substitute(this.queryExpr, [text]);
-               },
-
-               _startSearch: function(/*String*/ key){
-                       if(!this._popupWidget){
-                               var popupId = this.id + "_popup";
-                               this._popupWidget = new dijit.form._ComboBoxMenu({
-                                       onChange: dojo.hitch(this, this._selectOption),
-                                       id: popupId,
-                                       dir: this.dir
-                               });
-                               dijit.removeWaiState(this.focusNode,"activedescendant");
-                               dijit.setWaiState(this.textbox,"owns",popupId); // associate popup with textbox
-                       }
-                       // create a new query to prevent accidentally querying for a hidden
-                       // value from FilteringSelect's keyField
-                       var query = dojo.clone(this.query); // #5970
-                       this._lastInput = key; // Store exactly what was entered by the user.
-                       this._lastQuery = query[this.searchAttr] = this._getQueryString(key);
-                       // #5970: set _lastQuery, *then* start the timeout
-                       // otherwise, if the user types and the last query returns before the timeout,
-                       // _lastQuery won't be set and their input gets rewritten
-                       this.searchTimer=setTimeout(dojo.hitch(this, function(query, _this){
-                               this.searchTimer = null;
-                               var fetch = {
-                                       queryOptions: {
-                                               ignoreCase: this.ignoreCase,
-                                               deep: true
-                                       },
-                                       query: query,
-                                       onBegin: dojo.hitch(this, "_setMaxOptions"),
-                                       onComplete: dojo.hitch(this, "_openResultList"),
-                                       onError: function(errText){
-                                               _this._fetchHandle = null;
-                                               console.error('dijit.form.ComboBox: ' + errText);
-                                               dojo.hitch(_this, "_hideResultList")();
-                                       },
-                                       start: 0,
-                                       count: this.pageSize
-                               };
-                               dojo.mixin(fetch, _this.fetchProperties);
-                               this._fetchHandle = _this.store.fetch(fetch);
-
-                               var nextSearch = function(dataObject, direction){
-                                       dataObject.start += dataObject.count*direction;
-                                       // #4091:
-                                       //              tell callback the direction of the paging so the screen
-                                       //              reader knows which menu option to shout
-                                       dataObject.direction = direction;
-                                       this._fetchHandle = this.store.fetch(dataObject);
-                               };
-                               this._nextSearch = this._popupWidget.onPage = dojo.hitch(this, nextSearch, this._fetchHandle);
-                       }, query, this), this.searchDelay);
-               },
-
-               _setMaxOptions: function(size, request){
-                        this._maxOptions = size;
-               },
-
-               _getValueField: function(){
-                       // summmary:
-                       //              Helper for postMixInProperties() to set this.value based on data inlined into the markup.
-                       //              Returns the attribute name in the item (in dijit.form._ComboBoxDataStore) to use as the value.
-                       return this.searchAttr;
-               },
-
-               /////////////// Event handlers /////////////////////
-
-               // FIXME: For 2.0, rename to "_compositionEnd"
-               compositionend: function(/*Event*/ evt){
-                       // summary:
-                       //              When inputting characters using an input method, such as
-                       //              Asian languages, it will generate this event instead of
-                       //              onKeyDown event.
-                       //              Note: this event is only triggered in FF (not in IE/safari)
-                       // tags:
-                       //              private
-
-                       // 229 is the code produced by IE and safari while pressing keys during
-                       // IME input mode
-                       this._onKeyPress({charOrCode: 229});
-               },
-
-               //////////// INITIALIZATION METHODS ///////////////////////////////////////
-
-               constructor: function(){
-                       this.query={};
-                       this.fetchProperties={};
-               },
-
-               postMixInProperties: function(){
-                       if(!this.store){
-                               var srcNodeRef = this.srcNodeRef;
-
-                               // if user didn't specify store, then assume there are option tags
-                               this.store = new dijit.form._ComboBoxDataStore(srcNodeRef);
-
-                               // if there is no value set and there is an option list, set
-                               // the value to the first value to be consistent with native
-                               // Select
-
-                               // Firefox and Safari set value
-                               // IE6 and Opera set selectedIndex, which is automatically set
-                               // by the selected attribute of an option tag
-                               // IE6 does not set value, Opera sets value = selectedIndex
-                               if(!("value" in this.params)){
-                                       var item = this.store.fetchSelectedItem();
-                                       if(item){
-                                               var valueField = this._getValueField();
-                                               this.value = valueField != this.searchAttr? this.store.getValue(item, valueField) : this.labelFunc(item, this.store);
-                                       }
-                               }
-                       }
-                       this.inherited(arguments);
-               },
-
-               postCreate: function(){
-                       // summary:
-                       //              Subclasses must call this method from their postCreate() methods
-                       // tags:
-                       //              protected
-
-                       if(!this.hasDownArrow){
-                               this.downArrowNode.style.display = "none";
-                       }
-
-                       // find any associated label element and add to ComboBox node.
-                       var label=dojo.query('label[for="'+this.id+'"]');
-                       if(label.length){
-                               label[0].id = (this.id+"_label");
-                               var cn=this.comboNode;
-                               dijit.setWaiState(cn, "labelledby", label[0].id);
-
-                       }
-                       this.inherited(arguments);
-               },
-
-               uninitialize: function(){
-                       if(this._popupWidget && !this._popupWidget._destroyed){
-                               this._hideResultList();
-                               this._popupWidget.destroy();
-                       }
-                       this.inherited(arguments);
-               },
-
-               _getMenuLabelFromItem: function(/*Item*/ item){
-                       var label = this.labelAttr? this.store.getValue(item, this.labelAttr) : this.labelFunc(item, this.store);
-                       var labelType = this.labelType;
-                       // If labelType is not "text" we don't want to screw any markup ot whatever.
-                       if(this.highlightMatch != "none" && this.labelType == "text" && this._lastInput){
-                               label = this.doHighlight(label, this._escapeHtml(this._lastInput));
-                               labelType = "html";
-                       }
-                       return {html: labelType == "html", label: label};
-               },
-
-               doHighlight: function(/*String*/label, /*String*/find){
-                       // summary:
-                       //              Highlights the string entered by the user in the menu.  By default this
-                       //              highlights the first occurence found. Override this method
-                       //              to implement your custom highlighing.
-                       // tags:
-                       //              protected
-
-                       // Add greedy when this.highlightMatch == "all"
-                       var modifiers = "i"+(this.highlightMatch == "all"?"g":"");
-                       var escapedLabel = this._escapeHtml(label);
-                       find = dojo.regexp.escapeString(find); // escape regexp special chars
-                       var ret = escapedLabel.replace(new RegExp("(^|\\s)("+ find +")", modifiers),
-                                       '$1<span class="dijitComboBoxHighlightMatch">$2</span>');
-                       return ret;// returns String, (almost) valid HTML (entities encoded)
-               },
-
-               _escapeHtml: function(/*string*/str){
-                       // TODO Should become dojo.html.entities(), when exists use instead
-                       // summary:
-                       //              Adds escape sequences for special characters in XML: &<>"'
-                       str = String(str).replace(/&/gm, "&amp;").replace(/</gm, "&lt;")
-                               .replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
-                       return str; // string
-               },
-
-               open: function(){
-                       // summary:
-                       //              Opens the drop down menu.  TODO: rename to _open.
-                       // tags:
-                       //              private
-                       this._isShowingNow=true;
-                       return dijit.popup.open({
-                               popup: this._popupWidget,
-                               around: this.domNode,
-                               parent: this
-                       });
-               },
-
-               reset: function(){
-                       // Overrides the _FormWidget.reset().
-                       // Additionally reset the .item (to clean up).
-                       this.item = null;
-                       this.inherited(arguments);
-               },
-
-               labelFunc: function(/*item*/ item, /*dojo.data.store*/ store){
-                       // summary:
-                       //              Computes the label to display based on the dojo.data store item.
-                       // returns:
-                       //              The label that the ComboBox should display
-                       // tags:
-                       //              private
-
-                       // Use toString() because XMLStore returns an XMLItem whereas this
-                       // method is expected to return a String (#9354)
-                       return store.getValue(item, this.searchAttr).toString(); // String
-               }
-       }
-);
-
-dojo.declare(
-       "dijit.form._ComboBoxMenu",
-       [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
-       {
-               // summary:
-               //              Focus-less menu for internal use in `dijit.form.ComboBox`
-               // tags:
-               //              private
-
-               templateString: "<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"
-                               +"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"
-                               +"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"
-                       +"</ul>",
-
-               // _messages: Object
-               //              Holds "next" and "previous" text for paging buttons on drop down
-               _messages: null,
-               
-               baseClass: "dijitComboBoxMenu",
-
-               postMixInProperties: function(){
-                       this._messages = dojo.i18n.getLocalization("dijit.form", "ComboBox", this.lang);
-                       this.inherited(arguments);
-               },
-
-               _setValueAttr: function(/*Object*/ value){
-                       this.value = value;
-                       this.onChange(value);
-               },
-
-               // stubs
-               onChange: function(/*Object*/ value){
-                       // summary:
-                       //              Notifies ComboBox/FilteringSelect that user clicked an option in the drop down menu.
-                       //              Probably should be called onSelect.
-                       // tags:
-                       //              callback
-               },
-               onPage: function(/*Number*/ direction){
-                       // summary:
-                       //              Notifies ComboBox/FilteringSelect that user clicked to advance to next/previous page.
-                       // tags:
-                       //              callback
-               },
-
-               postCreate: function(){
-                       // fill in template with i18n messages
-                       this.previousButton.innerHTML = this._messages["previousMessage"];
-                       this.nextButton.innerHTML = this._messages["nextMessage"];
-                       this.inherited(arguments);
-               },
-
-               onClose: function(){
-                       // summary:
-                       //              Callback from dijit.popup code to this widget, notifying it that it closed
-                       // tags:
-                       //              private
-                       this._blurOptionNode();
-               },
-
-               _createOption: function(/*Object*/ item, labelFunc){
-                       // summary:
-                       //              Creates an option to appear on the popup menu subclassed by
-                       //              `dijit.form.FilteringSelect`.
-
-                       var labelObject = labelFunc(item);
-                       var menuitem = dojo.doc.createElement("li");
-                       dijit.setWaiRole(menuitem, "option");
-                       if(labelObject.html){
-                               menuitem.innerHTML = labelObject.label;
-                       }else{
-                               menuitem.appendChild(
-                                       dojo.doc.createTextNode(labelObject.label)
-                               );
-                       }
-                       // #3250: in blank options, assign a normal height
-                       if(menuitem.innerHTML == ""){
-                               menuitem.innerHTML = "&nbsp;";
-                       }
-                       menuitem.item=item;
-                       return menuitem;
-               },
-
-               createOptions: function(results, dataObject, labelFunc){
-                       // summary:
-                       //              Fills in the items in the drop down list
-                       // results:
-                       //              Array of dojo.data items
-                       // dataObject:
-                       //              dojo.data store
-                       // labelFunc:
-                       //              Function to produce a label in the drop down list from a dojo.data item
-
-                       //this._dataObject=dataObject;
-                       //this._dataObject.onComplete=dojo.hitch(comboBox, comboBox._openResultList);
-                       // display "Previous . . ." button
-                       this.previousButton.style.display = (dataObject.start == 0) ? "none" : "";
-                       dojo.attr(this.previousButton, "id", this.id + "_prev");
-                       // create options using _createOption function defined by parent
-                       // ComboBox (or FilteringSelect) class
-                       // #2309:
-                       //              iterate over cache nondestructively
-                       dojo.forEach(results, function(item, i){
-                               var menuitem = this._createOption(item, labelFunc);
-                               menuitem.className = "dijitReset dijitMenuItem" +
-                                       (this.isLeftToRight() ? "" : " dijitMenuItemRtl");
-                               dojo.attr(menuitem, "id", this.id + i);
-                               this.domNode.insertBefore(menuitem, this.nextButton);
-                       }, this);
-                       // display "Next . . ." button
-                       var displayMore = false;
-                       //Try to determine if we should show 'more'...
-                       if(dataObject._maxOptions && dataObject._maxOptions != -1){
-                               if((dataObject.start + dataObject.count) < dataObject._maxOptions){
-                                       displayMore = true;
-                               }else if((dataObject.start + dataObject.count) > dataObject._maxOptions && dataObject.count == results.length){
-                                       //Weird return from a datastore, where a start + count > maxOptions
-                                       // implies maxOptions isn't really valid and we have to go into faking it.
-                                       //And more or less assume more if count == results.length
-                                       displayMore = true;
-                               }
-                       }else if(dataObject.count == results.length){
-                               //Don't know the size, so we do the best we can based off count alone.
-                               //So, if we have an exact match to count, assume more.
-                               displayMore = true;
-                       }
-
-                       this.nextButton.style.display = displayMore ? "" : "none";
-                       dojo.attr(this.nextButton,"id", this.id + "_next");
-                       return this.domNode.childNodes;
-               },
-
-               clearResultList: function(){
-                       // summary:
-                       //              Clears the entries in the drop down list, but of course keeps the previous and next buttons.
-                       while(this.domNode.childNodes.length>2){
-                               this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);
-                       }
-               },
-
-               _onMouseDown: function(/*Event*/ evt){
-                       dojo.stopEvent(evt);
-               },
-
-               _onMouseUp: function(/*Event*/ evt){
-                       if(evt.target === this.domNode || !this._highlighted_option){
-                               return;
-                       }else if(evt.target == this.previousButton){
-                               this.onPage(-1);
-                       }else if(evt.target == this.nextButton){
-                               this.onPage(1);
-                       }else{
-                               var tgt = evt.target;
-                               // while the clicked node is inside the div
-                               while(!tgt.item){
-                                       // recurse to the top
-                                       tgt = tgt.parentNode;
-                               }
-                               this._setValueAttr({ target: tgt }, true);
-                       }
-               },
-
-               _onMouseOver: function(/*Event*/ evt){
-                       if(evt.target === this.domNode){ return; }
-                       var tgt = evt.target;
-                       if(!(tgt == this.previousButton || tgt == this.nextButton)){
-                               // while the clicked node is inside the div
-                               while(!tgt.item){
-                                       // recurse to the top
-                                       tgt = tgt.parentNode;
-                               }
-                       }
-                       this._focusOptionNode(tgt);
-               },
-
-               _onMouseOut: function(/*Event*/ evt){
-                       if(evt.target === this.domNode){ return; }
-                       this._blurOptionNode();
-               },
-
-               _focusOptionNode: function(/*DomNode*/ node){
-                       // summary:
-                       //              Does the actual highlight.
-                       if(this._highlighted_option != node){
-                               this._blurOptionNode();
-                               this._highlighted_option = node;
-                               dojo.addClass(this._highlighted_option, "dijitMenuItemSelected");
-                       }
-               },
-
-               _blurOptionNode: function(){
-                       // summary:
-                       //              Removes highlight on highlighted option.
-                       if(this._highlighted_option){
-                               dojo.removeClass(this._highlighted_option, "dijitMenuItemSelected");
-                               this._highlighted_option = null;
-                       }
-               },
-
-               _highlightNextOption: function(){
-                       // summary:
-                       //              Highlight the item just below the current selection.
-                       //              If nothing selected, highlight first option.
-
-                       // because each press of a button clears the menu,
-                       // the highlighted option sometimes becomes detached from the menu!
-                       // test to see if the option has a parent to see if this is the case.
-                       if(!this.getHighlightedOption()){
-                               var fc = this.domNode.firstChild;
-                               this._focusOptionNode(fc.style.display == "none" ? fc.nextSibling : fc);
-                       }else{
-                               var ns = this._highlighted_option.nextSibling;
-                               if(ns && ns.style.display != "none"){
-                                       this._focusOptionNode(ns);
-                               }else{
-                                       this.highlightFirstOption();
-                               }
-                       }
-                       // scrollIntoView is called outside of _focusOptionNode because in IE putting it inside causes the menu to scroll up on mouseover
-                       dojo.window.scrollIntoView(this._highlighted_option);
-               },
-
-               highlightFirstOption: function(){
-                       // summary:
-                       //              Highlight the first real item in the list (not Previous Choices).
-                       var first = this.domNode.firstChild;
-                       var second = first.nextSibling;
-                       this._focusOptionNode(second.style.display == "none" ? first : second); // remotely possible that Previous Choices is the only thing in the list
-                       dojo.window.scrollIntoView(this._highlighted_option);
-               },
-
-               highlightLastOption: function(){
-                       // summary:
-                       //              Highlight the last real item in the list (not More Choices).
-                       this._focusOptionNode(this.domNode.lastChild.previousSibling);
-                       dojo.window.scrollIntoView(this._highlighted_option);
-               },
-
-               _highlightPrevOption: function(){
-                       // summary:
-                       //              Highlight the item just above the current selection.
-                       //              If nothing selected, highlight last option (if
-                       //              you select Previous and try to keep scrolling up the list).
-                       if(!this.getHighlightedOption()){
-                               var lc = this.domNode.lastChild;
-                               this._focusOptionNode(lc.style.display == "none" ? lc.previousSibling : lc);
-                       }else{
-                               var ps = this._highlighted_option.previousSibling;
-                               if(ps && ps.style.display != "none"){
-                                       this._focusOptionNode(ps);
-                               }else{
-                                       this.highlightLastOption();
-                               }
-                       }
-                       dojo.window.scrollIntoView(this._highlighted_option);
-               },
-
-               _page: function(/*Boolean*/ up){
-                       // summary:
-                       //              Handles page-up and page-down keypresses
-
-                       var scrollamount = 0;
-                       var oldscroll = this.domNode.scrollTop;
-                       var height = dojo.style(this.domNode, "height");
-                       // if no item is highlighted, highlight the first option
-                       if(!this.getHighlightedOption()){
-                               this._highlightNextOption();
-                       }
-                       while(scrollamount<height){
-                               if(up){
-                                       // stop at option 1
-                                       if(!this.getHighlightedOption().previousSibling ||
-                                               this._highlighted_option.previousSibling.style.display == "none"){
-                                               break;
-                                       }
-                                       this._highlightPrevOption();
-                               }else{
-                                       // stop at last option
-                                       if(!this.getHighlightedOption().nextSibling ||
-                                               this._highlighted_option.nextSibling.style.display == "none"){
-                                               break;
-                                       }
-                                       this._highlightNextOption();
-                               }
-                               // going backwards
-                               var newscroll=this.domNode.scrollTop;
-                               scrollamount+=(newscroll-oldscroll)*(up ? -1:1);
-                               oldscroll=newscroll;
-                       }
-               },
-
-               pageUp: function(){
-                       // summary:
-                       //              Handles pageup keypress.
-                       //              TODO: just call _page directly from handleKey().
-                       // tags:
-                       //              private
-                       this._page(true);
-               },
-
-               pageDown: function(){
-                       // summary:
-                       //              Handles pagedown keypress.
-                       //              TODO: just call _page directly from handleKey().
-                       // tags:
-                       //              private
-                       this._page(false);
-               },
-
-               getHighlightedOption: function(){
-                       // summary:
-                       //              Returns the highlighted option.
-                       var ho = this._highlighted_option;
-                       return (ho && ho.parentNode) ? ho : null;
-               },
-
-               handleKey: function(key){
-                       switch(key){
-                               case dojo.keys.DOWN_ARROW:
-                                       this._highlightNextOption();
-                                       break;
-                               case dojo.keys.PAGE_DOWN:
-                                       this.pageDown();
-                                       break;
-                               case dojo.keys.UP_ARROW:
-                                       this._highlightPrevOption();
-                                       break;
-                               case dojo.keys.PAGE_UP:
-                                       this.pageUp();
-                                       break;
-                       }
-               }
-       }
-);
-
-dojo.declare(
-       "dijit.form.ComboBox",
-       [dijit.form.ValidationTextBox, dijit.form.ComboBoxMixin],
-       {
-               // summary:
-               //              Auto-completing text box, and base class for dijit.form.FilteringSelect.
-               //
-               // description:
-               //              The drop down box's values are populated from an class called
-               //              a data provider, which returns a list of values based on the characters
-               //              that the user has typed into the input box.
-               //              If OPTION tags are used as the data provider via markup,
-               //              then the OPTION tag's child text node is used as the widget value
-               //              when selected.  The OPTION tag's value attribute is ignored.
-               //              To set the default value when using OPTION tags, specify the selected
-               //              attribute on 1 of the child OPTION tags.
-               //
-               //              Some of the options to the ComboBox are actually arguments to the data
-               //              provider.
-
-               _setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
-                       // summary:
-                       //              Hook so attr('value', value) works.
-                       // description:
-                       //              Sets the value of the select.
-                       this.item = null; // value not looked up in store
-                       if(!value){ value = ''; } // null translates to blank
-                       dijit.form.ValidationTextBox.prototype._setValueAttr.call(this, value, priorityChange, displayedValue);
-               }
-       }
-);
-
-dojo.declare("dijit.form._ComboBoxDataStore", null, {
-       // summary:
-       //              Inefficient but small data store specialized for inlined `dijit.form.ComboBox` data
-       //
-       // description:
-       //              Provides a store for inlined data like:
-       //
-       //      |       <select>
-       //      |               <option value="AL">Alabama</option>
-       //      |               ...
-       //
-       //              Actually. just implements the subset of dojo.data.Read/Notification
-       //              needed for ComboBox and FilteringSelect to work.
-       //
-       //              Note that an item is just a pointer to the <option> DomNode.
-
-       constructor: function( /*DomNode*/ root){
-               this.root = root;
-               if(root.tagName != "SELECT" && root.firstChild){
-                       root = dojo.query("select", root);
-                       if(root.length > 0){ // SELECT is a child of srcNodeRef
-                               root = root[0];
-                       }else{ // no select, so create 1 to parent the option tags to define selectedIndex
-                               this.root.innerHTML = "<SELECT>"+this.root.innerHTML+"</SELECT>";
-                               root = this.root.firstChild;
-                       }
-                       this.root = root;
-               }
-               dojo.query("> option", root).forEach(function(node){
-                       //      TODO: this was added in #3858 but unclear why/if it's needed;  doesn't seem to be.
-                       //      If it is needed then can we just hide the select itself instead?
-                       //node.style.display="none";
-                       node.innerHTML = dojo.trim(node.innerHTML);
-               });
-
-       },
-
-       getValue: function(     /* item */ item,
-                                               /* attribute-name-string */ attribute,
-                                               /* value? */ defaultValue){
-               return (attribute == "value") ? item.value : (item.innerText || item.textContent || '');
-       },
-
-       isItemLoaded: function(/* anything */ something){
-               return true;
-       },
-
-       getFeatures: function(){
-               return {"dojo.data.api.Read": true, "dojo.data.api.Identity": true};
-       },
-
-       _fetchItems: function(  /* Object */ args,
-                                                       /* Function */ findCallback,
-                                                       /* Function */ errorCallback){
-               // summary:
-               //              See dojo.data.util.simpleFetch.fetch()
-               if(!args.query){ args.query = {}; }
-               if(!args.query.name){ args.query.name = ""; }
-               if(!args.queryOptions){ args.queryOptions = {}; }
-               var matcher = dojo.data.util.filter.patternToRegExp(args.query.name, args.queryOptions.ignoreCase),
-                       items = dojo.query("> option", this.root).filter(function(option){
-                               return (option.innerText || option.textContent || '').match(matcher);
-                       } );
-               if(args.sort){
-                       items.sort(dojo.data.util.sorter.createSortFunction(args.sort, this));
-               }
-               findCallback(items, args);
-       },
-
-       close: function(/*dojo.data.api.Request || args || null */ request){
-               return;
-       },
-
-       getLabel: function(/* item */ item){
-               return item.innerHTML;
-       },
-
-       getIdentity: function(/* item */ item){
-               return dojo.attr(item, "value");
-       },
-
-       fetchItemByIdentity: function(/* Object */ args){
-               // summary:
-               //              Given the identity of an item, this method returns the item that has
-               //              that identity through the onItem callback.
-               //              Refer to dojo.data.api.Identity.fetchItemByIdentity() for more details.
-               //
-               // description:
-               //              Given arguments like:
-               //
-               //      |               {identity: "CA", onItem: function(item){...}
-               //
-               //              Call `onItem()` with the DOM node `<option value="CA">California</option>`
-               var item = dojo.query("> option[value='" + args.identity + "']", this.root)[0];
-               args.onItem(item);
-       },
-
-       fetchSelectedItem: function(){
-               // summary:
-               //              Get the option marked as selected, like `<option selected>`.
-               //              Not part of dojo.data API.
-               var root = this.root,
-                       si = root.selectedIndex;
-               return typeof si == "number"
-                       ? dojo.query("> option:nth-child(" + (si != -1 ? si+1 : 1) + ")", root)[0]
-                       : null; // dojo.data.Item
-       }
-});
-//Mix in the simple fetch implementation to this class.
-dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);
-
-}
-
-if(!dojo._hasResource["dijit.form.FilteringSelect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.FilteringSelect"] = true;
-dojo.provide("dijit.form.FilteringSelect");
-
-
-
-dojo.declare(
-       "dijit.form.FilteringSelect",
-       [dijit.form.MappedTextBox, dijit.form.ComboBoxMixin],
-       {
-               // summary:
-               //              An enhanced version of the HTML SELECT tag, populated dynamically
-               //
-               // description:
-               //              An enhanced version of the HTML SELECT tag, populated dynamically. It works
-               //              very nicely with very large data sets because it can load and page data as needed.
-               //              It also resembles ComboBox, but does not allow values outside of the provided ones.
-               //              If OPTION tags are used as the data provider via markup, then the
-               //              OPTION tag's child text node is used as the displayed value when selected
-               //              while the OPTION tag's value attribute is used as the widget value on form submit.
-               //              To set the default value when using OPTION tags, specify the selected
-               //              attribute on 1 of the child OPTION tags.
-               //
-               //              Similar features:
-               //                      - There is a drop down list of possible values.
-               //                      - You can only enter a value from the drop down list.  (You can't
-               //                              enter an arbitrary value.)
-               //                      - The value submitted with the form is the hidden value (ex: CA),
-               //                              not the displayed value a.k.a. label (ex: California)
-               //
-               //              Enhancements over plain HTML version:
-               //                      - If you type in some text then it will filter down the list of
-               //                              possible values in the drop down list.
-               //                      - List can be specified either as a static list or via a javascript
-               //                              function (that can get the list from a server)
-
-               _isvalid: true,
-
-               // required: Boolean
-               //              True (default) if user is required to enter a value into this field.
-               required: true,
-
-               _lastDisplayedValue: "",
-
-               isValid: function(){
-                       // Overrides ValidationTextBox.isValid()
-                       return this._isvalid || (!this.required && this.get('displayedValue') == ""); // #5974
-               },
-
-               _refreshState: function(){
-                       if(!this.searchTimer){ // state will be refreshed after results are returned
-                               this.inherited(arguments);
-                       }
-               },
-
-               _callbackSetLabel: function(    /*Array*/ result,
-                                               /*Object*/ dataObject,
-                                               /*Boolean?*/ priorityChange){
-                       // summary:
-                       //              Callback function that dynamically sets the label of the
-                       //              ComboBox
-
-                       // setValue does a synchronous lookup,
-                       // so it calls _callbackSetLabel directly,
-                       // and so does not pass dataObject
-                       // still need to test against _lastQuery in case it came too late
-                       if((dataObject && dataObject.query[this.searchAttr] != this._lastQuery) || (!dataObject && result.length && this.store.getIdentity(result[0]) != this._lastQuery)){
-                               return;
-                       }
-                       if(!result.length){
-                               //#3268: do nothing on bad input
-                               //#3285: change CSS to indicate error
-                               this.valueNode.value = "";
-                               dijit.form.TextBox.superclass._setValueAttr.call(this, "", priorityChange || (priorityChange === undefined && !this._focused));
-                               this._isvalid = false;
-                               this.validate(this._focused);
-                               this.item = null;
-                       }else{
-                               this.set('item', result[0], priorityChange);
-                       }
-               },
-
-               _openResultList: function(/*Object*/ results, /*Object*/ dataObject){
-                       // Overrides ComboBox._openResultList()
-
-                       // #3285: tap into search callback to see if user's query resembles a match
-                       if(dataObject.query[this.searchAttr] != this._lastQuery){
-                               return;
-                       }
-                       if(this.item === undefined){ // item == undefined for keyboard search
-                               this._isvalid = results.length != 0 || this._maxOptions != 0; // result.length==0 && maxOptions != 0 implies the nextChoices item selected but then the datastore returned 0 more entries
-                               this.validate(true);
-                       }
-                       dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments);
-               },
-
-               _getValueAttr: function(){
-                       // summary:
-                       //              Hook for attr('value') to work.
-
-                       // don't get the textbox value but rather the previously set hidden value.
-                       // Use this.valueNode.value which isn't always set for other MappedTextBox widgets until blur
-                       return this.valueNode.value;
-               },
-
-               _getValueField: function(){
-                       // Overrides ComboBox._getValueField()
-                       return "value";
-               },
-
-               _setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange){
-                       // summary:
-                       //              Hook so attr('value', value) works.
-                       // description:
-                       //              Sets the value of the select.
-                       //              Also sets the label to the corresponding value by reverse lookup.
-                       if(!this._onChangeActive){ priorityChange = null; }
-                       this._lastQuery = value;
-
-                       if(value === null || value === ''){
-                               this._setDisplayedValueAttr('', priorityChange);
-                               return;
-                       }
-
-                       //#3347: fetchItemByIdentity if no keyAttr specified
-                       var self = this;
-                       this.store.fetchItemByIdentity({
-                               identity: value,
-                               onItem: function(item){
-                                       self._callbackSetLabel(item? [item] : [], undefined, priorityChange);
-                               }
-                       });
-               },
-
-               _setItemAttr: function(/*item*/ item, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
-                       // summary:
-                       //              Set the displayed valued in the input box, and the hidden value
-                       //              that gets submitted, based on a dojo.data store item.
-                       // description:
-                       //              Users shouldn't call this function; they should be calling
-                       //              attr('item', value)
-                       // tags:
-                       //              private
-                       this._isvalid = true;
-                       this.inherited(arguments);
-                       this.valueNode.value = this.value;
-                       this._lastDisplayedValue = this.textbox.value;
-               },
-
-               _getDisplayQueryString: function(/*String*/ text){
-                       return text.replace(/([\\\*\?])/g, "\\$1");
-               },
-
-               _setDisplayedValueAttr: function(/*String*/ label, /*Boolean?*/ priorityChange){
-                       // summary:
-                       //              Hook so attr('displayedValue', label) works.
-                       // description:
-                       //              Sets textbox to display label. Also performs reverse lookup
-                       //              to set the hidden value.
-
-                       // When this is called during initialization it'll ping the datastore
-                       // for reverse lookup, and when that completes (after an XHR request)
-                       // will call setValueAttr()... but that shouldn't trigger an onChange()
-                       // event, even when it happens after creation has finished
-                       if(!this._created){
-                               priorityChange = false;
-                       }
-
-                       if(this.store){
-                               this._hideResultList();
-                               var query = dojo.clone(this.query); // #6196: populate query with user-specifics
-                               // escape meta characters of dojo.data.util.filter.patternToRegExp().
-                               this._lastQuery = query[this.searchAttr] = this._getDisplayQueryString(label);
-                               // if the label is not valid, the callback will never set it,
-                               // so the last valid value will get the warning textbox set the
-                               // textbox value now so that the impending warning will make
-                               // sense to the user
-                               this.textbox.value = label;
-                               this._lastDisplayedValue = label;
-                               var _this = this;
-                               var fetch = {
-                                       query: query,
-                                       queryOptions: {
-                                               ignoreCase: this.ignoreCase,
-                                               deep: true
-                                       },
-                                       onComplete: function(result, dataObject){
-                                               _this._fetchHandle = null;
-                                               dojo.hitch(_this, "_callbackSetLabel")(result, dataObject, priorityChange);
-                                       },
-                                       onError: function(errText){
-                                               _this._fetchHandle = null;
-                                               console.error('dijit.form.FilteringSelect: ' + errText);
-                                               dojo.hitch(_this, "_callbackSetLabel")([], undefined, false);
-                                       }
-                               };
-                               dojo.mixin(fetch, this.fetchProperties);
-                               this._fetchHandle = this.store.fetch(fetch);
-                       }
-               },
-
-               postMixInProperties: function(){
-                       this.inherited(arguments);
-                       this._isvalid = !this.required;
-               },
-
-               undo: function(){
-                       this.set('displayedValue', this._lastDisplayedValue);
-               }
-       }
-);
-
-}
-
-if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.data.ItemFileReadStore"] = true;
-dojo.provide("dojo.data.ItemFileReadStore");
-
-
-
-
-
-dojo.declare("dojo.data.ItemFileReadStore", null,{
-       //      summary:
-       //              The ItemFileReadStore implements the dojo.data.api.Read API and reads
-       //              data from JSON files that have contents in this format --
-       //              { items: [
-       //                      { name:'Kermit', color:'green', age:12, friends:['Gonzo', {_reference:{name:'Fozzie Bear'}}]},
-       //                      { name:'Fozzie Bear', wears:['hat', 'tie']},
-       //                      { name:'Miss Piggy', pets:'Foo-Foo'}
-       //              ]}
-       //              Note that it can also contain an 'identifer' property that specified which attribute on the items 
-       //              in the array of items that acts as the unique identifier for that item.
-       //
-       constructor: function(/* Object */ keywordParameters){
-               //      summary: constructor
-               //      keywordParameters: {url: String}
-               //      keywordParameters: {data: jsonObject}
-               //      keywordParameters: {typeMap: object)
-               //              The structure of the typeMap object is as follows:
-               //              {
-               //                      type0: function || object,
-               //                      type1: function || object,
-               //                      ...
-               //                      typeN: function || object
-               //              }
-               //              Where if it is a function, it is assumed to be an object constructor that takes the 
-               //              value of _value as the initialization parameters.  If it is an object, then it is assumed
-               //              to be an object of general form:
-               //              {
-               //                      type: function, //constructor.
-               //                      deserialize:    function(value) //The function that parses the value and constructs the object defined by type appropriately.
-               //              }
-       
-               this._arrayOfAllItems = [];
-               this._arrayOfTopLevelItems = [];
-               this._loadFinished = false;
-               this._jsonFileUrl = keywordParameters.url;
-               this._ccUrl = keywordParameters.url;
-               this.url = keywordParameters.url;
-               this._jsonData = keywordParameters.data;
-               this.data = null;
-               this._datatypeMap = keywordParameters.typeMap || {};
-               if(!this._datatypeMap['Date']){
-                       //If no default mapping for dates, then set this as default.
-                       //We use the dojo.date.stamp here because the ISO format is the 'dojo way'
-                       //of generically representing dates.
-                       this._datatypeMap['Date'] = {
-                                                                                       type: Date,
-                                                                                       deserialize: function(value){
-                                                                                               return dojo.date.stamp.fromISOString(value);
-                                                                                       }
-                                                                               };
-               }
-               this._features = {'dojo.data.api.Read':true, 'dojo.data.api.Identity':true};
-               this._itemsByIdentity = null;
-               this._storeRefPropName = "_S"; // Default name for the store reference to attach to every item.
-               this._itemNumPropName = "_0"; // Default Item Id for isItem to attach to every item.
-               this._rootItemPropName = "_RI"; // Default Item Id for isItem to attach to every item.
-               this._reverseRefMap = "_RRM"; // Default attribute for constructing a reverse reference map for use with reference integrity
-               this._loadInProgress = false; //Got to track the initial load to prevent duelling loads of the dataset.
-               this._queuedFetches = [];
-               if(keywordParameters.urlPreventCache !== undefined){
-                       this.urlPreventCache = keywordParameters.urlPreventCache?true:false;
-               }
-               if(keywordParameters.hierarchical !== undefined){
-                       this.hierarchical = keywordParameters.hierarchical?true:false;
-               }
-               if(keywordParameters.clearOnClose){
-                       this.clearOnClose = true;
-               }
-               if("failOk" in keywordParameters){
-                       this.failOk = keywordParameters.failOk?true:false;
-               }
-       },
-       
-       url: "",        // use "" rather than undefined for the benefit of the parser (#3539)
-
-       //Internal var, crossCheckUrl.  Used so that setting either url or _jsonFileUrl, can still trigger a reload
-       //when clearOnClose and close is used.
-       _ccUrl: "",
-
-       data: null,     // define this so that the parser can populate it
-
-       typeMap: null, //Define so parser can populate.
-       
-       //Parameter to allow users to specify if a close call should force a reload or not.
-       //By default, it retains the old behavior of not clearing if close is called.  But
-       //if set true, the store will be reset to default state.  Note that by doing this,
-       //all item handles will become invalid and a new fetch must be issued.
-       clearOnClose: false,
-
-       //Parameter to allow specifying if preventCache should be passed to the xhrGet call or not when loading data from a url.  
-       //Note this does not mean the store calls the server on each fetch, only that the data load has preventCache set as an option.
-       //Added for tracker: #6072
-       urlPreventCache: false,
-       
-       //Parameter for specifying that it is OK for the xhrGet call to fail silently.
-       failOk: false,
-
-       //Parameter to indicate to process data from the url as hierarchical 
-       //(data items can contain other data items in js form).  Default is true 
-       //for backwards compatibility.  False means only root items are processed 
-       //as items, all child objects outside of type-mapped objects and those in 
-       //specific reference format, are left straight JS data objects.
-       hierarchical: true,
-
-       _assertIsItem: function(/* item */ item){
-               //      summary:
-               //              This function tests whether the item passed in is indeed an item in the store.
-               //      item: 
-               //              The item to test for being contained by the store.
-               if(!this.isItem(item)){ 
-                       throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");
-               }
-       },
-
-       _assertIsAttribute: function(/* attribute-name-string */ attribute){
-               //      summary:
-               //              This function tests whether the item passed in is indeed a valid 'attribute' like type for the store.
-               //      attribute: 
-               //              The attribute to test for being contained by the store.
-               if(typeof attribute !== "string"){ 
-                       throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");
-               }
-       },
-
-       getValue: function(     /* item */ item, 
-                                               /* attribute-name-string */ attribute, 
-                                               /* value? */ defaultValue){
-               //      summary: 
-               //              See dojo.data.api.Read.getValue()
-               var values = this.getValues(item, attribute);
-               return (values.length > 0)?values[0]:defaultValue; // mixed
-       },
-
-       getValues: function(/* item */ item, 
-                                               /* attribute-name-string */ attribute){
-               //      summary: 
-               //              See dojo.data.api.Read.getValues()
-
-               this._assertIsItem(item);
-               this._assertIsAttribute(attribute);
-               // Clone it before returning.  refs: #10474
-               return (item[attribute] || []).slice(0); // Array
-       },
-
-       getAttributes: function(/* item */ item){
-               //      summary: 
-               //              See dojo.data.api.Read.getAttributes()
-               this._assertIsItem(item);
-               var attributes = [];
-               for(var key in item){
-                       // Save off only the real item attributes, not the special id marks for O(1) isItem.
-                       if((key !== this._storeRefPropName) && (key !== this._itemNumPropName) && (key !== this._rootItemPropName) && (key !== this._reverseRefMap)){
-                               attributes.push(key);
-                       }
-               }
-               return attributes; // Array
-       },
-
-       hasAttribute: function( /* item */ item,
-                                                       /* attribute-name-string */ attribute){
-               //      summary: 
-               //              See dojo.data.api.Read.hasAttribute()
-               this._assertIsItem(item);
-               this._assertIsAttribute(attribute);
-               return (attribute in item);
-       },
-
-       containsValue: function(/* item */ item, 
-                                                       /* attribute-name-string */ attribute, 
-                                                       /* anything */ value){
-               //      summary: 
-               //              See dojo.data.api.Read.containsValue()
-               var regexp = undefined;
-               if(typeof value === "string"){
-                       regexp = dojo.data.util.filter.patternToRegExp(value, false);
-               }
-               return this._containsValue(item, attribute, value, regexp); //boolean.
-       },
-
-       _containsValue: function(       /* item */ item, 
-                                                               /* attribute-name-string */ attribute, 
-                                                               /* anything */ value,
-                                                               /* RegExp?*/ regexp){
-               //      summary: 
-               //              Internal function for looking at the values contained by the item.
-               //      description: 
-               //              Internal function for looking at the values contained by the item.  This 
-               //              function allows for denoting if the comparison should be case sensitive for
-               //              strings or not (for handling filtering cases where string case should not matter)
-               //      
-               //      item:
-               //              The data item to examine for attribute values.
-               //      attribute:
-               //              The attribute to inspect.
-               //      value:  
-               //              The value to match.
-               //      regexp:
-               //              Optional regular expression generated off value if value was of string type to handle wildcarding.
-               //              If present and attribute values are string, then it can be used for comparison instead of 'value'
-               return dojo.some(this.getValues(item, attribute), function(possibleValue){
-                       if(possibleValue !== null && !dojo.isObject(possibleValue) && regexp){
-                               if(possibleValue.toString().match(regexp)){
-                                       return true; // Boolean
-                               }
-                       }else if(value === possibleValue){
-                               return true; // Boolean
-                       }
-               });
-       },
-
-       isItem: function(/* anything */ something){
-               //      summary: 
-               //              See dojo.data.api.Read.isItem()
-               if(something && something[this._storeRefPropName] === this){
-                       if(this._arrayOfAllItems[something[this._itemNumPropName]] === something){
-                               return true;
-                       }
-               }
-               return false; // Boolean
-       },
-
-       isItemLoaded: function(/* anything */ something){
-               //      summary: 
-               //              See dojo.data.api.Read.isItemLoaded()
-               return this.isItem(something); //boolean
-       },
-
-       loadItem: function(/* object */ keywordArgs){
-               //      summary: 
-               //              See dojo.data.api.Read.loadItem()
-               this._assertIsItem(keywordArgs.item);
-       },
-
-       getFeatures: function(){
-               //      summary: 
-               //              See dojo.data.api.Read.getFeatures()
-               return this._features; //Object
-       },
-
-       getLabel: function(/* item */ item){
-               //      summary: 
-               //              See dojo.data.api.Read.getLabel()
-               if(this._labelAttr && this.isItem(item)){
-                       return this.getValue(item,this._labelAttr); //String
-               }
-               return undefined; //undefined
-       },
-
-       getLabelAttributes: function(/* item */ item){
-               //      summary: 
-               //              See dojo.data.api.Read.getLabelAttributes()
-               if(this._labelAttr){
-                       return [this._labelAttr]; //array
-               }
-               return null; //null
-       },
-
-       _fetchItems: function(  /* Object */ keywordArgs, 
-                                                       /* Function */ findCallback, 
-                                                       /* Function */ errorCallback){
-               //      summary: 
-               //              See dojo.data.util.simpleFetch.fetch()
-               var self = this,
-                   filter = function(requestArgs, arrayOfItems){
-                       var items = [],
-                           i, key;
-                       if(requestArgs.query){
-                               var value,
-                                   ignoreCase = requestArgs.queryOptions ? requestArgs.queryOptions.ignoreCase : false;
-
-                               //See if there are any string values that can be regexp parsed first to avoid multiple regexp gens on the
-                               //same value for each item examined.  Much more efficient.
-                               var regexpList = {};
-                               for(key in requestArgs.query){
-                                       value = requestArgs.query[key];
-                                       if(typeof value === "string"){
-                                               regexpList[key] = dojo.data.util.filter.patternToRegExp(value, ignoreCase);
-                                       }else if(value instanceof RegExp){
-                                               regexpList[key] = value;
-                                       }
-                               }
-                               for(i = 0; i < arrayOfItems.length; ++i){
-                                       var match = true;
-                                       var candidateItem = arrayOfItems[i];
-                                       if(candidateItem === null){
-                                               match = false;
-                                       }else{
-                                               for(key in requestArgs.query){
-                                                       value = requestArgs.query[key];
-                                                       if(!self._containsValue(candidateItem, key, value, regexpList[key])){
-                                                               match = false;
-                                                       }
-                                               }
-                                       }
-                                       if(match){
-                                               items.push(candidateItem);
-                                       }
-                               }
-                               findCallback(items, requestArgs);
-                       }else{
-                               // We want a copy to pass back in case the parent wishes to sort the array. 
-                               // We shouldn't allow resort of the internal list, so that multiple callers 
-                               // can get lists and sort without affecting each other.  We also need to
-                               // filter out any null values that have been left as a result of deleteItem()
-                               // calls in ItemFileWriteStore.
-                               for(i = 0; i < arrayOfItems.length; ++i){
-                                       var item = arrayOfItems[i];
-                                       if(item !== null){
-                                               items.push(item);
-                                       }
-                               }
-                               findCallback(items, requestArgs);
-                       }
-               };
-
-               if(this._loadFinished){
-                       filter(keywordArgs, this._getItemsArray(keywordArgs.queryOptions));
-               }else{
-                       //Do a check on the JsonFileUrl and crosscheck it.
-                       //If it doesn't match the cross-check, it needs to be updated
-                       //This allows for either url or _jsonFileUrl to he changed to
-                       //reset the store load location.  Done this way for backwards 
-                       //compatibility.  People use _jsonFileUrl (even though officially
-                       //private.
-                       if(this._jsonFileUrl !== this._ccUrl){
-                               dojo.deprecated("dojo.data.ItemFileReadStore: ", 
-                                       "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;
-                       }
-
-                       //See if there was any forced reset of data.
-                       if(this.data != null && this._jsonData == null){
-                               this._jsonData = this.data;
-                               this.data = null;
-                       }
-
-                       if(this._jsonFileUrl){
-                               //If fetches come in before the loading has finished, but while
-                               //a load is in progress, we have to defer the fetching to be 
-                               //invoked in the callback.
-                               if(this._loadInProgress){
-                                       this._queuedFetches.push({args: keywordArgs, filter: filter});
-                               }else{
-                                       this._loadInProgress = true;
-                                       var getArgs = {
-                                                       url: self._jsonFileUrl, 
-                                                       handleAs: "json-comment-optional",
-                                                       preventCache: this.urlPreventCache,
-                                                       failOk: this.failOk
-                                               };
-                                       var getHandler = dojo.xhrGet(getArgs);
-                                       getHandler.addCallback(function(data){
-                                               try{
-                                                       self._getItemsFromLoadedData(data);
-                                                       self._loadFinished = true;
-                                                       self._loadInProgress = false;
-                                                       
-                                                       filter(keywordArgs, self._getItemsArray(keywordArgs.queryOptions));
-                                                       self._handleQueuedFetches();
-                                               }catch(e){
-                                                       self._loadFinished = true;
-                                                       self._loadInProgress = false;
-                                                       errorCallback(e, keywordArgs);
-                                               }
-                                       });
-                                       getHandler.addErrback(function(error){
-                                               self._loadInProgress = false;
-                                               errorCallback(error, keywordArgs);
-                                       });
-
-                                       //Wire up the cancel to abort of the request
-                                       //This call cancel on the deferred if it hasn't been called
-                                       //yet and then will chain to the simple abort of the
-                                       //simpleFetch keywordArgs
-                                       var oldAbort = null;
-                                       if(keywordArgs.abort){
-                                               oldAbort = keywordArgs.abort;
-                                       }
-                                       keywordArgs.abort = function(){
-                                               var df = getHandler;
-                                               if(df && df.fired === -1){
-                                                       df.cancel();
-                                                       df = null;
-                                               }
-                                               if(oldAbort){
-                                                       oldAbort.call(keywordArgs);
-                                               }
-                                       };
-                               }
-                       }else if(this._jsonData){
-                               try{
-                                       this._loadFinished = true;
-                                       this._getItemsFromLoadedData(this._jsonData);
-                                       this._jsonData = null;
-                                       filter(keywordArgs, this._getItemsArray(keywordArgs.queryOptions));
-                               }catch(e){
-                                       errorCallback(e, keywordArgs);
-                               }
-                       }else{
-                               errorCallback(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."), keywordArgs);
-                       }
-               }
-       },
-
-       _handleQueuedFetches: function(){
-               //      summary: 
-               //              Internal function to execute delayed request in the store.
-               //Execute any deferred fetches now.
-               if(this._queuedFetches.length > 0){
-                       for(var i = 0; i < this._queuedFetches.length; i++){
-                               var fData = this._queuedFetches[i],
-                                   delayedQuery = fData.args,
-                                   delayedFilter = fData.filter;
-                               if(delayedFilter){
-                                       delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions)); 
-                               }else{
-                                       this.fetchItemByIdentity(delayedQuery);
-                               }
-                       }
-                       this._queuedFetches = [];
-               }
-       },
-
-       _getItemsArray: function(/*object?*/queryOptions){
-               //      summary: 
-               //              Internal function to determine which list of items to search over.
-               //      queryOptions: The query options parameter, if any.
-               if(queryOptions && queryOptions.deep){
-                       return this._arrayOfAllItems; 
-               }
-               return this._arrayOfTopLevelItems;
-       },
-
-       close: function(/*dojo.data.api.Request || keywordArgs || null */ request){
-                //     summary: 
-                //             See dojo.data.api.Read.close()
-                if(this.clearOnClose && 
-                       this._loadFinished && 
-                       !this._loadInProgress){
-                        //Reset all internalsback to default state.  This will force a reload
-                        //on next fetch.  This also checks that the data or url param was set 
-                        //so that the store knows it can get data.  Without one of those being set,
-                        //the next fetch will trigger an error.
-
-                        if(((this._jsonFileUrl == "" || this._jsonFileUrl == null) && 
-                                (this.url == "" || this.url == null)
-                               ) && this.data == null){
-                                console.debug("dojo.data.ItemFileReadStore: WARNING!  Data reload " +
-                                       " information has not been provided." + 
-                                       "  Please set 'url' or 'data' to the appropriate value before" +
-                                       " the next fetch");
-                        }
-                        this._arrayOfAllItems = [];
-                        this._arrayOfTopLevelItems = [];
-                        this._loadFinished = false;
-                        this._itemsByIdentity = null;
-                        this._loadInProgress = false;
-                        this._queuedFetches = [];
-                }
-       },
-
-       _getItemsFromLoadedData: function(/* Object */ dataObject){
-               //      summary:
-               //              Function to parse the loaded data into item format and build the internal items array.
-               //      description:
-               //              Function to parse the loaded data into item format and build the internal items array.
-               //
-               //      dataObject:
-               //              The JS data object containing the raw data to convery into item format.
-               //
-               //      returns: array
-               //              Array of items in store item format.
-               
-               // First, we define a couple little utility functions...
-               var addingArrays = false,
-                   self = this;
-               
-               function valueIsAnItem(/* anything */ aValue){
-                       // summary:
-                       //              Given any sort of value that could be in the raw json data,
-                       //              return true if we should interpret the value as being an
-                       //              item itself, rather than a literal value or a reference.
-                       // example:
-                       //      |       false == valueIsAnItem("Kermit");
-                       //      |       false == valueIsAnItem(42);
-                       //      |       false == valueIsAnItem(new Date());
-                       //      |       false == valueIsAnItem({_type:'Date', _value:'May 14, 1802'});
-                       //      |       false == valueIsAnItem({_reference:'Kermit'});
-                       //      |       true == valueIsAnItem({name:'Kermit', color:'green'});
-                       //      |       true == valueIsAnItem({iggy:'pop'});
-                       //      |       true == valueIsAnItem({foo:42});
-                       var isItem = (
-                               (aValue !== null) &&
-                               (typeof aValue === "object") &&
-                               (!dojo.isArray(aValue) || addingArrays) &&
-                               (!dojo.isFunction(aValue)) &&
-                               (aValue.constructor == Object || dojo.isArray(aValue)) &&
-                               (typeof aValue._reference === "undefined") && 
-                               (typeof aValue._type === "undefined") && 
-                               (typeof aValue._value === "undefined") &&
-                               self.hierarchical
-                       );
-                       return isItem;
-               }
-               
-               function addItemAndSubItemsToArrayOfAllItems(/* Item */ anItem){
-                       self._arrayOfAllItems.push(anItem);
-                       for(var attribute in anItem){
-                               var valueForAttribute = anItem[attribute];
-                               if(valueForAttribute){
-                                       if(dojo.isArray(valueForAttribute)){
-                                               var valueArray = valueForAttribute;
-                                               for(var k = 0; k < valueArray.length; ++k){
-                                                       var singleValue = valueArray[k];
-                                                       if(valueIsAnItem(singleValue)){
-                                                               addItemAndSubItemsToArrayOfAllItems(singleValue);
-                                                       }
-                                               }
-                                       }else{
-                                               if(valueIsAnItem(valueForAttribute)){
-                                                       addItemAndSubItemsToArrayOfAllItems(valueForAttribute);
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               this._labelAttr = dataObject.label;
-
-               // We need to do some transformations to convert the data structure
-               // that we read from the file into a format that will be convenient
-               // to work with in memory.
-
-               // Step 1: Walk through the object hierarchy and build a list of all items
-               var i,
-                   item;
-               this._arrayOfAllItems = [];
-               this._arrayOfTopLevelItems = dataObject.items;
-
-               for(i = 0; i < this._arrayOfTopLevelItems.length; ++i){
-                       item = this._arrayOfTopLevelItems[i];
-                       if(dojo.isArray(item)){
-                               addingArrays = true;
-                       }
-                       addItemAndSubItemsToArrayOfAllItems(item);
-                       item[this._rootItemPropName]=true;
-               }
-
-               // Step 2: Walk through all the attribute values of all the items, 
-               // and replace single values with arrays.  For example, we change this:
-               //              { name:'Miss Piggy', pets:'Foo-Foo'}
-               // into this:
-               //              { name:['Miss Piggy'], pets:['Foo-Foo']}
-               // 
-               // We also store the attribute names so we can validate our store  
-               // reference and item id special properties for the O(1) isItem
-               var allAttributeNames = {},
-                   key;
-
-               for(i = 0; i < this._arrayOfAllItems.length; ++i){
-                       item = this._arrayOfAllItems[i];
-                       for(key in item){
-                               if(key !== this._rootItemPropName){
-                                       var value = item[key];
-                                       if(value !== null){
-                                               if(!dojo.isArray(value)){
-                                                       item[key] = [value];
-                                               }
-                                       }else{
-                                               item[key] = [null];
-                                       }
-                               }
-                               allAttributeNames[key]=key;
-                       }
-               }
-
-               // Step 3: Build unique property names to use for the _storeRefPropName and _itemNumPropName
-               // This should go really fast, it will generally never even run the loop.
-               while(allAttributeNames[this._storeRefPropName]){
-                       this._storeRefPropName += "_";
-               }
-               while(allAttributeNames[this._itemNumPropName]){
-                       this._itemNumPropName += "_";
-               }
-               while(allAttributeNames[this._reverseRefMap]){
-                       this._reverseRefMap += "_";
-               }
-
-               // Step 4: Some data files specify an optional 'identifier', which is 
-               // the name of an attribute that holds the identity of each item. 
-               // If this data file specified an identifier attribute, then build a 
-               // hash table of items keyed by the identity of the items.
-               var arrayOfValues;
-
-               var identifier = dataObject.identifier;
-               if(identifier){
-                       this._itemsByIdentity = {};
-                       this._features['dojo.data.api.Identity'] = identifier;
-                       for(i = 0; i < this._arrayOfAllItems.length; ++i){
-                               item = this._arrayOfAllItems[i];
-                               arrayOfValues = item[identifier];
-                               var identity = arrayOfValues[0];
-                               if(!this._itemsByIdentity[identity]){
-                                       this._itemsByIdentity[identity] = item;
-                               }else{
-                                       if(this._jsonFileUrl){
-                                               throw new Error("dojo.data.ItemFileReadStore:  The json data as specified by: [" + this._jsonFileUrl + "] is malformed.  Items within the list have identifier: [" + identifier + "].  Value collided: [" + identity + "]");
-                                       }else if(this._jsonData){
-                                               throw new Error("dojo.data.ItemFileReadStore:  The json data provided by the creation arguments is malformed.  Items within the list have identifier: [" + identifier + "].  Value collided: [" + identity + "]");
-                                       }
-                               }
-                       }
-               }else{
-                       this._features['dojo.data.api.Identity'] = Number;
-               }
-
-               // Step 5: Walk through all the items, and set each item's properties 
-               // for _storeRefPropName and _itemNumPropName, so that store.isItem() will return true.
-               for(i = 0; i < this._arrayOfAllItems.length; ++i){
-                       item = this._arrayOfAllItems[i];
-                       item[this._storeRefPropName] = this;
-                       item[this._itemNumPropName] = i;
-               }
-
-               // Step 6: We walk through all the attribute values of all the items,
-               // looking for type/value literals and item-references.
-               //
-               // We replace item-references with pointers to items.  For example, we change:
-               //              { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
-               // into this:
-               //              { name:['Kermit'], friends:[miss_piggy] } 
-               // (where miss_piggy is the object representing the 'Miss Piggy' item).
-               //
-               // We replace type/value pairs with typed-literals.  For example, we change:
-               //              { name:['Nelson Mandela'], born:[{_type:'Date', _value:'July 18, 1918'}] }
-               // into this:
-               //              { name:['Kermit'], born:(new Date('July 18, 1918')) } 
-               //
-               // We also generate the associate map for all items for the O(1) isItem function.
-               for(i = 0; i < this._arrayOfAllItems.length; ++i){
-                       item = this._arrayOfAllItems[i]; // example: { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
-                       for(key in item){
-                               arrayOfValues = item[key]; // example: [{_reference:{name:'Miss Piggy'}}]
-                               for(var j = 0; j < arrayOfValues.length; ++j){
-                                       value = arrayOfValues[j]; // example: {_reference:{name:'Miss Piggy'}}
-                                       if(value !== null && typeof value == "object"){
-                                               if(("_type" in value) && ("_value" in value)){
-                                                       var type = value._type; // examples: 'Date', 'Color', or 'ComplexNumber'
-                                                       var mappingObj = this._datatypeMap[type]; // examples: Date, dojo.Color, foo.math.ComplexNumber, {type: dojo.Color, deserialize(value){ return new dojo.Color(value)}}
-                                                       if(!mappingObj){ 
-                                                               throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '" + type + "'");
-                                                       }else if(dojo.isFunction(mappingObj)){
-                                                               arrayOfValues[j] = new mappingObj(value._value);
-                                                       }else if(dojo.isFunction(mappingObj.deserialize)){
-                                                               arrayOfValues[j] = mappingObj.deserialize(value._value);
-                                                       }else{
-                                                               throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");
-                                                       }
-                                               }
-                                               if(value._reference){
-                                                       var referenceDescription = value._reference; // example: {name:'Miss Piggy'}
-                                                       if(!dojo.isObject(referenceDescription)){
-                                                               // example: 'Miss Piggy'
-                                                               // from an item like: { name:['Kermit'], friends:[{_reference:'Miss Piggy'}]}
-                                                               arrayOfValues[j] = this._getItemByIdentity(referenceDescription);
-                                                       }else{
-                                                               // example: {name:'Miss Piggy'}
-                                                               // from an item like: { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
-                                                               for(var k = 0; k < this._arrayOfAllItems.length; ++k){
-                                                                       var candidateItem = this._arrayOfAllItems[k],
-                                                                           found = true;
-                                                                       for(var refKey in referenceDescription){
-                                                                               if(candidateItem[refKey] != referenceDescription[refKey]){ 
-                                                                                       found = false; 
-                                                                               }
-                                                                       }
-                                                                       if(found){ 
-                                                                               arrayOfValues[j] = candidateItem; 
-                                                                       }
-                                                               }
-                                                       }
-                                                       if(this.referenceIntegrity){
-                                                               var refItem = arrayOfValues[j];
-                                                               if(this.isItem(refItem)){
-                                                                       this._addReferenceToMap(refItem, item, key);
-                                                               }
-                                                       }
-                                               }else if(this.isItem(value)){
-                                                       //It's a child item (not one referenced through _reference).  
-                                                       //We need to treat this as a referenced item, so it can be cleaned up
-                                                       //in a write store easily.
-                                                       if(this.referenceIntegrity){
-                                                               this._addReferenceToMap(value, item, key);
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       },
-
-       _addReferenceToMap: function(/*item*/ refItem, /*item*/ parentItem, /*string*/ attribute){
-                //     summary:
-                //             Method to add an reference map entry for an item and attribute.
-                //     description:
-                //             Method to add an reference map entry for an item and attribute.                  //
-                //     refItem:
-                //             The item that is referenced.
-                //     parentItem:
-                //             The item that holds the new reference to refItem.
-                //     attribute:
-                //             The attribute on parentItem that contains the new reference.
-                
-                //Stub function, does nothing.  Real processing is in ItemFileWriteStore.
-       },
-
-       getIdentity: function(/* item */ item){
-               //      summary: 
-               //              See dojo.data.api.Identity.getIdentity()
-               var identifier = this._features['dojo.data.api.Identity'];
-               if(identifier === Number){
-                       return item[this._itemNumPropName]; // Number
-               }else{
-                       var arrayOfValues = item[identifier];
-                       if(arrayOfValues){
-                               return arrayOfValues[0]; // Object || String
-                       }
-               }
-               return null; // null
-       },
-
-       fetchItemByIdentity: function(/* Object */ keywordArgs){
-               //      summary: 
-               //              See dojo.data.api.Identity.fetchItemByIdentity()
-
-               // Hasn't loaded yet, we have to trigger the load.
-               var item,
-                   scope;
-               if(!this._loadFinished){
-                       var self = this;
-                       //Do a check on the JsonFileUrl and crosscheck it.
-                       //If it doesn't match the cross-check, it needs to be updated
-                       //This allows for either url or _jsonFileUrl to he changed to
-                       //reset the store load location.  Done this way for backwards 
-                       //compatibility.  People use _jsonFileUrl (even though officially
-                       //private.
-                       if(this._jsonFileUrl !== this._ccUrl){
-                               dojo.deprecated("dojo.data.ItemFileReadStore: ", 
-                                       "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;
-                       }
-                       
-                       //See if there was any forced reset of data.
-                       if(this.data != null && this._jsonData == null){
-                               this._jsonData = this.data;
-                               this.data = null;
-                       }
-
-                       if(this._jsonFileUrl){
-
-                               if(this._loadInProgress){
-                                       this._queuedFetches.push({args: keywordArgs});
-                               }else{
-                                       this._loadInProgress = true;
-                                       var getArgs = {
-                                                       url: self._jsonFileUrl, 
-                                                       handleAs: "json-comment-optional",
-                                                       preventCache: this.urlPreventCache,
-                                                       failOk: this.failOk
-                                       };
-                                       var getHandler = dojo.xhrGet(getArgs);
-                                       getHandler.addCallback(function(data){
-                                               var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
-                                               try{
-                                                       self._getItemsFromLoadedData(data);
-                                                       self._loadFinished = true;
-                                                       self._loadInProgress = false;
-                                                       item = self._getItemByIdentity(keywordArgs.identity);
-                                                       if(keywordArgs.onItem){
-                                                               keywordArgs.onItem.call(scope, item);
-                                                       }
-                                                       self._handleQueuedFetches();
-                                               }catch(error){
-                                                       self._loadInProgress = false;
-                                                       if(keywordArgs.onError){
-                                                               keywordArgs.onError.call(scope, error);
-                                                       }
-                                               }
-                                       });
-                                       getHandler.addErrback(function(error){
-                                               self._loadInProgress = false;
-                                               if(keywordArgs.onError){
-                                                       var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
-                                                       keywordArgs.onError.call(scope, error);
-                                               }
-                                       });
-                               }
-
-                       }else if(this._jsonData){
-                               // Passed in data, no need to xhr.
-                               self._getItemsFromLoadedData(self._jsonData);
-                               self._jsonData = null;
-                               self._loadFinished = true;
-                               item = self._getItemByIdentity(keywordArgs.identity);
-                               if(keywordArgs.onItem){
-                                       scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
-                                       keywordArgs.onItem.call(scope, item);
-                               }
-                       } 
-               }else{
-                       // Already loaded.  We can just look it up and call back.
-                       item = this._getItemByIdentity(keywordArgs.identity);
-                       if(keywordArgs.onItem){
-                               scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
-                               keywordArgs.onItem.call(scope, item);
-                       }
-               }
-       },
-
-       _getItemByIdentity: function(/* Object */ identity){
-               //      summary:
-               //              Internal function to look an item up by its identity map.
-               var item = null;
-               if(this._itemsByIdentity){
-                       item = this._itemsByIdentity[identity];
-               }else{
-                       item = this._arrayOfAllItems[identity];
-               }
-               if(item === undefined){
-                       item = null;
-               }
-               return item; // Object
-       },
-
-       getIdentityAttributes: function(/* item */ item){
-               //      summary: 
-               //              See dojo.data.api.Identity.getIdentifierAttributes()
-                
-               var identifier = this._features['dojo.data.api.Identity'];
-               if(identifier === Number){
-                       // If (identifier === Number) it means getIdentity() just returns
-                       // an integer item-number for each item.  The dojo.data.api.Identity
-                       // spec says we need to return null if the identity is not composed 
-                       // of attributes 
-                       return null; // null
-               }else{
-                       return [identifier]; // Array
-               }
-       },
-       
-       _forceLoad: function(){
-               //      summary: 
-               //              Internal function to force a load of the store if it hasn't occurred yet.  This is required
-               //              for specific functions to work properly.  
-               var self = this;
-               //Do a check on the JsonFileUrl and crosscheck it.
-               //If it doesn't match the cross-check, it needs to be updated
-               //This allows for either url or _jsonFileUrl to he changed to
-               //reset the store load location.  Done this way for backwards 
-               //compatibility.  People use _jsonFileUrl (even though officially
-               //private.
-               if(this._jsonFileUrl !== this._ccUrl){
-                       dojo.deprecated("dojo.data.ItemFileReadStore: ", 
-                               "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;
-               }
-
-               //See if there was any forced reset of data.
-               if(this.data != null && this._jsonData == null){
-                       this._jsonData = this.data;
-                       this.data = null;
-               }
-
-               if(this._jsonFileUrl){
-                               var getArgs = {
-                                       url: this._jsonFileUrl, 
-                                       handleAs: "json-comment-optional",
-                                       preventCache: this.urlPreventCache,
-                                       failOk: this.failOk,
-                                       sync: true
-                               };
-                       var getHandler = dojo.xhrGet(getArgs);
-                       getHandler.addCallback(function(data){
-                               try{
-                                       //Check to be sure there wasn't another load going on concurrently 
-                                       //So we don't clobber data that comes in on it.  If there is a load going on
-                                       //then do not save this data.  It will potentially clobber current data.
-                                       //We mainly wanted to sync/wait here.
-                                       //TODO:  Revisit the loading scheme of this store to improve multi-initial
-                                       //request handling.
-                                       if(self._loadInProgress !== true && !self._loadFinished){
-                                               self._getItemsFromLoadedData(data);
-                                               self._loadFinished = true;
-                                       }else if(self._loadInProgress){
-                                               //Okay, we hit an error state we can't recover from.  A forced load occurred
-                                               //while an async load was occurring.  Since we cannot block at this point, the best
-                                               //that can be managed is to throw an error.
-                                               throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress."); 
-                                       }
-                               }catch(e){
-                                       console.log(e);
-                                       throw e;
-                               }
-                       });
-                       getHandler.addErrback(function(error){
-                               throw error;
-                       });
-               }else if(this._jsonData){
-                       self._getItemsFromLoadedData(self._jsonData);
-                       self._jsonData = null;
-                       self._loadFinished = true;
-               } 
-       }
-});
-//Mix in the simple fetch implementation to this class.
-dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);
-
-}
-
-if(!dojo._hasResource["dijit._editor.plugins.FontChoice"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.FontChoice"] = true;
-dojo.provide("dijit._editor.plugins.FontChoice");
-
-
-
-
-
-
-
-
-
-
-dojo.declare("dijit._editor.plugins._FontDropDown",
-       [dijit._Widget, dijit._Templated],{
-       // summary:
-       //              Base class for widgets that contains a label (like "Font:")
-       //              and a FilteringSelect drop down to pick a value.
-       //              Used as Toolbar entry.
-
-       // label: [public] String
-       //              The label to apply to this particular FontDropDown.
-       label: "",
-
-       // widgetsInTemplate: [public] boolean
-       //              Over-ride denoting the template has widgets to parse.
-       widgetsInTemplate: true,
-
-       // plainText: [public] boolean
-       //              Flag to indicate that the returned label should be plain text
-       //              instead of an example.
-       plainText: false,
-
-       // templateString: [public] String
-       //              The template used to construct the labeled dropdown.
-       templateString:
-               "<span style='white-space: nowrap' class='dijit dijitReset dijitInline'>" +
-                       "<label class='dijitLeft dijitInline' for='${selectId}'>${label}</label>" +
-                       "<input dojoType='dijit.form.FilteringSelect' required=false labelType=html labelAttr=label searchAttr=name " +
-                                       "tabIndex='-1' id='${selectId}' dojoAttachPoint='select' value=''/>" +
-               "</span>",
-
-       postMixInProperties: function(){
-               // summary:
-               //              Over-ride to misin specific properties.
-               this.inherited(arguments);
-
-               this.strings = dojo.i18n.getLocalization("dijit._editor", "FontChoice");
-
-               // Set some substitution variables used in the template
-               this.label = this.strings[this.command];
-               this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
-               this.selectId = this.id + "_select";
-
-               this.inherited(arguments);
-       },
-
-       postCreate: function(){
-               // summary:
-               //              Over-ride for the default postCreate action
-               //              This establishes the filtering selects and the like.
-
-               // Initialize the list of items in the drop down by creating data store with items like:
-               // {value: 1, name: "xx-small", label: "<font size=1>xx-small</font-size>" }
-               var     items = dojo.map(this.values, function(value){
-                               var name = this.strings[value] || value;
-                               return {
-                                       label: this.getLabel(value, name),
-                                       name: name,
-                                       value: value
-                               };
-                       }, this);
-
-               this.select.store = new dojo.data.ItemFileReadStore({
-                       data: {
-                               identifier: "value",
-                               items: items
-                       }
-               });
-
-               this.select.set("value", "", false);
-               this.disabled = this.select.get("disabled");
-       },
-
-       _setValueAttr: function(value, priorityChange){
-               // summary:
-               //              Over-ride for the default action of setting the
-               //              widget value, maps the input to known values
-               // value: Object|String
-               //              The value to set in the select.
-               // priorityChange:
-               //              Optional parameter used to tell the select whether or not to fire
-               //              onChange event.
-
-               //if the value is not a permitted value, just set empty string to prevent showing the warning icon
-               priorityChange = priorityChange !== false?true:false;
-               this.select.set('value', dojo.indexOf(this.values,value) < 0 ? "" : value, priorityChange);
-               if(!priorityChange){
-                       // Clear the last state in case of updateState calls.  Ref: #10466
-                       this.select._lastValueReported=null;
-               }
-       },
-
-       _getValueAttr: function(){
-               // summary:
-               //              Allow retreiving the value from the composite select on
-               //              call to button.get("value");
-               return this.select.get('value');
-       },
-
-       focus: function(){
-               // summary:
-               //              Over-ride for focus control of this widget.  Delegates focus down to the
-               //              filtering select.
-               this.select.focus();
-       },
-
-       _setDisabledAttr: function(value){
-               // summary:
-               //              Over-ride for the button's 'disabled' attribute so that it can be
-               //              disabled programmatically.
-
-               // Save off ths disabled state so the get retrieves it correctly
-               //without needing to have a function proxy it.
-               this.disabled = value;
-               this.select.set("disabled", value);
-       }
-});
-
-
-dojo.declare("dijit._editor.plugins._FontNameDropDown", dijit._editor.plugins._FontDropDown, {
-       // summary:
-       //              Dropdown to select a font; goes in editor toolbar.
-
-       // generic: Boolean
-       //              Use generic (web standard) font names
-       generic: false,
-
-       // command: [public] String
-       //              The editor 'command' implemented by this plugin.
-       command: "fontName",
-
-       postMixInProperties: function(){
-               // summary:
-               //              Over-ride for the default posr mixin control
-               if(!this.values){
-                       this.values = this.generic ?
-                               ["serif", "sans-serif", "monospace", "cursive", "fantasy"] : // CSS font-family generics
-                                       ["Arial", "Times New Roman", "Comic Sans MS", "Courier New"];
-               }
-               this.inherited(arguments);
-       },
-
-       getLabel: function(value, name){
-               // summary:
-               //              Function used to generate the labels of the format dropdown
-               //              will return a formatted, or plain label based on the value
-               //              of the plainText option.
-               // value: String
-               //              The 'insert value' associated with a name
-               // name: String
-               //              The text name of the value
-               if(this.plainText){
-                       return name;
-               }else{
-                       return "<div style='font-family: "+value+"'>" + name + "</div>";
-               }
-       },
-
-       _setValueAttr: function(value, priorityChange){
-               // summary:
-               //              Over-ride for the default action of setting the
-               //              widget value, maps the input to known values
-
-               priorityChange = priorityChange !== false?true:false;
-               if(this.generic){
-                       var map = {
-                               "Arial": "sans-serif",
-                               "Helvetica": "sans-serif",
-                               "Myriad": "sans-serif",
-                               "Times": "serif",
-                               "Times New Roman": "serif",
-                               "Comic Sans MS": "cursive",
-                               "Apple Chancery": "cursive",
-                               "Courier": "monospace",
-                               "Courier New": "monospace",
-                               "Papyrus": "fantasy"
-//                                     ,"????": "fantasy" TODO: IE doesn't map fantasy font-family?
-                       };
-                       value = map[value] || value;
-               }
-               this.inherited(arguments, [value, priorityChange]);
-       }
-});
-
-dojo.declare("dijit._editor.plugins._FontSizeDropDown", dijit._editor.plugins._FontDropDown, {
-       // summary:
-       //              Dropdown to select a font size; goes in editor toolbar.
-
-       // command: [public] String
-       //              The editor 'command' implemented by this plugin.
-       command: "fontSize",
-
-       // values: [public] Number[]
-       //              The HTML font size values supported by this plugin
-       values: [1,2,3,4,5,6,7], // sizes according to the old HTML FONT SIZE
-
-       getLabel: function(value, name){
-               // summary:
-               //              Function used to generate the labels of the format dropdown
-               //              will return a formatted, or plain label based on the value
-               //              of the plainText option.
-               //              We're stuck using the deprecated FONT tag to correspond
-               //              with the size measurements used by the editor
-               // value: String
-               //              The 'insert value' associated with a name
-               // name: String
-               //              The text name of the value
-               if(this.plainText){
-                       return name;
-               }else{
-                       return "<font size=" + value + "'>" + name + "</font>";
-               }
-       },
-
-       _setValueAttr: function(value, priorityChange){
-               // summary:
-               //              Over-ride for the default action of setting the
-               //              widget value, maps the input to known values
-               priorityChange = priorityChange !== false?true:false;
-               if(value.indexOf && value.indexOf("px") != -1){
-                       var pixels = parseInt(value, 10);
-                       value = {10:1, 13:2, 16:3, 18:4, 24:5, 32:6, 48:7}[pixels] || value;
-               }
-
-               this.inherited(arguments, [value, priorityChange]);
-       }
-});
-
-
-dojo.declare("dijit._editor.plugins._FormatBlockDropDown", dijit._editor.plugins._FontDropDown, {
-       // summary:
-       //              Dropdown to select a format (like paragraph or heading); goes in editor toolbar.
-
-       // command: [public] String
-       //              The editor 'command' implemented by this plugin.
-       command: "formatBlock",
-
-       // values: [public] Array
-       //              The HTML format tags supported by this plugin
-       values: ["noFormat", "p", "h1", "h2", "h3", "pre"],
-
-       postCreate: function(){
-               // Init and set the default value to no formatting.  Update state will adjust it
-               // as needed.
-               this.inherited(arguments);
-               this.set("value", "noFormat", false);
-       },
-
-       getLabel: function(value, name){
-               // summary:
-               //              Function used to generate the labels of the format dropdown
-               //              will return a formatted, or plain label based on the value
-               //              of the plainText option.
-               // value: String
-               //              The 'insert value' associated with a name
-               // name: String
-               //              The text name of the value
-               if(this.plainText){
-                       return name;
-               }else{
-                       return "<" + value + ">" + name + "</" + value + ">";
-               }
-       },
-
-       _execCommand: function(editor, command, choice){
-               // summary:
-               //              Over-ride for default exec-command label.
-               //              Allows us to treat 'none' as special.
-               if(choice === "noFormat"){
-                       var start;
-                       var end;
-                       var sel = dijit.range.getSelection(editor.window);
-                       if(sel && sel.rangeCount > 0){
-                               var range = sel.getRangeAt(0);
-                               var node, tag;
-                               if(range){
-                                       start = range.startContainer;
-                                       end = range.endContainer;
-
-                                       // find containing nodes of start/end.
-                                       while(start && start !== editor.editNode && 
-                                                 start !== editor.document.body && 
-                                                 start.nodeType !== 1){
-                                               start = start.parentNode;
-                                       }
-
-                                       while(end && end !== editor.editNode && 
-                                                 end !== editor.document.body && 
-                                                 end.nodeType !== 1){
-                                               end = end.parentNode;
-                                       }
-
-                                       var processChildren = dojo.hitch(this, function(node, array){
-                                               if(node.childNodes && node.childNodes.length){
-                                                       var i;
-                                                       for(i = 0; i < node.childNodes.length; i++){
-                                                               var c = node.childNodes[i];
-                                                               if(c.nodeType == 1){
-                                                                       if(dojo.withGlobal(editor.window, "inSelection", dijit._editor.selection, [c])){
-                                                                               var tag = c.tagName? c.tagName.toLowerCase(): "";
-                                                                               if(dojo.indexOf(this.values, tag) !== -1){
-                                                                                       array.push(c);
-                                                                               }
-                                                                               processChildren(c,array);
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                       });
-
-                                       var unformatNodes = dojo.hitch(this, function(nodes){
-                                               // summary:
-                                               //              Internal function to clear format nodes.
-                                               // nodes:
-                                               //              The array of nodes to strip formatting from.
-                                               if(nodes && nodes.length){
-                                                       editor.beginEditing();
-                                                       while(nodes.length){
-                                                               this._removeFormat(editor, nodes.pop());
-                                                       }
-                                                       editor.endEditing();
-                                               }
-                                       });
-
-                                       var clearNodes = [];
-                                       if(start == end){
-                                               //Contained within the same block, may be collapsed, but who cares, see if we
-                                               // have a block element to remove.
-                                               var block;
-                                               node = start;
-                                               while(node && node !== editor.editNode && node !== editor.document.body){
-                                                       if(node.nodeType == 1){
-                                                               tag = node.tagName? node.tagName.toLowerCase(): "";
-                                                               if(dojo.indexOf(this.values, tag) !== -1){
-                                                                       block = node;
-                                                                       break;
-                                                               }
-                                                       }
-                                                       node = node.parentNode;
-                                               }
-
-                                               //Also look for all child nodes in the selection that may need to be 
-                                               //cleared of formatting
-                                               processChildren(start, clearNodes);
-                                               if(block) { clearNodes = [block].concat(clearNodes); }
-                                               unformatNodes(clearNodes);
-                                       }else{
-                                               // Probably a multi select, so we have to process it.  Whee.
-                                               node = start;
-                                               while(dojo.withGlobal(editor.window, "inSelection", dijit._editor.selection, [node])){
-                                                       if(node.nodeType == 1){
-                                                               tag = node.tagName? node.tagName.toLowerCase(): "";
-                                                               if(dojo.indexOf(this.values, tag) !== -1){
-                                                                       clearNodes.push(node);
-                                                               }
-                                                               processChildren(node,clearNodes);
-                                                       }
-                                                       node = node.nextSibling;
-                                               }
-                                               unformatNodes(clearNodes);
-                                       }
-                                       editor.onDisplayChanged();
-                               }
-                       }
-               }else{
-                       editor.execCommand(command, choice);
-               }
-       },
-
-       _removeFormat: function(editor, node){
-               // summary:
-               //              function to remove the block format node.
-               // node:
-               //              The block format node to remove (and leave the contents behind)
-               if(editor.customUndo){
-                       // So of course IE doesn't work right with paste-overs.
-                       // We have to do this manually, which is okay since IE already uses
-                       // customUndo and we turned it on for WebKit.  WebKit pasted funny, 
-                       // so couldn't use the execCommand approach
-                       while(node.firstChild){
-                               dojo.place(node.firstChild, node, "before");
-                       }
-                       node.parentNode.removeChild(node);
-               }else{
-                       // Everyone else works fine this way, a paste-over and is native
-                       // undo friendly.
-                       dojo.withGlobal(editor.window, 
-                                "selectElementChildren", dijit._editor.selection, [node]);
-                       var html =      dojo.withGlobal(editor.window, 
-                                "getSelectedHtml", dijit._editor.selection, [null]);
-                       dojo.withGlobal(editor.window, 
-                                "selectElement", dijit._editor.selection, [node]);
-                       editor.execCommand("inserthtml", html||"");
-               }
-       }
-});
-
-// TODO: for 2.0, split into FontChoice plugin into three separate classes,
-// one for each command (and change registry below)
-dojo.declare("dijit._editor.plugins.FontChoice", dijit._editor._Plugin,{
-       // summary:
-       //              This plugin provides three drop downs for setting style in the editor
-       //              (font, font size, and format block), as controlled by command.
-       //
-       // description:
-       //              The commands provided by this plugin are:
-       //
-       //              * fontName
-       //      |               Provides a drop down to select from a list of font names
-       //              * fontSize
-       //      |               Provides a drop down to select from a list of font sizes
-       //              * formatBlock
-       //      |               Provides a drop down to select from a list of block styles
-       //      |
-       //
-       //              which can easily be added to an editor by including one or more of the above commands
-       //              in the `plugins` attribute as follows:
-       //
-       //      |       plugins="['fontName','fontSize',...]"
-       //
-       //              It is possible to override the default dropdown list by providing an Array for the `custom` property when
-       //              instantiating this plugin, e.g.
-       //
-       //      |       plugins="[{name:'dijit._editor.plugins.FontChoice', command:'fontName', custom:['Verdana','Myriad','Garamond']},...]"
-       //
-       //              Alternatively, for `fontName` only, `generic:true` may be specified to provide a dropdown with
-       //              [CSS generic font families](http://www.w3.org/TR/REC-CSS2/fonts.html#generic-font-families)
-       //
-       //              Note that the editor is often unable to properly handle font styling information defined outside
-       //              the context of the current editor instance, such as pre-populated HTML.
-
-       // useDefaultCommand: [protected] booleam
-       //              Override _Plugin.useDefaultCommand...
-       //              processing is handled by this plugin, not by dijit.Editor.
-       useDefaultCommand: false,
-
-       _initButton: function(){
-               // summary:
-               //              Overrides _Plugin._initButton(), to initialize the FilteringSelect+label in toolbar,
-               //              rather than a simple button.
-               // tags:
-               //              protected
-
-               // Create the widget to go into the toolbar (the so-called "button")
-               var clazz = {
-                               fontName: dijit._editor.plugins._FontNameDropDown,
-                               fontSize: dijit._editor.plugins._FontSizeDropDown,
-                               formatBlock: dijit._editor.plugins._FormatBlockDropDown
-                       }[this.command],
-               params = this.params;
-
-               // For back-compat reasons support setting custom values via "custom" parameter
-               // rather than "values" parameter
-               if(this.params.custom){
-                       params.values = this.params.custom;
-               }
-
-               var editor = this.editor;
-               this.button = new clazz(dojo.delegate({dir: editor.dir, lang: editor.lang}, params));
-
-               // Reflect changes to the drop down in the editor
-               this.connect(this.button.select, "onChange", function(choice){
-                       // User invoked change, since all internal updates set priorityChange to false and will
-                       // not trigger an onChange event.
-                       this.editor.focus();
-                       
-                       if(this.command == "fontName" && choice.indexOf(" ") != -1){ choice = "'" + choice + "'"; }
-
-                       // Invoke, the editor already normalizes commands called through its
-                       // execCommand.
-                       if(this.button._execCommand){
-                               this.button._execCommand(this.editor, this.command, choice);
-                       }else{
-                               this.editor.execCommand(this.command, choice);
-                       }
-                       
-                       // Enable custom undo for webkit, needed for noFormat to work properly
-                       // and still undo.
-                       this.editor.customUndo = this.editor.customUndo || dojo.isWebKit;
-               });
-       },
-
-       updateState: function(){
-               // summary:
-               //              Overrides _Plugin.updateState().  This controls updating the menu
-               //              options to the right values on state changes in the document (that trigger a
-               //              test of the actions.)
-               //              It set value of drop down in toolbar to reflect font/font size/format block
-               //              of text at current caret position.
-               // tags:
-               //              protected
-               var _e = this.editor;
-               var _c = this.command;
-               if(!_e || !_e.isLoaded || !_c.length){ return; }
-               if(this.button){
-                       var value;
-                       try{
-                               value = _e.queryCommandValue(_c) || "";
-                       }catch(e){
-                               //Firefox may throw error above if the editor is just loaded, ignore it
-                               value = "";
-                       }
-
-                       // strip off single quotes, if any
-                       var quoted = dojo.isString(value) && value.match(/'([^']*)'/);
-                       if(quoted){ value = quoted[1]; }
-
-                       if(_c === "formatBlock"){
-                               if(!value || value == "p"){
-                                       // Some browsers (WebKit) doesn't actually get the tag info right.
-                                       // and IE returns paragraph when in a DIV!, so incorrect a lot,
-                                       // so we have double-check it.
-                                       value = null;
-                                       var elem;
-                                       // Try to find the current element where the caret is.
-                                       var sel = dijit.range.getSelection(this.editor.window);
-                                       if(sel && sel.rangeCount > 0){
-                                               var range = sel.getRangeAt(0);
-                                               if(range){
-                                                       elem = range.endContainer;
-                                               }
-                                       }
-
-                                       // Okay, now see if we can find one of the formatting types we're in.
-                                       while(elem && elem !== _e.editNode && elem !== _e.document){
-                                               var tg = elem.tagName?elem.tagName.toLowerCase():"";
-                                               if(tg && dojo.indexOf(this.button.values, tg) > -1){
-                                                       value = tg;
-                                                       break;
-                                               }
-                                               elem = elem.parentNode;
-                                       }
-                                       if(!value){
-                                               // Still no value, so lets select 'none'.
-                                               value = "noFormat";
-                                       }
-                               }else{
-                                       // Check that the block format is one allowed, if not,
-                                       // null it so that it gets set to empty.
-                                       if(dojo.indexOf(this.button.values, value) < 0){
-                                               value = "noFormat";
-                                       }
-                               }
-                       }
-                       if(value !== this.button.get("value")){
-                               // Set the value, but denote it is not a priority change, so no
-                               // onchange fires.
-                               this.button.set('value', value, false);
-                       }
-               }
-       }
-});
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-       if(o.plugin){ return; }
-       switch(o.args.name){
-       case "fontName": case "fontSize": case "formatBlock":
-               o.plugin = new dijit._editor.plugins.FontChoice({
-                       command: o.args.name,
-                       plainText: o.args.plainText?o.args.plainText:false
-               });
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.form._FormSelectWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form._FormSelectWidget"] = true;
-dojo.provide("dijit.form._FormSelectWidget");
-
-
-
-
-/*=====
-dijit.form.__SelectOption = function(){
-       // value: String
-       //              The value of the option.  Setting to empty (or missing) will
-       //              place a separator at that location
-       // label: String
-       //              The label for our option.  It can contain html tags.
-       //  selected: Boolean
-       //              Whether or not we are a selected option
-       // disabled: Boolean
-       //              Whether or not this specific option is disabled
-       this.value = value;
-       this.label = label;
-       this.selected = selected;
-       this.disabled = disabled;
-}
-=====*/
-
-dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
-       // summary:
-       //              Extends _FormValueWidget in order to provide "select-specific"
-       //              values - i.e., those values that are unique to <select> elements.
-       //              This also provides the mechanism for reading the elements from
-       //              a store, if desired.
-
-       // multiple: Boolean
-       //              Whether or not we are multi-valued
-       multiple: false,
-
-       // options: dijit.form.__SelectOption[]
-       //              The set of options for our select item.  Roughly corresponds to
-       //      the html <option> tag.
-       options: null,
-
-       // store: dojo.data.api.Identity
-       //              A store which, at the very least impelements dojo.data.api.Identity
-       //              to use for getting our list of options - rather than reading them
-       //              from the <option> html tags.
-       store: null,
-
-       // query: object
-       //              A query to use when fetching items from our store
-       query: null,
-
-       // queryOptions: object
-       //              Query options to use when fetching from the store
-       queryOptions: null,
-
-       // onFetch: Function
-       //              A callback to do with an onFetch - but before any items are actually
-       //              iterated over (i.e. to filter even futher what you want to add)
-       onFetch: null,
-
-       // sortByLabel: boolean
-       //              Flag to sort the options returned from a store by the label of
-       //              the store.
-       sortByLabel: true,
-
-
-       // loadChildrenOnOpen: boolean
-       //              By default loadChildren is called when the items are fetched from the
-       //              store.  This property allows delaying loadChildren (and the creation
-       //              of the options/menuitems) until the user opens the click the button.
-       //              dropdown
-       loadChildrenOnOpen: false,
-
-       getOptions: function(/* anything */ valueOrIdx){
-               // summary:
-               //              Returns a given option (or options).
-               // valueOrIdx:
-               //              If passed in as a string, that string is used to look up the option
-               //              in the array of options - based on the value property.
-               //              (See dijit.form.__SelectOption).
-               //
-               //              If passed in a number, then the option with the given index (0-based)
-               //              within this select will be returned.
-               //
-               //              If passed in a dijit.form.__SelectOption, the same option will be
-               //              returned if and only if it exists within this select.
-               //
-               //              If passed an array, then an array will be returned with each element
-               //              in the array being looked up.
-               //
-               //              If not passed a value, then all options will be returned
-               //
-               // returns:
-               //              The option corresponding with the given value or index.  null
-               //              is returned if any of the following are true:
-               //                      - A string value is passed in which doesn't exist
-               //                      - An index is passed in which is outside the bounds of the array of options
-               //                      - A dijit.form.__SelectOption is passed in which is not a part of the select
-
-               // NOTE: the compare for passing in a dijit.form.__SelectOption checks
-               //              if the value property matches - NOT if the exact option exists
-               // NOTE: if passing in an array, null elements will be placed in the returned
-               //              array when a value is not found.
-               var lookupValue = valueOrIdx, opts = this.options || [], l = opts.length;
-
-               if(lookupValue === undefined){
-                       return opts; // dijit.form.__SelectOption[]
-               }
-               if(dojo.isArray(lookupValue)){
-                       return dojo.map(lookupValue, "return this.getOptions(item);", this); // dijit.form.__SelectOption[]
-               }
-               if(dojo.isObject(valueOrIdx)){
-                       // We were passed an option - so see if it's in our array (directly),
-                       // and if it's not, try and find it by value.
-                       if(!dojo.some(this.options, function(o, idx){
-                               if(o === lookupValue ||
-                                       (o.value && o.value === lookupValue.value)){
-                                       lookupValue = idx;
-                                       return true;
-                               }
-                               return false;
-                       })){
-                               lookupValue = -1;
-                       }
-               }
-               if(typeof lookupValue == "string"){
-                       for(var i=0; i<l; i++){
-                               if(opts[i].value === lookupValue){
-                                       lookupValue = i;
-                                       break;
-                               }
-                       }
-               }
-               if(typeof lookupValue == "number" && lookupValue >= 0 && lookupValue < l){
-                       return this.options[lookupValue] // dijit.form.__SelectOption
-               }
-               return null; // null
-       },
-
-       addOption: function(/* dijit.form.__SelectOption, dijit.form.__SelectOption[] */ option){
-               // summary:
-               //              Adds an option or options to the end of the select.  If value
-               //              of the option is empty or missing, a separator is created instead.
-               //              Passing in an array of options will yield slightly better performance
-               //              since the children are only loaded once.
-               if(!dojo.isArray(option)){ option = [option]; }
-               dojo.forEach(option, function(i){
-                       if(i && dojo.isObject(i)){
-                               this.options.push(i);
-                       }
-               }, this);
-               this._loadChildren();
-       },
-
-       removeOption: function(/* string, dijit.form.__SelectOption, number, or array */ valueOrIdx){
-               // summary:
-               //              Removes the given option or options.  You can remove by string
-               //              (in which case the value is removed), number (in which case the
-               //              index in the options array is removed), or select option (in
-               //              which case, the select option with a matching value is removed).
-               //              You can also pass in an array of those values for a slightly
-               //              better performance since the children are only loaded once.
-               if(!dojo.isArray(valueOrIdx)){ valueOrIdx = [valueOrIdx]; }
-               var oldOpts = this.getOptions(valueOrIdx);
-               dojo.forEach(oldOpts, function(i){
-                       // We can get null back in our array - if our option was not found.  In
-                       // that case, we don't want to blow up...
-                       if(i){
-                               this.options = dojo.filter(this.options, function(node, idx){
-                                       return (node.value !== i.value);
-                               });
-                               this._removeOptionItem(i);
-                       }
-               }, this);
-               this._loadChildren();
-       },
-
-       updateOption: function(/* dijit.form.__SelectOption, dijit.form.__SelectOption[] */ newOption){
-               // summary:
-               //              Updates the values of the given option.  The option to update
-               //              is matched based on the value of the entered option.  Passing
-               //              in an array of new options will yeild better performance since
-               //              the children will only be loaded once.
-               if(!dojo.isArray(newOption)){ newOption = [newOption]; }
-               dojo.forEach(newOption, function(i){
-                       var oldOpt = this.getOptions(i), k;
-                       if(oldOpt){
-                               for(k in i){ oldOpt[k] = i[k]; }
-                       }
-               }, this);
-               this._loadChildren();
-       },
-
-       setStore: function(/* dojo.data.api.Identity */ store,
-                                               /* anything? */ selectedValue,
-                                               /* Object? */ fetchArgs){
-               // summary:
-               //              Sets the store you would like to use with this select widget.
-               //              The selected value is the value of the new store to set.  This
-               //              function returns the original store, in case you want to reuse
-               //              it or something.
-               // store: dojo.data.api.Identity
-               //              The store you would like to use - it MUST implement Identity,
-               //              and MAY implement Notification.
-               // selectedValue: anything?
-               //              The value that this widget should set itself to *after* the store
-               //              has been loaded
-               // fetchArgs: Object?
-               //              The arguments that will be passed to the store's fetch() function
-               var oStore = this.store;
-               fetchArgs = fetchArgs || {};
-               if(oStore !== store){
-                       // Our store has changed, so update our notifications
-                       dojo.forEach(this._notifyConnections || [], dojo.disconnect);
-                       delete this._notifyConnections;
-                       if(store && store.getFeatures()["dojo.data.api.Notification"]){
-                               this._notifyConnections = [
-                                       dojo.connect(store, "onNew", this, "_onNewItem"),
-                                       dojo.connect(store, "onDelete", this, "_onDeleteItem"),
-                                       dojo.connect(store, "onSet", this, "_onSetItem")
-                               ];
-                       }
-                       this.store = store;
-               }
-
-               // Turn off change notifications while we make all these changes
-               this._onChangeActive = false;
-
-               // Remove existing options (if there are any)
-               if(this.options && this.options.length){
-                       this.removeOption(this.options);
-               }
-
-               // Add our new options
-               if(store){
-                       var cb = function(items){
-                               if(this.sortByLabel && !fetchArgs.sort && items.length){
-                                       items.sort(dojo.data.util.sorter.createSortFunction([{
-                                               attribute: store.getLabelAttributes(items[0])[0]
-                                       }], store));
-                               }
-
-                               if(fetchArgs.onFetch){
-                                       items = fetchArgs.onFetch(items);
-                               }
-                               // TODO: Add these guys as a batch, instead of separately
-                               dojo.forEach(items, function(i){
-                                       this._addOptionForItem(i);
-                               }, this);
-
-                               // Set our value (which might be undefined), and then tweak
-                               // it to send a change event with the real value
-                               this._loadingStore = false;
-                               this.set("value", (("_pendingValue" in this) ? this._pendingValue : selectedValue));
-                               delete this._pendingValue;
-
-                               if(!this.loadChildrenOnOpen){
-                                       this._loadChildren();
-                               }else{
-                                       this._pseudoLoadChildren(items);
-                               }
-                               this._fetchedWith = opts;
-                               this._lastValueReported = this.multiple ? [] : null;
-                               this._onChangeActive = true;
-                               this.onSetStore();
-                               this._handleOnChange(this.value);
-                       };
-                       var opts = dojo.mixin({onComplete:cb, scope: this}, fetchArgs);
-                       this._loadingStore = true;
-                       store.fetch(opts);
-               }else{
-                       delete this._fetchedWith;
-               }
-               return oStore;  // dojo.data.api.Identity
-       },
-
-       _setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
-               // summary:
-               //              set the value of the widget.
-               //              If a string is passed, then we set our value from looking it up.
-               if(this._loadingStore){
-                       // Our store is loading - so save our value, and we'll set it when
-                       // we're done
-                       this._pendingValue = newValue;
-                       return;
-               }
-               var opts = this.getOptions() || [];
-               if(!dojo.isArray(newValue)){
-                       newValue = [newValue];
-               }
-               dojo.forEach(newValue, function(i, idx){
-                       if(!dojo.isObject(i)){
-                               i = i + "";
-                       }
-                       if(typeof i === "string"){
-                               newValue[idx] = dojo.filter(opts, function(node){
-                                       return node.value === i;
-                               })[0] || {value: "", label: ""};
-                       }
-               }, this);
-
-               // Make sure some sane default is set
-               newValue = dojo.filter(newValue, function(i){ return i && i.value; });
-               if(!this.multiple && (!newValue[0] || !newValue[0].value) && opts.length){
-                       newValue[0] = opts[0];
-               }
-               dojo.forEach(opts, function(i){
-                       i.selected = dojo.some(newValue, function(v){ return v.value === i.value; });
-               });
-               var val = dojo.map(newValue, function(i){ return i.value; }),
-                       disp = dojo.map(newValue, function(i){ return i.label; });
-
-               this.value = this.multiple ? val : val[0];
-               this._setDisplay(this.multiple ? disp : disp[0]);
-               this._updateSelection();
-               this._handleOnChange(this.value, priorityChange);
-       },
-
-       _getDisplayedValueAttr: function(){
-               // summary:
-               //              returns the displayed value of the widget
-               var val = this.get("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, // remove when _FormWidget:getValue is removed
-       getValue: function(){
-               // summary:
-               //              get the value of the widget.
-               return this._lastValue;
-       },
-
-       undo: function(){
-               // summary:
-               //              restore the value to the last value passed to onChange
-               this._setValueAttr(this._lastValueReported, false);
-       },
-
-       _loadChildren: function(){
-               // summary:
-               //              Loads the children represented by this widget's options.
-               //              reset the menu to make it "populatable on the next click
-               if(this._loadingStore){ return; }
-               dojo.forEach(this._getChildren(), function(child){
-                       child.destroyRecursive();
-               });
-               // Add each menu item
-               dojo.forEach(this.options, this._addOptionItem, this);
-
-               // Update states
-               this._updateSelection();
-       },
-
-       _updateSelection: function(){
-               // summary:
-               //              Sets the "selected" class on the item for styling purposes
-               this.value = this._getValueFromOpts();
-               var val = this.value;
-               if(!dojo.isArray(val)){
-                       val = [val];
-               }
-               if(val && val[0]){
-                       dojo.forEach(this._getChildren(), function(child){
-                               var isSelected = dojo.some(val, function(v){
-                                       return child.option && (v === child.option.value);
-                               });
-                               dojo.toggleClass(child.domNode, this.baseClass + "SelectedOption", isSelected);
-                               dijit.setWaiState(child.domNode, "selected", isSelected);
-                       }, this);
-               }
-               this._handleOnChange(this.value);
-       },
-
-       _getValueFromOpts: function(){
-               // summary:
-               //              Returns the value of the widget by reading the options for
-               //              the selected flag
-               var opts = this.getOptions() || [];
-               if(!this.multiple && opts.length){
-                       // Mirror what a select does - choose the first one
-                       var opt = dojo.filter(opts, function(i){
-                               return i.selected;
-                       })[0];
-                       if(opt && opt.value){
-                               return opt.value
-                       }else{
-                               opts[0].selected = true;
-                               return opts[0].value;
-                       }
-               }else if(this.multiple){
-                       // Set value to be the sum of all selected
-                       return dojo.map(dojo.filter(opts, function(i){
-                               return i.selected;
-                       }), function(i){
-                               return i.value;
-                       }) || [];
-               }
-               return "";
-       },
-
-       // Internal functions to call when we have store notifications come in
-       _onNewItem: function(/* item */ item, /* Object? */ parentInfo){
-               if(!parentInfo || !parentInfo.parent){
-                       // Only add it if we are top-level
-                       this._addOptionForItem(item);
-               }
-       },
-       _onDeleteItem: function(/* item */ item){
-               var store = this.store;
-               this.removeOption(store.getIdentity(item));
-       },
-       _onSetItem: function(/* item */ item){
-               this.updateOption(this._getOptionObjForItem(item));
-       },
-
-       _getOptionObjForItem: function(item){
-               // summary:
-               //              Returns an option object based off the given item.  The "value"
-               //              of the option item will be the identity of the item, the "label"
-               //              of the option will be the label of the item.  If the item contains
-               //              children, the children value of the item will be set
-               var store = this.store, label = store.getLabel(item),
-                       value = (label ? store.getIdentity(item) : null);
-               return {value: value, label: label, item:item}; // dijit.form.__SelectOption
-       },
-
-       _addOptionForItem: function(/* item */ item){
-               // summary:
-               //              Creates (and adds) the option for the given item
-               var store = this.store;
-               if(!store.isItemLoaded(item)){
-                       // We are not loaded - so let's load it and add later
-                       store.loadItem({item: item, onComplete: function(i){
-                               this._addOptionForItem(item);
-                       },
-                       scope: this});
-                       return;
-               }
-               var newOpt = this._getOptionObjForItem(item);
-               this.addOption(newOpt);
-       },
-
-       constructor: function(/* Object */ keywordArgs){
-               // summary:
-               //              Saves off our value, if we have an initial one set so we
-               //              can use it if we have a store as well (see startup())
-               this._oValue = (keywordArgs || {}).value || null;
-       },
-
-       _fillContent: function(){
-               // summary:
-               //              Loads our options and sets up our dropdown correctly.  We
-               //              don't want any content, so we don't call any inherit chain
-               //              function.
-               var opts = this.options;
-               if(!opts){
-                       opts = this.options = this.srcNodeRef ? dojo.query(">",
-                                               this.srcNodeRef).map(function(node){
-                                                       if(node.getAttribute("type") === "separator"){
-                                                               return { value: "", label: "", selected: false, disabled: false };
-                                                       }
-                                                       return { value: node.getAttribute("value"),
-                                                                               label: String(node.innerHTML),
-                                                                               selected: node.getAttribute("selected") || false,
-                                                                               disabled: node.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(){
-               // summary:
-               //              sets up our event handling that we need for functioning
-               //              as a select
-               dojo.setSelectable(this.focusNode, false);
-               this.inherited(arguments);
-
-               // Make our event connections for updating state
-               this.connect(this, "onChange", "_updateSelection");
-               this.connect(this, "startup", "_loadChildren");
-
-               this._setValueAttr(this.value, null);
-       },
-
-       startup: function(){
-               // summary:
-               //              Connects in our store, if we have one defined
-               this.inherited(arguments);
-               var store = this.store, fetchArgs = {};
-               dojo.forEach(["query", "queryOptions", "onFetch"], function(i){
-                       if(this[i]){
-                               fetchArgs[i] = this[i];
-                       }
-                       delete this[i];
-               }, this);
-               if(store && store.getFeatures()["dojo.data.api.Identity"]){
-                       // Temporarily set our store to null so that it will get set
-                       // and connected appropriately
-                       this.store = null;
-                       this.setStore(store, this._oValue, fetchArgs);
-               }
-       },
-
-       destroy: function(){
-               // summary:
-               //              Clean up our connections
-               dojo.forEach(this._notifyConnections || [], dojo.disconnect);
-               this.inherited(arguments);
-       },
-
-       _addOptionItem: function(/* dijit.form.__SelectOption */ option){
-               // summary:
-               //              User-overridable function which, for the given option, adds an
-               //              item to the select.  If the option doesn't have a value, then a
-               //              separator is added in that place.  Make sure to store the option
-               //              in the created option widget.
-       },
-
-       _removeOptionItem: function(/* dijit.form.__SelectOption */ option){
-               // summary:
-               //              User-overridable function which, for the given option, removes
-               //              its item from the select.
-       },
-
-       _setDisplay: function(/*String or String[]*/ newDisplay){
-               // summary:
-               //              Overridable function which will set the display for the
-               //              widget.  newDisplay is either a string (in the case of
-               //              single selects) or array of strings (in the case of multi-selects)
-       },
-
-       _getChildren: function(){
-               // summary:
-               //              Overridable function to return the children that this widget contains.
-               return [];
-       },
-
-       _getSelectedOptionsAttr: function(){
-               // summary:
-               //              hooks into this.attr to provide a mechanism for getting the
-               //              option items for the current value of the widget.
-               return this.getOptions(this.get("value"));
-       },
-
-       _pseudoLoadChildren: function(/* item[] */ items){
-               // summary:
-               //              a function that will "fake" loading children, if needed, and
-               //              if we have set to not load children until the widget opens.
-               // items:
-               //              An array of items that will be loaded, when needed
-       },
-
-       onSetStore: function(){
-               // summary:
-               //              a function that can be connected to in order to receive a
-               //              notification that the store has finished loading and all options
-               //              from that store are available
-       }
-});
-
-}
-
-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, dijit._CssStateMixin],
-               {
-               // 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 dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon 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" }
-               }),
-
-               baseClass: "dijitMenuItem",
-
-               // 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.set('label', source.innerHTML);
-                       }
-               },
-
-               postCreate: function(){
-                       this.inherited(arguments);
-                       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
-                       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
-                       this.getParent().onItemUnhover(this);
-
-                       // _onUnhover() is called when the menu is hidden (collapsed), due to clicking
-                       // a MenuItem and having it execut.  When that happens, FF and IE don't generate
-                       // an onmouseout event for the MenuItem, so give _CssStateMixin some help
-                       this._hovering = false;
-                       this._setStateClass();
-               },
-
-               _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 set('label', ...) instead.
-                       // tags:
-                       //              deprecated
-                       dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use set('label', ...) instead.", "", "2.0");
-                       this.set("label", content);
-               },
-
-               setDisabled: function(/*Boolean*/ disabled){
-                       // summary:
-                       //              Deprecated.   Use set('disabled', bool) instead.
-                       // tags:
-                       //              deprecated
-                       dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.", "", "2.0");
-                       this.set('disabled', disabled);
-               },
-               _setDisabledAttr: function(/*Boolean*/ value){
-                       // summary:
-                       //              Hook for attr('disabled', ...) to work.
-                       //              Enable or disable this menu item.
-                       this.disabled = value;
-                       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.startup();
-
-                       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 dijitMenuItemIconCell\" 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\">&nbsp;</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.set("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 class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></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
-
-               // 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.disabled){ return false; }
-
-               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\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),
-
-       baseClass: "dijitMenu",
-
-       // 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,
-
-       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 = dojo.window.get(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
-               // On linux Shift-F10 produces the oncontextmenu event, but on Windows it doesn't, so
-               // we need to monitor keyboard events in addition to the oncontextmenu event.
-               var doConnects = dojo.hitch(this, function(cn){
-                       return [
-                               // TODO: when leftClickToOpen is true then shouldn't space/enter key trigger the menu,
-                               // rather than shift-F10?
-                               dojo.connect(cn, this.leftClickToOpen ? "onclick" : "oncontextmenu", this, function(evt){
-                                       // Schedule context menu to be opened unless it's already been scheduled from onkeydown handler
-                                       dojo.stopEvent(evt);
-                                       this._scheduleOpen(evt.target, iframe, {x: evt.pageX, y: evt.pageY});
-                               }),
-                               dojo.connect(cn, "onkeydown", this, function(evt){
-                                       if(evt.shiftKey && evt.keyCode == dojo.keys.F10){
-                                               dojo.stopEvent(evt);
-                                               this._scheduleOpen(evt.target, iframe); // no coords - open near target node
-                                       }
-                               })
-                       ];      
-               });
-               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];
-               }
-       },
-
-       _scheduleOpen: function(/*DomNode?*/ target, /*DomNode?*/ iframe, /*Object?*/ coords){
-               // summary:
-               //              Set timer to display myself.  Using a timer rather than displaying immediately solves
-               //              two problems:
-               //
-               //              1. IE: without the delay, focus work in "open" causes the system
-               //              context menu to appear in spite of stopEvent.
-               //
-               //              2. Avoid double-shows on linux, where shift-F10 generates an oncontextmenu event
-               //              even after a dojo.stopEvent(e).  (Shift-F10 on windows doesn't generate the
-               //              oncontextmenu event.)
-
-               if(!this._openTimer){
-                       this._openTimer = setTimeout(dojo.hitch(this, function(){
-                               delete this._openTimer;
-                               this._openMyself({
-                                       target: target,
-                                       iframe: iframe,
-                                       coords: coords
-                               });
-                       }), 1);
-               }
-       },
-
-       _openMyself: function(args){
-               // summary:
-               //              Internal function for opening myself when the user does a right-click or something similar.
-               // args:
-               //              This is an Object containing:
-               //              * target:
-               //                      The node that is being clicked
-               //              * iframe:
-               //                      If an <iframe> is being clicked, iframe points to that iframe
-               //              * coords:
-               //                      Put menu at specified x/y position in viewport, or if iframe is
-               //                      specified, then relative to iframe.
-               //
-               //              _openMyself() formerly took the event object, and since various code references
-               //              evt.target (after connecting to _openMyself()), using an Object for parameters
-               //              (so that old code still works).
-
-               var target = args.target,
-                       iframe = args.iframe,
-                       coords = args.coords;
-
-               // Get coordinates to open menu, either at specified (mouse) position or (if triggered via keyboard)
-               // then near the node the menu is assigned to.
-               if(coords){
-                       if(iframe){
-                               // Specified coordinates are on <body> node of an <iframe>, convert to match main document
-                               var od = 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);
-
-                               coords.x += ifc.x + left - scroll.x;
-                               coords.y += ifc.y + top - scroll.y;
-                       }
-               }else{
-                       coords = dojo.position(target, true);
-                       coords.x += 10;
-                       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: coords.x,
-                       y: coords.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["dijit.form.Select"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.Select"] = true;
-dojo.provide("dijit.form.Select");
-
-
-
-
-
-
-
-
-dojo.declare("dijit.form._SelectMenu", dijit.Menu, {
-       // summary:
-       //              An internally-used menu for dropdown that allows us a vertical scrollbar
-       buildRendering: function(){
-               // summary:
-               //              Stub in our own changes, so that our domNode is not a table
-               //              otherwise, we won't respond correctly to heights/overflows
-               this.inherited(arguments);
-               var o = (this.menuTableNode = this.domNode);
-               var n = (this.domNode = dojo.create("div", {style: {overflowX: "hidden", overflowY: "scroll"}}));
-               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);
-       },
-       resize: function(/*Object*/ mb){
-               // summary:
-               //              Overridden so that we are able to handle resizing our
-               //              internal widget.  Note that this is not a "full" resize
-               //              implementation - it only works correctly if you pass it a
-               //              marginBox.
-               //
-               // mb: Object
-               //              The margin box to set this dropdown to.
-               if(mb){
-                       dojo.marginBox(this.domNode, mb);
-                       if("w" in mb){
-                               // We've explicitly set the wrapper <div>'s width, so set <table> width to match.
-                               // 100% is safer than a pixel value because there may be a scroll bar with
-                               // browser/OS specific width.
-                               this.menuTableNode.style.width = "100%";
-                       }
-               }
-       }
-});
-
-dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropDown], {
-       // summary:
-       //              This is a "styleable" select box - it is basically a DropDownButton which
-       //              can take a <select> as its input.
-
-       baseClass: "dijitSelect",
-
-       templateString: dojo.cache("dijit.form", "templates/Select.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\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\"></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: Object
-       //              Add in our style to be applied to the focus node
-       attributeMap: dojo.mixin(dojo.clone(dijit.form._FormSelectWidget.prototype.attributeMap),{style:"tableNode"}),
-
-       // required: Boolean
-       //              Can be true or false, default is false.
-       required: false,
-
-       // state: String
-       //              Shows current state (ie, validation result) of input (Normal, Warning, or Error)
-       state: "",
-
-       //      tooltipPosition: String[]
-       //              See description of dijit.Tooltip.defaultPosition for details on this parameter.
-       tooltipPosition: [],
-
-       // emptyLabel: string
-       //              What to display in an "empty" dropdown
-       emptyLabel: "",
-
-       // _isLoaded: Boolean
-       //              Whether or not we have been loaded
-       _isLoaded: false,
-
-       // _childrenLoaded: Boolean
-       //              Whether or not our children have been loaded
-       _childrenLoaded: false,
-
-       _fillContent: function(){
-               // summary:
-               //              Set the value to be the first, or the selected index
-               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;
-               }
-
-               // Create the dropDown widget
-               this.dropDown = new dijit.form._SelectMenu({id: this.id + "_menu"});
-               dojo.addClass(this.dropDown.domNode, this.baseClass + "Menu");
-       },
-
-       _getMenuItemForOption: function(/*dijit.form.__SelectOption*/ option){
-               // summary:
-               //              For the given option, return the menu item that should be
-               //              used to display it.  This can be overridden as needed
-               if(!option.value){
-                       // We are a separator (no label set for it)
-                       return new dijit.MenuSeparator();
-               }else{
-                       // Just a regular menu option
-                       var click = dojo.hitch(this, "_setValueAttr", option);
-                       var item = new dijit.MenuItem({
-                               option: option,
-                               label: option.label,
-                               onClick: click,
-                               disabled: option.disabled || false
-                       });
-                       dijit.setWaiRole(item.focusNode, "listitem");
-                       return item;
-               }
-       },
-
-       _addOptionItem: function(/*dijit.form.__SelectOption*/ option){
-               // summary:
-               //              For the given option, add an option to our dropdown.
-               //              If the option doesn't have a value, then a separator is added
-               //              in that place.
-               if(this.dropDown){
-                       this.dropDown.addChild(this._getMenuItemForOption(option));
-               }
-       },
-
-       _getChildren: function(){
-               if(!this.dropDown){
-                       return [];
-               }
-               return this.dropDown.getChildren();
-       },
-
-       _loadChildren: function(/*Boolean*/ loadMenuItems){
-               // summary:
-               //              Resets the menu and the length attribute of the button - and
-               //              ensures that the label is appropriately set.
-               //      loadMenuItems: Boolean
-               //              actually loads the child menu items - we only do this when we are
-               //              populating for showing the dropdown.
-
-               if(loadMenuItems === true){
-                       // this.inherited destroys this.dropDown's child widgets (MenuItems).
-                       // Avoid this.dropDown (Menu widget) having a pointer to a destroyed widget (which will cause
-                       // issues later in _setSelected). (see #10296)
-                       if(this.dropDown){
-                               delete this.dropDown.focusedChild;
-                       }
-                       if(this.options.length){
-                               this.inherited(arguments);
-                       }else{
-                               // Drop down menu is blank but add one blank entry just so something appears on the screen
-                               // to let users know that they are no choices (mimicing native select behavior)
-                               dojo.forEach(this._getChildren(), function(child){ child.destroyRecursive(); });
-                               var item = new dijit.MenuItem({label: "&nbsp;"});
-                               this.dropDown.addChild(item);
-                       }
-               }else{
-                       this._updateSelection();
-               }
-
-               var len = this.options.length;
-               this._isLoaded = false;
-               this._childrenLoaded = true;
-
-               if(!this._loadingStore){
-                       // Don't call this if we are loading - since we will handle it later
-                       this._setValueAttr(this.value);
-               }
-       },
-
-       _setValueAttr: function(value){
-               this.inherited(arguments);
-               dojo.attr(this.valueNode, "value", this.get("value"));
-       },
-
-       _setDisplay: function(/*String*/ newDisplay){
-               // summary:
-               //              sets the display for the given value (or values)
-               this.containerNode.innerHTML = '<span class="dijitReset dijitInline ' + this.baseClass + 'Label">' +
-                                       (newDisplay || this.emptyLabel || "&nbsp;") +
-                                       '</span>';
-               dijit.setWaiState(this.focusNode, "valuetext", (newDisplay || this.emptyLabel || "&nbsp;") );
-       },
-
-       validate: function(/*Boolean*/ isFocused){
-               // summary:
-               //              Called by oninit, onblur, and onkeypress.
-               // description:
-               //              Show missing or invalid messages if appropriate, and highlight textbox field.
-               //              Used when a select is initially set to no value and the user is required to
-               //              set the value.
-               
-               var isValid = this.isValid(isFocused);
-               this.state = isValid ? "" : "Error";
-               this._setStateClass();
-               dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
-               var message = isValid ? "" : this._missingMsg;
-               if(this._message !== message){
-                       this._message = message;
-                       dijit.hideTooltip(this.domNode);
-                       if(message){
-                               dijit.showTooltip(message, this.domNode, this.tooltipPosition, !this.isLeftToRight());
-                       }
-               }
-               return isValid;
-       },
-
-       isValid: function(/*Boolean*/ isFocused){
-               // summary:
-               //              Whether or not this is a valid value.   The only way a Select
-               //              can be invalid is when it's required but nothing is selected.
-               return (!this.required || !(/^\s*$/.test(this.value)));
-       },
-
-       reset: function(){
-               // summary:
-               //              Overridden so that the state will be cleared.
-               this.inherited(arguments);
-               dijit.hideTooltip(this.domNode);
-               this.state = "";
-               this._setStateClass();
-               delete this._message;
-       },
-
-       postMixInProperties: function(){
-               // summary:
-               //              set the missing message
-               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(/*Function*/ loadCallback){
-               // summary:
-               //              populates the menu
-               this._loadChildren(true);
-               this._isLoaded = true;
-               loadCallback();
-       },
-
-       closeDropDown: function(){
-               // overriding _HasDropDown.closeDropDown()
-               this.inherited(arguments);
-
-               if(this.dropDown && this.dropDown.menuTableNode){
-                       // Erase possible width: 100% setting from _SelectMenu.resize().
-                       // Leaving it would interfere with the next openDropDown() call, which
-                       // queries the natural size of the drop down.
-                       this.dropDown.menuTableNode.style.width = "";
-               }
-       },
-
-       uninitialize: function(preserveDom){
-               if(this.dropDown && !this.dropDown._destroyed){
-                       this.dropDown.destroyRecursive(preserveDom);
-                       delete this.dropDown;
-               }
-               this.inherited(arguments);
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit._editor.plugins.LinkDialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._editor.plugins.LinkDialog"] = true;
-dojo.provide("dijit._editor.plugins.LinkDialog");
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-dojo.declare("dijit._editor.plugins.LinkDialog", dijit._editor._Plugin, {
-       // summary:
-       //              This plugin provides the basis for an 'anchor' (link) dialog and an extension of it
-       //              provides the image link dialog.
-       //
-       // description:
-       //              The command provided by this plugin is:
-       //              * createLink
-
-       // Override _Plugin.buttonClass.   This plugin is controlled by a DropDownButton
-       // (which triggers a TooltipDialog).
-       buttonClass: dijit.form.DropDownButton,
-
-       // Override _Plugin.useDefaultCommand... processing is handled by this plugin, not by dijit.Editor.
-       useDefaultCommand: false,
-
-       // urlRegExp: [protected] String
-       //              Used for validating input as correct URL.  While file:// urls are not terribly
-       //              useful, they are technically valid.
-       urlRegExp: "((https?|ftps?|file)\\://|\./|/|)(/[a-zA-Z]{1,1}:/|)(((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)*(?:[a-zA-Z](?:[-\\da-zA-Z]{0,80}[\\da-zA-Z])?)\\.?)|(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])|(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]|(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]|(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])|0[xX]0*[\\da-fA-F]{1,8}|([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}|([\\da-fA-F]{1,4}\\:){6}((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])))(\\:\\d+)?(/(?:[^?#\\s/]+/)*(?:[^?#\\s/]+(?:\\?[^?#\\s/]*)?(?:#.*)?)?)?",
-
-       // emailRegExp: [protected] String
-       //              Used for validating input as correct email address.  Taken from dojox.validate
-       emailRegExp:  "<?(mailto\\:)([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+" /*username*/ + "@" +  
-        "((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)+(?:[a-zA-Z](?:[-\\da-zA-Z]{0,6}[\\da-zA-Z])?)\\.?)|localhost|^[^-][a-zA-Z0-9_-]*>?",        // host.
-
-       // htmlTemplate: [protected] String
-       //              String used for templating the HTML to insert at the desired point.
-       htmlTemplate: "<a href=\"${urlInput}\" _djrealurl=\"${urlInput}\"" +
-               " target=\"${targetSelect}\"" +
-               ">${textInput}</a>",
-
-       // tag: [protected] String
-       //              Tag used for the link type.
-       tag: "a",
-
-       // _hostRxp [private] RegExp
-       //              Regular expression used to validate url fragments (ip address, hostname, etc)
-       _hostRxp:  new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),
-
-       // _userAtRxp [private] RegExp
-       //              Regular expression used to validate e-mail address fragment.
-       _userAtRxp: new RegExp("^([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+@", "i"),
-
-       // linkDialogTemplate: [protected] String
-       //              Template for contents of TooltipDialog to pick URL
-       linkDialogTemplate: [
-               "<table><tr><td>",
-               "<label for='${id}_urlInput'>${url}</label>",
-               "</td><td>",
-               "<input dojoType='dijit.form.ValidationTextBox' required='true' " +
-               "id='${id}_urlInput' name='urlInput' intermediateChanges='true'>",
-               "</td></tr><tr><td>",
-               "<label for='${id}_textInput'>${text}</label>",
-               "</td><td>",
-               "<input dojoType='dijit.form.ValidationTextBox' required='true' id='${id}_textInput' " +
-               "name='textInput' intermediateChanges='true'>",
-               "</td></tr><tr><td>",
-               "<label for='${id}_targetSelect'>${target}</label>",
-               "</td><td>",
-               "<select id='${id}_targetSelect' name='targetSelect' dojoType='dijit.form.Select'>",
-               "<option selected='selected' value='_self'>${currentWindow}</option>",
-               "<option value='_blank'>${newWindow}</option>",
-               "<option value='_top'>${topWindow}</option>",
-               "<option value='_parent'>${parentWindow}</option>",
-               "</select>",
-               "</td></tr><tr><td colspan='2'>",
-               "<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>",
-               "<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>",
-               "</td></tr></table>"
-       ].join(""),
-
-       _initButton: function(){
-               // Override _Plugin._initButton() to initialize DropDownButton and TooltipDialog.
-               var _this = this;
-               this.tag = this.command == 'insertImage' ? 'img' : 'a';
-               var messages = dojo.mixin(dojo.i18n.getLocalization("dijit", "common", this.lang),
-                       dojo.i18n.getLocalization("dijit._editor", "LinkDialog", this.lang));
-               var dropDown = (this.dropDown = new dijit.TooltipDialog({
-                       title: messages[this.command + "Title"],
-                       execute: dojo.hitch(this, "setValue"),
-                       onOpen: function(){
-                               _this._onOpenDialog();
-                               dijit.TooltipDialog.prototype.onOpen.apply(this, arguments);
-                       },
-                       onCancel: function(){
-                               setTimeout(dojo.hitch(_this, "_onCloseDialog"),0);
-                       }
-               }));
-               messages.urlRegExp = this.urlRegExp;
-               messages.id = dijit.getUniqueId(this.editor.id);
-               this._uniqueId = messages.id;
-               this._setContent(dropDown.title +
-                       "<div style='border-bottom: 1px black solid;padding-bottom:2pt;margin-bottom:4pt'></div>" +
-                       dojo.string.substitute(this.linkDialogTemplate, messages));
-               dropDown.startup();
-               this._urlInput = dijit.byId(this._uniqueId + "_urlInput");
-               this._textInput = dijit.byId(this._uniqueId + "_textInput");
-               this._setButton = dijit.byId(this._uniqueId + "_setButton");
-               this.connect(dijit.byId(this._uniqueId + "_cancelButton"), "onClick", function(){
-                       this.dropDown.onCancel();
-               });
-               if(this._urlInput){
-                       this.connect(this._urlInput, "onChange", "_checkAndFixInput");
-               }
-               if(this._textInput){
-                       this.connect(this._textInput, "onChange", "_checkAndFixInput");
-               }
-
-               // Build up the dual check for http/https/file:, and mailto formats.
-               this._urlRegExp = new RegExp("^" + this.urlRegExp + "$", "i");
-               this._emailRegExp = new RegExp("^" + this.emailRegExp + "$", "i");
-               this._urlInput.isValid = dojo.hitch(this, function(){
-                       // Function over-ride of isValid to test if the input matches a url or a mailto style link.
-                       var value = this._urlInput.get("value");
-                       return this._urlRegExp.test(value) || this._emailRegExp.test(value);
-               });
-
-               this._connectTagEvents();
-               this.inherited(arguments);
-       },
-
-       _checkAndFixInput: function(){
-               // summary:
-               //              A function to listen for onChange events and test the input contents
-               //              for valid information, such as valid urls with http/https/ftp and if
-               //              not present, try and guess if the input url is relative or not, and if
-               //              not, append http:// to it.  Also validates other fields as determined by
-               //              the internal _isValid function.
-               var self = this;
-               var url = this._urlInput.get("value");
-               var fixupUrl = function(url){
-                       var appendHttp = false;
-                       var appendMailto = false;
-                       if(url && url.length > 1){
-                               url = dojo.trim(url);
-                               if(url.indexOf("mailto:") !== 0){
-                                       if(url.indexOf("/") > 0){
-                                               if(url.indexOf("://") === -1){
-                                                       // Check that it doesn't start with / or ./, which would
-                                                       // imply 'target server relativeness'
-                                                       if(url.charAt(0) !== '/' && url.indexOf("./") !== 0){
-                                                               if(self._hostRxp.test(url)){
-                                                                       appendHttp = true;
-                                                               }
-                                                       }
-                                               }
-                                       }else if(self._userAtRxp.test(url)){
-                                               // If it looks like a foo@, append a mailto.
-                                               appendMailto = true;
-                                       }
-                               }
-                       }
-                       if(appendHttp){
-                               self._urlInput.set("value", "http://" + url);
-                       }
-                       if(appendMailto){
-                               self._urlInput.set("value", "mailto:" + url);
-                       }
-                       self._setButton.set("disabled", !self._isValid());
-               };
-               if(this._delayedCheck){
-                       clearTimeout(this._delayedCheck);
-                       this._delayedCheck = null;
-               }
-               this._delayedCheck = setTimeout(function(){
-                       fixupUrl(url);
-               }, 250);
-       },
-
-       _connectTagEvents: function(){
-               // summary:
-               //              Over-ridable function that connects tag specific events.
-               this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){
-                       this.connect(this.editor.editNode, "ondblclick", this._onDblClick);
-               }));
-       },
-
-       _isValid: function(){
-               // summary:
-               //              Internal function to allow validating of the inputs
-               //              for a link to determine if set should be disabled or not
-               // tags:
-               //              protected
-               return this._urlInput.isValid() && this._textInput.isValid();
-       },
-
-       _setContent: function(staticPanel){
-               // summary:
-               //              Helper for _initButton above.   Not sure why it's a separate method.
-               this.dropDown.set('content', staticPanel);
-       },
-
-       _checkValues: function(args){
-               // summary:
-               //              Function to check the values in args and 'fix' them up as needed.
-               // args: Object
-               //              Content being set.              
-               // tags: 
-               //              protected
-               if(args && args.urlInput){
-                       args.urlInput = args.urlInput.replace(/"/g, "&quot;");
-               }
-               return args;
-       },
-
-       setValue: function(args){
-               // summary:
-               //              Callback from the dialog when user presses "set" button.
-               // tags:
-               //              private
-               //TODO: prevent closing popup if the text is empty
-               this._onCloseDialog();
-               if(dojo.isIE){ //see #4151
-                       var sel = dijit.range.getSelection(this.editor.window);
-                       var range = sel.getRangeAt(0);
-                       var a = range.endContainer;
-                       if(a.nodeType === 3){
-                               // Text node, may be the link contents, so check parent.
-                               // This plugin doesn't really support nested HTML elements
-                               // in the link, it assumes all link content is text.
-                               a = a.parentNode;
-                       }
-                       if(a && (a.nodeName && a.nodeName.toLowerCase() !== this.tag)){
-                               // Stll nothing, one last thing to try on IE, as it might be 'img'
-                               // and thus considered a control.
-                               a = dojo.withGlobal(this.editor.window,
-                                       "getSelectedElement", dijit._editor.selection, [this.tag]);
-                       }
-                       if(a && (a.nodeName && a.nodeName.toLowerCase() === this.tag)){
-                               // Okay, we do have a match.  IE, for some reason, sometimes pastes before
-                               // instead of removing the targetted paste-over element, so we unlink the
-                               // old one first.  If we do not the <a> tag remains, but it has no content,
-                               // so isn't readily visible (but is wrong for the action).
-                               if(this.editor.queryCommandEnabled("unlink")){
-                                       // Select all the link childent, then unlink.  The following insert will
-                                       // then replace the selected text.
-                                       dojo.withGlobal(this.editor.window,
-                                               "selectElementChildren", dijit._editor.selection, [a]);
-                                       this.editor.execCommand("unlink");
-                               }
-                       }
-               }
-               // make sure values are properly escaped, etc.
-               args = this._checkValues(args); 
-               this.editor.execCommand('inserthtml',
-                       dojo.string.substitute(this.htmlTemplate, args));
-       },
-
-       _onCloseDialog: function(){
-               // summary:
-               //              Handler for close event on the dialog
-               this.editor.focus();
-       },
-
-       _getCurrentValues: function(a){
-               // summary:
-               //              Over-ride for getting the values to set in the dropdown.
-               // a:
-               //              The anchor/link to process for data for the dropdown.
-               // tags:
-               //              protected
-               var url, text, target;
-               if(a && a.tagName.toLowerCase() === this.tag){
-                       url = a.getAttribute('_djrealurl') || a.getAttribute('href');
-                       target = a.getAttribute('target') || "_self";
-                       text = a.textContent || a.innerText;
-                       dojo.withGlobal(this.editor.window, "selectElement", dijit._editor.selection, [a, true]);
-               }else{
-                       text = dojo.withGlobal(this.editor.window, dijit._editor.selection.getSelectedText);
-               }
-               return {urlInput: url || '', textInput: text || '', targetSelect: target || ''}; //Object;
-       },
-
-       _onOpenDialog: function(){
-               // summary:
-               //              Handler for when the dialog is opened.
-               //              If the caret is currently in a URL then populate the URL's info into the dialog.
-               var a;
-               if(dojo.isIE){
-                       // IE is difficult to select the element in, using the range unified
-                       // API seems to work reasonably well.
-                       var sel = dijit.range.getSelection(this.editor.window);
-                       var range = sel.getRangeAt(0);
-                       a = range.endContainer;
-                       if(a.nodeType === 3){
-                               // Text node, may be the link contents, so check parent.
-                               // This plugin doesn't really support nested HTML elements
-                               // in the link, it assumes all link content is text.
-                               a = a.parentNode;
-                       }
-                       if(a && (a.nodeName && a.nodeName.toLowerCase() !== this.tag)){
-                               // Stll nothing, one last thing to try on IE, as it might be 'img'
-                               // and thus considered a control.
-                               a = dojo.withGlobal(this.editor.window,
-                                       "getSelectedElement", dijit._editor.selection, [this.tag]);
-                       }
-               }else{
-                       a = dojo.withGlobal(this.editor.window,
-                               "getAncestorElement", dijit._editor.selection, [this.tag]);
-               }
-               this.dropDown.reset();
-               this._setButton.set("disabled", true);
-               this.dropDown.set("value", this._getCurrentValues(a));
-       },
-
-       _onDblClick: function(e){
-               // summary:
-               //              Function to define a behavior on double clicks on the element
-               //              type this dialog edits to select it and pop up the editor
-               //              dialog.
-               // e: Object
-               //              The double-click event.
-               // tags:
-               //              protected.
-               if(e && e.target){
-                       var t = e.target;
-                       var tg = t.tagName? t.tagName.toLowerCase() : "";
-                       if(tg === this.tag && dojo.attr(t,"href")){
-                               dojo.withGlobal(this.editor.window,
-                                        "selectElement",
-                                        dijit._editor.selection, [t]);
-                               this.editor.onDisplayChanged();
-                               setTimeout(dojo.hitch(this, function(){
-                                       // Focus shift outside the event handler.
-                                       // IE doesn't like focus changes in event handles.
-                                       this.button.set("disabled", false);
-                                       this.button.openDropDown();
-                               }), 10);
-                       }
-               }
-       }
-});
-
-dojo.declare("dijit._editor.plugins.ImgLinkDialog", [dijit._editor.plugins.LinkDialog], {
-       // summary:
-       //              This plugin extends LinkDialog and adds in a plugin for handling image links.
-       //              provides the image link dialog.
-       //
-       // description:
-       //              The command provided by this plugin is:
-       //              * insertImage
-
-       // linkDialogTemplate: [protected] String
-       //              Over-ride for template since img dialog doesn't need target that anchor tags may.
-       linkDialogTemplate: [
-               "<table><tr><td>",
-               "<label for='${id}_urlInput'>${url}</label>",
-               "</td><td>",
-               "<input dojoType='dijit.form.ValidationTextBox' regExp='${urlRegExp}' " +
-               "required='true' id='${id}_urlInput' name='urlInput' intermediateChanges='true'>",
-               "</td></tr><tr><td>",
-               "<label for='${id}_textInput'>${text}</label>",
-               "</td><td>",
-               "<input dojoType='dijit.form.ValidationTextBox' required='false' id='${id}_textInput' " +
-               "name='textInput' intermediateChanges='true'>",
-               "</td></tr><tr><td>",
-               "</td><td>",
-               "</td></tr><tr><td colspan='2'>",
-               "<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>",
-               "<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>",
-               "</td></tr></table>"
-       ].join(""),
-
-       // htmlTemplate: [protected] String
-       //              String used for templating the <img> HTML to insert at the desired point.
-       htmlTemplate: "<img src=\"${urlInput}\" _djrealurl=\"${urlInput}\" alt=\"${textInput}\" />",
-
-       // tag: [protected] String
-       //              Tag used for the link type (img).
-       tag: "img",
-
-       _getCurrentValues: function(img){
-               // summary:
-               //              Over-ride for getting the values to set in the dropdown.
-               // a:
-               //              The anchor/link to process for data for the dropdown.
-               // tags:
-               //              protected
-               var url, text;
-               if(img && img.tagName.toLowerCase() === this.tag){
-                       url = img.getAttribute('_djrealurl') || img.getAttribute('src');
-                       text = img.getAttribute('alt');
-                       dojo.withGlobal(this.editor.window,
-                               "selectElement", dijit._editor.selection, [img, true]);
-               }else{
-                       text = dojo.withGlobal(this.editor.window, dijit._editor.selection.getSelectedText);
-               }
-               return {urlInput: url || '', textInput: text || ''}; //Object;
-       },
-
-       _isValid: function(){
-               // summary:
-               //              Over-ride for images.  You can have alt text of blank, it is valid.
-               // tags:
-               //              protected
-               return this._urlInput.isValid();
-       },
-
-       _connectTagEvents: function(){
-               // summary:
-               //              Over-ridable function that connects tag specific events.
-               this.inherited(arguments);
-               this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){
-                       // Use onmousedown instead of onclick.  Seems that IE eats the first onclick
-                       // to wrap it in a selector box, then the second one acts as onclick.  See #10420
-                       this.connect(this.editor.editNode, "onmousedown", this._selectTag);
-               }));
-       },
-
-       _selectTag: function(e){
-               // summary:
-               //              A simple event handler that lets me select an image if it is clicked on.
-               //              makes it easier to select images in a standard way across browsers.  Otherwise
-               //              selecting an image for edit becomes difficult.
-               // e: Event
-               //              The mousedown event.
-               // tags:
-               //              private
-               if(e && e.target){
-                       var t = e.target;
-                       var tg = t.tagName? t.tagName.toLowerCase() : "";
-                       if(tg === this.tag){
-                               dojo.withGlobal(this.editor.window,
-                                       "selectElement",
-                                       dijit._editor.selection, [t]);
-                       }
-               }
-       },
-
-       _checkValues: function(args){
-               // summary:
-               //              Function to check the values in args and 'fix' them up as needed 
-               //              (special characters in the url or alt text)
-               // args: Object
-               //              Content being set.              
-               // tags: 
-               //              protected
-               if(args && args.urlInput){
-                       args.urlInput = args.urlInput.replace(/"/g, "&quot;");
-               }
-               if(args && args.textInput){
-                       args.textInput = args.textInput.replace(/"/g, "&quot;");
-               }
-               return args;
-       },
-
-       _onDblClick: function(e){
-               // summary:
-               //              Function to define a behavior on double clicks on the element
-               //              type this dialog edits to select it and pop up the editor
-               //              dialog.
-               // e: Object
-               //              The double-click event.
-               // tags:
-               //              protected.
-               if(e && e.target){
-                       var t = e.target;
-                       var tg = t.tagName? t.tagName.toLowerCase() : "";
-                       if(tg === this.tag && dojo.attr(t,"src")){
-                               dojo.withGlobal(this.editor.window,
-                                        "selectElement",
-                                        dijit._editor.selection, [t]);
-                               this.editor.onDisplayChanged();
-                               setTimeout(dojo.hitch(this, function(){
-                                       // Focus shift outside the event handler.
-                                       // IE doesn't like focus changes in event handles.
-                                       this.button.set("disabled", false);
-                                       this.button.openDropDown();
-                               }), 10);
-                       }
-               }
-       }
-});
-
-// Register this plugin.
-dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
-       if(o.plugin){ return; }
-       switch(o.args.name){
-               case "createLink":
-                       o.plugin = new dijit._editor.plugins.LinkDialog({command: o.args.name});
-                       break;
-               case "insertImage":
-                       o.plugin = new dijit._editor.plugins.ImgLinkDialog({command: o.args.name});
-                       break;
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.MenuBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.MenuBar"] = true;
-dojo.provide("dijit.MenuBar");
-
-
-
-dojo.declare("dijit.MenuBar", dijit._MenuBase, {
-       // summary:
-       //              A menu bar, listing menu choices horizontally, like the "File" menu in most desktop applications
-
-       templateString: dojo.cache("dijit", "templates/MenuBar.html", "<div class=\"dijitMenuBar dijitMenuPassive\" dojoAttachPoint=\"containerNode\"  waiRole=\"menubar\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress: _onKeyPress\"></div>\n"),
-
-       baseClass: "dijitMenuBar",
-
-       // _isMenuBar: [protected] Boolean
-       //              This is a MenuBar widget, not a (vertical) Menu widget.
-       _isMenuBar: true,
-
-       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]
-               );
-
-               // parameter to dijit.popup.open() about where to put popup (relative to this.domNode)
-               this._orient = this.isLeftToRight() ? {BL: 'TL'} : {BR: 'TR'};
-       },
-
-       focusChild: function(item){
-               // overload focusChild so that whenever the focus is moved to a new item,
-               // check the previous focused whether it has its popup open, if so, after
-               // focusing the new item, open its submenu immediately
-               var prev_item = this.focusedChild,
-                       showpopup = prev_item && prev_item.popup && prev_item.popup.isShowingNow;
-               this.inherited(arguments);
-               if(showpopup && item.popup && !item.disabled){
-                       this._openPopup();              // TODO: on down arrow, _openPopup() is called here and in onItemClick()
-               }
-       },
-
-       _onKeyPress: function(/*Event*/ evt){
-               // summary:
-               //              Handle keyboard based menu navigation.
-               // tags:
-               //              protected
-
-               if(evt.ctrlKey || evt.altKey){ return; }
-
-               switch(evt.charOrCode){
-                       case dojo.keys.DOWN_ARROW:
-                               this._moveToPopup(evt);
-                               dojo.stopEvent(evt);
-               }
-       },
-
-       onItemClick: function(/*dijit._Widget*/ item, /*Event*/ evt){
-               // summary:
-               //              Handle clicks on an item. Cancels a dropdown if already open.
-               // tags:
-               //              private
-               if(item.popup && item.popup.isShowingNow){
-                       item.popup.onCancel();
-               }else{
-                       this.inherited(arguments);
-               }
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.MenuBarItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.MenuBarItem"] = true;
-dojo.provide("dijit.MenuBarItem");
-
-
-
-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"),
-
-       // overriding attributeMap because we don't have icon
-       attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-               label: { node: "containerNode", type: "innerHTML" }
-       })
-});
-
-dojo.declare("dijit.MenuBarItem", [dijit.MenuItem, dijit._MenuBarItemMixin], {
-       // summary:
-       //              Item in a MenuBar that's clickable, and doesn't spawn a submenu when pressed (or hovered)
-
-});
-
-}
-
-if(!dojo._hasResource["dijit.PopupMenuBarItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.PopupMenuBarItem"] = true;
-dojo.provide("dijit.PopupMenuBarItem");
-
-
-
-
-dojo.declare("dijit.PopupMenuBarItem", [dijit.PopupMenuItem, dijit._MenuBarItemMixin], {
-       // summary:
-       //              Item in a MenuBar like "File" or "Edit", that spawns a submenu when pressed (or hovered)
-});
-
-
-}
-
-if(!dojo._hasResource["dojo.number"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.number"] = true;
-dojo.provide("dojo.number");
-
-
-
-
-
-
-
-/*=====
-dojo.number = {
-       // summary: localized formatting and parsing routines for Number
-}
-
-dojo.number.__FormatOptions = function(){
-       //      pattern: String?
-       //              override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
-       //              with this string.  Default value is based on locale.  Overriding this property will defeat
-       //              localization.  Literal characters in patterns are not supported.
-       //      type: String?
-       //              choose a format type based on the locale from the following:
-       //              decimal, scientific (not yet supported), percent, currency. decimal by default.
-       //      places: Number?
-       //              fixed number of decimal places to show.  This overrides any
-       //              information in the provided pattern.
-       //      round: Number?
-       //              5 rounds to nearest .5; 0 rounds to nearest whole (default). -1
-       //              means do not round.
-       //      locale: String?
-       //              override the locale used to determine formatting rules
-       //      fractional: Boolean?
-       //              If false, show no decimal places, overriding places and pattern settings.
-       this.pattern = pattern;
-       this.type = type;
-       this.places = places;
-       this.round = round;
-       this.locale = locale;
-       this.fractional = fractional;
-}
-=====*/
-
-dojo.number.format = function(/*Number*/value, /*dojo.number.__FormatOptions?*/options){
-       // summary:
-       //              Format a Number as a String, using locale-specific settings
-       // description:
-       //              Create a string from a Number using a known localized pattern.
-       //              Formatting patterns appropriate to the locale are chosen from the
-       //              [Common Locale Data Repository](http://unicode.org/cldr) as well as the appropriate symbols and
-       //              delimiters.
-       //              If value is Infinity, -Infinity, or is not a valid JavaScript number, return null.
-       // value:
-       //              the number to be formatted
-
-       options = dojo.mixin({}, options || {});
-       var locale = dojo.i18n.normalizeLocale(options.locale),
-               bundle = dojo.i18n.getLocalization("dojo.cldr", "number", locale);
-       options.customs = bundle;
-       var pattern = options.pattern || bundle[(options.type || "decimal") + "Format"];
-       if(isNaN(value) || Math.abs(value) == Infinity){ return null; } // null
-       return dojo.number._applyPattern(value, pattern, options); // String
-};
-
-//dojo.number._numberPatternRE = /(?:[#0]*,?)*[#0](?:\.0*#*)?/; // not precise, but good enough
-dojo.number._numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/; // not precise, but good enough
-
-dojo.number._applyPattern = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatOptions?*/options){
-       // summary:
-       //              Apply pattern to format value as a string using options. Gives no
-       //              consideration to local customs.
-       // value:
-       //              the number to be formatted.
-       // pattern:
-       //              a pattern string as described by
-       //              [unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
-       // options: dojo.number.__FormatOptions?
-       //              _applyPattern is usually called via `dojo.number.format()` which
-       //              populates an extra property in the options parameter, "customs".
-       //              The customs object specifies group and decimal parameters if set.
-
-       //TODO: support escapes
-       options = options || {};
-       var group = options.customs.group,
-               decimal = options.customs.decimal,
-               patternList = pattern.split(';'),
-               positivePattern = patternList[0];
-       pattern = patternList[(value < 0) ? 1 : 0] || ("-" + positivePattern);
-
-       //TODO: only test against unescaped
-       if(pattern.indexOf('%') != -1){
-               value *= 100;
-       }else if(pattern.indexOf('\u2030') != -1){
-               value *= 1000; // per mille
-       }else if(pattern.indexOf('\u00a4') != -1){
-               group = options.customs.currencyGroup || group;//mixins instead?
-               decimal = options.customs.currencyDecimal || decimal;// Should these be mixins instead?
-               pattern = pattern.replace(/\u00a4{1,3}/, function(match){
-                       var prop = ["symbol", "currency", "displayName"][match.length-1];
-                       return options[prop] || options.currency || "";
-               });
-       }else if(pattern.indexOf('E') != -1){
-               throw new Error("exponential notation not supported");
-       }
-       
-       //TODO: support @ sig figs?
-       var numberPatternRE = dojo.number._numberPatternRE;
-       var numberPattern = positivePattern.match(numberPatternRE);
-       if(!numberPattern){
-               throw new Error("unable to find a number expression in pattern: "+pattern);
-       }
-       if(options.fractional === false){ options.places = 0; }
-       return pattern.replace(numberPatternRE,
-               dojo.number._formatAbsolute(value, numberPattern[0], {decimal: decimal, group: group, places: options.places, round: options.round}));
-}
-
-dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/increment){
-       //      summary:
-       //              Rounds to the nearest value with the given number of decimal places, away from zero
-       //      description:
-       //              Rounds to the nearest value with the given number of decimal places, away from zero if equal.
-       //              Similar to Number.toFixed(), but compensates for browser quirks. Rounding can be done by
-       //              fractional increments also, such as the nearest quarter.
-       //              NOTE: Subject to floating point errors.  See dojox.math.round for experimental workaround.
-       //      value:
-       //              The number to round
-       //      places:
-       //              The number of decimal places where rounding takes place.  Defaults to 0 for whole rounding.
-       //              Must be non-negative.
-       //      increment:
-       //              Rounds next place to nearest value of increment/10.  10 by default.
-       //      example:
-       //              >>> dojo.number.round(-0.5)
-       //              -1
-       //              >>> dojo.number.round(162.295, 2)
-       //              162.29  // note floating point error.  Should be 162.3
-       //              >>> dojo.number.round(10.71, 0, 2.5)
-       //              10.75
-       var factor = 10 / (increment || 10);
-       return (factor * +value).toFixed(places) / factor; // Number
-}
-
-if((0.9).toFixed() == 0){
-       // (isIE) toFixed() bug workaround: Rounding fails on IE when most significant digit
-       // is just after the rounding place and is >=5
-       (function(){
-               var round = dojo.number.round;
-               dojo.number.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 round(v, p, m) + (v > 0 ? d : -d);
-               }
-       })();
-}
-
-/*=====
-dojo.number.__FormatAbsoluteOptions = function(){
-       //      decimal: String?
-       //              the decimal separator
-       //      group: String?
-       //              the group separator
-       //      places: Number?|String?
-       //              number of decimal places.  the range "n,m" will format to m places.
-       //      round: Number?
-       //              5 rounds to nearest .5; 0 rounds to nearest whole (default). -1
-       //              means don't round.
-       this.decimal = decimal;
-       this.group = group;
-       this.places = places;
-       this.round = round;
-}
-=====*/
-
-dojo.number._formatAbsolute = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatAbsoluteOptions?*/options){
-       // summary: 
-       //              Apply numeric pattern to absolute value using options. Gives no
-       //              consideration to local customs.
-       // value:
-       //              the number to be formatted, ignores sign
-       // pattern:
-       //              the number portion of a pattern (e.g. `#,##0.00`)
-       options = options || {};
-       if(options.places === true){options.places=0;}
-       if(options.places === Infinity){options.places=6;} // avoid a loop; pick a limit
-
-       var patternParts = pattern.split("."),
-               comma = typeof options.places == "string" && options.places.indexOf(","),
-               maxPlaces = options.places;
-       if(comma){
-               maxPlaces = options.places.substring(comma + 1);
-       }else if(!(maxPlaces >= 0)){
-               maxPlaces = (patternParts[1] || []).length;
-       }
-       if(!(options.round < 0)){
-               value = dojo.number.round(value, maxPlaces, options.round);
-       }
-
-       var valueParts = String(Math.abs(value)).split("."),
-               fractional = valueParts[1] || "";
-       if(patternParts[1] || options.places){
-               if(comma){
-                       options.places = options.places.substring(0, comma);
-               }
-               // Pad fractional with trailing zeros
-               var pad = options.places !== undefined ? options.places : (patternParts[1] && patternParts[1].lastIndexOf("0") + 1);
-               if(pad > fractional.length){
-                       valueParts[1] = dojo.string.pad(fractional, pad, '0', true);
-               }
-
-               // Truncate fractional
-               if(maxPlaces < fractional.length){
-                       valueParts[1] = fractional.substr(0, maxPlaces);
-               }
-       }else{
-               if(valueParts[1]){ valueParts.pop(); }
-       }
-
-       // Pad whole with leading zeros
-       var patternDigits = patternParts[0].replace(',', '');
-       pad = patternDigits.indexOf("0");
-       if(pad != -1){
-               pad = patternDigits.length - pad;
-               if(pad > valueParts[0].length){
-                       valueParts[0] = dojo.string.pad(valueParts[0], pad);
-               }
-
-               // Truncate whole
-               if(patternDigits.indexOf("#") == -1){
-                       valueParts[0] = valueParts[0].substr(valueParts[0].length - pad);
-               }
-       }
-
-       // Add group separators
-       var index = patternParts[0].lastIndexOf(','),
-               groupSize, groupSize2;
-       if(index != -1){
-               groupSize = patternParts[0].length - index - 1;
-               var remainder = patternParts[0].substr(0, index);
-               index = remainder.lastIndexOf(',');
-               if(index != -1){
-                       groupSize2 = remainder.length - index - 1;
-               }
-       }
-       var pieces = [];
-       for(var whole = valueParts[0]; whole;){
-               var off = whole.length - groupSize;
-               pieces.push((off > 0) ? whole.substr(off) : whole);
-               whole = (off > 0) ? whole.slice(0, off) : "";
-               if(groupSize2){
-                       groupSize = groupSize2;
-                       delete groupSize2;
-               }
-       }
-       valueParts[0] = pieces.reverse().join(options.group || ",");
-
-       return valueParts.join(options.decimal || ".");
-};
-
-/*=====
-dojo.number.__RegexpOptions = function(){
-       //      pattern: String?
-       //              override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
-       //              with this string.  Default value is based on locale.  Overriding this property will defeat
-       //              localization.
-       //      type: String?
-       //              choose a format type based on the locale from the following:
-       //              decimal, scientific (not yet supported), percent, currency. decimal by default.
-       //      locale: String?
-       //              override the locale used to determine formatting rules
-       //      strict: Boolean?
-       //              strict parsing, false by default.  Strict parsing requires input as produced by the format() method.
-       //              Non-strict is more permissive, e.g. flexible on white space, omitting thousands separators
-       //      places: Number|String?
-       //              number of decimal places to accept: Infinity, a positive number, or
-       //              a range "n,m".  Defined by pattern or Infinity if pattern not provided.
-       this.pattern = pattern;
-       this.type = type;
-       this.locale = locale;
-       this.strict = strict;
-       this.places = places;
-}
-=====*/
-dojo.number.regexp = function(/*dojo.number.__RegexpOptions?*/options){
-       //      summary:
-       //              Builds the regular needed to parse a number
-       //      description:
-       //              Returns regular expression with positive and negative match, group
-       //              and decimal separators
-       return dojo.number._parseInfo(options).regexp; // String
-}
-
-dojo.number._parseInfo = function(/*Object?*/options){
-       options = options || {};
-       var locale = dojo.i18n.normalizeLocale(options.locale),
-               bundle = dojo.i18n.getLocalization("dojo.cldr", "number", locale),
-               pattern = options.pattern || bundle[(options.type || "decimal") + "Format"],
-//TODO: memoize?
-               group = bundle.group,
-               decimal = bundle.decimal,
-               factor = 1;
-
-       if(pattern.indexOf('%') != -1){
-               factor /= 100;
-       }else if(pattern.indexOf('\u2030') != -1){
-               factor /= 1000; // per mille
-       }else{
-               var isCurrency = pattern.indexOf('\u00a4') != -1;
-               if(isCurrency){
-                       group = bundle.currencyGroup || group;
-                       decimal = bundle.currencyDecimal || decimal;
-               }
-       }
-
-       //TODO: handle quoted escapes
-       var patternList = pattern.split(';');
-       if(patternList.length == 1){
-               patternList.push("-" + patternList[0]);
-       }
-
-       var re = dojo.regexp.buildGroupRE(patternList, function(pattern){
-               pattern = "(?:"+dojo.regexp.escapeString(pattern, '.')+")";
-               return pattern.replace(dojo.number._numberPatternRE, function(format){
-                       var flags = {
-                               signed: false,
-                               separator: options.strict ? group : [group,""],
-                               fractional: options.fractional,
-                               decimal: decimal,
-                               exponent: false
-                               },
-
-                               parts = format.split('.'),
-                               places = options.places;
-
-                       // special condition for percent (factor != 1)
-                       // allow decimal places even if not specified in pattern
-                       if(parts.length == 1 && factor != 1){
-                           parts[1] = "###";
-                       }
-                       if(parts.length == 1 || places === 0){
-                               flags.fractional = false;
-                       }else{
-                               if(places === undefined){ places = options.pattern ? parts[1].lastIndexOf('0') + 1 : Infinity; }
-                               if(places && options.fractional == undefined){flags.fractional = true;} // required fractional, unless otherwise specified
-                               if(!options.places && (places < parts[1].length)){ places += "," + parts[1].length; }
-                               flags.places = places;
-                       }
-                       var groups = parts[0].split(',');
-                       if(groups.length > 1){
-                               flags.groupSize = groups.pop().length;
-                               if(groups.length > 1){
-                                       flags.groupSize2 = groups.pop().length;
-                               }
-                       }
-                       return "("+dojo.number._realNumberRegexp(flags)+")";
-               });
-       }, true);
-
-       if(isCurrency){
-               // substitute the currency symbol for the placeholder in the pattern
-               re = re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g, function(match, before, target, after){
-                       var prop = ["symbol", "currency", "displayName"][target.length-1],
-                               symbol = dojo.regexp.escapeString(options[prop] || options.currency || "");
-                       before = before ? "[\\s\\xa0]" : "";
-                       after = after ? "[\\s\\xa0]" : "";
-                       if(!options.strict){
-                               if(before){before += "*";}
-                               if(after){after += "*";}
-                               return "(?:"+before+symbol+after+")?";
-                       }
-                       return before+symbol+after;
-               });
-       }
-
-//TODO: substitute localized sign/percent/permille/etc.?
-
-       // normalize whitespace and return
-       return {regexp: re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group: group, decimal: decimal, factor: factor}; // Object
-}
-
-/*=====
-dojo.number.__ParseOptions = function(){
-       //      pattern: String?
-       //              override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
-       //              with this string.  Default value is based on locale.  Overriding this property will defeat
-       //              localization.  Literal characters in patterns are not supported.
-       //      type: String?
-       //              choose a format type based on the locale from the following:
-       //              decimal, scientific (not yet supported), percent, currency. decimal by default.
-       //      locale: String?
-       //              override the locale used to determine formatting rules
-       //      strict: Boolean?
-       //              strict parsing, false by default.  Strict parsing requires input as produced by the format() method.
-       //              Non-strict is more permissive, e.g. flexible on white space, omitting thousands separators
-       //      fractional: Boolean?|Array?
-       //              Whether to include the fractional portion, where the number of decimal places are implied by pattern
-       //              or explicit 'places' parameter.  The value [true,false] makes the fractional portion optional.
-       this.pattern = pattern;
-       this.type = type;
-       this.locale = locale;
-       this.strict = strict;
-       this.fractional = fractional;
-}
-=====*/
-dojo.number.parse = function(/*String*/expression, /*dojo.number.__ParseOptions?*/options){
-       // summary:
-       //              Convert a properly formatted string to a primitive Number, using
-       //              locale-specific settings.
-       // description:
-       //              Create a Number from a string using a known localized pattern.
-       //              Formatting patterns are chosen appropriate to the locale
-       //              and follow the syntax described by
-       //              [unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
-       //              Note that literal characters in patterns are not supported.
-       // expression:
-       //              A string representation of a Number
-       var info = dojo.number._parseInfo(options),
-               results = (new RegExp("^"+info.regexp+"$")).exec(expression);
-       if(!results){
-               return NaN; //NaN
-       }
-       var absoluteMatch = results[1]; // match for the positive expression
-       if(!results[1]){
-               if(!results[2]){
-                       return NaN; //NaN
-               }
-               // matched the negative pattern
-               absoluteMatch =results[2];
-               info.factor *= -1;
-       }
-
-       // Transform it to something Javascript can parse as a number.  Normalize
-       // decimal point and strip out group separators or alternate forms of whitespace
-       absoluteMatch = absoluteMatch.
-               replace(new RegExp("["+info.group + "\\s\\xa0"+"]", "g"), "").
-               replace(info.decimal, ".");
-       // Adjust for negative sign, percent, etc. as necessary
-       return absoluteMatch * info.factor; //Number
-};
-
-/*=====
-dojo.number.__RealNumberRegexpFlags = function(){
-       //      places: Number?
-       //              The integer number of decimal places or a range given as "n,m".  If
-       //              not given, the decimal part is optional and the number of places is
-       //              unlimited.
-       //      decimal: String?
-       //              A string for the character used as the decimal point.  Default
-       //              is ".".
-       //      fractional: Boolean?|Array?
-       //              Whether decimal places are used.  Can be true, false, or [true,
-       //              false].  Default is [true, false] which means optional.
-       //      exponent: Boolean?|Array?
-       //              Express in exponential notation.  Can be true, false, or [true,
-       //              false]. Default is [true, false], (i.e. will match if the
-       //              exponential part is present are not).
-       //      eSigned: Boolean?|Array?
-       //              The leading plus-or-minus sign on the exponent.  Can be true,
-       //              false, or [true, false].  Default is [true, false], (i.e. will
-       //              match if it is signed or unsigned).  flags in regexp.integer can be
-       //              applied.
-       this.places = places;
-       this.decimal = decimal;
-       this.fractional = fractional;
-       this.exponent = exponent;
-       this.eSigned = eSigned;
-}
-=====*/
-
-dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?*/flags){
-       // summary:
-       //              Builds a regular expression to match a real number in exponential
-       //              notation
-
-       // assign default values to missing parameters
-       flags = flags || {};
-       //TODO: use mixin instead?
-       if(!("places" in flags)){ flags.places = Infinity; }
-       if(typeof flags.decimal != "string"){ flags.decimal = "."; }
-       if(!("fractional" in flags) || /^0/.test(flags.places)){ flags.fractional = [true, false]; }
-       if(!("exponent" in flags)){ flags.exponent = [true, false]; }
-       if(!("eSigned" in flags)){ flags.eSigned = [true, false]; }
-
-       var integerRE = dojo.number._integerRegexp(flags),
-               decimalRE = dojo.regexp.buildGroupRE(flags.fractional,
-               function(q){
-                       var re = "";
-                       if(q && (flags.places!==0)){
-                               re = "\\" + flags.decimal;
-                               if(flags.places == Infinity){ 
-                                       re = "(?:" + re + "\\d+)?"; 
-                               }else{
-                                       re += "\\d{" + flags.places + "}"; 
-                               }
-                       }
-                       return re;
-               },
-               true
-       );
-
-       var exponentRE = dojo.regexp.buildGroupRE(flags.exponent,
-               function(q){ 
-                       if(q){ return "([eE]" + dojo.number._integerRegexp({ signed: flags.eSigned}) + ")"; }
-                       return ""; 
-               }
-       );
-
-       var realRE = integerRE + decimalRE;
-       // allow for decimals without integers, e.g. .25
-       if(decimalRE){realRE = "(?:(?:"+ realRE + ")|(?:" + decimalRE + "))";}
-       return realRE + exponentRE; // String
-};
-
-/*=====
-dojo.number.__IntegerRegexpFlags = function(){
-       //      signed: Boolean?
-       //              The leading plus-or-minus sign. Can be true, false, or `[true,false]`.
-       //              Default is `[true, false]`, (i.e. will match if it is signed
-       //              or unsigned).
-       //      separator: String?
-       //              The character used as the thousands separator. Default is no
-       //              separator. For more than one symbol use an array, e.g. `[",", ""]`,
-       //              makes ',' optional.
-       //      groupSize: Number?
-       //              group size between separators
-       //      groupSize2: Number?
-       //              second grouping, where separators 2..n have a different interval than the first separator (for India)
-       this.signed = signed;
-       this.separator = separator;
-       this.groupSize = groupSize;
-       this.groupSize2 = groupSize2;
-}
-=====*/
-
-dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags){
-       // summary: 
-       //              Builds a regular expression that matches an integer
-
-       // assign default values to missing parameters
-       flags = flags || {};
-       if(!("signed" in flags)){ flags.signed = [true, false]; }
-       if(!("separator" in flags)){
-               flags.separator = "";
-       }else if(!("groupSize" in flags)){
-               flags.groupSize = 3;
-       }
-
-       var signRE = dojo.regexp.buildGroupRE(flags.signed,
-               function(q){ return q ? "[-+]" : ""; },
-               true
-       );
-
-       var numberRE = dojo.regexp.buildGroupRE(flags.separator,
-               function(sep){
-                       if(!sep){
-                               return "(?:\\d+)";
-                       }
-
-                       sep = dojo.regexp.escapeString(sep);
-                       if(sep == " "){ sep = "\\s"; }
-                       else if(sep == "\xa0"){ sep = "\\s\\xa0"; }
-
-                       var grp = flags.groupSize, grp2 = flags.groupSize2;
-                       //TODO: should we continue to enforce that numbers with separators begin with 1-9?  See #6933
-                       if(grp2){
-                               var grp2RE = "(?:0|[1-9]\\d{0," + (grp2-1) + "}(?:[" + sep + "]\\d{" + grp2 + "})*[" + sep + "]\\d{" + grp + "})";
-                               return ((grp-grp2) > 0) ? "(?:" + grp2RE + "|(?:0|[1-9]\\d{0," + (grp-1) + "}))" : grp2RE;
-                       }
-                       return "(?:0|[1-9]\\d{0," + (grp-1) + "}(?:[" + sep + "]\\d{" + grp + "})*)";
-               },
-               true
-       );
-
-       return signRE + numberRE; // String
-}
-
-}
-
-if(!dojo._hasResource["dijit.ProgressBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.ProgressBar"] = true;
-dojo.provide("dijit.ProgressBar");
-
-
-
-
-
-
-
-dojo.declare("dijit.ProgressBar", [dijit._Widget, dijit._Templated], {
-       // summary:
-       //              A progress indication widget, showing the amount completed
-       //              (often the percentage completed) of a task.
-       //
-       // example:
-       // |    <div dojoType="ProgressBar"
-       // |             places="0"
-       // |             progress="..." maximum="...">
-       // |    </div>
-       //
-       // description:
-       //              Note that the progress bar is updated via (a non-standard)
-       //              update() method, rather than via attr() like other widgets.
-
-       // progress: [const] String (Percentage or Number)
-       //              Number or percentage indicating amount of task completed.
-       //              With "%": percentage value, 0% <= progress <= 100%, or
-       //              without "%": absolute value, 0 <= progress <= maximum
-       // TODO: rename to value for 2.0
-       progress: "0",
-
-       // maximum: [const] Float
-       //              Max sample number
-       maximum: 100,
-
-       // places: [const] Number
-       //              Number of places to show in values; 0 by default
-       places: 0,
-
-       // indeterminate: [const] Boolean
-       //              If false: show progress value (number or percentage).
-       //              If true: show that a process is underway but that the amount completed is unknown.
-       indeterminate: false,
-
-       // name: String
-       //              this is the field name (for a form) if set. This needs to be set if you want to use
-       //              this widget in a dijit.form.Form widget (such as dijit.Dialog)
-       name: '',
-
-       templateString: dojo.cache("dijit", "templates/ProgressBar.html", "<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),
-
-       // _indeterminateHighContrastImagePath: [private] dojo._URL
-       //              URL to image to use for indeterminate progress bar when display is in high contrast mode
-       _indeterminateHighContrastImagePath:
-               dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"),
-
-       // public functions
-       postCreate: function(){
-               this.inherited(arguments);
-               this.indeterminateHighContrastImage.setAttribute("src",
-                       this._indeterminateHighContrastImagePath.toString());
-               this.update();
-       },
-
-       update: function(/*Object?*/attributes){
-               // summary:
-               //              Change attributes of ProgressBar, similar to attr(hash).
-               //
-               // attributes:
-               //              May provide progress and/or maximum properties on this parameter;
-               //              see attribute specs for details.
-               //
-               // example:
-               //      |       myProgressBar.update({'indeterminate': true});
-               //      |       myProgressBar.update({'progress': 80});
-
-               // TODO: deprecate this method and use set() instead
-
-               dojo.mixin(this, attributes || {});
-               var tip = this.internalProgress;
-               var percent = 1, classFunc;
-               if(this.indeterminate){
-                       classFunc = "addClass";
-                       dijit.removeWaiState(tip, "valuenow");
-                       dijit.removeWaiState(tip, "valuemin");
-                       dijit.removeWaiState(tip, "valuemax");
-               }else{
-                       classFunc = "removeClass";
-                       if(String(this.progress).indexOf("%") != -1){
-                               percent = Math.min(parseFloat(this.progress)/100, 1);
-                               this.progress = percent * this.maximum;
-                       }else{
-                               this.progress = Math.min(this.progress, this.maximum);
-                               percent = this.progress / this.maximum;
-                       }
-                       var text = this.report(percent);
-                       this.label.firstChild.nodeValue = text;
-                       dijit.setWaiState(tip, "describedby", this.label.id);
-                       dijit.setWaiState(tip, "valuenow", this.progress);
-                       dijit.setWaiState(tip, "valuemin", 0);
-                       dijit.setWaiState(tip, "valuemax", this.maximum);
-               }
-               dojo[classFunc](this.domNode, "dijitProgressBarIndeterminate");
-               tip.style.width = (percent * 100) + "%";
-               this.onChange();
-       },
-
-       _setValueAttr: function(v){
-               if(v == Infinity){
-                       this.update({indeterminate:true});
-               }else{
-                       this.update({indeterminate:false, progress:v});
-               }
-       },
-
-       _getValueAttr: function(){
-               return this.progress;
-       },
-
-       report: function(/*float*/percent){
-               // summary:
-               //              Generates message to show inside progress bar (normally indicating amount of task completed).
-               //              May be overridden.
-               // tags:
-               //              extension
-
-               return dojo.number.format(percent, { type: "percent", places: this.places, locale: this.lang });
-       },
-
-       onChange: function(){
-               // summary:
-               //              Callback fired when progress updates.
-               // tags:
-               //              progress
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.TitlePane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.TitlePane"] = true;
-dojo.provide("dijit.TitlePane");
-
-
-
-
-
-
-
-dojo.declare(
-       "dijit.TitlePane",
-       [dijit.layout.ContentPane, dijit._Templated, dijit._CssStateMixin],
-{
-       // summary:
-       //              A pane with a title on top, that can be expanded or collapsed.
-       //
-       // description:
-       //              An accessible container with a title Heading, and a content
-       //              section that slides open and closed. TitlePane is an extension to
-       //              `dijit.layout.ContentPane`, providing all the useful content-control aspects from it.
-       //
-       // example:
-       // |    // load a TitlePane from remote file:
-       // |    var foo = new dijit.TitlePane({ href: "foobar.html", title:"Title" });
-       // |    foo.startup();
-       //
-       // example:
-       // |    <!-- markup href example: -->
-       // |    <div dojoType="dijit.TitlePane" href="foobar.html" title="Title"></div>
-       //
-       // example:
-       // |    <!-- markup with inline data -->
-       // |    <div dojoType="dijit.TitlePane" title="Title">
-       // |            <p>I am content</p>
-       // |    </div>
-
-       // title: String
-       //              Title of the pane
-       title: "",
-
-       // open: Boolean
-       //              Whether pane is opened or closed.
-       open: true,
-
-       // toggleable: Boolean
-       //              Whether pane can be opened or closed by clicking the title bar.
-       toggleable: true,
-
-       // tabIndex: String
-       //              Tabindex setting for the title (so users can tab to the title then
-       //              use space/enter to open/close the title pane)
-       tabIndex: "0",
-
-       // duration: Integer
-       //              Time in milliseconds to fade in/fade out
-       duration: dijit.defaultDuration,
-
-       // baseClass: [protected] String
-       //              The root className to be placed on this widget's domNode.
-       baseClass: "dijitTitlePane",
-
-       templateString: dojo.cache("dijit", "templates/TitlePane.html", "<div>\n\t<div dojoAttachEvent=\"onclick:_onTitleClick, onkeypress:_onTitleKey\"\n\t\t\tclass=\"dijitTitlePaneTitle\" dojoAttachPoint=\"titleBarNode\">\n\t\t<div class=\"dijitTitlePaneTitleFocus\" dojoAttachPoint=\"focusNode\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"arrowNode\" class=\"dijitArrowNode\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span\n\t\t\t><span dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></span>\n\t\t</div>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\" waiRole=\"presentation\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\" waiRole=\"presentation\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\" id=\"${id}_pane\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc.  Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n"),
-
-       attributeMap: dojo.delegate(dijit.layout.ContentPane.prototype.attributeMap, {
-               title: { node: "titleNode", type: "innerHTML" },
-               tooltip: {node: "focusNode", type: "attribute", attribute: "title"},    // focusNode spans the entire width, titleNode doesn't
-               id:""
-       }),
-
-       postCreate: function(){
-               if(!this.open){
-                       this.hideNode.style.display = this.wipeNode.style.display = "none";
-               }
-               
-               // Hover and focus effect on title bar, except for non-toggleable TitlePanes
-               // This should really be controlled from _setToggleableAttr() but _CssStateMixin
-               // doesn't provide a way to disconnect a previous _trackMouseState() call
-               if(this.toggleable){
-                       this._trackMouseState(this.titleBarNode, "dijitTitlePaneTitle");
-               }
-               this._setCss();
-               dojo.setSelectable(this.titleNode, false);
-
-               // setup open/close animations
-               var hideNode = this.hideNode, wipeNode = this.wipeNode;
-               this._wipeIn = dojo.fx.wipeIn({
-                       node: this.wipeNode,
-                       duration: this.duration,
-                       beforeBegin: function(){
-                               hideNode.style.display="";
-                       }
-               });
-               this._wipeOut = dojo.fx.wipeOut({
-                       node: this.wipeNode,
-                       duration: this.duration,
-                       onEnd: function(){
-                               hideNode.style.display="none";
-                       }
-               });
-               this.inherited(arguments);
-       },
-
-       _setOpenAttr: function(/* Boolean */ open){
-               // summary:
-               //              Hook to make attr("open", boolean) control the open/closed state of the pane.
-               // open: Boolean
-               //              True if you want to open the pane, false if you want to close it.
-               if(this.open !== open){ this.toggle(); }
-               dijit.setWaiState(this.containerNode,"hidden", this.open ? "false" : "true");
-               dijit.setWaiState(this.focusNode, "pressed", this.open ? "true" : "false");
-       },
-
-       _setToggleableAttr: function(/* Boolean */ canToggle){
-               // summary:
-               //              Hook to make attr("canToggle", boolean) work.
-               // canToggle: Boolean
-               //              True to allow user to open/close pane by clicking title bar.
-               this.toggleable = canToggle;
-               dijit.setWaiRole(this.focusNode, canToggle ? "button" : "heading");
-               if(canToggle){
-                       // TODO: if canToggle is switched from true false shouldn't we remove this setting?
-                       dijit.setWaiState(this.focusNode, "controls", this.id+"_pane");
-                       dojo.attr(this.focusNode, "tabIndex", this.tabIndex);
-               }
-               else{
-                       dojo.removeAttr(this.focusNode, "tabIndex");
-               }
-               this._setCss();
-       },
-
-       _setContentAttr: function(content){
-               // summary:
-               //              Hook to make attr("content", ...) work.
-               //              Typically called when an href is loaded.  Our job is to make the animation smooth.
-
-               if(!this.open || !this._wipeOut || this._wipeOut.status() == "playing"){
-                       // we are currently *closing* the pane (or the pane is closed), so just let that continue
-                       this.inherited(arguments);
-               }else{
-                       if(this._wipeIn && this._wipeIn.status() == "playing"){
-                               this._wipeIn.stop();
-                       }
-
-                       // freeze container at current height so that adding new content doesn't make it jump
-                       dojo.marginBox(this.wipeNode, { h: dojo.marginBox(this.wipeNode).h });
-
-                       // add the new content (erasing the old content, if any)
-                       this.inherited(arguments);
-
-                       // call _wipeIn.play() to animate from current height to new height
-                       if(this._wipeIn){
-                               this._wipeIn.play();
-                       }else{
-                               this.hideNode.style.display = "";
-                       }
-               }
-       },
-
-       toggle: function(){
-               // summary:
-               //              Switches between opened and closed state
-               // tags:
-               //              private
-
-               dojo.forEach([this._wipeIn, this._wipeOut], function(animation){
-                       if(animation && animation.status() == "playing"){
-                               animation.stop();
-                       }
-               });
-
-               var anim = this[this.open ? "_wipeOut" : "_wipeIn"]
-               if(anim){
-                       anim.play();
-               }else{
-                       this.hideNode.style.display = this.open ? "" : "none";
-               }
-               this.open =! this.open;
-
-               // load content (if this is the first time we are opening the TitlePane
-               // and content is specified as an href, or href was set when hidden)
-               if(this.open){
-                       this._onShow();
-               }else{
-                       this.onHide();
-               }
-
-               this._setCss();
-       },
-
-       _setCss: function(){
-               // summary:
-               //              Set the open/close css state for the TitlePane
-               // tags:
-               //              private
-
-               var node = this.titleBarNode || this.focusNode;
-
-               if(this._titleBarClass){
-                       dojo.removeClass(node, this._titleBarClass);
-               }
-               this._titleBarClass = "dijit" + (this.toggleable ? "" : "Fixed") + (this.open ? "Open" : "Closed");
-               dojo.addClass(node, this._titleBarClass);
-               this.arrowNodeInner.innerHTML = this.open ? "-" : "+";
-       },
-
-       _onTitleKey: function(/*Event*/ e){
-               // summary:
-               //              Handler for when user hits a key
-               // tags:
-               //              private
-
-               if(e.charOrCode == dojo.keys.ENTER || e.charOrCode == ' '){
-                       if(this.toggleable){
-                               this.toggle();
-                       }
-                       dojo.stopEvent(e);
-               }else if(e.charOrCode == dojo.keys.DOWN_ARROW && this.open){
-                       this.containerNode.focus();
-                       e.preventDefault();
-               }
-       },
-
-       _onTitleClick: function(){
-               // summary:
-               //              Handler when user clicks the title bar
-               // tags:
-               //              private
-               if(this.toggleable){
-                       this.toggle();
-               }
-       },
-
-       setTitle: function(/*String*/ title){
-               // summary:
-               //              Deprecated.  Use set('title', ...) instead.
-               // tags:
-               //              deprecated
-               dojo.deprecated("dijit.TitlePane.setTitle() is deprecated.  Use set('title', ...) instead.", "", "2.0");
-               this.set("title", title);
-       }
-});
-
-}
-
-if(!dojo._hasResource["dojo.DeferredList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.DeferredList"] = true;
-dojo.provide("dojo.DeferredList");
-dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){
-       // summary:
-       //              Provides event handling for a group of Deferred objects.
-       // description:
-       //              DeferredList takes an array of existing deferreds and returns a new deferred of its own
-       //              this new deferred will typically have its callback fired when all of the deferreds in
-       //              the given list have fired their own deferreds.  The parameters `fireOnOneCallback` and
-       //              fireOnOneErrback, will fire before all the deferreds as appropriate
-       //
-       //      list:
-       //              The list of deferreds to be synchronizied with this DeferredList
-       //      fireOnOneCallback:
-       //              Will cause the DeferredLists callback to be fired as soon as any
-       //              of the deferreds in its list have been fired instead of waiting until
-       //              the entire list has finished
-       //      fireonOneErrback:
-       //              Will cause the errback to fire upon any of the deferreds errback
-       //      canceller:
-       //              A deferred canceller function, see dojo.Deferred
-       var resultList = [];
-       dojo.Deferred.call(this);
-       var self = this;
-       if(list.length === 0 && !fireOnOneCallback){
-               this.resolve([0, []]);
-       }
-       var finished = 0;
-       dojo.forEach(list, function(item, i){
-               item.then(function(result){
-                       if(fireOnOneCallback){
-                               self.resolve([i, result]);
-                       }else{
-                               addResult(true, result);
-                       }
-               },function(error){
-                       if(fireOnOneErrback){
-                               self.reject(error);
-                       }else{
-                               addResult(false, error);
-                       }
-                       if(consumeErrors){
-                               return null;
-                       }
-                       throw error;
-               });
-               function addResult(succeeded, result){
-                       resultList[i] = [succeeded, result];
-                       finished++;
-                       if(finished === list.length){
-                               self.resolve(resultList);
-                       }
-                       
-               }
-       });
-};
-dojo.DeferredList.prototype = new dojo.Deferred();
-
-dojo.DeferredList.prototype.gatherResults= function(deferredList){
-       // summary:     
-       //      Gathers the results of the deferreds for packaging
-       //      as the parameters to the Deferred Lists' callback
-
-       var d = new dojo.DeferredList(deferredList, false, true, false);
-       d.addCallback(function(results){
-               var ret = [];
-               dojo.forEach(results, function(result){
-                       ret.push(result[1]);
-               });
-               return ret;
-       });
-       return d;
-};
-
-}
-
-if(!dojo._hasResource["dojo.cookie"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.cookie"] = true;
-dojo.provide("dojo.cookie");
-
-
-
-/*=====
-dojo.__cookieProps = function(){
-       //      expires: Date|String|Number?
-       //              If a number, the number of days from today at which the cookie
-       //              will expire. If a date, the date past which the cookie will expire.
-       //              If expires is in the past, the cookie will be deleted.
-       //              If expires is omitted or is 0, the cookie will expire when the browser closes. << FIXME: 0 seems to disappear right away? FF3.
-       //      path: String?
-       //              The path to use for the cookie.
-       //      domain: String?
-       //              The domain to use for the cookie.
-       //      secure: Boolean?
-       //              Whether to only send the cookie on secure connections
-       this.expires = expires;
-       this.path = path;
-       this.domain = domain;
-       this.secure = secure;
-}
-=====*/
-
-
-dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/props){
-       //      summary: 
-       //              Get or set a cookie.
-       //      description:
-       //              If one argument is passed, returns the value of the cookie
-       //              For two or more arguments, acts as a setter.
-       //      name:
-       //              Name of the cookie
-       //      value:
-       //              Value for the cookie
-       //      props: 
-       //              Properties for the cookie
-       //      example:
-       //              set a cookie with the JSON-serialized contents of an object which
-       //              will expire 5 days from now:
-       //      |       dojo.cookie("configObj", dojo.toJson(config), { expires: 5 });
-       //      
-       //      example:
-       //              de-serialize a cookie back into a JavaScript object:
-       //      |       var config = dojo.fromJson(dojo.cookie("configObj"));
-       //      
-       //      example:
-       //              delete a cookie:
-       //      |       dojo.cookie("configObj", null, {expires: -1});
-       var c = document.cookie;
-       if(arguments.length == 1){
-               var matches = c.match(new RegExp("(?:^|; )" + dojo.regexp.escapeString(name) + "=([^;]*)"));
-               return matches ? decodeURIComponent(matches[1]) : undefined; // String or undefined
-       }else{
-               props = props || {};
-// FIXME: expires=0 seems to disappear right away, not on close? (FF3)  Change docs?
-               var exp = props.expires;
-               if(typeof exp == "number"){ 
-                       var d = new Date();
-                       d.setTime(d.getTime() + exp*24*60*60*1000);
-                       exp = props.expires = d;
-               }
-               if(exp && exp.toUTCString){ props.expires = exp.toUTCString(); }
-
-               value = encodeURIComponent(value);
-               var updatedCookie = name + "=" + value, propName;
-               for(propName in props){
-                       updatedCookie += "; " + propName;
-                       var propValue = props[propName];
-                       if(propValue !== true){ updatedCookie += "=" + propValue; }
-               }
-               document.cookie = updatedCookie;
-       }
-};
-
-dojo.cookie.isSupported = function(){
-       //      summary:
-       //              Use to determine if the current browser supports cookies or not.
-       //              
-       //              Returns true if user allows cookies.
-       //              Returns false if user doesn't allow cookies.
-
-       if(!("cookieEnabled" in navigator)){
-               this("__djCookieTest__", "CookiesAllowed");
-               navigator.cookieEnabled = this("__djCookieTest__") == "CookiesAllowed";
-               if(navigator.cookieEnabled){
-                       this("__djCookieTest__", "", {expires: -1});
-               }
-       }
-       return navigator.cookieEnabled;
-};
-
-}
-
-if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree.TreeStoreModel"] = true;
-dojo.provide("dijit.tree.TreeStoreModel");
-
-dojo.declare(
-               "dijit.tree.TreeStoreModel",
-               null,
-       {
-               // summary:
-               //              Implements dijit.Tree.model connecting to a store with a single
-               //              root item.  Any methods passed into the constructor will override
-               //              the ones defined here.
-
-               // store: dojo.data.Store
-               //              Underlying store
-               store: null,
-
-               // childrenAttrs: String[]
-               //              One or more attribute names (attributes in the dojo.data item) that specify that item's children
-               childrenAttrs: ["children"],
-
-               // newItemIdAttr: String
-               //              Name of attribute in the Object passed to newItem() that specifies the id.
-               //
-               //              If newItemIdAttr is set then it's used when newItem() is called to see if an
-               //              item with the same id already exists, and if so just links to the old item
-               //              (so that the old item ends up with two parents).
-               //
-               //              Setting this to null or "" will make every drop create a new item.
-               newItemIdAttr: "id",
-
-               // labelAttr: String
-               //              If specified, get label for tree node from this attribute, rather
-               //              than by calling store.getLabel()
-               labelAttr: "",
-
-               // root: [readonly] dojo.data.Item
-               //              Pointer to the root item (read only, not a parameter)
-               root: null,
-
-               // query: anything
-               //              Specifies datastore query to return the root item for the tree.
-               //              Must only return a single item.   Alternately can just pass in pointer
-               //              to root item.
-               // example:
-               //      |       {id:'ROOT'}
-               query: null,
-
-               // deferItemLoadingUntilExpand: Boolean
-               //              Setting this to true will cause the TreeStoreModel to defer calling loadItem on nodes
-               //              until they are expanded. This allows for lazying loading where only one
-               //              loadItem (and generally one network call, consequently) per expansion
-               //              (rather than one for each child).
-               //              This relies on partial loading of the children items; each children item of a
-               //              fully loaded item should contain the label and info about having children.
-               deferItemLoadingUntilExpand: false,
-
-               constructor: function(/* Object */ args){
-                       // summary:
-                       //              Passed the arguments listed above (store, etc)
-                       // tags:
-                       //              private
-
-                       dojo.mixin(this, args);
-
-                       this.connects = [];
-
-                       var store = this.store;
-                       if(!store.getFeatures()['dojo.data.api.Identity']){
-                               throw new Error("dijit.Tree: store must support dojo.data.Identity");
-                       }
-
-                       // if the store supports Notification, subscribe to the notification events
-                       if(store.getFeatures()['dojo.data.api.Notification']){
-                               this.connects = this.connects.concat([
-                                       dojo.connect(store, "onNew", this, "onNewItem"),
-                                       dojo.connect(store, "onDelete", this, "onDeleteItem"),
-                                       dojo.connect(store, "onSet", this, "onSetItem")
-                               ]);
-                       }
-               },
-
-               destroy: function(){
-                       dojo.forEach(this.connects, dojo.disconnect);
-                       // TODO: should cancel any in-progress processing of getRoot(), getChildren()
-               },
-
-               // =======================================================================
-               // Methods for traversing hierarchy
-
-               getRoot: function(onItem, onError){
-                       // summary:
-                       //              Calls onItem with the root item for the tree, possibly a fabricated item.
-                       //              Calls onError on error.
-                       if(this.root){
-                               onItem(this.root);
-                       }else{
-                               this.store.fetch({
-                                       query: this.query,
-                                       onComplete: dojo.hitch(this, function(items){
-                                               if(items.length != 1){
-                                                       throw new Error(this.declaredClass + ": query " + dojo.toJson(this.query) + " returned " + items.length +
-                                                               " items, but must return exactly one item");
-                                               }
-                                               this.root = items[0];
-                                               onItem(this.root);
-                                       }),
-                                       onError: onError
-                               });
-                       }
-               },
-
-               mayHaveChildren: function(/*dojo.data.Item*/ item){
-                       // summary:
-                       //              Tells if an item has or may have children.  Implementing logic here
-                       //              avoids showing +/- expando icon for nodes that we know don't have children.
-                       //              (For efficiency reasons we may not want to check if an element actually
-                       //              has children until user clicks the expando node)
-                       return dojo.some(this.childrenAttrs, function(attr){
-                               return this.store.hasAttribute(item, attr);
-                       }, this);
-               },
-
-               getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete, /*function*/ onError){
-                       // summary:
-                       //              Calls onComplete() with array of child items of given parent item, all loaded.
-
-                       var store = this.store;
-                       if(!store.isItemLoaded(parentItem)){
-                               // The parent is not loaded yet, we must be in deferItemLoadingUntilExpand
-                               // mode, so we will load it and just return the children (without loading each
-                               // child item)
-                               var getChildren = dojo.hitch(this, arguments.callee);
-                               store.loadItem({
-                                       item: parentItem,
-                                       onItem: function(parentItem){
-                                               getChildren(parentItem, onComplete, onError);
-                                       },
-                                       onError: onError
-                               });
-                               return;
-                       }
-                       // get children of specified item
-                       var childItems = [];
-                       for(var i=0; i<this.childrenAttrs.length; i++){
-                               var vals = store.getValues(parentItem, this.childrenAttrs[i]);
-                               childItems = childItems.concat(vals);
-                       }
-
-                       // count how many items need to be loaded
-                       var _waitCount = 0;
-                       if(!this.deferItemLoadingUntilExpand){
-                               dojo.forEach(childItems, function(item){ if(!store.isItemLoaded(item)){ _waitCount++; } });
-                       }
-
-                       if(_waitCount == 0){
-                               // all items are already loaded (or we aren't loading them).  proceed...
-                               onComplete(childItems);
-                       }else{
-                               // still waiting for some or all of the items to load
-                               dojo.forEach(childItems, function(item, idx){
-                                       if(!store.isItemLoaded(item)){
-                                               store.loadItem({
-                                                       item: item,
-                                                       onItem: function(item){
-                                                               childItems[idx] = item;
-                                                               if(--_waitCount == 0){
-                                                                       // all nodes have been loaded, send them to the tree
-                                                                       onComplete(childItems);
-                                                               }
-                                                       },
-                                                       onError: onError
-                                               });
-                                       }
-                               });
-                       }
-               },
-
-               // =======================================================================
-               // Inspecting items
-
-               isItem: function(/* anything */ something){
-                       return this.store.isItem(something);    // Boolean
-               },
-
-               fetchItemByIdentity: function(/* object */ keywordArgs){
-                       this.store.fetchItemByIdentity(keywordArgs);
-               },
-
-               getIdentity: function(/* item */ item){
-                       return this.store.getIdentity(item);    // Object
-               },
-
-               getLabel: function(/*dojo.data.Item*/ item){
-                       // summary:
-                       //              Get the label for an item
-                       if(this.labelAttr){
-                               return this.store.getValue(item,this.labelAttr);        // String
-                       }else{
-                               return this.store.getLabel(item);       // String
-                       }
-               },
-
-               // =======================================================================
-               // Write interface
-
-               newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
-                       // summary:
-                       //              Creates a new item.   See `dojo.data.api.Write` for details on args.
-                       //              Used in drag & drop when item from external source dropped onto tree.
-                       // description:
-                       //              Developers will need to override this method if new items get added
-                       //              to parents with multiple children attributes, in order to define which
-                       //              children attribute points to the new item.
-
-                       var pInfo = {parent: parent, attribute: this.childrenAttrs[0], insertIndex: insertIndex};
-
-                       if(this.newItemIdAttr && args[this.newItemIdAttr]){
-                               // Maybe there's already a corresponding item in the store; if so, reuse it.
-                               this.fetchItemByIdentity({identity: args[this.newItemIdAttr], scope: this, onItem: function(item){
-                                       if(item){
-                                               // There's already a matching item in store, use it
-                                               this.pasteItem(item, null, parent, true, insertIndex);
-                                       }else{
-                                               // Create new item in the tree, based on the drag source.
-                                               this.store.newItem(args, pInfo);
-                                       }
-                               }});
-                       }else{
-                               // [as far as we know] there is no id so we must assume this is a new item
-                               this.store.newItem(args, pInfo);
-                       }
-               },
-
-               pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
-                       // summary:
-                       //              Move or copy an item from one parent item to another.
-                       //              Used in drag & drop
-                       var store = this.store,
-                               parentAttr = this.childrenAttrs[0];     // name of "children" attr in parent item
-
-                       // remove child from source item, and record the attribute that child occurred in
-                       if(oldParentItem){
-                               dojo.forEach(this.childrenAttrs, function(attr){
-                                       if(store.containsValue(oldParentItem, attr, childItem)){
-                                               if(!bCopy){
-                                                       var values = dojo.filter(store.getValues(oldParentItem, attr), function(x){
-                                                               return x != childItem;
-                                                       });
-                                                       store.setValues(oldParentItem, attr, values);
-                                               }
-                                               parentAttr = attr;
-                                       }
-                               });
-                       }
-
-                       // modify target item's children attribute to include this item
-                       if(newParentItem){
-                               if(typeof insertIndex == "number"){
-                                       // call slice() to avoid modifying the original array, confusing the data store
-                                       var childItems = store.getValues(newParentItem, parentAttr).slice();
-                                       childItems.splice(insertIndex, 0, childItem);
-                                       store.setValues(newParentItem, parentAttr, childItems);
-                               }else{
-                                       store.setValues(newParentItem, parentAttr,
-                                               store.getValues(newParentItem, parentAttr).concat(childItem));
-                               }
-                       }
-               },
-
-               // =======================================================================
-               // Callbacks
-
-               onChange: function(/*dojo.data.Item*/ item){
-                       // summary:
-                       //              Callback whenever an item has changed, so that Tree
-                       //              can update the label, icon, etc.   Note that changes
-                       //              to an item's children or parent(s) will trigger an
-                       //              onChildrenChange() so you can ignore those changes here.
-                       // tags:
-                       //              callback
-               },
-
-               onChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
-                       // summary:
-                       //              Callback to do notifications about new, updated, or deleted items.
-                       // tags:
-                       //              callback
-               },
-
-               onDelete: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
-                       // summary:
-                       //              Callback when an item has been deleted.
-                       // description:
-                       //              Note that there will also be an onChildrenChange() callback for the parent
-                       //              of this item.
-                       // tags:
-                       //              callback
-               },
-
-               // =======================================================================
-               // Events from data store
-
-               onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
-                       // summary:
-                       //              Handler for when new items appear in the store, either from a drop operation
-                       //              or some other way.   Updates the tree view (if necessary).
-                       // description:
-                       //              If the new item is a child of an existing item,
-                       //              calls onChildrenChange() with the new list of children
-                       //              for that existing item.
-                       //
-                       // tags:
-                       //              extension
-
-                       // We only care about the new item if it has a parent that corresponds to a TreeNode
-                       // we are currently displaying
-                       if(!parentInfo){
-                               return;
-                       }
-
-                       // Call onChildrenChange() on parent (ie, existing) item with new list of children
-                       // In the common case, the new list of children is simply parentInfo.newValue or
-                       // [ parentInfo.newValue ], although if items in the store has multiple
-                       // child attributes (see `childrenAttr`), then it's a superset of parentInfo.newValue,
-                       // so call getChildren() to be sure to get right answer.
-                       this.getChildren(parentInfo.item, dojo.hitch(this, function(children){
-                               this.onChildrenChange(parentInfo.item, children);
-                       }));
-               },
-
-               onDeleteItem: function(/*Object*/ item){
-                       // summary:
-                       //              Handler for delete notifications from underlying store
-                       this.onDelete(item);
-               },
-
-               onSetItem: function(/* item */ item,
-                                               /* attribute-name-string */ attribute,
-                                               /* object | array */ oldValue,
-                                               /* object | array */ newValue){
-                       // summary:
-                       //              Updates the tree view according to changes in the data store.
-                       // description:
-                       //              Handles updates to an item's children by calling onChildrenChange(), and
-                       //              other updates to an item by calling onChange().
-                       //
-                       //              See `onNewItem` for more details on handling updates to an item's children.
-                       // tags:
-                       //              extension
-
-                       if(dojo.indexOf(this.childrenAttrs, attribute) != -1){
-                               // item's children list changed
-                               this.getChildren(item, dojo.hitch(this, function(children){
-                                       // See comments in onNewItem() about calling getChildren()
-                                       this.onChildrenChange(item, children);
-                               }));
-                       }else{
-                               // item's label/icon/etc. changed.
-                               this.onChange(item);
-                       }
-               }
-       });
-
-
-
-}
-
-if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree.ForestStoreModel"] = true;
-dojo.provide("dijit.tree.ForestStoreModel");
-
-
-
-dojo.declare("dijit.tree.ForestStoreModel", dijit.tree.TreeStoreModel, {
-       // summary:
-       //              Interface between Tree and a dojo.store that doesn't have a root item,
-       //              i.e. has multiple "top level" items.
-       //
-       // description
-       //              Use this class to wrap a dojo.store, making all the items matching the specified query
-       //              appear as children of a fabricated "root item".  If no query is specified then all the
-       //              items returned by fetch() on the underlying store become children of the root item.
-       //              It allows dijit.Tree to assume a single root item, even if the store doesn't have one.
-
-       // Parameters to constructor
-
-       // rootId: String
-       //              ID of fabricated root item
-       rootId: "$root$",
-
-       // rootLabel: String
-       //              Label of fabricated root item
-       rootLabel: "ROOT",
-
-       // query: String
-       //              Specifies the set of children of the root item.
-       // example:
-       //      |       {type:'continent'}
-       query: null,
-
-       // End of parameters to constructor
-
-       constructor: function(params){
-               // summary:
-               //              Sets up variables, etc.
-               // tags:
-               //              private
-
-               // Make dummy root item
-               this.root = {
-                       store: this,
-                       root: true,
-                       id: params.rootId,
-                       label: params.rootLabel,
-                       children: params.rootChildren   // optional param
-               };
-       },
-
-       // =======================================================================
-       // Methods for traversing hierarchy
-
-       mayHaveChildren: function(/*dojo.data.Item*/ item){
-               // summary:
-               //              Tells if an item has or may have children.  Implementing logic here
-               //              avoids showing +/- expando icon for nodes that we know don't have children.
-               //              (For efficiency reasons we may not want to check if an element actually
-               //              has children until user clicks the expando node)
-               // tags:
-               //              extension
-               return item === this.root || this.inherited(arguments);
-       },
-
-       getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ callback, /*function*/ onError){
-               // summary:
-               //              Calls onComplete() with array of child items of given parent item, all loaded.
-               if(parentItem === this.root){
-                       if(this.root.children){
-                               // already loaded, just return
-                               callback(this.root.children);
-                       }else{
-                               this.store.fetch({
-                                       query: this.query,
-                                       onComplete: dojo.hitch(this, function(items){
-                                               this.root.children = items;
-                                               callback(items);
-                                       }),
-                                       onError: onError
-                               });
-                       }
-               }else{
-                       this.inherited(arguments);
-               }
-       },
-
-       // =======================================================================
-       // Inspecting items
-
-       isItem: function(/* anything */ something){
-               return (something === this.root) ? true : this.inherited(arguments);
-       },
-
-       fetchItemByIdentity: function(/* object */ keywordArgs){
-               if(keywordArgs.identity == this.root.id){
-                       var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
-                       if(keywordArgs.onItem){
-                               keywordArgs.onItem.call(scope, this.root);
-                       }
-               }else{
-                       this.inherited(arguments);
-               }
-       },
-
-       getIdentity: function(/* item */ item){
-               return (item === this.root) ? this.root.id : this.inherited(arguments);
-       },
-
-       getLabel: function(/* item */ item){
-               return  (item === this.root) ? this.root.label : this.inherited(arguments);
-       },
-
-       // =======================================================================
-       // Write interface
-
-       newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
-               // summary:
-               //              Creates a new item.   See dojo.data.api.Write for details on args.
-               //              Used in drag & drop when item from external source dropped onto tree.
-               if(parent === this.root){
-                       this.onNewRootItem(args);
-                       return this.store.newItem(args);
-               }else{
-                       return this.inherited(arguments);
-               }
-       },
-
-       onNewRootItem: function(args){
-               // summary:
-               //              User can override this method to modify a new element that's being
-               //              added to the root of the tree, for example to add a flag like root=true
-       },
-
-       pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
-               // summary:
-               //              Move or copy an item from one parent item to another.
-               //              Used in drag & drop
-               if(oldParentItem === this.root){
-                       if(!bCopy){
-                               // It's onLeaveRoot()'s responsibility to modify the item so it no longer matches
-                               // this.query... thus triggering an onChildrenChange() event to notify the Tree
-                               // that this element is no longer a child of the root node
-                               this.onLeaveRoot(childItem);
-                       }
-               }
-               dijit.tree.TreeStoreModel.prototype.pasteItem.call(this, childItem,
-                       oldParentItem === this.root ? null : oldParentItem,
-                       newParentItem === this.root ? null : newParentItem,
-                       bCopy,
-                       insertIndex
-               );
-               if(newParentItem === this.root){
-                       // It's onAddToRoot()'s responsibility to modify the item so it matches
-                       // this.query... thus triggering an onChildrenChange() event to notify the Tree
-                       // that this element is now a child of the root node
-                       this.onAddToRoot(childItem);
-               }
-       },
-
-       // =======================================================================
-       // Handling for top level children
-
-       onAddToRoot: function(/* item */ item){
-               // summary:
-               //              Called when item added to root of tree; user must override this method
-               //              to modify the item so that it matches the query for top level items
-               // example:
-               //      |       store.setValue(item, "root", true);
-               // tags:
-               //              extension
-               console.log(this, ": item ", item, " added to root");
-       },
-
-       onLeaveRoot: function(/* item */ item){
-               // summary:
-               //              Called when item removed from root of tree; user must override this method
-               //              to modify the item so it doesn't match the query for top level items
-               // example:
-               //      |       store.unsetAttribute(item, "root");
-               // tags:
-               //              extension
-               console.log(this, ": item ", item, " removed from root");
-       },
-
-       // =======================================================================
-       // Events from data store
-
-       _requeryTop: function(){
-               // reruns the query for the children of the root node,
-               // sending out an onSet notification if those children have changed
-               var oldChildren = this.root.children || [];
-               this.store.fetch({
-                       query: this.query,
-                       onComplete: dojo.hitch(this, function(newChildren){
-                               this.root.children = newChildren;
-
-                               // If the list of children or the order of children has changed...
-                               if(oldChildren.length != newChildren.length ||
-                                       dojo.some(oldChildren, function(item, idx){ return newChildren[idx] != item;})){
-                                       this.onChildrenChange(this.root, newChildren);
-                               }
-                       })
-               });
-       },
-
-       onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
-               // summary:
-               //              Handler for when new items appear in the store.  Developers should override this
-               //              method to be more efficient based on their app/data.
-               // description:
-               //              Note that the default implementation requeries the top level items every time
-               //              a new item is created, since any new item could be a top level item (even in
-               //              addition to being a child of another item, since items can have multiple parents).
-               //
-               //              Developers can override this function to do something more efficient if they can
-               //              detect which items are possible top level items (based on the item and the
-               //              parentInfo parameters).  Often all top level items have parentInfo==null, but
-               //              that will depend on which store you use and what your data is like.
-               // tags:
-               //              extension
-               this._requeryTop();
-
-               this.inherited(arguments);
-       },
-
-       onDeleteItem: function(/*Object*/ item){
-               // summary:
-               //              Handler for delete notifications from underlying store
-
-               // check if this was a child of root, and if so send notification that root's children
-               // have changed
-               if(dojo.indexOf(this.root.children, item) != -1){
-                       this._requeryTop();
-               }
-
-               this.inherited(arguments);
-       }
-});
-
-
-
-}
-
-if(!dojo._hasResource["dijit.Tree"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Tree"] = true;
-dojo.provide("dijit.Tree");
-
-
-
-
-
-
-
-
-
-
-
-dojo.declare(
-       "dijit._TreeNode",
-       [dijit._Widget, dijit._Templated, dijit._Container, dijit._Contained, dijit._CssStateMixin],
-{
-       // summary:
-       //              Single node within a tree.   This class is used internally
-       //              by Tree and should not be accessed directly.
-       // tags:
-       //              private
-
-       // item: dojo.data.Item
-       //              the dojo.data entry this tree represents
-       item: null,
-
-       // isTreeNode: [protected] Boolean
-       //              Indicates that this is a TreeNode.   Used by `dijit.Tree` only,
-       //              should not be accessed directly.
-       isTreeNode: true,
-
-       // label: String
-       //              Text of this tree node
-       label: "",
-
-       // isExpandable: [private] Boolean
-       //              This node has children, so show the expando node (+ sign)
-       isExpandable: null,
-
-       // isExpanded: [readonly] Boolean
-       //              This node is currently expanded (ie, opened)
-       isExpanded: false,
-
-       // state: [private] String
-       //              Dynamic loading-related stuff.
-       //              When an empty folder node appears, it is "UNCHECKED" first,
-       //              then after dojo.data query it becomes "LOADING" and, finally "LOADED"
-       state: "UNCHECKED",
-
-       templateString: dojo.cache("dijit", "templates/TreeNode.html", "<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),
-
-       baseClass: "dijitTreeNode",
-
-       // For hover effect for tree node, and focus effect for label
-       cssStateNodes: {
-               rowNode: "dijitTreeRow",
-               labelNode: "dijitTreeLabel"
-       },
-
-       attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-               label: {node: "labelNode", type: "innerText"},
-               tooltip: {node: "rowNode", type: "attribute", attribute: "title"}
-       }),
-
-       postCreate: function(){
-               this.inherited(arguments);
-
-               // set expand icon for leaf
-               this._setExpando();
-
-               // set icon and label class based on item
-               this._updateItemClasses(this.item);
-
-               if(this.isExpandable){
-                       dijit.setWaiState(this.labelNode, "expanded", this.isExpanded);
-               }
-       },
-
-       _setIndentAttr: function(indent){
-               // summary:
-               //              Tell this node how many levels it should be indented
-               // description:
-               //              0 for top level nodes, 1 for their children, 2 for their
-               //              grandchildren, etc.
-               this.indent = indent;
-
-               // Math.max() is to prevent negative padding on hidden root node (when indent == -1)
-               var pixels = (Math.max(indent, 0) * this.tree._nodePixelIndent) + "px";
-
-               dojo.style(this.domNode, "backgroundPosition",  pixels + " 0px");
-               dojo.style(this.rowNode, this.isLeftToRight() ? "paddingLeft" : "paddingRight", pixels);
-
-               dojo.forEach(this.getChildren(), function(child){
-                       child.set("indent", indent+1);
-               });
-       },
-
-       markProcessing: function(){
-               // summary:
-               //              Visually denote that tree is loading data, etc.
-               // tags:
-               //              private
-               this.state = "LOADING";
-               this._setExpando(true);
-       },
-
-       unmarkProcessing: function(){
-               // summary:
-               //              Clear markup from markProcessing() call
-               // tags:
-               //              private
-               this._setExpando(false);
-       },
-
-       _updateItemClasses: function(item){
-               // summary:
-               //              Set appropriate CSS classes for icon and label dom node
-               //              (used to allow for item updates to change respective CSS)
-               // tags:
-               //              private
-               var tree = this.tree, model = tree.model;
-               if(tree._v10Compat && item === model.root){
-                       // For back-compat with 1.0, need to use null to specify root item (TODO: remove in 2.0)
-                       item = null;
-               }
-               this._applyClassAndStyle(item, "icon", "Icon");
-               this._applyClassAndStyle(item, "label", "Label");
-               this._applyClassAndStyle(item, "row", "Row");
-       },
-
-       _applyClassAndStyle: function(item, lower, upper){
-               // summary:
-               //              Set the appropriate CSS classes and styles for labels, icons and rows.
-               //
-               // item:
-               //              The data item.
-               //
-               // lower:
-               //              The lower case attribute to use, e.g. 'icon', 'label' or 'row'.
-               //
-               // upper:
-               //              The upper case attribute to use, e.g. 'Icon', 'Label' or 'Row'.
-               //
-               // tags:
-               //              private
-
-               var clsName = "_" + lower + "Class";
-               var nodeName = lower + "Node";
-
-               if(this[clsName]){
-                       dojo.removeClass(this[nodeName], this[clsName]);
-               }
-               this[clsName] = this.tree["get" + upper + "Class"](item, this.isExpanded);
-               if(this[clsName]){
-                       dojo.addClass(this[nodeName], this[clsName]);
-               }
-               dojo.style(this[nodeName], this.tree["get" + upper + "Style"](item, this.isExpanded) || {});
-       },
-
-       _updateLayout: function(){
-               // summary:
-               //              Set appropriate CSS classes for this.domNode
-               // tags:
-               //              private
-               var parent = this.getParent();
-               if(!parent || parent.rowNode.style.display == "none"){
-                       /* if we are hiding the root node then make every first level child look like a root node */
-                       dojo.addClass(this.domNode, "dijitTreeIsRoot");
-               }else{
-                       dojo.toggleClass(this.domNode, "dijitTreeIsLast", !this.getNextSibling());
-               }
-       },
-
-       _setExpando: function(/*Boolean*/ processing){
-               // summary:
-               //              Set the right image for the expando node
-               // tags:
-               //              private
-
-               var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened",
-                                               "dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"],
-                       _a11yStates = ["*","-","+","*"],
-                       idx = processing ? 0 : (this.isExpandable ?     (this.isExpanded ? 1 : 2) : 3);
-
-               // apply the appropriate class to the expando node
-               dojo.removeClass(this.expandoNode, styles);
-               dojo.addClass(this.expandoNode, styles[idx]);
-
-               // provide a non-image based indicator for images-off mode
-               this.expandoNodeText.innerHTML = _a11yStates[idx];
-
-       },
-
-       expand: function(){
-               // summary:
-               //              Show my children
-               // returns:
-               //              Deferred that fires when expansion is complete
-
-               // If there's already an expand in progress or we are already expanded, just return
-               if(this._expandDeferred){
-                       return this._expandDeferred;            // dojo.Deferred
-               }
-
-               // cancel in progress collapse operation
-               this._wipeOut && this._wipeOut.stop();
-
-               // All the state information for when a node is expanded, maybe this should be
-               // set when the animation completes instead
-               this.isExpanded = true;
-               dijit.setWaiState(this.labelNode, "expanded", "true");
-               dijit.setWaiRole(this.containerNode, "group");
-               dojo.addClass(this.contentNode,'dijitTreeContentExpanded');
-               this._setExpando();
-               this._updateItemClasses(this.item);
-               if(this == this.tree.rootNode){
-                       dijit.setWaiState(this.tree.domNode, "expanded", "true");
-               }
-
-               var def,
-                       wipeIn = dojo.fx.wipeIn({
-                               node: this.containerNode, duration: dijit.defaultDuration,
-                               onEnd: function(){
-                                       def.callback(true);
-                               }
-                       });
-
-               // Deferred that fires when expand is complete
-               def = (this._expandDeferred = new dojo.Deferred(function(){
-                       // Canceller
-                       wipeIn.stop();
-               }));
-
-               wipeIn.play();
-
-               return def;             // dojo.Deferred
-       },
-
-       collapse: function(){
-               // summary:
-               //              Collapse this node (if it's expanded)
-
-               if(!this.isExpanded){ return; }
-
-               // cancel in progress expand operation
-               if(this._expandDeferred){
-                       this._expandDeferred.cancel();
-                       delete this._expandDeferred;
-               }
-
-               this.isExpanded = false;
-               dijit.setWaiState(this.labelNode, "expanded", "false");
-               if(this == this.tree.rootNode){
-                       dijit.setWaiState(this.tree.domNode, "expanded", "false");
-               }
-               dojo.removeClass(this.contentNode,'dijitTreeContentExpanded');
-               this._setExpando();
-               this._updateItemClasses(this.item);
-
-               if(!this._wipeOut){
-                       this._wipeOut = dojo.fx.wipeOut({
-                               node: this.containerNode, duration: dijit.defaultDuration
-                       });
-               }
-               this._wipeOut.play();
-       },
-
-       // indent: Integer
-       //              Levels from this node to the root node
-       indent: 0,
-
-       setChildItems: function(/* Object[] */ items){
-               // summary:
-               //              Sets the child items of this node, removing/adding nodes
-               //              from current children to match specified items[] array.
-               //              Also, if this.persist == true, expands any children that were previously
-               //              opened.
-               // returns:
-               //              Deferred object that fires after all previously opened children
-               //              have been expanded again (or fires instantly if there are no such children).
-
-               var tree = this.tree,
-                       model = tree.model,
-                       defs = [];      // list of deferreds that need to fire before I am complete
-
-
-               // Orphan all my existing children.
-               // If items contains some of the same items as before then we will reattach them.
-               // Don't call this.removeChild() because that will collapse the tree etc.
-               dojo.forEach(this.getChildren(), function(child){
-                       dijit._Container.prototype.removeChild.call(this, child);
-               }, this);
-
-               this.state = "LOADED";
-
-               if(items && items.length > 0){
-                       this.isExpandable = true;
-
-                       // Create _TreeNode widget for each specified tree node, unless one already
-                       // exists and isn't being used (presumably it's from a DnD move and was recently
-                       // released
-                       dojo.forEach(items, function(item){
-                               var id = model.getIdentity(item),
-                                       existingNodes = tree._itemNodesMap[id],
-                                       node;
-                               if(existingNodes){
-                                       for(var i=0;i<existingNodes.length;i++){
-                                               if(existingNodes[i] && !existingNodes[i].getParent()){
-                                                       node = existingNodes[i];
-                                                       node.set('indent', this.indent+1);
-                                                       break;
-                                               }
-                                       }
-                               }
-                               if(!node){
-                                       node = this.tree._createTreeNode({
-                                                       item: item,
-                                                       tree: tree,
-                                                       isExpandable: model.mayHaveChildren(item),
-                                                       label: tree.getLabel(item),
-                                                       tooltip: tree.getTooltip(item),
-                                                       dir: tree.dir,
-                                                       lang: tree.lang,
-                                                       indent: this.indent + 1
-                                               });
-                                       if(existingNodes){
-                                               existingNodes.push(node);
-                                       }else{
-                                               tree._itemNodesMap[id] = [node];
-                                       }
-                               }
-                               this.addChild(node);
-
-                               // If node was previously opened then open it again now (this may trigger
-                               // more data store accesses, recursively)
-                               if(this.tree.autoExpand || this.tree._state(item)){
-                                       defs.push(tree._expandNode(node));
-                               }
-                       }, this);
-
-                       // note that updateLayout() needs to be called on each child after
-                       // _all_ the children exist
-                       dojo.forEach(this.getChildren(), function(child, idx){
-                               child._updateLayout();
-                       });
-               }else{
-                       this.isExpandable=false;
-               }
-
-               if(this._setExpando){
-                       // change expando to/from dot or + icon, as appropriate
-                       this._setExpando(false);
-               }
-
-               // Set leaf icon or folder icon, as appropriate
-               this._updateItemClasses(this.item);
-
-               // On initial tree show, make the selected TreeNode as either the root node of the tree,
-               // or the first child, if the root node is hidden
-               if(this == tree.rootNode){
-                       var fc = this.tree.showRoot ? this : this.getChildren()[0];
-                       if(fc){
-                               fc.setFocusable(true);
-                               tree.lastFocused = fc;
-                       }else{
-                               // fallback: no nodes in tree so focus on Tree <div> itself
-                               tree.domNode.setAttribute("tabIndex", "0");
-                       }
-               }
-
-               return new dojo.DeferredList(defs);     // dojo.Deferred
-       },
-
-       removeChild: function(/* treeNode */ node){
-               this.inherited(arguments);
-
-               var children = this.getChildren();
-               if(children.length == 0){
-                       this.isExpandable = false;
-                       this.collapse();
-               }
-
-               dojo.forEach(children, function(child){
-                               child._updateLayout();
-               });
-       },
-
-       makeExpandable: function(){
-               // summary:
-               //              if this node wasn't already showing the expando node,
-               //              turn it into one and call _setExpando()
-
-               // TODO: hmm this isn't called from anywhere, maybe should remove it for 2.0
-
-               this.isExpandable = true;
-               this._setExpando(false);
-       },
-
-       _onLabelFocus: function(evt){
-               // summary:
-               //              Called when this row is focused (possibly programatically)
-               //              Note that we aren't using _onFocus() builtin to dijit
-               //              because it's called when focus is moved to a descendant TreeNode.
-               // tags:
-               //              private
-               this.tree._onNodeFocus(this);
-       },
-
-       setSelected: function(/*Boolean*/ selected){
-               // summary:
-               //              A Tree has a (single) currently selected node.
-               //              Mark that this node is/isn't that currently selected node.
-               // description:
-               //              In particular, setting a node as selected involves setting tabIndex
-               //              so that when user tabs to the tree, focus will go to that node (only).
-               dijit.setWaiState(this.labelNode, "selected", selected);
-               dojo.toggleClass(this.rowNode, "dijitTreeRowSelected", selected);
-       },
-
-       setFocusable: function(/*Boolean*/ selected){
-               // summary:
-               //              A Tree has a (single) node that's focusable.
-               //              Mark that this node is/isn't that currently focsuable node.
-               // description:
-               //              In particular, setting a node as selected involves setting tabIndex
-               //              so that when user tabs to the tree, focus will go to that node (only).
-
-               this.labelNode.setAttribute("tabIndex", selected ? "0" : "-1");
-       },
-
-       _onClick: function(evt){
-               // summary:
-               //              Handler for onclick event on a node
-               // tags:
-               //              private
-               this.tree._onClick(this, evt);
-       },
-       _onDblClick: function(evt){
-               // summary:
-               //              Handler for ondblclick event on a node
-               // tags:
-               //              private
-               this.tree._onDblClick(this, evt);
-       },
-
-       _onMouseEnter: function(evt){
-               // summary:
-               //              Handler for onmouseenter event on a node
-               // tags:
-               //              private
-               this.tree._onNodeMouseEnter(this, evt);
-       },
-
-       _onMouseLeave: function(evt){
-               // summary:
-               //              Handler for onmouseenter event on a node
-               // tags:
-               //              private
-               this.tree._onNodeMouseLeave(this, evt);
-       }
-});
-
-dojo.declare(
-       "dijit.Tree",
-       [dijit._Widget, dijit._Templated],
-{
-       // summary:
-       //              This widget displays hierarchical data from a store.
-
-       // store: [deprecated] String||dojo.data.Store
-       //              Deprecated.  Use "model" parameter instead.
-       //              The store to get data to display in the tree.
-       store: null,
-
-       // model: dijit.Tree.model
-       //              Interface to read tree data, get notifications of changes to tree data,
-       //              and for handling drop operations (i.e drag and drop onto the tree)
-       model: null,
-
-       // query: [deprecated] anything
-       //              Deprecated.  User should specify query to the model directly instead.
-       //              Specifies datastore query to return the root item or top items for the tree.
-       query: null,
-
-       // label: [deprecated] String
-       //              Deprecated.  Use dijit.tree.ForestStoreModel directly instead.
-       //              Used in conjunction with query parameter.
-       //              If a query is specified (rather than a root node id), and a label is also specified,
-       //              then a fake root node is created and displayed, with this label.
-       label: "",
-
-       // showRoot: [const] Boolean
-       //              Should the root node be displayed, or hidden?
-       showRoot: true,
-
-       // childrenAttr: [deprecated] String[]
-       //              Deprecated.   This information should be specified in the model.
-       //              One ore more attributes that holds children of a tree node
-       childrenAttr: ["children"],
-
-       // path: String[] or Item[]
-       //              Full path from rootNode to selected node expressed as array of items or array of ids.
-       //              Since setting the path may be asynchronous (because ofwaiting on dojo.data), set("path", ...)
-       //              returns a Deferred to indicate when the set is complete.
-       path: [],
-
-       // selectedItem: [readonly] Item
-       //              The currently selected item in this tree.
-       //              This property can only be set (via set('selectedItem', ...)) when that item is already
-       //              visible in the tree.   (I.e. the tree has already been expanded to show that node.)
-       //              Should generally use `path` attribute to set the selected item instead.
-       selectedItem: null,
-
-       // openOnClick: Boolean
-       //              If true, clicking a folder node's label will open it, rather than calling onClick()
-       openOnClick: false,
-
-       // openOnDblClick: Boolean
-       //              If true, double-clicking a folder node's label will open it, rather than calling onDblClick()
-       openOnDblClick: false,
-
-       templateString: dojo.cache("dijit", "templates/Tree.html", "<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),
-
-       // persist: Boolean
-       //              Enables/disables use of cookies for state saving.
-       persist: true,
-
-       // autoExpand: Boolean
-       //              Fully expand the tree on load.   Overrides `persist`
-       autoExpand: false,
-
-       // dndController: [protected] String
-       //              Class name to use as as the dnd controller.  Specifying this class enables DnD.
-       //              Generally you should specify this as "dijit.tree.dndSource".
-       dndController: null,
-
-       // parameters to pull off of the tree and pass on to the dndController as its params
-       dndParams: ["onDndDrop","itemCreator","onDndCancel","checkAcceptance", "checkItemAcceptance", "dragThreshold", "betweenThreshold"],
-
-       //declare the above items so they can be pulled from the tree's markup
-
-       // onDndDrop: [protected] Function
-       //              Parameter to dndController, see `dijit.tree.dndSource.onDndDrop`.
-       //              Generally this doesn't need to be set.
-       onDndDrop: null,
-
-       /*=====
-       itemCreator: function(nodes, target, source){
-               // summary:
-               //              Returns objects passed to `Tree.model.newItem()` based on DnD nodes
-               //              dropped onto the tree.   Developer must override this method to enable
-               //              dropping from external sources onto this Tree, unless the Tree.model's items
-               //              happen to look like {id: 123, name: "Apple" } with no other attributes.
-               // description:
-               //              For each node in nodes[], which came from source, create a hash of name/value
-               //              pairs to be passed to Tree.model.newItem().  Returns array of those hashes.
-               // nodes: DomNode[]
-               //              The DOMNodes dragged from the source container
-               // target: DomNode
-               //              The target TreeNode.rowNode
-               // source: dojo.dnd.Source
-               //              The source container the nodes were dragged from, perhaps another Tree or a plain dojo.dnd.Source
-               // returns: Object[]
-               //              Array of name/value hashes for each new item to be added to the Tree, like:
-               // |    [
-               // |            { id: 123, label: "apple", foo: "bar" },
-               // |            { id: 456, label: "pear", zaz: "bam" }
-               // |    ]
-               // tags:
-               //              extension
-               return [{}];
-       },
-       =====*/
-       itemCreator: null,
-
-       // onDndCancel: [protected] Function
-       //              Parameter to dndController, see `dijit.tree.dndSource.onDndCancel`.
-       //              Generally this doesn't need to be set.
-       onDndCancel: null,
-
-/*=====
-       checkAcceptance: function(source, nodes){
-               // summary:
-               //              Checks if the Tree itself can accept nodes from this source
-               // source: dijit.tree._dndSource
-               //              The source which provides items
-               // nodes: DOMNode[]
-               //              Array of DOM nodes corresponding to nodes being dropped, dijitTreeRow nodes if
-               //              source is a dijit.Tree.
-               // tags:
-               //              extension
-               return true;    // Boolean
-       },
-=====*/
-       checkAcceptance: null,
-
-/*=====
-       checkItemAcceptance: function(target, source, position){
-               // summary:
-               //              Stub function to be overridden if one wants to check for the ability to drop at the node/item level
-               // description:
-               //              In the base case, this is called to check if target can become a child of source.
-               //              When betweenThreshold is set, position="before" or "after" means that we
-               //              are asking if the source node can be dropped before/after the target node.
-               // target: DOMNode
-               //              The dijitTreeRoot DOM node inside of the TreeNode that we are dropping on to
-               //              Use dijit.getEnclosingWidget(target) to get the TreeNode.
-               // source: dijit.tree.dndSource
-               //              The (set of) nodes we are dropping
-               // position: String
-               //              "over", "before", or "after"
-               // tags:
-               //              extension
-               return true;    // Boolean
-       },
-=====*/
-       checkItemAcceptance: null,
-
-       // dragThreshold: Integer
-       //              Number of pixels mouse moves before it's considered the start of a drag operation
-       dragThreshold: 5,
-
-       // betweenThreshold: Integer
-       //              Set to a positive value to allow drag and drop "between" nodes.
-       //
-       //              If during DnD mouse is over a (target) node but less than betweenThreshold
-       //              pixels from the bottom edge, dropping the the dragged node will make it
-       //              the next sibling of the target node, rather than the child.
-       //
-       //              Similarly, if mouse is over a target node but less that betweenThreshold
-       //              pixels from the top edge, dropping the dragged node will make it
-       //              the target node's previous sibling rather than the target node's child.
-       betweenThreshold: 0,
-
-       // _nodePixelIndent: Integer
-       //              Number of pixels to indent tree nodes (relative to parent node).
-       //              Default is 19 but can be overridden by setting CSS class dijitTreeIndent
-       //              and calling resize() or startup() on tree after it's in the DOM.
-       _nodePixelIndent: 19,
-
-       _publish: function(/*String*/ topicName, /*Object*/ message){
-               // summary:
-               //              Publish a message for this widget/topic
-               dojo.publish(this.id, [dojo.mixin({tree: this, event: topicName}, message || {})]);
-       },
-
-       postMixInProperties: function(){
-               this.tree = this;
-
-               if(this.autoExpand){
-                       // There's little point in saving opened/closed state of nodes for a Tree
-                       // that initially opens all it's nodes.
-                       this.persist = false;
-               }
-
-               this._itemNodesMap={};
-
-               if(!this.cookieName){
-                       this.cookieName = this.id + "SaveStateCookie";
-               }
-
-               this._loadDeferred = new dojo.Deferred();
-
-               this.inherited(arguments);
-       },
-
-       postCreate: function(){
-               this._initState();
-
-               // Create glue between store and Tree, if not specified directly by user
-               if(!this.model){
-                       this._store2model();
-               }
-
-               // monitor changes to items
-               this.connect(this.model, "onChange", "_onItemChange");
-               this.connect(this.model, "onChildrenChange", "_onItemChildrenChange");
-               this.connect(this.model, "onDelete", "_onItemDelete");
-
-               this._load();
-
-               this.inherited(arguments);
-
-               if(this.dndController){
-                       if(dojo.isString(this.dndController)){
-                               this.dndController = dojo.getObject(this.dndController);
-                       }
-                       var params={};
-                       for(var i=0; i<this.dndParams.length;i++){
-                               if(this[this.dndParams[i]]){
-                                       params[this.dndParams[i]] = this[this.dndParams[i]];
-                               }
-                       }
-                       this.dndController = new this.dndController(this, params);
-               }
-       },
-
-       _store2model: function(){
-               // summary:
-               //              User specified a store&query rather than model, so create model from store/query
-               this._v10Compat = true;
-               dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");
-
-               var modelParams = {
-                       id: this.id + "_ForestStoreModel",
-                       store: this.store,
-                       query: this.query,
-                       childrenAttrs: this.childrenAttr
-               };
-
-               // Only override the model's mayHaveChildren() method if the user has specified an override
-               if(this.params.mayHaveChildren){
-                       modelParams.mayHaveChildren = dojo.hitch(this, "mayHaveChildren");
-               }
-
-               if(this.params.getItemChildren){
-                       modelParams.getChildren = dojo.hitch(this, function(item, onComplete, onError){
-                               this.getItemChildren((this._v10Compat && item === this.model.root) ? null : item, onComplete, onError);
-                       });
-               }
-               this.model = new dijit.tree.ForestStoreModel(modelParams);
-
-               // For backwards compatibility, the visibility of the root node is controlled by
-               // whether or not the user has specified a label
-               this.showRoot = Boolean(this.label);
-       },
-
-       onLoad: function(){
-               // summary:
-               //              Called when tree finishes loading and expanding.
-               // description:
-               //              If persist == true the loading may encompass many levels of fetches
-               //              from the data store, each asynchronous.   Waits for all to finish.
-               // tags:
-               //              callback
-       },
-
-       _load: function(){
-               // summary:
-               //              Initial load of the tree.
-               //              Load root node (possibly hidden) and it's children.
-               this.model.getRoot(
-                       dojo.hitch(this, function(item){
-                               var rn = (this.rootNode = this.tree._createTreeNode({
-                                       item: item,
-                                       tree: this,
-                                       isExpandable: true,
-                                       label: this.label || this.getLabel(item),
-                                       indent: this.showRoot ? 0 : -1
-                               }));
-                               if(!this.showRoot){
-                                       rn.rowNode.style.display="none";
-                               }
-                               this.domNode.appendChild(rn.domNode);
-                               var identity = this.model.getIdentity(item);
-                               if(this._itemNodesMap[identity]){
-                                       this._itemNodesMap[identity].push(rn);
-                               }else{
-                                       this._itemNodesMap[identity] = [rn];
-                               }
-
-                               rn._updateLayout();             // sets "dijitTreeIsRoot" CSS classname
-
-                               // load top level children and then fire onLoad() event
-                               this._expandNode(rn).addCallback(dojo.hitch(this, function(){
-                                       this._loadDeferred.callback(true);
-                                       this.onLoad();
-                               }));
-                       }),
-                       function(err){
-                               console.error(this, ": error loading root: ", err);
-                       }
-               );
-       },
-
-       getNodesByItem: function(/*dojo.data.Item or id*/ item){
-               // summary:
-               //              Returns all tree nodes that refer to an item
-               // returns:
-               //              Array of tree nodes that refer to passed item
-
-               if(!item){ return []; }
-               var identity = dojo.isString(item) ? item : this.model.getIdentity(item);
-               // return a copy so widget don't get messed up by changes to returned array
-               return [].concat(this._itemNodesMap[identity]);
-       },
-
-       _setSelectedItemAttr: function(/*dojo.data.Item or id*/ item){
-               // summary:
-               //              Select a tree node related to passed item.
-               //              WARNING: if model use multi-parented items or desired tree node isn't already loaded
-               //              behavior is undefined. Use set('path', ...) instead.
-
-               var oldValue = this.get("selectedItem");
-               var identity = (!item || dojo.isString(item)) ? item : this.model.getIdentity(item);
-               if(identity == oldValue ? this.model.getIdentity(oldValue) : null){ return; }
-               var nodes = this._itemNodesMap[identity];
-               this._selectNode((nodes && nodes[0]) || null);  //select the first item
-       },
-
-       _getSelectedItemAttr: function(){
-               // summary:
-               //              Return item related to selected tree node.
-               return this.selectedNode && this.selectedNode.item;
-       },
-
-       _setPathAttr: function(/*Item[] || String[]*/ path){
-               // summary:
-               //              Select the tree node identified by passed path.
-               // path:
-               //              Array of items or item id's
-               // returns:
-               //              Deferred to indicate when the set is complete
-
-               var d = new dojo.Deferred();
-
-               this._selectNode(null);
-               if(!path || !path.length){
-                       d.resolve(true);
-                       return d;
-               }
-
-               // If this is called during initialization, defer running until Tree has finished loading
-               this._loadDeferred.addCallback(dojo.hitch(this, function(){
-                       if(!this.rootNode){
-                               d.reject(new Error("!this.rootNode"));
-                               return;
-                       }
-                       if(path[0] !== this.rootNode.item && (dojo.isString(path[0]) && path[0] != this.model.getIdentity(this.rootNode.item))){
-                               d.reject(new Error(this.id + ":path[0] doesn't match this.rootNode.item.  Maybe you are using the wrong tree."));
-                               return;
-                       }
-                       path.shift();
-
-                       var node = this.rootNode;
-
-                       function advance(){
-                               // summary:
-                               //              Called when "node" has completed loading and expanding.   Pop the next item from the path
-                               //              (which must be a child of "node") and advance to it, and then recurse.
-
-                               // Set item and identity to next item in path (node is pointing to the item that was popped
-                               // from the path _last_ time.
-                               var item = path.shift(),
-                                       identity = dojo.isString(item) ? item : this.model.getIdentity(item);
-
-                               // Change "node" from previous item in path to the item we just popped from path
-                               dojo.some(this._itemNodesMap[identity], function(n){
-                                       if(n.getParent() == node){
-                                               node = n;
-                                               return true;
-                                       }
-                                       return false;
-                               });
-
-                               if(path.length){
-                                       // Need to do more expanding
-                                       this._expandNode(node).addCallback(dojo.hitch(this, advance));
-                               }else{
-                                       // Final destination node, select it
-                                       this._selectNode(node);
-                                       
-                                       // signal that path setting is finished
-                                       d.resolve(true);
-                               }
-                       }
-
-                       this._expandNode(node).addCallback(dojo.hitch(this, advance));
-               }));
-                       
-               return d;
-       },
-
-       _getPathAttr: function(){
-               // summary:
-               //              Return an array of items that is the path to selected tree node.
-               if(!this.selectedNode){ return; }
-               var res = [];
-               var treeNode = this.selectedNode;
-               while(treeNode && treeNode !== this.rootNode){
-                       res.unshift(treeNode.item);
-                       treeNode = treeNode.getParent();
-               }
-               res.unshift(this.rootNode.item);
-               return res;
-       },
-
-       ////////////// Data store related functions //////////////////////
-       // These just get passed to the model; they are here for back-compat
-
-       mayHaveChildren: function(/*dojo.data.Item*/ item){
-               // summary:
-               //              Deprecated.   This should be specified on the model itself.
-               //
-               //              Overridable function to tell if an item has or may have children.
-               //              Controls whether or not +/- expando icon is shown.
-               //              (For efficiency reasons we may not want to check if an element actually
-               //              has children until user clicks the expando node)
-               // tags:
-               //              deprecated
-       },
-
-       getItemChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){
-               // summary:
-               //              Deprecated.   This should be specified on the model itself.
-               //
-               //              Overridable function that return array of child items of given parent item,
-               //              or if parentItem==null then return top items in tree
-               // tags:
-               //              deprecated
-       },
-
-       ///////////////////////////////////////////////////////
-       // Functions for converting an item to a TreeNode
-       getLabel: function(/*dojo.data.Item*/ item){
-               // summary:
-               //              Overridable function to get the label for a tree node (given the item)
-               // tags:
-               //              extension
-               return this.model.getLabel(item);       // String
-       },
-
-       getIconClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-               // summary:
-               //              Overridable function to return CSS class name to display icon
-               // tags:
-               //              extension
-               return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "dijitLeaf"
-       },
-
-       getLabelClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-               // summary:
-               //              Overridable function to return CSS class name to display label
-               // tags:
-               //              extension
-       },
-
-       getRowClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-               // summary:
-               //              Overridable function to return CSS class name to display row
-               // tags:
-               //              extension
-       },
-
-       getIconStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-               // summary:
-               //              Overridable function to return CSS styles to display icon
-               // returns:
-               //              Object suitable for input to dojo.style() like {backgroundImage: "url(...)"}
-               // tags:
-               //              extension
-       },
-
-       getLabelStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-               // summary:
-               //              Overridable function to return CSS styles to display label
-               // returns:
-               //              Object suitable for input to dojo.style() like {color: "red", background: "green"}
-               // tags:
-               //              extension
-       },
-
-       getRowStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-               // summary:
-               //              Overridable function to return CSS styles to display row
-               // returns:
-               //              Object suitable for input to dojo.style() like {background-color: "#bbb"}
-               // tags:
-               //              extension
-       },
-
-       getTooltip: function(/*dojo.data.Item*/ item){
-               // summary:
-               //              Overridable function to get the tooltip for a tree node (given the item)
-               // tags:
-               //              extension
-               return "";      // String
-       },
-
-       /////////// Keyboard and Mouse handlers ////////////////////
-
-       _onKeyPress: function(/*Event*/ e){
-               // summary:
-               //              Translates keypress events into commands for the controller
-               if(e.altKey){ return; }
-               var dk = dojo.keys;
-               var treeNode = dijit.getEnclosingWidget(e.target);
-               if(!treeNode){ return; }
-
-               var key = e.charOrCode;
-               if(typeof key == "string"){     // handle printables (letter navigation)
-                       // Check for key navigation.
-                       if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){
-                               this._onLetterKeyNav( { node: treeNode, key: key.toLowerCase() } );
-                               dojo.stopEvent(e);
-                       }
-               }else{  // handle non-printables (arrow keys)
-                       // clear record of recent printables (being saved for multi-char letter navigation),
-                       // because "a", down-arrow, "b" shouldn't search for "ab"
-                       if(this._curSearch){
-                               clearTimeout(this._curSearch.timer);
-                               delete this._curSearch;
-                       }
-
-                       var map = this._keyHandlerMap;
-                       if(!map){
-                               // setup table mapping keys to events
-                               map = {};
-                               map[dk.ENTER]="_onEnterKey";
-                               map[this.isLeftToRight() ? dk.LEFT_ARROW : dk.RIGHT_ARROW]="_onLeftArrow";
-                               map[this.isLeftToRight() ? dk.RIGHT_ARROW : dk.LEFT_ARROW]="_onRightArrow";
-                               map[dk.UP_ARROW]="_onUpArrow";
-                               map[dk.DOWN_ARROW]="_onDownArrow";
-                               map[dk.HOME]="_onHomeKey";
-                               map[dk.END]="_onEndKey";
-                               this._keyHandlerMap = map;
-                       }
-                       if(this._keyHandlerMap[key]){
-                               this[this._keyHandlerMap[key]]( { node: treeNode, item: treeNode.item, evt: e } );
-                               dojo.stopEvent(e);
-                       }
-               }
-       },
-
-       _onEnterKey: function(/*Object*/ message, /*Event*/ evt){
-               this._publish("execute", { item: message.item, node: message.node } );
-               this._selectNode(message.node);
-               this.onClick(message.item, message.node, evt);
-       },
-
-       _onDownArrow: function(/*Object*/ message){
-               // summary:
-               //              down arrow pressed; get next visible node, set focus there
-               var node = this._getNextNode(message.node);
-               if(node && node.isTreeNode){
-                       this.focusNode(node);
-               }
-       },
-
-       _onUpArrow: function(/*Object*/ message){
-               // summary:
-               //              Up arrow pressed; move to previous visible node
-
-               var node = message.node;
-
-               // if younger siblings
-               var previousSibling = node.getPreviousSibling();
-               if(previousSibling){
-                       node = previousSibling;
-                       // if the previous node is expanded, dive in deep
-                       while(node.isExpandable && node.isExpanded && node.hasChildren()){
-                               // move to the last child
-                               var children = node.getChildren();
-                               node = children[children.length-1];
-                       }
-               }else{
-                       // if this is the first child, return the parent
-                       // unless the parent is the root of a tree with a hidden root
-                       var parent = node.getParent();
-                       if(!(!this.showRoot && parent === this.rootNode)){
-                               node = parent;
-                       }
-               }
-
-               if(node && node.isTreeNode){
-                       this.focusNode(node);
-               }
-       },
-
-       _onRightArrow: function(/*Object*/ message){
-               // summary:
-               //              Right arrow pressed; go to child node
-               var node = message.node;
-
-               // if not expanded, expand, else move to 1st child
-               if(node.isExpandable && !node.isExpanded){
-                       this._expandNode(node);
-               }else if(node.hasChildren()){
-                       node = node.getChildren()[0];
-                       if(node && node.isTreeNode){
-                               this.focusNode(node);
-                       }
-               }
-       },
-
-       _onLeftArrow: function(/*Object*/ message){
-               // summary:
-               //              Left arrow pressed.
-               //              If not collapsed, collapse, else move to parent.
-
-               var node = message.node;
-
-               if(node.isExpandable && node.isExpanded){
-                       this._collapseNode(node);
-               }else{
-                       var parent = node.getParent();
-                       if(parent && parent.isTreeNode && !(!this.showRoot && parent === this.rootNode)){
-                               this.focusNode(parent);
-                       }
-               }
-       },
-
-       _onHomeKey: function(){
-               // summary:
-               //              Home key pressed; get first visible node, and set focus there
-               var node = this._getRootOrFirstNode();
-               if(node){
-                       this.focusNode(node);
-               }
-       },
-
-       _onEndKey: function(/*Object*/ message){
-               // summary:
-               //              End key pressed; go to last visible node.
-
-               var node = this.rootNode;
-               while(node.isExpanded){
-                       var c = node.getChildren();
-                       node = c[c.length - 1];
-               }
-
-               if(node && node.isTreeNode){
-                       this.focusNode(node);
-               }
-       },
-
-       // multiCharSearchDuration: Number
-       //              If multiple characters are typed where each keystroke happens within
-       //              multiCharSearchDuration of the previous keystroke,
-       //              search for nodes matching all the keystrokes.
-       //
-       //              For example, typing "ab" will search for entries starting with
-       //              "ab" unless the delay between "a" and "b" is greater than multiCharSearchDuration.
-       multiCharSearchDuration: 250,
-
-       _onLetterKeyNav: function(message){
-               // summary:
-               //              Called when user presses a prinatable key; search for node starting with recently typed letters.
-               // message: Object
-               //              Like { node: TreeNode, key: 'a' } where key is the key the user pressed.
-
-               // Branch depending on whether this key starts a new search, or modifies an existing search
-               var cs = this._curSearch;
-               if(cs){
-                       // We are continuing a search.  Ex: user has pressed 'a', and now has pressed
-                       // 'b', so we want to search for nodes starting w/"ab".
-                       cs.pattern = cs.pattern + message.key;
-                       clearTimeout(cs.timer);
-               }else{
-                       // We are starting a new search
-                       cs = this._curSearch = {
-                                       pattern: message.key,
-                                       startNode: message.node
-                       };
-               }
-
-               // set/reset timer to forget recent keystrokes
-               var self = this;
-               cs.timer = setTimeout(function(){
-                       delete self._curSearch;
-               }, this.multiCharSearchDuration);
-
-               // Navigate to TreeNode matching keystrokes [entered so far].
-               var node = cs.startNode;
-               do{
-                       node = this._getNextNode(node);
-                       //check for last node, jump to first node if necessary
-                       if(!node){
-                               node = this._getRootOrFirstNode();
-                       }
-               }while(node !== cs.startNode && (node.label.toLowerCase().substr(0, cs.pattern.length) != cs.pattern));
-               if(node && node.isTreeNode){
-                       // no need to set focus if back where we started
-                       if(node !== cs.startNode){
-                               this.focusNode(node);
-                       }
-               }
-       },
-
-       _onClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
-               // summary:
-               //              Translates click events into commands for the controller to process
-
-               var domElement = e.target,
-                       isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText);
-
-               if( (this.openOnClick && nodeWidget.isExpandable) || isExpandoClick ){
-                       // expando node was clicked, or label of a folder node was clicked; open it
-                       if(nodeWidget.isExpandable){
-                               this._onExpandoClick({node:nodeWidget});
-                       }
-               }else{
-                       this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
-                       this.onClick(nodeWidget.item, nodeWidget, e);
-                       this.focusNode(nodeWidget);
-               }
-               if(!isExpandoClick){
-                       this._selectNode(nodeWidget);
-               }
-               dojo.stopEvent(e);
-       },
-       _onDblClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
-               // summary:
-               //              Translates double-click events into commands for the controller to process
-
-               var domElement = e.target,
-                       isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText);
-
-               if( (this.openOnDblClick && nodeWidget.isExpandable) ||isExpandoClick ){
-                       // expando node was clicked, or label of a folder node was clicked; open it
-                       if(nodeWidget.isExpandable){
-                               this._onExpandoClick({node:nodeWidget});
-                       }
-               }else{
-                       this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
-                       this.onDblClick(nodeWidget.item, nodeWidget, e);
-                       this.focusNode(nodeWidget);
-               }
-               if(!isExpandoClick){
-                       this._selectNode(nodeWidget);
-               }
-               dojo.stopEvent(e);
-       },
-
-       _onExpandoClick: function(/*Object*/ message){
-               // summary:
-               //              User clicked the +/- icon; expand or collapse my children.
-               var node = message.node;
-
-               // If we are collapsing, we might be hiding the currently focused node.
-               // Also, clicking the expando node might have erased focus from the current node.
-               // For simplicity's sake just focus on the node with the expando.
-               this.focusNode(node);
-
-               if(node.isExpanded){
-                       this._collapseNode(node);
-               }else{
-                       this._expandNode(node);
-               }
-       },
-
-       onClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
-               // summary:
-               //              Callback when a tree node is clicked
-               // tags:
-               //              callback
-       },
-       onDblClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
-               // summary:
-               //              Callback when a tree node is double-clicked
-               // tags:
-               //              callback
-       },
-       onOpen: function(/* dojo.data */ item, /*TreeNode*/ node){
-               // summary:
-               //              Callback when a node is opened
-               // tags:
-               //              callback
-       },
-       onClose: function(/* dojo.data */ item, /*TreeNode*/ node){
-               // summary:
-               //              Callback when a node is closed
-               // tags:
-               //              callback
-       },
-
-       _getNextNode: function(node){
-               // summary:
-               //              Get next visible node
-
-               if(node.isExpandable && node.isExpanded && node.hasChildren()){
-                       // if this is an expanded node, get the first child
-                       return node.getChildren()[0];           // _TreeNode
-               }else{
-                       // find a parent node with a sibling
-                       while(node && node.isTreeNode){
-                               var returnNode = node.getNextSibling();
-                               if(returnNode){
-                                       return returnNode;              // _TreeNode
-                               }
-                               node = node.getParent();
-                       }
-                       return null;
-               }
-       },
-
-       _getRootOrFirstNode: function(){
-               // summary:
-               //              Get first visible node
-               return this.showRoot ? this.rootNode : this.rootNode.getChildren()[0];
-       },
-
-       _collapseNode: function(/*_TreeNode*/ node){
-               // summary:
-               //              Called when the user has requested to collapse the node
-
-               if(node._expandNodeDeferred){
-                       delete node._expandNodeDeferred;
-               }
-
-               if(node.isExpandable){
-                       if(node.state == "LOADING"){
-                               // ignore clicks while we are in the process of loading data
-                               return;
-                       }
-
-                       node.collapse();
-                       this.onClose(node.item, node);
-
-                       if(node.item){
-                               this._state(node.item,false);
-                               this._saveState();
-                       }
-               }
-       },
-
-       _expandNode: function(/*_TreeNode*/ node, /*Boolean?*/ recursive){
-               // summary:
-               //              Called when the user has requested to expand the node
-               // recursive:
-               //              Internal flag used when _expandNode() calls itself, don't set.
-               // returns:
-               //              Deferred that fires when the node is loaded and opened and (if persist=true) all it's descendants
-               //              that were previously opened too
-
-               if(node._expandNodeDeferred && !recursive){
-                       // there's already an expand in progress (or completed), so just return
-                       return node._expandNodeDeferred;        // dojo.Deferred
-               }
-
-               var model = this.model,
-                       item = node.item,
-                       _this = this;
-
-               switch(node.state){
-                       case "UNCHECKED":
-                               // need to load all the children, and then expand
-                               node.markProcessing();
-
-                               // Setup deferred to signal when the load and expand are finished.
-                               // Save that deferred in this._expandDeferred as a flag that operation is in progress.
-                               var def = (node._expandNodeDeferred = new dojo.Deferred());
-
-                               // Get the children
-                               model.getChildren(
-                                       item,
-                                       function(items){
-                                               node.unmarkProcessing();
-
-                                               // Display the children and also start expanding any children that were previously expanded
-                                               // (if this.persist == true).   The returned Deferred will fire when those expansions finish.
-                                               var scid = node.setChildItems(items);
-
-                                               // Call _expandNode() again but this time it will just to do the animation (default branch).
-                                               // The returned Deferred will fire when the animation completes.
-                                               // TODO: seems like I can avoid recursion and just use a deferred to sequence the events?
-                                               var ed = _this._expandNode(node, true);
-
-                                               // After the above two tasks (setChildItems() and recursive _expandNode()) finish,
-                                               // signal that I am done.
-                                               scid.addCallback(function(){
-                                                       ed.addCallback(function(){
-                                                               def.callback();
-                                                       })
-                                               });
-                                       },
-                                       function(err){
-                                               console.error(_this, ": error loading root children: ", err);
-                                       }
-                               );
-                               break;
-
-                       default:        // "LOADED"
-                               // data is already loaded; just expand node
-                               def = (node._expandNodeDeferred = node.expand());
-
-                               this.onOpen(node.item, node);
-
-                               if(item){
-                                       this._state(item, true);
-                                       this._saveState();
-                               }
-               }
-
-               return def;     // dojo.Deferred
-       },
-
-       ////////////////// Miscellaneous functions ////////////////
-
-       focusNode: function(/* _tree.Node */ node){
-               // summary:
-               //              Focus on the specified node (which must be visible)
-               // tags:
-               //              protected
-
-               // set focus so that the label will be voiced using screen readers
-               dijit.focus(node.labelNode);
-       },
-
-       _selectNode: function(/*_tree.Node*/ node){
-               // summary:
-               //              Mark specified node as select, and unmark currently selected node.
-               // tags:
-               //              protected
-
-               if(this.selectedNode && !this.selectedNode._destroyed){
-                       this.selectedNode.setSelected(false);
-               }
-               if(node){
-                       node.setSelected(true);
-               }
-               this.selectedNode = node;
-       },
-
-       _onNodeFocus: function(/*dijit._Widget*/ node){
-               // summary:
-               //              Called when a TreeNode gets focus, either by user clicking
-               //              it, or programatically by arrow key handling code.
-               // description:
-               //              It marks that the current node is the selected one, and the previously
-               //              selected node no longer is.
-
-               if(node && node != this.lastFocused){
-                       if(this.lastFocused && !this.lastFocused._destroyed){
-                               // mark that the previously focsable node is no longer focusable
-                               this.lastFocused.setFocusable(false);
-                       }
-
-                       // mark that the new node is the currently selected one
-                       node.setFocusable(true);
-                       this.lastFocused = node;
-               }
-       },
-
-       _onNodeMouseEnter: function(/*dijit._Widget*/ node){
-               // summary:
-               //              Called when mouse is over a node (onmouseenter event),
-               //              this is monitored by the DND code
-       },
-
-       _onNodeMouseLeave: function(/*dijit._Widget*/ node){
-               // summary:
-               //              Called when mouse leaves a node (onmouseleave event),
-               //              this is monitored by the DND code
-       },
-
-       //////////////// Events from the model //////////////////////////
-
-       _onItemChange: function(/*Item*/ item){
-               // summary:
-               //              Processes notification of a change to an item's scalar values like label
-               var model = this.model,
-                       identity = model.getIdentity(item),
-                       nodes = this._itemNodesMap[identity];
-
-               if(nodes){
-                       var label = this.getLabel(item),
-                               tooltip = this.getTooltip(item);
-                       dojo.forEach(nodes, function(node){
-                               node.set({
-                                       item: item,             // theoretically could be new JS Object representing same item
-                                       label: label,
-                                       tooltip: tooltip
-                               });
-                               node._updateItemClasses(item);
-                       });
-               }
-       },
-
-       _onItemChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
-               // summary:
-               //              Processes notification of a change to an item's children
-               var model = this.model,
-                       identity = model.getIdentity(parent),
-                       parentNodes = this._itemNodesMap[identity];
-
-               if(parentNodes){
-                       dojo.forEach(parentNodes,function(parentNode){
-                               parentNode.setChildItems(newChildrenList);
-                       });
-               }
-       },
-
-       _onItemDelete: function(/*Item*/ item){
-               // summary:
-               //              Processes notification of a deletion of an item
-               var model = this.model,
-                       identity = model.getIdentity(item),
-                       nodes = this._itemNodesMap[identity];
-
-               if(nodes){
-                       dojo.forEach(nodes,function(node){
-                               var parent = node.getParent();
-                               if(parent){
-                                       // if node has not already been orphaned from a _onSetItem(parent, "children", ..) call...
-                                       parent.removeChild(node);
-                               }
-                               node.destroyRecursive();
-                       });
-                       delete this._itemNodesMap[identity];
-               }
-       },
-
-       /////////////// Miscellaneous funcs
-
-       _initState: function(){
-               // summary:
-               //              Load in which nodes should be opened automatically
-               if(this.persist){
-                       var cookie = dojo.cookie(this.cookieName);
-                       this._openedItemIds = {};
-                       if(cookie){
-                               dojo.forEach(cookie.split(','), function(item){
-                                       this._openedItemIds[item] = true;
-                               }, this);
-                       }
-               }
-       },
-       _state: function(item,expanded){
-               // summary:
-               //              Query or set expanded state for an item,
-               if(!this.persist){
-                       return false;
-               }
-               var id=this.model.getIdentity(item);
-               if(arguments.length === 1){
-                       return this._openedItemIds[id];
-               }
-               if(expanded){
-                       this._openedItemIds[id] = true;
-               }else{
-                       delete this._openedItemIds[id];
-               }
-       },
-       _saveState: function(){
-               // summary:
-               //              Create and save a cookie with the currently expanded nodes identifiers
-               if(!this.persist){
-                       return;
-               }
-               var ary = [];
-               for(var id in this._openedItemIds){
-                       ary.push(id);
-               }
-               dojo.cookie(this.cookieName, ary.join(","), {expires:365});
-       },
-
-       destroy: function(){
-               if(this._curSearch){
-                       clearTimeout(this._curSearch.timer);
-                       delete this._curSearch;
-               }
-               if(this.rootNode){
-                       this.rootNode.destroyRecursive();
-               }
-               if(this.dndController && !dojo.isString(this.dndController)){
-                       this.dndController.destroy();
-               }
-               this.rootNode = null;
-               this.inherited(arguments);
-       },
-
-       destroyRecursive: function(){
-               // A tree is treated as a leaf, not as a node with children (like a grid),
-               // but defining destroyRecursive for back-compat.
-               this.destroy();
-       },
-
-       resize: function(changeSize){
-               if(changeSize){
-                       dojo.marginBox(this.domNode, changeSize);
-                       dojo.style(this.domNode, "overflow", "auto");   // for scrollbars
-               }
-
-               // The only JS sizing involved w/tree is the indentation, which is specified
-               // in CSS and read in through this dummy indentDetector node (tree must be
-               // visible and attached to the DOM to read this)
-               this._nodePixelIndent = dojo.marginBox(this.tree.indentDetector).w;
-
-               if(this.tree.rootNode){
-                       // If tree has already loaded, then reset indent for all the nodes
-                       this.tree.rootNode.set('indent', this.showRoot ? 0 : -1);
-               }
-       },
-
-       _createTreeNode: function(/*Object*/ args){
-               // summary:
-               //              creates a TreeNode
-               // description:
-               //              Developers can override this method to define their own TreeNode class;
-               //              However it will probably be removed in a future release in favor of a way
-               //              of just specifying a widget for the label, rather than one that contains
-               //              the children too.
-               return new dijit._TreeNode(args);
-       }
-});
-
-// For back-compat.  TODO: remove in 2.0
-
-
-
-}
-
-if(!dojo._hasResource["dijit.InlineEditBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.InlineEditBox"] = true;
-dojo.provide("dijit.InlineEditBox");
-
-
-
-
-
-
-
-
-
-
-dojo.declare("dijit.InlineEditBox",
-       dijit._Widget,
-       {
-       // summary:
-       //              An element with in-line edit capabilites
-       //
-       // description:
-       //              Behavior for an existing node (`<p>`, `<div>`, `<span>`, etc.) so that
-       //              when you click it, an editor shows up in place of the original
-       //              text.  Optionally, Save and Cancel button are displayed below the edit widget.
-       //              When Save is clicked, the text is pulled from the edit
-       //              widget and redisplayed and the edit widget is again hidden.
-       //              By default a plain Textarea widget is used as the editor (or for
-       //              inline values a TextBox), but you can specify an editor such as
-       //              dijit.Editor (for editing HTML) or a Slider (for adjusting a number).
-       //              An edit widget must support the following API to be used:
-       //                      - displayedValue or value as initialization parameter,
-       //                      and available through set('displayedValue') / set('value')
-       //                      - void focus()
-       //                      - DOM-node focusNode = node containing editable text
-
-       // editing: [readonly] Boolean
-       //              Is the node currently in edit mode?
-       editing: false,
-
-       // autoSave: Boolean
-       //              Changing the value automatically saves it; don't have to push save button
-       //              (and save button isn't even displayed)
-       autoSave: true,
-
-       // buttonSave: String
-       //              Save button label
-       buttonSave: "",
-
-       // buttonCancel: String
-       //              Cancel button label
-       buttonCancel: "",
-
-       // renderAsHtml: Boolean
-       //              Set this to true if the specified Editor's value should be interpreted as HTML
-       //              rather than plain text (ex: `dijit.Editor`)
-       renderAsHtml: false,
-
-       // editor: String
-       //              Class name for Editor widget
-       editor: "dijit.form.TextBox",
-
-       // editorWrapper: String
-       //              Class name for widget that wraps the editor widget, displaying save/cancel
-       //              buttons.
-       editorWrapper: "dijit._InlineEditor",
-
-       // editorParams: Object
-       //              Set of parameters for editor, like {required: true}
-       editorParams: {},
-
-       onChange: function(value){
-               // summary:
-               //              Set this handler to be notified of changes to value.
-               // tags:
-               //              callback
-       },
-
-       onCancel: function(){
-               // summary:
-               //              Set this handler to be notified when editing is cancelled.
-               // tags:
-               //              callback
-       },
-
-       // width: String
-       //              Width of editor.  By default it's width=100% (ie, block mode).
-       width: "100%",
-
-       // value: String
-       //              The display value of the widget in read-only mode
-       value: "",
-
-       // noValueIndicator: [const] String
-       //              The text that gets displayed when there is no value (so that the user has a place to click to edit)
-       noValueIndicator: dojo.isIE <= 6 ?      // font-family needed on IE6 but it messes up IE8
-               "<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>" :
-               "<span style='text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",
-
-       constructor: function(){
-               // summary:
-               //              Sets up private arrays etc.
-               // tags:
-               //              private
-               this.editorParams = {};
-       },
-
-       postMixInProperties: function(){
-               this.inherited(arguments);
-
-               // save pointer to original source node, since Widget nulls-out srcNodeRef
-               this.displayNode = this.srcNodeRef;
-
-               // connect handlers to the display node
-               var events = {
-                       ondijitclick: "_onClick",
-                       onmouseover: "_onMouseOver",
-                       onmouseout: "_onMouseOut",
-                       onfocus: "_onMouseOver",
-                       onblur: "_onMouseOut"
-               };
-               for(var name in events){
-                       this.connect(this.displayNode, name, events[name]);
-               }
-               dijit.setWaiRole(this.displayNode, "button");
-               if(!this.displayNode.getAttribute("tabIndex")){
-                       this.displayNode.setAttribute("tabIndex", 0);
-               }
-
-               if(!this.value && !("value" in this.params)){ // "" is a good value if specified directly so check params){
-                  this.value = dojo.trim(this.renderAsHtml ? this.displayNode.innerHTML :
-                     (this.displayNode.innerText||this.displayNode.textContent||""));
-               }
-               if(!this.value){
-                   this.displayNode.innerHTML = this.noValueIndicator;
-               }
-
-               dojo.addClass(this.displayNode, 'dijitInlineEditBoxDisplayMode');
-       },
-
-       setDisabled: function(/*Boolean*/ disabled){
-               // summary:
-               //              Deprecated.   Use set('disabled', ...) instead.
-               // tags:
-               //              deprecated
-               dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated.  Use set('disabled', bool) instead.", "", "2.0");
-               this.set('disabled', disabled);
-       },
-
-       _setDisabledAttr: function(/*Boolean*/ disabled){
-               // summary:
-               //              Hook to make set("disabled", ...) work.
-               //              Set disabled state of widget.
-               this.disabled = disabled;
-               dijit.setWaiState(this.domNode, "disabled", disabled);
-               if(disabled){
-                       this.displayNode.removeAttribute("tabIndex");
-               }else{
-                       this.displayNode.setAttribute("tabIndex", 0);
-               }
-               dojo.toggleClass(this.displayNode, "dijitInlineEditBoxDisplayModeDisabled", disabled);
-       },
-
-       _onMouseOver: function(){
-               // summary:
-               //              Handler for onmouseover and onfocus event.
-               // tags:
-               //              private
-               if(!this.disabled){
-                       dojo.addClass(this.displayNode, "dijitInlineEditBoxDisplayModeHover");
-               }
-       },
-
-       _onMouseOut: function(){
-               // summary:
-               //              Handler for onmouseout and onblur event.
-               // tags:
-               //              private
-               dojo.removeClass(this.displayNode, "dijitInlineEditBoxDisplayModeHover");
-       },
-
-       _onClick: function(/*Event*/ e){
-               // summary:
-               //              Handler for onclick event.
-               // tags:
-               //              private
-               if(this.disabled){ return; }
-               if(e){ dojo.stopEvent(e); }
-               this._onMouseOut();
-
-               // Since FF gets upset if you move a node while in an event handler for that node...
-               setTimeout(dojo.hitch(this, "edit"), 0);
-       },
-
-       edit: function(){
-               // summary:
-               //              Display the editor widget in place of the original (read only) markup.
-               // tags:
-               //              private
-
-               if(this.disabled || this.editing){ return; }
-               this.editing = true;
-
-               // save some display node values that can be restored later
-               this._savedPosition = dojo.style(this.displayNode, "position") || "static";
-               this._savedOpacity = dojo.style(this.displayNode, "opacity") || "1";
-               this._savedTabIndex = dojo.attr(this.displayNode, "tabIndex") || "0";
-
-               if(this.wrapperWidget){
-                       var ew = this.wrapperWidget.editWidget;
-                       ew.set("displayedValue" in ew ? "displayedValue" : "value", this.value);
-               }else{
-                       // Placeholder for edit widget
-                       // Put place holder (and eventually editWidget) before the display node so that it's positioned correctly
-                       // when Calendar dropdown appears, which happens automatically on focus.
-                       var placeholder = dojo.create("span", null, this.domNode, "before");
-
-                       // Create the editor wrapper (the thing that holds the editor widget and the save/cancel buttons)
-                       var ewc = dojo.getObject(this.editorWrapper);
-                       this.wrapperWidget = new ewc({
-                               value: this.value,
-                               buttonSave: this.buttonSave,
-                               buttonCancel: this.buttonCancel,
-                               dir: this.dir,
-                               lang: this.lang,
-                               tabIndex: this._savedTabIndex,
-                               editor: this.editor,
-                               inlineEditBox: this,
-                               sourceStyle: dojo.getComputedStyle(this.displayNode),
-                               save: dojo.hitch(this, "save"),
-                               cancel: dojo.hitch(this, "cancel")
-                       }, placeholder);
-               }
-               var ww = this.wrapperWidget;
-
-               if(dojo.isIE){
-                       dijit.focus(dijit.getFocus()); // IE (at least 8) needs help with tab order changes
-               }
-               // to avoid screen jitter, we first create the editor with position:absolute, visibility:hidden,
-               // and then when it's finished rendering, we switch from display mode to editor
-               // position:absolute releases screen space allocated to the display node
-               // opacity:0 is the same as visibility:hidden but is still focusable
-               // visiblity:hidden removes focus outline
-
-               dojo.style(this.displayNode, { position: "absolute", opacity: "0", display: "none" }); // makes display node invisible, display style used for focus-ability
-               dojo.style(ww.domNode, { position: this._savedPosition, visibility: "visible", opacity: "1" });
-               dojo.attr(this.displayNode, "tabIndex", "-1"); // needed by WebKit for TAB from editor to skip displayNode
-
-               // Replace the display widget with edit widget, leaving them both displayed for a brief time so that
-               // focus can be shifted without incident.  (browser may needs some time to render the editor.)
-               setTimeout(dojo.hitch(this, function(){
-                       ww.focus(); // both nodes are showing, so we can switch focus safely
-                       ww._resetValue = ww.getValue();
-               }), 0);
-       },
-
-       _onBlur: function(){
-               // summary:
-               //              Called when focus moves outside the InlineEditBox.
-               //              Performs garbage collection.
-               // tags:
-               //              private
-
-               this.inherited(arguments);
-               if(!this.editing){
-                       /* causes IE focus problems, see TooltipDialog_a11y.html...
-                       setTimeout(dojo.hitch(this, function(){
-                               if(this.wrapperWidget){
-                                       this.wrapperWidget.destroy();
-                                       delete this.wrapperWidget;
-                               }
-                       }), 0);
-                       */
-               }
-       },
-
-       destroy: function(){
-               if(this.wrapperWidget){
-                       this.wrapperWidget.destroy();
-                       delete this.wrapperWidget;
-               }
-               this.inherited(arguments);
-       },
-
-       _showText: function(/*Boolean*/ focus){
-               // summary:
-               //              Revert to display mode, and optionally focus on display node
-               // tags:
-               //              private
-
-               var ww = this.wrapperWidget;
-               dojo.style(ww.domNode, { position: "absolute", visibility: "hidden", opacity: "0" }); // hide the editor from mouse/keyboard events
-               dojo.style(this.displayNode, { position: this._savedPosition, opacity: this._savedOpacity, display: "" }); // make the original text visible
-               dojo.attr(this.displayNode, "tabIndex", this._savedTabIndex);
-               if(focus){
-                       dijit.focus(this.displayNode);
-               }
-       },
-
-       save: function(/*Boolean*/ focus){
-               // summary:
-               //              Save the contents of the editor and revert to display mode.
-               // focus: Boolean
-               //              Focus on the display mode text
-               // tags:
-               //              private
-
-               if(this.disabled || !this.editing){ return; }
-               this.editing = false;
-
-               var ww = this.wrapperWidget;
-               var value = ww.getValue();
-               this.set('value', value); // display changed, formatted value
-
-               // tell the world that we have changed
-               setTimeout(dojo.hitch(this, "onChange", value), 0); // setTimeout prevents browser freeze for long-running event handlers
-
-               this._showText(focus); // set focus as needed
-       },
-
-       setValue: function(/*String*/ val){
-               // summary:
-               //              Deprecated.   Use set('value', ...) instead.
-               // tags:
-               //              deprecated
-               dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated.  Use set('value', ...) instead.", "", "2.0");
-               return this.set("value", val);
-       },
-
-       _setValueAttr: function(/*String*/ val){
-               // summary:
-               //              Hook to make set("value", ...) work.
-               //              Inserts specified HTML value into this node, or an "input needed" character if node is blank.
-
-               this.value = val = dojo.trim(val);
-               if(!this.renderAsHtml){
-                       val = val.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;").replace(/\n/g, "<br>");
-               }
-               this.displayNode.innerHTML = val || this.noValueIndicator;
-       },
-
-       getValue: function(){
-               // summary:
-               //              Deprecated.   Use get('value') instead.
-               // tags:
-               //              deprecated
-               dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated.  Use get('value') instead.", "", "2.0");
-               return this.get("value");
-       },
-
-       cancel: function(/*Boolean*/ focus){
-               // summary:
-               //              Revert to display mode, discarding any changes made in the editor
-               // tags:
-               //              private
-
-               if(this.disabled || !this.editing){ return; }
-               this.editing = false;
-
-               // tell the world that we have no changes
-               setTimeout(dojo.hitch(this, "onCancel"), 0); // setTimeout prevents browser freeze for long-running event handlers
-
-               this._showText(focus);
-       }
-});
-
-dojo.declare(
-       "dijit._InlineEditor",
-        [dijit._Widget, dijit._Templated],
-{
-       // summary:
-       //              Internal widget used by InlineEditBox, displayed when in editing mode
-       //              to display the editor and maybe save/cancel buttons.  Calling code should
-       //              connect to save/cancel methods to detect when editing is finished
-       //
-       //              Has mainly the same parameters as InlineEditBox, plus these values:
-       //
-       // style: Object
-       //              Set of CSS attributes of display node, to replicate in editor
-       //
-       // value: String
-       //              Value as an HTML string or plain text string, depending on renderAsHTML flag
-
-       templateString: dojo.cache("dijit", "templates/InlineEditBox.html", "<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"),
-       widgetsInTemplate: true,
-
-       postMixInProperties: function(){
-               this.inherited(arguments);
-               this.messages = dojo.i18n.getLocalization("dijit", "common", this.lang);
-               dojo.forEach(["buttonSave", "buttonCancel"], function(prop){
-                       if(!this[prop]){ this[prop] = this.messages[prop]; }
-               }, this);
-       },
-
-       postCreate: function(){
-               // Create edit widget in place in the template
-               var cls = dojo.getObject(this.editor);
-
-               // Copy the style from the source
-               // Don't copy ALL properties though, just the necessary/applicable ones.
-               // wrapperStyle/destStyle code is to workaround IE bug where getComputedStyle().fontSize
-               // is a relative value like 200%, rather than an absolute value like 24px, and
-               // the 200% can refer *either* to a setting on the node or it's ancestor (see #11175)
-               var srcStyle = this.sourceStyle,
-                       editStyle = "line-height:" + srcStyle.lineHeight + ";",
-                       destStyle = dojo.getComputedStyle(this.domNode);
-               dojo.forEach(["Weight","Family","Size","Style"], function(prop){
-                       var textStyle = srcStyle["font"+prop],
-                               wrapperStyle = destStyle["font"+prop];
-                       if(wrapperStyle != textStyle){
-                               editStyle += "font-"+prop+":"+srcStyle["font"+prop]+";";
-                       }
-               }, this);
-               dojo.forEach(["marginTop","marginBottom","marginLeft", "marginRight"], function(prop){
-                       this.domNode.style[prop] = srcStyle[prop];
-               }, this);
-               var width = this.inlineEditBox.width;
-               if(width == "100%"){
-                       // block mode
-                       editStyle += "width:100%;";
-                       this.domNode.style.display = "block";
-               }else{
-                       // inline-block mode
-                       editStyle += "width:" + (width + (Number(width) == width ? "px" : "")) + ";";
-               }
-               var editorParams = dojo.delegate(this.inlineEditBox.editorParams, {
-                       style: editStyle,
-                       dir: this.dir,
-                       lang: this.lang
-               });
-               editorParams[ "displayedValue" in cls.prototype ? "displayedValue" : "value"] = this.value;
-               var ew = (this.editWidget = new cls(editorParams, this.editorPlaceholder));
-
-               if(this.inlineEditBox.autoSave){
-                       // Remove the save/cancel buttons since saving is done by simply tabbing away or
-                       // selecting a value from the drop down list
-                       dojo.destroy(this.buttonContainer);
-
-                       // Selecting a value from a drop down list causes an onChange event and then we save
-                       this.connect(ew, "onChange", "_onChange");
-
-                       // ESC and TAB should cancel and save.  Note that edit widgets do a stopEvent() on ESC key (to
-                       // prevent Dialog from closing when the user just wants to revert the value in the edit widget),
-                       // so this is the only way we can see the key press event.
-                       this.connect(ew, "onKeyPress", "_onKeyPress");
-               }else{
-                       // If possible, enable/disable save button based on whether the user has changed the value
-                       if("intermediateChanges" in cls.prototype){
-                               ew.set("intermediateChanges", true);
-                               this.connect(ew, "onChange", "_onIntermediateChange");
-                               this.saveButton.set("disabled", true);
-                       }
-               }
-       },
-
-       _onIntermediateChange: function(val){
-               // summary:
-               //              Called for editor widgets that support the intermediateChanges=true flag as a way
-               //              to detect when to enable/disabled the save button
-               this.saveButton.set("disabled", (this.getValue() == this._resetValue) || !this.enableSave());
-       },
-
-       destroy: function(){
-               this.editWidget.destroy(true); // let the parent wrapper widget clean up the DOM
-               this.inherited(arguments);
-       },
-
-       getValue: function(){
-               // summary:
-               //              Return the [display] value of the edit widget
-               var ew = this.editWidget;
-               return String(ew.get("displayedValue" in ew ? "displayedValue" : "value"));
-       },
-
-       _onKeyPress: function(e){
-               // summary:
-               //              Handler for keypress in the edit box in autoSave mode.
-               // description:
-               //              For autoSave widgets, if Esc/Enter, call cancel/save.
-               // tags:
-               //              private
-
-               if(this.inlineEditBox.autoSave && this.inlineEditBox.editing){
-                       if(e.altKey || e.ctrlKey){ return; }
-                       // If Enter/Esc pressed, treat as save/cancel.
-                       if(e.charOrCode == dojo.keys.ESCAPE){
-                               dojo.stopEvent(e);
-                               this.cancel(true); // sets editing=false which short-circuits _onBlur processing
-                       }else if(e.charOrCode == dojo.keys.ENTER && e.target.tagName == "INPUT"){
-                               dojo.stopEvent(e);
-                               this._onChange(); // fire _onBlur and then save
-                       }
-
-                       // _onBlur will handle TAB automatically by allowing
-                       // the TAB to change focus before we mess with the DOM: #6227
-                       // Expounding by request:
-                       //      The current focus is on the edit widget input field.
-                       //      save() will hide and destroy this widget.
-                       //      We want the focus to jump from the currently hidden
-                       //      displayNode, but since it's hidden, it's impossible to
-                       //      unhide it, focus it, and then have the browser focus
-                       //      away from it to the next focusable element since each
-                       //      of these events is asynchronous and the focus-to-next-element
-                       //      is already queued.
-                       //      So we allow the browser time to unqueue the move-focus event
-                       //      before we do all the hide/show stuff.
-               }
-       },
-
-       _onBlur: function(){
-               // summary:
-               //              Called when focus moves outside the editor
-               // tags:
-               //              private
-
-               this.inherited(arguments);
-               if(this.inlineEditBox.autoSave && this.inlineEditBox.editing){
-                       if(this.getValue() == this._resetValue){
-                               this.cancel(false);
-                       }else if(this.enableSave()){
-                               this.save(false);
-                       }
-               }
-       },
-
-       _onChange: function(){
-               // summary:
-               //              Called when the underlying widget fires an onChange event,
-               //              such as when the user selects a value from the drop down list of a ComboBox,
-               //              which means that the user has finished entering the value and we should save.
-               // tags:
-               //              private
-
-               if(this.inlineEditBox.autoSave && this.inlineEditBox.editing && this.enableSave()){
-                       dojo.style(this.inlineEditBox.displayNode, { display: "" });
-                       dijit.focus(this.inlineEditBox.displayNode); // fires _onBlur which will save the formatted value
-               }
-       },
-
-       enableSave: function(){
-               // summary:
-               //              User overridable function returning a Boolean to indicate
-               //              if the Save button should be enabled or not - usually due to invalid conditions
-               // tags:
-               //              extension
-               return (
-                       this.editWidget.isValid
-                       ? this.editWidget.isValid()
-                       : true
-               );
-       },
-
-       focus: function(){
-               // summary:
-               //              Focus the edit widget.
-               // tags:
-               //              protected
-
-               this.editWidget.focus();
-               setTimeout(dojo.hitch(this, function(){
-                       if(this.editWidget.focusNode && this.editWidget.focusNode.tagName == "INPUT"){
-                               dijit.selectInputText(this.editWidget.focusNode);
-                       }
-               }), 0);
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.form.Form"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.Form"] = true;
-dojo.provide("dijit.form.Form");
-
-
-
-
-
-dojo.declare(
-       "dijit.form.Form",
-       [dijit._Widget, dijit._Templated, dijit.form._FormMixin],
-       {
-               // summary:
-               //              Widget corresponding to HTML form tag, for validation and serialization
-               //
-               // example:
-               //      |       <form dojoType="dijit.form.Form" id="myForm">
-               //      |               Name: <input type="text" name="name" />
-               //      |       </form>
-               //      |       myObj = {name: "John Doe"};
-               //      |       dijit.byId('myForm').set('value', myObj);
-               //      |
-               //      |       myObj=dijit.byId('myForm').get('value');
-
-               // HTML <FORM> attributes
-
-               // name: String?
-               //              Name of form for scripting.
-               name: "",
-
-               // action: String?
-               //              Server-side form handler.
-               action: "",
-
-               // method: String?
-               //              HTTP method used to submit the form, either "GET" or "POST".
-               method: "",
-
-               // encType: String?
-               //              Encoding type for the form, ex: application/x-www-form-urlencoded.
-               encType: "",
-
-               // accept-charset: String?
-               //              List of supported charsets.
-               "accept-charset": "",
-
-               // accept: String?
-               //              List of MIME types for file upload.
-               accept: "",
-
-               // target: String?
-               //              Target frame for the document to be opened in.
-               target: "",
-
-               templateString: "<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",
-
-               attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-                       action: "",
-                       method: "",
-                       encType: "",
-                       "accept-charset": "",
-                       accept: "",
-                       target: ""
-               }),
-
-               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);
-               },
-
-               execute: function(/*Object*/ formContents){
-                       // summary:
-                       //              Deprecated: use submit()
-                       // tags:
-                       //              deprecated
-               },
-
-               onExecute: function(){
-                       // summary:
-                       //              Deprecated: use onSubmit()
-                       // tags:
-                       //              deprecated
-               },
-
-               _setEncTypeAttr: function(/*String*/ value){
-                       this.encType = value;
-                       dojo.attr(this.domNode, "encType", value);
-                       if(dojo.isIE){ this.domNode.encoding = value; }
-               },
-
-               postCreate: function(){
-                       // IE tries to hide encType
-                       // TODO: this code should be in parser, not here.
-                       if(dojo.isIE && this.srcNodeRef && this.srcNodeRef.attributes){
-                               var item = this.srcNodeRef.attributes.getNamedItem('encType');
-                               if(item && !item.specified && (typeof item.value == "string")){
-                                       this.set('encType', item.value);
-                               }
-                       }
-                       this.inherited(arguments);
-               },
-
-               reset: function(/*Event?*/ e){
-                       // summary:
-                       //              restores all widget values back to their init values,
-                       //              calls onReset() which can cancel the reset by returning false
-
-                       // create fake event so we can know if preventDefault() is called
-                       var faux = {
-                               returnValue: true, // the IE way
-                               preventDefault: function(){ // not IE
-                                                       this.returnValue = false;
-                                               },
-                               stopPropagation: function(){}, 
-                               currentTarget: e ? e.target : this.domNode, 
-                               target: e ? e.target : this.domNode
-                       };
-                       // if return value is not exactly false, and haven't called preventDefault(), then reset
-                       if(!(this.onReset(faux) === false) && faux.returnValue){
-                               this.inherited(arguments, []);
-                       }
-               },
-
-               onReset: function(/*Event?*/ e){
-                       // summary:
-                       //              Callback when user resets the form. This method is intended
-                       //              to be over-ridden. When the `reset` method is called
-                       //              programmatically, the return value from `onReset` is used
-                       //              to compute whether or not resetting should proceed
-                       // tags:
-                       //              callback
-                       return true; // Boolean
-               },
-
-               _onReset: function(e){
-                       this.reset(e);
-                       dojo.stopEvent(e);
-                       return false;
-               },
-
-               _onSubmit: function(e){
-                       var fp = dijit.form.Form.prototype;
-                       // TODO: remove this if statement beginning with 2.0
-                       if(this.execute != fp.execute || this.onExecute != fp.onExecute){
-                               dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.", "", "2.0");
-                               this.onExecute();
-                               this.execute(this.getValues());
-                       }
-                       if(this.onSubmit(e) === false){ // only exactly false stops submit
-                               dojo.stopEvent(e);
-                       }
-               },
-
-               onSubmit: function(/*Event?*/e){
-                       // summary:
-                       //              Callback when user submits the form.
-                       // description:
-                       //              This method is intended to be over-ridden, but by default it checks and
-                       //              returns the validity of form elements. When the `submit`
-                       //              method is called programmatically, the return value from
-                       //              `onSubmit` is used to compute whether or not submission
-                       //              should proceed
-                       // tags:
-                       //              extension
-
-                       return this.isValid(); // Boolean
-               },
-
-               submit: function(){
-                       // summary:
-                       //              programmatically submit form if and only if the `onSubmit` returns true
-                       if(!(this.onSubmit() === false)){
-                               this.containerNode.submit();
-                       }
-               }
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.form.DropDownButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.DropDownButton"] = true;
-dojo.provide("dijit.form.DropDownButton");
-
-
-
-}
-
-if(!dojo._hasResource["dijit.form.ComboButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.ComboButton"] = true;
-dojo.provide("dijit.form.ComboButton");
-
-
-}
-
-if(!dojo._hasResource["dijit.form.ToggleButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.ToggleButton"] = true;
-dojo.provide("dijit.form.ToggleButton");
-
-
-}
-
-if(!dojo._hasResource["dijit.form.CheckBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.CheckBox"] = true;
-dojo.provide("dijit.form.CheckBox");
-
-
-
-dojo.declare(
-       "dijit.form.CheckBox",
-       dijit.form.ToggleButton,
-       {
-               // summary:
-               //              Same as an HTML checkbox, but with fancy styling.
-               //
-               // description:
-               //              User interacts with real html inputs.
-               //              On onclick (which occurs by mouse click, space-bar, or
-               //              using the arrow keys to switch the selected radio button),
-               //              we update the state of the checkbox/radio.
-               //
-               //              There are two modes:
-               //                      1. High contrast mode
-               //                      2. Normal mode
-               //
-               //              In case 1, the regular html inputs are shown and used by the user.
-               //              In case 2, the regular html inputs are invisible but still used by
-               //              the user. They are turned quasi-invisible and overlay the background-image.
-
-               templateString: dojo.cache("dijit.form", "templates/CheckBox.html", "<div class=\"dijit dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),
-
-               baseClass: "dijitCheckBox",
-
-               // type: [private] String
-               //              type attribute on <input> node.
-               //              Overrides `dijit.form.Button.type`.   Users should not change this value.
-               type: "checkbox",
-
-               // value: String
-               //              As an initialization parameter, equivalent to value field on normal checkbox
-               //              (if checked, the value is passed as the value when form is submitted).
-               //
-               //              However, attr('value') will return either the string or false depending on
-               //              whether or not the checkbox is checked.
-               //
-               //              attr('value', string) will check the checkbox and change the value to the
-               //              specified string
-               //
-               //              attr('value', boolean) will change the checked state.
-               value: "on",
-
-               // 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,
-               
-               // the attributeMap should inherit from dijit.form._FormWidget.prototype.attributeMap 
-               // instead of ToggleButton as the icon mapping has no meaning for a CheckBox
-               attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
-                       readOnly: "focusNode"
-               }),
-
-               _setReadOnlyAttr: function(/*Boolean*/ value){
-                       this.readOnly = value;
-                       dojo.attr(this.focusNode, 'readOnly', value);
-                       dijit.setWaiState(this.focusNode, "readonly", value);
-               },
-
-               _setValueAttr: function(/*String or Boolean*/ newValue, /*Boolean*/ priorityChange){
-                       // summary:
-                       //              Handler for value= attribute to constructor, and also calls to
-                       //              attr('value', val).
-                       // description:
-                       //              During initialization, just saves as attribute to the <input type=checkbox>.
-                       //
-                       //              After initialization,
-                       //              when passed a boolean, controls whether or not the CheckBox is checked.
-                       //              If passed a string, changes the value attribute of the CheckBox (the one
-                       //              specified as "value" when the CheckBox was constructed (ex: <input
-                       //              dojoType="dijit.CheckBox" value="chicken">)
-                       if(typeof newValue == "string"){
-                               this.value = newValue;
-                               dojo.attr(this.focusNode, 'value', newValue);
-                               newValue = true;
-                       }
-                       if(this._created){
-                               this.set('checked', newValue, priorityChange);
-                       }
-               },
-               _getValueAttr: function(){
-                       // summary:
-                       //              Hook so attr('value') works.
-                       // description:
-                       //              If the CheckBox is checked, returns the value attribute.
-                       //              Otherwise returns false.
-                       return (this.checked ? this.value : false);
-               },
-
-               // Override dijit.form.Button._setLabelAttr() since we don't even have a containerNode.
-               // Normally users won't try to set label, except when CheckBox or RadioButton is the child of a dojox.layout.TabContainer
-               _setLabelAttr: undefined,
-
-               postMixInProperties: function(){
-                       if(this.value == ""){
-                               this.value = "on";
-                       }
-
-                       // Need to set initial checked state as part of template, so that form submit works.
-                       // dojo.attr(node, "checked", bool) doesn't work on IEuntil node has been attached
-                       // to <body>, see #8666
-                       this.checkedAttrSetting = this.checked ? "checked" : "";
-
-                       this.inherited(arguments);
-               },
-
-                _fillContent: function(/*DomNode*/ source){
-                       // Override Button::_fillContent() since it doesn't make sense for CheckBox,
-                       // since CheckBox doesn't even have a container
-               },
-
-               reset: function(){
-                       // Override ToggleButton.reset()
-
-                       this._hasBeenBlurred = false;
-
-                       this.set('checked', this.params.checked || false);
-
-                       // Handle unlikely event that the <input type=checkbox> value attribute has changed
-                       this.value = this.params.value || "on";
-                       dojo.attr(this.focusNode, 'value', this.value);
-               },
-
-               _onFocus: function(){
-                       if(this.id){
-                               dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");
-                       }
-                       this.inherited(arguments);
-               },
-
-               _onBlur: function(){
-                       if(this.id){
-                               dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");
-                       }
-                       this.inherited(arguments);
-               },
-
-               _onClick: function(/*Event*/ e){
-                       // summary:
-                       //              Internal function to handle click actions - need to check
-                       //              readOnly, since button no longer does that check.
-                       if(this.readOnly){
-                               return false;
-                       }
-                       return this.inherited(arguments);
-               }
-       }
-);
-
-dojo.declare(
-       "dijit.form.RadioButton",
-       dijit.form.CheckBox,
-       {
-               // summary:
-               //              Same as an HTML radio, but with fancy styling.
-
-               type: "radio",
-               baseClass: "dijitRadio",
-
-               _setCheckedAttr: function(/*Boolean*/ value){
-                       // If I am being checked then have to deselect currently checked radio button
-                       this.inherited(arguments);
-                       if(!this._created){ return; }
-                       if(value){
-                               var _this = this;
-                               // search for radio buttons with the same name that need to be unchecked
-                               dojo.query("INPUT[type=radio]", this.focusNode.form || dojo.doc).forEach( // can't use name= since dojo.query doesn't support [] in the name
-                                       function(inputNode){
-                                               if(inputNode.name == _this.name && inputNode != _this.focusNode && inputNode.form == _this.focusNode.form){
-                                                       var widget = dijit.getEnclosingWidget(inputNode);
-                                                       if(widget && widget.checked){
-                                                               widget.set('checked', false);
-                                                       }
-                                               }
-                                       }
-                               );
-                       }
-               },
-
-               _clicked: function(/*Event*/ e){
-                       if(!this.checked){
-                               this.set('checked', true);
-                       }
-               }
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.form.RadioButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.RadioButton"] = true;
-dojo.provide("dijit.form.RadioButton");
-
-
-// TODO: for 2.0, move the RadioButton code into this file
-
-}
-
-if(!dojo._hasResource["dojo.cldr.monetary"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.cldr.monetary"] = true;
-dojo.provide("dojo.cldr.monetary");
-
-dojo.cldr.monetary.getData = function(/*String*/code){
-// summary: A mapping of currency code to currency-specific formatting information. Returns a unique object with properties: places, round.
-// code: an [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code
-
-// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/currencyData/fractions
-
-       var placesData = {
-               ADP:0,AFN:0,ALL:0,AMD:0,BHD:3,BIF:0,BYR:0,CLF:0,CLP:0,
-               COP:0,CRC:0,DJF:0,ESP:0,GNF:0,GYD:0,HUF:0,IDR:0,IQD:0,
-               IRR:3,ISK:0,ITL:0,JOD:3,JPY:0,KMF:0,KPW:0,KRW:0,KWD:3,
-               LAK:0,LBP:0,LUF:0,LYD:3,MGA:0,MGF:0,MMK:0,MNT:0,MRO:0,
-               MUR:0,OMR:3,PKR:0,PYG:0,RSD:0,RWF:0,SLL:0,SOS:0,STD:0,
-               SYP:0,TMM:0,TND:3,TRL:0,TZS:0,UGX:0,UZS:0,VND:0,VUV:0,
-               XAF:0,XOF:0,XPF:0,YER:0,ZMK:0,ZWD:0
-       };
-
-       var roundingData = {CHF:5};
-
-       var places = placesData[code], round = roundingData[code];
-       if(typeof places == "undefined"){ places = 2; }
-       if(typeof round == "undefined"){ round = 0; }
-
-       return {places: places, round: round}; // Object
-};
-
-}
-
-if(!dojo._hasResource["dojo.currency"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.currency"] = true;
-dojo.provide("dojo.currency");
-
-
-
-
-
-
-/*=====
-dojo.currency = {
-       // summary: localized formatting and parsing routines for currencies
-       //
-       // description: extends dojo.number to provide culturally-appropriate formatting of values
-       //      in various world currencies, including use of a currency symbol.  The currencies are specified
-       //      by a three-letter international symbol in all uppercase, and support for the currencies is
-       //      provided by the data in `dojo.cldr`.  The scripts generating dojo.cldr specify which
-       //      currency support is included.  A fixed number of decimal places is determined based
-       //      on the currency type and is not determined by the 'pattern' argument.  The fractional
-       //      portion is optional, by default, and variable length decimals are not supported.
-}
-=====*/
-
-dojo.currency._mixInDefaults = function(options){
-       options = options || {};
-       options.type = "currency";
-
-       // Get locale-dependent currency data, like the symbol
-       var bundle = dojo.i18n.getLocalization("dojo.cldr", "currency", options.locale) || {};
-
-       // Mixin locale-independent currency data, like # of places
-       var iso = options.currency;
-       var data = dojo.cldr.monetary.getData(iso);
-
-       dojo.forEach(["displayName","symbol","group","decimal"], function(prop){
-               data[prop] = bundle[iso+"_"+prop];
-       });
-
-       data.fractional = [true, false];
-
-       // Mixin with provided options
-       return dojo.mixin(data, options);
-}
-
-/*=====
-dojo.declare("dojo.currency.__FormatOptions", [dojo.number.__FormatOptions], {
-       //      type: String?
-       //              Should not be set.  Value is assumed to be "currency".
-       //      symbol: String?
-       //              localized currency symbol. The default will be looked up in table of supported currencies in `dojo.cldr`
-       //              A [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code will be used if not found.
-       //      currency: String?
-       //              an [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code, a three letter sequence like "USD".
-       //              For use with dojo.currency only.
-       //      places: Number?
-       //              number of decimal places to show.  Default is defined based on which currency is used.
-       type: "",
-       symbol: "",
-       currency: "",
-       places: ""
-});
-=====*/
-
-dojo.currency.format = function(/*Number*/value, /*dojo.currency.__FormatOptions?*/options){
-// summary:
-//             Format a Number as a currency, using locale-specific settings
-//
-// description:
-//             Create a string from a Number using a known, localized pattern.
-//             [Formatting patterns](http://www.unicode.org/reports/tr35/#Number_Elements)
-//             appropriate to the locale are chosen from the [CLDR](http://unicode.org/cldr)
-//             as well as the appropriate symbols and delimiters and number of decimal places.
-//
-// value:
-//             the number to be formatted.
-
-       return dojo.number.format(value, dojo.currency._mixInDefaults(options));
-}
-
-dojo.currency.regexp = function(/*dojo.number.__RegexpOptions?*/options){
-//
-// summary:
-//             Builds the regular needed to parse a currency value
-//
-// description:
-//             Returns regular expression with positive and negative match, group and decimal separators
-//             Note: the options.places default, the number of decimal places to accept, is defined by the currency type.
-       return dojo.number.regexp(dojo.currency._mixInDefaults(options)); // String
-}
-
-/*=====
-dojo.declare("dojo.currency.__ParseOptions", [dojo.number.__ParseOptions], {
-       //      type: String?
-       //              Should not be set.  Value is assumed to be currency.
-       //      currency: String?
-       //              an [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code, a three letter sequence like "USD".
-       //              For use with dojo.currency only.
-       //      symbol: String?
-       //              localized currency symbol. The default will be looked up in table of supported currencies in `dojo.cldr`
-       //              A [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code will be used if not found.
-       //      places: Number?
-       //              fixed number of decimal places to accept.  The default is determined based on which currency is used.
-       //      fractional: Boolean?|Array?
-       //              Whether to include the fractional portion, where the number of decimal places are implied by the currency
-       //              or explicit 'places' parameter.  The value [true,false] makes the fractional portion optional.
-       //              By default for currencies, it the fractional portion is optional.
-       type: "",
-       currency: "",
-       symbol: "",
-       places: "",
-       fractional: ""
-});
-=====*/
-
-dojo.currency.parse = function(/*String*/expression, /*dojo.currency.__ParseOptions?*/options){
-       //
-       // summary:
-       //              Convert a properly formatted currency string to a primitive Number,
-       //              using locale-specific settings.
-       //
-       // description:
-       //              Create a Number from a string using a known, localized pattern.
-       //              [Formatting patterns](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
-       //              are chosen appropriate to the locale, as well as the appropriate symbols and delimiters
-       //              and number of decimal places.
-       //
-       // expression: A string representation of a currency value
-
-       return dojo.number.parse(expression, dojo.currency._mixInDefaults(options));
-}
-
-}
-
-if(!dojo._hasResource["dijit.form.NumberTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.NumberTextBox"] = true;
-dojo.provide("dijit.form.NumberTextBox");
-
-
-
-
-/*=====
-dojo.declare(
-       "dijit.form.NumberTextBox.__Constraints",
-       [dijit.form.RangeBoundTextBox.__Constraints, dojo.number.__FormatOptions, dojo.number.__ParseOptions], {
-       // summary:
-       //              Specifies both the rules on valid/invalid values (minimum, maximum,
-       //              number of required decimal places), and also formatting options for
-       //              displaying the value when the field is not focused.
-       // example:
-       //              Minimum/maximum:
-       //              To specify a field between 0 and 120:
-       //      |               {min:0,max:120}
-       //              To specify a field that must be an integer:
-       //      |               {fractional:false}
-       //              To specify a field where 0 to 3 decimal places are allowed on input,
-       //              but after the field is blurred the value is displayed with 3 decimal places:
-       //      |               {places:'0,3'}
-});
-=====*/
-
-dojo.declare("dijit.form.NumberTextBoxMixin",
-       null,
-       {
-               // summary:
-               //              A mixin for all number textboxes
-               // tags:
-               //              protected
-
-               // Override ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
-               // than a straight regexp to deal with locale (plus formatting options too?)
-               regExpGen: dojo.number.regexp,
-
-               /*=====
-               // constraints: dijit.form.NumberTextBox.__Constraints
-               //              Despite the name, this parameter specifies both constraints on the input
-               //              (including minimum/maximum allowed values) as well as
-               //              formatting options like places (the number of digits to display after
-               //              the decimal point).   See `dijit.form.NumberTextBox.__Constraints` for details.
-               constraints: {},
-               ======*/
-
-               // value: Number
-               //              The value of this NumberTextBox as a Javascript Number (i.e., not a String).
-               //              If the displayed value is blank, the value is NaN, and if the user types in
-               //              an gibberish value (like "hello world"), the value is undefined
-               //              (i.e. attr('value') returns undefined).
-               //
-               //              Symmetrically, attr('value', NaN) will clear the displayed value,
-               //              whereas attr('value', undefined) will have no effect.
-               value: NaN,
-
-               // editOptions: [protected] Object
-               //              Properties to mix into constraints when the value is being edited.
-               //              This is here because we edit the number in the format "12345", which is
-               //              different than the display value (ex: "12,345")
-               editOptions: { pattern: '#.######' },
-
-               /*=====
-               _formatter: function(value, options){
-                       // summary:
-                       //              _formatter() is called by format().   It's the base routine for formatting a number,
-                       //              as a string, for example converting 12345 into "12,345".
-                       // value: Number
-                       //              The number to be converted into a string.
-                       // options: dojo.number.__FormatOptions?
-                       //              Formatting options
-                       // tags:
-                       //              protected extension
-
-                       return "12345";         // String
-               },
-                =====*/
-               _formatter: dojo.number.format,
-
-               _setConstraintsAttr: function(/* Object */ constraints){
-                       var places = typeof constraints.places == "number"? constraints.places : 0;
-                       if(places){ places++; } // decimal rounding errors take away another digit of precision
-                       if(typeof constraints.max != "number"){
-                               constraints.max = 9 * Math.pow(10, 15-places);
-                       }
-                       if(typeof constraints.min != "number"){
-                               constraints.min = -9 * Math.pow(10, 15-places);
-                       }
-                       this.inherited(arguments, [ constraints ]);
-                       if(this.focusNode && this.focusNode.value && !isNaN(this.value)){
-                               this.set('value', this.value);
-                       }
-               },
-
-               _onFocus: function(){
-                       if(this.disabled){ return; }
-                       var val = this.get('value');
-                       if(typeof val == "number" && !isNaN(val)){
-                               var formattedValue = this.format(val, this.constraints);
-                               if(formattedValue !== undefined){
-                                       this.textbox.value = formattedValue;
-                               }
-                       }
-                       this.inherited(arguments);
-               },
-
-               format: function(/*Number*/ value, /*dojo.number.__FormatOptions*/ constraints){
-                       // summary:
-                       //              Formats the value as a Number, according to constraints.
-                       // tags:
-                       //              protected
-
-                       var formattedValue = String(value);
-                       if(typeof value != "number"){ return formattedValue; }
-                       if(isNaN(value)){ return ""; }
-                       // check for exponential notation that dojo.number.format chokes on
-                       if(!("rangeCheck" in this && this.rangeCheck(value, constraints)) && constraints.exponent !== false && /\de[-+]?\d/i.test(formattedValue)){
-                               return formattedValue;
-                       }
-                       if(this.editOptions && this._focused){
-                               constraints = dojo.mixin({}, constraints, this.editOptions);
-                       }
-                       return this._formatter(value, constraints);
-               },
-
-               /*=====
-               parse: function(value, constraints){
-                       // summary:
-                       //              Parses the string value as a Number, according to constraints.
-                       // value: String
-                       //              String representing a number
-                       // constraints: dojo.number.__ParseOptions
-                       //              Formatting options
-                       // tags:
-                       //              protected
-
-                       return 123.45;          // Number
-               },
-               =====*/
-               parse: dojo.number.parse,
-
-               _getDisplayedValueAttr: function(){
-                       var v = this.inherited(arguments);
-                       return isNaN(v) ? this.textbox.value : v;
-               },
-
-               filter: function(/*Number*/ value){
-                       // summary:
-                       //              This is called with both the display value (string), and the actual value (a number).
-                       //              When called with the actual value it does corrections so that '' etc. are represented as NaN.
-                       //              Otherwise it dispatches to the superclass's filter() method.
-                       //
-                       //              See `dijit.form.TextBox.filter` for more details.
-                       return (value === null || value === '' || value === undefined) ? NaN : this.inherited(arguments); // attr('value', null||''||undefined) should fire onChange(NaN)
-               },
-
-               serialize: function(/*Number*/ value, /*Object?*/options){
-                       // summary:
-                       //              Convert value (a Number) into a canonical string (ie, how the number literal is written in javascript/java/C/etc.)
-                       // tags:
-                       //              protected
-                       return (typeof value != "number" || isNaN(value)) ? '' : this.inherited(arguments);
-               },
-
-               _setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange, /*String?*/formattedValue){
-                       // summary:
-                       //              Hook so attr('value', ...) works.
-                       if(value !== undefined && formattedValue === undefined){
-                               formattedValue = String(value);
-                               if(typeof value == "number"){
-                                       if(isNaN(value)){ formattedValue = '' }
-                                       // check for exponential notation that dojo.number.format chokes on
-                                       else if(("rangeCheck" in this && this.rangeCheck(value, this.constraints)) || this.constraints.exponent === false || !/\de[-+]?\d/i.test(formattedValue)){
-                                               formattedValue = undefined; // lets format comnpute a real string value
-                                       }
-                               }else if(!value){ // 0 processed in if branch above, ''|null|undefined flow thru here
-                                       formattedValue = '';
-                                       value = NaN;
-                               }else{ // non-numeric values
-                                       value = undefined;
-                               }
-                       }
-                       this.inherited(arguments, [value, priorityChange, formattedValue]);
-               },
-
-               _getValueAttr: function(){
-                       // summary:
-                       //              Hook so attr('value') works.
-                       //              Returns Number, NaN for '', or undefined for unparsable text
-                       var v = this.inherited(arguments); // returns Number for all values accepted by parse() or NaN for all other displayed values
-
-                       // If the displayed value of the textbox is gibberish (ex: "hello world"), this.inherited() above
-                       // returns NaN; this if() branch converts the return value to undefined.
-                       // Returning undefined prevents user text from being overwritten when doing _setValueAttr(_getValueAttr()).
-                       // A blank displayed value is still returned as NaN.
-                       if(isNaN(v) && this.textbox.value !== ''){
-                               if(this.constraints.exponent !== false && /\de[-+]?\d/i.test(this.textbox.value) && (new RegExp("^"+dojo.number._realNumberRegexp(dojo.mixin({}, this.constraints))+"$").test(this.textbox.value))){    // check for exponential notation that parse() rejected (erroneously?)
-                                       var n = Number(this.textbox.value);
-                                       return isNaN(n) ? undefined : n; // return exponential Number or undefined for random text (may not be possible to do with the above RegExp check)
-                               }else{
-                                       return undefined; // gibberish
-                               }
-                       }else{
-                               return v; // Number or NaN for ''
-                       }
-               },
-
-               isValid: function(/*Boolean*/ isFocused){
-                       // Overrides dijit.form.RangeBoundTextBox.isValid to check that the editing-mode value is valid since
-                       // it may not be formatted according to the regExp vaidation rules
-                       if(!this._focused || this._isEmpty(this.textbox.value)){
-                               return this.inherited(arguments);
-                       }else{
-                               var v = this.get('value');
-                               if(!isNaN(v) && this.rangeCheck(v, this.constraints)){
-                                       if(this.constraints.exponent !== false && /\de[-+]?\d/i.test(this.textbox.value)){ // exponential, parse doesn't like it
-                                               return true; // valid exponential number in range
-                                       }else{
-                                               return this.inherited(arguments);
-                                       }
-                               }else{
-                                       return false;
-                               }
-                       }
-               }
-       }
-);
-
-dojo.declare("dijit.form.NumberTextBox",
-       [dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],
-       {
-               // summary:
-               //              A TextBox for entering numbers, with formatting and range checking
-               // description:
-               //              NumberTextBox is a textbox for entering and displaying numbers, supporting
-               //              the following main features:
-               //
-               //                      1. Enforce minimum/maximum allowed values (as well as enforcing that the user types
-               //                              a number rather than a random string)
-               //                      2. NLS support (altering roles of comma and dot as "thousands-separator" and "decimal-point"
-               //                              depending on locale).
-               //                      3. Separate modes for editing the value and displaying it, specifically that
-               //                              the thousands separator character (typically comma) disappears when editing
-               //                              but reappears after the field is blurred.
-               //                      4. Formatting and constraints regarding the number of places (digits after the decimal point)
-               //                              allowed on input, and number of places displayed when blurred (see `constraints` parameter).
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.form.CurrencyTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.CurrencyTextBox"] = true;
-dojo.provide("dijit.form.CurrencyTextBox");
-
-
-
-
-/*=====
-dojo.declare(
-       "dijit.form.CurrencyTextBox.__Constraints",
-       [dijit.form.NumberTextBox.__Constraints, dojo.currency.__FormatOptions, dojo.currency.__ParseOptions], {
-       // summary:
-       //              Specifies both the rules on valid/invalid values (minimum, maximum,
-       //              number of required decimal places), and also formatting options for
-       //              displaying the value when the field is not focused (currency symbol,
-       //              etc.)
-       // description:
-       //              Follows the pattern of `dijit.form.NumberTextBox.constraints`.
-       //              In general developers won't need to set this parameter
-       // example:
-       //              To ensure that the user types in the cents (for example, 1.00 instead of just 1):
-       //      |               {fractional:true}
-});
-=====*/
-
-dojo.declare(
-       "dijit.form.CurrencyTextBox",
-       dijit.form.NumberTextBox,
-       {
-               // summary:
-               //              A validating currency textbox
-               // description:
-               //              CurrencyTextBox is similar to `dijit.form.NumberTextBox` but has a few
-               //              extra features related to currency:
-               //
-               //              1. After specifying the currency type (american dollars, euros, etc.) it automatically
-               //                      sets parse/format options such as how many decimal places to show.
-               //              2. The currency mark (dollar sign, euro mark, etc.) is displayed when the field is blurred
-               //                      but erased during editing, so that the user can just enter a plain number.
-
-               // currency: [const] String
-               //              the [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code, a three letter sequence like "USD"
-               currency: "",
-
-               // constraints: dijit.form.CurrencyTextBox.__Constraints
-               //              Despite the name, this parameter specifies both constraints on the input
-               //              (including minimum/maximum allowed values) as well as
-               //              formatting options.   See `dijit.form.CurrencyTextBox.__Constraints` for details.
-               /*=====
-               constraints: {},
-               ======*/
-               
-               baseClass: "dijitTextBox dijitCurrencyTextBox",
-
-               // Override regExpGen ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
-               // than a straight regexp to deal with locale  (plus formatting options too?)
-               regExpGen: function(constraints){
-                       // if focused, accept either currency data or NumberTextBox format
-                       return '(' + (this._focused? this.inherited(arguments, [ dojo.mixin({}, constraints, this.editOptions) ]) + '|' : '')
-                               + dojo.currency.regexp(constraints) + ')';
-               },
-
-               // Override NumberTextBox._formatter to deal with currencies, ex: converts "123.45" to "$123.45"
-               _formatter: dojo.currency.format,
-
-               parse: function(/* String */ value, /* Object */ constraints){
-                       // summary:
-                       //              Parses string value as a Currency, according to the constraints object
-                       // tags:
-                       //              protected extension
-                       var v = dojo.currency.parse(value, constraints);
-                       if(isNaN(v) && /\d+/.test(value)){ // currency parse failed, but it could be because they are using NumberTextBox format so try its parse
-                               return this.inherited(arguments, [ value, dojo.mixin({}, constraints, this.editOptions) ]);
-                       }
-                       return v;
-               },
-
-               _setConstraintsAttr: function(/* Object */ constraints){
-                       if(!constraints.currency && this.currency){
-                               constraints.currency = this.currency;
-                       }
-                       this.inherited(arguments, [ dojo.currency._mixInDefaults(dojo.mixin(constraints, { exponent: false })) ]); // get places
-               }
-       }
-);
-
-}
-
-if(!dojo._hasResource["dojo.cldr.supplemental"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.cldr.supplemental"] = true;
-dojo.provide("dojo.cldr.supplemental");
-
-
-
-dojo.cldr.supplemental.getFirstDayOfWeek = function(/*String?*/locale){
-// summary: Returns a zero-based index for first day of the week
-// description:
-//             Returns a zero-based index for first day of the week, as used by the local (Gregorian) calendar.
-//             e.g. Sunday (returns 0), or Monday (returns 1)
-
-       // from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/firstDay
-       var firstDay = {/*default is 1=Monday*/
-               mv:5,
-               af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,
-               ly:6,ma:6,om:6,qa:6,sa:6,sd:6,so:6,tn:6,ye:6,
-               ar:0,as:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,
-               il:0,'in':0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,mh:0,mn:0,mo:0,mp:0,
-               mt:0,nz:0,ph:0,pk:0,sg:0,sy:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,
-               vi:0,zw:0
-// variant. do not use?                gb:0,
-       };
-
-       var country = dojo.cldr.supplemental._region(locale);
-       var dow = firstDay[country];
-       return (dow === undefined) ? 1 : dow; /*Number*/
-};
-
-dojo.cldr.supplemental._region = function(/*String?*/locale){
-       locale = dojo.i18n.normalizeLocale(locale);
-       var tags = locale.split('-');
-       var region = tags[1];
-       if(!region){
-               // IE often gives language only (#2269)
-               // Arbitrary mappings of language-only locales to a country:
-               region = {de:"de", en:"us", es:"es", fi:"fi", fr:"fr", he:"il", hu:"hu", it:"it",
-                       ja:"jp", ko:"kr", nl:"nl", pt:"br", sv:"se", zh:"cn"}[tags[0]];
-       }else if(region.length == 4){
-               // The ISO 3166 country code is usually in the second position, unless a
-               // 4-letter script is given. See http://www.ietf.org/rfc/rfc4646.txt
-               region = tags[2];
-       }
-       return region;
-}
-
-dojo.cldr.supplemental.getWeekend = function(/*String?*/locale){
-// summary: Returns a hash containing the start and end days of the weekend
-// description:
-//             Returns a hash containing the start and end days of the weekend according to local custom using locale,
-//             or by default in the user's locale.
-//             e.g. {start:6, end:0}
-
-       // from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/weekend{Start,End}
-       var weekendStart = {/*default is 6=Saturday*/
-               'in':0,
-               af:4,dz:4,ir:4,om:4,sa:4,ye:4,
-               ae:5,bh:5,eg:5,il:5,iq:5,jo:5,kw:5,ly:5,ma:5,qa:5,sd:5,sy:5,tn:5
-       };
-
-       var weekendEnd = {/*default is 0=Sunday*/
-               af:5,dz:5,ir:5,om:5,sa:5,ye:5,
-               ae:6,bh:5,eg:6,il:6,iq:6,jo:6,kw:6,ly:6,ma:6,qa:6,sd:6,sy:6,tn:6
-       };
-
-       var country = dojo.cldr.supplemental._region(locale);
-       var start = weekendStart[country];
-       var end = weekendEnd[country];
-       if(start === undefined){start=6;}
-       if(end === undefined){end=0;}
-       return {start:start, end:end}; /*Object {start,end}*/
-};
-
-}
-
-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["dojo.date.locale"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.date.locale"] = true;
-dojo.provide("dojo.date.locale");
-
-// Localization methods for Date.   Honor local customs using locale-dependent dojo.cldr data.
-
-
-
-
-
-
-
-// Load the bundles containing localization information for
-// names and formats
-
-
-//NOTE: Everything in this module assumes Gregorian calendars.
-// Other calendars will be implemented in separate modules.
-
-(function(){
-       // Format a pattern without literals
-       function formatPattern(dateObject, bundle, options, pattern){
-               return pattern.replace(/([a-z])\1*/ig, function(match){
-                       var s, pad,
-                               c = match.charAt(0),
-                               l = match.length,
-                               widthList = ["abbr", "wide", "narrow"];
-                       switch(c){
-                               case 'G':
-                                       s = bundle[(l < 4) ? "eraAbbr" : "eraNames"][dateObject.getFullYear() < 0 ? 0 : 1];
-                                       break;
-                               case 'y':
-                                       s = dateObject.getFullYear();
-                                       switch(l){
-                                               case 1:
-                                                       break;
-                                               case 2:
-                                                       if(!options.fullYear){
-                                                               s = String(s); s = s.substr(s.length - 2);
-                                                               break;
-                                                       }
-                                                       // fallthrough
-                                               default:
-                                                       pad = true;
-                                       }
-                                       break;
-                               case 'Q':
-                               case 'q':
-                                       s = Math.ceil((dateObject.getMonth()+1)/3);
-//                                     switch(l){
-//                                             case 1: case 2:
-                                                       pad = true;
-//                                                     break;
-//                                             case 3: case 4: // unimplemented
-//                                     }
-                                       break;
-                               case 'M':
-                                       var m = dateObject.getMonth();
-                                       if(l<3){
-                                               s = m+1; pad = true;
-                                       }else{
-                                               var propM = ["months", "format", widthList[l-3]].join("-");
-                                               s = bundle[propM][m];
-                                       }
-                                       break;
-                               case 'w':
-                                       var firstDay = 0;
-                                       s = dojo.date.locale._getWeekOfYear(dateObject, firstDay); pad = true;
-                                       break;
-                               case 'd':
-                                       s = dateObject.getDate(); pad = true;
-                                       break;
-                               case 'D':
-                                       s = dojo.date.locale._getDayOfYear(dateObject); pad = true;
-                                       break;
-                               case 'E':
-                                       var d = dateObject.getDay();
-                                       if(l<3){
-                                               s = d+1; pad = true;
-                                       }else{
-                                               var propD = ["days", "format", widthList[l-3]].join("-");
-                                               s = bundle[propD][d];
-                                       }
-                                       break;
-                               case 'a':
-                                       var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';
-                                       s = bundle['dayPeriods-format-wide-' + timePeriod];
-                                       break;
-                               case 'h':
-                               case 'H':
-                               case 'K':
-                               case 'k':
-                                       var h = dateObject.getHours();
-                                       // strange choices in the date format make it impossible to write this succinctly
-                                       switch (c){
-                                               case 'h': // 1-12
-                                                       s = (h % 12) || 12;
-                                                       break;
-                                               case 'H': // 0-23
-                                                       s = h;
-                                                       break;
-                                               case 'K': // 0-11
-                                                       s = (h % 12);
-                                                       break;
-                                               case 'k': // 1-24
-                                                       s = h || 24;
-                                                       break;
-                                       }
-                                       pad = true;
-                                       break;
-                               case 'm':
-                                       s = dateObject.getMinutes(); pad = true;
-                                       break;
-                               case 's':
-                                       s = dateObject.getSeconds(); pad = true;
-                                       break;
-                               case 'S':
-                                       s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l-3)); pad = true;
-                                       break;
-                               case 'v': // FIXME: don't know what this is. seems to be same as z?
-                               case 'z':
-                                       // We only have one timezone to offer; the one from the browser
-                                       s = dojo.date.locale._getZone(dateObject, true, options);
-                                       if(s){break;}
-                                       l=4;
-                                       // fallthrough... use GMT if tz not available
-                               case 'Z':
-                                       var offset = dojo.date.locale._getZone(dateObject, false, options);
-                                       var tz = [
-                                               (offset<=0 ? "+" : "-"),
-                                               dojo.string.pad(Math.floor(Math.abs(offset)/60), 2),
-                                               dojo.string.pad(Math.abs(offset)% 60, 2)
-                                       ];
-                                       if(l==4){
-                                               tz.splice(0, 0, "GMT");
-                                               tz.splice(3, 0, ":");
-                                       }
-                                       s = tz.join("");
-                                       break;
-//                             case 'Y': case 'u': case 'W': case 'F': case 'g': case 'A': case 'e':
-//                                     console.log(match+" modifier unimplemented");
-                               default:
-                                       throw new Error("dojo.date.locale.format: invalid pattern char: "+pattern);
-                       }
-                       if(pad){ s = dojo.string.pad(s, l); }
-                       return s;
-               });
-       }
-
-/*=====
-       dojo.date.locale.__FormatOptions = function(){
-       //      selector: String
-       //              choice of 'time','date' (default: date and time)
-       //      formatLength: String
-       //              choice of long, short, medium or full (plus any custom additions).  Defaults to 'short'
-       //      datePattern:String
-       //              override pattern with this string
-       //      timePattern:String
-       //              override pattern with this string
-       //      am: String
-       //              override strings for am in times
-       //      pm: String
-       //              override strings for pm in times
-       //      locale: String
-       //              override the locale used to determine formatting rules
-       //      fullYear: Boolean
-       //              (format only) use 4 digit years whenever 2 digit years are called for
-       //      strict: Boolean
-       //              (parse only) strict parsing, off by default
-               this.selector = selector;
-               this.formatLength = formatLength;
-               this.datePattern = datePattern;
-               this.timePattern = timePattern;
-               this.am = am;
-               this.pm = pm;
-               this.locale = locale;
-               this.fullYear = fullYear;
-               this.strict = strict;
-       }
-=====*/
-
-dojo.date.locale._getZone = function(/*Date*/dateObject, /*boolean*/getName, /*dojo.date.locale.__FormatOptions?*/options){
-       // summary:
-       //              Returns the zone (or offset) for the given date and options.  This
-       //              is broken out into a separate function so that it can be overridden
-       //              by timezone-aware code.
-       //
-       // dateObject:
-       //              the date and/or time being formatted.
-       //
-       // getName:
-       //              Whether to return the timezone string (if true), or the offset (if false)
-       //
-       // options:
-       //              The options being used for formatting
-       if(getName){
-               return dojo.date.getTimezoneName(dateObject);
-       }else{
-               return dateObject.getTimezoneOffset();
-       }
-};
-
-
-dojo.date.locale.format = function(/*Date*/dateObject, /*dojo.date.locale.__FormatOptions?*/options){
-       // summary:
-       //              Format a Date object as a String, using locale-specific settings.
-       //
-       // description:
-       //              Create a string from a Date object using a known localized pattern.
-       //              By default, this method formats both date and time from dateObject.
-       //              Formatting patterns are chosen appropriate to the locale.  Different
-       //              formatting lengths may be chosen, with "full" used by default.
-       //              Custom patterns may be used or registered with translations using
-       //              the dojo.date.locale.addCustomFormats method.
-       //              Formatting patterns are implemented using [the syntax described at
-       //              unicode.org](http://www.unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns)
-       //
-       // dateObject:
-       //              the date and/or time to be formatted.  If a time only is formatted,
-       //              the values in the year, month, and day fields are irrelevant.  The
-       //              opposite is true when formatting only dates.
-
-       options = options || {};
-
-       var locale = dojo.i18n.normalizeLocale(options.locale),
-               formatLength = options.formatLength || 'short',
-               bundle = dojo.date.locale._getGregorianBundle(locale),
-               str = [],
-               sauce = dojo.hitch(this, formatPattern, dateObject, bundle, options);
-       if(options.selector == "year"){
-               return _processPattern(bundle["dateFormatItem-yyyy"] || "yyyy", sauce);
-       }
-       var pattern;
-       if(options.selector != "date"){
-               pattern = options.timePattern || bundle["timeFormat-"+formatLength];
-               if(pattern){str.push(_processPattern(pattern, sauce));}
-       }
-       if(options.selector != "time"){
-               pattern = options.datePattern || bundle["dateFormat-"+formatLength];
-               if(pattern){str.push(_processPattern(pattern, sauce));}
-       }
-
-       return str.length == 1 ? str[0] : bundle["dateTimeFormat-"+formatLength].replace(/\{(\d+)\}/g,
-               function(match, key){ return str[key]; }); // String
-};
-
-dojo.date.locale.regexp = function(/*dojo.date.locale.__FormatOptions?*/options){
-       // summary:
-       //              Builds the regular needed to parse a localized date
-
-       return dojo.date.locale._parseInfo(options).regexp; // String
-};
-
-dojo.date.locale._parseInfo = function(/*dojo.date.locale.__FormatOptions?*/options){
-       options = options || {};
-       var locale = dojo.i18n.normalizeLocale(options.locale),
-               bundle = dojo.date.locale._getGregorianBundle(locale),
-               formatLength = options.formatLength || 'short',
-               datePattern = options.datePattern || bundle["dateFormat-" + formatLength],
-               timePattern = options.timePattern || bundle["timeFormat-" + formatLength],
-               pattern;
-       if(options.selector == 'date'){
-               pattern = datePattern;
-       }else if(options.selector == 'time'){
-               pattern = timePattern;
-       }else{
-               pattern = bundle["dateTimeFormat-"+formatLength].replace(/\{(\d+)\}/g,
-                       function(match, key){ return [timePattern, datePattern][key]; });
-       }
-
-       var tokens = [],
-               re = _processPattern(pattern, dojo.hitch(this, _buildDateTimeRE, tokens, bundle, options));
-       return {regexp: re, tokens: tokens, bundle: bundle};
-};
-
-dojo.date.locale.parse = function(/*String*/value, /*dojo.date.locale.__FormatOptions?*/options){
-       // summary:
-       //              Convert a properly formatted string to a primitive Date object,
-       //              using locale-specific settings.
-       //
-       // description:
-       //              Create a Date object from a string using a known localized pattern.
-       //              By default, this method parses looking for both date and time in the string.
-       //              Formatting patterns are chosen appropriate to the locale.  Different
-       //              formatting lengths may be chosen, with "full" used by default.
-       //              Custom patterns may be used or registered with translations using
-       //              the dojo.date.locale.addCustomFormats method.
-       //      
-       //              Formatting patterns are implemented using [the syntax described at
-       //              unicode.org](http://www.unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns)
-       //              When two digit years are used, a century is chosen according to a sliding 
-       //              window of 80 years before and 20 years after present year, for both `yy` and `yyyy` patterns.
-       //              year < 100CE requires strict mode.
-       //
-       // value:
-       //              A string representation of a date
-
-       var info = dojo.date.locale._parseInfo(options),
-               tokens = info.tokens, bundle = info.bundle,
-               re = new RegExp("^" + info.regexp + "$", info.strict ? "" : "i"),
-               match = re.exec(value);
-
-       if(!match){ return null; } // null
-
-       var widthList = ['abbr', 'wide', 'narrow'],
-               result = [1970,0,1,0,0,0,0], // will get converted to a Date at the end
-               amPm = "",
-               valid = dojo.every(match, function(v, i){
-               if(!i){return true;}
-               var token=tokens[i-1];
-               var l=token.length;
-               switch(token.charAt(0)){
-                       case 'y':
-                               if(l != 2 && options.strict){
-                                       //interpret year literally, so '5' would be 5 A.D.
-                                       result[0] = v;
-                               }else{
-                                       if(v<100){
-                                               v = Number(v);
-                                               //choose century to apply, according to a sliding window
-                                               //of 80 years before and 20 years after present year
-                                               var year = '' + new Date().getFullYear(),
-                                                       century = year.substring(0, 2) * 100,
-                                                       cutoff = Math.min(Number(year.substring(2, 4)) + 20, 99),
-                                                       num = (v < cutoff) ? century + v : century - 100 + v;
-                                               result[0] = num;
-                                       }else{
-                                               //we expected 2 digits and got more...
-                                               if(options.strict){
-                                                       return false;
-                                               }
-                                               //interpret literally, so '150' would be 150 A.D.
-                                               //also tolerate '1950', if 'yyyy' input passed to 'yy' format
-                                               result[0] = v;
-                                       }
-                               }
-                               break;
-                       case 'M':
-                               if(l>2){
-                                       var months = bundle['months-format-' + widthList[l-3]].concat();
-                                       if(!options.strict){
-                                               //Tolerate abbreviating period in month part
-                                               //Case-insensitive comparison
-                                               v = v.replace(".","").toLowerCase();
-                                               months = dojo.map(months, function(s){ return s.replace(".","").toLowerCase(); } );
-                                       }
-                                       v = dojo.indexOf(months, v);
-                                       if(v == -1){
-//                                             console.log("dojo.date.locale.parse: Could not parse month name: '" + v + "'.");
-                                               return false;
-                                       }
-                               }else{
-                                       v--;
-                               }
-                               result[1] = v;
-                               break;
-                       case 'E':
-                       case 'e':
-                               var days = bundle['days-format-' + widthList[l-3]].concat();
-                               if(!options.strict){
-                                       //Case-insensitive comparison
-                                       v = v.toLowerCase();
-                                       days = dojo.map(days, function(d){return d.toLowerCase();});
-                               }
-                               v = dojo.indexOf(days, v);
-                               if(v == -1){
-//                                     console.log("dojo.date.locale.parse: Could not parse weekday name: '" + v + "'.");
-                                       return false;
-                               }
-
-                               //TODO: not sure what to actually do with this input,
-                               //in terms of setting something on the Date obj...?
-                               //without more context, can't affect the actual date
-                               //TODO: just validate?
-                               break;
-                       case 'D':
-                               result[1] = 0;
-                               // fallthrough...
-                       case 'd':
-                               result[2] = v;
-                               break;
-                       case 'a': //am/pm
-                               var am = options.am || bundle['dayPeriods-format-wide-am'],
-                                       pm = options.pm || bundle['dayPeriods-format-wide-pm'];
-                               if(!options.strict){
-                                       var period = /\./g;
-                                       v = v.replace(period,'').toLowerCase();
-                                       am = am.replace(period,'').toLowerCase();
-                                       pm = pm.replace(period,'').toLowerCase();
-                               }
-                               if(options.strict && v != am && v != pm){
-//                                     console.log("dojo.date.locale.parse: Could not parse am/pm part.");
-                                       return false;
-                               }
-
-                               // we might not have seen the hours field yet, so store the state and apply hour change later
-                               amPm = (v == pm) ? 'p' : (v == am) ? 'a' : '';
-                               break;
-                       case 'K': //hour (1-24)
-                               if(v == 24){ v = 0; }
-                               // fallthrough...
-                       case 'h': //hour (1-12)
-                       case 'H': //hour (0-23)
-                       case 'k': //hour (0-11)
-                               //TODO: strict bounds checking, padding
-                               if(v > 23){
-//                                     console.log("dojo.date.locale.parse: Illegal hours value");
-                                       return false;
-                               }
-
-                               //in the 12-hour case, adjusting for am/pm requires the 'a' part
-                               //which could come before or after the hour, so we will adjust later
-                               result[3] = v;
-                               break;
-                       case 'm': //minutes
-                               result[4] = v;
-                               break;
-                       case 's': //seconds
-                               result[5] = v;
-                               break;
-                       case 'S': //milliseconds
-                               result[6] = v;
-//                             break;
-//                     case 'w':
-//TODO                         var firstDay = 0;
-//                     default:
-//TODO: throw?
-//                             console.log("dojo.date.locale.parse: unsupported pattern char=" + token.charAt(0));
-               }
-               return true;
-       });
-
-       var hours = +result[3];
-       if(amPm === 'p' && hours < 12){
-               result[3] = hours + 12; //e.g., 3pm -> 15
-       }else if(amPm === 'a' && hours == 12){
-               result[3] = 0; //12am -> 0
-       }
-
-       //TODO: implement a getWeekday() method in order to test 
-       //validity of input strings containing 'EEE' or 'EEEE'...
-
-       var dateObject = new Date(result[0], result[1], result[2], result[3], result[4], result[5], result[6]); // Date
-       if(options.strict){
-               dateObject.setFullYear(result[0]);
-       }
-
-       // Check for overflow.  The Date() constructor normalizes things like April 32nd...
-       //TODO: why isn't this done for times as well?
-       var allTokens = tokens.join(""),
-               dateToken = allTokens.indexOf('d') != -1,
-               monthToken = allTokens.indexOf('M') != -1;
-
-       if(!valid ||
-               (monthToken && dateObject.getMonth() > result[1]) ||
-               (dateToken && dateObject.getDate() > result[2])){
-               return null;
-       }
-
-       // Check for underflow, due to DST shifts.  See #9366
-       // This assumes a 1 hour dst shift correction at midnight
-       // We could compare the timezone offset after the shift and add the difference instead.
-       if((monthToken && dateObject.getMonth() < result[1]) ||
-               (dateToken && dateObject.getDate() < result[2])){
-               dateObject = dojo.date.add(dateObject, "hour", 1);
-       }
-
-       return dateObject; // Date
-};
-
-function _processPattern(pattern, applyPattern, applyLiteral, applyAll){
-       //summary: Process a pattern with literals in it
-
-       // Break up on single quotes, treat every other one as a literal, except '' which becomes '
-       var identity = function(x){return x;};
-       applyPattern = applyPattern || identity;
-       applyLiteral = applyLiteral || identity;
-       applyAll = applyAll || identity;
-
-       //split on single quotes (which escape literals in date format strings) 
-       //but preserve escaped single quotes (e.g., o''clock)
-       var chunks = pattern.match(/(''|[^'])+/g),
-               literal = pattern.charAt(0) == "'";
-
-       dojo.forEach(chunks, function(chunk, i){
-               if(!chunk){
-                       chunks[i]='';
-               }else{
-                       chunks[i]=(literal ? applyLiteral : applyPattern)(chunk.replace(/''/g, "'"));
-                       literal = !literal;
-               }
-       });
-       return applyAll(chunks.join(''));
-}
-
-function _buildDateTimeRE(tokens, bundle, options, pattern){
-       pattern = dojo.regexp.escapeString(pattern);
-       if(!options.strict){ pattern = pattern.replace(" a", " ?a"); } // kludge to tolerate no space before am/pm
-       return pattern.replace(/([a-z])\1*/ig, function(match){
-               // Build a simple regexp.  Avoid captures, which would ruin the tokens list
-               var s,
-                       c = match.charAt(0),
-                       l = match.length,
-                       p2 = '', p3 = '';
-               if(options.strict){
-                       if(l > 1){ p2 = '0' + '{'+(l-1)+'}'; }
-                       if(l > 2){ p3 = '0' + '{'+(l-2)+'}'; }
-               }else{
-                       p2 = '0?'; p3 = '0{0,2}';
-               }
-               switch(c){
-                       case 'y':
-                               s = '\\d{2,4}';
-                               break;
-                       case 'M':
-                               s = (l>2) ? '\\S+?' : p2+'[1-9]|1[0-2]';
-                               break;
-                       case 'D':
-                               s = p2+'[1-9]|'+p3+'[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]';
-                               break;
-                       case 'd':
-                               s = '3[01]|[12]\\d|'+p2+'[1-9]';
-                               break;
-                       case 'w':
-                               s = p2+'[1-9]|[1-4][0-9]|5[0-3]';
-                               break;
-                       case 'E':
-                               s = '\\S+';
-                               break;
-                       case 'h': //hour (1-12)
-                               s = p2+'[1-9]|1[0-2]';
-                               break;
-                       case 'k': //hour (0-11)
-                               s = p2+'\\d|1[01]';
-                               break;
-                       case 'H': //hour (0-23)
-                               s = p2+'\\d|1\\d|2[0-3]';
-                               break;
-                       case 'K': //hour (1-24)
-                               s = p2+'[1-9]|1\\d|2[0-4]';
-                               break;
-                       case 'm':
-                       case 's':
-                               s = '[0-5]\\d';
-                               break;
-                       case 'S':
-                               s = '\\d{'+l+'}';
-                               break;
-                       case 'a':
-                               var am = options.am || bundle['dayPeriods-format-wide-am'],
-                                       pm = options.pm || bundle['dayPeriods-format-wide-pm'];
-                               if(options.strict){
-                                       s = am + '|' + pm;
-                               }else{
-                                       s = am + '|' + pm;
-                                       if(am != am.toLowerCase()){ s += '|' + am.toLowerCase(); }
-                                       if(pm != pm.toLowerCase()){ s += '|' + pm.toLowerCase(); }
-                                       if(s.indexOf('.') != -1){ s += '|' + s.replace(/\./g, ""); }
-                               }
-                               s = s.replace(/\./g, "\\.");
-                               break;
-                       default:
-                       // case 'v':
-                       // case 'z':
-                       // case 'Z':
-                               s = ".*";
-//                             console.log("parse of date format, pattern=" + pattern);
-               }
-
-               if(tokens){ tokens.push(match); }
-
-               return "(" + s + ")"; // add capture
-       }).replace(/[\xa0 ]/g, "[\\s\\xa0]"); // normalize whitespace.  Need explicit handling of \xa0 for IE.
-}
-})();
-
-(function(){
-var _customFormats = [];
-dojo.date.locale.addCustomFormats = function(/*String*/packageName, /*String*/bundleName){
-       // summary:
-       //              Add a reference to a bundle containing localized custom formats to be
-       //              used by date/time formatting and parsing routines.
-       //
-       // description:
-       //              The user may add custom localized formats where the bundle has properties following the
-       //              same naming convention used by dojo.cldr: `dateFormat-xxxx` / `timeFormat-xxxx`
-       //              The pattern string should match the format used by the CLDR.
-       //              See dojo.date.locale.format() for details.
-       //              The resources must be loaded by dojo.requireLocalization() prior to use
-
-       _customFormats.push({pkg:packageName,name:bundleName});
-};
-
-dojo.date.locale._getGregorianBundle = function(/*String*/locale){
-       var gregorian = {};
-       dojo.forEach(_customFormats, function(desc){
-               var bundle = dojo.i18n.getLocalization(desc.pkg, desc.name, locale);
-               gregorian = dojo.mixin(gregorian, bundle);
-       }, this);
-       return gregorian; /*Object*/
-};
-})();
-
-dojo.date.locale.addCustomFormats("dojo.cldr","gregorian");
-
-dojo.date.locale.getNames = function(/*String*/item, /*String*/type, /*String?*/context, /*String?*/locale){
-       // summary:
-       //              Used to get localized strings from dojo.cldr for day or month names.
-       //
-       // item:
-       //      'months' || 'days'
-       // type:
-       //      'wide' || 'narrow' || 'abbr' (e.g. "Monday", "Mon", or "M" respectively, in English)
-       // context:
-       //      'standAlone' || 'format' (default)
-       // locale:
-       //      override locale used to find the names
-
-       var label,
-               lookup = dojo.date.locale._getGregorianBundle(locale),
-               props = [item, context, type];
-       if(context == 'standAlone'){
-               var key = props.join('-');
-               label = lookup[key];
-               // Fall back to 'format' flavor of name
-               if(label[0] == 1){ label = undefined; } // kludge, in the absence of real aliasing support in dojo.cldr
-       }
-       props[1] = 'format';
-
-       // return by copy so changes won't be made accidentally to the in-memory model
-       return (label || lookup[props.join('-')]).concat(); /*Array*/
-};
-
-dojo.date.locale.isWeekend = function(/*Date?*/dateObject, /*String?*/locale){
-       // summary:
-       //      Determines if the date falls on a weekend, according to local custom.
-
-       var weekend = dojo.cldr.supplemental.getWeekend(locale),
-               day = (dateObject || new Date()).getDay();
-       if(weekend.end < weekend.start){
-               weekend.end += 7;
-               if(day < weekend.start){ day += 7; }
-       }
-       return day >= weekend.start && day <= weekend.end; // Boolean
-};
-
-// These are used only by format and strftime.  Do they need to be public?  Which module should they go in?
-
-dojo.date.locale._getDayOfYear = function(/*Date*/dateObject){
-       // summary: gets the day of the year as represented by dateObject
-       return dojo.date.difference(new Date(dateObject.getFullYear(), 0, 1, dateObject.getHours()), dateObject) + 1; // Number
-};
-
-dojo.date.locale._getWeekOfYear = function(/*Date*/dateObject, /*Number*/firstDayOfWeek){
-       if(arguments.length == 1){ firstDayOfWeek = 0; } // Sunday
-
-       var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1).getDay(),
-               adj = (firstDayOfYear - firstDayOfWeek + 7) % 7,
-               week = Math.floor((dojo.date.locale._getDayOfYear(dateObject) + adj - 1) / 7);
-
-       // if year starts on the specified day, start counting weeks at 1
-       if(firstDayOfYear == firstDayOfWeek){ week++; }
-
-       return week; // Number
-};
-
-}
-
-if(!dojo._hasResource["dijit.Calendar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Calendar"] = true;
-dojo.provide("dijit.Calendar");
-
-
-
-
-
-
-
-
-
-dojo.declare(
-       "dijit.Calendar",
-       [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
-       {
-               // summary:
-               //              A simple GUI for choosing a date in the context of a monthly calendar.
-               //
-               // description:
-               //              A simple GUI for choosing a date in the context of a monthly calendar.
-               //              This widget can't be used in a form because it doesn't serialize the date to an
-               //              `<input>` field.  For a form element, use dijit.form.DateTextBox instead.
-               //
-               //              Note that the parser takes all dates attributes passed in the
-               //              [RFC 3339 format](http://www.faqs.org/rfcs/rfc3339.html), e.g. `2005-06-30T08:05:00-07:00`
-               //              so that they are serializable and locale-independent.
-               //
-               // example:
-               //      |       var calendar = new dijit.Calendar({}, dojo.byId("calendarNode"));
-               //
-               // example:
-               //      |       <div dojoType="dijit.Calendar"></div>
-
-               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 dijitCalendarArrow' 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 dijitCalendarArrow' 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, onmousedown: _onDayMouseDown, onmouseup: _onDayMouseUp\" 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: Date
-               //              The currently selected Date
-               value: new Date(),
-
-               // datePackage: String
-               //              JavaScript namespace to find Calendar routines.  Uses Gregorian Calendar routines
-               //              at dojo.date by default.
-               datePackage: "dojo.date",
-
-               // dayWidth: String
-               //              How to represent the days of the week in the calendar header. See dojo.date.locale
-               dayWidth: "narrow",
-
-               // tabIndex: Integer
-               //              Order fields are traversed when user hits the tab key
-               tabIndex: "0",
-               
-               baseClass:"dijitCalendar",
-
-               // Set node classes for various mouse events, see dijit._CssStateMixin for more details 
-               cssStateNodes: {
-                       "decrementMonth": "dijitCalendarArrow",
-                       "incrementMonth": "dijitCalendarArrow",
-                       "previousYearLabelNode": "dijitCalendarPreviousYear",
-                       "nextYearLabelNode": "dijitCalendarNextYear"                    
-               },
-
-               attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-                       tabIndex: "domNode"
-               }),
-
-               setValue: function(/*Date*/ value){
-                       // summary:
-                       //      Deprecated.   Used attr('value', ...) instead.
-                       // tags:
-                       //      deprecated
-                       dojo.deprecated("dijit.Calendar:setValue() is deprecated.  Use set('value', ...) instead.", "", "2.0");
-                       this.set('value', value);
-               },
-
-               _getValueAttr: function(){
-                       // summary:
-                       //              Support getter attr('value')
-                       var value = new this.dateClassObj(this.value);
-                       value.setHours(0, 0, 0, 0); // return midnight, local time for back-compat
-
-                       // If daylight savings pushes midnight to the previous date, fix the Date
-                       // object to point at 1am so it will represent the correct day. See #9366
-                       if(value.getDate() < this.value.getDate()){
-                               value = this.dateFuncObj.add(value, "hour", 1);
-                       }
-                       return value;
-               },
-
-               _setValueAttr: function(/*Date*/ value){
-                       // summary:
-                       //              Support setter attr("value", ...)
-                       // description:
-                       //              Set the current date and update the UI.  If the date is disabled, the value will
-                       //              not change, but the display will change to the corresponding month.
-                       // tags:
-                       //      protected
-                       if(!this.value || this.dateFuncObj.compare(value, this.value)){
-                               value = new this.dateClassObj(value);
-                               value.setHours(1); // to avoid issues when DST shift occurs at midnight, see #8521, #9366
-                               this.displayMonth = new this.dateClassObj(value);
-                               if(!this.isDisabledDate(value, this.lang)){
-                                       this.value = value;
-                                       this.onChange(this.get('value'));
-                               }
-                               dojo.attr(this.domNode, "aria-label",
-                                       this.dateLocaleModule.format(value,
-                                               {selector:"date", formatLength:"full"}));
-                               this._populateGrid();
-                       }
-               },
-
-               _setText: function(node, text){
-                       // summary:
-                       //              This just sets the content of node to the specified text.
-                       //              Can't do "node.innerHTML=text" because of an IE bug w/tables, see #3434.
-                       // tags:
-                       //      private
-                       while(node.firstChild){
-                               node.removeChild(node.firstChild);
-                       }
-                       node.appendChild(dojo.doc.createTextNode(text));
-               },
-
-               _populateGrid: function(){
-                       // summary:
-                       //      Fills in the calendar grid with each day (1-31)
-                       // tags:
-                       //      private
-                       var month = this.displayMonth;
-                       month.setDate(1);
-                       var firstDay = month.getDay(),
-                               daysInMonth = this.dateFuncObj.getDaysInMonth(month),
-                               daysInPreviousMonth = this.dateFuncObj.getDaysInMonth(this.dateFuncObj.add(month, "month", -1)),
-                               today = new this.dateClassObj(),
-                               dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
-                       if(dayOffset > firstDay){ dayOffset -= 7; }
-
-                       // Iterate through dates in the calendar and fill in date numbers and style info
-                       dojo.query(".dijitCalendarDateTemplate", this.domNode).forEach(function(template, i){
-                               i += dayOffset;
-                               var date = new this.dateClassObj(month),
-                                       number, clazz = "dijitCalendar", adj = 0;
-
-                               if(i < firstDay){
-                                       number = daysInPreviousMonth - firstDay + i + 1;
-                                       adj = -1;
-                                       clazz += "Previous";
-                               }else if(i >= (firstDay + daysInMonth)){
-                                       number = i - firstDay - daysInMonth + 1;
-                                       adj = 1;
-                                       clazz += "Next";
-                               }else{
-                                       number = i - firstDay + 1;
-                                       clazz += "Current";
-                               }
-
-                               if(adj){
-                                       date = this.dateFuncObj.add(date, "month", adj);
-                               }
-                               date.setDate(number);
-
-                               if(!this.dateFuncObj.compare(date, today, "date")){
-                                       clazz = "dijitCalendarCurrentDate " + clazz;
-                               }
-
-                               if(this._isSelectedDate(date, this.lang)){
-                                       clazz = "dijitCalendarSelectedDate " + clazz;
-                               }
-
-                               if(this.isDisabledDate(date, this.lang)){
-                                       clazz = "dijitCalendarDisabledDate " + clazz;
-                               }
-
-                               var clazz2 = this.getClassForDate(date, this.lang);
-                               if(clazz2){
-                                       clazz = clazz2 + " " + clazz;
-                               }
-
-                               template.className = clazz + "Month dijitCalendarDateTemplate";
-                               template.dijitDateValue = date.valueOf();
-                               var label = dojo.query(".dijitCalendarDateLabel", template)[0],
-                                       text = date.getDateLocalized ? date.getDateLocalized(this.lang) : date.getDate();
-                               this._setText(label, text);
-                       }, this);
-
-                       // Fill in localized month name
-                       var monthNames = this.dateLocaleModule.getNames('months', 'wide', 'standAlone', this.lang, month);
-                       this._setText(this.monthLabelNode, monthNames[month.getMonth()]);
-                       // Repopulate month list based on current year (Hebrew calendar)
-                       dojo.query(".dijitCalendarMonthLabelTemplate", this.domNode).forEach(function(node, i){
-                               dojo.toggleClass(node, "dijitHidden", !(i in monthNames)); // hide leap months (Hebrew)
-                               this._setText(node, monthNames[i]);
-                       }, this);
-
-                       // Fill in localized prev/current/next years
-                       var y = month.getFullYear() - 1;
-                       var d = new this.dateClassObj();
-                       dojo.forEach(["previous", "current", "next"], function(name){
-                               d.setFullYear(y++);
-                               this._setText(this[name+"YearLabelNode"],
-                                       this.dateLocaleModule.format(d, {selector:'year', locale:this.lang}));
-                       }, this);
-
-                       // Set up repeating mouse behavior
-                       var _this = this;
-                       var typematic = function(nodeProp, dateProp, adj){
-//FIXME: leaks (collects) listeners if populateGrid is called multiple times.  Do this once?
-                               _this._connects.push(
-                                       dijit.typematic.addMouseListener(_this[nodeProp], _this, function(count){
-                                               if(count >= 0){ _this._adjustDisplay(dateProp, adj); }
-                                       }, 0.8, 500)
-                               );
-                       };
-                       typematic("incrementMonth", "month", 1);
-                       typematic("decrementMonth", "month", -1);
-                       typematic("nextYearLabelNode", "year", 1);
-                       typematic("previousYearLabelNode", "year", -1);
-               },
-
-               goToToday: function(){
-                       // summary:
-                       //      Sets calendar's value to today's date
-                       this.set('value', new this.dateClassObj());
-               },
-
-               constructor: function(/*Object*/args){
-                       var dateClass = (args.datePackage && (args.datePackage != "dojo.date"))? args.datePackage + ".Date" : "Date";
-                       this.dateClassObj = dojo.getObject(dateClass, false);
-                       this.datePackage = args.datePackage || this.datePackage;
-                       this.dateFuncObj = dojo.getObject(this.datePackage, false);
-                       this.dateLocaleModule = dojo.getObject(this.datePackage + ".locale", false);
-               },
-
-               postMixInProperties: function(){
-                       // parser.instantiate sometimes passes in NaN for IE.  Use default value in prototype instead.
-                       if(isNaN(this.value)){ delete this.value; }
-                       this.inherited(arguments);
-               },
-
-               postCreate: function(){
-                       this.inherited(arguments);
-                       dojo.setSelectable(this.domNode, false);
-
-                       var cloneClass = dojo.hitch(this, function(clazz, n){
-                               var template = dojo.query(clazz, this.domNode)[0];
-                               for(var i=0; i<n; i++){
-                                       template.parentNode.appendChild(template.cloneNode(true));
-                               }
-                       });
-
-                       // clone the day label and calendar day templates 6 times to make 7 columns
-                       cloneClass(".dijitCalendarDayLabelTemplate", 6);
-                       cloneClass(".dijitCalendarDateTemplate", 6);
-
-                       // now make 6 week rows
-                       cloneClass(".dijitCalendarWeekTemplate", 5);
-
-                       // insert localized day names in the header
-                       var dayNames = this.dateLocaleModule.getNames('days', this.dayWidth, 'standAlone', this.lang);
-                       var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
-                       dojo.query(".dijitCalendarDayLabel", this.domNode).forEach(function(label, i){
-                               this._setText(label, dayNames[(i + dayOffset) % 7]);
-                       }, this);
-
-                       var dateObj = new this.dateClassObj(this.value);
-                       // Fill in spacer/month dropdown element with all the month names (invisible) so that the maximum width will affect layout
-                       var monthNames = this.dateLocaleModule.getNames('months', 'wide', 'standAlone', this.lang, dateObj);
-                       cloneClass(".dijitCalendarMonthLabelTemplate", monthNames.length-1);
-                       dojo.query(".dijitCalendarMonthLabelTemplate", this.domNode).forEach(function(node, i){
-                               dojo.attr(node, "month", i);
-                               if(i in monthNames){ this._setText(node, monthNames[i]); }
-                               dojo.place(node.cloneNode(true), this.monthLabelSpacer);
-                       }, this);
-
-                       this.value = null;
-                       this.set('value', dateObj);
-               },
-
-               _onMenuHover: function(e){
-                       dojo.stopEvent(e);
-                       dojo.toggleClass(e.target, "dijitMenuItemHover");
-               },
-
-               _adjustDisplay: function(/*String*/ part, /*int*/ amount){
-                       // summary:
-                       //      Moves calendar forwards or backwards by months or years
-                       // part:
-                       //      "month" or "year"
-                       // amount:
-                       //      Number of months or years
-                       // tags:
-                       //      private
-                       this.displayMonth = this.dateFuncObj.add(this.displayMonth, part, amount);
-                       this._populateGrid();
-               },
-
-               _onMonthToggle: function(/*Event*/ evt){
-                       // summary:
-                       //      Handler for when user triggers or dismisses the month list
-                       // tags:
-                       //      protected
-                       dojo.stopEvent(evt);
-
-                       if(evt.type == "mousedown"){
-                               var coords = dojo.position(this.monthLabelNode);
-//                             coords.y -= dojo.position(this.domNode, true).y;
-                               // Size the dropdown's width to match the label in the widget
-                               // so that they are horizontally aligned
-                               var dim = {
-                                       width: coords.w + "px",
-                                       top: -this.displayMonth.getMonth() * coords.h + "px"
-                               };
-                               if((dojo.isIE && dojo.isQuirks) || dojo.isIE < 7){
-                                       dim.left = -coords.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(/*Event*/ evt){
-                       // summary:
-                       //      Handler for when user selects a month from a list
-                       // tags:
-                       //      protected
-                       this._onMonthToggle(evt);
-                       this.displayMonth.setMonth(dojo.attr(evt.target, "month"));
-                       this._populateGrid();
-               },
-
-               _onDayClick: function(/*Event*/ evt){
-                       // summary:
-                       //      Handler for day clicks, selects the date if appropriate
-                       // tags:
-                       //      protected
-                       dojo.stopEvent(evt);
-                       for(var node = evt.target; node && !node.dijitDateValue; node = node.parentNode);
-                       if(node && !dojo.hasClass(node, "dijitCalendarDisabledDate")){
-                               this.set('value', node.dijitDateValue);
-                               this.onValueSelected(this.get('value'));
-                       }
-               },
-
-               _onDayMouseOver: function(/*Event*/ evt){
-                       // summary:
-                       //      Handler for mouse over events on days, sets hovered style
-                       // tags:
-                       //      protected
-
-                       // event can occur on <td> or the <span> inside the td,
-                       // set node to the <td>.
-                       var node =
-                               dojo.hasClass(evt.target, "dijitCalendarDateLabel") ?
-                               evt.target.parentNode :
-                               evt.target;
-
-                       if(node && (node.dijitDateValue || node == this.previousYearLabelNode || node == this.nextYearLabelNode) ){
-                               dojo.addClass(node, "dijitCalendarHoveredDate");
-                               this._currentNode = node;
-                       }
-               },
-
-               _onDayMouseOut: function(/*Event*/ evt){
-                       // summary:
-                       //      Handler for mouse out events on days, clears hovered style
-                       // tags:
-                       //      protected
-       
-                       if(!this._currentNode){ return; }
-                       
-                       // if mouse out occurs moving from <td> to <span> inside <td>, ignore it
-                       if(evt.relatedTarget && evt.relatedTarget.parentNode == this._currentNode){ return; }
-
-                       dojo.removeClass(this._currentNode, "dijitCalendarHoveredDate");
-                       if(dojo.hasClass(this._currentNode, "dijitCalendarActiveDate")) {
-                               dojo.removeClass(this._currentNode, "dijitCalendarActiveDate");
-                       }
-                       this._currentNode = null;
-               },
-               
-               _onDayMouseDown: function(/*Event*/ evt){
-                       var node = evt.target.parentNode;
-                       if(node && node.dijitDateValue){
-                               dojo.addClass(node, "dijitCalendarActiveDate");
-                               this._currentNode = node;
-                       }
-               },
-               
-               _onDayMouseUp: function(/*Event*/ evt){
-                       var node = evt.target.parentNode;
-                       if(node && node.dijitDateValue){
-                               dojo.removeClass(node, "dijitCalendarActiveDate");
-                       }
-               },
-
-//TODO: use typematic
-//TODO: skip disabled dates without ending up in a loop
-//TODO: could optimize by avoiding populate grid when month does not change
-               _onKeyPress: function(/*Event*/evt){
-                       // summary:
-                       //              Provides keyboard navigation of calendar
-                       // tags:
-                       //              protected
-                       var dk = dojo.keys,
-                               increment = -1,
-                               interval,
-                               newValue = this.value;
-                       switch(evt.keyCode){
-                               case dk.RIGHT_ARROW:
-                                       increment = 1;
-                                       //fallthrough...
-                               case dk.LEFT_ARROW:
-                                       interval = "day";
-                                       if(!this.isLeftToRight()){ increment *= -1; }
-                                       break;
-                               case dk.DOWN_ARROW:
-                                       increment = 1;
-                                       //fallthrough...
-                               case dk.UP_ARROW:
-                                       interval = "week";
-                                       break;
-                               case dk.PAGE_DOWN:
-                                       increment = 1;
-                                       //fallthrough...
-                               case dk.PAGE_UP:
-                                       interval = evt.ctrlKey ? "year" : "month";
-                                       break;
-                               case dk.END:
-                                       // go to the next month
-                                       newValue = this.dateFuncObj.add(newValue, "month", 1);
-                                       // subtract a day from the result when we're done
-                                       interval = "day";
-                                       //fallthrough...
-                               case dk.HOME:
-                                       newValue = new Date(newValue).setDate(1);
-                                       break;
-                               case dk.ENTER:
-                                       this.onValueSelected(this.get('value'));
-                                       break;
-                               case dk.ESCAPE:
-                                       //TODO
-                               default:
-                                       return;
-                       }
-                       dojo.stopEvent(evt);
-
-                       if(interval){
-                               newValue = this.dateFuncObj.add(newValue, interval, increment);
-                       }
-
-                       this.set("value", newValue);
-               },
-
-               onValueSelected: function(/*Date*/ date){
-                       // summary:
-                       //              Notification that a date cell was selected.  It may be the same as the previous value.
-                       // description:
-                       //      Used by `dijit.form._DateTimeTextBox` (and thus `dijit.form.DateTextBox`)
-                       //      to get notification when the user has clicked a date.
-                       // tags:
-                       //      protected
-               },
-
-               onChange: function(/*Date*/ date){
-                       // summary:
-                       //              Called only when the selected date has changed
-               },
-
-               _isSelectedDate: function(/*Date*/ dateObject, /*String?*/ locale){
-                       // summary:
-                       //              Extension point so developers can subclass Calendar to
-                       //              support multiple (concurrently) selected dates
-                       // tags:
-                       //              protected extension
-                       return !this.dateFuncObj.compare(dateObject, this.value, "date")
-               },
-
-               isDisabledDate: function(/*Date*/ dateObject, /*String?*/ locale){
-                       // summary:
-                       //              May be overridden to disable certain dates in the calendar e.g. `isDisabledDate=dojo.date.locale.isWeekend`
-                       // tags:
-                       //      extension
-/*=====
-                       return false; // Boolean
-=====*/
-               },
-
-               getClassForDate: function(/*Date*/ dateObject, /*String?*/ locale){
-                       // summary:
-                       //              May be overridden to return CSS classes to associate with the date entry for the given dateObject,
-                       //              for example to indicate a holiday in specified locale.
-                       // tags:
-                       //      extension
-
-/*=====
-                       return ""; // String
-=====*/
-               }
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.form._DateTimeTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form._DateTimeTextBox"] = true;
-dojo.provide("dijit.form._DateTimeTextBox");
-
-
-
-
-
-
-new Date("X"); // workaround for #11279, new Date("") == NaN
-
-/*=====
-dojo.declare(
-       "dijit.form._DateTimeTextBox.__Constraints",
-       [dijit.form.RangeBoundTextBox.__Constraints, dojo.date.locale.__FormatOptions], {
-       // summary:
-       //              Specifies both the rules on valid/invalid values (first/last date/time allowed),
-       //              and also formatting options for how the date/time is displayed.
-       // example:
-       //              To restrict to dates within 2004, displayed in a long format like "December 25, 2005":
-       //      |               {min:'2004-01-01',max:'2004-12-31', formatLength:'long'}
-});
-=====*/
-
-dojo.declare(
-       "dijit.form._DateTimeTextBox",
-       dijit.form.RangeBoundTextBox,
-       {
-               // summary:
-               //              Base class for validating, serializable, range-bound date or time text box.
-
-               // constraints: dijit.form._DateTimeTextBox.__Constraints
-               //              Despite the name, this parameter specifies both constraints on the input
-               //              (including starting/ending dates/times allowed) as well as
-               //              formatting options like whether the date is displayed in long (ex: December 25, 2005)
-               //              or short (ex: 12/25/2005) format.   See `dijit.form._DateTimeTextBox.__Constraints` for details.
-               /*=====
-               constraints: {},
-               ======*/
-
-               // Override ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
-               // than a straight regexp to deal with locale  (plus formatting options too?)
-               regExpGen: dojo.date.locale.regexp,
-
-               // datePackage: String
-               //      JavaScript namespace to find calendar routines.  Uses Gregorian calendar routines
-               //      at dojo.date, by default.
-               datePackage: "dojo.date",
-
-               // Override _FormWidget.compare() to work for dates/times
-               compare: dojo.date.compare,
-
-               format: function(/*Date*/ value, /*dojo.date.locale.__FormatOptions*/ constraints){
-                       // summary:
-                       //              Formats the value as a Date, according to specified locale (second argument)
-                       // tags:
-                       //              protected
-                       if(!value){ return ''; }
-                       return this.dateLocaleModule.format(value, constraints);
-               },
-
-               parse: function(/*String*/ value, /*dojo.date.locale.__FormatOptions*/ constraints){
-                       // summary:
-                       //              Parses as string as a Date, according to constraints
-                       // tags:
-                       //              protected
-
-                       return this.dateLocaleModule.parse(value, constraints) || (this._isEmpty(value) ? null : undefined);     // Date
-               },
-
-               // Overrides ValidationTextBox.serialize() to serialize a date in canonical ISO format.
-               serialize: function(/*anything*/val, /*Object?*/options){
-                       if(val.toGregorian){
-                               val = val.toGregorian();
-                       }
-                       return dojo.date.stamp.toISOString(val, options);
-               },
-
-               // value: Date
-               //              The value of this widget as a JavaScript Date object.  Use get("value") / set("value", val) to manipulate.
-               //              When passed to the parser in markup, must be specified according to `dojo.date.stamp.fromISOString`
-               value: new Date(""),    // value.toString()="NaN"
-               _blankValue: null,      // used by filter() when the textbox is blank
-
-               //      popupClass: [protected extension] String
-               //              Name of the popup widget class used to select a date/time.
-               //              Subclasses should specify this.
-               popupClass: "", // default is no popup = text only
-
-
-               // _selector: [protected extension] String
-               //              Specifies constraints.selector passed to dojo.date functions, should be either
-               //              "date" or "time".
-               //              Subclass must specify this.
-               _selector: "",
-
-               constructor: function(/*Object*/args){
-                       var dateClass = args.datePackage ? args.datePackage + ".Date" : "Date";
-                       this.dateClassObj = dojo.getObject(dateClass, false);
-                       this.value = new this.dateClassObj("");
-
-                       this.datePackage = args.datePackage || this.datePackage;
-                       this.dateLocaleModule = dojo.getObject(this.datePackage + ".locale", false);
-                       this.regExpGen = this.dateLocaleModule.regexp;
-               },
-
-               _setConstraintsAttr: function(/* Object */ constraints){
-                       constraints.selector = this._selector;
-                       constraints.fullYear = true; // see #5465 - always format with 4-digit years
-                       var fromISO = dojo.date.stamp.fromISOString;
-                       if(typeof constraints.min == "string"){ constraints.min = fromISO(constraints.min); }
-                       if(typeof constraints.max == "string"){ constraints.max = fromISO(constraints.max); }
-                       this.inherited(arguments, [constraints]);
-               },
-
-               _onFocus: function(/*Event*/ evt){
-                       // summary:
-                       //              open the popup
-                       this._open();
-                       this.inherited(arguments);
-               },
-
-               _setValueAttr: function(/*Date*/ value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){
-                       // summary:
-                       //              Sets the date on this textbox.  Note that `value` must be like a Javascript Date object.
-                       if(value !== undefined){
-                               if(!value || value.toString() == dijit.form._DateTimeTextBox.prototype.value.toString()){
-                                       value = null;
-                               }
-                               if(value instanceof Date && !(this.dateClassObj instanceof Date)){
-                                       value = new this.dateClassObj(value);
-                               }
-                       }
-                       this.inherited(arguments, [value, priorityChange, formattedValue]);
-                       if(this._picker){
-                               // #3948: fix blank date on popup only
-                               if(!value){value = new this.dateClassObj();}
-                               this._picker.set('value', value);
-                       }
-               },
-
-               _open: function(){
-                       // summary:
-                       //              opens the TimePicker, and sets the onValueSelected value
-
-                       if(this.disabled || this.readOnly || !this.popupClass){return;}
-
-                       var textBox = this;
-
-                       if(!this._picker){
-                               var PopupProto = dojo.getObject(this.popupClass, false);
-                               this._picker = new PopupProto({
-                                       onValueSelected: function(value){
-                                               if(textBox._tabbingAway){
-                                                       delete textBox._tabbingAway;
-                                               }else{
-                                                       textBox.focus(); // focus the textbox before the popup closes to avoid reopening the popup
-                                               }
-                                               setTimeout(dojo.hitch(textBox, "_close"), 1); // allow focus time to take
-
-                                               // this will cause InlineEditBox and other handlers to do stuff so make sure it's last
-                                               dijit.form._DateTimeTextBox.superclass._setValueAttr.call(textBox, value, true);
-                                       },
-                                       id: this.id + "_popup",
-                                       dir: textBox.dir,
-                                       lang: textBox.lang,
-                                       value: this.get('value') || new this.dateClassObj(),
-                                       constraints: textBox.constraints,
-
-                                       datePackage: textBox.datePackage,
-
-                                       isDisabledDate: function(/*Date*/ date){
-                                               // summary:
-                                               //      disables dates outside of the min/max of the _DateTimeTextBox
-                                               var compare = dojo.date.compare;
-                                               var constraints = textBox.constraints;
-                                               return constraints && (
-                                                       (constraints.min && compare(constraints.min, date, textBox._selector) > 0) ||
-                                                       (constraints.max && compare(constraints.max, date, textBox._selector) < 0)
-                                               );
-                                       }
-                               });
-                       }
-                       if(!this._opened){
-                               // Open drop down.  Align left sides of input box and drop down, even in RTL mode,
-                               // otherwise positioning thrown off when the drop down width is changed in marginBox call below (#10676)
-                               dijit.popup.open({
-                                       parent: this,
-                                       popup: this._picker,
-                                       orient: {'BL':'TL', 'TL':'BL'},
-                                       around: this.domNode,
-                                       onCancel: dojo.hitch(this, this._close),
-                                       onClose: function(){ textBox._opened=false; }
-                               });
-                               this._opened=true;
-                       }
-
-                       dojo.marginBox(this._picker.domNode,{ w:this.domNode.offsetWidth });
-               },
-
-               _close: function(){
-                       if(this._opened){
-                               dijit.popup.close(this._picker);
-                               this._opened=false;
-                       }
-               },
-
-               _onBlur: function(){
-                       // summary:
-                       //              Called magically when focus has shifted away from this widget and it's dropdown
-                       this._close();
-                       if(this._picker){
-                               // teardown so that constraints will be rebuilt next time (redundant reference: #6002)
-                               this._picker.destroy();
-                               delete this._picker;
-                       }
-                       this.inherited(arguments);
-                       // don't focus on <input>.  the user has explicitly focused on something else.
-               },
-
-               _getDisplayedValueAttr: function(){
-                       return this.textbox.value;
-               },
-
-               _setDisplayedValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange){
-                       this._setValueAttr(this.parse(value, this.constraints), priorityChange, value);
-               },
-
-               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(/*Event*/ e){
-                       // summary:
-                       //              Handler for keypress events
-
-                       var p = this._picker, dk = dojo.keys;
-                       // Handle the key in the picker, if it has a handler.  If the handler
-                       // returns false, then don't handle any other 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)){
-                               // Replace the element - but do it after a delay to allow for
-                               // filtering to occur
-                               setTimeout(dojo.hitch(this, function(){
-                                       if(this._picker && this._opened){
-                                               dijit.placeOnScreenAroundElement(p.domNode.parentNode, this.domNode, {'BL':'TL', 'TL':'BL'}, p.orient ? dojo.hitch(p, "orient") : null);
-                                       }
-                               }), 1);
-                       }
-               }
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.form.DateTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.DateTextBox"] = true;
-dojo.provide("dijit.form.DateTextBox");
-
-
-
-
-dojo.declare(
-       "dijit.form.DateTextBox",
-       dijit.form._DateTimeTextBox,
-       {
-               // summary:
-               //              A validating, serializable, range-bound date text box with a drop down calendar
-               //
-               //              Example:
-               // |    new dijit.form.DateTextBox({value: new Date(2009, 0, 20)})
-               //
-               //              Example:
-               // |    <input dojotype='dijit.form.DateTextBox' value='2009-01-20'>
-
-               baseClass: "dijitTextBox dijitDateTextBox",
-               popupClass: "dijit.Calendar",
-               _selector: "date",
-
-               // value: Date
-               //              The value of this widget as a JavaScript Date object, with only year/month/day specified.
-               //              If specified in markup, use the format specified in `dojo.date.stamp.fromISOString`
-               value: new Date("")     // value.toString()="NaN"
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.form._Spinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form._Spinner"] = true;
-dojo.provide("dijit.form._Spinner");
-
-
-
-dojo.declare(
-       "dijit.form._Spinner",
-       dijit.form.RangeBoundTextBox,
-       {
-               // summary:
-               //              Mixin for validation widgets with a spinner.
-               // description:
-               //              This class basically (conceptually) extends `dijit.form.ValidationTextBox`.
-               //              It modifies the template to have up/down arrows, and provides related handling code.
-
-               // defaultTimeout: Number
-               //              Number of milliseconds before a held arrow key or up/down button becomes typematic
-               defaultTimeout: 500,
-
-               // minimumTimeout: Number
-               //       minimum number of milliseconds that typematic event fires when held key or button is held
-               minimumTimeout: 10,
-
-               // timeoutChangeRate: Number
-               //              Fraction of time used to change the typematic timer between events.
-               //              1.0 means that each typematic event fires at defaultTimeout intervals.
-               //              < 1.0 means that each typematic event fires at an increasing faster rate.
-               timeoutChangeRate: 0.90,
-
-               // smallDelta: Number
-               //        Adjust the value by this much when spinning using the arrow keys/buttons
-               smallDelta: 1,
-
-               // largeDelta: Number
-               //        Adjust the value by this much when spinning using the PgUp/Dn keys
-               largeDelta: 10,
-
-               templateString: dojo.cache("dijit.form", "templates/Spinner.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitButtonNode dijitSpinnerButtonContainer\"\n\t\t><input class=\"dijitReset dijitInputField dijitSpinnerButtonInner\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t/><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitUpArrowButton\"\n\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9650;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t\t><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9660;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onkeypress:_onKeyPress\"\n\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" ${!nameAttrSetting}\n\t/></div\n></div>\n"),
-
-               baseClass: "dijitTextBox dijitSpinner",
-
-               // Set classes like dijitUpArrowButtonHover or dijitDownArrowButtonActive depending on
-               // mouse action over specified node
-               cssStateNodes: {
-                       "upArrowNode": "dijitUpArrowButton",
-                       "downArrowNode": "dijitDownArrowButton"
-               },
-
-               adjust: function(/* Object */ val, /*Number*/ delta){
-                       // summary:
-                       //              Overridable function used to adjust a primitive value(Number/Date/...) by the delta amount specified.
-                       //              The val is adjusted in a way that makes sense to the object type.
-                       // tags:
-                       //              protected extension
-                       return val;
-               },
-
-               _arrowPressed: function(/*Node*/ nodePressed, /*Number*/ direction, /*Number*/ increment){
-                       // summary:
-                       //              Handler for arrow button or arrow key being pressed
-                       if(this.disabled || this.readOnly){ return; }
-                       this._setValueAttr(this.adjust(this.get('value'), direction*increment), false);
-                       dijit.selectInputText(this.textbox, this.textbox.value.length);
-               },
-
-               _arrowReleased: function(/*Node*/ node){
-                       // summary:
-                       //              Handler for arrow button or arrow key being released
-                       this._wheelTimer = null;
-                       if(this.disabled || this.readOnly){ return; }
-               },
-
-               _typematicCallback: function(/*Number*/ count, /*DOMNode*/ node, /*Event*/ evt){
-                       var inc=this.smallDelta;
-                       if(node == this.textbox){
-                               var k=dojo.keys;
-                               var key = evt.charOrCode;
-                               inc = (key == k.PAGE_UP || key == k.PAGE_DOWN) ? this.largeDelta : this.smallDelta;
-                               node = (key == k.UP_ARROW || key == k.PAGE_UP) ? this.upArrowNode : this.downArrowNode;
-                       }
-                       if(count == -1){ this._arrowReleased(node); }
-                       else{ this._arrowPressed(node, (node == this.upArrowNode) ? 1 : -1, inc); }
-               },
-
-               _wheelTimer: null,
-               _mouseWheeled: function(/*Event*/ evt){
-                       // summary:
-                       //              Mouse wheel listener where supported
-
-                       dojo.stopEvent(evt);
-                       // FIXME: Safari bubbles
-
-                       // be nice to DOH and scroll as much as the event says to
-                       var scrollAmount = evt.detail ? (evt.detail * -1) : (evt.wheelDelta / 120);
-                       if(scrollAmount !== 0){
-                               var node = this[(scrollAmount > 0 ? "upArrowNode" : "downArrowNode" )];
-
-                               this._arrowPressed(node, scrollAmount, this.smallDelta);
-
-                               if(!this._wheelTimer){
-                                       clearTimeout(this._wheelTimer);
-                               }
-                               this._wheelTimer = setTimeout(dojo.hitch(this,"_arrowReleased",node), 50);
-                       }
-
-               },
-
-               postCreate: function(){
-                       this.inherited(arguments);
-
-                       // extra listeners
-                       this.connect(this.domNode, !dojo.isMozilla ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
-                       this._connects.push(dijit.typematic.addListener(this.upArrowNode, this.textbox, {charOrCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
-                       this._connects.push(dijit.typematic.addListener(this.downArrowNode, this.textbox, {charOrCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
-                       this._connects.push(dijit.typematic.addListener(this.upArrowNode, this.textbox, {charOrCode:dojo.keys.PAGE_UP,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
-                       this._connects.push(dijit.typematic.addListener(this.downArrowNode, this.textbox, {charOrCode:dojo.keys.PAGE_DOWN,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
-               }
-});
-
-}
-
-if(!dojo._hasResource["dijit.form.NumberSpinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.NumberSpinner"] = true;
-dojo.provide("dijit.form.NumberSpinner");
-
-
-
-
-dojo.declare("dijit.form.NumberSpinner",
-       [dijit.form._Spinner, dijit.form.NumberTextBoxMixin],
-       {
-       // summary:
-       //              Extends NumberTextBox to add up/down arrows and pageup/pagedown for incremental change to the value
-       //
-       // description:
-       //              A `dijit.form.NumberTextBox` extension to provide keyboard accessible value selection
-       //              as well as icons for spinning direction. When using the keyboard, the typematic rules
-       //              apply, meaning holding the key will gradually increase or decrease the value and
-       //              accelerate.
-       //
-       // example:
-       //      | new dijit.form.NumberSpinner({ constraints:{ max:300, min:100 }}, "someInput");
-
-       adjust: function(/* Object */val, /* Number*/delta){
-               // summary:
-               //              Change Number val by the given amount
-               // tags:
-               //              protected
-
-               var tc = this.constraints,
-                       v = isNaN(val),
-                       gotMax = !isNaN(tc.max),
-                       gotMin = !isNaN(tc.min)
-               ;
-               if(v && delta != 0){ // blank or invalid value and they want to spin, so create defaults
-                       val = (delta > 0) ?
-                               gotMin ? tc.min : gotMax ? tc.max : 0 :
-                               gotMax ? this.constraints.max : gotMin ? tc.min : 0
-                       ;
-               }
-               var newval = val + delta;
-               if(v || isNaN(newval)){ return val; }
-               if(gotMax && (newval > tc.max)){
-                       newval = tc.max;
-               }
-               if(gotMin && (newval < tc.min)){
-                       newval = tc.min;
-               }
-               return newval;
-       },
-
-       _onKeyPress: function(e){
-               if((e.charOrCode == dojo.keys.HOME || e.charOrCode == dojo.keys.END) && !(e.ctrlKey || e.altKey || e.metaKey)
-               && typeof this.get('value') != 'undefined' /* gibberish, so HOME and END are default editing keys*/){
-                       var value = this.constraints[(e.charOrCode == dojo.keys.HOME ? "min" : "max")];
-                       if(typeof value == "number"){
-                               this._setValueAttr(value, false);
-                       }
-                       // eat home or end key whether we change the value or not
-                       dojo.stopEvent(e);
-               }
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.form.MultiSelect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.MultiSelect"] = true;
-dojo.provide("dijit.form.MultiSelect");
-
-
-
-dojo.declare("dijit.form.MultiSelect", dijit.form._FormValueWidget, {
-       // summary:
-       //              Widget version of a <select multiple=true> element,
-       //              for selecting multiple options.
-
-       // size: Number
-       //              Number of elements to display on a page
-       //              NOTE: may be removed in version 2.0, since elements may have variable height;
-       //              set the size via style="..." or CSS class names instead.
-       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(){
-               // summary:
-               //              Reset the widget's value to what it was at initialization time
-
-               // TODO: once we inherit from FormValueWidget this won't be needed
-               this._hasBeenBlurred = false;
-               this._setValueAttr(this._resetValue, true);
-       },
-
-       addSelected: function(/* dijit.form.MultiSelect */ select){
-               // summary:
-               //              Move the selected nodes of a passed Select widget
-               //              instance to this Select widget.
-               //
-               // example:
-               // |    // move all the selected values from "bar" to "foo"
-               // |    dijit.byId("foo").addSelected(dijit.byId("bar"));
-
-               select.getSelected().forEach(function(n){
-                       this.containerNode.appendChild(n);
-                       // scroll to bottom to see item
-                       // cannot use scrollIntoView since <option> tags don't support all attributes
-                       // does not work on IE due to a bug where <select> always shows scrollTop = 0
-                       this.domNode.scrollTop = this.domNode.offsetHeight; // overshoot will be ignored
-                       // scrolling the source select is trickier esp. on safari who forgets to change the scrollbar size
-                       var oldscroll = select.domNode.scrollTop;
-                       select.domNode.scrollTop = 0;
-                       select.domNode.scrollTop = oldscroll;
-               },this);
-       },
-
-       getSelected: function(){
-               // summary:
-               //              Access the NodeList of the selected options directly
-               return dojo.query("option",this.containerNode).filter(function(n){
-                       return n.selected; // Boolean
-               }); // dojo.NodeList
-       },
-
-       _getValueAttr: function(){
-               // summary:
-               //              Hook so attr('value') works.
-               // description:
-               //              Returns an array of the selected options' values.
-               return this.getSelected().map(function(n){
-                       return n.value;
-               });
-       },
-
-       multiple: true, // for Form
-
-       _setValueAttr: function(/* Array */values){
-               // summary:
-               //              Hook so attr('value', values) works.
-               // description:
-               //              Set the value(s) of this Select based on passed values
-               dojo.query("option",this.containerNode).forEach(function(n){
-                       n.selected = (dojo.indexOf(values,n.value) != -1);
-               });
-       },
-
-       invertSelection: function(onChange){
-               // summary:
-               //              Invert the selection
-               // onChange: Boolean
-               //              If null, onChange is not fired.
-               dojo.query("option",this.containerNode).forEach(function(n){
-                       n.selected = !n.selected;
-               });
-               this._handleOnChange(this.get('value'), onChange == true);
-       },
-
-       _onChange: function(/*Event*/ e){
-               this._handleOnChange(this.get('value'), true);
-       },
-
-       // for layout widgets:
-       resize: function(/* Object */size){
-               if(size){
-                       dojo.marginBox(this.domNode, size);
-               }
-       },
-
-       postCreate: function(){
-               this._onChange();
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.form.HorizontalSlider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.HorizontalSlider"] = true;
-dojo.provide("dijit.form.HorizontalSlider");
-
-
-
-
-
-
-
-
-dojo.declare(
-       "dijit.form.HorizontalSlider",
-       [dijit.form._FormValueWidget, dijit._Container],
-{
-       // summary:
-       //              A form widget that allows one to select a value with a horizontally draggable handle
-
-       templateString: dojo.cache("dijit.form", "templates/HorizontalSlider.html", "<table class=\"dijit dijitReset dijitSlider dijitSliderH\" 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 dijitSliderDecoration dijitSliderDecorationT dijitSliderDecorationH\"></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\" 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\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\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 dijitSliderDecoration dijitSliderDecorationB dijitSliderDecorationH\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n"),
-
-       // Overrides FormValueWidget.value to indicate numeric value
-       value: 0,
-
-       // showButtons: Boolean
-       //              Show increment/decrement buttons at the ends of the slider?
-       showButtons: true,
-
-       // minimum:: Integer
-       //              The minimum value the slider can be set to.
-       minimum: 0,
-
-       // maximum: Integer
-       //              The maximum value the slider can be set to.
-       maximum: 100,
-
-       // discreteValues: Integer
-       //              If specified, indicates that the slider handle has only 'discreteValues' possible positions,
-       //      and that after dragging the handle, it will snap to the nearest possible position.
-       //      Thus, the slider has only 'discreteValues' possible values.
-       //
-       //              For example, if minimum=10, maxiumum=30, and discreteValues=3, then the slider handle has
-       //              three possible positions, representing values 10, 20, or 30.
-       //
-       //              If discreteValues is not specified or if it's value is higher than the number of pixels
-       //              in the slider bar, then the slider handle can be moved freely, and the slider's value will be
-       //              computed/reported based on pixel position (in this case it will likely be fractional,
-       //      such as 123.456789).
-       discreteValues: Infinity,
-
-       // pageIncrement: Integer
-       //              If discreteValues is also specified, this indicates the amount of clicks (ie, snap positions)
-       //      that the slider handle is moved via pageup/pagedown keys.
-       //      If discreteValues is not specified, it indicates the number of pixels.
-       pageIncrement: 2,
-
-       // clickSelect: Boolean
-       //              If clicking the slider bar changes the value or not
-       clickSelect: true,
-
-       // slideDuration: Number
-       //              The time in ms to take to animate the slider handle from 0% to 100%,
-       //              when clicking the slider bar to make the handle move.
-       slideDuration: dijit.defaultDuration,
-
-       // Flag to _Templated  (TODO: why is this here?   I see no widgets in the template.)
-       widgetsInTemplate: true,
-
-       attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
-               id: ""
-       }),
-
-       baseClass: "dijitSlider",
-
-       // Apply CSS classes to up/down arrows and handle per mouse state
-       cssStateNodes: {
-               incrementButton: "dijitSliderIncrementButton",
-               decrementButton: "dijitSliderDecrementButton",
-               focusNode: "dijitSliderThumb"
-       },
-
-       _mousePixelCoord: "pageX",
-       _pixelCount: "w",
-       _startingPixelCoord: "x",
-       _startingPixelCount: "l",
-       _handleOffsetCoord: "left",
-       _progressPixelSize: "width",
-
-       _onKeyUp: function(/*Event*/ e){
-               if(this.disabled || this.readOnly || e.altKey || e.ctrlKey || e.metaKey){ return; }
-               this._setValueAttr(this.value, true);
-       },
-
-       _onKeyPress: function(/*Event*/ 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;
-                       // this._descending === false: if ascending vertical (min on top)
-                       // (this._descending || this.isLeftToRight()): if left-to-right horizontal or descending vertical
-                       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){
-                       // make sure you get focus when dragging the handle
-                       // (but don't do on IE because it causes a flicker on mouse up (due to blur then focus)
-                       dijit.focus(this.sliderHandle);
-               }
-               dojo.stopEvent(e);
-       },
-
-       _isReversed: function(){
-               // summary:
-               //              Returns true if direction is from right to left
-               // tags:
-               //              protected extension
-               return !this.isLeftToRight();
-       },
-
-       _onBarClick: function(e){
-               if(this.disabled || this.readOnly || !this.clickSelect){ return; }
-               dijit.focus(this.sliderHandle);
-               dojo.stopEvent(e);
-               var abspos = dojo.position(this.sliderBarContainer, true);
-               var pixelValue = e[this._mousePixelCoord] - abspos[this._startingPixelCoord];
-               this._setPixelValue(this._isReversed() ? (abspos[this._pixelCount] - pixelValue) : pixelValue, abspos[this._pixelCount], true);
-               this._movable.onMouseDown(e);
-       },
-
-       _setPixelValue: function(/*Number*/ pixelValue, /*Number*/ maxPixels, /*Boolean, optional*/ priorityChange){
-               if(this.disabled || this.readOnly){ return; }
-               pixelValue = pixelValue < 0 ? 0 : maxPixels < pixelValue ? maxPixels : pixelValue;
-               var count = this.discreteValues;
-               if(count <= 1 || count == Infinity){ count = maxPixels; }
-               count--;
-               var pixelsPerValue = maxPixels / count;
-               var wholeIncrements = Math.round(pixelValue / pixelsPerValue);
-               this._setValueAttr((this.maximum-this.minimum)*wholeIncrements/count + this.minimum, priorityChange);
-       },
-
-       _setValueAttr: function(/*Number*/ value, /*Boolean, optional*/ priorityChange){
-               // summary:
-               //              Hook so attr('value', value) works.
-               this.valueNode.value = this.value = value;
-               dijit.setWaiState(this.focusNode, "valuenow", value);
-               this.inherited(arguments);
-               var percent = (value - this.minimum) / (this.maximum - this.minimum);
-               var progressBar = (this._descending === false) ? this.remainingBar : this.progressBar;
-               var remainingBar = (this._descending === false) ? this.progressBar : this.remainingBar;
-               if(this._inProgressAnim && this._inProgressAnim.status != "stopped"){
-                       this._inProgressAnim.stop(true);
-               }
-               if(priorityChange && this.slideDuration > 0 && progressBar.style[this._progressPixelSize]){
-                       // animate the slider
-                       var _this = this;
-                       var props = {};
-                       var start = parseFloat(progressBar.style[this._progressPixelSize]);
-                       var duration = this.slideDuration * (percent-start/100);
-                       if(duration == 0){ return; }
-                       if(duration < 0){ duration = 0 - duration; }
-                       props[this._progressPixelSize] = { start: start, end: percent*100, units:"%" };
-                       this._inProgressAnim = dojo.animateProperty({ node: progressBar, duration: duration,
-                               onAnimate: function(v){ remainingBar.style[_this._progressPixelSize] = (100-parseFloat(v[_this._progressPixelSize])) + "%"; },
-                               onEnd: function(){ delete _this._inProgressAnim; },
-                               properties: props
-                       })
-                       this._inProgressAnim.play();
-               }
-               else{
-                       progressBar.style[this._progressPixelSize] = (percent*100) + "%";
-                       remainingBar.style[this._progressPixelSize] = ((1-percent)*100) + "%";
-               }
-       },
-
-       _bumpValue: function(signedChange, /*Boolean, optional*/ priorityChange){
-               if(this.disabled || this.readOnly){ return; }
-               var s = dojo.getComputedStyle(this.sliderBarContainer);
-               var c = dojo._getContentBox(this.sliderBarContainer, s);
-               var count = this.discreteValues;
-               if(count <= 1 || count == Infinity){ count = c[this._pixelCount]; }
-               count--;
-               var value = (this.value - this.minimum) * count / (this.maximum - this.minimum) + signedChange;
-               if(value < 0){ value = 0; }
-               if(value > count){ value = count; }
-               value = value * (this.maximum - this.minimum) / count + this.minimum;
-               this._setValueAttr(value, priorityChange);
-       },
-
-       _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(/*Event*/ e){
-               // summary:
-               //              Decrement slider
-               // tags:
-               //              private
-               this._bumpValue(e.charOrCode == dojo.keys.PAGE_DOWN ? -this.pageIncrement : -1);
-       },
-
-       increment: function(/*Event*/ e){
-               // summary:
-               //              Increment slider
-               // tags:
-               //              private
-               this._bumpValue(e.charOrCode == dojo.keys.PAGE_UP ? this.pageIncrement : 1);
-       },
-
-       _mouseWheeled: function(/*Event*/ evt){
-               // summary:
-               //              Event handler for mousewheel where supported
-               dojo.stopEvent(evt);
-               var janky = !dojo.isMozilla;
-               var scroll = evt[(janky ? "wheelDelta" : "detail")] * (janky ? 1 : -1);
-               this._bumpValue(scroll < 0 ? -1 : 1, true); // negative scroll acts like a decrement
-       },
-
-       startup: function(){
-               if(this._started){ return; }
-
-               dojo.forEach(this.getChildren(), function(child){
-                       if(this[child.container] != this.containerNode){
-                               this[child.container].appendChild(child.domNode);
-                       }
-               }, this);
-
-               this.inherited(arguments);
-       },
-
-       _typematicCallback: function(/*Number*/ count, /*Object*/ button, /*Event*/ e){
-               if(count == -1){
-                       this._setValueAttr(this.value, true);
-               }else{
-                       this[(button == (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");
-
-               // define a custom constructor for a SliderMover that points back to me
-               var mover = dojo.declare(dijit.form._SliderMover, {
-                       widget: this
-               });
-
-               this._movable = new dojo.dnd.Moveable(this.sliderHandle, {mover: mover});
-               // find any associated label element and add to slider focusnode.
-               var label=dojo.query('label[for="'+this.id+'"]');
-               if(label.length){
-                       label[0].id = (this.id+"_label");
-                       dijit.setWaiState(this.focusNode, "labelledby", label[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); // tells destroy about pseudo-child widgets (ruler/labels)
-               this.inherited(arguments);
-       }
-});
-
-dojo.declare("dijit.form._SliderMover",
-       dojo.dnd.Mover,
-{
-       onMouseMove: function(e){
-               var widget = this.widget;
-               var abspos = widget._abspos;
-               if(!abspos){
-                       abspos = widget._abspos = dojo.position(widget.sliderBarContainer, true);
-                       widget._setPixelValue_ = dojo.hitch(widget, "_setPixelValue");
-                       widget._isReversed_ = widget._isReversed();
-               }
-               var pixelValue = e[widget._mousePixelCoord] - abspos[widget._startingPixelCoord];
-               widget._setPixelValue_(widget._isReversed_ ? (abspos[widget._pixelCount]-pixelValue) : pixelValue, abspos[widget._pixelCount], false);
-       },
-
-       destroy: function(e){
-               dojo.dnd.Mover.prototype.destroy.apply(this, arguments);
-               var widget = this.widget;
-               widget._abspos = null;
-               widget._setValueAttr(widget.value, true);
-       }
-});
-
-
-
-}
-
-if(!dojo._hasResource["dijit.form.VerticalSlider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.VerticalSlider"] = true;
-dojo.provide("dijit.form.VerticalSlider");
-
-
-
-dojo.declare(
-       "dijit.form.VerticalSlider",
-       dijit.form.HorizontalSlider,
-{
-       // summary:
-       //              A form widget that allows one to select a value with a vertically draggable handle
-
-       templateString: dojo.cache("dijit.form", "templates/VerticalSlider.html", "<table class=\"dijit dijitReset dijitSlider dijitSliderV\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\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\" 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 dijitSliderDecoration dijitSliderDecorationL dijitSliderDecorationV\"></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 dijitSliderMoveableV\" 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 dijitSliderDecoration dijitSliderDecorationR dijitSliderDecorationV\"></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\" 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></table>\n"),
-       _mousePixelCoord: "pageY",
-       _pixelCount: "h",
-       _startingPixelCoord: "y",
-       _startingPixelCount: "t",
-       _handleOffsetCoord: "top",
-       _progressPixelSize: "height",
-
-       // _descending: Boolean
-       //         Specifies if the slider values go from high-on-top (true), or low-on-top (false)
-       //      TODO: expose this in 1.2 - the css progress/remaining bar classes need to be reversed
-       _descending: true,
-
-       _isReversed: function(){
-               // summary:
-               //              Overrides HorizontalSlider._isReversed.
-               //              Indicates if values are high on top (with low numbers on the bottom).
-               return this._descending;
-       }
-});
-
-
-}
-
-if(!dojo._hasResource["dijit.form.HorizontalRule"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.HorizontalRule"] = true;
-dojo.provide("dijit.form.HorizontalRule");
-
-
-
-
-dojo.declare("dijit.form.HorizontalRule", [dijit._Widget, dijit._Templated],
-{
-       // summary:
-       //              Hash marks for `dijit.form.HorizontalSlider`
-
-       templateString: '<div class="dijitRuleContainer dijitRuleContainerH"></div>',
-
-       // count: Integer
-       //              Number of hash marks to generate
-       count: 3,
-
-       // container: String
-       //              For HorizontalSlider, this is either "topDecoration" or "bottomDecoration",
-       //              and indicates whether this rule goes above or below the slider.
-       container: "containerNode",
-
-       // ruleStyle: String
-       //              CSS style to apply to individual hash marks
-       ruleStyle: "",
-
-       _positionPrefix: '<div class="dijitRuleMark dijitRuleMarkH" style="left:',
-       _positionSuffix: '%;',
-       _suffix: '"></div>',
-
-       _genHTML: function(pos, ndx){
-               return this._positionPrefix + pos + this._positionSuffix + this.ruleStyle + this._suffix;
-       },
-
-       // _isHorizontal: [protected extension] Boolean
-       //              VerticalRule will override this...
-       _isHorizontal: true,
-
-       postCreate: function(){
-               var innerHTML;
-               if(this.count == 1){
-                       innerHTML = this._genHTML(50, 0);
-               }else{
-                       var i;
-                       var interval = 100 / (this.count-1);
-                       if(!this._isHorizontal || this.isLeftToRight()){
-                               innerHTML = this._genHTML(0, 0);
-                               for(i=1; i < this.count-1; i++){
-                                       innerHTML += this._genHTML(interval*i, i);
-                               }
-                               innerHTML += this._genHTML(100, this.count-1);
-                       }else{
-                               innerHTML = this._genHTML(100, 0);
-                               for(i=1; i < this.count-1; i++){
-                                       innerHTML += this._genHTML(100-interval*i, i);
-                               }
-                               innerHTML += this._genHTML(0, this.count-1);
-                       }
-               }
-               this.domNode.innerHTML = innerHTML;
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.form.VerticalRule"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.VerticalRule"] = true;
-dojo.provide("dijit.form.VerticalRule");
-
-
-
-dojo.declare("dijit.form.VerticalRule", dijit.form.HorizontalRule,
-{
-       // summary:
-       //              Hash marks for the `dijit.form.VerticalSlider`
-
-       templateString: '<div class="dijitRuleContainer dijitRuleContainerV"></div>',
-       _positionPrefix: '<div class="dijitRuleMark dijitRuleMarkV" style="top:',
-
-/*=====
-       // container: String
-       //              This is either "leftDecoration" or "rightDecoration",
-       //              to indicate whether this rule goes to the left or to the right of the slider.
-       //              Note that on RTL system, "leftDecoration" would actually go to the right, and vice-versa.
-       container: "",
-=====*/
-
-       // Overrides HorizontalRule._isHorizontal
-       _isHorizontal: false
-
-});
-
-
-}
-
-if(!dojo._hasResource["dijit.form.HorizontalRuleLabels"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.HorizontalRuleLabels"] = true;
-dojo.provide("dijit.form.HorizontalRuleLabels");
-
-
-
-dojo.declare("dijit.form.HorizontalRuleLabels", dijit.form.HorizontalRule,
-{
-       // summary:
-       //              Labels for `dijit.form.HorizontalSlider`
-
-       templateString: '<div class="dijitRuleContainer dijitRuleContainerH dijitRuleLabelsContainer dijitRuleLabelsContainerH"></div>',
-
-       // labelStyle: String
-       //              CSS style to apply to individual text labels
-       labelStyle: "",
-
-       // labels: String[]?
-       //              Array of text labels to render - evenly spaced from left-to-right or bottom-to-top.
-       //              Alternately, minimum and maximum can be specified, to get numeric labels.
-       labels: [],
-
-       // numericMargin: Integer
-       //              Number of generated numeric labels that should be rendered as '' on the ends when labels[] are not specified
-       numericMargin: 0,
-
-       // numericMinimum: Integer
-       //              Leftmost label value for generated numeric labels when labels[] are not specified
-       minimum: 0,
-
-       // numericMaximum: Integer
-       //              Rightmost label value for generated numeric labels when labels[] are not specified
-       maximum: 1,
-
-       // constraints: Object
-       //              pattern, places, lang, et al (see dojo.number) for generated numeric labels when labels[] are not specified
-       constraints: {pattern:"#%"},
-
-       _positionPrefix: '<div class="dijitRuleLabelContainer dijitRuleLabelContainerH" style="left:',
-       _labelPrefix: '"><div class="dijitRuleLabel dijitRuleLabelH">',
-       _suffix: '</div></div>',
-
-       _calcPosition: function(pos){
-               // summary:
-               //              Returns the value to be used in HTML for the label as part of the left: attribute
-               // tags:
-               //              protected extension
-               return pos;
-       },
-
-       _genHTML: function(pos, ndx){
-               return this._positionPrefix + this._calcPosition(pos) + this._positionSuffix + this.labelStyle + this._labelPrefix + this.labels[ndx] + this._suffix;
-       },
-
-       getLabels: function(){
-               // summary:
-               //              Overridable function to return array of labels to use for this slider.
-               //              Can specify a getLabels() method instead of a labels[] array, or min/max attributes.
-               // tags:
-               //              protected extension
-
-               // if the labels array was not specified directly, then see if <li> children were
-               var labels = this.labels;
-               if(!labels.length){
-                       // for markup creation, labels are specified as child elements
-                       labels = dojo.query("> li", this.srcNodeRef).map(function(node){
-                               return String(node.innerHTML);
-                       });
-               }
-               this.srcNodeRef.innerHTML = '';
-               // if the labels were not specified directly and not as <li> children, then calculate numeric labels
-               if(!labels.length && this.count > 1){
-                       var start = this.minimum;
-                       var inc = (this.maximum - start) / (this.count-1);
-                       for(var i=0; i < this.count; i++){
-                               labels.push((i < this.numericMargin || i >= (this.count-this.numericMargin)) ? '' : dojo.number.format(start, this.constraints));
-                               start += inc;
-                       }
-               }
-               return labels;
-       },
-
-       postMixInProperties: function(){
-               this.inherited(arguments);
-               this.labels = this.getLabels();
-               this.count = this.labels.length;
-       }
-});
-
-
-
-}
-
-if(!dojo._hasResource["dijit.form.VerticalRuleLabels"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.VerticalRuleLabels"] = true;
-dojo.provide("dijit.form.VerticalRuleLabels");
-
-
-
-dojo.declare("dijit.form.VerticalRuleLabels", dijit.form.HorizontalRuleLabels,
-{
-       // summary:
-       //              Labels for the `dijit.form.VerticalSlider`
-
-       templateString: '<div class="dijitRuleContainer dijitRuleContainerV dijitRuleLabelsContainer dijitRuleLabelsContainerV"></div>',
-
-       _positionPrefix: '<div class="dijitRuleLabelContainer dijitRuleLabelContainerV" style="top:',
-       _labelPrefix: '"><span class="dijitRuleLabel dijitRuleLabelV">',
-
-       _calcPosition: function(pos){
-               // Overrides HorizontalRuleLabel._calcPosition()
-               return 100-pos;
-       },
-
-       // needed to prevent labels from being reversed in RTL mode
-       _isHorizontal: false
-});
-
-}
-
-if(!dojo._hasResource["dijit.form.SimpleTextarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.SimpleTextarea"] = true;
-dojo.provide("dijit.form.SimpleTextarea");
-
-
-
-dojo.declare("dijit.form.SimpleTextarea",
-       dijit.form.TextBox,
-       {
-       // summary:
-       //              A simple textarea that degrades, and responds to
-       //              minimal LayoutContainer usage, and works with dijit.form.Form.
-       //              Doesn't automatically size according to input, like Textarea.
-       //
-       // example:
-       //      |       <textarea dojoType="dijit.form.SimpleTextarea" name="foo" value="bar" rows=30 cols=40></textarea>
-       //
-       // example:
-       //      |       new dijit.form.SimpleTextarea({ rows:20, cols:30 }, "foo");
-
-       baseClass: "dijitTextBox dijitTextArea",
-
-       attributeMap: dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap, {
-               rows:"textbox", cols: "textbox"
-       }),
-
-       // rows: Number
-       //              The number of rows of text.
-       rows: "3",
-
-       // rows: Number
-       //              The number of characters per line.
-       cols: "20",
-
-       templateString: "<textarea ${!nameAttrSetting} dojoAttachPoint='focusNode,containerNode,textbox' autocomplete='off'></textarea>",
-
-       postMixInProperties: function(){
-               // Copy value from srcNodeRef, unless user specified a value explicitly (or there is no srcNodeRef)
-               if(!this.value && this.srcNodeRef){
-                       this.value = this.srcNodeRef.value;
-               }
-               this.inherited(arguments);
-       },
-
-       filter: function(/*String*/ value){
-               // Override TextBox.filter to deal with newlines... specifically (IIRC) this is for IE which writes newlines
-               // as \r\n instead of just \n
-               if(value){
-                       value = value.replace(/\r/g,"");
-               }
-               return this.inherited(arguments);
-       },
-
-       postCreate: function(){
-               this.inherited(arguments);
-               if(dojo.isIE && this.cols){ // attribute selectors is not supported in IE6
-                       dojo.addClass(this.textbox, "dijitTextAreaCols");
-               }
-       },
-
-       _previousValue: "",
-       _onInput: function(/*Event?*/ e){
-               // Override TextBox._onInput() to enforce maxLength restriction
-               if(this.maxLength){
-                       var maxLength = parseInt(this.maxLength);
-                       var value = this.textbox.value.replace(/\r/g,'');
-                       var overflow = value.length - maxLength;
-                       if(overflow > 0){
-                               if(e){ dojo.stopEvent(e); }
-                               var textarea = this.textbox;
-                               if(textarea.selectionStart){
-                                       var pos = textarea.selectionStart;
-                                       var cr = 0;
-                                       if(dojo.isOpera){
-                                               cr = (this.textbox.value.substring(0,pos).match(/\r/g) || []).length;
-                                       }
-                                       this.textbox.value = value.substring(0,pos-overflow-cr)+value.substring(pos-cr);
-                                       textarea.setSelectionRange(pos-overflow, pos-overflow);
-                               }else if(dojo.doc.selection){ //IE
-                                       textarea.focus();
-                                       var range = dojo.doc.selection.createRange();
-                                       // delete overflow characters
-                                       range.moveStart("character", -overflow);
-                                       range.text = '';
-                                       // show cursor
-                                       range.select();
-                               }
-                       }
-                       this._previousValue = this.textbox.value;
-               }
-               this.inherited(arguments);
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.form.Textarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.form.Textarea"] = true;
-dojo.provide("dijit.form.Textarea");
-
-
-
-dojo.declare(
-       "dijit.form.Textarea",
-       dijit.form.SimpleTextarea,
-       {
-       // summary:
-       //              A textarea widget that adjusts it's height according to the amount of data.
-       //
-       // description:
-       //              A textarea that dynamically expands/contracts (changing it's height) as
-       //              the user types, to display all the text without requiring a scroll bar.
-       //
-       //              Takes nearly all the parameters (name, value, etc.) that a vanilla textarea takes.
-       //              Rows is not supported since this widget adjusts the height.
-       //
-       // example:
-       // |    <textarea dojoType="dijit.form.TextArea">...</textarea>
-
-
-       // Override SimpleTextArea.cols to default to width:100%, for backward compatibility
-       cols: "",
-
-       _previousNewlines: 0,
-       _strictMode: (dojo.doc.compatMode != 'BackCompat'), // not the same as !dojo.isQuirks
-
-       _getHeight: function(textarea){
-               var newH = textarea.scrollHeight;
-               if(dojo.isIE){
-                       newH += textarea.offsetHeight - textarea.clientHeight - ((dojo.isIE < 8 && this._strictMode) ? dojo._getPadBorderExtents(textarea).h : 0);
-               }else if(dojo.isMoz){
-                       newH += textarea.offsetHeight - textarea.clientHeight; // creates room for horizontal scrollbar
-               }else if(dojo.isWebKit && !(dojo.isSafari < 4)){ // Safari 4.0 && Chrome
-                       newH += dojo._getBorderExtents(textarea).h;
-               }else{ // Safari 3.x and Opera 9.6
-                       newH += dojo._getPadBorderExtents(textarea).h;
-               }
-               return newH;
-       },
-
-       _estimateHeight: function(textarea){
-               // summary:
-               //              Approximate the height when the textarea is invisible with the number of lines in the text.
-               //              Fails when someone calls setValue with a long wrapping line, but the layout fixes itself when the user clicks inside so . . .
-               //              In IE, the resize event is supposed to fire when the textarea becomes visible again and that will correct the size automatically.
-               //
-               textarea.style.maxHeight = "";
-               textarea.style.height = "auto";
-               // #rows = #newlines+1
-               // Note: on Moz, the following #rows appears to be 1 too many.
-               // Actually, Moz is reserving room for the scrollbar.
-               // If you increase the font size, this behavior becomes readily apparent as the last line gets cut off without the +1.
-               textarea.rows = (textarea.value.match(/\n/g) || []).length + 1;
-       },
-
-       _needsHelpShrinking: dojo.isMoz || dojo.isWebKit,
-
-       _onInput: function(){
-               // Override SimpleTextArea._onInput() to deal with height adjustment
-               this.inherited(arguments);
-               if(this._busyResizing){ return; }
-               this._busyResizing = true;
-               var textarea = this.textbox;
-               if(textarea.scrollHeight && textarea.offsetHeight && textarea.clientHeight){
-                       var newH = this._getHeight(textarea) + "px";
-                       if(textarea.style.height != newH){
-                               textarea.style.maxHeight = textarea.style.height = newH;
-                       }
-                       if(this._needsHelpShrinking){
-                               if(this._setTimeoutHandle){
-                                       clearTimeout(this._setTimeoutHandle);
-                               }
-                               this._setTimeoutHandle = setTimeout(dojo.hitch(this, "_shrink"), 0); // try to collapse multiple shrinks into 1
-                       }
-               }else{
-                       // hidden content of unknown size
-                       this._estimateHeight(textarea);
-               }
-               this._busyResizing = false;
-       },
-
-       _busyResizing: false,
-       _shrink: function(){
-               // grow paddingBottom to see if scrollHeight shrinks (when it is unneccesarily big)
-               this._setTimeoutHandle = null;
-               if(this._needsHelpShrinking && !this._busyResizing){
-                       this._busyResizing = true;
-                       var textarea = this.textbox;
-                       var empty = false;
-                       if(textarea.value == ''){
-                               textarea.value = ' '; // prevent collapse all the way back to 0
-                               empty = true;
-                       }
-                       var scrollHeight = textarea.scrollHeight;
-                       if(!scrollHeight){
-                               this._estimateHeight(textarea);
-                       }else{
-                               var oldPadding = textarea.style.paddingBottom;
-                               var newPadding = dojo._getPadExtents(textarea);
-                               newPadding = newPadding.h - newPadding.t;
-                               textarea.style.paddingBottom = newPadding + 1 + "px"; // tweak padding to see if height can be reduced
-                               var newH = this._getHeight(textarea) - 1 + "px"; // see if the height changed by the 1px added
-                               if(textarea.style.maxHeight != newH){ // if can be reduced, so now try a big chunk
-                                       textarea.style.paddingBottom = newPadding + scrollHeight + "px";
-                                       textarea.scrollTop = 0;
-                                       textarea.style.maxHeight = this._getHeight(textarea) - scrollHeight + "px"; // scrollHeight is the added padding
-                               }
-                               textarea.style.paddingBottom = oldPadding;
-                       }
-                       if(empty){
-                               textarea.value = '';
-                       }
-                       this._busyResizing = false;
-               }
-       },
-
-       resize: function(){
-               // summary:
-               //              Resizes the textarea vertically (should be called after a style/value change)
-               this._onInput();
-       },
-
-       _setValueAttr: function(){
-               this.inherited(arguments);
-               this.resize();
-       },
-
-       postCreate: function(){
-               this.inherited(arguments);
-               // tweak textarea style to reduce browser differences
-               dojo.style(this.textbox, { overflowY: 'hidden', overflowX: 'auto', boxSizing: 'border-box', MsBoxSizing: 'border-box', WebkitBoxSizing: 'border-box', MozBoxSizing: 'border-box' });
-               this.connect(this.textbox, "onscroll", this._onInput);
-               this.connect(this.textbox, "onresize", this._onInput);
-               this.connect(this.textbox, "onfocus", this._onInput); // useful when a previous estimate was off a bit
-               this._setTimeoutHandle = setTimeout(dojo.hitch(this, "resize"), 0);
-       },
-
-       uninitialize: function(){
-               if(this._setTimeoutHandle){
-                       clearTimeout(this._setTimeoutHandle);
-               }
-               this.inherited(arguments);
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.layout.StackController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.StackController"] = true;
-dojo.provide("dijit.layout.StackController");
-
-
-
-
-
-
-
-dojo.declare(
-               "dijit.layout.StackController",
-               [dijit._Widget, dijit._Templated, dijit._Container],
-               {
-                       // summary:
-                       //              Set of buttons to select a page in a page list.
-                       // description:
-                       //              Monitors the specified StackContainer, and whenever a page is
-                       //              added, deleted, or selected, updates itself accordingly.
-
-                       templateString: "<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",
-
-                       // containerId: [const] String
-                       //              The id of the page container that I point to
-                       containerId: "",
-
-                       // buttonWidget: [const] String
-                       //              The name of the button widget to create to correspond to each page
-                       buttonWidget: "dijit.layout._StackButton",
-
-                       postCreate: function(){
-                               dijit.setWaiRole(this.domNode, "tablist");
-
-                               this.pane2button = {};          // mapping from pane id to buttons
-                               this.pane2handles = {};         // mapping from pane id to this.connect() handles
-
-                               // Listen to notifications from StackContainer
-                               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(/*Object*/ info){
-                               // summary:
-                               //              Called after StackContainer has finished initializing
-                               // tags:
-                               //              private
-                               dojo.forEach(info.children, this.onAddChild, this);
-                               if(info.selected){
-                                       // Show button corresponding to selected pane (unless selected
-                                       // is null because there are no panes)
-                                       this.onSelectChild(info.selected);
-                               }
-                       },
-
-                       destroy: function(){
-                               for(var pane in this.pane2button){
-                                       this.onRemoveChild(dijit.byId(pane));
-                               }
-                               this.inherited(arguments);
-                       },
-
-                       onAddChild: function(/*dijit._Widget*/ page, /*Integer?*/ insertIndex){
-                               // summary:
-                               //              Called whenever a page is added to the container.
-                               //              Create button corresponding to the page.
-                               // tags:
-                               //              private
-
-                               // create an instance of the button widget
-                               var cls = dojo.getObject(this.buttonWidget);
-                               var button = new cls({
-                                       id: this.id + "_" + page.id,
-                                       label: page.title,
-                                       dir: page.dir,
-                                       lang: page.lang,
-                                       showLabel: page.showTitle,
-                                       iconClass: page.iconClass,
-                                       closeButton: page.closable,
-                                       title: page.tooltip
-                               });
-                               dijit.setWaiState(button.focusNode,"selected", "false");
-                               this.pane2handles[page.id] = [
-                                       this.connect(page, 'set', function(name, value){
-                                               var buttonAttr = {
-                                                       title: 'label',
-                                                       showTitle: 'showLabel',
-                                                       iconClass: 'iconClass',
-                                                       closable: 'closeButton',
-                                                       tooltip: 'title'
-                                               }[name];
-                                               if(buttonAttr){
-                                                       button.set(buttonAttr, value);
-                                               }
-                                       }),
-                                       this.connect(button, 'onClick', dojo.hitch(this,"onButtonClick", page)),
-                                       this.connect(button, 'onClickCloseButton', dojo.hitch(this,"onCloseButtonClick", page))
-                               ];
-                               this.addChild(button, insertIndex);
-                               this.pane2button[page.id] = button;
-                               page.controlButton = button;    // this value might be overwritten if two tabs point to same container
-                               if(!this._currentChild){ // put the first child into the tab order
-                                       button.focusNode.setAttribute("tabIndex", "0");
-                                       dijit.setWaiState(button.focusNode, "selected", "true");
-                                       this._currentChild = page;
-                               }
-                               // make sure all tabs have the same length
-                               if(!this.isLeftToRight() && dojo.isIE && this._rectifyRtlTabList){
-                                       this._rectifyRtlTabList();
-                               }
-                       },
-
-                       onRemoveChild: function(/*dijit._Widget*/ page){
-                               // summary:
-                               //              Called whenever a page is removed from the container.
-                               //              Remove the button corresponding to the page.
-                               // tags:
-                               //              private
-
-                               if(this._currentChild === page){ this._currentChild = null; }
-                               dojo.forEach(this.pane2handles[page.id], this.disconnect, this);
-                               delete this.pane2handles[page.id];
-                               var button = this.pane2button[page.id];
-                               if(button){
-                                       this.removeChild(button);
-                                       delete this.pane2button[page.id];
-                                       button.destroy();
-                               }
-                               delete page.controlButton;
-                       },
-
-                       onSelectChild: function(/*dijit._Widget*/ page){
-                               // summary:
-                               //              Called when a page has been selected in the StackContainer, either by me or by another StackController
-                               // tags:
-                               //              private
-
-                               if(!page){ return; }
-
-                               if(this._currentChild){
-                                       var oldButton=this.pane2button[this._currentChild.id];
-                                       oldButton.set('checked', false);
-                                       dijit.setWaiState(oldButton.focusNode, "selected", "false");
-                                       oldButton.focusNode.setAttribute("tabIndex", "-1");
-                               }
-
-                               var newButton=this.pane2button[page.id];
-                               newButton.set('checked', true);
-                               dijit.setWaiState(newButton.focusNode, "selected", "true");
-                               this._currentChild = page;
-                               newButton.focusNode.setAttribute("tabIndex", "0");
-                               var container = dijit.byId(this.containerId);
-                               dijit.setWaiState(container.containerNode, "labelledby", newButton.id);
-                       },
-
-                       onButtonClick: function(/*dijit._Widget*/ page){
-                               // summary:
-                               //              Called whenever one of my child buttons is pressed in an attempt to select a page
-                               // tags:
-                               //              private
-
-                               var container = dijit.byId(this.containerId);
-                               container.selectChild(page);
-                       },
-
-                       onCloseButtonClick: function(/*dijit._Widget*/ page){
-                               // summary:
-                               //              Called whenever one of my child buttons [X] is pressed in an attempt to close a page
-                               // tags:
-                               //              private
-
-                               var container = dijit.byId(this.containerId);
-                               container.closeChild(page);
-                               if(this._currentChild){
-                                       var b = this.pane2button[this._currentChild.id];
-                                       if(b){
-                                               dijit.focus(b.focusNode || b.domNode);
-                                       }
-                               }
-                       },
-
-                       // TODO: this is a bit redundant with forward, back api in StackContainer
-                       adjacent: function(/*Boolean*/ forward){
-                               // summary:
-                               //              Helper for onkeypress to find next/previous button
-                               // tags:
-                               //              private
-
-                               if(!this.isLeftToRight() && (!this.tabPosition || /top|bottom/.test(this.tabPosition))){ forward = !forward; }
-                               // find currently focused button in children array
-                               var children = this.getChildren();
-                               var current = dojo.indexOf(children, this.pane2button[this._currentChild.id]);
-                               // pick next button to focus on
-                               var offset = forward ? 1 : children.length - 1;
-                               return children[ (current + offset) % children.length ]; // dijit._Widget
-                       },
-
-                       onkeypress: function(/*Event*/ e){
-                               // summary:
-                               //              Handle keystrokes on the page list, for advancing to next/previous button
-                               //              and closing the current page if the page is closable.
-                               // tags:
-                               //              private
-
-                               if(this.disabled || e.altKey ){ return; }
-                               var forward = null;
-                               if(e.ctrlKey || !e._djpage){
-                                       var k = dojo.keys;
-                                       switch(e.charOrCode){
-                                               case k.LEFT_ARROW:
-                                               case k.UP_ARROW:
-                                                       if(!e._djpage){ forward = false; }
-                                                       break;
-                                               case k.PAGE_UP:
-                                                       if(e.ctrlKey){ forward = false; }
-                                                       break;
-                                               case k.RIGHT_ARROW:
-                                               case k.DOWN_ARROW:
-                                                       if(!e._djpage){ forward = true; }
-                                                       break;
-                                               case k.PAGE_DOWN:
-                                                       if(e.ctrlKey){ forward = true; }
-                                                       break;
-                                               case k.DELETE:
-                                                       if(this._currentChild.closable){
-                                                               this.onCloseButtonClick(this._currentChild);
-                                                       }
-                                                       dojo.stopEvent(e);
-                                                       break;
-                                               default:
-                                                       if(e.ctrlKey){
-                                                               if(e.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); // avoid browser tab closing.
-                                                               }
-                                                       }
-                                       }
-                                       // handle page navigation
-                                       if(forward !== null){
-                                               this.adjacent(forward).onClick();
-                                               dojo.stopEvent(e);
-                                       }
-                               }
-                       },
-
-                       onContainerKeyPress: function(/*Object*/ info){
-                               // summary:
-                               //              Called when there was a keypress on the container
-                               // tags:
-                               //              private
-                               info.e._djpage = info.page;
-                               this.onkeypress(info.e);
-                       }
-       });
-
-
-dojo.declare("dijit.layout._StackButton",
-               dijit.form.ToggleButton,
-               {
-               // summary:
-               //              Internal widget used by StackContainer.
-               // description:
-               //              The button-like or tab-like object you click to select or delete a page
-               // tags:
-               //              private
-
-               // Override _FormWidget.tabIndex.
-               // StackContainer buttons are not in the tab order by default.
-               // Probably we should be calling this.startupKeyNavChildren() instead.
-               tabIndex: "-1",
-
-               postCreate: function(/*Event*/ evt){
-                       dijit.setWaiRole((this.focusNode || this.domNode), "tab");
-                       this.inherited(arguments);
-               },
-
-               onClick: function(/*Event*/ evt){
-                       // summary:
-                       //              This is for TabContainer where the tabs are <span> rather than button,
-                       //              so need to set focus explicitly (on some browsers)
-                       //              Note that you shouldn't override this method, but you can connect to it.
-                       dijit.focus(this.focusNode);
-
-                       // ... now let StackController catch the event and tell me what to do
-               },
-
-               onClickCloseButton: function(/*Event*/ evt){
-                       // summary:
-                       //              StackContainer connects to this function; if your widget contains a close button
-                       //              then clicking it should call this function.
-                       //              Note that you shouldn't override this method, but you can connect to it.
-                       evt.stopPropagation();
-               }
-       });
-
-
-}
-
-if(!dojo._hasResource["dijit.layout.StackContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.StackContainer"] = true;
-dojo.provide("dijit.layout.StackContainer");
-
-
-
-
-
-
-dojo.declare(
-       "dijit.layout.StackContainer",
-       dijit.layout._LayoutWidget,
-       {
-       // summary:
-       //              A container that has multiple children, but shows only
-       //              one child at a time
-       //
-       // description:
-       //              A container for widgets (ContentPanes, for example) That displays
-       //              only one Widget at a time.
-       //
-       //              Publishes topics [widgetId]-addChild, [widgetId]-removeChild, and [widgetId]-selectChild
-       //
-       //              Can be base class for container, Wizard, Show, etc.
-
-       // doLayout: Boolean
-       //              If true, change the size of my currently displayed child to match my size
-       doLayout: true,
-
-       // persist: Boolean
-       //              Remembers the selected child across sessions
-       persist: false,
-
-       baseClass: "dijitStackContainer",
-
-/*=====
-       // selectedChildWidget: [readonly] dijit._Widget
-       //              References the currently selected child widget, if any.
-       //              Adjust selected child with selectChild() method.
-       selectedChildWidget: null,
-=====*/
-
-       postCreate: function(){
-               this.inherited(arguments);
-               dojo.addClass(this.domNode, "dijitLayoutContainer");
-               dijit.setWaiRole(this.containerNode, "tabpanel");
-               this.connect(this.domNode, "onkeypress", this._onKeyPress);
-       },
-
-       startup: function(){
-               if(this._started){ return; }
-
-               var children = this.getChildren();
-
-               // Setup each page panel to be initially hidden
-               dojo.forEach(children, this._setupChild, this);
-
-               // Figure out which child to initially display, defaulting to first one
-               if(this.persist){
-                       this.selectedChildWidget = dijit.byId(dojo.cookie(this.id + "_selectedChild"));
-               }else{
-                       dojo.some(children, function(child){
-                               if(child.selected){
-                                       this.selectedChildWidget = child;
-                               }
-                               return child.selected;
-                       }, this);
-               }
-               var selected = this.selectedChildWidget;
-               if(!selected && children[0]){
-                       selected = this.selectedChildWidget = children[0];
-                       selected.selected = true;
-               }
-
-               // Publish information about myself so any StackControllers can initialize.
-               // This needs to happen before this.inherited(arguments) so that for
-               // TabContainer, this._contentBox doesn't include the space for the tab labels.
-               dojo.publish(this.id+"-startup", [{children: children, selected: selected}]);
-
-               // Startup each child widget, and do initial layout like setting this._contentBox,
-               // then calls this.resize() which does the initial sizing on the selected child.
-               this.inherited(arguments);
-       },
-
-       resize: function(){
-               // Resize is called when we are first made visible (it's called from startup()
-               // if we are initially visible).   If this is the first time we've been made
-               // visible then show our first child.
-               var selected = this.selectedChildWidget;
-               if(selected && !this._hasBeenShown){
-                       this._hasBeenShown = true;
-                       this._showChild(selected);
-               }
-               this.inherited(arguments);
-       },
-
-       _setupChild: function(/*dijit._Widget*/ child){
-               // Overrides _LayoutWidget._setupChild()
-
-               this.inherited(arguments);
-
-               dojo.removeClass(child.domNode, "dijitVisible");
-               dojo.addClass(child.domNode, "dijitHidden");
-
-               // remove the title attribute so it doesn't show up when i hover
-               // over a node
-               child.domNode.title = "";
-       },
-
-       addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
-               // Overrides _Container.addChild() to do layout and publish events
-
-               this.inherited(arguments);
-
-               if(this._started){
-                       dojo.publish(this.id+"-addChild", [child, insertIndex]);
-
-                       // in case the tab titles have overflowed from one line to two lines
-                       // (or, if this if first child, from zero lines to one line)
-                       // TODO: w/ScrollingTabController this is no longer necessary, although
-                       // ScrollTabController.resize() does need to get called to show/hide
-                       // the navigation buttons as appropriate, but that's handled in ScrollingTabController.onAddChild()
-                       this.layout();
-
-                       // if this is the first child, then select it
-                       if(!this.selectedChildWidget){
-                               this.selectChild(child);
-                       }
-               }
-       },
-
-       removeChild: function(/*dijit._Widget*/ page){
-               // Overrides _Container.removeChild() to do layout and publish events
-
-               this.inherited(arguments);
-
-               if(this._started){
-                       // this will notify any tablists to remove a button; do this first because it may affect sizing
-                       dojo.publish(this.id + "-removeChild", [page]);
-               }
-
-               // If we are being destroyed than don't run the code below (to select another page), because we are deleting
-               // every page one by one
-               if(this._beingDestroyed){ return; }
-
-               // Select new page to display, also updating TabController to show the respective tab.
-               // Do this before layout call because it can affect the height of the TabController.
-               if(this.selectedChildWidget === page){
-                       this.selectedChildWidget = undefined;
-                       if(this._started){
-                               var children = this.getChildren();
-                               if(children.length){
-                                       this.selectChild(children[0]);
-                               }
-                       }
-               }
-
-               if(this._started){
-                       // In case the tab titles now take up one line instead of two lines
-                       // (note though that ScrollingTabController never overflows to multiple lines),
-                       // or the height has changed slightly because of addition/removal of tab which close icon
-                       this.layout();
-               }
-       },
-
-       selectChild: function(/*dijit._Widget|String*/ page, /*Boolean*/ animate){
-               // summary:
-               //              Show the given widget (which must be one of my children)
-               // page:
-               //              Reference to child widget or id of child widget
-
-               page = dijit.byId(page);
-
-               if(this.selectedChildWidget != page){
-                       // Deselect old page and select new one
-                       this._transition(page, this.selectedChildWidget, animate);
-                       this.selectedChildWidget = page;
-                       dojo.publish(this.id+"-selectChild", [page]);
-
-                       if(this.persist){
-                               dojo.cookie(this.id + "_selectedChild", this.selectedChildWidget.id);
-                       }
-               }
-       },
-
-       _transition: function(/*dijit._Widget*/newWidget, /*dijit._Widget*/oldWidget){
-               // summary:
-               //              Hide the old widget and display the new widget.
-               //              Subclasses should override this.
-               // tags:
-               //              protected extension
-               if(oldWidget){
-                       this._hideChild(oldWidget);
-               }
-               this._showChild(newWidget);
-
-               // Size the new widget, in case this is the first time it's being shown,
-               // or I have been resized since the last time it was shown.
-               // Note that page must be visible for resizing to work.
-               if(newWidget.resize){
-                       if(this.doLayout){
-                               newWidget.resize(this._containerContentBox || this._contentBox);
-                       }else{
-                               // the child should pick it's own size but we still need to call resize()
-                               // (with no arguments) to let the widget lay itself out
-                               newWidget.resize();
-                       }
-               }
-       },
-
-       _adjacent: function(/*Boolean*/ forward){
-               // summary:
-               //              Gets the next/previous child widget in this container from the current selection.
-               var children = this.getChildren();
-               var index = dojo.indexOf(children, this.selectedChildWidget);
-               index += forward ? 1 : children.length - 1;
-               return children[ index % children.length ]; // dijit._Widget
-       },
-
-       forward: function(){
-               // summary:
-               //              Advance to next page.
-               this.selectChild(this._adjacent(true), true);
-       },
-
-       back: function(){
-               // summary:
-               //              Go back to previous page.
-               this.selectChild(this._adjacent(false), true);
-       },
-
-       _onKeyPress: function(e){
-               dojo.publish(this.id+"-containerKeyPress", [{ e: e, page: this}]);
-       },
-
-       layout: function(){
-               // Implement _LayoutWidget.layout() virtual method.
-               if(this.doLayout && this.selectedChildWidget && this.selectedChildWidget.resize){
-                       this.selectedChildWidget.resize(this._containerContentBox || this._contentBox);
-               }
-       },
-
-       _showChild: function(/*dijit._Widget*/ page){
-               // summary:
-               //              Show the specified child by changing it's CSS, and call _onShow()/onShow() so
-               //              it can do any updates it needs regarding loading href's etc.
-               var children = this.getChildren();
-               page.isFirstChild = (page == children[0]);
-               page.isLastChild = (page == children[children.length-1]);
-               page.selected = true;
-
-               dojo.removeClass(page.domNode, "dijitHidden");
-               dojo.addClass(page.domNode, "dijitVisible");
-
-               page._onShow();
-       },
-
-       _hideChild: function(/*dijit._Widget*/ page){
-               // summary:
-               //              Hide the specified child by changing it's CSS, and call _onHide() so
-               //              it's notified.
-               page.selected=false;
-               dojo.removeClass(page.domNode, "dijitVisible");
-               dojo.addClass(page.domNode, "dijitHidden");
-
-               page.onHide();
-       },
-
-       closeChild: function(/*dijit._Widget*/ page){
-               // summary:
-               //              Callback when user clicks the [X] to remove a page.
-               //              If onClose() returns true then remove and destroy the child.
-               // tags:
-               //              private
-               var remove = page.onClose(this, page);
-               if(remove){
-                       this.removeChild(page);
-                       // makes sure we can clean up executeScripts in ContentPane onUnLoad
-                       page.destroyRecursive();
-               }
-       },
-
-       destroyDescendants: function(/*Boolean*/preserveDom){
-               dojo.forEach(this.getChildren(), function(child){
-                       this.removeChild(child);
-                       child.destroyRecursive(preserveDom);
-               }, this);
-       }
-});
-
-// For back-compat, remove for 2.0
-
-
-
-// These arguments can be specified for the children of a StackContainer.
-// Since any widget can be specified as a StackContainer child, mix them
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.extend(dijit._Widget, {
-       // selected: Boolean
-       //              Parameter for children of `dijit.layout.StackContainer` or subclasses.
-       //              Specifies that this widget should be the initially displayed pane.
-       //              Note: to change the selected child use `dijit.layout.StackContainer.selectChild`
-       selected: false,
-
-       // closable: Boolean
-       //              Parameter for children of `dijit.layout.StackContainer` or subclasses.
-       //              True if user can close (destroy) this child, such as (for example) clicking the X on the tab.
-       closable: false,
-
-       // iconClass: String
-       //              Parameter for children of `dijit.layout.StackContainer` or subclasses.
-       //              CSS Class specifying icon to use in label associated with this pane.
-       iconClass: "",
-
-       // showTitle: Boolean
-       //              Parameter for children of `dijit.layout.StackContainer` or subclasses.
-       //              When true, display title of this widget as tab label etc., rather than just using
-       //              icon specified in iconClass
-       showTitle: true
-});
-
-}
-
-if(!dojo._hasResource["dijit.layout.AccordionPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.AccordionPane"] = true;
-dojo.provide("dijit.layout.AccordionPane");
-
-
-
-dojo.declare("dijit.layout.AccordionPane", dijit.layout.ContentPane, {
-       // summary:
-       //              Deprecated widget.   Use `dijit.layout.ContentPane` instead.
-       // tags:
-       //              deprecated
-
-       constructor: function(){
-               dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead", "", "2.0");
-       },
-
-       onSelected: function(){
-               // summary:
-               //              called when this pane is selected
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.layout.AccordionContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.AccordionContainer"] = true;
-dojo.provide("dijit.layout.AccordionContainer");
-
-
-
-
-
-
-
-
-
-       // for back compat, remove for 2.0
-
-dojo.declare(
-       "dijit.layout.AccordionContainer",
-       dijit.layout.StackContainer,
-       {
-               // summary:
-               //              Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time,
-               //              and switching between panes is visualized by sliding the other panes up/down.
-               // example:
-               //      |       <div dojoType="dijit.layout.AccordionContainer">
-               //      |               <div dojoType="dijit.layout.ContentPane" title="pane 1">
-               //      |               </div>
-               //      |               <div dojoType="dijit.layout.ContentPane" title="pane 2">
-               //      |                       <p>This is some text</p>
-               //      |               </div>
-               //      |       </div>
-
-               // duration: Integer
-               //              Amount of time (in ms) it takes to slide panes
-               duration: dijit.defaultDuration,
-
-               // buttonWidget: [const] String
-               //              The name of the widget used to display the title of each pane
-               buttonWidget: "dijit.layout._AccordionButton",
-
-               // _verticalSpace: Number
-               //              Pixels of space available for the open pane
-               //              (my content box size minus the cumulative size of all the title bars)
-               _verticalSpace: 0,
-
-               baseClass: "dijitAccordionContainer",
-
-               postCreate: function(){
-                       this.domNode.style.overflow = "hidden";
-                       this.inherited(arguments);
-                       dijit.setWaiRole(this.domNode, "tablist");
-               },
-
-               startup: function(){
-                       if(this._started){ return; }
-                       this.inherited(arguments);
-                       if(this.selectedChildWidget){
-                               var style = this.selectedChildWidget.containerNode.style;
-                               style.display = "";
-                               style.overflow = "auto";
-                               this.selectedChildWidget._wrapperWidget.set("selected", true);
-                       }
-               },
-
-               _getTargetHeight: function(/* Node */ node){
-                       // summary:
-                       //              For the given node, returns the height that should be
-                       //              set to achieve our vertical space (subtract any padding
-                       //              we may have).
-                       //
-                       //              This is used by the animations.
-                       //
-                       //              TODO: I don't think this works correctly in IE quirks when an elements
-                       //              style.height including padding and borders
-                       var cs = dojo.getComputedStyle(node);
-                       return Math.max(this._verticalSpace - dojo._getPadBorderExtents(node, cs).h - dojo._getMarginExtents(node, cs).h, 0);
-               },
-
-               layout: function(){
-                       // Implement _LayoutWidget.layout() virtual method.
-                       // Set the height of the open pane based on what room remains.
-
-                       var openPane = this.selectedChildWidget;
-                       
-                       if(!openPane){ return;}
-
-                       var openPaneContainer = openPane._wrapperWidget.domNode,
-                               openPaneContainerMargin = dojo._getMarginExtents(openPaneContainer),
-                               openPaneContainerPadBorder = dojo._getPadBorderExtents(openPaneContainer),
-                               mySize = this._contentBox;
-
-                       // get cumulative height of all the unselected title bars
-                       var totalCollapsedHeight = 0;
-                       dojo.forEach(this.getChildren(), function(child){
-                   if(child != openPane){
-                                       totalCollapsedHeight += dojo.marginBox(child._wrapperWidget.domNode).h;
-                               }
-                       });
-                       this._verticalSpace = mySize.h - totalCollapsedHeight - openPaneContainerMargin.h 
-                               - openPaneContainerPadBorder.h - openPane._buttonWidget.getTitleHeight();
-
-                       // Memo size to make displayed child
-                       this._containerContentBox = {
-                               h: this._verticalSpace,
-                               w: this._contentBox.w - openPaneContainerMargin.w - openPaneContainerPadBorder.w
-                       };
-
-                       if(openPane){
-                               openPane.resize(this._containerContentBox);
-                       }
-               },
-
-               _setupChild: function(child){
-                       // Overrides _LayoutWidget._setupChild().
-                       // Put wrapper widget around the child widget, showing title
-
-                       child._wrapperWidget = new dijit.layout._AccordionInnerContainer({
-                               contentWidget: child,
-                               buttonWidget: this.buttonWidget,
-                               id: child.id + "_wrapper",
-                               dir: child.dir,
-                               lang: child.lang,
-                               parent: this
-                       });
-
-                       this.inherited(arguments);
-               },
-
-               addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){  
-                       if(this._started){
-                               // Adding a child to a started Accordion is complicated because children have
-                               // wrapper widgets.  Default code path (calling this.inherited()) would add
-                               // the new child inside another child's wrapper.
-
-                               // First add in child as a direct child of this AccordionContainer
-                               dojo.place(child.domNode, this.containerNode, insertIndex);
-
-                               if(!child._started){
-                                       child.startup();
-                               }
-                               
-                               // Then stick the wrapper widget around the child widget
-                               this._setupChild(child);
-
-                               // Code below copied from StackContainer        
-                               dojo.publish(this.id+"-addChild", [child, insertIndex]);
-                               this.layout();
-                               if(!this.selectedChildWidget){
-                                       this.selectChild(child);
-                               }
-                       }else{
-                               // We haven't been started yet so just add in the child widget directly,
-                               // and the wrapper will be created on startup()
-                               this.inherited(arguments);
-                       }
-               },
-
-               removeChild: function(child){
-                       // Overrides _LayoutWidget.removeChild().
-
-                       // destroy wrapper widget first, before StackContainer.getChildren() call
-                       child._wrapperWidget.destroy();
-                       delete child._wrapperWidget;
-                       dojo.removeClass(child.domNode, "dijitHidden");
-
-                       this.inherited(arguments);
-               },
-
-               getChildren: function(){
-                       // Overrides _Container.getChildren() to return content panes rather than internal AccordionInnerContainer panes
-                       return dojo.map(this.inherited(arguments), function(child){
-                               return child.declaredClass == "dijit.layout._AccordionInnerContainer" ? child.contentWidget : child;
-                       }, this);
-               },
-
-               destroy: function(){
-                       dojo.forEach(this.getChildren(), function(child){
-                               child._wrapperWidget.destroy();
-                       });
-                       this.inherited(arguments);
-               },
-
-               _transition: function(/*dijit._Widget?*/newWidget, /*dijit._Widget?*/oldWidget, /*Boolean*/ animate){
-                       // Overrides StackContainer._transition() to provide sliding of title bars etc.
-
-//TODO: should be able to replace this with calls to slideIn/slideOut
-                       if(this._inTransition){ return; }
-                       var animations = [];
-                       var paneHeight = this._verticalSpace;
-                       if(newWidget){
-                               newWidget._wrapperWidget.set("selected", true);
-
-                               this._showChild(newWidget);     // prepare widget to be slid in
-
-                               // Size the new widget, in case this is the first time it's being shown,
-                               // or I have been resized since the last time it was shown.
-                               // Note that page must be visible for resizing to work.
-                               if(this.doLayout && newWidget.resize){
-                                       newWidget.resize(this._containerContentBox);
-                               }
-
-                               var newContents = newWidget.domNode;
-                               dojo.addClass(newContents, "dijitVisible");
-                               dojo.removeClass(newContents, "dijitHidden");
-                               
-                               if(animate){
-                                       var newContentsOverflow = newContents.style.overflow;
-                                       newContents.style.overflow = "hidden";
-                                       animations.push(dojo.animateProperty({
-                                               node: newContents,
-                                               duration: this.duration,
-                                               properties: {
-                                                       height: { start: 1, end: this._getTargetHeight(newContents) }
-                                               },
-                                               onEnd: function(){
-                                                       newContents.style.overflow = newContentsOverflow;
-
-                                                       // Kick IE to workaround layout bug, see #11415
-                                                       if(dojo.isIE){
-                                                               setTimeout(function(){
-                                                                       dojo.removeClass(newContents.parentNode, "dijitAccordionInnerContainerFocused");
-                                                                       setTimeout(function(){
-                                                                               dojo.addClass(newContents.parentNode, "dijitAccordionInnerContainerFocused");
-                                                                       }, 0);
-                                                               }, 0);
-                                                       }
-                                               }
-                                       }));
-                               }
-                       }
-                       if(oldWidget){
-                               oldWidget._wrapperWidget.set("selected", false);
-                               var oldContents = oldWidget.domNode;
-                               if(animate){
-                                       var oldContentsOverflow = oldContents.style.overflow;
-                                       oldContents.style.overflow = "hidden";
-                                       animations.push(dojo.animateProperty({
-                                               node: oldContents,
-                                               duration: this.duration,
-                                               properties: {
-                                                       height: { start: this._getTargetHeight(oldContents), end: 1 }
-                                               },
-                                               onEnd: function(){
-                                                       dojo.addClass(oldContents, "dijitHidden");
-                                                       dojo.removeClass(oldContents, "dijitVisible");
-                                                       oldContents.style.overflow = oldContentsOverflow;
-                                                       if(oldWidget.onHide){
-                                                               oldWidget.onHide();
-                                                       }
-                                               }
-                                       }));
-                               }else{
-                                       dojo.addClass(oldContents, "dijitHidden");
-                                       dojo.removeClass(oldContents, "dijitVisible");
-                                       if(oldWidget.onHide){
-                                               oldWidget.onHide();
-                                       }
-                               }
-                       }
-
-                       if(animate){
-                               this._inTransition = true;
-                               var combined = dojo.fx.combine(animations);
-                               combined.onEnd = dojo.hitch(this, function(){
-                                       delete this._inTransition;
-                               });
-                               combined.play();
-                       }                       
-               },
-
-               // note: we are treating the container as controller here
-               _onKeyPress: function(/*Event*/ e, /*dijit._Widget*/ fromTitle){
-                       // summary:
-                       //              Handle keypress events
-                       // description:
-                       //              This is called from a handler on AccordionContainer.domNode
-                       //              (setup in StackContainer), and is also called directly from
-                       //              the click handler for accordion labels
-                       if(this._inTransition || this.disabled || e.altKey || !(fromTitle || e.ctrlKey)){
-                               if(this._inTransition){
-                                       dojo.stopEvent(e);
-                               }
-                               return;
-                       }
-                       var k = dojo.keys,
-                               c = e.charOrCode;
-                       if((fromTitle && (c == k.LEFT_ARROW || c == k.UP_ARROW)) ||
-                                       (e.ctrlKey && c == k.PAGE_UP)){
-                               this._adjacent(false)._buttonWidget._onTitleClick();
-                               dojo.stopEvent(e);
-                       }else if((fromTitle && (c == k.RIGHT_ARROW || c == k.DOWN_ARROW)) ||
-                                       (e.ctrlKey && (c == k.PAGE_DOWN || c == k.TAB))){
-                               this._adjacent(true)._buttonWidget._onTitleClick();
-                               dojo.stopEvent(e);
-                       }
-               }
-       }
-);
-
-dojo.declare("dijit.layout._AccordionInnerContainer",
-       [dijit._Widget, dijit._CssStateMixin], {
-               // summary:
-               //              Internal widget placed as direct child of AccordionContainer.containerNode.
-               //              When other widgets are added as children to an AccordionContainer they are wrapped in
-               //              this widget.
-               
-               // buttonWidget: String
-               //              Name of class to use to instantiate title
-               //              (Wish we didn't have a separate widget for just the title but maintaining it
-               //              for backwards compatibility, is it worth it?)
-/*=====
-                buttonWidget: null,
-=====*/
-               // contentWidget: dijit._Widget
-               //              Pointer to the real child widget
-/*=====
-               contentWidget: null,
-=====*/
-
-               baseClass: "dijitAccordionInnerContainer",
-
-               // tell nested layout widget that we will take care of sizing
-               isContainer: true,
-               isLayoutContainer: true,
-
-               buildRendering: function(){                     
-                       // Create wrapper div, placed where the child is now
-                       this.domNode = dojo.place("<div class='" + this.baseClass + "'>", this.contentWidget.domNode, "after");
-                       
-                       // wrapper div's first child is the button widget (ie, the title bar)
-                       var child = this.contentWidget,
-                               cls = dojo.getObject(this.buttonWidget);
-                       this.button = child._buttonWidget = (new cls({
-                               contentWidget: child,
-                               label: child.title,
-                               title: child.tooltip,
-                               dir: child.dir,
-                               lang: child.lang,
-                               iconClass: child.iconClass,
-                               id: child.id + "_button",
-                               parent: this.parent
-                       })).placeAt(this.domNode);
-                       
-                       // and then the actual content widget (changing it from prior-sibling to last-child)
-                       dojo.place(this.contentWidget.domNode, this.domNode);
-               },
-
-               postCreate: function(){
-                       this.inherited(arguments);
-                       this.connect(this.contentWidget, 'set', function(name, value){
-                               var mappedName = {title: "label", tooltip: "title", iconClass: "iconClass"}[name];
-                               if(mappedName){
-                                       this.button.set(mappedName, value);
-                               }
-                       }, this);
-               },
-
-               _setSelectedAttr: function(/*Boolean*/ isSelected){
-                       this.selected = isSelected;
-                       this.button.set("selected", isSelected);
-                       if(isSelected){
-                               var cw = this.contentWidget;
-                               if(cw.onSelected){ cw.onSelected(); }
-                       }
-               },
-
-               startup: function(){
-                       // Called by _Container.addChild()
-                       this.contentWidget.startup();
-               },
-
-               destroy: function(){
-                       this.button.destroyRecursive();
-                       
-                       delete this.contentWidget._buttonWidget;
-                       delete this.contentWidget._wrapperWidget;
-
-                       this.inherited(arguments);
-               },
-               
-               destroyDescendants: function(){
-                       // since getChildren isn't working for me, have to code this manually
-                       this.contentWidget.destroyRecursive();
-               }
-});
-
-dojo.declare("dijit.layout._AccordionButton",
-       [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
-       {
-       // summary:
-       //              The title bar to click to open up an accordion pane.
-       //              Internal widget used by AccordionContainer.
-       // tags:
-       //              private
-
-       templateString: dojo.cache("dijit.layout", "templates/AccordionButton.html", "<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),
-       attributeMap: dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap), {
-               label: {node: "titleTextNode", type: "innerHTML" },
-               title: {node: "titleTextNode", type: "attribute", attribute: "title"},
-               iconClass: { node: "iconNode", type: "class" }
-       }),
-
-       baseClass: "dijitAccordionTitle",
-
-       getParent: function(){
-               // summary:
-               //              Returns the AccordionContainer parent.
-               // tags:
-               //              private
-               return this.parent;
-       },
-
-       postCreate: function(){
-               this.inherited(arguments);
-               dojo.setSelectable(this.domNode, false);
-               var titleTextNodeId = dojo.attr(this.domNode,'id').replace(' ','_');
-               dojo.attr(this.titleTextNode, "id", titleTextNodeId+"_title");
-               dijit.setWaiState(this.focusNode, "labelledby", dojo.attr(this.titleTextNode, "id"));
-       },
-
-       getTitleHeight: function(){
-               // summary:
-               //              Returns the height of the title dom node.
-               return dojo.marginBox(this.domNode).h;  // Integer
-       },
-
-       // TODO: maybe the parent should set these methods directly rather than forcing the code
-       // into the button widget?
-       _onTitleClick: function(){
-               // summary:
-               //              Callback when someone clicks my title.
-               var parent = this.getParent();
-               if(!parent._inTransition){
-                       parent.selectChild(this.contentWidget, true);
-                       dijit.focus(this.focusNode);
-               }
-       },
-
-       _onTitleKeyPress: function(/*Event*/ evt){
-               return this.getParent()._onKeyPress(evt, this.contentWidget);
-       },
-
-       _setSelectedAttr: function(/*Boolean*/ isSelected){
-               this.selected = isSelected;
-               dijit.setWaiState(this.focusNode, "expanded", isSelected);
-               dijit.setWaiState(this.focusNode, "selected", isSelected);
-               this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1");
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.layout.BorderContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.BorderContainer"] = true;
-dojo.provide("dijit.layout.BorderContainer");
-
-
-
-
-dojo.declare(
-       "dijit.layout.BorderContainer",
-       dijit.layout._LayoutWidget,
-{
-       // summary:
-       //              Provides layout in up to 5 regions, a mandatory center with optional borders along its 4 sides.
-       //
-       // description:
-       //              A BorderContainer is a box with a specified size, such as style="width: 500px; height: 500px;",
-       //              that contains a child widget marked region="center" and optionally children widgets marked
-       //              region equal to "top", "bottom", "leading", "trailing", "left" or "right".
-       //              Children along the edges will be laid out according to width or height dimensions and may
-       //              include optional splitters (splitter="true") to make them resizable by the user.  The remaining
-       //              space is designated for the center region.
-       //
-       //              NOTE: Splitters must not be more than 50 pixels in width.
-       //
-       //              The outer size must be specified on the BorderContainer node.  Width must be specified for the sides
-       //              and height for the top and bottom, respectively.  No dimensions should be specified on the center;
-       //              it will fill the remaining space.  Regions named "leading" and "trailing" may be used just like
-       //              "left" and "right" except that they will be reversed in right-to-left environments.
-       //
-       // example:
-       // |    <div dojoType="dijit.layout.BorderContainer" design="sidebar" gutters="false"
-       // |            style="width: 400px; height: 300px;">
-       // |            <div dojoType="ContentPane" region="top">header text</div>
-       // |            <div dojoType="ContentPane" region="right" splitter="true" style="width: 200px;">table of contents</div>
-       // |            <div dojoType="ContentPane" region="center">client area</div>
-       // |    </div>
-
-       // design: String
-       //              Which design is used for the layout:
-       //                      - "headline" (default) where the top and bottom extend
-       //                              the full width of the container
-       //                      - "sidebar" where the left and right sides extend from top to bottom.
-       design: "headline",
-
-       // gutters: Boolean
-       //              Give each pane a border and margin.
-       //              Margin determined by domNode.paddingLeft.
-       //              When false, only resizable panes have a gutter (i.e. draggable splitter) for resizing.
-       gutters: true,
-
-       // liveSplitters: Boolean
-       //              Specifies whether splitters resize as you drag (true) or only upon mouseup (false)
-       liveSplitters: true,
-
-       // persist: Boolean
-       //              Save splitter positions in a cookie.
-       persist: false,
-
-       baseClass: "dijitBorderContainer",
-
-       // _splitterClass: String
-       //              Optional hook to override the default Splitter widget used by BorderContainer
-       _splitterClass: "dijit.layout._Splitter",
-
-       postMixInProperties: function(){
-               // change class name to indicate that BorderContainer is being used purely for
-               // layout (like LayoutContainer) rather than for pretty formatting.
-               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(/*dijit._Widget*/ child){
-               // Override _LayoutWidget._setupChild().
-
-               var region = child.region;
-               if(region){
-                       this.inherited(arguments);
-
-                       dojo.addClass(child.domNode, this.baseClass+"Pane");
-
-                       var ltr = this.isLeftToRight();
-                       if(region == "leading"){ region = ltr ? "left" : "right"; }
-                       if(region == "trailing"){ region = ltr ? "right" : "left"; }
-
-                       //FIXME: redundant?
-                       this["_"+region] = child.domNode;
-                       this["_"+region+"Widget"] = child;
-
-                       // Create draggable splitter for resizing pane,
-                       // or alternately if splitter=false but BorderContainer.gutters=true then
-                       // insert dummy div just for spacing
-                       if((child.splitter || this.gutters) && !this._splitters[region]){
-                               var _Splitter = dojo.getObject(child.splitter ? this._splitterClass : "dijit.layout._Gutter");
-                               var splitter = new _Splitter({
-                                       id: child.id + "_splitter",
-                                       container: this,
-                                       child: child,
-                                       region: region,
-                                       live: this.liveSplitters
-                               });
-                               splitter.isSplitter = true;
-                               this._splitters[region] = splitter.domNode;
-                               dojo.place(this._splitters[region], child.domNode, "after");
-
-                               // Splitters arent added as Contained children, so we need to call startup explicitly
-                               splitter.startup();
-                       }
-                       child.region = region;
-               }
-       },
-
-       _computeSplitterThickness: function(region){
-               this._splitterThickness[region] = this._splitterThickness[region] ||
-                       dojo.marginBox(this._splitters[region])[(/top|bottom/.test(region) ? 'h' : 'w')];
-       },
-
-       layout: function(){
-               // Implement _LayoutWidget.layout() virtual method.
-               for(var region in this._splitters){ this._computeSplitterThickness(region); }
-               this._layoutChildren();
-       },
-
-       addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
-               // Override _LayoutWidget.addChild().
-               this.inherited(arguments);
-               if(this._started){
-                       this.layout(); //OPT
-               }
-       },
-
-       removeChild: function(/*dijit._Widget*/ child){
-               // Override _LayoutWidget.removeChild().
-               var region = child.region;
-               var splitter = this._splitters[region];
-               if(splitter){
-                       dijit.byNode(splitter).destroy();
-                       delete this._splitters[region];
-                       delete this._splitterThickness[region];
-               }
-               this.inherited(arguments);
-               delete this["_"+region];
-               delete this["_" +region+"Widget"];
-               if(this._started){
-                       this._layoutChildren();
-               }
-               dojo.removeClass(child.domNode, this.baseClass+"Pane");
-       },
-
-       getChildren: function(){
-               // Override _LayoutWidget.getChildren() to only return real children, not the splitters.
-               return dojo.filter(this.inherited(arguments), function(widget){
-                       return !widget.isSplitter;
-               });
-       },
-
-       getSplitter: function(/*String*/region){
-               // summary:
-               //              Returns the widget responsible for rendering the splitter associated with region
-               var splitter = this._splitters[region];
-               return splitter ? dijit.byNode(splitter) : null;
-       },
-
-       resize: function(newSize, currentSize){
-               // Overrides _LayoutWidget.resize().
-
-               // resetting potential padding to 0px to provide support for 100% width/height + padding
-               // TODO: this hack doesn't respect the box model and is a temporary fix
-               if(!this.cs || !this.pe){
-                       var node = this.domNode;
-                       this.cs = dojo.getComputedStyle(node);
-                       this.pe = dojo._getPadExtents(node, this.cs);
-                       this.pe.r = dojo._toPixelValue(node, this.cs.paddingRight);
-                       this.pe.b = dojo._toPixelValue(node, this.cs.paddingBottom);
-
-                       dojo.style(node, "padding", "0px");
-               }
-
-               this.inherited(arguments);
-       },
-
-       _layoutChildren: function(/*String?*/changedRegion, /*Number?*/ changedRegionSize){
-               // summary:
-               //              This is the main routine for setting size/position of each child.
-               // description:
-               //              With no arguments, measures the height of top/bottom panes, the width
-               //              of left/right panes, and then sizes all panes accordingly.
-               //
-               //              With changedRegion specified (as "left", "top", "bottom", or "right"),
-               //              it changes that region's width/height to changedRegionSize and
-               //              then resizes other regions that were affected.
-               // changedRegion:
-               //              The region should be changed because splitter was dragged.
-               //              "left", "right", "top", or "bottom".
-               // changedRegionSize:
-               //              The new width/height (in pixels) to make changedRegion
-
-               if(!this._borderBox || !this._borderBox.h){
-                       // We are currently hidden, or we haven't been sized by our parent yet.
-                       // Abort.   Someone will resize us later.
-                       return;
-               }
-
-               var sidebarLayout = (this.design == "sidebar");
-               var topHeight = 0, bottomHeight = 0, leftWidth = 0, rightWidth = 0;
-               var topStyle = {}, leftStyle = {}, rightStyle = {}, bottomStyle = {},
-                       centerStyle = (this._center && this._center.style) || {};
-
-               var changedSide = /left|right/.test(changedRegion);
-
-               var layoutSides = !changedRegion || (!changedSide && !sidebarLayout);
-               var layoutTopBottom = !changedRegion || (changedSide && sidebarLayout);
-
-               // Ask browser for width/height of side panes.
-               // Would be nice to cache this but height can change according to width
-               // (because words wrap around).  I don't think width will ever change though
-               // (except when the user drags a splitter).
-               if(this._top){
-                       topStyle = (changedRegion == "top" || layoutTopBottom) && this._top.style;
-                       topHeight = changedRegion == "top" ? changedRegionSize : dojo.marginBox(this._top).h;
-               }
-               if(this._left){
-                       leftStyle = (changedRegion == "left" || layoutSides) && this._left.style;
-                       leftWidth = changedRegion == "left" ? changedRegionSize : dojo.marginBox(this._left).w;
-               }
-               if(this._right){
-                       rightStyle = (changedRegion == "right" || layoutSides) && this._right.style;
-                       rightWidth = changedRegion == "right" ? changedRegionSize : dojo.marginBox(this._right).w;
-               }
-               if(this._bottom){
-                       bottomStyle = (changedRegion == "bottom" || layoutTopBottom) && this._bottom.style;
-                       bottomHeight = changedRegion == "bottom" ? changedRegionSize : dojo.marginBox(this._bottom).h;
-               }
-
-               var splitters = this._splitters;
-               var topSplitter = splitters.top, bottomSplitter = splitters.bottom,
-                       leftSplitter = splitters.left, rightSplitter = splitters.right;
-               var splitterThickness = this._splitterThickness;
-               var topSplitterThickness = splitterThickness.top || 0,
-                       leftSplitterThickness = splitterThickness.left || 0,
-                       rightSplitterThickness = splitterThickness.right || 0,
-                       bottomSplitterThickness = splitterThickness.bottom || 0;
-
-               // Check for race condition where CSS hasn't finished loading, so
-               // the splitter width == the viewport width (#5824)
-               if(leftSplitterThickness > 50 || rightSplitterThickness > 50){
-                       setTimeout(dojo.hitch(this, function(){
-                               // Results are invalid.  Clear them out.
-                               this._splitterThickness = {};
-
-                               for(var region in this._splitters){
-                                       this._computeSplitterThickness(region);
-                               }
-                               this._layoutChildren();
-                       }), 50);
-                       return false;
-               }
-
-               var pe = this.pe;
-
-               var splitterBounds = {
-                       left: (sidebarLayout ? leftWidth + leftSplitterThickness: 0) + pe.l + "px",
-                       right: (sidebarLayout ? rightWidth + rightSplitterThickness: 0) + pe.r + "px"
-               };
-
-               if(topSplitter){
-                       dojo.mixin(topSplitter.style, splitterBounds);
-                       topSplitter.style.top = topHeight + pe.t + "px";
-               }
-
-               if(bottomSplitter){
-                       dojo.mixin(bottomSplitter.style, splitterBounds);
-                       bottomSplitter.style.bottom = bottomHeight + pe.b + "px";
-               }
-
-               splitterBounds = {
-                       top: (sidebarLayout ? 0 : topHeight + topSplitterThickness) + pe.t + "px",
-                       bottom: (sidebarLayout ? 0 : bottomHeight + bottomSplitterThickness) + pe.b + "px"
-               };
-
-               if(leftSplitter){
-                       dojo.mixin(leftSplitter.style, splitterBounds);
-                       leftSplitter.style.left = leftWidth + pe.l + "px";
-               }
-
-               if(rightSplitter){
-                       dojo.mixin(rightSplitter.style, splitterBounds);
-                       rightSplitter.style.right = rightWidth + pe.r + "px";
-               }
-
-               dojo.mixin(centerStyle, {
-                       top: pe.t + topHeight + topSplitterThickness + "px",
-                       left: pe.l + leftWidth + leftSplitterThickness + "px",
-                       right: pe.r + rightWidth + rightSplitterThickness + "px",
-                       bottom: pe.b + bottomHeight + bottomSplitterThickness + "px"
-               });
-
-               var bounds = {
-                       top: sidebarLayout ? pe.t + "px" : centerStyle.top,
-                       bottom: sidebarLayout ? pe.b + "px" : centerStyle.bottom
-               };
-               dojo.mixin(leftStyle, bounds);
-               dojo.mixin(rightStyle, bounds);
-               leftStyle.left = pe.l + "px"; rightStyle.right = pe.r + "px"; topStyle.top = pe.t + "px"; bottomStyle.bottom = pe.b + "px";
-               if(sidebarLayout){
-                       topStyle.left = bottomStyle.left = leftWidth + leftSplitterThickness + pe.l + "px";
-                       topStyle.right = bottomStyle.right = rightWidth + rightSplitterThickness + pe.r + "px";
-               }else{
-                       topStyle.left = bottomStyle.left = pe.l + "px";
-                       topStyle.right = bottomStyle.right = pe.r + "px";
-               }
-
-               // More calculations about sizes of panes
-               var containerHeight = this._borderBox.h - pe.t - pe.b,
-                       middleHeight = containerHeight - ( topHeight + topSplitterThickness + bottomHeight + bottomSplitterThickness),
-                       sidebarHeight = sidebarLayout ? containerHeight : middleHeight;
-
-               var containerWidth = this._borderBox.w - pe.l - pe.r,
-                       middleWidth = containerWidth - (leftWidth + leftSplitterThickness + rightWidth + rightSplitterThickness),
-                       sidebarWidth = sidebarLayout ? middleWidth : containerWidth;
-
-               // New margin-box size of each pane
-               var dim = {
-                       top:    { w: sidebarWidth, h: topHeight },
-                       bottom: { w: sidebarWidth, h: bottomHeight },
-                       left:   { w: leftWidth, h: sidebarHeight },
-                       right:  { w: rightWidth, h: sidebarHeight },
-                       center: { h: middleHeight, w: middleWidth }
-               };
-
-               if(changedRegion){
-                       // Respond to splitter drag event by changing changedRegion's width or height
-                       var child = this["_" + changedRegion + "Widget"],
-                               mb = {};
-                               mb[ /top|bottom/.test(changedRegion) ? "h" : "w"] = changedRegionSize;
-                       child.resize ? child.resize(mb, dim[child.region]) : dojo.marginBox(child.domNode, mb);
-               }
-
-               // Nodes in IE<8 don't respond to t/l/b/r, and TEXTAREA doesn't respond in any browser
-               var janky = dojo.isIE < 8 || (dojo.isIE && dojo.isQuirks) || dojo.some(this.getChildren(), function(child){
-                       return child.domNode.tagName == "TEXTAREA" || child.domNode.tagName == "INPUT";
-               });
-               if(janky){
-                       // Set the size of the children the old fashioned way, by setting
-                       // CSS width and height
-
-                       var resizeWidget = function(widget, changes, result){
-                               if(widget){
-                                       (widget.resize ? widget.resize(changes, result) : dojo.marginBox(widget.domNode, changes));
-                               }
-                       };
-
-                       if(leftSplitter){ leftSplitter.style.height = sidebarHeight; }
-                       if(rightSplitter){ rightSplitter.style.height = sidebarHeight; }
-                       resizeWidget(this._leftWidget, {h: sidebarHeight}, dim.left);
-                       resizeWidget(this._rightWidget, {h: sidebarHeight}, dim.right);
-
-                       if(topSplitter){ topSplitter.style.width = sidebarWidth; }
-                       if(bottomSplitter){ bottomSplitter.style.width = sidebarWidth; }
-                       resizeWidget(this._topWidget, {w: sidebarWidth}, dim.top);
-                       resizeWidget(this._bottomWidget, {w: sidebarWidth}, dim.bottom);
-
-                       resizeWidget(this._centerWidget, dim.center);
-               }else{
-                       // Calculate which panes need a notification that their size has been changed
-                       // (we've already set style.top/bottom/left/right on those other panes).
-                       var notifySides = !changedRegion || (/top|bottom/.test(changedRegion) && this.design != "sidebar"),
-                               notifyTopBottom = !changedRegion || (/left|right/.test(changedRegion) && this.design == "sidebar"),
-                               notifyList = {
-                                       center: true,
-                                       left: notifySides,
-                                       right: notifySides,
-                                       top: notifyTopBottom,
-                                       bottom: notifyTopBottom
-                               };
-                       
-                       // Send notification to those panes that have changed size
-                       dojo.forEach(this.getChildren(), function(child){
-                               if(child.resize && notifyList[child.region]){
-                                       child.resize(null, dim[child.region]);
-                               }
-                       }, this);
-               }
-       },
-
-       destroy: function(){
-               for(var region in this._splitters){
-                       var splitter = this._splitters[region];
-                       dijit.byNode(splitter).destroy();
-                       dojo.destroy(splitter);
-               }
-               delete this._splitters;
-               delete this._splitterThickness;
-               this.inherited(arguments);
-       }
-});
-
-// This argument can be specified for the children of a BorderContainer.
-// Since any widget can be specified as a LayoutContainer child, mix it
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.extend(dijit._Widget, {
-       // region: [const] String
-       //              Parameter for children of `dijit.layout.BorderContainer`.
-       //              Values: "top", "bottom", "leading", "trailing", "left", "right", "center".
-       //              See the `dijit.layout.BorderContainer` description for details.
-       region: '',
-
-       // splitter: [const] Boolean
-       //              Parameter for child of `dijit.layout.BorderContainer` where region != "center".
-       //              If true, enables user to resize the widget by putting a draggable splitter between
-       //              this widget and the region=center widget.
-       splitter: false,
-
-       // minSize: [const] Number
-       //              Parameter for children of `dijit.layout.BorderContainer`.
-       //              Specifies a minimum size (in pixels) for this widget when resized by a splitter.
-       minSize: 0,
-
-       // maxSize: [const] Number
-       //              Parameter for children of `dijit.layout.BorderContainer`.
-       //              Specifies a maximum size (in pixels) for this widget when resized by a splitter.
-       maxSize: Infinity
-});
-
-
-
-dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
-{
-       // summary:
-       //              A draggable spacer between two items in a `dijit.layout.BorderContainer`.
-       // description:
-       //              This is instantiated by `dijit.layout.BorderContainer`.  Users should not
-       //              create it directly.
-       // tags:
-       //              private
-
-/*=====
-       // container: [const] dijit.layout.BorderContainer
-       //              Pointer to the parent BorderContainer
-       container: null,
-
-       // child: [const] dijit.layout._LayoutWidget
-       //              Pointer to the pane associated with this splitter
-       child: null,
-
-       // region: String
-       //              Region of pane associated with this splitter.
-       //              "top", "bottom", "left", "right".
-       region: null,
-=====*/
-
-       // live: [const] Boolean
-       //              If true, the child's size changes and the child widget is redrawn as you drag the splitter;
-       //              otherwise, the size doesn't change until you drop the splitter (by mouse-up)
-       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"));
-//             dojo.addClass(this.child.domNode, "dijitSplitterPane");
-//             dojo.setSelectable(this.domNode, false); //TODO is this necessary?
-
-               this._factor = /top|left/.test(this.region) ? 1 : -1;
-
-               this._cookieName = this.container.id + "_" + this.region;
-               if(this.container.persist){
-                       // restore old size
-                       var persistSize = dojo.cookie(this._cookieName);
-                       if(persistSize){
-                               this.child.domNode.style[this.horizontal ? "height" : "width"] = persistSize;
-                       }
-               }
-       },
-
-       _computeMaxSize: function(){
-               // summary:
-               //              Compute the maximum size that my corresponding pane can be set to
-
-               var dim = this.horizontal ? 'h' : 'w',
-                       thickness = this.container._splitterThickness[this.region];
-                       
-               // Get DOMNode of opposite pane, if an opposite pane exists.
-               // Ex: if I am the _Splitter for the left pane, then get the right pane.
-               var flip = {left:'right', right:'left', top:'bottom', bottom:'top', leading:'trailing', trailing:'leading'},
-                       oppNode = this.container["_" + flip[this.region]];
-               
-               // I can expand up to the edge of the opposite pane, or if there's no opposite pane, then to
-               // edge of BorderContainer
-               var available = dojo.contentBox(this.container.domNode)[dim] -
-                               (oppNode ? dojo.marginBox(oppNode)[dim] : 0) -
-                               20 - thickness * 2;
-
-               return Math.min(this.child.maxSize, available);
-       },
-
-       _startDrag: function(e){
-               if(!this.cover){
-                       this.cover = dojo.doc.createElement('div');
-                       dojo.addClass(this.cover, "dijitSplitterCover");
-                       dojo.place(this.cover, this.child.domNode, "after");
-               }
-               dojo.addClass(this.cover, "dijitSplitterCoverActive");
-
-               // Safeguard in case the stop event was missed.  Shouldn't be necessary if we always get the mouse up.
-               if(this.fake){ dojo.destroy(this.fake); }
-               if(!(this._resize = this.live)){ //TODO: disable live for IE6?
-                       // create fake splitter to display at old position while we drag
-                       (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");
-               }
-
-               //Performance: load data info local vars for onmousevent function closure
-               var factor = this._factor,
-                       max = this._computeMaxSize(),
-                       min = this.child.minSize || 20,
-                       isHorizontal = this.horizontal,
-                       axis = isHorizontal ? "pageY" : "pageX",
-                       pageStart = e[axis],
-                       splitterStyle = this.domNode.style,
-                       dim = isHorizontal ? 'h' : 'w',
-                       childStart = dojo.marginBox(this.child.domNode)[dim],
-                       region = this.region,
-                       splitterStart = parseInt(this.domNode.style[region], 10),
-                       resize = this._resize,
-                       childNode = this.child.domNode,
-                       layoutFunc = dojo.hitch(this.container, this.container._layoutChildren),
-                       de = dojo.doc;
-
-               this._handlers = (this._handlers || []).concat([
-                       dojo.connect(de, "onmousemove", this._drag = function(e, forceResize){
-                               var delta = e[axis] - pageStart,
-                                       childSize = factor * delta + childStart,
-                                       boundChildSize = Math.max(Math.min(childSize, max), min);
-
-                               if(resize || forceResize){
-                                       layoutFunc(region, boundChildSize);
-                               }
-                               splitterStyle[region] = factor * delta + splitterStart + (boundChildSize - childSize) + "px";
-                       }),
-                       dojo.connect(de, "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); //TODO: redundant with onmousemove?
-                       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(/*Event*/ e){
-               // should we apply typematic to this?
-               this._resize = true;
-               var horizontal = this.horizontal;
-               var tick = 1;
-               var dk = dojo.keys;
-               switch(e.charOrCode){
-                       case horizontal ? dk.UP_ARROW : dk.LEFT_ARROW:
-                               tick *= -1;
-//                             break;
-                       case horizontal ? dk.DOWN_ARROW : dk.RIGHT_ARROW:
-                               break;
-                       default:
-//                             this.inherited(arguments);
-                               return;
-               }
-               var childSize = dojo.marginBox(this.child.domNode)[ horizontal ? 'h' : 'w' ] + this._factor * tick;
-               this.container._layoutChildren(this.region, Math.max(Math.min(childSize, this._computeMaxSize()), this.child.minSize));
-               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 ],
-{
-       // summary:
-       //              Just a spacer div to separate side pane from center pane.
-       //              Basically a trick to lookup the gutter/splitter width from the theme.
-       // description:
-       //              Instantiated by `dijit.layout.BorderContainer`.  Users should not
-       //              create directly.
-       // tags:
-       //              private
-
-       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"));
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.layout.LayoutContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.LayoutContainer"] = true;
-dojo.provide("dijit.layout.LayoutContainer");
-
-
-
-dojo.declare("dijit.layout.LayoutContainer",
-       dijit.layout._LayoutWidget,
-       {
-       // summary:
-       //              Deprecated.  Use `dijit.layout.BorderContainer` instead.
-       //
-       // description:
-       //              Provides Delphi-style panel layout semantics.
-       //
-       //              A LayoutContainer is a box with a specified size (like style="width: 500px; height: 500px;"),
-       //              that contains children widgets marked with "layoutAlign" of "left", "right", "bottom", "top", and "client".
-       //              It takes it's children marked as left/top/bottom/right, and lays them out along the edges of the box,
-       //              and then it takes the child marked "client" and puts it into the remaining space in the middle.
-       //
-       //              Left/right positioning is similar to CSS's "float: left" and "float: right",
-       //              and top/bottom positioning would be similar to "float: top" and "float: bottom", if there were such
-       //              CSS.
-       //
-       //              Note that there can only be one client element, but there can be multiple left, right, top,
-       //              or bottom elements.
-       //
-       // example:
-       // |    <style>
-       // |            html, body{ height: 100%; width: 100%; }
-       // |    </style>
-       // |    <div dojoType="dijit.layout.LayoutContainer" style="width: 100%; height: 100%">
-       // |            <div dojoType="dijit.layout.ContentPane" layoutAlign="top">header text</div>
-       // |            <div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="width: 200px;">table of contents</div>
-       // |            <div dojoType="dijit.layout.ContentPane" layoutAlign="client">client area</div>
-       // |    </div>
-       //
-       //              Lays out each child in the natural order the children occur in.
-       //              Basically each child is laid out into the "remaining space", where "remaining space" is initially
-       //              the content area of this widget, but is reduced to a smaller rectangle each time a child is added.
-       // tags:
-       //              deprecated
-
-       baseClass: "dijitLayoutContainer",
-
-       constructor: function(){
-               dojo.deprecated("dijit.layout.LayoutContainer is deprecated", "use BorderContainer instead", 2.0);
-       },
-
-       layout: function(){
-               dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
-       },
-
-       addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
-               this.inherited(arguments);
-               if(this._started){
-                       dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
-               }
-       },
-
-       removeChild: function(/*dijit._Widget*/ widget){
-               this.inherited(arguments);
-               if(this._started){
-                       dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
-               }
-       }
-});
-
-// This argument can be specified for the children of a LayoutContainer.
-// Since any widget can be specified as a LayoutContainer child, mix it
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.extend(dijit._Widget, {
-       // layoutAlign: String
-       //              "none", "left", "right", "bottom", "top", and "client".
-       //              See the LayoutContainer description for details on this parameter.
-       layoutAlign: 'none'
-});
-
-}
-
-if(!dojo._hasResource["dijit.layout.LinkPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.LinkPane"] = true;
-dojo.provide("dijit.layout.LinkPane");
-
-
-
-
-dojo.declare("dijit.layout.LinkPane",
-       [dijit.layout.ContentPane, dijit._Templated],
-       {
-       // summary:
-       //              A ContentPane with an href where (when declared in markup)
-       //              the title is specified as innerHTML rather than as a title attribute.
-       // description:
-       //              LinkPane is just a ContentPane that is declared in markup similarly
-       //              to an anchor.  The anchor's body (the words between `<a>` and `</a>`)
-       //              become the title of the widget (used for TabContainer, AccordionContainer, etc.)
-       // example:
-       //      | <a href="foo.html">my title</a>
-
-       // I'm using a template because the user may specify the input as
-       // <a href="foo.html">title</a>, in which case we need to get rid of the
-       // <a> because we don't want a link.
-       templateString: '<div class="dijitLinkPane" dojoAttachPoint="containerNode"></div>',
-
-       postMixInProperties: function(){
-               // If user has specified node contents, they become the title
-               // (the link must be plain text)
-               if(this.srcNodeRef){
-                       this.title += this.srcNodeRef.innerHTML;
-               }
-               this.inherited(arguments);
-       },
-
-       _fillContent: function(/*DomNode*/ source){
-               // Overrides _Templated._fillContent().
-
-               // _Templated._fillContent() relocates srcNodeRef innerHTML to templated container node,
-               // but in our case the srcNodeRef innerHTML is the title, so shouldn't be
-               // copied
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.layout.SplitContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.SplitContainer"] = true;
-dojo.provide("dijit.layout.SplitContainer");
-
-//
-// FIXME: make it prettier
-// FIXME: active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case)
-//
-
-
-
-
-dojo.declare("dijit.layout.SplitContainer",
-       dijit.layout._LayoutWidget,
-       {
-       // summary:
-       //              Deprecated.  Use `dijit.layout.BorderContainer` instead.
-       // description:
-       //              A Container widget with sizing handles in-between each child.
-       //              Contains multiple children widgets, all of which are displayed side by side
-       //              (either horizontally or vertically); there's a bar between each of the children,
-       //              and you can adjust the relative size of each child by dragging the bars.
-       //
-       //              You must specify a size (width and height) for the SplitContainer.
-       // tags:
-       //              deprecated
-
-       constructor: function(){
-               dojo.deprecated("dijit.layout.SplitContainer is deprecated", "use BorderContainer with splitter instead", 2.0);
-       },
-
-       // activeSizing: Boolean
-       //              If true, the children's size changes as you drag the bar;
-       //              otherwise, the sizes don't change until you drop the bar (by mouse-up)
-       activeSizing: false,
-
-       // sizerWidth: Integer
-       //              Size in pixels of the bar between each child
-       sizerWidth: 7, // FIXME: this should be a CSS attribute (at 7 because css wants it to be 7 until we fix to css)
-
-       // orientation: String
-       //              either 'horizontal' or vertical; indicates whether the children are
-       //              arranged side-by-side or up/down.
-       orientation: 'horizontal',
-
-       // persist: Boolean
-       //              Save splitter positions in a cookie
-       persist: true,
-
-       baseClass: "dijitSplitContainer",
-
-       postMixInProperties: function(){
-               this.inherited("postMixInProperties",arguments);
-               this.isHorizontal = (this.orientation == 'horizontal');
-       },
-
-       postCreate: function(){
-               this.inherited(arguments);
-               this.sizers = [];
-
-               // overflow has to be explicitly hidden for splitContainers using gekko (trac #1435)
-               // to keep other combined css classes from inadvertantly making the overflow visible
-               if(dojo.isMozilla){
-                       this.domNode.style.overflow = '-moz-scrollbars-none'; // hidden doesn't work
-               }
-
-               // create the fake dragger
-               if(typeof this.sizerWidth == "object"){
-                       try{ //FIXME: do this without a try/catch
-                               this.sizerWidth = parseInt(this.sizerWidth.toString());
-                       }catch(e){ this.sizerWidth = 7; }
-               }
-               var sizer = dojo.doc.createElement('div');
-               this.virtualSizer = sizer;
-               sizer.style.position = 'relative';
-
-               // #1681: work around the dreaded 'quirky percentages in IE' layout bug
-               // If the splitcontainer's dimensions are specified in percentages, it
-               // will be resized when the virtualsizer is displayed in _showSizingLine
-               // (typically expanding its bounds unnecessarily). This happens because
-               // we use position: relative for .dijitSplitContainer.
-               // The workaround: instead of changing the display style attribute,
-               // switch to changing the zIndex (bring to front/move to back)
-
-               sizer.style.zIndex = 10;
-               sizer.className = this.isHorizontal ? 'dijitSplitContainerVirtualSizerH' : 'dijitSplitContainerVirtualSizerV';
-               this.domNode.appendChild(sizer);
-               dojo.setSelectable(sizer, false);
-       },
-
-       destroy: function(){
-               delete this.virtualSizer;
-               dojo.forEach(this._ownconnects, dojo.disconnect);
-               this.inherited(arguments);
-       },
-       startup: function(){
-               if(this._started){ return; }
-
-               dojo.forEach(this.getChildren(), function(child, i, children){
-                       // attach the children and create the draggers
-                       this._setupChild(child);
-
-                       if(i < children.length-1){
-                               this._addSizer();
-                       }
-               }, this);
-
-               if(this.persist){
-                       this._restoreState();
-               }
-
-               this.inherited(arguments);
-       },
-
-       _setupChild: function(/*dijit._Widget*/ child){
-               this.inherited(arguments);
-               child.domNode.style.position = "absolute";
-               dojo.addClass(child.domNode, "dijitSplitPane");
-       },
-
-       _onSizerMouseDown: function(e){
-               if(e.target.id){
-                       for(var i=0;i<this.sizers.length;i++){
-                               if(this.sizers[i].id == e.target.id){
-                                       break;
-                               }
-                       }
-                       if(i<this.sizers.length){
-                               this.beginSizing(e,i);
-                       }
-               }
-       },
-       _addSizer: function(index){
-               index = index === undefined ? this.sizers.length : index;
-
-               // TODO: use a template for this!!!
-               var sizer = dojo.doc.createElement('div');
-               sizer.id=dijit.getUniqueId('dijit_layout_SplitterContainer_Splitter');
-               this.sizers.splice(index,0,sizer);
-               this.domNode.appendChild(sizer);
-
-               sizer.className = this.isHorizontal ? 'dijitSplitContainerSizerH' : 'dijitSplitContainerSizerV';
-
-               // add the thumb div
-               var thumb = dojo.doc.createElement('div');
-               thumb.className = 'thumb';
-               sizer.appendChild(thumb);
-
-               // FIXME: are you serious? why aren't we using mover start/stop combo?
-               this.connect(sizer, "onmousedown", '_onSizerMouseDown');
-
-               dojo.setSelectable(sizer, false);
-       },
-
-       removeChild: function(widget){
-               // summary:
-               //              Remove sizer, but only if widget is really our child and
-               // we have at least one sizer to throw away
-               if(this.sizers.length){
-                       var i=dojo.indexOf(this.getChildren(), widget)
-                       if(i != -1){
-                               if(i == this.sizers.length){
-                                       i--;
-                               }
-                               dojo.destroy(this.sizers[i]);
-                               this.sizers.splice(i,1);
-                       }
-               }
-
-               // Remove widget and repaint
-               this.inherited(arguments);
-               if(this._started){
-                       this.layout();
-               }
-       },
-
-       addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
-               // summary:
-               //              Add a child widget to the container
-               // child:
-               //              a widget to add
-               // insertIndex:
-               //              postion in the "stack" to add the child widget
-
-               this.inherited(arguments);
-
-               if(this._started){
-                       // Do the stuff that startup() does for each widget
-                       var children = this.getChildren();
-                       if(children.length > 1){
-                               this._addSizer(insertIndex);
-                       }
-
-                       // and then reposition (ie, shrink) every pane to make room for the new guy
-                       this.layout();
-               }
-       },
-
-       layout: function(){
-               // summary:
-               //              Do layout of panels
-
-               // base class defines this._contentBox on initial creation and also
-               // on resize
-               this.paneWidth = this._contentBox.w;
-               this.paneHeight = this._contentBox.h;
-
-               var children = this.getChildren();
-               if(!children.length){ return; }
-
-               //
-               // calculate space
-               //
-
-               var space = this.isHorizontal ? this.paneWidth : this.paneHeight;
-               if(children.length > 1){
-                       space -= this.sizerWidth * (children.length - 1);
-               }
-
-               //
-               // calculate total of SizeShare values
-               //
-               var outOf = 0;
-               dojo.forEach(children, function(child){
-                       outOf += child.sizeShare;
-               });
-
-               //
-               // work out actual pixels per sizeshare unit
-               //
-               var pixPerUnit = space / outOf;
-
-               //
-               // set the SizeActual member of each pane
-               //
-               var totalSize = 0;
-               dojo.forEach(children.slice(0, children.length - 1), function(child){
-                       var size = Math.round(pixPerUnit * child.sizeShare);
-                       child.sizeActual = size;
-                       totalSize += size;
-               });
-
-               children[children.length-1].sizeActual = space - totalSize;
-
-               //
-               // make sure the sizes are ok
-               //
-               this._checkSizes();
-
-               //
-               // now loop, positioning each pane and letting children resize themselves
-               //
-
-               var pos = 0;
-               var size = children[0].sizeActual;
-               this._movePanel(children[0], pos, size);
-               children[0].position = pos;
-               pos += size;
-
-               // if we don't have any sizers, our layout method hasn't been called yet
-               // so bail until we are called..TODO: REVISIT: need to change the startup
-               // algorithm to guaranteed the ordering of calls to layout method
-               if(!this.sizers){
-                       return;
-               }
-
-               dojo.some(children.slice(1), function(child, i){
-                       // error-checking
-                       if(!this.sizers[i]){
-                               return true;
-                       }
-                       // first we position the sizing handle before this pane
-                       this._moveSlider(this.sizers[i], pos, this.sizerWidth);
-                       this.sizers[i].position = pos;
-                       pos += this.sizerWidth;
-
-                       size = child.sizeActual;
-                       this._movePanel(child, pos, size);
-                       child.position = pos;
-                       pos += size;
-               }, this);
-       },
-
-       _movePanel: function(panel, pos, size){
-               if(this.isHorizontal){
-                       panel.domNode.style.left = pos + 'px';  // TODO: resize() takes l and t parameters too, don't need to set manually
-                       panel.domNode.style.top = 0;
-                       var box = {w: size, h: this.paneHeight};
-                       if(panel.resize){
-                               panel.resize(box);
-                       }else{
-                               dojo.marginBox(panel.domNode, box);
-                       }
-               }else{
-                       panel.domNode.style.left = 0;   // TODO: resize() takes l and t parameters too, don't need to set manually
-                       panel.domNode.style.top = pos + 'px';
-                       var box = {w: this.paneWidth, h: size};
-                       if(panel.resize){
-                               panel.resize(box);
-                       }else{
-                               dojo.marginBox(panel.domNode, box);
-                       }
-               }
-       },
-
-       _moveSlider: function(slider, pos, size){
-               if(this.isHorizontal){
-                       slider.style.left = pos + 'px';
-                       slider.style.top = 0;
-                       dojo.marginBox(slider, { w: size, h: this.paneHeight });
-               }else{
-                       slider.style.left = 0;
-                       slider.style.top = pos + 'px';
-                       dojo.marginBox(slider, { w: this.paneWidth, h: size });
-               }
-       },
-
-       _growPane: function(growth, pane){
-               if(growth > 0){
-                       if(pane.sizeActual > pane.sizeMin){
-                               if((pane.sizeActual - pane.sizeMin) > growth){
-
-                                       // stick all the growth in this pane
-                                       pane.sizeActual = pane.sizeActual - growth;
-                                       growth = 0;
-                               }else{
-                                       // put as much growth in here as we can
-                                       growth -= pane.sizeActual - pane.sizeMin;
-                                       pane.sizeActual = pane.sizeMin;
-                               }
-                       }
-               }
-               return growth;
-       },
-
-       _checkSizes: function(){
-
-               var totalMinSize = 0;
-               var totalSize = 0;
-               var children = this.getChildren();
-
-               dojo.forEach(children, function(child){
-                       totalSize += child.sizeActual;
-                       totalMinSize += child.sizeMin;
-               });
-
-               // only make adjustments if we have enough space for all the minimums
-
-               if(totalMinSize <= totalSize){
-
-                       var growth = 0;
-
-                       dojo.forEach(children, function(child){
-                               if(child.sizeActual < child.sizeMin){
-                                       growth += child.sizeMin - child.sizeActual;
-                                       child.sizeActual = child.sizeMin;
-                               }
-                       });
-
-                       if(growth > 0){
-                               var list = this.isDraggingLeft ? children.reverse() : children;
-                               dojo.forEach(list, function(child){
-                                       growth = this._growPane(growth, child);
-                               }, this);
-                       }
-               }else{
-                       dojo.forEach(children, function(child){
-                               child.sizeActual = Math.round(totalSize * (child.sizeMin / totalMinSize));
-                       });
-               }
-       },
-
-       beginSizing: function(e, i){
-               var children = this.getChildren();
-               this.paneBefore = children[i];
-               this.paneAfter = children[i+1];
-
-               this.isSizing = true;
-               this.sizingSplitter = this.sizers[i];
-
-               if(!this.cover){
-                       this.cover = dojo.create('div', {
-                                       style: {
-                                               position:'absolute',
-                                               zIndex:5,
-                                               top: 0,
-                                               left: 0,
-                                               width: "100%",
-                                               height: "100%"
-                                       }
-                               }, this.domNode);
-               }else{
-                       this.cover.style.zIndex = 5;
-               }
-               this.sizingSplitter.style.zIndex = 6;
-
-               // TODO: REVISIT - we want MARGIN_BOX and core hasn't exposed that yet (but can't we use it anyway if we pay attention? we do elsewhere.)
-               this.originPos = dojo.position(children[0].domNode, true);
-               if(this.isHorizontal){
-                       var client = e.layerX || e.offsetX || 0;
-                       var screen = e.pageX;
-                       this.originPos = this.originPos.x;
-               }else{
-                       var client = e.layerY || e.offsetY || 0;
-                       var screen = e.pageY;
-                       this.originPos = this.originPos.y;
-               }
-               this.startPoint = this.lastPoint = screen;
-               this.screenToClientOffset = screen - client;
-               this.dragOffset = this.lastPoint - this.paneBefore.sizeActual - this.originPos - this.paneBefore.position;
-
-               if(!this.activeSizing){
-                       this._showSizingLine();
-               }
-
-               //
-               // attach mouse events
-               //
-               this._ownconnects = [];
-               this._ownconnects.push(dojo.connect(dojo.doc.documentElement, "onmousemove", this, "changeSizing"));
-               this._ownconnects.push(dojo.connect(dojo.doc.documentElement, "onmouseup", this, "endSizing"));
-
-               dojo.stopEvent(e);
-       },
-
-       changeSizing: function(e){
-               if(!this.isSizing){ return; }
-               this.lastPoint = this.isHorizontal ? e.pageX : e.pageY;
-               this.movePoint();
-               if(this.activeSizing){
-                       this._updateSize();
-               }else{
-                       this._moveSizingLine();
-               }
-               dojo.stopEvent(e);
-       },
-
-       endSizing: function(e){
-               if(!this.isSizing){ return; }
-               if(this.cover){
-                       this.cover.style.zIndex = -1;
-               }
-               if(!this.activeSizing){
-                       this._hideSizingLine();
-               }
-
-               this._updateSize();
-
-               this.isSizing = false;
-
-               if(this.persist){
-                       this._saveState(this);
-               }
-
-               dojo.forEach(this._ownconnects, dojo.disconnect);
-       },
-
-       movePoint: function(){
-
-               // make sure lastPoint is a legal point to drag to
-               var p = this.lastPoint - this.screenToClientOffset;
-
-               var a = p - this.dragOffset;
-               a = this.legaliseSplitPoint(a);
-               p = a + this.dragOffset;
-
-               this.lastPoint = p + this.screenToClientOffset;
-       },
-
-       legaliseSplitPoint: function(a){
-
-               a += this.sizingSplitter.position;
-
-               this.isDraggingLeft = !!(a > 0);
-
-               if(!this.activeSizing){
-                       var min = this.paneBefore.position + this.paneBefore.sizeMin;
-                       if(a < min){
-                               a = min;
-                       }
-
-                       var max = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin));
-                       if(a > max){
-                               a = max;
-                       }
-               }
-
-               a -= this.sizingSplitter.position;
-
-               this._checkSizes();
-
-               return a;
-       },
-
-       _updateSize: function(){
-       //FIXME: sometimes this.lastPoint is NaN
-               var pos = this.lastPoint - this.dragOffset - this.originPos;
-
-               var start_region = this.paneBefore.position;
-               var end_region = this.paneAfter.position + this.paneAfter.sizeActual;
-
-               this.paneBefore.sizeActual = pos - start_region;
-               this.paneAfter.position = pos + this.sizerWidth;
-               this.paneAfter.sizeActual = end_region - this.paneAfter.position;
-
-               dojo.forEach(this.getChildren(), function(child){
-                       child.sizeShare = child.sizeActual;
-               });
-
-               if(this._started){
-                       this.layout();
-               }
-       },
-
-       _showSizingLine: function(){
-
-               this._moveSizingLine();
-
-               dojo.marginBox(this.virtualSizer,
-                       this.isHorizontal ? { w: this.sizerWidth, h: this.paneHeight } : { w: this.paneWidth, h: this.sizerWidth });
-
-               this.virtualSizer.style.display = 'block';
-       },
-
-       _hideSizingLine: function(){
-               this.virtualSizer.style.display = 'none';
-       },
-
-       _moveSizingLine: function(){
-               var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position;
-               dojo.style(this.virtualSizer,(this.isHorizontal ? "left" : "top"),pos+"px");
-               // this.virtualSizer.style[ this.isHorizontal ? "left" : "top" ] = pos + 'px'; // FIXME: remove this line if the previous is better
-       },
-
-       _getCookieName: function(i){
-               return this.id + "_" + i;
-       },
-
-       _restoreState: function(){
-               dojo.forEach(this.getChildren(), function(child, i){
-                       var cookieName = this._getCookieName(i);
-                       var cookieValue = dojo.cookie(cookieName);
-                       if(cookieValue){
-                               var pos = parseInt(cookieValue);
-                               if(typeof pos == "number"){
-                                       child.sizeShare = pos;
-                               }
-                       }
-               }, this);
-       },
-
-       _saveState: function(){
-               if(!this.persist){
-                       return;
-               }
-               dojo.forEach(this.getChildren(), function(child, i){
-                       dojo.cookie(this._getCookieName(i), child.sizeShare, {expires:365});
-               }, this);
-       }
-});
-
-// These arguments can be specified for the children of a SplitContainer.
-// Since any widget can be specified as a SplitContainer child, mix them
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.extend(dijit._Widget, {
-       // sizeMin: [deprecated] Integer
-       //              Deprecated.  Parameter for children of `dijit.layout.SplitContainer`.
-       //              Minimum size (width or height) of a child of a SplitContainer.
-       //              The value is relative to other children's sizeShare properties.
-       sizeMin: 10,
-
-       // sizeShare: [deprecated] Integer
-       //              Deprecated.  Parameter for children of `dijit.layout.SplitContainer`.
-       //              Size (width or height) of a child of a SplitContainer.
-       //              The value is relative to other children's sizeShare properties.
-       //              For example, if there are two children and each has sizeShare=10, then
-       //              each takes up 50% of the available space.
-       sizeShare: 10
-});
-
-}
-
-if(!dojo._hasResource["dijit.layout._TabContainerBase"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout._TabContainerBase"] = true;
-dojo.provide("dijit.layout._TabContainerBase");
-
-
-
-
-dojo.declare("dijit.layout._TabContainerBase",
-       [dijit.layout.StackContainer, dijit._Templated],
-       {
-       // summary:
-       //              Abstract base class for TabContainer.   Must define _makeController() to instantiate
-       //              and return the widget that displays the tab labels
-       // description:
-       //              A TabContainer is a container that has multiple panes, but shows only
-       //              one pane at a time.  There are a set of tabs corresponding to each pane,
-       //              where each tab has the name (aka title) of the pane, and optionally a close button.
-
-       // tabPosition: String
-       //              Defines where tabs go relative to tab content.
-       //              "top", "bottom", "left-h", "right-h"
-       tabPosition: "top",
-
-       baseClass: "dijitTabContainer",
-
-       // tabStrip: Boolean
-       //              Defines whether the tablist gets an extra class for layouting, putting a border/shading
-       //              around the set of tabs.
-       tabStrip: false,
-
-       // nested: Boolean
-       //              If true, use styling for a TabContainer nested inside another TabContainer.
-       //              For tundra etc., makes tabs look like links, and hides the outer
-       //              border since the outer TabContainer already has a border.
-       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(){
-               // set class name according to tab position, ex: dijitTabContainerTop
-               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);
-
-               // Create the tab list that will have a tab (a.k.a. tab button) for each tab panel
-               this.tablist = this._makeController(this.tablistNode);
-
-               if(!this.doLayout){ dojo.addClass(this.domNode, "dijitTabContainerNoLayout"); }
-
-               if(this.nested){
-                       /* workaround IE's lack of support for "a > b" selectors by
-                        * tagging each node in the template.
-                        */
-                       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(/*dijit._Widget*/ tab){
-               // Overrides StackContainer._setupChild().
-               dojo.addClass(tab.domNode, "dijitTabPane");
-               this.inherited(arguments);
-       },
-
-       startup: function(){
-               if(this._started){ return; }
-
-               // wire up the tablist and its tabs
-               this.tablist.startup();
-
-               this.inherited(arguments);
-       },
-
-       layout: function(){
-               // Overrides StackContainer.layout().
-               // Configure the content pane to take up all the space except for where the tabs are
-
-               if(!this._contentBox || typeof(this._contentBox.l) == "undefined"){return;}
-
-               var sc = this.selectedChildWidget;
-
-               if(this.doLayout){
-                       // position and size the titles and the container node
-                       var titleAlign = this.tabPosition.replace(/-h/, "");
-                       this.tablist.layoutAlign = titleAlign;
-                       var children = [this.tablist, {
-                               domNode: this.tablistSpacer,
-                               layoutAlign: titleAlign
-                       }, {
-                               domNode: this.containerNode,
-                               layoutAlign: "client"
-                       }];
-                       dijit.layout.layoutChildren(this.domNode, this._contentBox, children);
-
-                       // Compute size to make each of my children.
-                       // children[2] is the margin-box size of this.containerNode, set by layoutChildren() call above
-                       this._containerContentBox = dijit.layout.marginBox2contentBox(this.containerNode, children[2]);
-
-                       if(sc && sc.resize){
-                               sc.resize(this._containerContentBox);
-                       }
-               }else{
-                       // just layout the tab controller, so it can position left/right buttons etc.
-                       if(this.tablist.resize){
-                               this.tablist.resize({w: dojo.contentBox(this.domNode).w});
-                       }
-
-                       // and call resize() on the selected pane just to tell it that it's been made visible
-                       if(sc && sc.resize){
-                               sc.resize();
-                       }
-               }
-       },
-
-       destroy: function(){
-               if(this.tablist){
-                       this.tablist.destroy();
-               }
-               this.inherited(arguments);
-       }
-});
-
-
-}
-
-if(!dojo._hasResource["dijit.layout.TabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.TabController"] = true;
-dojo.provide("dijit.layout.TabController");
-
-
-
-// Menu is used for an accessible close button, would be nice to have a lighter-weight solution
-
-
-
-
-
-dojo.declare("dijit.layout.TabController",
-       dijit.layout.StackController,
-{
-       // summary:
-       //              Set of tabs (the things with titles and a close button, that you click to show a tab panel).
-       //              Used internally by `dijit.layout.TabContainer`.
-       // description:
-       //              Lets the user select the currently shown pane in a TabContainer or StackContainer.
-       //              TabController also monitors the TabContainer, and whenever a pane is
-       //              added or deleted updates itself accordingly.
-       // tags:
-       //              private
-
-       templateString: "<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",
-
-       // tabPosition: String
-       //              Defines where tabs go relative to the content.
-       //              "top", "bottom", "left-h", "right-h"
-       tabPosition: "top",
-
-       // buttonWidget: String
-       //              The name of the tab widget to create to correspond to each page
-       buttonWidget: "dijit.layout._TabButton",
-
-       _rectifyRtlTabList: function(){
-               // summary:
-               //              For left/right TabContainer when page is RTL mode, rectify the width of all tabs to be equal, otherwise the tab widths are different in IE
-
-               if(0 >= this.tabPosition.indexOf('-h')){ return; }
-               if(!this.pane2button){ return; }
-
-               var maxWidth = 0;
-               for(var pane in this.pane2button){
-                       var ow = this.pane2button[pane].innerDiv.scrollWidth;
-                       maxWidth = Math.max(maxWidth, ow);
-               }
-               //unify the length of all the tabs
-               for(pane in this.pane2button){
-                       this.pane2button[pane].innerDiv.style.width = maxWidth + 'px';
-               }
-       }
-});
-
-dojo.declare("dijit.layout._TabButton",
-       dijit.layout._StackButton,
-       {
-       // summary:
-       //              A tab (the thing you click to select a pane).
-       // description:
-       //              Contains the title of the pane, and optionally a close-button to destroy the pane.
-       //              This is an internal widget and should not be instantiated directly.
-       // tags:
-       //              private
-
-       // baseClass: String
-       //              The CSS class applied to the domNode.
-       baseClass: "dijitTab",
-
-       // Apply dijitTabCloseButtonHover when close button is hovered
-       cssStateNodes: {
-               closeNode: "dijitTabCloseButton"
-       },
-
-       templateString: dojo.cache("dijit.layout", "templates/_TabButton.html", "<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div waiRole=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' waiRole=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>x</span\n\t\t        ></span>\n\t\t\t</div>\n        </div>\n    </div>\n</div>\n"),
-
-       // Override _FormWidget.scrollOnFocus.
-       // Don't scroll the whole tab container into view when the button is focused.
-       scrollOnFocus: false,
-
-       postMixInProperties: function(){
-               // Override blank iconClass from Button to do tab height adjustment on IE6,
-               // to make sure that tabs with and w/out close icons are same height
-               if(!this.iconClass){
-                       this.iconClass = "dijitTabButtonIcon";
-               }
-       },
-
-       postCreate: function(){
-               this.inherited(arguments);
-               dojo.setSelectable(this.containerNode, false);
-
-               // If a custom icon class has not been set for the
-               // tab icon, set its width to one pixel. This ensures
-               // that the height styling of the tab is maintained,
-               // as it is based on the height of the icon.
-               // TODO: I still think we can just set dijitTabButtonIcon to 1px in CSS <Bill>
-               if(this.iconNode.className == "dijitTabButtonIcon"){
-                       dojo.style(this.iconNode, "width", "1px");
-               }
-       },
-
-       startup: function(){
-               this.inherited(arguments);
-               var n = this.domNode;
-
-               // Required to give IE6 a kick, as it initially hides the
-               // tabs until they are focused on.
-               setTimeout(function(){
-                       n.className = n.className;
-               }, 1);
-       },
-
-       _setCloseButtonAttr: function(disp){
-               this.closeButton = disp;
-               dojo.toggleClass(this.innerDiv, "dijitClosable", disp);
-               this.closeNode.style.display = disp ? "" : "none";
-               if(disp){
-                       var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
-                       if(this.closeNode){
-                               dojo.attr(this.closeNode,"title", _nlsResources.itemClose);
-                       }
-                       // add context menu onto title button
-                       var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
-                       this._closeMenu = new dijit.Menu({
-                               id: this.id+"_Menu",
-                               dir: this.dir,
-                               lang: this.lang,
-                               targetNodeIds: [this.domNode]
-                       });
-
-                       this._closeMenu.addChild(new dijit.MenuItem({
-                               label: _nlsResources.itemClose,
-                               dir: this.dir,
-                               lang: this.lang,
-                               onClick: dojo.hitch(this, "onClickCloseButton")
-                       }));
-               }else{
-                       if(this._closeMenu){
-                               this._closeMenu.destroyRecursive();
-                               delete this._closeMenu;
-                       }
-               }
-       },
-       _setLabelAttr: function(/*String*/ content){
-               // summary:
-               //              Hook for attr('label', ...) to work.
-               // description:
-               //              takes an HTML string.
-               //              Inherited ToggleButton implementation will Set the label (text) of the button; 
-               //              Need to set the alt attribute of icon on tab buttons if no label displayed
-                       this.inherited(arguments);
-                       if(this.showLabel == false && !this.params.title){
-                               this.iconNode.alt = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || '');
-                       }
-               },
-
-       destroy: function(){
-               if(this._closeMenu){
-                       this._closeMenu.destroyRecursive();
-                       delete this._closeMenu;
-               }
-               this.inherited(arguments);
-       }
-});
-
-}
-
-if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.ScrollingTabController"] = true;
-dojo.provide("dijit.layout.ScrollingTabController");
-
-
-
-
-dojo.declare("dijit.layout.ScrollingTabController",
-       dijit.layout.TabController,
-       {
-       // summary:
-       //              Set of tabs with left/right arrow keys and a menu to switch between tabs not
-       //              all fitting on a single row.
-       //              Works only for horizontal tabs (either above or below the content, not to the left
-       //              or right).
-       // tags:
-       //              private
-
-       templateString: dojo.cache("dijit.layout", "templates/ScrollingTabController.html", "<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=false>&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>&#9654;</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'></div>\n\t</div>\n</div>\n"),
-
-       // useMenu:[const] Boolean
-       //              True if a menu should be used to select tabs when they are too
-       //              wide to fit the TabContainer, false otherwise.
-       useMenu: true,
-
-       // useSlider: [const] Boolean
-       //              True if a slider should be used to select tabs when they are too
-       //              wide to fit the TabContainer, false otherwise.
-       useSlider: true,
-
-       // tabStripClass: String
-       //              The css class to apply to the tab strip, if it is visible.
-       tabStripClass: "",
-
-       widgetsInTemplate: true,
-
-       // _minScroll: Number
-       //              The distance in pixels from the edge of the tab strip which,
-       //              if a scroll animation is less than, forces the scroll to
-       //              go all the way to the left/right.
-       _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);
-
-               // Do not show the TabController until the related
-               // StackController has added it's children.  This gives
-               // a less visually jumpy instantiation.
-               dojo.style(this.domNode, "visibility", "visible");
-               this._postStartup = true;
-       },
-
-       onAddChild: function(page, insertIndex){
-               this.inherited(arguments);
-               var menuItem;
-               if(this.useMenu){
-                       var containerId = this.containerId;
-                       menuItem = new dijit.MenuItem({
-                               id: page.id + "_stcMi",
-                               label: page.title,
-                               dir: page.dir,
-                               lang: page.lang,
-                               onClick: dojo.hitch(this, function(){
-                                       var container = dijit.byId(containerId);
-                                       container.selectChild(page);
-                               })
-                       });
-                       this._menuChildren[page.id] = menuItem;
-                       this._menu.addChild(menuItem, insertIndex);
-               }
-
-               // update the menuItem label when the button label is updated
-               this.pane2handles[page.id].push(
-                       this.connect(this.pane2button[page.id], "set", function(name, value){
-                               if(this._postStartup){
-                                       if(name == "label"){
-                                               if(menuItem){
-                                                       menuItem.set(name, value);
-                                               }
-       
-                                               // The changed label will have changed the width of the
-                                               // buttons, so do a resize
-                                               if(this._dim){
-                                                       this.resize(this._dim);
-                                               }
-                                       }
-                               }
-                       })
-               );
-
-               // Increment the width of the wrapper when a tab is added
-               // This makes sure that the buttons never wrap.
-               // The value 200 is chosen as it should be bigger than most
-               // Tab button widths.
-               dojo.style(this.containerNode, "width",
-                       (dojo.style(this.containerNode, "width") + 200) + "px");
-       },
-
-       onRemoveChild: function(page, insertIndex){
-               // null out _selectedTab because we are about to delete that dom node
-               var button = this.pane2button[page.id];
-               if(this._selectedTab === button.domNode){
-                       this._selectedTab = null;
-               }
-
-               // delete menu entry corresponding to pane that was removed from TabContainer
-               if(this.useMenu && page && page.id && this._menuChildren[page.id]){
-                       this._menu.removeChild(this._menuChildren[page.id]);
-                       this._menuChildren[page.id].destroy();
-                       delete this._menuChildren[page.id];
-               }
-
-               this.inherited(arguments);
-       },
-
-       _initButtons: function(){
-               // summary:
-               //              Creates the buttons used to scroll to view tabs that
-               //              may not be visible if the TabContainer is too narrow.
-               this._menuChildren = {};
-
-               // Make a list of the buttons to display when the tab labels become
-               // wider than the TabContainer, and hide the other buttons.
-               // Also gets the total width of the displayed buttons.
-               this._btnWidth = 0;
-               this._buttons = dojo.query("> .tabStripButton", this.domNode).filter(function(btn){
-                       if((this.useMenu && btn == this._menuBtn.domNode) ||
-                               (this.useSlider && (btn == this._rightBtn.domNode || btn == this._leftBtn.domNode))){
-                               this._btnWidth += dojo.marginBox(btn).w;
-                               return true;
-                       }else{
-                               dojo.style(btn, "display", "none");
-                               return false;
-                       }
-               }, this);
-
-               if(this.useMenu){
-                       // Create the menu that is used to select tabs.
-                       this._menu = new dijit.Menu({
-                               id: this.id + "_menu",
-                               dir: this.dir,
-                               lang: this.lang,
-                               targetNodeIds: [this._menuBtn.domNode],
-                               leftClickToOpen: true,
-                               refocus: false  // selecting a menu item sets focus to a TabButton
-                       });
-                       this._supportingWidgets.push(this._menu);
-               }
-       },
-
-       _getTabsWidth: function(){
-               var children = this.getChildren();
-               if(children.length){
-                       var leftTab = children[this.isLeftToRight() ? 0 : children.length - 1].domNode,
-                               rightTab = children[this.isLeftToRight() ? children.length - 1 : 0].domNode;
-                       return rightTab.offsetLeft + dojo.style(rightTab, "width") - leftTab.offsetLeft;
-               }else{
-                       return 0;
-               }
-       },
-
-       _enableBtn: function(width){
-               // summary:
-               //              Determines if the tabs are wider than the width of the TabContainer, and
-               //              thus that we need to display left/right/menu navigation buttons.
-               var tabsWidth = this._getTabsWidth();
-               width = width || dojo.style(this.scrollNode, "width");
-               return tabsWidth > 0 && width < tabsWidth;
-       },
-
-       resize: function(dim){
-               // summary:
-               //              Hides or displays the buttons used to scroll the tab list and launch the menu
-               //              that selects tabs.
-
-               if(this.domNode.offsetWidth == 0){
-                       return;
-               }
-
-               // Save the dimensions to be used when a child is renamed.
-               this._dim = dim;
-
-               // Set my height to be my natural height (tall enough for one row of tab labels),
-               // and my content-box width based on margin-box width specified in dim parameter.
-               // But first reset scrollNode.height in case it was set by layoutChildren() call
-               // in a previous run of this method.
-               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);
-
-               // Show/hide the left/right/menu navigation buttons depending on whether or not they
-               // are needed.
-               var enable = this._enableBtn(this._contentBox.w);
-               this._buttons.style("display", enable ? "" : "none");
-
-               // Position and size the navigation buttons and the tablist
-               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"}]);
-
-               // set proper scroll so that selected tab is visible
-               if(this._selectedTab){
-                       if(this._anim && this._anim.status() == "playing"){
-                               this._anim.stop();
-                       }
-                       var w = this.scrollNode,
-                               sl = this._convertToScrollLeft(this._getScrollForSelectedTab());
-                       w.scrollLeft = sl;
-               }
-
-               // Enable/disabled left right buttons depending on whether or not user can scroll to left or right
-               this._setButtonClass(this._getScroll());
-               
-               this._postResize = true;
-       },
-
-       _getScroll: function(){
-               // summary:
-               //              Returns the current scroll of the tabs where 0 means
-               //              "scrolled all the way to the left" and some positive number, based on #
-               //              of pixels of possible scroll (ex: 1000) means "scrolled all the way to the right"
-               var sl = (this.isLeftToRight() || dojo.isIE < 8 || (dojo.isIE && 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){
-               // summary:
-               //              Given a scroll value where 0 means "scrolled all the way to the left"
-               //              and some positive number, based on # of pixels of possible scroll (ex: 1000)
-               //              means "scrolled all the way to the right", return value to set this.scrollNode.scrollLeft
-               //              to achieve that scroll.
-               //
-               //              This method is to adjust for RTL funniness in various browsers and versions.
-               if(this.isLeftToRight() || dojo.isIE < 8 || (dojo.isIE && dojo.isQuirks) || dojo.isWebKit){
-                       return val;
-               }else{
-                       var maxScroll = dojo.style(this.containerNode, "width") - dojo.style(this.scrollNode, "width");
-                       return (dojo.isIE == 8 ? -1 : 1) * (val - maxScroll);
-               }
-       },
-
-       onSelectChild: function(/*dijit._Widget*/ page){
-               // summary:
-               //              Smoothly scrolls to a tab when it is selected.
-
-               var tab = this.pane2button[page.id];
-               if(!tab || !page){return;}
-
-               // Scroll to the selected tab, except on startup, when scrolling is handled in resize()
-               var node = tab.domNode;
-               if(this._postResize && node != this._selectedTab){
-                       this._selectedTab = node;
-
-                       var sl = this._getScroll();
-
-                       if(sl > node.offsetLeft ||
-                                       sl + dojo.style(this.scrollNode, "width") <
-                                       node.offsetLeft + dojo.style(node, "width")){
-                               this.createSmoothScroll().play();
-                       }
-               }
-
-               this.inherited(arguments);
-       },
-
-       _getScrollBounds: function(){
-               // summary:
-               //              Returns the minimum and maximum scroll setting to show the leftmost and rightmost
-               //              tabs (respectively)
-               var children = this.getChildren(),
-                       scrollNodeWidth = dojo.style(this.scrollNode, "width"),         // about 500px
-                       containerWidth = dojo.style(this.containerNode, "width"),       // 50,000px
-                       maxPossibleScroll = containerWidth - scrollNodeWidth,   // scrolling until right edge of containerNode visible
-                       tabsWidth = this._getTabsWidth();
-
-               if(children.length && tabsWidth > scrollNodeWidth){
-                       // Scrolling should happen
-                       return {
-                               min: this.isLeftToRight() ? 0 : children[children.length-1].domNode.offsetLeft,
-                               max: this.isLeftToRight() ?
-                                       (children[children.length-1].domNode.offsetLeft + dojo.style(children[children.length-1].domNode, "width")) - scrollNodeWidth :
-                                       maxPossibleScroll
-                       };
-               }else{
-                       // No scrolling needed, all tabs visible, we stay either scrolled to far left or far right (depending on dir)
-                       var onlyScrollPosition = this.isLeftToRight() ? 0 : maxPossibleScroll;
-                       return {
-                               min: onlyScrollPosition,
-                               max: onlyScrollPosition
-                       };
-               }
-       },
-
-       _getScrollForSelectedTab: function(){
-               // summary:
-               //              Returns the scroll value setting so that the selected tab
-               //              will appear in the center
-               var w = this.scrollNode,
-                       n = this._selectedTab,
-                       scrollNodeWidth = dojo.style(this.scrollNode, "width"),
-                       scrollBounds = this._getScrollBounds();
-
-               // TODO: scroll minimal amount (to either right or left) so that
-               // selected tab is fully visible, and just return if it's already visible?
-               var pos = (n.offsetLeft + dojo.style(n, "width")/2) - scrollNodeWidth/2;
-               pos = Math.min(Math.max(pos, scrollBounds.min), scrollBounds.max);
-
-               // TODO:
-               // If scrolling close to the left side or right side, scroll
-               // all the way to the left or right.  See this._minScroll.
-               // (But need to make sure that doesn't scroll the tab out of view...)
-               return pos;
-       },
-
-       createSmoothScroll : function(x){
-               // summary:
-               //              Creates a dojo._Animation object that smoothly scrolls the tab list
-               //              either to a fixed horizontal pixel value, or to the selected tab.
-               // description:
-               //              If an number argument is passed to the function, that horizontal
-               //              pixel position is scrolled to.  Otherwise the currently selected
-               //              tab is scrolled to.
-               // x: Integer?
-               //              An optional pixel value to scroll to, indicating distance from left.
-
-               // Calculate position to scroll to
-               if(arguments.length > 0){
-                       // position specified by caller, just make sure it's within bounds
-                       var scrollBounds = this._getScrollBounds();
-                       x = Math.min(Math.max(x, scrollBounds.min), scrollBounds.max);
-               }else{
-                       // scroll to center the current tab
-                       x = this._getScrollForSelectedTab();
-               }
-
-               if(this._anim && this._anim.status() == "playing"){
-                       this._anim.stop();
-               }
-
-               var self = this,
-                       w = this.scrollNode,
-                       anim = new dojo._Animation({
-                               beforeBegin: function(){
-                                       if(this.curve){ delete this.curve; }
-                                       var oldS = w.scrollLeft,
-                                               newS = self._convertToScrollLeft(x);
-                                       anim.curve = new dojo._Line(oldS, newS);
-                               },
-                               onAnimate: function(val){
-                                       w.scrollLeft = val;
-                               }
-                       });
-               this._anim = anim;
-
-               // Disable/enable left/right buttons according to new scroll position
-               this._setButtonClass(x);
-
-               return anim; // dojo._Animation
-       },
-
-       _getBtnNode: function(e){
-               // summary:
-               //              Gets a button DOM node from a mouse click event.
-               // e:
-               //              The mouse click event.
-               var n = e.target;
-               while(n && !dojo.hasClass(n, "tabStripButton")){
-                       n = n.parentNode;
-               }
-               return n;
-       },
-
-       doSlideRight: function(e){
-               // summary:
-               //              Scrolls the menu to the right.
-               // e:
-               //              The mouse click event.
-               this.doSlide(1, this._getBtnNode(e));
-       },
-
-       doSlideLeft: function(e){
-               // summary:
-               //              Scrolls the menu to the left.
-               // e:
-               //              The mouse click event.
-               this.doSlide(-1,this._getBtnNode(e));
-       },
-
-       doSlide: function(direction, node){
-               // summary:
-               //              Scrolls the tab list to the left or right by 75% of the widget width.
-               // direction:
-               //              If the direction is 1, the widget scrolls to the right, if it is
-               //              -1, it scrolls to the left.
-
-               if(node && dojo.hasClass(node, "dijitTabDisabled")){return;}
-
-               var sWidth = dojo.style(this.scrollNode, "width");
-               var d = (sWidth * 0.75) * direction;
-
-               var to = this._getScroll() + d;
-
-               this._setButtonClass(to);
-
-               this.createSmoothScroll(to).play();
-       },
-
-       _setButtonClass: function(scroll){
-               // summary:
-               //              Disables the left scroll button if the tabs are scrolled all the way to the left,
-               //              or the right scroll button in the opposite case.
-               // scroll: Integer
-               //              amount of horizontal scroll
-
-               var scrollBounds = this._getScrollBounds();
-               this._leftBtn.set("disabled", scroll <= scrollBounds.min);
-               this._rightBtn.set("disabled", scroll >= scrollBounds.max);
-       }
-});
-
-dojo.declare("dijit.layout._ScrollingTabControllerButton",
-       dijit.form.Button,
-       {
-               baseClass: "dijitTab tabStripButton",
-
-               templateString: dojo.cache("dijit.layout", "templates/_ScrollingTabControllerButton.html", "<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div waiRole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div waiRole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img waiRole=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),
-
-               // Override inherited tabIndex: 0 from dijit.form.Button, because user shouldn't be
-               // able to tab to the left/right/menu buttons
-               tabIndex: "-1"
-       }
-);
-
-}
-
-if(!dojo._hasResource["dijit.layout.TabContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.layout.TabContainer"] = true;
-dojo.provide("dijit.layout.TabContainer");
-
-
-
-
-
-dojo.declare("dijit.layout.TabContainer",
-       dijit.layout._TabContainerBase,
-       {
-               // summary:
-               //              A Container with tabs to select each child (only one of which is displayed at a time).
-               // description:
-               //              A TabContainer is a container that has multiple panes, but shows only
-               //              one pane at a time.  There are a set of tabs corresponding to each pane,
-               //              where each tab has the name (aka title) of the pane, and optionally a close button.
-
-               // useMenu: [const] Boolean
-               //              True if a menu should be used to select tabs when they are too
-               //              wide to fit the TabContainer, false otherwise.
-               useMenu: true,
-
-               // useSlider: [const] Boolean
-               //              True if a slider should be used to select tabs when they are too
-               //              wide to fit the TabContainer, false otherwise.
-               useSlider: true,
-
-               // controllerWidget: String
-               //              An optional parameter to override the widget used to display the tab labels
-               controllerWidget: "",
-
-               _makeController: function(/*DomNode*/ srcNode){
-                       // summary:
-                       //              Instantiate tablist controller widget and return reference to it.
-                       //              Callback from _TabContainerBase.postCreate().
-                       // tags:
-                       //              protected extension
-
-                       var cls = this.baseClass + "-tabs" + (this.doLayout ? "" : " dijitTabNoLayout"),
-                               TabController = dojo.getObject(this.controllerWidget);
-
-                       return new TabController({
-                               id: this.id + "_tablist",
-                               dir: this.dir,
-                               lang: this.lang,
-                               tabPosition: this.tabPosition,
-                               doLayout: this.doLayout,
-                               containerId: this.id,
-                               "class": cls,
-                               nested: this.nested,
-                               useMenu: this.useMenu,
-                               useSlider: this.useSlider,
-                               tabStripClass: this.tabStrip ? this.baseClass + (this.tabStrip ? "":"No") + "Strip": null
-                       }, srcNode);
-               },
-
-               postMixInProperties: function(){
-                       this.inherited(arguments);
-
-                       // Scrolling controller only works for horizontal non-nested tabs
-                       if(!this.controllerWidget){
-                               this.controllerWidget = (this.tabPosition == "top" || this.tabPosition == "bottom") && !this.nested ?
-                                                       "dijit.layout.ScrollingTabController" : "dijit.layout.TabController";
-                       }
-               }
-});
-
-
-}
-
-if(!dojo._hasResource["dijit.dijit-all"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.dijit-all"] = true;
-console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool");
-dojo.provide("dijit.dijit-all");
-
-/*=====
-dijit["dijit-all"] = {
-       // summary:
-       //              A rollup that includes every dijit. You probably don't need this.
-};
-=====*/
-
-
-
-
-
-
-
-
-
-
-// Editor
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Form widgets
-
-
-// Button widgets
-
-
-
-
-
-
-
-// TextBox widgets
-
-
-
-
-
-
-
-// Select widgets
-
-
-
-
-
-// Slider widgets
-
-
-
-
-
-
-
-// Textarea widgets
-
-
-
-// Layout widgets
-
-
-
- //deprecated
-
- //deprecated
-
-
-
-}
-
-
-dojo.i18n._preloadLocalizations("dijit.nls.dijit-all", ["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"]);
index 77b70ab9318c9137fd7d01450a7b3710a39e14b7..8d4f2ae8eff12448f7b66b34c96267ac8c8656ec 100644 (file)
@@ -1,14 +1,38 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The 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 an optimized version of Dojo, built for deployment and not for
-       development. To get sources and documentation, please visit:
 
-               http://dojotoolkit.org
-*/
+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");
+dojo.require("dijit._base");
+dojo.require("dojo.parser");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.require("dijit.form._FormWidget");
+
+
+/*=====
+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["dojo.window"]){dojo._hasResource["dojo.window"]=true;dojo.provide("dojo.window");dojo.window.getBox=function(){var _1=(dojo.doc.compatMode=="BackCompat")?dojo.body():dojo.doc.documentElement;var _2=dojo._docScroll();return {w:_1.clientWidth,h:_1.clientHeight,l:_2.x,t:_2.y};};dojo.window.get=function(_3){if(dojo.isIE&&window!==document.parentWindow){_3.parentWindow.execScript("document._parentWindow = window;","Javascript");var _4=_3._parentWindow;_3._parentWindow=null;return _4;}return _3.parentWindow||_3.defaultView;};dojo.window.scrollIntoView=function(_5,_6){try{_5=dojo.byId(_5);var _7=_5.ownerDocument||dojo.doc,_8=_7.body||dojo.body(),_9=_7.documentElement||_8.parentNode,_a=dojo.isIE,_b=dojo.isWebKit;if((!(dojo.isMoz||_a||_b||dojo.isOpera)||_5==_8||_5==_9)&&(typeof _5.scrollIntoView!="undefined")){_5.scrollIntoView(false);return;}var _c=_7.compatMode=="BackCompat",_d=_c?_8:_9,_e=_b?_8:_d,_f=_d.clientWidth,_10=_d.clientHeight,rtl=!dojo._isBodyLtr(),_11=_6||dojo.position(_5),el=_5.parentNode,_12=function(el){return ((_a<=6||(_a&&_c))?false:(dojo.style(el,"position").toLowerCase()=="fixed"));};if(_12(_5)){return;}while(el){if(el==_8){el=_e;}var _13=dojo.position(el),_14=_12(el);if(el==_e){_13.w=_f;_13.h=_10;if(_e==_9&&_a&&rtl){_13.x+=_e.offsetWidth-_13.w;}if(_13.x<0||!_a){_13.x=0;}if(_13.y<0||!_a){_13.y=0;}}else{var pb=dojo._getPadBorderExtents(el);_13.w-=pb.w;_13.h-=pb.h;_13.x+=pb.l;_13.y+=pb.t;}if(el!=_e){var _15=el.clientWidth,_16=_13.w-_15;if(_15>0&&_16>0){_13.w=_15;if(_a&&rtl){_13.x+=_16;}}_15=el.clientHeight;_16=_13.h-_15;if(_15>0&&_16>0){_13.h=_15;}}if(_14){if(_13.y<0){_13.h+=_13.y;_13.y=0;}if(_13.x<0){_13.w+=_13.x;_13.x=0;}if(_13.y+_13.h>_10){_13.h=_10-_13.y;}if(_13.x+_13.w>_f){_13.w=_f-_13.x;}}var l=_11.x-_13.x,t=_11.y-Math.max(_13.y,0),r=l+_11.w-_13.w,bot=t+_11.h-_13.h;if(r*l>0){var s=Math[l<0?"max":"min"](l,r);_11.x+=el.scrollLeft;el.scrollLeft+=(_a>=8&&!_c&&rtl)?-s:s;_11.x-=el.scrollLeft;}if(bot*t>0){_11.y+=el.scrollTop;el.scrollTop+=Math[t<0?"max":"min"](t,bot);_11.y-=el.scrollTop;}el=(el!=_e)&&!_14&&el.parentNode;}}catch(error){console.error("scrollIntoView: "+error);_5.scrollIntoView(false);}};}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(_17){if(this._hash[_17.id]){throw new Error("Tried to register widget with id=="+_17.id+" but that id is already registered");}this._hash[_17.id]=_17;this.length++;},remove:function(id){if(this._hash[id]){delete this._hash[id];this.length--;}},forEach:function(_18,_19){_19=_19||dojo.global;var i=0,id;for(id in this._hash){_18.call(_19,this._hash[id],i++,this._hash);}return this;},filter:function(_1a,_1b){_1b=_1b||dojo.global;var res=new dijit.WidgetSet(),i=0,id;for(id in this._hash){var w=this._hash[id];if(_1a.call(_1b,w,i++,this._hash)){res.add(w);}}return res;},byId:function(id){return this._hash[id];},byClass:function(cls){var res=new dijit.WidgetSet(),id,_1c;for(id in this._hash){_1c=this._hash[id];if(_1c.declaredClass==cls){res.add(_1c);}}return res;},toArray:function(){var ar=[];for(var id in this._hash){ar.push(this._hash[id]);}return ar;},map:function(_1d,_1e){return dojo.map(this.toArray(),_1d,_1e);},every:function(_1f,_20){_20=_20||dojo.global;var x=0,i;for(i in this._hash){if(!_1f.call(_20,this._hash[i],x++,this._hash)){return false;}}return true;},some:function(_21,_22){_22=_22||dojo.global;var x=0,i;for(i in this._hash){if(_21.call(_22,this._hash[i],x++,this._hash)){return true;}}return false;}});(function(){dijit.registry=new dijit.WidgetSet();var _23=dijit.registry._hash,_24=dojo.attr,_25=dojo.hasAttr,_26=dojo.style;dijit.byId=function(id){return typeof id=="string"?_23[id]:id;};var _27={};dijit.getUniqueId=function(_28){var id;do{id=_28+"_"+(_28 in _27?++_27[_28]:_27[_28]=0);}while(_23[id]);return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;};dijit.findWidgets=function(_29){var _2a=[];function _2b(_2c){for(var _2d=_2c.firstChild;_2d;_2d=_2d.nextSibling){if(_2d.nodeType==1){var _2e=_2d.getAttribute("widgetId");if(_2e){_2a.push(_23[_2e]);}else{_2b(_2d);}}}};_2b(_29);return _2a;};dijit._destroyAll=function(){dijit._curFocus=null;dijit._prevFocus=null;dijit._activeStack=[];dojo.forEach(dijit.findWidgets(dojo.body()),function(_2f){if(!_2f._destroyed){if(_2f.destroyRecursive){_2f.destroyRecursive();}else{if(_2f.destroy){_2f.destroy();}}}});};if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit._destroyAll();});}dijit.byNode=function(_30){return _23[_30.getAttribute("widgetId")];};dijit.getEnclosingWidget=function(_31){while(_31){var id=_31.getAttribute&&_31.getAttribute("widgetId");if(id){return _23[id];}_31=_31.parentNode;}return null;};var _32=(dijit._isElementShown=function(_33){var s=_26(_33);return (s.visibility!="hidden")&&(s.visibility!="collapsed")&&(s.display!="none")&&(_24(_33,"type")!="hidden");});dijit.hasDefaultTabStop=function(_34){switch(_34.nodeName.toLowerCase()){case "a":return _25(_34,"href");case "area":case "button":case "input":case "object":case "select":case "textarea":return true;case "iframe":if(dojo.isMoz){try{return _34.contentDocument.designMode=="on";}catch(err){return false;}}else{if(dojo.isWebKit){var doc=_34.contentDocument,_35=doc&&doc.body;return _35&&_35.contentEditable=="true";}else{try{doc=_34.contentWindow.document;_35=doc&&doc.body;return _35&&_35.firstChild&&_35.firstChild.contentEditable=="true";}catch(e){return false;}}}default:return _34.contentEditable=="true";}};var _36=(dijit.isTabNavigable=function(_37){if(_24(_37,"disabled")){return false;}else{if(_25(_37,"tabIndex")){return _24(_37,"tabIndex")>=0;}else{return dijit.hasDefaultTabStop(_37);}}});dijit._getTabNavigable=function(_38){var _39,_3a,_3b,_3c,_3d,_3e;var _3f=function(_40){dojo.query("> *",_40).forEach(function(_41){if((dojo.isIE&&_41.scopeName!=="HTML")||!_32(_41)){return;}if(_36(_41)){var _42=_24(_41,"tabIndex");if(!_25(_41,"tabIndex")||_42==0){if(!_39){_39=_41;}_3a=_41;}else{if(_42>0){if(!_3b||_42<_3c){_3c=_42;_3b=_41;}if(!_3d||_42>=_3e){_3e=_42;_3d=_41;}}}}if(_41.nodeName.toUpperCase()!="SELECT"){_3f(_41);}});};if(_32(_38)){_3f(_38);}return {first:_39,last:_3a,lowest:_3b,highest:_3d};};dijit.getFirstInTabbingOrder=function(_43){var _44=dijit._getTabNavigable(dojo.byId(_43));return _44.lowest?_44.lowest:_44.first;};dijit.getLastInTabbingOrder=function(_45){var _46=dijit._getTabNavigable(dojo.byId(_45));return _46.last?_46.last:_46.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(_47){var _48=dojo.doc,_49=_47.mark;if(_49){if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.removeAllRanges){if(_49.pRange){var r=_49;var n=r.node;n.selectionStart=r.start;n.selectionEnd=r.end;}else{sel.removeAllRanges();sel.addRange(_49);}}else{console.warn("No idea how to restore selection for this browser!");}}else{if(_48.selection&&_49){var rg;if(_49.pRange){rg=_49.range;}else{if(dojo.isArray(_49)){rg=_48.body.createControlRange();dojo.forEach(_49,function(n){rg.addElement(n);});}else{rg=_48.body.createTextRange();rg.moveToBookmark(_49);}}rg.select();}}}},getFocus:function(_4a,_4b){var _4c=!dijit._curFocus||(_4a&&dojo.isDescendant(dijit._curFocus,_4a.domNode))?dijit._prevFocus:dijit._curFocus;return {node:_4c,bookmark:(_4c==dijit._curFocus)&&dojo.withGlobal(_4b||dojo.global,dijit.getBookmark),openedForWindow:_4b};},focus:function(_4d){if(!_4d){return;}var _4e="node" in _4d?_4d.node:_4d,_4f=_4d.bookmark,_50=_4d.openedForWindow,_51=_4f?_4f.isCollapsed:false;if(_4e){var _52=(_4e.tagName.toLowerCase()=="iframe")?_4e.contentWindow:_4e;if(_52&&_52.focus){try{_52.focus();}catch(e){}}dijit._onFocusNode(_4e);}if(_4f&&dojo.withGlobal(_50||dojo.global,dijit.isCollapsed)&&!_51){if(_50){_50.focus();}try{dojo.withGlobal(_50||dojo.global,dijit.moveToBookmark,null,[_4f]);}catch(e2){}}},_activeStack:[],registerIframe:function(_53){return dijit.registerWin(_53.contentWindow,_53);},unregisterIframe:function(_54){dijit.unregisterWin(_54);},registerWin:function(_55,_56){var _57=function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){return;}dijit._onTouchNode(_56||evt.target||evt.srcElement,"mouse");};var doc=dojo.isIE?_55.document.documentElement:_55.document;if(doc){if(dojo.isIE){doc.attachEvent("onmousedown",_57);var _58=function(evt){if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){dijit._onFocusNode(_56||evt.srcElement);}else{dijit._onTouchNode(_56||evt.srcElement);}};doc.attachEvent("onactivate",_58);var _59=function(evt){dijit._onBlurNode(_56||evt.srcElement);};doc.attachEvent("ondeactivate",_59);return function(){doc.detachEvent("onmousedown",_57);doc.detachEvent("onactivate",_58);doc.detachEvent("ondeactivate",_59);doc=null;};}else{doc.addEventListener("mousedown",_57,true);var _5a=function(evt){dijit._onFocusNode(_56||evt.target);};doc.addEventListener("focus",_5a,true);var _5b=function(evt){dijit._onBlurNode(_56||evt.target);};doc.addEventListener("blur",_5b,true);return function(){doc.removeEventListener("mousedown",_57,true);doc.removeEventListener("focus",_5a,true);doc.removeEventListener("blur",_5b,true);doc=null;};}}},unregisterWin:function(_5c){_5c&&_5c();},_onBlurNode:function(_5d){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(_5e,by){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _5f=[];try{while(_5e){var _60=dojo.attr(_5e,"dijitPopupParent");if(_60){_5e=dijit.byId(_60).domNode;}else{if(_5e.tagName&&_5e.tagName.toLowerCase()=="body"){if(_5e===dojo.body()){break;}_5e=dojo.window.get(_5e.ownerDocument).frameElement;}else{var id=_5e.getAttribute&&_5e.getAttribute("widgetId"),_61=id&&dijit.byId(id);if(_61&&!(by=="mouse"&&_61.get("disabled"))){_5f.unshift(id);}_5e=_5e.parentNode;}}}}catch(e){}dijit._setStack(_5f,by);},_onFocusNode:function(_62){if(!_62){return;}if(_62.nodeType==9){return;}dijit._onTouchNode(_62);if(_62==dijit._curFocus){return;}if(dijit._curFocus){dijit._prevFocus=dijit._curFocus;}dijit._curFocus=_62;dojo.publish("focusNode",[_62]);},_setStack:function(_63,by){var _64=dijit._activeStack;dijit._activeStack=_63;for(var _65=0;_65<Math.min(_64.length,_63.length);_65++){if(_64[_65]!=_63[_65]){break;}}var _66;for(var i=_64.length-1;i>=_65;i--){_66=dijit.byId(_64[i]);if(_66){_66._focused=false;_66._hasBeenBlurred=true;if(_66._onBlur){_66._onBlur(by);}dojo.publish("widgetBlur",[_66,by]);}}for(i=_65;i<_63.length;i++){_66=dijit.byId(_63[i]);if(_66){_66._focused=true;if(_66._onFocus){_66._onFocus(by);}dojo.publish("widgetFocus",[_66,by]);}}}});dojo.addOnLoad(function(){var _67=dijit.registerWin(window);if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit.unregisterWin(_67);_67=null;});}});}if(!dojo._hasResource["dojo.AdapterRegistry"]){dojo._hasResource["dojo.AdapterRegistry"]=true;dojo.provide("dojo.AdapterRegistry");dojo.AdapterRegistry=function(_68){this.pairs=[];this.returnWrappers=_68||false;};dojo.extend(dojo.AdapterRegistry,{register:function(_69,_6a,_6b,_6c,_6d){this.pairs[((_6d)?"unshift":"push")]([_69,_6a,_6b,_6c]);},match:function(){for(var i=0;i<this.pairs.length;i++){var _6e=this.pairs[i];if(_6e[1].apply(this,arguments)){if((_6e[3])||(this.returnWrappers)){return _6e[2];}else{return _6e[2].apply(this,arguments);}}}throw new Error("No match found");},unregister:function(_6f){for(var i=0;i<this.pairs.length;i++){var _70=this.pairs[i];if(_70[0]==_6f){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(){return dojo.window.getBox();};dijit.placeOnScreen=function(_71,pos,_72,_73){var _74=dojo.map(_72,function(_75){var c={corner:_75,pos:{x:pos.x,y:pos.y}};if(_73){c.pos.x+=_75.charAt(1)=="L"?_73.x:-_73.x;c.pos.y+=_75.charAt(0)=="T"?_73.y:-_73.y;}return c;});return dijit._place(_71,_74);};dijit._place=function(_76,_77,_78){var _79=dojo.window.getBox();if(!_76.parentNode||String(_76.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_76);}var _7a=null;dojo.some(_77,function(_7b){var _7c=_7b.corner;var pos=_7b.pos;if(_78){_78(_76,_7b.aroundCorner,_7c);}var _7d=_76.style;var _7e=_7d.display;var _7f=_7d.visibility;_7d.visibility="hidden";_7d.display="";var mb=dojo.marginBox(_76);_7d.display=_7e;_7d.visibility=_7f;var _80=Math.max(_79.l,_7c.charAt(1)=="L"?pos.x:(pos.x-mb.w)),_81=Math.max(_79.t,_7c.charAt(0)=="T"?pos.y:(pos.y-mb.h)),_82=Math.min(_79.l+_79.w,_7c.charAt(1)=="L"?(_80+mb.w):pos.x),_83=Math.min(_79.t+_79.h,_7c.charAt(0)=="T"?(_81+mb.h):pos.y),_84=_82-_80,_85=_83-_81,_86=(mb.w-_84)+(mb.h-_85);if(_7a==null||_86<_7a.overflow){_7a={corner:_7c,aroundCorner:_7b.aroundCorner,x:_80,y:_81,w:_84,h:_85,overflow:_86};}return !_86;});_76.style.left=_7a.x+"px";_76.style.top=_7a.y+"px";if(_7a.overflow&&_78){_78(_76,_7a.aroundCorner,_7a.corner);}return _7a;};dijit.placeOnScreenAroundNode=function(_87,_88,_89,_8a){_88=dojo.byId(_88);var _8b=_88.style.display;_88.style.display="";var _8c=dojo.position(_88,true);_88.style.display=_8b;return dijit._placeOnScreenAroundRect(_87,_8c.x,_8c.y,_8c.w,_8c.h,_89,_8a);};dijit.placeOnScreenAroundRectangle=function(_8d,_8e,_8f,_90){return dijit._placeOnScreenAroundRect(_8d,_8e.x,_8e.y,_8e.width,_8e.height,_8f,_90);};dijit._placeOnScreenAroundRect=function(_91,x,y,_92,_93,_94,_95){var _96=[];for(var _97 in _94){_96.push({aroundCorner:_97,corner:_94[_97],pos:{x:x+(_97.charAt(1)=="L"?0:_92),y:y+(_97.charAt(0)=="T"?0:_93)}});}return dijit._place(_91,_96,_95);};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(_98,_99,_9a,_9b){return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);};dijit.getPopupAroundAlignment=function(_9c,_9d){var _9e={};dojo.forEach(_9c,function(pos){switch(pos){case "after":_9e[_9d?"BR":"BL"]=_9d?"BL":"BR";break;case "before":_9e[_9d?"BL":"BR"]=_9d?"BR":"BL";break;case "below":_9e[_9d?"BL":"BR"]=_9d?"TL":"TR";_9e[_9d?"BR":"BL"]=_9d?"TR":"TL";break;case "above":default:_9e[_9d?"TL":"TR"]=_9d?"BL":"BR";_9e[_9d?"TR":"TL"]=_9d?"BR":"BL";break;}});return _9e;};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){return dojo.window.get(doc);};}if(!dojo._hasResource["dijit._base.popup"]){dojo._hasResource["dijit._base.popup"]=true;dojo.provide("dijit._base.popup");dijit.popup={_stack:[],_beginZIndex:1000,_idGen:1,moveOffScreen:function(_9f){var _a0=_9f.parentNode;if(!_a0||!dojo.hasClass(_a0,"dijitPopup")){_a0=dojo.create("div",{"class":"dijitPopup",style:{visibility:"hidden",top:"-9999px"}},dojo.body());dijit.setWaiRole(_a0,"presentation");_a0.appendChild(_9f);}var s=_9f.style;s.display="";s.visibility="";s.position="";s.top="0px";dojo.style(_a0,{visibility:"hidden",top:"-9999px"});},getTopPopup:function(){var _a1=this._stack;for(var pi=_a1.length-1;pi>0&&_a1[pi].parent===_a1[pi-1].widget;pi--){}return _a1[pi];},open:function(_a2){var _a3=this._stack,_a4=_a2.popup,_a5=_a2.orient||((_a2.parent?_a2.parent.isLeftToRight():dojo._isBodyLtr())?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_a6=_a2.around,id=(_a2.around&&_a2.around.id)?(_a2.around.id+"_dropdown"):("popup_"+this._idGen++);var _a7=_a4.domNode.parentNode;if(!_a7||!dojo.hasClass(_a7,"dijitPopup")){this.moveOffScreen(_a4.domNode);_a7=_a4.domNode.parentNode;}dojo.attr(_a7,{id:id,style:{zIndex:this._beginZIndex+_a3.length},"class":"dijitPopup "+(_a4.baseClass||_a4["class"]||"").split(" ")[0]+"Popup",dijitPopupParent:_a2.parent?_a2.parent.id:""});if(dojo.isIE||dojo.isMoz){var _a8=_a7.childNodes[1];if(!_a8){_a8=new dijit.BackgroundIframe(_a7);}}var _a9=_a6?dijit.placeOnScreenAroundElement(_a7,_a6,_a5,_a4.orient?dojo.hitch(_a4,"orient"):null):dijit.placeOnScreen(_a7,_a2,_a5=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],_a2.padding);_a7.style.visibility="visible";_a4.domNode.style.visibility="visible";var _aa=[];_aa.push(dojo.connect(_a7,"onkeypress",this,function(evt){if(evt.charOrCode==dojo.keys.ESCAPE&&_a2.onCancel){dojo.stopEvent(evt);_a2.onCancel();}else{if(evt.charOrCode===dojo.keys.TAB){dojo.stopEvent(evt);var _ab=this.getTopPopup();if(_ab&&_ab.onCancel){_ab.onCancel();}}}}));if(_a4.onCancel){_aa.push(dojo.connect(_a4,"onCancel",_a2.onCancel));}_aa.push(dojo.connect(_a4,_a4.onExecute?"onExecute":"onChange",this,function(){var _ac=this.getTopPopup();if(_ac&&_ac.onExecute){_ac.onExecute();}}));_a3.push({wrapper:_a7,iframe:_a8,widget:_a4,parent:_a2.parent,onExecute:_a2.onExecute,onCancel:_a2.onCancel,onClose:_a2.onClose,handlers:_aa});if(_a4.onOpen){_a4.onOpen(_a9);}return _a9;},close:function(_ad){var _ae=this._stack;while(dojo.some(_ae,function(_af){return _af.widget==_ad;})){var top=_ae.pop(),_b0=top.wrapper,_b1=top.iframe,_b2=top.widget,_b3=top.onClose;if(_b2.onClose){_b2.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(_b2&&_b2.domNode){this.moveOffScreen(_b2.domNode);}else{dojo.destroy(_b0);}if(_b3){_b3();}}}};dijit._frames=new function(){var _b4=[];this.pop=function(){var _b5;if(_b4.length){_b5=_b4.pop();_b5.style.display="";}else{if(dojo.isIE){var _b6=dojo.config["dojoBlankHtmlUrl"]||(dojo.moduleUrl("dojo","resources/blank.html")+"")||"javascript:\"\"";var _b7="<iframe src='"+_b6+"'"+" style='position: absolute; left: 0px; top: 0px;"+"z-index: -1; filter:Alpha(Opacity=\"0\");'>";_b5=dojo.doc.createElement(_b7);}else{_b5=dojo.create("iframe");_b5.src="javascript:\"\"";_b5.className="dijitBackgroundIframe";dojo.style(_b5,"opacity",0.1);}_b5.tabIndex=-1;dijit.setWaiRole(_b5,"presentation");}return _b5;};this.push=function(_b8){_b8.style.display="none";_b4.push(_b8);};}();dijit.BackgroundIframe=function(_b9){if(!_b9.id){throw new Error("no id");}if(dojo.isIE||dojo.isMoz){var _ba=dijit._frames.pop();_b9.appendChild(_ba);if(dojo.isIE<7){this.resize(_b9);this._conn=dojo.connect(_b9,"onresize",this,function(){this.resize(_b9);});}else{dojo.style(_ba,{width:"100%",height:"100%"});}this.iframe=_ba;}};dojo.extend(dijit.BackgroundIframe,{resize:function(_bb){if(this.iframe&&dojo.isIE<7){dojo.style(this.iframe,{width:_bb.offsetWidth+"px",height:_bb.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(_bc,pos){dojo.window.scrollIntoView(_bc,pos);};}if(!dojo._hasResource["dojo.uacss"]){dojo._hasResource["dojo.uacss"]=true;dojo.provide("dojo.uacss");(function(){var d=dojo,_bd=d.doc.documentElement,ie=d.isIE,_be=d.isOpera,maj=Math.floor,ff=d.isFF,_bf=d.boxModel.replace(/-/,""),_c0={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_ie8:maj(ie)==8,dj_quirks:d.isQuirks,dj_iequirks:ie&&d.isQuirks,dj_opera:_be,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};_c0["dj_"+_bf]=true;var _c1="";for(var clz in _c0){if(_c0[clz]){_c1+=clz+" ";}}_bd.className=d.trim(_bd.className+" "+_c1);dojo._loaders.unshift(function(){if(!dojo._isBodyLtr()){var _c2="dj_rtl dijitRtl "+_c1.replace(/ /g,"-rtl ");_bd.className=d.trim(_bd.className+" "+_c2);}});})();}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");}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)),this._minDelay);this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_c3,_c4,_c5,obj,_c6,_c7,_c8){if(obj!=this._obj){this.stop();this._initialDelay=_c7||500;this._subsequentDelay=_c6||0.9;this._minDelay=_c8||10;this._obj=obj;this._evt=evt;this._node=_c4;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_c3,_c5);this._fireEventAndReload();this._evt=dojo.mixin({faux:true},evt);}},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(_c9,_ca,_cb,_cc,_cd,_ce,_cf){if(_ca.keyCode){_ca.charOrCode=_ca.keyCode;dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}else{if(_ca.charCode){_ca.charOrCode=String.fromCharCode(_ca.charCode);dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}}return [dojo.connect(_c9,"onkeypress",this,function(evt){if(evt.charOrCode==_ca.charOrCode&&(_ca.ctrlKey===undefined||_ca.ctrlKey==evt.ctrlKey)&&(_ca.altKey===undefined||_ca.altKey==evt.altKey)&&(_ca.metaKey===undefined||_ca.metaKey==(evt.metaKey||false))&&(_ca.shiftKey===undefined||_ca.shiftKey==evt.shiftKey)){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_cb,_c9,_cc,_ca,_cd,_ce,_cf);}else{if(dijit.typematic._obj==_ca){dijit.typematic.stop();}}}),dojo.connect(_c9,"onkeyup",this,function(evt){if(dijit.typematic._obj==_ca){dijit.typematic.stop();}})];},addMouseListener:function(_d0,_d1,_d2,_d3,_d4,_d5){var dc=dojo.connect;return [dc(_d0,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_d1,_d0,_d2,_d0,_d3,_d4,_d5);}),dc(_d0,"mouseup",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_d0,"mouseout",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_d0,"mousemove",this,function(evt){evt.preventDefault();}),dc(_d0,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_d1,_d0,_d2,_d0,_d3,_d4,_d5);setTimeout(dojo.hitch(this,dijit.typematic.stop),50);}})];},addListener:function(_d6,_d7,_d8,_d9,_da,_db,_dc,_dd){return this.addKeyListener(_d7,_d8,_d9,_da,_db,_dc,_dd).concat(this.addMouseListener(_d6,_d9,_da,_db,_dc,_dd));}};}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 _de=cs.backgroundImage;var _df=(cs.borderTopColor==cs.borderRightColor)||(_de!=null&&(_de=="none"||_de=="url(invalid-url:)"));dojo[_df?"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(_e0,_e1){var _e2=this.getWaiRole(_e0);return _e1?(_e2.indexOf(_e1)>-1):(_e2.length>0);},getWaiRole:function(_e3){return dojo.trim((dojo.attr(_e3,"role")||"").replace(this._XhtmlRoles,"").replace("wairole:",""));},setWaiRole:function(_e4,_e5){var _e6=dojo.attr(_e4,"role")||"";if(!this._XhtmlRoles.test(_e6)){dojo.attr(_e4,"role",_e5);}else{if((" "+_e6+" ").indexOf(" "+_e5+" ")<0){var _e7=dojo.trim(_e6.replace(this._XhtmlRoles,""));var _e8=dojo.trim(_e6.replace(_e7,""));dojo.attr(_e4,"role",_e8+(_e8?" ":"")+_e5);}}},removeWaiRole:function(_e9,_ea){var _eb=dojo.attr(_e9,"role");if(!_eb){return;}if(_ea){var t=dojo.trim((" "+_eb+" ").replace(" "+_ea+" "," "));dojo.attr(_e9,"role",t);}else{_e9.removeAttribute("role");}},hasWaiState:function(_ec,_ed){return _ec.hasAttribute?_ec.hasAttribute("aria-"+_ed):!!_ec.getAttribute("aria-"+_ed);},getWaiState:function(_ee,_ef){return _ee.getAttribute("aria-"+_ef)||"";},setWaiState:function(_f0,_f1,_f2){_f0.setAttribute("aria-"+_f1,_f2);},removeWaiState:function(_f3,_f4){_f3.removeAttribute("aria-"+_f4);}});}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(_f5,_f6){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 _f7=dojo.date.stamp._isoRegExp.exec(_f5),_f8=null;if(_f7){_f7.shift();if(_f7[1]){_f7[1]--;}if(_f7[6]){_f7[6]*=1000;}if(_f6){_f6=new Date(_f6);dojo.forEach(dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_f9){return _f6["get"+_f9]();}),function(_fa,_fb){_f7[_fb]=_f7[_fb]||_fa;});}_f8=new Date(_f7[0]||1970,_f7[1]||0,_f7[2]||1,_f7[3]||0,_f7[4]||0,_f7[5]||0,_f7[6]||0);if(_f7[0]<100){_f8.setFullYear(_f7[0]||1970);}var _fc=0,_fd=_f7[7]&&_f7[7].charAt(0);if(_fd!="Z"){_fc=((_f7[8]||0)*60)+(Number(_f7[9])||0);if(_fd!="-"){_fc*=-1;}}if(_fd){_fc-=_f8.getTimezoneOffset();}if(_fc){_f8.setTime(_f8.getTime()+_fc*60000);}}return _f8;};dojo.date.stamp.toISOString=function(_fe,_ff){var _100=function(n){return (n<10)?"0"+n:n;};_ff=_ff||{};var _101=[],_102=_ff.zulu?"getUTC":"get",date="";if(_ff.selector!="time"){var year=_fe[_102+"FullYear"]();date=["0000".substr((year+"").length)+year,_100(_fe[_102+"Month"]()+1),_100(_fe[_102+"Date"]())].join("-");}_101.push(date);if(_ff.selector!="date"){var time=[_100(_fe[_102+"Hours"]()),_100(_fe[_102+"Minutes"]()),_100(_fe[_102+"Seconds"]())].join(":");var _103=_fe[_102+"Milliseconds"]();if(_ff.milliseconds){time+="."+(_103<100?"0":"")+_100(_103);}if(_ff.zulu){time+="Z";}else{if(_ff.selector!="time"){var _104=_fe.getTimezoneOffset();var _105=Math.abs(_104);time+=(_104>0?"-":"+")+_100(Math.floor(_105/60))+":"+_100(_105%60);}}_101.push(time);}return _101.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");new Date("X");dojo.parser=new function(){var d=dojo;this._attrName=d._scopeName+"Type";this._query="["+this._attrName+"]";function _106(_107){if(d.isString(_107)){return "string";}if(typeof _107=="number"){return "number";}if(typeof _107=="boolean"){return "boolean";}if(d.isFunction(_107)){return "function";}if(d.isArray(_107)){return "array";}if(_107 instanceof Date){return "date";}if(_107 instanceof d._Url){return "url";}return "object";};function _108(_109,type){switch(type){case "string":return _109;case "number":return _109.length?Number(_109):NaN;case "boolean":return typeof _109=="boolean"?_109:!(_109.toLowerCase()=="false");case "function":if(d.isFunction(_109)){_109=_109.toString();_109=d.trim(_109.substring(_109.indexOf("{")+1,_109.length-1));}try{if(_109===""||_109.search(/[^\w\.]+/i)!=-1){return new Function(_109);}else{return d.getObject(_109,false)||new Function(_109);}}catch(e){return new Function();}case "array":return _109?_109.split(/\s*,\s*/):[];case "date":switch(_109){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_109);}case "url":return d.baseUrl+_109;default:return d.fromJson(_109);}};var _10a={};dojo.connect(dojo,"extend",function(){_10a={};});function _10b(_10c){if(!_10a[_10c]){var cls=d.getObject(_10c);if(!cls){return null;}var _10d=cls.prototype;var _10e={},_10f={};for(var name in _10d){if(name.charAt(0)=="_"){continue;}if(name in _10f){continue;}var _110=_10d[name];_10e[name]=_106(_110);}_10a[_10c]={cls:cls,params:_10e};}return _10a[_10c];};this._functionFromScript=function(_111){var _112="";var _113="";var _114=_111.getAttribute("args");if(_114){d.forEach(_114.split(/\s*,\s*/),function(part,idx){_112+="var "+part+" = arguments["+idx+"]; ";});}var _115=_111.getAttribute("with");if(_115&&_115.length){d.forEach(_115.split(/\s*,\s*/),function(part){_112+="with("+part+"){";_113+="}";});}return new Function(_112+_111.innerHTML+_113);};this.instantiate=function(_116,_117,args){var _118=[],dp=dojo.parser;_117=_117||{};args=args||{};d.forEach(_116,function(obj){if(!obj){return;}var node,type,_119,_11a,_11b;if(obj.node){node=obj.node;type=obj.type;_119=obj.clsInfo||(type&&_10b(type));_11a=_119&&_119.cls;_11b=obj.scripts;}else{node=obj;type=dp._attrName in _117?_117[dp._attrName]:node.getAttribute(dp._attrName);_119=type&&_10b(type);_11a=_119&&_119.cls;_11b=(_11a&&(_11a._noScript||_11a.prototype._noScript)?[]:d.query("> script[type^='dojo/']",node));}if(!_119){throw new Error("Could not load class '"+type);}var _11c={},_11d=node.attributes;if(args.defaults){dojo.mixin(_11c,args.defaults);}if(obj.inherited){dojo.mixin(_11c,obj.inherited);}for(var name in _119.params){var item=name in _117?{value:_117[name],specified:true}:_11d.getNamedItem(name);if(!item||(!item.specified&&(!dojo.isIE||name.toLowerCase()!="value"))){continue;}var _11e=item.value;switch(name){case "class":_11e="className" in _117?_117.className:node.className;break;case "style":_11e="style" in _117?_117.style:(node.style&&node.style.cssText);}var _11f=_119.params[name];if(typeof _11e=="string"){_11c[name]=_108(_11e,_11f);}else{_11c[name]=_11e;}}var _120=[],_121=[];d.forEach(_11b,function(_122){node.removeChild(_122);var _123=_122.getAttribute("event"),type=_122.getAttribute("type"),nf=d.parser._functionFromScript(_122);if(_123){if(type=="dojo/connect"){_120.push({event:_123,func:nf});}else{_11c[_123]=nf;}}else{_121.push(nf);}});var _124=_11a.markupFactory||_11a.prototype&&_11a.prototype.markupFactory;var _125=_124?_124(_11c,node,_11a):new _11a(_11c,node);_118.push(_125);var _126=node.getAttribute("jsId");if(_126){d.setObject(_126,_125);}d.forEach(_120,function(_127){d.connect(_125,_127.event,null,_127.func);});d.forEach(_121,function(func){func.call(_125);});});if(!_117._started){d.forEach(_118,function(_128){if(!args.noStart&&_128&&_128.startup&&!_128._started&&(!_128.getParent||!_128.getParent())){_128.startup();}});}return _118;};this.parse=function(_129,args){var root;if(!args&&_129&&_129.rootNode){args=_129;root=args.rootNode;}else{root=_129;}var _12a=this._attrName;function scan(_12b,list){var _12c=dojo.clone(_12b.inherited);dojo.forEach(["dir","lang"],function(name){var val=_12b.node.getAttribute(name);if(val){_12c[name]=val;}});var _12d=_12b.scripts;var _12e=!_12b.clsInfo||!_12b.clsInfo.cls.prototype.stopParser;for(var _12f=_12b.node.firstChild;_12f;_12f=_12f.nextSibling){if(_12f.nodeType==1){var type=_12e&&_12f.getAttribute(_12a);if(type){var _130={"type":type,clsInfo:_10b(type),node:_12f,scripts:[],inherited:_12c};list.push(_130);scan(_130,list);}else{if(_12d&&_12f.nodeName.toLowerCase()=="script"){type=_12f.getAttribute("type");if(type&&/^dojo\//i.test(type)){_12d.push(_12f);}}else{if(_12e){scan({node:_12f,inherited:_12c},list);}}}}}};var list=[];scan({node:root?dojo.byId(root):dojo.body(),inherited:(args&&args.inherited)||{dir:dojo._isBodyLtr()?"ltr":"rtl"}},list);return this.instantiate(list,null,args);};}();(function(){var _131=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,_131);}else{dojo._loaders.unshift(_131);}})();}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.require("dijit._base");dojo.connect(dojo,"_connect",function(_132,_133){if(_132&&dojo.isFunction(_132._onConnect)){_132._onConnect(_133);}});dijit._connectOnUseEventHandler=function(_134){};dijit._lastKeyDownNode=null;if(dojo.isIE){(function(){var _135=function(evt){dijit._lastKeyDownNode=evt.srcElement;};dojo.doc.attachEvent("onkeydown",_135);dojo.addOnWindowUnload(function(){dojo.doc.detachEvent("onkeydown",_135);});})();}else{dojo.doc.addEventListener("keydown",function(evt){dijit._lastKeyDownNode=evt.target;},true);}(function(){var _136={},_137=function(_138){var dc=_138.declaredClass;if(!_136[dc]){var r=[],_139,_13a=_138.constructor.prototype;for(var _13b in _13a){if(dojo.isFunction(_13a[_13b])&&(_139=_13b.match(/^_set([a-zA-Z]*)Attr$/))&&_139[1]){r.push(_139[1].charAt(0).toLowerCase()+_139[1].substr(1));}}_136[dc]=r;}return _136[dc]||[];};dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",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(_13c,_13d){this.create(_13c,_13d);},create:function(_13e,_13f){this.srcNodeRef=dojo.byId(_13f);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(_13e){this.params=_13e;dojo.mixin(this,_13e);}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 _140=this.srcNodeRef;if(_140&&_140.parentNode){_140.parentNode.replaceChild(this.domNode,_140);}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 _141=function(attr,_142){if((_142.params&&attr in _142.params)||_142[attr]){_142.set(attr,_142[attr]);}};for(var attr in this.attributeMap){_141(attr,this);}dojo.forEach(_137(this),function(a){if(!(a in this.attributeMap)){_141(a,this);}},this);},postMixInProperties:function(){},buildRendering:function(){this.domNode=this.srcNodeRef||dojo.create("div");},postCreate:function(){if(this.baseClass){var _143=this.baseClass.split(" ");if(!this.isLeftToRight()){_143=_143.concat(dojo.map(_143,function(name){return name+"Rtl";}));}dojo.addClass(this.domNode,_143);}},startup:function(){this._started=true;},destroyRecursive:function(_144){this._beingDestroyed=true;this.destroyDescendants(_144);this.destroy(_144);},destroy:function(_145){this._beingDestroyed=true;this.uninitialize();var d=dojo,dfe=d.forEach,dun=d.unsubscribe;dfe(this._connects,function(_146){dfe(_146,d.disconnect);});dfe(this._subscribes,function(_147){dun(_147);});dfe(this._supportingWidgets||[],function(w){if(w.destroyRecursive){w.destroyRecursive();}else{if(w.destroy){w.destroy();}}});this.destroyRendering(_145);dijit.registry.remove(this.id);this._destroyed=true;},destroyRendering:function(_148){if(this.bgIframe){this.bgIframe.destroy(_148);delete this.bgIframe;}if(this.domNode){if(_148){dojo.removeAttr(this.domNode,"widgetId");}else{dojo.destroy(this.domNode);}delete this.domNode;}if(this.srcNodeRef){if(!_148){dojo.destroy(this.srcNodeRef);}delete this.srcNodeRef;}},destroyDescendants:function(_149){dojo.forEach(this.getChildren(),function(_14a){if(_14a.destroyRecursive){_14a.destroyRecursive(_149);}});},uninitialize:function(){return false;},onFocus:function(){},onBlur:function(){},_onFocus:function(e){this.onFocus();},_onBlur:function(){this.onBlur();},_onConnect:function(_14b){if(_14b in this._deferredConnects){var _14c=this[this._deferredConnects[_14b]||"domNode"];this.connect(_14c,_14b.toLowerCase(),_14b);delete this._deferredConnects[_14b];}},_setClassAttr:function(_14d){var _14e=this[this.attributeMap["class"]||"domNode"];dojo.removeClass(_14e,this["class"]);this["class"]=_14d;dojo.addClass(_14e,_14d);},_setStyleAttr:function(_14f){var _150=this[this.attributeMap.style||"domNode"];if(dojo.isObject(_14f)){dojo.style(_150,_14f);}else{if(_150.style.cssText){_150.style.cssText+="; "+_14f;}else{_150.style.cssText=_14f;}}this.style=_14f;},setAttribute:function(attr,_151){dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");this.set(attr,_151);},_attrToDom:function(attr,_152){var _153=this.attributeMap[attr];dojo.forEach(dojo.isArray(_153)?_153:[_153],function(_154){var _155=this[_154.node||_154||"domNode"];var type=_154.type||"attribute";switch(type){case "attribute":if(dojo.isFunction(_152)){_152=dojo.hitch(this,_152);}var _156=_154.attribute?_154.attribute:(/^on[A-Z][a-zA-Z]*$/.test(attr)?attr.toLowerCase():attr);dojo.attr(_155,_156,_152);break;case "innerText":_155.innerHTML="";_155.appendChild(dojo.doc.createTextNode(_152));break;case "innerHTML":_155.innerHTML=_152;break;case "class":dojo.removeClass(_155,this[attr]);dojo.addClass(_155,_152);break;}},this);this[attr]=_152;},attr:function(name,_157){if(dojo.config.isDebug){var _158=arguments.callee._ach||(arguments.callee._ach={}),_159=(arguments.callee.caller||"unknown caller").toString();if(!_158[_159]){dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_159,"","2.0");_158[_159]=true;}}var args=arguments.length;if(args>=2||typeof name==="object"){return this.set.apply(this,arguments);}else{return this.get(name);}},get:function(name){var _15a=this._getAttrNames(name);return this[_15a.g]?this[_15a.g]():this[name];},set:function(name,_15b){if(typeof name==="object"){for(var x in name){this.set(x,name[x]);}return this;}var _15c=this._getAttrNames(name);if(this[_15c.s]){var _15d=this[_15c.s].apply(this,Array.prototype.slice.call(arguments,1));}else{if(name in this.attributeMap){this._attrToDom(name,_15b);}var _15e=this[name];this[name]=_15b;}return _15d||this;},_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,_15f,_160){var d=dojo,dc=d._connect,_161=[];if(_15f=="ondijitclick"){if(dojo.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){var m=d.hitch(this,_160);_161.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;e.preventDefault();}}),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);}}));}_15f="onclick";}_161.push(dc(obj,_15f,this,_160));this._connects.push(_161);return _161;},disconnect:function(_162){for(var i=0;i<this._connects.length;i++){if(this._connects[i]==_162){dojo.forEach(_162,dojo.disconnect);this._connects.splice(i,1);return;}}},subscribe:function(_163,_164){var d=dojo,_165=d.subscribe(_163,this,_164);this._subscribes.push(_165);return _165;},unsubscribe:function(_166){for(var i=0;i<this._subscribes.length;i++){if(this._subscribes[i]==_166){dojo.unsubscribe(_166);this._subscribes.splice(i,1);return;}}},isLeftToRight:function(){return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();},isFocusable:function(){return this.focus&&(dojo.style(this.domNode,"display")!="none");},placeAt:function(_167,_168){if(_167.declaredClass&&_167.addChild){_167.addChild(this,_168);}else{dojo.place(this.domNode,_167,_168);}return this;},_onShow:function(){this.onShow();},onShow:function(){},onHide:function(){},onClose:function(){return true;}});})();}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(_169,map,_16a,_16b){_16b=_16b||dojo.global;_16a=_16a?dojo.hitch(_16b,_16a):function(v){return v;};return _169.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_16c,key,_16d){var _16e=dojo.getObject(key,false,map);if(_16d){_16e=dojo.getObject(_16d,false,_16b).call(_16b,_16e,key);}return _16a(_16e,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 _16f={};dojo.cache=function(_170,url,_171){if(typeof _170=="string"){var _172=dojo.moduleUrl(_170,url);}else{_172=_170;_171=url;}var key=_172.toString();var val=_171;if(_171!=undefined&&!dojo.isString(_171)){val=("value" in _171?_171.value:undefined);}var _173=_171&&_171.sanitize?true:false;if(typeof val=="string"){val=_16f[key]=_173?dojo.cache._sanitize(val):val;}else{if(val===null){delete _16f[key];}else{if(!(key in _16f)){val=dojo._getText(key);_16f[key]=_173?dojo.cache._sanitize(val):val;}val=_16f[key];}}return val;};dojo.cache._sanitize=function(val){if(val){val=val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _174=val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_174){val=_174[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 _175=this.declaredClass,_176=this;return dojo.string.substitute(tmpl,this,function(_177,key){if(key.charAt(0)=="!"){_177=dojo.getObject(key.substr(1),false,_176);}if(typeof _177=="undefined"){throw new Error(_175+" template:"+key);}if(_177==null){return "";}return key.charAt(0)=="!"?_177:_177.toString().replace(/"/g,"&quot;");},this);},buildRendering:function(){var _178=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);var node;if(dojo.isString(_178)){node=dojo._toDom(this._stringRepl(_178));if(node.nodeType!=1){throw new Error("Invalid template: "+_178);}}else{node=_178.cloneNode(true);}this.domNode=node;this._attachTemplateNodes(node);if(this.widgetsInTemplate){var _179=dojo.parser,qry,attr;if(_179._query!="[dojoType]"){qry=_179._query;attr=_179._attrName;_179._query="[dojoType]";_179._attrName="dojoType";}var cw=(this._startupWidgets=dojo.parser.parse(node,{noStart:!this._earlyTemplatedStartup,inherited:{dir:this.dir,lang:this.lang}}));if(qry){_179._query=qry;_179._attrName=attr;}this._supportingWidgets=dijit.findWidgets(node);this._attachTemplateNodes(cw,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_17a){var dest=this.containerNode;if(_17a&&dest){while(_17a.hasChildNodes()){dest.appendChild(_17a.firstChild);}}},_attachTemplateNodes:function(_17b,_17c){_17c=_17c||function(n,p){return n.getAttribute(p);};var _17d=dojo.isArray(_17b)?_17b:(_17b.all||_17b.getElementsByTagName("*"));var x=dojo.isArray(_17b)?0:-1;for(;x<_17d.length;x++){var _17e=(x==-1)?_17b:_17d[x];if(this.widgetsInTemplate&&_17c(_17e,"dojoType")){continue;}var _17f=_17c(_17e,"dojoAttachPoint");if(_17f){var _180,_181=_17f.split(/\s*,\s*/);while((_180=_181.shift())){if(dojo.isArray(this[_180])){this[_180].push(_17e);}else{this[_180]=_17e;}this._attachPoints.push(_180);}}var _182=_17c(_17e,"dojoAttachEvent");if(_182){var _183,_184=_182.split(/\s*,\s*/);var trim=dojo.trim;while((_183=_184.shift())){if(_183){var _185=null;if(_183.indexOf(":")!=-1){var _186=_183.split(":");_183=trim(_186[0]);_185=trim(_186[1]);}else{_183=trim(_183);}if(!_185){_185=_183;}this.connect(_17e,_183,_185);}}}var role=_17c(_17e,"waiRole");if(role){dijit.setWaiRole(_17e,role);}var _187=_17c(_17e,"waiState");if(_187){dojo.forEach(_187.split(/\s*,\s*/),function(_188){if(_188.indexOf("-")!=-1){var pair=_188.split("-");dijit.setWaiState(_17e,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(_189){delete this[_189];},this);this._attachPoints=[];this.inherited(arguments);}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_18a,_18b,_18c){var _18d=dijit._Templated._templateCache;var key=_18b||_18a;var _18e=_18d[key];if(_18e){try{if(!_18e.ownerDocument||_18e.ownerDocument==dojo.doc){return _18e;}}catch(e){}dojo.destroy(_18e);}if(!_18b){_18b=dojo.cache(_18a,{sanitize:true});}_18b=dojo.string.trim(_18b);if(_18c||_18b.match(/\$\{([^\}]+)\}/g)){return (_18d[key]=_18b);}else{var node=dojo._toDom(_18b);if(node.nodeType!=1){throw new Error("Invalid template: "+_18b);}return (_18d[key]=node);}};if(dojo.isIE){dojo.addOnWindowUnload(function(){var _18f=dijit._Templated._templateCache;for(var key in _18f){var _190=_18f[key];if(typeof _190=="object"){dojo.destroy(_190);}delete _18f[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(_191,_192){var _193=this.containerNode;if(_192&&typeof _192=="number"){var _194=this.getChildren();if(_194&&_194.length>=_192){_193=_194[_192-1].domNode;_192="after";}}dojo.place(_191.domNode,_193,_192);if(this._started&&!_191._started){_191.startup();}},removeChild:function(_195){if(typeof _195=="number"&&_195>0){_195=this.getChildren()[_195];}if(_195){var node=_195.domNode;if(node&&node.parentNode){node.parentNode.removeChild(node);}}},hasChildren:function(){return this.getChildren().length>0;},destroyDescendants:function(_196){dojo.forEach(this.getChildren(),function(_197){_197.destroyRecursive(_196);});},_getSiblingOfChild:function(_198,dir){var node=_198.domNode,_199=(dir>0?"nextSibling":"previousSibling");do{node=node[_199];}while(node&&(node.nodeType!=1||!dijit.byNode(node)));return node&&dijit.byNode(node);},getIndexOfChild:function(_19a){return dojo.indexOf(this.getChildren(),_19a);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_19b){_19b.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 _19c=dijit.getEnclosingWidget(this.domNode.parentNode);return _19c&&_19c.isContainer?_19c:null;},_getSibling:function(_19d){var node=this.domNode;do{node=node[_19d+"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");this.inherited(arguments);},startup:function(){if(this._started){return;}this.inherited(arguments);var _19e=this.getParent&&this.getParent();if(!(_19e&&_19e.isLayoutContainer)){this.resize();this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){this.resize();});}},resize:function(_19f,_1a0){var node=this.domNode;if(_19f){dojo.marginBox(node,_19f);if(_19f.t){node.style.top=_19f.t+"px";}if(_19f.l){node.style.left=_19f.l+"px";}}var mb=_1a0||{};dojo.mixin(mb,_19f||{});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(_1a1){dojo.addClass(_1a1.domNode,this.baseClass+"-child");if(_1a1.baseClass){dojo.addClass(_1a1.domNode,this.baseClass+"-"+_1a1.baseClass);}},addChild:function(_1a2,_1a3){this.inherited(arguments);if(this._started){this._setupChild(_1a2);}},removeChild:function(_1a4){dojo.removeClass(_1a4.domNode,this.baseClass+"-child");if(_1a4.baseClass){dojo.removeClass(_1a4.domNode,this.baseClass+"-"+_1a4.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 _1a5=function(word){return word.substring(0,1).toUpperCase()+word.substring(1);};var size=function(_1a6,dim){_1a6.resize?_1a6.resize(dim):dojo.marginBox(_1a6.domNode,dim);dojo.mixin(_1a6,dojo.marginBox(_1a6.domNode));dojo.mixin(_1a6,dim);};dijit.layout.layoutChildren=function(_1a7,dim,_1a8){dim=dojo.mixin({},dim);dojo.addClass(_1a7,"dijitLayoutContainer");_1a8=dojo.filter(_1a8,function(item){return item.layoutAlign!="client";}).concat(dojo.filter(_1a8,function(item){return item.layoutAlign=="client";}));dojo.forEach(_1a8,function(_1a9){var elm=_1a9.domNode,pos=_1a9.layoutAlign;var _1aa=elm.style;_1aa.left=dim.l+"px";_1aa.top=dim.t+"px";_1aa.bottom=_1aa.right="auto";dojo.addClass(elm,"dijitAlign"+_1a5(pos));if(pos=="top"||pos=="bottom"){size(_1a9,{w:dim.w});dim.h-=_1a9.h;if(pos=="top"){dim.t+=_1a9.h;}else{_1aa.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){size(_1a9,{h:dim.h});dim.w-=_1a9.w;if(pos=="left"){dim.l+=_1a9.w;}else{_1aa.left=dim.l+dim.w+"px";}}else{if(pos=="client"){size(_1a9,dim);}}}});};})();}if(!dojo._hasResource["dijit._CssStateMixin"]){dojo._hasResource["dijit._CssStateMixin"]=true;dojo.provide("dijit._CssStateMixin");dojo.declare("dijit._CssStateMixin",[],{cssStateNodes:{},postCreate:function(){this.inherited(arguments);dojo.forEach(["onmouseenter","onmouseleave","onmousedown"],function(e){this.connect(this.domNode,e,"_cssMouseEvent");},this);this.connect(this,"set",function(name,_1ab){if(arguments.length>=2&&{disabled:true,readOnly:true,checked:true,selected:true}[name]){this._setStateClass();}});dojo.forEach(["_onFocus","_onBlur"],function(ap){this.connect(this,ap,"_setStateClass");},this);for(var ap in this.cssStateNodes){this._trackMouseState(this[ap],this.cssStateNodes[ap]);}this._setStateClass();},_cssMouseEvent:function(_1ac){if(!this.disabled){switch(_1ac.type){case "mouseenter":case "mouseover":this._hovering=true;this._active=this._mouseDown;break;case "mouseleave":case "mouseout":this._hovering=false;this._active=false;break;case "mousedown":this._active=true;this._mouseDown=true;var _1ad=this.connect(dojo.body(),"onmouseup",function(){this._active=false;this._mouseDown=false;this._setStateClass();this.disconnect(_1ad);});break;}this._setStateClass();}},_setStateClass:function(){var _1ae=this.baseClass.split(" ");function _1af(_1b0){_1ae=_1ae.concat(dojo.map(_1ae,function(c){return c+_1b0;}),"dijit"+_1b0);};if(!this.isLeftToRight()){_1af("Rtl");}if(this.checked){_1af("Checked");}if(this.state){_1af(this.state);}if(this.selected){_1af("Selected");}if(this.disabled){_1af("Disabled");}else{if(this.readOnly){_1af("ReadOnly");}else{if(this._active){_1af("Active");}else{if(this._hovering){_1af("Hover");}}}}if(this._focused){_1af("Focused");}var tn=this.stateNode||this.domNode,_1b1={};dojo.forEach(tn.className.split(" "),function(c){_1b1[c]=true;});if("_stateClasses" in this){dojo.forEach(this._stateClasses,function(c){delete _1b1[c];});}dojo.forEach(_1ae,function(c){_1b1[c]=true;});var _1b2=[];for(var c in _1b1){_1b2.push(c);}tn.className=_1b2.join(" ");this._stateClasses=_1ae;},_trackMouseState:function(node,_1b3){var _1b4=false,_1b5=false,_1b6=false;var self=this,cn=dojo.hitch(this,"connect",node);function _1b7(){var _1b8=("disabled" in self&&self.disabled)||("readonly" in self&&self.readonly);dojo.toggleClass(node,_1b3+"Hover",_1b4&&!_1b5&&!_1b8);dojo.toggleClass(node,_1b3+"Active",_1b5&&!_1b8);dojo.toggleClass(node,_1b3+"Focused",_1b6&&!_1b8);};cn("onmouseenter",function(){_1b4=true;_1b7();});cn("onmouseleave",function(){_1b4=false;_1b5=false;_1b7();});cn("onmousedown",function(){_1b5=true;_1b7();});cn("onmouseup",function(){_1b5=false;_1b7();});cn("onfocus",function(){_1b6=true;_1b7();});cn("onblur",function(){_1b6=false;_1b7();});this.connect(this,"set",function(name,_1b9){if(name=="disabled"||name=="readOnly"){_1b7();}});}});}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,dijit._CssStateMixin],{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.replace(/'/g,"&quot;")+"\""):"";this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousedown","_onMouseDown");},_setDisabledAttr:function(_1ba){this.disabled=_1ba;dojo.attr(this.focusNode,"disabled",_1ba);if(this.valueNode){dojo.attr(this.valueNode,"disabled",_1ba);}dijit.setWaiState(this.focusNode,"disabled",_1ba);if(_1ba){this._hovering=false;this._active=false;var _1bb="tabIndex" in this.attributeMap?this.attributeMap.tabIndex:"focusNode";dojo.forEach(dojo.isArray(_1bb)?_1bb:[_1bb],function(_1bc){var node=this[_1bc];if(dojo.isWebKit||dijit.hasDefaultTabStop(node)){node.setAttribute("tabIndex","-1");}else{node.removeAttribute("tabIndex");}},this);}else{this.focusNode.setAttribute("tabIndex",this.tabIndex);}},setDisabled:function(_1bd){dojo.deprecated("setDisabled("+_1bd+") is deprecated. Use set('disabled',"+_1bd+") instead.","","2.0");this.set("disabled",_1bd);},_onFocus:function(e){if(this.scrollOnFocus){dojo.window.scrollIntoView(this.domNode);}this.inherited(arguments);},isFocusable:function(){return !this.disabled&&!this.readOnly&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");},focus:function(){dijit.focus(this.focusNode);},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(_1be){},_onChangeActive:false,_handleOnChange:function(_1bf,_1c0){this._lastValue=_1bf;if(this._lastValueReported==undefined&&(_1c0===null||!this._onChangeActive)){this._resetValue=this._lastValueReported=_1bf;}if((this.intermediateChanges||_1c0||_1c0===undefined)&&((typeof _1bf!=typeof this._lastValueReported)||this.compare(_1bf,this._lastValueReported)!=0)){this._lastValueReported=_1bf;if(this._onChangeActive){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);}this._onChangeHandle=setTimeout(dojo.hitch(this,function(){this._onChangeHandle=null;this.onChange(_1bf);}),0);}}},create:function(){this.inherited(arguments);this._onChangeActive=true;},destroy:function(){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);this.onChange(this._lastValueReported);}this.inherited(arguments);},setValue:function(_1c1){dojo.deprecated("dijit.form._FormWidget:setValue("+_1c1+") is deprecated.  Use set('value',"+_1c1+") instead.","","2.0");this.set("value",_1c1);},getValue:function(){dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_onMouseDown:function(e){if(!e.ctrlKey&&this.isFocusable()){var _1c2=this.connect(dojo.body(),"onmouseup",function(){if(this.isFocusable()){this.focus();}this.disconnect(_1c2);});}}});dojo.declare("dijit.form._FormValueWidget",dijit.form._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_1c3){this.readOnly=_1c3;dojo.attr(this.focusNode,"readOnly",_1c3);dijit.setWaiState(this.focusNode,"readonly",_1c3);},postCreate:function(){this.inherited(arguments);if(dojo.isIE){this.connect(this.focusNode||this.domNode,"onkeydown",this._onKeyDown);}if(this._resetValue===undefined){this._resetValue=this.value;}},_setValueAttr:function(_1c4,_1c5){this.value=_1c4;this._handleOnChange(_1c4,_1c5);},_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 _1c6=this.domNode;var _1c7=_1c6.parentNode;var _1c8=_1c6.firstChild||_1c6;var _1c9=_1c8.style.filter;var _1ca=this;while(_1c7&&_1c7.clientHeight==0){(function ping(){var _1cb=_1ca.connect(_1c7,"onscroll",function(e){_1ca.disconnect(_1cb);_1c8.style.filter=(new Date()).getMilliseconds();setTimeout(function(){_1c8.style.filter=_1c9;},0);});})();_1c7=_1c7.parentNode;}}}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");}
+}
diff --git a/lib/dijit/dijit.js.uncompressed.js b/lib/dijit/dijit.js.uncompressed.js
deleted file mode 100644 (file)
index 076a032..0000000
+++ /dev/null
@@ -1,5961 +0,0 @@
-/*
-       Copyright (c) 2004-2010, The 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 an optimized version of Dojo, built for deployment and not for
-       development. To get sources and documentation, please visit:
-
-               http://dojotoolkit.org
-*/
-
-if(!dojo._hasResource["dojo.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.window"] = true;
-dojo.provide("dojo.window");
-
-dojo.window.getBox = 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 };
-};
-
-dojo.window.get = 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){
-               /*
-               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.defaultView;     //      Window
-};
-
-dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
-       // summary:
-       //              Scroll the passed node into view, if it is not already.
-       
-       // don't rely on node.scrollIntoView working 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 || dojo.isOpera) || 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);
-       
-                       if(el == scrollRoot){
-                               elPos.w = rootWidth; elPos.h = rootHeight;
-                               if(scrollRoot == html && isIE && rtl){ elPos.x += scrollRoot.offsetWidth-elPos.w; } // IE workaround where scrollbar causes negative x
-                               if(elPos.x < 0 || !isIE){ elPos.x = 0; } // IE can have values > 0
-                               if(elPos.y < 0 || !isIE){ elPos.y = 0; }
-                       }else{
-                               var pb = dojo._getPadBorderExtents(el);
-                               elPos.w -= pb.w; elPos.h -= pb.h; elPos.x += pb.l; elPos.y += pb.t;
-                       }
-       
-                       if(el != scrollRoot){ // body, html sizes already have the scrollbar removed
-                               var clientSize = el.clientWidth,
-                                       scrollBarSize = elPos.w - clientSize;
-                               if(clientSize > 0 && scrollBarSize > 0){
-                                       elPos.w = clientSize;
-                                       if(isIE && rtl){ elPos.x += scrollBarSize; }
-                               }
-                               clientSize = el.clientHeight;
-                               scrollBarSize = elPos.h - clientSize;
-                               if(clientSize > 0 && scrollBarSize > 0){
-                                       elPos.h = clientSize;
-                               }
-                       }
-                       if(fixedPos){ // bounded by viewport, not parents
-                               if(elPos.y < 0){
-                                       elPos.h += elPos.y; elPos.y = 0;
-                               }
-                               if(elPos.x < 0){
-                                       elPos.w += elPos.x; elPos.x = 0;
-                               }
-                               if(elPos.y + elPos.h > rootHeight){
-                                       elPos.h = rootHeight - elPos.y;
-                               }
-                               if(elPos.x + elPos.w > rootWidth){
-                                       elPos.w = rootWidth - elPos.x;
-                               }
-                       }
-                       // calculate overflow in all 4 directions
-                       var l = nodePos.x - elPos.x, // beyond left: < 0
-                               t = nodePos.y - Math.max(elPos.y, 0), // beyond top: < 0
-                               r = l + nodePos.w - elPos.w, // beyond right: > 0
-                               bot = t + nodePos.h - elPos.h; // beyond bottom: > 0
-                       if(r * l > 0){
-                               var s = Math[l < 0? "max" : "min"](l, r);
-                               nodePos.x += el.scrollLeft;
-                               el.scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s;
-                               nodePos.x -= el.scrollLeft;
-                       }
-                       if(bot * t > 0){
-                               nodePos.y += el.scrollTop;
-                               el.scrollTop += Math[t < 0? "max" : "min"](t, bot);
-                               nodePos.y -= el.scrollTop;
-                       }
-                       el = (el != scrollRoot) && !fixedPos && el.parentNode;
-               }       
-       }catch(error){
-               console.error('scrollIntoView: ' + error);
-               node.scrollIntoView(false);
-       }
-};
-
-}
-
-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 explicitly 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
-       }
-
-});
-
-(function(){
-
-       /*=====
-       dijit.registry = {
-               // summary:
-               //              A list of widgets on a page.
-               // description:
-               //              Is an instance of `dijit.WidgetSet`
-       };
-       =====*/
-       dijit.registry = new dijit.WidgetSet();
-
-       var hash = dijit.registry._hash,
-               attr = dojo.attr,
-               hasAttr = dojo.hasAttr,
-               style = dojo.style;
-
-       dijit.byId = function(/*String|dijit._Widget*/ id){
-               // summary:
-               //              Returns a widget by it's id, or if passed a widget, no-op (like dojo.byId())
-               return typeof id == "string" ? hash[id] : id; // dijit._Widget
-       };
-
-       var _widgetTypeCtr = {};
-       dijit.getUniqueId = function(/*String*/widgetType){
-               // summary:
-               //              Generates a unique id for a given widgetType
-       
-               var id;
-               do{
-                       id = widgetType + "_" +
-                               (widgetType in _widgetTypeCtr ?
-                                       ++_widgetTypeCtr[widgetType] : _widgetTypeCtr[widgetType] = 0);
-               }while(hash[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){
-                                               outAry.push(hash[widgetId]);
-                                       }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.byNode = function(/*DOMNode*/ node){
-               // summary:
-               //              Returns the widget corresponding to the given DOMNode
-               return hash[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 hash[id];
-                       }
-                       node = node.parentNode;
-               }
-               return null;
-       };
-
-       var shown = (dijit._isElementShown = function(/*Element*/ elem){
-               var s = style(elem);
-               return (s.visibility != "hidden")
-                       && (s.visibility != "collapsed")
-                       && (s.display != "none")
-                       && (attr(elem, "type") != "hidden");
-       });
-       
-       dijit.hasDefaultTabStop = function(/*Element*/ elem){
-               // summary:
-               //              Tests if element is tab-navigable even without an explicit tabIndex setting
-       
-               // 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 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.
-                               //TODO: feature detect "designMode" in elem.contentDocument?
-                               if(dojo.isMoz){
-                                       try{
-                                               return elem.contentDocument.designMode == "on";
-                                       }catch(err){
-                                               return false;
-                                       }
-                               }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';
-               }
-       };
-       
-       var isTabNavigable = (dijit.isTabNavigable = function(/*Element*/ elem){
-               // summary:
-               //              Tests if an element is tab-navigable
-       
-               // TODO: convert (and rename method) to return effective tabIndex; will save time in _getTabNavigable()
-               if(attr(elem, "disabled")){
-                       return false;
-               }else if(hasAttr(elem, "tabIndex")){
-                       // Explicit tab index setting
-                       return attr(elem, "tabIndex") >= 0; // boolean
-               }else{
-                       // No explicit tabIndex setting, so depends on node type
-                       return dijit.hasDefaultTabStop(elem);
-               }
-       });
-
-       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){
-                               // Skip hidden elements, and also non-HTML elements (those in custom namespaces) in IE,
-                               // since show() invokes getAttribute("type"), which crash on VML nodes in IE.
-                               if((dojo.isIE && child.scopeName!=="HTML") || !shown(child)){
-                                       return;
-                               }
-
-                               if(isTabNavigable(child)){
-                                       var tabindex = attr(child, "tabIndex");
-                                       if(!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(child.nodeName.toUpperCase() != 'SELECT'){
-                                       walkTree(child);
-                               }
-                       });
-               };
-               if(shown(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: 200
-       });
-       =====*/
-       
-       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);
-                       
-                       // workaround weird IE bug where the click is on an orphaned node
-                       // (first time clicking a Select/DropDownButton inside a TooltipDialog)
-                       if(dojo.isIE && evt && evt.srcElement && evt.srcElement.parentNode == null){
-                               return;
-                       }
-
-                       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=dojo.window.get(node.ownerDocument).frameElement;
-                               }else{
-                                       // if this node is the root node of a widget, then add widget id to stack,
-                                       // except ignore clicks on disabled widgets (actually focusing a disabled widget still works,
-                                       // to support MenuItem)
-                                       var id = node.getAttribute && node.getAttribute("widgetId"),
-                                               widget = id && dijit.byId(id);
-                                       if(widget && !(by == "mouse" && widget.get("disabled"))){
-                                               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);
-                               }
-                               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);
-                               }
-                               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");
-
-
-
-
-
-dijit.getViewport = function(){
-       // summary:
-       //              Returns the dimensions and scroll position of the viewable area of a browser window
-
-       return dojo.window.getBox();
-};
-
-/*=====
-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 = dojo.window.getBox();
-
-       // 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.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");
-
-
-
-dijit.getDocumentWindow = function(doc){
-       return dojo.window.get(doc);
-};
-
-}
-
-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.__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.  (Specify 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;
-}
-=====*/
-
-dijit.popup = {
-       // summary:
-       //              This singleton is used to show/hide widgets as popups.
-
-       // _stack: dijit._Widget[]
-       //              Stack of currently popped up widgets.
-       //              (someone opened _stack[0], and then it opened _stack[1], etc.)
-       _stack: [],
-       
-       // _beginZIndex: Number
-       //              Z-index of the first popup.   (If first popup opens other
-       //              popups they get a higher z-index.)
-       _beginZIndex: 1000,
-
-       _idGen: 1,
-
-       moveOffScreen: function(/*DomNode*/ node){
-               // summary:
-               //              Initialization for nodes that will be used as popups
-               //
-               // description:
-               //              Puts node inside a wrapper <div>, and
-               //              positions wrapper div 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 wrapper = node.parentNode;
-
-               // Create a wrapper widget for when this node (in the future) will be used as a popup.
-               // This is done early because of IE bugs where creating/moving DOM nodes causes focus
-               // to go wonky, see tests/robot/Toolbar.html to reproduce
-               if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){
-                       wrapper = dojo.create("div",{
-                               "class":"dijitPopup",
-                               style:{
-                                       visibility:"hidden",
-                                       top: "-9999px"
-                               }
-                       }, dojo.body());
-                       dijit.setWaiRole(wrapper, "presentation");
-                       wrapper.appendChild(node);
-               }
-
-
-               var s = node.style;
-               s.display = "";
-               s.visibility = "";
-               s.position = "";
-               s.top = "0px";
-
-               dojo.style(wrapper, {
-                       visibility: "hidden",
-                       // prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111)
-                       top: "-9999px"
-               });
-       },
-
-       getTopPopup: function(){
-               // summary:
-               //              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 stack = this._stack;
-               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];
-       },
-
-       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 stack = this._stack,
-                       widget = args.popup,
-                       orient = args.orient || (
-                               (args.parent ? args.parent.isLeftToRight() : 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_"+this._idGen++);
-
-
-               // The wrapper may have already been created, but in case it wasn't, create here
-               var wrapper = widget.domNode.parentNode;
-               if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){
-                       this.moveOffScreen(widget.domNode);
-                       wrapper = widget.domNode.parentNode;
-               }
-
-               dojo.attr(wrapper, {
-                       id: id,
-                       style: {
-                               zIndex: this._beginZIndex + stack.length
-                       },
-                       "class": "dijitPopup " + (widget.baseClass || widget["class"] || "").split(" ")[0] +"Popup",
-                       dijitPopupParent: args.parent ? args.parent.id : ""
-               });
-
-               if(dojo.isIE || dojo.isMoz){
-                       var iframe = wrapper.childNodes[1];
-                       if(!iframe){
-                               iframe = new dijit.BackgroundIframe(wrapper);
-                       }
-               }
-
-               // position the wrapper node and make it visible
-               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";
-               widget.domNode.style.visibility = "visible";    // counteract effects from _HasDropDown
-
-               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 = this.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", this, function(){
-                       var topPopup = this.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;
-       },
-
-       close: function(/*dijit._Widget*/ popup){
-               // summary:
-               //              Close specified popup and any popups that it parented
-
-               var stack = this._stack;
-
-               // 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 plus it's wrapper off screen, unless it has already been destroyed in above onClose() etc.
-                       if(widget && widget.domNode){
-                               this.moveOffScreen(widget.domNode);
-                       }else{
-                               dojo.destroy(wrapper);
-                       }
-                        
-                       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.
-                       dijit.setWaiRole(iframe,"presentation");
-               }
-               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.
-       //              Deprecated, use `dojo.window.scrollIntoView` instead.
-       
-       dojo.window.scrollIntoView(node, pos);
-};
-
-}
-
-if(!dojo._hasResource["dojo.uacss"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.uacss"] = true;
-dojo.provide("dojo.uacss");
-
-(function(){
-       // 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.
-
-       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_quirks: d.isQuirks,
-                       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
-       var classStr = "";
-       for(var clz in classes){
-               if(classes[clz]){
-                       classStr += clz + " ";
-               }
-       }
-       html.className = d.trim(html.className + " " + classStr);
-
-       // If RTL mode, then add dj_rtl flag plus repeat existing classes with -rtl extension.
-       // We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl).  
-       // Unshift() is to run sniff code before the parser.
-       dojo._loaders.unshift(function(){
-               if(!dojo._isBodyLtr()){
-                       var rtlClassStr = "dj_rtl dijitRtl " + classStr.replace(/ /g, "-rtl ")
-                       html.className = d.trim(html.className + " " + rtlClassStr);
-               }
-       });
-})();
-
-}
-
-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, see
-//             `dojo.uacss` for details.
-//
-//             Simply doing a require on this module will
-//             establish this CSS.  Modified version of Morris' CSS hack.
-
-dojo.provide("dijit._base.sniff");
-
-
-
-}
-
-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, timer is at most minDelay (default 10ms) 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)),
-                       this._minDelay);
-               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, /*Number?*/ minDelay){
-               // 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 (optional):
-               //              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 (optional):
-               //              the number of milliseconds until the 2nd event occurs, default=500ms
-               // minDelay (optional):
-               //              the maximum delay in milliseconds for event to fire, default=10ms
-               if(obj != this._obj){
-                       this.stop();
-                       this._initialDelay = initialDelay || 500;
-                       this._subsequentDelay = subsequentDelay || 0.90;
-                       this._minDelay = minDelay || 10;
-                       this._obj = obj;
-                       this._evt = evt;
-                       this._node = node;
-                       this._currentTimeout = -1;
-                       this._count = -1;
-                       this._callback = dojo.hitch(_this, callback);
-                       this._fireEventAndReload();
-                       this._evt = dojo.mixin({faux: true}, evt);
-               }
-       },
-
-       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, /*Number?*/ minDelay){
-               // 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 callback 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(evt, _this, node, callback, keyObject, subsequentDelay, initialDelay, minDelay);
-                               }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, /*Number?*/ minDelay){
-               // 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, minDelay);
-                       }),
-                       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){
-                               evt.preventDefault();
-                       }),
-                       dc(node, "dblclick", this, function(evt){
-                               dojo.stopEvent(evt);
-                               if(dojo.isIE){
-                                       dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay, minDelay);
-                                       setTimeout(dojo.hitch(this, dijit.typematic.stop), 50);
-                               }
-                       })
-               ];
-       },
-
-       addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
-               // 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, minDelay).concat(
-                       this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay, minDelay));
-       }
-};
-
-}
-
-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.forEach(dojo.map(["FullYear", "Month", "Date", "Hours", "Minutes", "Seconds", "Milliseconds"], function(prop){
-                               return defaultTime["get" + prop]();
-                       }), function(value, index){
-                               match[index] = 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");
-
-
-new Date("X"); // workaround for #11279, new Date("") == NaN
-
-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 === "" || 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"
-                                               // or a single word function "return"
-                                               return d.getObject(value, false) || new Function(value);
-                                       }
-                               }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(!cls){ return null; }                // class not defined [yet]
-
-                       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 startup method to allow them to connect with
-               //              any children.
-               // nodes: Array
-               //              Array of nodes or objects like
-               //      |               {
-               //      |                       type: "dijit.form.Button",
-               //      |                       node: DOMNode,
-               //      |                       scripts: [ ... ],       // array of <script type="dojo/..."> children of node
-               //      |                       inherited: { ... }      // settings inherited from ancestors like dir, theme, etc.
-               //      |               }
-               // 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.
-               //              Supports 'noStart' and inherited.
-               var thelist = [], dp = dojo.parser;
-               mixin = mixin||{};
-               args = args||{};
-               
-               d.forEach(nodes, function(obj){
-                       if(!obj){ return; }
-
-                       // Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc.s
-                       var node, type, clsInfo, clazz, scripts;
-                       if(obj.node){
-                               // new format of nodes[] array, object w/lots of properties pre-computed for me
-                               node = obj.node;
-                               type = obj.type;
-                               clsInfo = obj.clsInfo || (type && getClassInfo(type));
-                               clazz = clsInfo && clsInfo.cls;
-                               scripts = obj.scripts;
-                       }else{
-                               // old (backwards compatible) format of nodes[] array, simple array of DOMNodes
-                               node = obj;
-                               type = dp._attrName in mixin ? mixin[dp._attrName] : node.getAttribute(dp._attrName);
-                               clsInfo = type && getClassInfo(type);
-                               clazz = clsInfo && clsInfo.cls;
-                               scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] : 
-                                                       d.query("> script[type^='dojo/']", node));
-                       }
-                       if(!clsInfo){
-                               throw new Error("Could not load class '" + type);
-                       }
-
-                       // Setup hash to hold parameter settings for this widget.   Start with the parameter
-                       // settings inherited from ancestors ("dir" and "lang").
-                       // Inherited setting may later be overridden by explicit settings on node itself.
-                       var params = {},
-                               attributes = node.attributes;
-                       if(args.defaults){
-                               // settings for the document itself (or whatever subtree is being parsed)
-                               dojo.mixin(params, args.defaults);
-                       }
-                       if(obj.inherited){
-                               // settings from dir=rtl or lang=... on a node above this node
-                               dojo.mixin(params, obj.inherited);
-                       }
-
-                       // read parameters (ie, attributes) specified on DOMNode
-                       // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
-                       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 />
-                       var connects = [],      // functions to connect after instantiation
-                               calls = [];             // functions to call after instantiation
-
-                       d.forEach(scripts, function(script){
-                               node.removeChild(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
-                       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){
-                       // TODO: for 2.0, when old instantiate() API is desupported, store parent-child
-                       // relationships in the nodes[] array so that no getParent() call is needed.
-                       // Note that will  require a parse() call from ContentPane setting a param that the
-                       // ContentPane is the parent widget (so that the parse doesn't call startup() on the
-                       // ContentPane's children)
-                       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. 
-               //                      * inherited: Object
-               //                              Hash possibly containing dir and lang settings to be applied to
-               //                              parsed widgets, unless there's another setting on a sub-node that overrides
-               //
-               //
-               // 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 attrName = this._attrName;
-               function scan(parent, list){
-                       // summary:
-                       //              Parent is an Object representing a DOMNode, with or without a dojoType specified.
-                       //              Scan parent's children looking for nodes with dojoType specified, storing in list[].
-                       //              If parent has a dojoType, also collects <script type=dojo/*> children and stores in parent.scripts[].
-                       // parent: Object
-                       //              Object representing the parent node, like
-                       //      |       {
-                       //      |               node: DomNode,                  // scan children of this node
-                       //      |               inherited: {dir: "rtl"},        // dir/lang setting inherited from above node
-                       //      |
-                       //      |               // attributes only set if node has dojoType specified
-                       //      |               scripts: [],                    // empty array, put <script type=dojo/*> in here
-                       //      |               clsInfo: { cls: dijit.form.Button, ...}
-                       //      |       }
-                       // list: DomNode[]
-                       //              Output array of objects (same format as parent) representing nodes to be turned into widgets
-
-                       // Effective dir and lang settings on parent node, either set directly or inherited from grandparent
-                       var inherited = dojo.clone(parent.inherited);
-                       dojo.forEach(["dir", "lang"], function(name){
-                               var val = parent.node.getAttribute(name);
-                               if(val){
-                                       inherited[name] = val;
-                               }
-                       });
-
-                       // if parent is a widget, then search for <script type=dojo/*> tags and put them in scripts[].
-                       var scripts = parent.scripts;
-
-                       // unless parent is a widget with the stopParser flag set, continue search for dojoType, recursively
-                       var recurse = !parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser;
-
-                       // scan parent's children looking for dojoType and <script type=dojo/*>
-                       for(var child = parent.node.firstChild; child; child = child.nextSibling){
-                               if(child.nodeType == 1){
-                                       var type = recurse && child.getAttribute(attrName);
-                                       if(type){
-                                               // if dojoType specified, add to output array of nodes to instantiate
-                                               var params = {
-                                                       "type": type,
-                                                       clsInfo: getClassInfo(type),    // note: won't find classes declared via dojo.Declaration
-                                                       node: child,
-                                                       scripts: [], // <script> nodes that are parent's children
-                                                       inherited: inherited // dir & lang attributes inherited from parent
-                                               };
-                                               list.push(params);
-
-                                               // Recurse, collecting <script type="dojo/..."> children, and also looking for
-                                               // descendant nodes with dojoType specified (unless the widget has the stopParser flag),
-                                               scan(params, list);
-                                       }else if(scripts && child.nodeName.toLowerCase() == "script"){
-                                               // if <script type="dojo/...">, save in scripts[]
-                                               type = child.getAttribute("type");
-                                               if (type && /^dojo\//i.test(type)) {
-                                                       scripts.push(child);
-                                               }
-                                       }else if(recurse){
-                                               // Recurse, looking for grandchild nodes with dojoType specified
-                                               scan({
-                                                       node: child,
-                                                       inherited: inherited
-                                               }, list);
-                                       }
-                               }
-                       }
-               }
-
-               // Make list of all nodes on page w/dojoType specified
-               var list = [];
-               scan({
-                       node: root ? dojo.byId(root) : dojo.body(),
-                       inherited: (args && args.inherited) || {
-                               dir: dojo._isBodyLtr() ? "ltr" : "rtl"
-                       }
-               }, list);
-
-               // 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
-       //              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".  If undefined, widgets renders in page's
-       //              default direction.
-       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: "",
-
-       // baseClass: [protected] String
-       //              Root CSS class of the widget (ex: dijitTextBox), used to construct CSS classes to indicate
-       //              widget state.
-       baseClass: "",
-
-       // 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.set(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
-
-               // baseClass is a single class name or occasionally a space-separated list of names.
-               // Add those classes to the DOMNod.  If RTL mode then also add with Rtl suffix.         
-               if(this.baseClass){
-                       var classes = this.baseClass.split(" ");
-                       if(!this.isLeftToRight()){
-                               classes = classes.concat( dojo.map(classes, function(name){ return name+"Rtl"; }));
-                       }
-                       dojo.addClass(this.domNode, classes);
-               }
-       },
-
-       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 set() instead.
-               // tags:
-               //              deprecated
-               dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.", "", "2.0");
-               this.set(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:
-               //              This method is deprecated, use get() or set() directly.
-
-               // Print deprecation warning but only once per calling function
-               if(dojo.config.isDebug){
-                       var alreadyCalledHash = arguments.callee._ach || (arguments.callee._ach = {}),
-                               caller = (arguments.callee.caller || "unknown caller").toString();
-                       if(!alreadyCalledHash[caller]){
-                               dojo.deprecated(this.declaredClass + "::attr() is deprecated. Use get() or set() instead, called from " +
-                               caller, "", "2.0");
-                               alreadyCalledHash[caller] = true;
-                       }
-               }
-
-               var args = arguments.length;
-               if(args >= 2 || typeof name === "object"){ // setter
-                       return this.set.apply(this, arguments);
-               }else{ // getter
-                       return this.get(name);
-               }
-       },
-       
-       get: function(name){
-               // summary:
-               //              Get a property from a widget.
-               //      name:
-               //              The property to get.
-               // description:
-               //              Get a named property from a widget. The property may
-               //              potentially be retrieved via a getter method. If no getter is defined, this
-               //              just retrieves the object's property.  
-               //              For example, if the widget has a properties "foo"
-               //              and "bar" and a method named "_getFooAttr", calling:
-               //      |       myWidget.get("foo");
-               //              would be equivalent to writing:
-               //      |       widget._getFooAttr();
-               //              and:
-               //      |       myWidget.get("bar");
-               //              would be equivalent to writing:
-               //      |       widget.bar;
-               var names = this._getAttrNames(name);
-               return this[names.g] ? this[names.g]() : this[name];
-       },
-       
-       set: function(name, value){
-               // summary:
-               //              Set a property on a widget
-               //      name:
-               //              The property to set. 
-               //      value:
-               //              The value to set in the property.
-               // description:
-               //              Sets named properties on a widget which may potentially be handled by a 
-               //              setter in the widget.
-               //              For example, if the widget has a properties "foo"
-               //              and "bar" and a method named "_setFooAttr", calling:
-               //      |       myWidget.set("foo", "Howdy!");
-               //              would be equivalent to writing:
-               //      |       widget._setFooAttr("Howdy!");
-               //              and:
-               //      |       myWidget.set("bar", 3);
-               //              would be equivalent to writing:
-               //      |       widget.bar = 3;
-               //
-               //      set() may also be called with a hash of name/value pairs, ex:
-               //      |       myWidget.set({
-               //      |               foo: "Howdy",
-               //      |               bar: 3
-               //      |       })
-               //      This is equivalent to calling set(foo, "Howdy") and set(bar, 3)
-
-               if(typeof name === "object"){
-                       for(var x in name){
-                               this.set(x, name[x]); 
-                       }
-                       return this;
-               }
-               var names = this._getAttrNames(name);
-               if(this[names.s]){
-                       // use the explicit setter
-                       var result = this[names.s].apply(this, Array.prototype.slice.call(arguments, 1));
-               }else{
-                       // if param is specified as DOM node attribute, copy it
-                       if(name in this.attributeMap){
-                               this._attrToDom(name, value);
-                       }
-                       var oldValue = this[name];
-                       // FIXME: what about function assignments? Any way to connect() here?
-                       this[name] = value;
-               }
-               return result || this;
-       },
-       
-       _attrPairNames: {},             // shared between all widgets
-       _getAttrNames: function(name){
-               // summary:
-               //              Helper function for get() and set().
-               //              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(dojo.indexOf(this.nodesWithKeyClick, obj.nodeName.toLowerCase()) == -1){ // is NOT input or button
-                               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;
-                                                       e.preventDefault();             // 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.set("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:
-               //              Return this widget's explicit or implicit orientation (true for LTR, false for RTL)
-               // tags:
-               //              protected
-               return this.dir ? (this.dir == "ltr") : 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
-       },
-
-       onClose: function(){
-               // summary:
-               //              Called when this widget is being displayed as a popup (ex: a Calendar popped
-               //              up from a DateTextBox), and it is hidden.
-               //              This is called from the dijit.popup code, and should not be called directly.
-               //
-               //              Also used as a parameter for children of `dijit.layout.StackContainer` or subclasses.
-               //              Callback if a user tries to close the child.   Child will be closed if this function returns true.
-               // tags:
-               //              extension
-
-               return true;            // Boolean
-       }
-});
-
-})();
-
-}
-
-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(typeof val == "string"){
-                       //We have a string, set cache value
-                       val = cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
-               }else if(val === null){
-                       //Remove cached value
-                       delete cache[key];
-               }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,
-                                       inherited: {dir: this.dir, lang: this.lang}
-                               }));
-
-                               // 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){
-                               var node = widget.domNode;
-                               if(node && node.parentNode){
-                                       node.parentNode.removeChild(node); // detach but don't destroy
-                               }
-                       }
-               },
-
-               hasChildren: function(){
-                       // summary:
-                       //              Returns true if widget has children, i.e. if this.containerNode contains something.
-                       return this.getChildren().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");
-
-                       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._CssStateMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._CssStateMixin"] = true;
-dojo.provide("dijit._CssStateMixin");
-
-
-dojo.declare("dijit._CssStateMixin", [], {
-       // summary:
-       //              Mixin for widgets to set CSS classes on the widget DOM nodes depending on hover/mouse press/focus
-       //              state changes, and also higher-level state changes such becoming disabled or selected.
-       //
-       // description:
-       //              By mixing this class into your widget, and setting the this.baseClass attribute, it will automatically
-       //              maintain CSS classes on the widget root node (this.domNode) depending on hover,
-       //              active, focus, etc. state.   Ex: with a baseClass of dijitButton, it will apply the classes
-       //              dijitButtonHovered and dijitButtonActive, as the user moves the mouse over the widget and clicks it.
-       //
-       //              It also sets CSS like dijitButtonDisabled based on widget semantic state.
-       //
-       //              By setting the cssStateNodes attribute, a widget can also track events on subnodes (like buttons
-       //              within the widget).
-
-       // cssStateNodes: [protected] Object
-       //              List of sub-nodes within the widget that need CSS classes applied on mouse hover/press and focus
-       //.
-       //              Each entry in the hash is a an attachpoint names (like "upArrowButton") mapped to a CSS class names
-       //              (like "dijitUpArrowButton"). Example:
-       //      |               {
-       //      |                       "upArrowButton": "dijitUpArrowButton",
-       //      |                       "downArrowButton": "dijitDownArrowButton"
-       //      |               }
-       //              The above will set the CSS class dijitUpArrowButton to the this.upArrowButton DOMNode when it
-       //              is hovered, etc.
-       cssStateNodes: {},
-
-       postCreate: function(){
-               this.inherited(arguments);
-
-               // Automatically monitor mouse events (essentially :hover and :active) on this.domNode
-               dojo.forEach(["onmouseenter", "onmouseleave", "onmousedown"], function(e){
-                       this.connect(this.domNode, e, "_cssMouseEvent");
-               }, this);
-               
-               // Monitoring changes to disabled, readonly, etc. state, and update CSS class of root node
-               this.connect(this, "set", function(name, value){
-                       if(arguments.length >= 2 && {disabled: true, readOnly: true, checked:true, selected:true}[name]){
-                               this._setStateClass();
-                       }
-               });
-
-               // The widget coming in/out of the focus change affects it's state
-               dojo.forEach(["_onFocus", "_onBlur"], function(ap){
-                       this.connect(this, ap, "_setStateClass");
-               }, this);
-
-               // Events on sub nodes within the widget
-               for(var ap in this.cssStateNodes){
-                       this._trackMouseState(this[ap], this.cssStateNodes[ap]);
-               }
-               // Set state initially; there's probably no hover/active/focus state but widget might be
-               // disabled/readonly so we want to set CSS classes for those conditions.
-               this._setStateClass();
-       },
-
-       _cssMouseEvent: function(/*Event*/ event){
-               // summary:
-               //      Sets _hovering and _active properties depending on mouse state,
-               //      then calls _setStateClass() to set appropriate CSS classes for this.domNode.
-
-               if(!this.disabled){
-                       switch(event.type){
-                               case "mouseenter":
-                               case "mouseover":       // generated on non-IE browsers even though we connected to mouseenter
-                                       this._hovering = true;
-                                       this._active = this._mouseDown;
-                                       break;
-
-                               case "mouseleave":
-                               case "mouseout":        // generated on non-IE browsers even though we connected to 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 this.domNode before the mouse up event.
-                                       // Alternately could set active=false on mouseout.
-                                       var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
-                                               this._active = false;
-                                               this._mouseDown = false;
-                                               this._setStateClass();
-                                               this.disconnect(mouseUpConnector);
-                                       });
-                                       break;
-                       }
-                       this._setStateClass();
-               }
-       },
-
-       _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".
-               //
-               //              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.isLeftToRight()){
-                       // For RTL mode we need to set an addition class like dijitTextBoxRtl.
-                       multiply("Rtl");
-               }
-
-               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("Active");
-                       }else if(this._hovering){
-                               multiply("Hover");
-                       }
-               }
-
-               if(this._focused){
-                       multiply("Focused");
-               }
-
-               // 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;
-       },
-
-       _trackMouseState: function(/*DomNode*/ node, /*String*/ clazz){
-               // summary:
-               //              Track mouse/focus events on specified node and set CSS class on that node to indicate
-               //              current state.   Usually not called directly, but via cssStateNodes attribute.
-               // description:
-               //              Given class=foo, will set the following CSS class on the node
-               //                      - fooActive: if the user is currently pressing down the mouse button while over the node
-               //                      - fooHover: if the user is hovering the mouse over the node, but not pressing down a button
-               //                      - fooFocus: if the node is focused
-               //
-               //              Note that it won't set any classes if the widget is disabled.
-               // node: DomNode
-               //              Should be a sub-node of the widget, not the top node (this.domNode), since the top node
-               //              is handled specially and automatically just by mixing in this class.
-               // clazz: String
-               //              CSS class name (ex: dijitSliderUpArrow).
-
-               // Current state of node (initially false)
-               // NB: setting specifically to false because dojo.toggleClass() needs true boolean as third arg
-               var hovering=false, active=false, focused=false;
-
-               var self = this,
-                       cn = dojo.hitch(this, "connect", node);
-
-               function setClass(){
-                       var disabled = ("disabled" in self && self.disabled) || ("readonly" in self && self.readonly);
-                       dojo.toggleClass(node, clazz+"Hover", hovering && !active && !disabled);
-                       dojo.toggleClass(node, clazz+"Active", active && !disabled);
-                       dojo.toggleClass(node, clazz+"Focused", focused && !disabled);
-               }
-
-               // Mouse
-               cn("onmouseenter", function(){
-                       hovering = true;
-                       setClass();
-               });
-               cn("onmouseleave", function(){
-                       hovering = false;
-                       active = false;
-                       setClass();
-               });
-               cn("onmousedown", function(){
-                       active = true;
-                       setClass();
-               });
-               cn("onmouseup", function(){
-                       active = false;
-                       setClass();
-               });
-
-               // Focus
-               cn("onfocus", function(){
-                       focused = true;
-                       setClass();
-               });
-               cn("onblur", function(){
-                       focused = false;
-                       setClass();
-               });
-
-               // Just in case widget is enabled/disabled while it has focus/hover/active state.
-               // Maybe this is overkill.
-               this.connect(this, "set", function(name, value){
-                       if(name == "disabled" || name == "readOnly"){
-                               setClass();
-                       }
-               });
-       }
-});
-
-}
-
-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, dijit._CssStateMixin],
-       {
-       // 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.
-
-       // 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
-               // Regarding escaping, see heading "Attribute values" in
-               // http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
-               this.nameAttrSetting = this.name ? ('name="' + this.name.replace(/'/g, "&quot;") + '"') : '';
-               this.inherited(arguments);
-       },
-
-       postCreate: function(){
-               this.inherited(arguments);
-               this.connect(this.domNode, "onmousedown", "_onMouseDown");
-       },
-
-       _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 these, because after the domNode is disabled, we can no longer receive
-                       // mouse related events, see #4200
-                       this._hovering = false;
-                       this._active = false;
-
-                       // clear tab stop(s) on this widget's focusable node(s)  (ComboBox has two focusable nodes)
-                       var attachPointNames = "tabIndex" in this.attributeMap ? this.attributeMap.tabIndex : "focusNode";
-                       dojo.forEach(dojo.isArray(attachPointNames) ? attachPointNames : [attachPointNames], function(attachPointName){
-                               var node = this[attachPointName];
-                               // complex code because tabIndex=-1 on a <div> doesn't work on FF
-                               if(dojo.isWebKit || dijit.hasDefaultTabStop(node)){     // see #11064 about webkit bug
-                                       node.setAttribute('tabIndex', "-1");
-                               }else{
-                                       node.removeAttribute('tabIndex');                               
-                               }
-                       }, this);
-               }else{
-                       this.focusNode.setAttribute('tabIndex', this.tabIndex);
-               }
-       },
-
-       setDisabled: function(/*Boolean*/ disabled){
-               // summary:
-               //              Deprecated.   Use set('disabled', ...) instead.
-               dojo.deprecated("setDisabled("+disabled+") is deprecated. Use set('disabled',"+disabled+") instead.", "", "2.0");
-               this.set('disabled', disabled);
-       },
-
-       _onFocus: function(e){
-               if(this.scrollOnFocus){
-                       dojo.window.scrollIntoView(this.domNode);
-               }
-               this.inherited(arguments);
-       },
-
-       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);
-       },
-
-       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;
-       },
-
-       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 set('value', ...) instead.
-               dojo.deprecated("dijit.form._FormWidget:setValue("+value+") is deprecated.  Use set('value',"+value+") instead.", "", "2.0");
-               this.set('value', value);
-       },
-
-       getValue: function(){
-               // summary:
-               //              Deprecated.   Use get('value') instead.
-               dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.", "", "2.0");
-               return this.get('value');
-       },
-       
-       _onMouseDown: function(e){
-               // If user clicks on the button, even if the mouse is released outside of it,
-               // this button should get focus (to mimics native browser buttons).
-               // This is also needed on chrome because otherwise buttons won't get focus at all,
-               // which leads to bizarre focus restore on Dialog close etc.
-               if(!e.ctrlKey && this.isFocusable()){ // !e.ctrlKey to ignore right-click on mac
-                       // Set a global event to handle mouseup, so it fires properly
-                       // even if the cursor leaves this.domNode before the mouse up event.
-                       var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
-                               if (this.isFocusable()) {
-                                       this.focus();
-                               }
-                               this.disconnect(mouseUpConnector);
-                       });
-               }
-       }
-});
-
-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);
-       },
-
-       postCreate: function(){
-               this.inherited(arguments);
-
-               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.set()
-               // 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
-                       var _this = this;
-                       while(parent && parent.clientHeight == 0){ // search for parents that haven't rendered yet
-                               (function ping(){
-                                       var disconnectHandle = _this.connect(parent, "onscroll",
-                                               function(e){
-                                                       _this.disconnect(disconnectHandle); // only call once
-                                                       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
-
-
-
-
-
-
-
-}
-
index 7410620229313189b23977e008e63fcd67073b22..77846776f57ce5a0d371f411b629cf7341a62f12 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.Button"]){
-dojo._hasResource["dijit.form.Button"]=true;
+if(!dojo._hasResource["dijit.form.Button"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.Button"] = true;
 dojo.provide("dijit.form.Button");
 dojo.require("dijit.form._FormWidget");
 dojo.require("dijit._Container");
 dojo.require("dijit._HasDropDown");
-dojo.declare("dijit.form.Button",dijit.form._FormWidget,{label:"",showLabel:true,iconClass:"",type:"button",baseClass:"dijitButton",templateString:dojo.cache("dijit.form","templates/Button.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"valueNode",iconClass:{node:"iconNode",type:"class"}}),_onClick:function(e){
-if(this.disabled){
-return false;
-}
-this._clicked();
-return this.onClick(e);
-},_onButtonClick:function(e){
-if(this._onClick(e)===false){
-e.preventDefault();
-}else{
-if(this.type=="submit"&&!(this.valueNode||this.focusNode).form){
-for(var _1=this.domNode;_1.parentNode;_1=_1.parentNode){
-var _2=dijit.byNode(_1);
-if(_2&&typeof _2._onSubmit=="function"){
-_2._onSubmit(e);
-break;
-}
-}
-}else{
-if(this.valueNode){
-this.valueNode.click();
-e.preventDefault();
-}
-}
-}
-},_fillContent:function(_3){
-if(_3&&(!this.params||!("label" in this.params))){
-this.set("label",_3.innerHTML);
-}
-},postCreate:function(){
-dojo.setSelectable(this.focusNode,false);
-this.inherited(arguments);
-},_setShowLabelAttr:function(_4){
-if(this.containerNode){
-dojo.toggleClass(this.containerNode,"dijitDisplayNone",!_4);
-}
-this.showLabel=_4;
-},onClick:function(e){
-return true;
-},_clicked:function(e){
-},setLabel:function(_5){
-dojo.deprecated("dijit.form.Button.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");
-this.set("label",_5);
-},_setLabelAttr:function(_6){
-this.containerNode.innerHTML=this.label=_6;
-if(this.showLabel==false&&!this.params.title){
-this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");
-}
-}});
-dojo.declare("dijit.form.DropDownButton",[dijit.form.Button,dijit._Container,dijit._HasDropDown],{baseClass:"dijitDropDownButton",templateString:dojo.cache("dijit.form","templates/DropDownButton.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),_fillContent:function(){
-if(this.srcNodeRef){
-var _7=dojo.query("*",this.srcNodeRef);
-dijit.form.DropDownButton.superclass._fillContent.call(this,_7[0]);
-this.dropDownContainer=this.srcNodeRef;
-}
-},startup:function(){
-if(this._started){
-return;
-}
-if(!this.dropDown){
-var _8=dojo.query("[widgetId]",this.dropDownContainer)[0];
-this.dropDown=dijit.byNode(_8);
-delete this.dropDownContainer;
-}
-dijit.popup.moveOffScreen(this.dropDown.domNode);
-this.inherited(arguments);
-},isLoaded:function(){
-var _9=this.dropDown;
-return (!_9.href||_9.isLoaded);
-},loadDropDown:function(){
-var _a=this.dropDown;
-if(!_a){
-return;
-}
-if(!this.isLoaded()){
-var _b=dojo.connect(_a,"onLoad",this,function(){
-dojo.disconnect(_b);
-this.openDropDown();
+
+
+dojo.declare("dijit.form.Button",
+       dijit.form._FormWidget,
+       {
+       // summary:
+       //              Basically the same thing as a normal HTML button, but with special styling.
+       // description:
+       //              Buttons can display a label, an icon, or both.
+       //              A label should always be specified (through innerHTML) or the label
+       //              attribute.  It can be hidden via showLabel=false.
+       // example:
+       // |    <button dojoType="dijit.form.Button" onClick="...">Hello world</button>
+       //
+       // example:
+       // |    var button1 = new dijit.form.Button({label: "hello world", onClick: foo});
+       // |    dojo.body().appendChild(button1.domNode);
+
+       // label: HTML String
+       //              Text to display in button.
+       //              If the label is hidden (showLabel=false) then and no title has
+       //              been specified, then label is also set as title attribute of icon.
+       label: "",
+
+       // showLabel: Boolean
+       //              Set this to true to hide the label text and display only the icon.
+       //              (If showLabel=false then iconClass must be specified.)
+       //              Especially useful for toolbars.
+       //              If showLabel=true, the label will become the title (a.k.a. tooltip/hint) of the icon.
+       //
+       //              The exception case is for computers in high-contrast mode, where the label
+       //              will still be displayed, since the icon doesn't appear.
+       showLabel: true,
+
+       // iconClass: String
+       //              Class to apply to DOMNode in button to make it display an icon
+       iconClass: "",
+
+       // type: String
+       //              Defines the type of button.  "button", "submit", or "reset".
+       type: "button",
+
+       baseClass: "dijitButton",
+
+       templateString: dojo.cache("dijit.form", "templates/Button.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\" tabIndex=\"-1\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),
+
+       attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
+               value: "valueNode"
+       }),
+
+       _onClick: function(/*Event*/ e){
+               // summary:
+               //              Internal function to handle click actions
+               if(this.disabled){
+                       return false;
+               }
+               this._clicked(); // widget click actions
+               return this.onClick(e); // user click actions
+       },
+
+       _onButtonClick: function(/*Event*/ e){
+               // summary:
+               //              Handler when the user activates the button portion.
+               if(this._onClick(e) === false){ // returning nothing is same as true
+                       e.preventDefault(); // needed for checkbox
+               }else if(this.type == "submit" && !(this.valueNode||this.focusNode).form){ // see if a nonform widget needs to be signalled
+                       for(var node=this.domNode; node.parentNode/*#5935*/; node=node.parentNode){
+                               var widget=dijit.byNode(node);
+                               if(widget && typeof widget._onSubmit == "function"){
+                                       widget._onSubmit(e);
+                                       break;
+                               }
+                       }
+               }else if(this.valueNode){
+                       this.valueNode.click();
+                       e.preventDefault(); // cancel BUTTON click and continue with hidden INPUT click
+               }
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+               dojo.setSelectable(this.focusNode, false);
+       },
+
+       _fillContent: function(/*DomNode*/ source){
+               // Overrides _Templated._fillContent().
+               // If button label is specified as srcNodeRef.innerHTML rather than
+               // this.params.label, handle it here.
+               // TODO: remove the method in 2.0, parser will do it all for me
+               if(source && (!this.params || !("label" in this.params))){
+                       this.set('label', source.innerHTML);
+               }
+       },
+
+       _setShowLabelAttr: function(val){
+               if(this.containerNode){
+                       dojo.toggleClass(this.containerNode, "dijitDisplayNone", !val);
+               }
+               this._set("showLabel", val);
+       },
+
+       onClick: function(/*Event*/ e){
+               // summary:
+               //              Callback for when button is clicked.
+               //              If type="submit", return true to perform submit, or false to cancel it.
+               // type:
+               //              callback
+               return true;            // Boolean
+       },
+
+       _clicked: function(/*Event*/ e){
+               // summary:
+               //              Internal overridable function for when the button is clicked
+       },
+
+       setLabel: function(/*String*/ content){
+               // summary:
+               //              Deprecated.  Use set('label', ...) instead.
+               dojo.deprecated("dijit.form.Button.setLabel() is deprecated.  Use set('label', ...) instead.", "", "2.0");
+               this.set("label", content);
+       },
+
+       _setLabelAttr: function(/*String*/ content){
+               // summary:
+               //              Hook for set('label', ...) to work.
+               // description:
+               //              Set the label (text) of the button; takes an HTML string.
+               this._set("label", content);
+               this.containerNode.innerHTML = content;
+               if(this.showLabel == false && !this.params.title){
+                       this.titleNode.title = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || '');
+               }
+       },
+
+       _setIconClassAttr: function(/*String*/ val){
+               // Custom method so that icon node is hidden when not in use, to avoid excess padding/margin
+               // appearing around it (even if it's a 0x0 sized <img> node)
+
+               var oldVal = this.iconClass || "dijitNoIcon",
+                       newVal = val || "dijitNoIcon";
+               dojo.replaceClass(this.iconNode, newVal, oldVal);
+               this._set("iconClass", val);
+       }
 });
-_a.refresh();
-}else{
-this.openDropDown();
-}
-},isFocusable:function(){
-return this.inherited(arguments)&&!this._mouseDown;
-}});
-dojo.declare("dijit.form.ComboButton",dijit.form.DropDownButton,{templateString:dojo.cache("dijit.form","templates/ComboButton.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{id:"",tabIndex:["focusNode","titleNode"],title:"titleNode"}),optionsTitle:"",baseClass:"dijitComboButton",cssStateNodes:{"buttonNode":"dijitButtonNode","titleNode":"dijitButtonContents","_popupStateNode":"dijitDownArrowButton"},_focusedNode:null,_onButtonKeyPress:function(_c){
-if(_c.charOrCode==dojo.keys[this.isLeftToRight()?"RIGHT_ARROW":"LEFT_ARROW"]){
-dijit.focus(this._popupStateNode);
-dojo.stopEvent(_c);
-}
-},_onArrowKeyPress:function(_d){
-if(_d.charOrCode==dojo.keys[this.isLeftToRight()?"LEFT_ARROW":"RIGHT_ARROW"]){
-dijit.focus(this.titleNode);
-dojo.stopEvent(_d);
-}
-},focus:function(_e){
-dijit.focus(_e=="start"?this.titleNode:this._popupStateNode);
-}});
-dojo.declare("dijit.form.ToggleButton",dijit.form.Button,{baseClass:"dijitToggleButton",checked:false,attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{checked:"focusNode"}),_clicked:function(_f){
-this.set("checked",!this.checked);
-},_setCheckedAttr:function(_10,_11){
-this.checked=_10;
-dojo.attr(this.focusNode||this.domNode,"checked",_10);
-dijit.setWaiState(this.focusNode||this.domNode,"pressed",_10);
-this._handleOnChange(_10,_11);
-},setChecked:function(_12){
-dojo.deprecated("setChecked("+_12+") is deprecated. Use set('checked',"+_12+") instead.","","2.0");
-this.set("checked",_12);
-},reset:function(){
-this._hasBeenBlurred=false;
-this.set("checked",this.params.checked||false);
-}});
+
+
+dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container, dijit._HasDropDown], {
+       // summary:
+       //              A button with a drop down
+       //
+       // example:
+       // |    <button dojoType="dijit.form.DropDownButton" label="Hello world">
+       // |            <div dojotype="dijit.Menu">...</div>
+       // |    </button>
+       //
+       // example:
+       // |    var button1 = new dijit.form.DropDownButton({ label: "hi", dropDown: new dijit.Menu(...) });
+       // |    dojo.body().appendChild(button1);
+       //
+
+       baseClass : "dijitDropDownButton",
+
+       templateString: dojo.cache("dijit.form", "templates/DropDownButton.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\trole=\"button\" aria-haspopup=\"true\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\" tabIndex=\"-1\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),
+
+       _fillContent: function(){
+               // Overrides Button._fillContent().
+               //
+               // My inner HTML contains both the button contents and a drop down widget, like
+               // <DropDownButton>  <span>push me</span>  <Menu> ... </Menu> </DropDownButton>
+               // The first node is assumed to be the button content. The widget is the popup.
+
+               if(this.srcNodeRef){ // programatically created buttons might not define srcNodeRef
+                       //FIXME: figure out how to filter out the widget and use all remaining nodes as button
+                       //      content, not just nodes[0]
+                       var nodes = dojo.query("*", this.srcNodeRef);
+                       dijit.form.DropDownButton.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; }
+
+               // the child widget from srcNodeRef is the dropdown widget.  Insert it in the page DOM,
+               // make it invisible, and store a reference to pass to the popup code.
+               if(!this.dropDown && this.dropDownContainer){
+                       var dropDownNode = dojo.query("[widgetId]", this.dropDownContainer)[0];
+                       this.dropDown = dijit.byNode(dropDownNode);
+                       delete this.dropDownContainer;
+               }
+               if(this.dropDown){
+                       dijit.popup.hide(this.dropDown);
+               }
+
+               this.inherited(arguments);
+       },
+
+       isLoaded: function(){
+               // Returns whether or not we are loaded - if our dropdown has an href,
+               // then we want to check that.
+               var dropDown = this.dropDown;
+               return (!!dropDown && (!dropDown.href || dropDown.isLoaded));
+       },
+
+       loadDropDown: function(){
+               // Loads our dropdown
+               var dropDown = this.dropDown;
+               if(!dropDown){ return; }
+               if(!this.isLoaded()){
+                       var handler = dojo.connect(dropDown, "onLoad", this, function(){
+                               dojo.disconnect(handler);
+                               this.openDropDown();
+                       });
+                       dropDown.refresh();
+               }else{
+                       this.openDropDown();
+               }
+       },
+
+       isFocusable: function(){
+               // Overridden so that focus is handled by the _HasDropDown mixin, not by
+               // the _FormWidget mixin.
+               return this.inherited(arguments) && !this._mouseDown;
+       }
+});
+
+dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, {
+       // summary:
+       //              A combination button and drop-down button.
+       //              Users can click one side to "press" the button, or click an arrow
+       //              icon to display the drop down.
+       //
+       // example:
+       // |    <button dojoType="dijit.form.ComboButton" onClick="...">
+       // |            <span>Hello world</span>
+       // |            <div dojoType="dijit.Menu">...</div>
+       // |    </button>
+       //
+       // example:
+       // |    var button1 = new dijit.form.ComboButton({label: "hello world", onClick: foo, dropDown: "myMenu"});
+       // |    dojo.body().appendChild(button1.domNode);
+       //
+
+       templateString: dojo.cache("dijit.form", "templates/ComboButton.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' role=\"presentation\"\n\t><tbody role=\"presentation\"><tr role=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" role=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\trole=\"button\" aria-haspopup=\"true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" role=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),
+
+       attributeMap: dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), {
+               id: "",
+               tabIndex: ["focusNode", "titleNode"],
+               title: "titleNode"
+       }),
+
+       // optionsTitle: String
+       //              Text that describes the options menu (accessibility)
+       optionsTitle: "",
+
+       baseClass: "dijitComboButton",
+
+       // Set classes like dijitButtonContentsHover or dijitArrowButtonActive depending on
+       // mouse action over specified node
+       cssStateNodes: {
+               "buttonNode": "dijitButtonNode",
+               "titleNode": "dijitButtonContents",
+               "_popupStateNode": "dijitDownArrowButton"
+       },
+
+       _focusedNode: null,
+
+       _onButtonKeyPress: function(/*Event*/ evt){
+               // summary:
+               //              Handler for right arrow key when focus is on left part of button
+               if(evt.charOrCode == dojo.keys[this.isLeftToRight() ? "RIGHT_ARROW" : "LEFT_ARROW"]){
+                       dijit.focus(this._popupStateNode);
+                       dojo.stopEvent(evt);
+               }
+       },
+
+       _onArrowKeyPress: function(/*Event*/ evt){
+               // summary:
+               //              Handler for left arrow key when focus is on right part of button
+               if(evt.charOrCode == dojo.keys[this.isLeftToRight() ? "LEFT_ARROW" : "RIGHT_ARROW"]){
+                       dijit.focus(this.titleNode);
+                       dojo.stopEvent(evt);
+               }
+       },
+       
+       focus: function(/*String*/ position){
+               // summary:
+               //              Focuses this widget to according to position, if specified,
+               //              otherwise on arrow node
+               // position:
+               //              "start" or "end"
+               if(!this.disabled){
+                       dijit.focus(position == "start" ? this.titleNode : this._popupStateNode);
+               }
+       }
+});
+
+dojo.declare("dijit.form.ToggleButton", dijit.form.Button, {
+       // summary:
+       //              A button that can be in two states (checked or not).
+       //              Can be base class for things like tabs or checkbox or radio buttons
+
+       baseClass: "dijitToggleButton",
+
+       // checked: Boolean
+       //              Corresponds to the native HTML <input> element's attribute.
+       //              In markup, specified as "checked='checked'" or just "checked".
+       //              True if the button is depressed, or the checkbox is checked,
+       //              or the radio button is selected, etc.
+       checked: false,
+
+       attributeMap: dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), {
+               checked:"focusNode"
+       }),
+
+       _clicked: function(/*Event*/ evt){
+               this.set('checked', !this.checked);
+       },
+
+       _setCheckedAttr: function(/*Boolean*/ value, /*Boolean?*/ priorityChange){
+               this._set("checked", value);
+               dojo.attr(this.focusNode || this.domNode, "checked", value);
+               dijit.setWaiState(this.focusNode || this.domNode, "pressed", value);
+               this._handleOnChange(value, priorityChange);
+       },
+
+       setChecked: function(/*Boolean*/ checked){
+               // summary:
+               //              Deprecated.  Use set('checked', true/false) instead.
+               dojo.deprecated("setChecked("+checked+") is deprecated. Use set('checked',"+checked+") instead.", "", "2.0");
+               this.set('checked', checked);
+       },
+
+       reset: function(){
+               // summary:
+               //              Reset the widget's value to what it was at initialization time
+
+               this._hasBeenBlurred = false;
+
+               // set checked state to original setting
+               this.set('checked', this.params.checked || false);
+       }
+});
+
 }
index ea5cdd17089c56acf6f912efead4dd0d6e56ca03..939f6e8bbcf01625a1c586453ba3bf80d33b41bb 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.CheckBox"]){
-dojo._hasResource["dijit.form.CheckBox"]=true;
+if(!dojo._hasResource["dijit.form.CheckBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.CheckBox"] = true;
 dojo.provide("dijit.form.CheckBox");
 dojo.require("dijit.form.ToggleButton");
-dojo.declare("dijit.form.CheckBox",dijit.form.ToggleButton,{templateString:dojo.cache("dijit.form","templates/CheckBox.html","<div class=\"dijit dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),baseClass:"dijitCheckBox",type:"checkbox",value:"on",readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{readOnly:"focusNode"}),_setReadOnlyAttr:function(_1){
-this.readOnly=_1;
-dojo.attr(this.focusNode,"readOnly",_1);
-dijit.setWaiState(this.focusNode,"readonly",_1);
-},_setValueAttr:function(_2,_3){
-if(typeof _2=="string"){
-this.value=_2;
-dojo.attr(this.focusNode,"value",_2);
-_2=true;
-}
-if(this._created){
-this.set("checked",_2,_3);
-}
-},_getValueAttr:function(){
-return (this.checked?this.value:false);
-},_setLabelAttr:undefined,postMixInProperties:function(){
-if(this.value==""){
-this.value="on";
-}
-this.checkedAttrSetting=this.checked?"checked":"";
-this.inherited(arguments);
-},_fillContent:function(_4){
-},reset:function(){
-this._hasBeenBlurred=false;
-this.set("checked",this.params.checked||false);
-this.value=this.params.value||"on";
-dojo.attr(this.focusNode,"value",this.value);
-},_onFocus:function(){
-if(this.id){
-dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");
-}
-this.inherited(arguments);
-},_onBlur:function(){
-if(this.id){
-dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");
-}
-this.inherited(arguments);
-},_onClick:function(e){
-if(this.readOnly){
-return false;
-}
-return this.inherited(arguments);
-}});
-dojo.declare("dijit.form.RadioButton",dijit.form.CheckBox,{type:"radio",baseClass:"dijitRadio",_setCheckedAttr:function(_5){
-this.inherited(arguments);
-if(!this._created){
-return;
-}
-if(_5){
-var _6=this;
-dojo.query("INPUT[type=radio]",this.focusNode.form||dojo.doc).forEach(function(_7){
-if(_7.name==_6.name&&_7!=_6.focusNode&&_7.form==_6.focusNode.form){
-var _8=dijit.getEnclosingWidget(_7);
-if(_8&&_8.checked){
-_8.set("checked",false);
-}
-}
-});
-}
-},_clicked:function(e){
-if(!this.checked){
-this.set("checked",true);
-}
-}});
+
+
+dojo.declare(
+       "dijit.form.CheckBox",
+       dijit.form.ToggleButton,
+       {
+               // summary:
+               //              Same as an HTML checkbox, but with fancy styling.
+               //
+               // description:
+               //              User interacts with real html inputs.
+               //              On onclick (which occurs by mouse click, space-bar, or
+               //              using the arrow keys to switch the selected radio button),
+               //              we update the state of the checkbox/radio.
+               //
+               //              There are two modes:
+               //                      1. High contrast mode
+               //                      2. Normal mode
+               //
+               //              In case 1, the regular html inputs are shown and used by the user.
+               //              In case 2, the regular html inputs are invisible but still used by
+               //              the user. They are turned quasi-invisible and overlay the background-image.
+
+               templateString: dojo.cache("dijit.form", "templates/CheckBox.html", "<div class=\"dijit dijitReset dijitInline\" role=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),
+
+               baseClass: "dijitCheckBox",
+
+               // type: [private] String
+               //              type attribute on <input> node.
+               //              Overrides `dijit.form.Button.type`.  Users should not change this value.
+               type: "checkbox",
+
+               // value: String
+               //              As an initialization parameter, equivalent to value field on normal checkbox
+               //              (if checked, the value is passed as the value when form is submitted).
+               //
+               //              However, get('value') will return either the string or false depending on
+               //              whether or not the checkbox is checked.
+               //
+               //              set('value', string) will check the checkbox and change the value to the
+               //              specified string
+               //
+               //              set('value', boolean) will change the checked state.
+               value: "on",
+
+               // 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,
+               
+               // the attributeMap should inherit from dijit.form._FormWidget.prototype.attributeMap
+               // instead of ToggleButton as the icon mapping has no meaning for a CheckBox
+               attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
+                       readOnly: "focusNode"
+               }),
+
+               _setReadOnlyAttr: function(/*Boolean*/ value){
+                       this._set("readOnly", value);
+                       dojo.attr(this.focusNode, 'readOnly', value);
+                       dijit.setWaiState(this.focusNode, "readonly", value);
+               },
+
+               _setValueAttr: function(/*String|Boolean*/ newValue, /*Boolean*/ priorityChange){
+                       // summary:
+                       //              Handler for value= attribute to constructor, and also calls to
+                       //              set('value', val).
+                       // description:
+                       //              During initialization, just saves as attribute to the <input type=checkbox>.
+                       //
+                       //              After initialization,
+                       //              when passed a boolean, controls whether or not the CheckBox is checked.
+                       //              If passed a string, changes the value attribute of the CheckBox (the one
+                       //              specified as "value" when the CheckBox was constructed (ex: <input
+                       //              dojoType="dijit.CheckBox" value="chicken">)
+                       if(typeof newValue == "string"){
+                               this._set("value", newValue);
+                               dojo.attr(this.focusNode, 'value', newValue);
+                               newValue = true;
+                       }
+                       if(this._created){
+                               this.set('checked', newValue, priorityChange);
+                       }
+               },
+               _getValueAttr: function(){
+                       // summary:
+                       //              Hook so get('value') works.
+                       // description:
+                       //              If the CheckBox is checked, returns the value attribute.
+                       //              Otherwise returns false.
+                       return (this.checked ? this.value : false);
+               },
+
+               // Override dijit.form.Button._setLabelAttr() since we don't even have a containerNode.
+               // Normally users won't try to set label, except when CheckBox or RadioButton is the child of a dojox.layout.TabContainer
+               _setLabelAttr: undefined,
+
+               postMixInProperties: function(){
+                       if(this.value == ""){
+                               this.value = "on";
+                       }
+
+                       // Need to set initial checked state as part of template, so that form submit works.
+                       // dojo.attr(node, "checked", bool) doesn't work on IEuntil node has been attached
+                       // to <body>, see #8666
+                       this.checkedAttrSetting = this.checked ? "checked" : "";
+
+                       this.inherited(arguments);
+               },
+
+                _fillContent: function(/*DomNode*/ source){
+                       // Override Button::_fillContent() since it doesn't make sense for CheckBox,
+                       // since CheckBox doesn't even have a container
+               },
+
+               reset: function(){
+                       // Override ToggleButton.reset()
+
+                       this._hasBeenBlurred = false;
+
+                       this.set('checked', this.params.checked || false);
+
+                       // Handle unlikely event that the <input type=checkbox> value attribute has changed
+                       this._set("value", this.params.value || "on");
+                       dojo.attr(this.focusNode, 'value', this.value);
+               },
+
+               _onFocus: function(){
+                       if(this.id){
+                               dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");
+                       }
+                       this.inherited(arguments);
+               },
+
+               _onBlur: function(){
+                       if(this.id){
+                               dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");
+                       }
+                       this.inherited(arguments);
+               },
+
+               _onClick: function(/*Event*/ e){
+                       // summary:
+                       //              Internal function to handle click actions - need to check
+                       //              readOnly, since button no longer does that check.
+                       if(this.readOnly){
+                               dojo.stopEvent(e);
+                               return false;
+                       }
+                       return this.inherited(arguments);
+               }
+       }
+);
+
+dojo.declare(
+       "dijit.form.RadioButton",
+       dijit.form.CheckBox,
+       {
+               // summary:
+               //              Same as an HTML radio, but with fancy styling.
+
+               type: "radio",
+               baseClass: "dijitRadio",
+
+               _setCheckedAttr: function(/*Boolean*/ value){
+                       // If I am being checked then have to deselect currently checked radio button
+                       this.inherited(arguments);
+                       if(!this._created){ return; }
+                       if(value){
+                               var _this = this;
+                               // search for radio buttons with the same name that need to be unchecked
+                               dojo.query("INPUT[type=radio]", this.focusNode.form || dojo.doc).forEach( // can't use name= since dojo.query doesn't support [] in the name
+                                       function(inputNode){
+                                               if(inputNode.name == _this.name && inputNode != _this.focusNode && inputNode.form == _this.focusNode.form){
+                                                       var widget = dijit.getEnclosingWidget(inputNode);
+                                                       if(widget && widget.checked){
+                                                               widget.set('checked', false);
+                                                       }
+                                               }
+                                       }
+                               );
+                       }
+               },
+
+               _clicked: function(/*Event*/ e){
+                       if(!this.checked){
+                               this.set('checked', true);
+                       }
+               }
+       }
+);
+
 }
index 694c43ed1a1e2b0953d238b872dc0ca71bb153d1..aecc5c4fcf05f4d0c3c12abb51c25a0f94ce0854 100644 (file)
@@ -1,12 +1,12 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.ComboBox"]){
-dojo._hasResource["dijit.form.ComboBox"]=true;
+if(!dojo._hasResource["dijit.form.ComboBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.ComboBox"] = true;
 dojo.provide("dijit.form.ComboBox");
 dojo.require("dojo.window");
 dojo.require("dojo.regexp");
@@ -15,601 +15,1217 @@ dojo.require("dojo.data.util.filter");
 dojo.require("dijit._CssStateMixin");
 dojo.require("dijit.form._FormWidget");
 dojo.require("dijit.form.ValidationTextBox");
-dojo.requireLocalization("dijit.form","ComboBox",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.declare("dijit.form.ComboBoxMixin",null,{item:null,pageSize:Infinity,store:null,fetchProperties:{},query:{},autoComplete:true,highlightMatch:"first",searchDelay:100,searchAttr:"name",labelAttr:"",labelType:"text",queryExpr:"${0}*",ignoreCase:true,hasDownArrow:true,templateString:dojo.cache("dijit.form","templates/ComboBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitComboBox",cssStateNodes:{"downArrowNode":"dijitDownArrowButton"},_getCaretPos:function(_1){
-var _2=0;
-if(typeof (_1.selectionStart)=="number"){
-_2=_1.selectionStart;
-}else{
-if(dojo.isIE){
-var tr=dojo.doc.selection.createRange().duplicate();
-var _3=_1.createTextRange();
-tr.move("character",0);
-_3.move("character",0);
-try{
-_3.setEndPoint("EndToEnd",tr);
-_2=String(_3.text).replace(/\r/g,"").length;
-}
-catch(e){
-}
-}
-}
-return _2;
-},_setCaretPos:function(_4,_5){
-_5=parseInt(_5);
-dijit.selectInputText(_4,_5,_5);
-},_setDisabledAttr:function(_6){
-this.inherited(arguments);
-dijit.setWaiState(this.comboNode,"disabled",_6);
-},_abortQuery:function(){
-if(this.searchTimer){
-clearTimeout(this.searchTimer);
-this.searchTimer=null;
-}
-if(this._fetchHandle){
-if(this._fetchHandle.abort){
-this._fetchHandle.abort();
-}
-this._fetchHandle=null;
-}
-},_onInput:function(_7){
-if(!this.searchTimer&&(_7.type=="paste"||_7.type=="input")&&this._lastInput!=this.textbox.value){
-this.searchTimer=setTimeout(dojo.hitch(this,function(){
-this._onKeyPress({charOrCode:229});
-}),100);
-}
-this.inherited(arguments);
-},_onKeyPress:function(_8){
-var _9=_8.charOrCode;
-if(_8.altKey||((_8.ctrlKey||_8.metaKey)&&(_9!="x"&&_9!="v"))||_9==dojo.keys.SHIFT){
-return;
-}
-var _a=false;
-var _b="_startSearchFromInput";
-var pw=this._popupWidget;
-var dk=dojo.keys;
-var _c=null;
-this._prev_key_backspace=false;
-this._abortQuery();
-if(this._isShowingNow){
-pw.handleKey(_9);
-_c=pw.getHighlightedOption();
-}
-switch(_9){
-case dk.PAGE_DOWN:
-case dk.DOWN_ARROW:
-case dk.PAGE_UP:
-case dk.UP_ARROW:
-if(!this._isShowingNow){
-_a=true;
-_b="_startSearchAll";
-}else{
-this._announceOption(_c);
-}
-dojo.stopEvent(_8);
-break;
-case dk.ENTER:
-if(_c){
-if(_c==pw.nextButton){
-this._nextSearch(1);
-dojo.stopEvent(_8);
-break;
-}else{
-if(_c==pw.previousButton){
-this._nextSearch(-1);
-dojo.stopEvent(_8);
-break;
-}
-}
-}else{
-this._setBlurValue();
-this._setCaretPos(this.focusNode,this.focusNode.value.length);
-}
-_8.preventDefault();
-case dk.TAB:
-var _d=this.get("displayedValue");
-if(pw&&(_d==pw._messages["previousMessage"]||_d==pw._messages["nextMessage"])){
-break;
-}
-if(_c){
-this._selectOption();
-}
-if(this._isShowingNow){
-this._lastQuery=null;
-this._hideResultList();
-}
-break;
-case " ":
-if(_c){
-dojo.stopEvent(_8);
-this._selectOption();
-this._hideResultList();
-}else{
-_a=true;
-}
-break;
-case dk.ESCAPE:
-if(this._isShowingNow){
-dojo.stopEvent(_8);
-this._hideResultList();
-}
-break;
-case dk.DELETE:
-case dk.BACKSPACE:
-this._prev_key_backspace=true;
-_a=true;
-break;
-default:
-_a=typeof _9=="string"||_9==229;
-}
-if(_a){
-this.item=undefined;
-this.searchTimer=setTimeout(dojo.hitch(this,_b),1);
-}
-},_autoCompleteText:function(_e){
-var fn=this.focusNode;
-dijit.selectInputText(fn,fn.value.length);
-var _f=this.ignoreCase?"toLowerCase":"substr";
-if(_e[_f](0).indexOf(this.focusNode.value[_f](0))==0){
-var _10=this._getCaretPos(fn);
-if((_10+1)>fn.value.length){
-fn.value=_e;
-dijit.selectInputText(fn,_10);
-}
-}else{
-fn.value=_e;
-dijit.selectInputText(fn);
-}
-},_openResultList:function(_11,_12){
-this._fetchHandle=null;
-if(this.disabled||this.readOnly||(_12.query[this.searchAttr]!=this._lastQuery)){
-return;
-}
-this._popupWidget.clearResultList();
-if(!_11.length&&!this._maxOptions){
-this._hideResultList();
-return;
-}
-_12._maxOptions=this._maxOptions;
-var _13=this._popupWidget.createOptions(_11,_12,dojo.hitch(this,"_getMenuLabelFromItem"));
-this._showResultList();
-if(_12.direction){
-if(1==_12.direction){
-this._popupWidget.highlightFirstOption();
-}else{
-if(-1==_12.direction){
-this._popupWidget.highlightLastOption();
-}
-}
-this._announceOption(this._popupWidget.getHighlightedOption());
-}else{
-if(this.autoComplete&&!this._prev_key_backspace&&!/^[*]+$/.test(_12.query[this.searchAttr])){
-this._announceOption(_13[1]);
-}
-}
-},_showResultList:function(){
-this._hideResultList();
-this.displayMessage("");
-dojo.style(this._popupWidget.domNode,{width:"",height:""});
-var _14=this.open();
-var _15=dojo.marginBox(this._popupWidget.domNode);
-this._popupWidget.domNode.style.overflow=((_14.h==_15.h)&&(_14.w==_15.w))?"hidden":"auto";
-var _16=_14.w;
-if(_14.h<this._popupWidget.domNode.scrollHeight){
-_16+=16;
-}
-dojo.marginBox(this._popupWidget.domNode,{h:_14.h,w:Math.max(_16,this.domNode.offsetWidth)});
-if(_16<this.domNode.offsetWidth){
-this._popupWidget.domNode.parentNode.style.left=dojo.position(this.domNode,true).x+"px";
-}
-dijit.setWaiState(this.comboNode,"expanded","true");
-},_hideResultList:function(){
-this._abortQuery();
-if(this._isShowingNow){
-dijit.popup.close(this._popupWidget);
-this._isShowingNow=false;
-dijit.setWaiState(this.comboNode,"expanded","false");
-dijit.removeWaiState(this.focusNode,"activedescendant");
-}
-},_setBlurValue:function(){
-var _17=this.get("displayedValue");
-var pw=this._popupWidget;
-if(pw&&(_17==pw._messages["previousMessage"]||_17==pw._messages["nextMessage"])){
-this._setValueAttr(this._lastValueReported,true);
-}else{
-if(typeof this.item=="undefined"){
-this.item=null;
-this.set("displayedValue",_17);
-}else{
-if(this.value!=this._lastValueReported){
-dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);
-}
-this._refreshState();
-}
-}
-},_onBlur:function(){
-this._hideResultList();
-this.inherited(arguments);
-},_setItemAttr:function(_18,_19,_1a){
-if(!_1a){
-_1a=this.labelFunc(_18,this.store);
-}
-this.value=this._getValueField()!=this.searchAttr?this.store.getIdentity(_18):_1a;
-this.item=_18;
-dijit.form.ComboBox.superclass._setValueAttr.call(this,this.value,_19,_1a);
-},_announceOption:function(_1b){
-if(!_1b){
-return;
-}
-var _1c;
-if(_1b==this._popupWidget.nextButton||_1b==this._popupWidget.previousButton){
-_1c=_1b.innerHTML;
-this.item=undefined;
-this.value="";
-}else{
-_1c=this.labelFunc(_1b.item,this.store);
-this.set("item",_1b.item,false,_1c);
-}
-this.focusNode.value=this.focusNode.value.substring(0,this._lastInput.length);
-dijit.setWaiState(this.focusNode,"activedescendant",dojo.attr(_1b,"id"));
-this._autoCompleteText(_1c);
-},_selectOption:function(evt){
-if(evt){
-this._announceOption(evt.target);
-}
-this._hideResultList();
-this._setCaretPos(this.focusNode,this.focusNode.value.length);
-dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);
-},_onArrowMouseDown:function(evt){
-if(this.disabled||this.readOnly){
-return;
-}
-dojo.stopEvent(evt);
-this.focus();
-if(this._isShowingNow){
-this._hideResultList();
-}else{
-this._startSearchAll();
-}
-},_startSearchAll:function(){
-this._startSearch("");
-},_startSearchFromInput:function(){
-this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g,"\\$1"));
-},_getQueryString:function(_1d){
-return dojo.string.substitute(this.queryExpr,[_1d]);
-},_startSearch:function(key){
-if(!this._popupWidget){
-var _1e=this.id+"_popup";
-this._popupWidget=new dijit.form._ComboBoxMenu({onChange:dojo.hitch(this,this._selectOption),id:_1e,dir:this.dir});
-dijit.removeWaiState(this.focusNode,"activedescendant");
-dijit.setWaiState(this.textbox,"owns",_1e);
-}
-var _1f=dojo.clone(this.query);
-this._lastInput=key;
-this._lastQuery=_1f[this.searchAttr]=this._getQueryString(key);
-this.searchTimer=setTimeout(dojo.hitch(this,function(_20,_21){
-this.searchTimer=null;
-var _22={queryOptions:{ignoreCase:this.ignoreCase,deep:true},query:_20,onBegin:dojo.hitch(this,"_setMaxOptions"),onComplete:dojo.hitch(this,"_openResultList"),onError:function(_23){
-_21._fetchHandle=null;
-console.error("dijit.form.ComboBox: "+_23);
-dojo.hitch(_21,"_hideResultList")();
-},start:0,count:this.pageSize};
-dojo.mixin(_22,_21.fetchProperties);
-this._fetchHandle=_21.store.fetch(_22);
-var _24=function(_25,_26){
-_25.start+=_25.count*_26;
-_25.direction=_26;
-this._fetchHandle=this.store.fetch(_25);
-};
-this._nextSearch=this._popupWidget.onPage=dojo.hitch(this,_24,this._fetchHandle);
-},_1f,this),this.searchDelay);
-},_setMaxOptions:function(_27,_28){
-this._maxOptions=_27;
-},_getValueField:function(){
-return this.searchAttr;
-},compositionend:function(evt){
-this._onKeyPress({charOrCode:229});
-},constructor:function(){
-this.query={};
-this.fetchProperties={};
-},postMixInProperties:function(){
-if(!this.store){
-var _29=this.srcNodeRef;
-this.store=new dijit.form._ComboBoxDataStore(_29);
-if(!("value" in this.params)){
-var _2a=this.store.fetchSelectedItem();
-if(_2a){
-var _2b=this._getValueField();
-this.value=_2b!=this.searchAttr?this.store.getValue(_2a,_2b):this.labelFunc(_2a,this.store);
-}
-}
-}
-this.inherited(arguments);
-},postCreate:function(){
-if(!this.hasDownArrow){
-this.downArrowNode.style.display="none";
-}
-var _2c=dojo.query("label[for=\""+this.id+"\"]");
-if(_2c.length){
-_2c[0].id=(this.id+"_label");
-var cn=this.comboNode;
-dijit.setWaiState(cn,"labelledby",_2c[0].id);
-}
-this.inherited(arguments);
-},uninitialize:function(){
-if(this._popupWidget&&!this._popupWidget._destroyed){
-this._hideResultList();
-this._popupWidget.destroy();
-}
-this.inherited(arguments);
-},_getMenuLabelFromItem:function(_2d){
-var _2e=this.labelAttr?this.store.getValue(_2d,this.labelAttr):this.labelFunc(_2d,this.store);
-var _2f=this.labelType;
-if(this.highlightMatch!="none"&&this.labelType=="text"&&this._lastInput){
-_2e=this.doHighlight(_2e,this._escapeHtml(this._lastInput));
-_2f="html";
-}
-return {html:_2f=="html",label:_2e};
-},doHighlight:function(_30,_31){
-var _32="i"+(this.highlightMatch=="all"?"g":"");
-var _33=this._escapeHtml(_30);
-_31=dojo.regexp.escapeString(_31);
-var ret=_33.replace(new RegExp("(^|\\s)("+_31+")",_32),"$1<span class=\"dijitComboBoxHighlightMatch\">$2</span>");
-return ret;
-},_escapeHtml:function(str){
-str=String(str).replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-return str;
-},open:function(){
-this._isShowingNow=true;
-return dijit.popup.open({popup:this._popupWidget,around:this.domNode,parent:this});
-},reset:function(){
-this.item=null;
-this.inherited(arguments);
-},labelFunc:function(_34,_35){
-return _35.getValue(_34,this.searchAttr).toString();
-}});
-dojo.declare("dijit.form._ComboBoxMenu",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:"<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"+"</ul>",_messages:null,baseClass:"dijitComboBoxMenu",postMixInProperties:function(){
-this._messages=dojo.i18n.getLocalization("dijit.form","ComboBox",this.lang);
-this.inherited(arguments);
-},_setValueAttr:function(_36){
-this.value=_36;
-this.onChange(_36);
-},onChange:function(_37){
-},onPage:function(_38){
-},postCreate:function(){
-this.previousButton.innerHTML=this._messages["previousMessage"];
-this.nextButton.innerHTML=this._messages["nextMessage"];
-this.inherited(arguments);
-},onClose:function(){
-this._blurOptionNode();
-},_createOption:function(_39,_3a){
-var _3b=_3a(_39);
-var _3c=dojo.doc.createElement("li");
-dijit.setWaiRole(_3c,"option");
-if(_3b.html){
-_3c.innerHTML=_3b.label;
-}else{
-_3c.appendChild(dojo.doc.createTextNode(_3b.label));
-}
-if(_3c.innerHTML==""){
-_3c.innerHTML="&nbsp;";
-}
-_3c.item=_39;
-return _3c;
-},createOptions:function(_3d,_3e,_3f){
-this.previousButton.style.display=(_3e.start==0)?"none":"";
-dojo.attr(this.previousButton,"id",this.id+"_prev");
-dojo.forEach(_3d,function(_40,i){
-var _41=this._createOption(_40,_3f);
-_41.className="dijitReset dijitMenuItem"+(this.isLeftToRight()?"":" dijitMenuItemRtl");
-dojo.attr(_41,"id",this.id+i);
-this.domNode.insertBefore(_41,this.nextButton);
-},this);
-var _42=false;
-if(_3e._maxOptions&&_3e._maxOptions!=-1){
-if((_3e.start+_3e.count)<_3e._maxOptions){
-_42=true;
-}else{
-if((_3e.start+_3e.count)>_3e._maxOptions&&_3e.count==_3d.length){
-_42=true;
-}
-}
-}else{
-if(_3e.count==_3d.length){
-_42=true;
-}
-}
-this.nextButton.style.display=_42?"":"none";
-dojo.attr(this.nextButton,"id",this.id+"_next");
-return this.domNode.childNodes;
-},clearResultList:function(){
-while(this.domNode.childNodes.length>2){
-this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);
-}
-},_onMouseDown:function(evt){
-dojo.stopEvent(evt);
-},_onMouseUp:function(evt){
-if(evt.target===this.domNode||!this._highlighted_option){
-return;
-}else{
-if(evt.target==this.previousButton){
-this.onPage(-1);
-}else{
-if(evt.target==this.nextButton){
-this.onPage(1);
-}else{
-var tgt=evt.target;
-while(!tgt.item){
-tgt=tgt.parentNode;
-}
-this._setValueAttr({target:tgt},true);
-}
-}
-}
-},_onMouseOver:function(evt){
-if(evt.target===this.domNode){
-return;
-}
-var tgt=evt.target;
-if(!(tgt==this.previousButton||tgt==this.nextButton)){
-while(!tgt.item){
-tgt=tgt.parentNode;
-}
-}
-this._focusOptionNode(tgt);
-},_onMouseOut:function(evt){
-if(evt.target===this.domNode){
-return;
-}
-this._blurOptionNode();
-},_focusOptionNode:function(_43){
-if(this._highlighted_option!=_43){
-this._blurOptionNode();
-this._highlighted_option=_43;
-dojo.addClass(this._highlighted_option,"dijitMenuItemSelected");
-}
-},_blurOptionNode:function(){
-if(this._highlighted_option){
-dojo.removeClass(this._highlighted_option,"dijitMenuItemSelected");
-this._highlighted_option=null;
-}
-},_highlightNextOption:function(){
-if(!this.getHighlightedOption()){
-var fc=this.domNode.firstChild;
-this._focusOptionNode(fc.style.display=="none"?fc.nextSibling:fc);
-}else{
-var ns=this._highlighted_option.nextSibling;
-if(ns&&ns.style.display!="none"){
-this._focusOptionNode(ns);
-}else{
-this.highlightFirstOption();
-}
-}
-dojo.window.scrollIntoView(this._highlighted_option);
-},highlightFirstOption:function(){
-var _44=this.domNode.firstChild;
-var _45=_44.nextSibling;
-this._focusOptionNode(_45.style.display=="none"?_44:_45);
-dojo.window.scrollIntoView(this._highlighted_option);
-},highlightLastOption:function(){
-this._focusOptionNode(this.domNode.lastChild.previousSibling);
-dojo.window.scrollIntoView(this._highlighted_option);
-},_highlightPrevOption:function(){
-if(!this.getHighlightedOption()){
-var lc=this.domNode.lastChild;
-this._focusOptionNode(lc.style.display=="none"?lc.previousSibling:lc);
-}else{
-var ps=this._highlighted_option.previousSibling;
-if(ps&&ps.style.display!="none"){
-this._focusOptionNode(ps);
-}else{
-this.highlightLastOption();
-}
-}
-dojo.window.scrollIntoView(this._highlighted_option);
-},_page:function(up){
-var _46=0;
-var _47=this.domNode.scrollTop;
-var _48=dojo.style(this.domNode,"height");
-if(!this.getHighlightedOption()){
-this._highlightNextOption();
-}
-while(_46<_48){
-if(up){
-if(!this.getHighlightedOption().previousSibling||this._highlighted_option.previousSibling.style.display=="none"){
-break;
-}
-this._highlightPrevOption();
-}else{
-if(!this.getHighlightedOption().nextSibling||this._highlighted_option.nextSibling.style.display=="none"){
-break;
-}
-this._highlightNextOption();
-}
-var _49=this.domNode.scrollTop;
-_46+=(_49-_47)*(up?-1:1);
-_47=_49;
-}
-},pageUp:function(){
-this._page(true);
-},pageDown:function(){
-this._page(false);
-},getHighlightedOption:function(){
-var ho=this._highlighted_option;
-return (ho&&ho.parentNode)?ho:null;
-},handleKey:function(key){
-switch(key){
-case dojo.keys.DOWN_ARROW:
-this._highlightNextOption();
-break;
-case dojo.keys.PAGE_DOWN:
-this.pageDown();
-break;
-case dojo.keys.UP_ARROW:
-this._highlightPrevOption();
-break;
-case dojo.keys.PAGE_UP:
-this.pageUp();
-break;
-}
-}});
-dojo.declare("dijit.form.ComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{_setValueAttr:function(_4a,_4b,_4c){
-this.item=null;
-if(!_4a){
-_4a="";
-}
-dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,_4a,_4b,_4c);
-}});
-dojo.declare("dijit.form._ComboBoxDataStore",null,{constructor:function(_4d){
-this.root=_4d;
-if(_4d.tagName!="SELECT"&&_4d.firstChild){
-_4d=dojo.query("select",_4d);
-if(_4d.length>0){
-_4d=_4d[0];
-}else{
-this.root.innerHTML="<SELECT>"+this.root.innerHTML+"</SELECT>";
-_4d=this.root.firstChild;
-}
-this.root=_4d;
-}
-dojo.query("> option",_4d).forEach(function(_4e){
-_4e.innerHTML=dojo.trim(_4e.innerHTML);
-});
-},getValue:function(_4f,_50,_51){
-return (_50=="value")?_4f.value:(_4f.innerText||_4f.textContent||"");
-},isItemLoaded:function(_52){
-return true;
-},getFeatures:function(){
-return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
-},_fetchItems:function(_53,_54,_55){
-if(!_53.query){
-_53.query={};
-}
-if(!_53.query.name){
-_53.query.name="";
-}
-if(!_53.queryOptions){
-_53.queryOptions={};
-}
-var _56=dojo.data.util.filter.patternToRegExp(_53.query.name,_53.queryOptions.ignoreCase),_57=dojo.query("> option",this.root).filter(function(_58){
-return (_58.innerText||_58.textContent||"").match(_56);
+dojo.require("dijit._HasDropDown");
+dojo.requireLocalization("dijit.form", "ComboBox", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare(
+       "dijit.form.ComboBoxMixin",
+       dijit._HasDropDown,
+       {
+               // summary:
+               //              Implements the base functionality for `dijit.form.ComboBox`/`dijit.form.FilteringSelect`
+               // description:
+               //              All widgets that mix in dijit.form.ComboBoxMixin must extend `dijit.form._FormValueWidget`.
+               // tags:
+               //              protected
+
+               // item: Object
+               //              This is the item returned by the dojo.data.store implementation that
+               //              provides the data for this ComboBox, it's the currently selected item.
+               item: null,
+
+               // pageSize: Integer
+               //              Argument to data provider.
+               //              Specifies number of search results per page (before hitting "next" button)
+               pageSize: Infinity,
+
+               // store: [const] Object
+               //              Reference to data provider object used by this ComboBox
+               store: null,
+
+               // fetchProperties: Object
+               //              Mixin to the dojo.data store's fetch.
+               //              For example, to set the sort order of the ComboBox menu, pass:
+               //      |       { sort: [{attribute:"name",descending: true}] }
+               //              To override the default queryOptions so that deep=false, do:
+               //      |       { queryOptions: {ignoreCase: true, deep: false} }
+               fetchProperties:{},
+
+               // query: Object
+               //              A query that can be passed to 'store' to initially filter the items,
+               //              before doing further filtering based on `searchAttr` and the key.
+               //              Any reference to the `searchAttr` is ignored.
+               query: {},
+
+               // autoComplete: Boolean
+               //              If user types in a partial string, and then tab out of the `<input>` box,
+               //              automatically copy the first entry displayed in the drop down list to
+               //              the `<input>` field
+               autoComplete: true,
+
+               // highlightMatch: String
+               //              One of: "first", "all" or "none".
+               //
+               //              If the ComboBox/FilteringSelect opens with the search results and the searched
+               //              string can be found, it will be highlighted.  If set to "all"
+               //              then will probably want to change `queryExpr` parameter to '*${0}*'
+               //
+               //              Highlighting is only performed when `labelType` is "text", so as to not
+               //              interfere with any HTML markup an HTML label might contain.
+               highlightMatch: "first",
+
+               // searchDelay: Integer
+               //              Delay in milliseconds between when user types something and we start
+               //              searching based on that value
+               searchDelay: 100,
+
+               // searchAttr: String
+               //              Search for items in the data store where this attribute (in the item)
+               //              matches what the user typed
+               searchAttr: "name",
+
+               // labelAttr: String?
+               //              The entries in the drop down list come from this attribute in the
+               //              dojo.data items.
+               //              If not specified, the searchAttr attribute is used instead.
+               labelAttr: "",
+
+               // labelType: String
+               //              Specifies how to interpret the labelAttr in the data store items.
+               //              Can be "html" or "text".
+               labelType: "text",
+
+               // queryExpr: String
+               //              This specifies what query ComboBox/FilteringSelect sends to the data store,
+               //              based on what the user has typed.  Changing this expression will modify
+               //              whether the drop down shows only exact matches, a "starting with" match,
+               //              etc.  Use it in conjunction with highlightMatch.
+               //              dojo.data query expression pattern.
+               //              `${0}` will be substituted for the user text.
+               //              `*` is used for wildcards.
+               //              `${0}*` means "starts with", `*${0}*` means "contains", `${0}` means "is"
+               queryExpr: "${0}*",
+
+               // ignoreCase: Boolean
+               //              Set true if the ComboBox/FilteringSelect should ignore case when matching possible items
+               ignoreCase: true,
+
+               // hasDownArrow: Boolean
+               //              Set this textbox to have a down arrow button, to display the drop down list.
+               //              Defaults to true.
+               hasDownArrow: true,
+
+               templateString: dojo.cache("dijit.form", "templates/DropDownBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\trole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"_buttonNode, _popupStateNode\" role=\"presentation\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&#935; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" role=\"textbox\" aria-haspopup=\"true\"\n\t/></div\n></div>\n"),
+
+               baseClass: "dijitTextBox dijitComboBox",
+
+               // dropDownClass: [protected extension] String
+               //              Name of the dropdown widget class used to select a date/time.
+               //              Subclasses should specify this.
+               dropDownClass: "dijit.form._ComboBoxMenu",
+
+               // Set classes like dijitDownArrowButtonHover depending on
+               // mouse action over button node
+               cssStateNodes: {
+                       "_buttonNode": "dijitDownArrowButton"
+               },
+
+               // Flags to _HasDropDown to limit height of drop down to make it fit in viewport
+               maxHeight: -1,
+
+               // For backwards compatibility let onClick events propagate, even clicks on the down arrow button
+               _stopClickEvents: false,
+
+               _getCaretPos: function(/*DomNode*/ element){
+                       // khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22
+                       var pos = 0;
+                       if(typeof(element.selectionStart) == "number"){
+                               // FIXME: this is totally borked on Moz < 1.3. Any recourse?
+                               pos = element.selectionStart;
+                       }else if(dojo.isIE){
+                               // in the case of a mouse click in a popup being handled,
+                               // then the dojo.doc.selection is not the textarea, but the popup
+                               // var r = dojo.doc.selection.createRange();
+                               // hack to get IE 6 to play nice. What a POS browser.
+                               var tr = dojo.doc.selection.createRange().duplicate();
+                               var ntr = element.createTextRange();
+                               tr.move("character",0);
+                               ntr.move("character",0);
+                               try{
+                                       // If control doesn't have focus, you get an exception.
+                                       // Seems to happen on reverse-tab, but can also happen on tab (seems to be a race condition - only happens sometimes).
+                                       // There appears to be no workaround for this - googled for quite a while.
+                                       ntr.setEndPoint("EndToEnd", tr);
+                                       pos = String(ntr.text).replace(/\r/g,"").length;
+                               }catch(e){
+                                       // If focus has shifted, 0 is fine for caret pos.
+                               }
+                       }
+                       return pos;
+               },
+
+               _setCaretPos: function(/*DomNode*/ element, /*Number*/ location){
+                       location = parseInt(location);
+                       dijit.selectInputText(element, location, location);
+               },
+
+               _setDisabledAttr: function(/*Boolean*/ value){
+                       // Additional code to set disabled state of ComboBox node.
+                       // Overrides _FormValueWidget._setDisabledAttr() or ValidationTextBox._setDisabledAttr().
+                       this.inherited(arguments);
+                       dijit.setWaiState(this.domNode, "disabled", value);
+               },
+
+               _abortQuery: function(){
+                       // stop in-progress query
+                       if(this.searchTimer){
+                               clearTimeout(this.searchTimer);
+                               this.searchTimer = null;
+                       }
+                       if(this._fetchHandle){
+                               if(this._fetchHandle.abort){ this._fetchHandle.abort(); }
+                               this._fetchHandle = null;
+                       }
+               },
+
+               _onInput: function(/*Event*/ evt){
+                       // summary:
+                       //              Handles paste events
+                       if(!this.searchTimer && (evt.type == 'paste'/*IE|WebKit*/ || evt.type == 'input'/*Firefox*/) && this._lastInput != this.textbox.value){
+                               this.searchTimer = setTimeout(dojo.hitch(this, function(){
+                                       this._onKey({charOrCode: 229}); // fake IME key to cause a search
+                               }), 100); // long delay that will probably be preempted by keyboard input
+                       }
+                       this.inherited(arguments);
+               },
+
+               _onKey: function(/*Event*/ evt){
+                       // summary:
+                       //              Handles keyboard events
+
+                       var key = evt.charOrCode;
+
+                       // except for cutting/pasting case - ctrl + x/v
+                       if(evt.altKey || ((evt.ctrlKey || evt.metaKey) && (key != 'x' && key != 'v')) || key == dojo.keys.SHIFT){
+                               return; // throw out weird key combinations and spurious events
+                       }
+                       
+                       var doSearch = false;
+                       var pw = this.dropDown;
+                       var dk = dojo.keys;
+                       var highlighted = null;
+                       this._prev_key_backspace = false;
+                       this._abortQuery();
+
+                       // _HasDropDown will do some of the work:
+                       //              1. when drop down is not yet shown:
+                       //                      - if user presses the down arrow key, call loadDropDown()
+                       //              2. when drop down is already displayed:
+                       //                      - on ESC key, call closeDropDown()
+                       //                      - otherwise, call dropDown.handleKey() to process the keystroke
+                       this.inherited(arguments);
+
+                       if(this._opened){
+                               highlighted = pw.getHighlightedOption();
+                       }
+                       switch(key){
+                               case dk.PAGE_DOWN:
+                               case dk.DOWN_ARROW:
+                               case dk.PAGE_UP:
+                               case dk.UP_ARROW:
+                                       // Keystroke caused ComboBox_menu to move to a different item.
+                                       // Copy new item to <input> box.
+                                       if(this._opened){
+                                               this._announceOption(highlighted);
+                                       }
+                                       dojo.stopEvent(evt);
+                                       break;
+
+                               case dk.ENTER:
+                                       // prevent submitting form if user presses enter. Also
+                                       // prevent accepting the value if either Next or Previous
+                                       // are selected
+                                       if(highlighted){
+                                               // only stop event on prev/next
+                                               if(highlighted == pw.nextButton){
+                                                       this._nextSearch(1);
+                                                       dojo.stopEvent(evt);
+                                                       break;
+                                               }else if(highlighted == pw.previousButton){
+                                                       this._nextSearch(-1);
+                                                       dojo.stopEvent(evt);
+                                                       break;
+                                               }
+                                       }else{
+                                               // Update 'value' (ex: KY) according to currently displayed text
+                                               this._setBlurValue(); // set value if needed
+                                               this._setCaretPos(this.focusNode, this.focusNode.value.length); // move cursor to end and cancel highlighting
+                                       }
+                                       // default case:
+                                       // if enter pressed while drop down is open, or for FilteringSelect,
+                                       // if we are in the middle of a query to convert a directly typed in value to an item,
+                                       // prevent submit, but allow event to bubble
+                                       if(this._opened || this._fetchHandle){
+                                       evt.preventDefault();
+                                       }
+                                       // fall through
+
+                               case dk.TAB:
+                                       var newvalue = this.get('displayedValue');
+                                       //      if the user had More Choices selected fall into the
+                                       //      _onBlur handler
+                                       if(pw && (
+                                               newvalue == pw._messages["previousMessage"] ||
+                                               newvalue == pw._messages["nextMessage"])
+                                       ){
+                                               break;
+                                       }
+                                       if(highlighted){
+                                               this._selectOption();
+                                       }
+                                       if(this._opened){
+                                               this._lastQuery = null; // in case results come back later
+                                               this.closeDropDown();
+                                       }
+                                       break;
+
+                               case ' ':
+                                       if(highlighted){
+                                               // user is effectively clicking a choice in the drop down menu
+                                               dojo.stopEvent(evt);
+                                               this._selectOption();
+                                               this.closeDropDown();
+                                       }else{
+                                               // user typed a space into the input box, treat as normal character
+                                               doSearch = true;
+                                       }
+                                       break;
+
+                               case dk.DELETE:
+                               case dk.BACKSPACE:
+                                       this._prev_key_backspace = true;
+                                       doSearch = true;
+                                       break;
+
+                               default:
+                                       // Non char keys (F1-F12 etc..)  shouldn't open list.
+                                       // Ascii characters and IME input (Chinese, Japanese etc.) should.
+                                       //IME input produces keycode == 229.
+                                       doSearch = typeof key == 'string' || key == 229;
+                       }
+                       if(doSearch){
+                               // need to wait a tad before start search so that the event
+                               // bubbles through DOM and we have value visible
+                               this.item = undefined; // undefined means item needs to be set
+                               this.searchTimer = setTimeout(dojo.hitch(this, "_startSearchFromInput"),1);
+                       }
+               },
+
+               _autoCompleteText: function(/*String*/ text){
+                       // summary:
+                       //              Fill in the textbox with the first item from the drop down
+                       //              list, and highlight the characters that were
+                       //              auto-completed. For example, if user typed "CA" and the
+                       //              drop down list appeared, the textbox would be changed to
+                       //              "California" and "ifornia" would be highlighted.
+
+                       var fn = this.focusNode;
+
+                       // IE7: clear selection so next highlight works all the time
+                       dijit.selectInputText(fn, fn.value.length);
+                       // does text autoComplete the value in the textbox?
+                       var caseFilter = this.ignoreCase? 'toLowerCase' : 'substr';
+                       if(text[caseFilter](0).indexOf(this.focusNode.value[caseFilter](0)) == 0){
+                               var cpos = this._getCaretPos(fn);
+                               // only try to extend if we added the last character at the end of the input
+                               if((cpos+1) > fn.value.length){
+                                       // only add to input node as we would overwrite Capitalisation of chars
+                                       // actually, that is ok
+                                       fn.value = text;//.substr(cpos);
+                                       // visually highlight the autocompleted characters
+                                       dijit.selectInputText(fn, cpos);
+                               }
+                       }else{
+                               // text does not autoComplete; replace the whole value and highlight
+                               fn.value = text;
+                               dijit.selectInputText(fn);
+                       }
+               },
+
+               _openResultList: function(/*Object*/ results, /*Object*/ dataObject){
+                       // summary:
+                       //              Callback when a search completes.
+                       // description:
+                       //              1. generates drop-down list and calls _showResultList() to display it
+                       //              2. if this result list is from user pressing "more choices"/"previous choices"
+                       //                      then tell screen reader to announce new option
+                       this._fetchHandle = null;
+                       if(     this.disabled ||
+                               this.readOnly ||
+                               (dataObject.query[this.searchAttr] != this._lastQuery)
+                       ){
+                               return;
+                       }
+                       var wasSelected = this.dropDown._highlighted_option && dojo.hasClass(this.dropDown._highlighted_option, "dijitMenuItemSelected");
+                       this.dropDown.clearResultList();
+                       if(!results.length && !this._maxOptions){ // if no results and not just the previous choices button
+                               this.closeDropDown();
+                               return;
+                       }
+
+                       // Fill in the textbox with the first item from the drop down list,
+                       // and highlight the characters that were auto-completed. For
+                       // example, if user typed "CA" and the drop down list appeared, the
+                       // textbox would be changed to "California" and "ifornia" would be
+                       // highlighted.
+
+                       dataObject._maxOptions = this._maxOptions;
+                       var nodes = this.dropDown.createOptions(
+                               results,
+                               dataObject,
+                               dojo.hitch(this, "_getMenuLabelFromItem")
+                       );
+
+                       // show our list (only if we have content, else nothing)
+                       this._showResultList();
+
+                       // #4091:
+                       //              tell the screen reader that the paging callback finished by
+                       //              shouting the next choice
+                       if(dataObject.direction){
+                               if(1 == dataObject.direction){
+                                       this.dropDown.highlightFirstOption();
+                               }else if(-1 == dataObject.direction){
+                                       this.dropDown.highlightLastOption();
+                               }
+                               if(wasSelected){
+                                       this._announceOption(this.dropDown.getHighlightedOption());
+                               }
+                       }else if(this.autoComplete && !this._prev_key_backspace
+                               // when the user clicks the arrow button to show the full list,
+                               // startSearch looks for "*".
+                               // it does not make sense to autocomplete
+                               // if they are just previewing the options available.
+                               && !/^[*]+$/.test(dataObject.query[this.searchAttr])){
+                                       this._announceOption(nodes[1]); // 1st real item
+                       }
+               },
+
+               _showResultList: function(){
+                       // summary:
+                       //              Display the drop down if not already displayed, or if it is displayed, then
+                       //              reposition it if necessary (reposition may be necessary if drop down's height changed).
+
+                       this.closeDropDown(true);
+
+                       // hide the tooltip
+                       this.displayMessage("");
+
+                       this.openDropDown();
+
+                       dijit.setWaiState(this.domNode, "expanded", "true");
+               },
+
+               loadDropDown: function(/*Function*/ callback){
+                       // Overrides _HasDropDown.loadDropDown().
+                       // This is called when user has pressed button icon or pressed the down arrow key
+                       // to open the drop down.
+                       
+                       this._startSearchAll();
+               },
+
+               isLoaded: function(){
+                       // signal to _HasDropDown that it needs to call loadDropDown() to load the
+                       // drop down asynchronously before displaying it
+                       return false;
+               },
+
+               closeDropDown: function(){
+                       // Overrides _HasDropDown.closeDropDown().  Closes the drop down (assuming that it's open).
+                       // This method is the callback when the user types ESC or clicking
+                       // the button icon while the drop down is open.  It's also called by other code.
+                       this._abortQuery();
+                       if(this._opened){
+                               this.inherited(arguments);
+                               dijit.setWaiState(this.domNode, "expanded", "false");
+                               dijit.removeWaiState(this.focusNode,"activedescendant");
+                       }
+               },
+
+               _setBlurValue: function(){
+                       // if the user clicks away from the textbox OR tabs away, set the
+                       // value to the textbox value
+                       // #4617:
+                       //              if value is now more choices or previous choices, revert
+                       //              the value
+                       var newvalue = this.get('displayedValue');
+                       var pw = this.dropDown;
+                       if(pw && (
+                               newvalue == pw._messages["previousMessage"] ||
+                               newvalue == pw._messages["nextMessage"]
+                               )
+                       ){
+                               this._setValueAttr(this._lastValueReported, true);
+                       }else if(typeof this.item == "undefined"){
+                               // Update 'value' (ex: KY) according to currently displayed text
+                               this.item = null;
+                               this.set('displayedValue', newvalue);
+                       }else{
+                               if(this.value != this._lastValueReported){
+                                       dijit.form._FormValueWidget.prototype._setValueAttr.call(this, this.value, true);
+                               }
+                               this._refreshState();
+                       }
+               },
+
+               _onBlur: function(){
+                       // summary:
+                       //              Called magically when focus has shifted away from this widget and it's drop down
+                       this.closeDropDown();
+                       this.inherited(arguments);
+               },
+
+               _setItemAttr: function(/*item*/ item, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
+                       // summary:
+                       //              Set the displayed valued in the input box, and the hidden value
+                       //              that gets submitted, based on a dojo.data store item.
+                       // description:
+                       //              Users shouldn't call this function; they should be calling
+                       //              set('item', value)
+                       // tags:
+                       //              private
+                       if(!displayedValue){
+                               displayedValue = this.store.getValue(item, this.searchAttr);
+                       }
+                       var value = this._getValueField() != this.searchAttr? this.store.getIdentity(item) : displayedValue;
+                       this._set("item", item);
+                       dijit.form.ComboBox.superclass._setValueAttr.call(this, value, priorityChange, displayedValue);
+               },
+
+               _announceOption: function(/*Node*/ node){
+                       // summary:
+                       //              a11y code that puts the highlighted option in the textbox.
+                       //              This way screen readers will know what is happening in the
+                       //              menu.
+
+                       if(!node){
+                               return;
+                       }
+                       // pull the text value from the item attached to the DOM node
+                       var newValue;
+                       if(node == this.dropDown.nextButton ||
+                               node == this.dropDown.previousButton){
+                               newValue = node.innerHTML;
+                               this.item = undefined;
+                               this.value = '';
+                       }else{
+                               newValue = this.store.getValue(node.item, this.searchAttr).toString();
+                               this.set('item', node.item, false, newValue);
+                       }
+                       // get the text that the user manually entered (cut off autocompleted text)
+                       this.focusNode.value = this.focusNode.value.substring(0, this._lastInput.length);
+                       // set up ARIA activedescendant
+                       dijit.setWaiState(this.focusNode, "activedescendant", dojo.attr(node, "id"));
+                       // autocomplete the rest of the option to announce change
+                       this._autoCompleteText(newValue);
+               },
+
+               _selectOption: function(/*Event*/ evt){
+                       // summary:
+                       //              Menu callback function, called when an item in the menu is selected.
+                       if(evt){
+                               this._announceOption(evt.target);
+                       }
+                       this.closeDropDown();
+                       this._setCaretPos(this.focusNode, this.focusNode.value.length);
+                       dijit.form._FormValueWidget.prototype._setValueAttr.call(this, this.value, true); // set this.value and fire onChange
+               },
+
+               _startSearchAll: function(){
+                       this._startSearch('');
+               },
+
+               _startSearchFromInput: function(){
+                       this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g, "\\$1"));
+               },
+
+               _getQueryString: function(/*String*/ text){
+                       return dojo.string.substitute(this.queryExpr, [text]);
+               },
+
+               _startSearch: function(/*String*/ key){
+                       // summary:
+                       //              Starts a search for elements matching key (key=="" means to return all items),
+                       //              and calls _openResultList() when the search completes, to display the results.
+                       if(!this.dropDown){
+                               var popupId = this.id + "_popup",
+                               dropDownConstructor = dojo.getObject(this.dropDownClass, false);
+                               this.dropDown = new dropDownConstructor({
+                                       onChange: dojo.hitch(this, this._selectOption),
+                                       id: popupId,
+                                       dir: this.dir
+                               });
+                               dijit.removeWaiState(this.focusNode,"activedescendant");
+                               dijit.setWaiState(this.textbox,"owns",popupId); // associate popup with textbox
+                       }
+                       // create a new query to prevent accidentally querying for a hidden
+                       // value from FilteringSelect's keyField
+                       var query = dojo.clone(this.query); // #5970
+                       this._lastInput = key; // Store exactly what was entered by the user.
+                       this._lastQuery = query[this.searchAttr] = this._getQueryString(key);
+                       // #5970: set _lastQuery, *then* start the timeout
+                       // otherwise, if the user types and the last query returns before the timeout,
+                       // _lastQuery won't be set and their input gets rewritten
+                       this.searchTimer=setTimeout(dojo.hitch(this, function(query, _this){
+                               this.searchTimer = null;
+                               var fetch = {
+                                       queryOptions: {
+                                               ignoreCase: this.ignoreCase,
+                                               deep: true
+                                       },
+                                       query: query,
+                                       onBegin: dojo.hitch(this, "_setMaxOptions"),
+                                       onComplete: dojo.hitch(this, "_openResultList"),
+                                       onError: function(errText){
+                                               _this._fetchHandle = null;
+                                               console.error('dijit.form.ComboBox: ' + errText);
+                                               _this.closeDropDown();
+                                       },
+                                       start: 0,
+                                       count: this.pageSize
+                               };
+                               dojo.mixin(fetch, _this.fetchProperties);
+                               this._fetchHandle = _this.store.fetch(fetch);
+
+                               var nextSearch = function(dataObject, direction){
+                                       dataObject.start += dataObject.count*direction;
+                                       // #4091:
+                                       //              tell callback the direction of the paging so the screen
+                                       //              reader knows which menu option to shout
+                                       dataObject.direction = direction;
+                                       this._fetchHandle = this.store.fetch(dataObject);
+                                       this.focus();
+                               };
+                               this._nextSearch = this.dropDown.onPage = dojo.hitch(this, nextSearch, this._fetchHandle);
+                       }, query, this), this.searchDelay);
+               },
+
+               _setMaxOptions: function(size, request){
+                        this._maxOptions = size;
+               },
+
+               _getValueField: function(){
+                       // summary:
+                       //              Helper for postMixInProperties() to set this.value based on data inlined into the markup.
+                       //              Returns the attribute name in the item (in dijit.form._ComboBoxDataStore) to use as the value.
+                       return this.searchAttr;
+               },
+
+               //////////// INITIALIZATION METHODS ///////////////////////////////////////
+
+               constructor: function(){
+                       this.query={};
+                       this.fetchProperties={};
+               },
+
+               postMixInProperties: function(){
+                       if(!this.store){
+                               var srcNodeRef = this.srcNodeRef;
+
+                               // if user didn't specify store, then assume there are option tags
+                               this.store = new dijit.form._ComboBoxDataStore(srcNodeRef);
+
+                               // if there is no value set and there is an option list, set
+                               // the value to the first value to be consistent with native
+                               // Select
+
+                               // Firefox and Safari set value
+                               // IE6 and Opera set selectedIndex, which is automatically set
+                               // by the selected attribute of an option tag
+                               // IE6 does not set value, Opera sets value = selectedIndex
+                               if(!("value" in this.params)){
+                                       var item = (this.item = this.store.fetchSelectedItem());
+                                       if(item){
+                                               var valueField = this._getValueField();
+                                               this.value = this.store.getValue(item, valueField);
+                                       }
+                               }
+                       }
+
+                       this.inherited(arguments);
+               },
+
+               postCreate: function(){
+                       // summary:
+                       //              Subclasses must call this method from their postCreate() methods
+                       // tags:
+                       //              protected
+
+                       // find any associated label element and add to ComboBox node.
+                       var label=dojo.query('label[for="'+this.id+'"]');
+                       if(label.length){
+                               label[0].id = (this.id+"_label");
+                               dijit.setWaiState(this.domNode, "labelledby", label[0].id);
+
+                       }
+                       this.inherited(arguments);
+               },
+
+               _setHasDownArrowAttr: function(val){
+                       this.hasDownArrow = val;
+                       this._buttonNode.style.display = val ? "" : "none";
+               },
+
+               _getMenuLabelFromItem: function(/*Item*/ item){
+                       var label = this.labelFunc(item, this.store),
+                               labelType = this.labelType;
+                       // If labelType is not "text" we don't want to screw any markup ot whatever.
+                       if(this.highlightMatch != "none" && this.labelType == "text" && this._lastInput){
+                               label = this.doHighlight(label, this._escapeHtml(this._lastInput));
+                               labelType = "html";
+                       }
+                       return {html: labelType == "html", label: label};
+               },
+
+               doHighlight: function(/*String*/ label, /*String*/ find){
+                       // summary:
+                       //              Highlights the string entered by the user in the menu.  By default this
+                       //              highlights the first occurrence found. Override this method
+                       //              to implement your custom highlighting.
+                       // tags:
+                       //              protected
+
+                       var
+                               // Add (g)lobal modifier when this.highlightMatch == "all" and (i)gnorecase when this.ignoreCase == true
+                               modifiers = (this.ignoreCase ? "i" : "") + (this.highlightMatch == "all" ? "g" : ""),
+                               i = this.queryExpr.indexOf("${0}");
+                       find = dojo.regexp.escapeString(find); // escape regexp special chars
+                       return this._escapeHtml(label).replace(
+                               // prepend ^ when this.queryExpr == "${0}*" and append $ when this.queryExpr == "*${0}"
+                               new RegExp((i == 0 ? "^" : "") + "("+ find +")" + (i == (this.queryExpr.length - 4) ? "$" : ""), modifiers),
+                               '<span class="dijitComboBoxHighlightMatch">$1</span>'
+                       ); // returns String, (almost) valid HTML (entities encoded)
+               },
+
+               _escapeHtml: function(/*String*/ str){
+                       // TODO Should become dojo.html.entities(), when exists use instead
+                       // summary:
+                       //              Adds escape sequences for special characters in XML: &<>"'
+                       str = String(str).replace(/&/gm, "&amp;").replace(/</gm, "&lt;")
+                               .replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
+                       return str; // string
+               },
+
+               reset: function(){
+                       // Overrides the _FormWidget.reset().
+                       // Additionally reset the .item (to clean up).
+                       this.item = null;
+                       this.inherited(arguments);
+               },
+
+               labelFunc: function(/*item*/ item, /*dojo.data.store*/ store){
+                       // summary:
+                       //              Computes the label to display based on the dojo.data store item.
+                       // returns:
+                       //              The label that the ComboBox should display
+                       // tags:
+                       //              private
+
+                       // Use toString() because XMLStore returns an XMLItem whereas this
+                       // method is expected to return a String (#9354)
+                       return store.getValue(item, this.labelAttr || this.searchAttr).toString(); // String
+               }
+       }
+);
+
+dojo.declare(
+       "dijit.form._ComboBoxMenu",
+       [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
+       {
+               // summary:
+               //              Focus-less menu for internal use in `dijit.form.ComboBox`
+               // tags:
+               //              private
+
+               templateString: "<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"
+                               +"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' role='option'></li>"
+                               +"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' role='option'></li>"
+                       +"</ul>",
+
+               // _messages: Object
+               //              Holds "next" and "previous" text for paging buttons on drop down
+               _messages: null,
+               
+               baseClass: "dijitComboBoxMenu",
+
+               postMixInProperties: function(){
+                       this.inherited(arguments);
+                       this._messages = dojo.i18n.getLocalization("dijit.form", "ComboBox", this.lang);
+               },
+
+               buildRendering: function(){
+                       this.inherited(arguments);
+
+                       // fill in template with i18n messages
+                       this.previousButton.innerHTML = this._messages["previousMessage"];
+                       this.nextButton.innerHTML = this._messages["nextMessage"];
+               },
+
+               _setValueAttr: function(/*Object*/ value){
+                       this.value = value;
+                       this.onChange(value);
+               },
+
+               // stubs
+               onChange: function(/*Object*/ value){
+                       // summary:
+                       //              Notifies ComboBox/FilteringSelect that user clicked an option in the drop down menu.
+                       //              Probably should be called onSelect.
+                       // tags:
+                       //              callback
+               },
+               onPage: function(/*Number*/ direction){
+                       // summary:
+                       //              Notifies ComboBox/FilteringSelect that user clicked to advance to next/previous page.
+                       // tags:
+                       //              callback
+               },
+
+               onClose: function(){
+                       // summary:
+                       //              Callback from dijit.popup code to this widget, notifying it that it closed
+                       // tags:
+                       //              private
+                       this._blurOptionNode();
+               },
+
+               _createOption: function(/*Object*/ item, labelFunc){
+                       // summary:
+                       //              Creates an option to appear on the popup menu subclassed by
+                       //              `dijit.form.FilteringSelect`.
+
+                       var menuitem = dojo.create("li", {
+                               "class": "dijitReset dijitMenuItem" +(this.isLeftToRight() ? "" : " dijitMenuItemRtl"),
+                               role: "option"
+                       });
+                       var labelObject = labelFunc(item);
+                       if(labelObject.html){
+                               menuitem.innerHTML = labelObject.label;
+                       }else{
+                               menuitem.appendChild(
+                                       dojo.doc.createTextNode(labelObject.label)
+                               );
+                       }
+                       // #3250: in blank options, assign a normal height
+                       if(menuitem.innerHTML == ""){
+                               menuitem.innerHTML = "&nbsp;";
+                       }
+                       menuitem.item=item;
+                       return menuitem;
+               },
+
+               createOptions: function(results, dataObject, labelFunc){
+                       // summary:
+                       //              Fills in the items in the drop down list
+                       // results:
+                       //              Array of dojo.data items
+                       // dataObject:
+                       //              dojo.data store
+                       // labelFunc:
+                       //              Function to produce a label in the drop down list from a dojo.data item
+
+                       //this._dataObject=dataObject;
+                       //this._dataObject.onComplete=dojo.hitch(comboBox, comboBox._openResultList);
+                       // display "Previous . . ." button
+                       this.previousButton.style.display = (dataObject.start == 0) ? "none" : "";
+                       dojo.attr(this.previousButton, "id", this.id + "_prev");
+                       // create options using _createOption function defined by parent
+                       // ComboBox (or FilteringSelect) class
+                       // #2309:
+                       //              iterate over cache nondestructively
+                       dojo.forEach(results, function(item, i){
+                               var menuitem = this._createOption(item, labelFunc);
+                               dojo.attr(menuitem, "id", this.id + i);
+                               this.domNode.insertBefore(menuitem, this.nextButton);
+                       }, this);
+                       // display "Next . . ." button
+                       var displayMore = false;
+                       //Try to determine if we should show 'more'...
+                       if(dataObject._maxOptions && dataObject._maxOptions != -1){
+                               if((dataObject.start + dataObject.count) < dataObject._maxOptions){
+                                       displayMore = true;
+                               }else if((dataObject.start + dataObject.count) > dataObject._maxOptions && dataObject.count == results.length){
+                                       //Weird return from a datastore, where a start + count > maxOptions
+                                       // implies maxOptions isn't really valid and we have to go into faking it.
+                                       //And more or less assume more if count == results.length
+                                       displayMore = true;
+                               }
+                       }else if(dataObject.count == results.length){
+                               //Don't know the size, so we do the best we can based off count alone.
+                               //So, if we have an exact match to count, assume more.
+                               displayMore = true;
+                       }
+
+                       this.nextButton.style.display = displayMore ? "" : "none";
+                       dojo.attr(this.nextButton,"id", this.id + "_next");
+                       return this.domNode.childNodes;
+               },
+
+               clearResultList: function(){
+                       // summary:
+                       //              Clears the entries in the drop down list, but of course keeps the previous and next buttons.
+                       while(this.domNode.childNodes.length>2){
+                               this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);
+                       }
+                       this._blurOptionNode();
+               },
+
+               _onMouseDown: function(/*Event*/ evt){
+                       dojo.stopEvent(evt);
+               },
+
+               _onMouseUp: function(/*Event*/ evt){
+                       if(evt.target === this.domNode || !this._highlighted_option){
+                               // !this._highlighted_option check to prevent immediate selection when menu appears on top
+                               // of <input>, see #9898.  Note that _HasDropDown also has code to prevent this.
+                               return;
+                       }else if(evt.target == this.previousButton){
+                               this._blurOptionNode();
+                               this.onPage(-1);
+                       }else if(evt.target == this.nextButton){
+                               this._blurOptionNode();
+                               this.onPage(1);
+                       }else{
+                               var tgt = evt.target;
+                               // while the clicked node is inside the div
+                               while(!tgt.item){
+                                       // recurse to the top
+                                       tgt = tgt.parentNode;
+                               }
+                               this._setValueAttr({ target: tgt }, true);
+                       }
+               },
+
+               _onMouseOver: function(/*Event*/ evt){
+                       if(evt.target === this.domNode){ return; }
+                       var tgt = evt.target;
+                       if(!(tgt == this.previousButton || tgt == this.nextButton)){
+                               // while the clicked node is inside the div
+                               while(!tgt.item){
+                                       // recurse to the top
+                                       tgt = tgt.parentNode;
+                               }
+                       }
+                       this._focusOptionNode(tgt);
+               },
+
+               _onMouseOut: function(/*Event*/ evt){
+                       if(evt.target === this.domNode){ return; }
+                       this._blurOptionNode();
+               },
+
+               _focusOptionNode: function(/*DomNode*/ node){
+                       // summary:
+                       //              Does the actual highlight.
+                       if(this._highlighted_option != node){
+                               this._blurOptionNode();
+                               this._highlighted_option = node;
+                               dojo.addClass(this._highlighted_option, "dijitMenuItemSelected");
+                       }
+               },
+
+               _blurOptionNode: function(){
+                       // summary:
+                       //              Removes highlight on highlighted option.
+                       if(this._highlighted_option){
+                               dojo.removeClass(this._highlighted_option, "dijitMenuItemSelected");
+                               this._highlighted_option = null;
+                       }
+               },
+
+               _highlightNextOption: function(){
+                       // summary:
+                       //              Highlight the item just below the current selection.
+                       //              If nothing selected, highlight first option.
+
+                       // because each press of a button clears the menu,
+                       // the highlighted option sometimes becomes detached from the menu!
+                       // test to see if the option has a parent to see if this is the case.
+                       if(!this.getHighlightedOption()){
+                               var fc = this.domNode.firstChild;
+                               this._focusOptionNode(fc.style.display == "none" ? fc.nextSibling : fc);
+                       }else{
+                               var ns = this._highlighted_option.nextSibling;
+                               if(ns && ns.style.display != "none"){
+                                       this._focusOptionNode(ns);
+                               }else{
+                                       this.highlightFirstOption();
+                               }
+                       }
+                       // scrollIntoView is called outside of _focusOptionNode because in IE putting it inside causes the menu to scroll up on mouseover
+                       dojo.window.scrollIntoView(this._highlighted_option);
+               },
+
+               highlightFirstOption: function(){
+                       // summary:
+                       //              Highlight the first real item in the list (not Previous Choices).
+                       var first = this.domNode.firstChild;
+                       var second = first.nextSibling;
+                       this._focusOptionNode(second.style.display == "none" ? first : second); // remotely possible that Previous Choices is the only thing in the list
+                       dojo.window.scrollIntoView(this._highlighted_option);
+               },
+
+               highlightLastOption: function(){
+                       // summary:
+                       //              Highlight the last real item in the list (not More Choices).
+                       this._focusOptionNode(this.domNode.lastChild.previousSibling);
+                       dojo.window.scrollIntoView(this._highlighted_option);
+               },
+
+               _highlightPrevOption: function(){
+                       // summary:
+                       //              Highlight the item just above the current selection.
+                       //              If nothing selected, highlight last option (if
+                       //              you select Previous and try to keep scrolling up the list).
+                       if(!this.getHighlightedOption()){
+                               var lc = this.domNode.lastChild;
+                               this._focusOptionNode(lc.style.display == "none" ? lc.previousSibling : lc);
+                       }else{
+                               var ps = this._highlighted_option.previousSibling;
+                               if(ps && ps.style.display != "none"){
+                                       this._focusOptionNode(ps);
+                               }else{
+                                       this.highlightLastOption();
+                               }
+                       }
+                       dojo.window.scrollIntoView(this._highlighted_option);
+               },
+
+               _page: function(/*Boolean*/ up){
+                       // summary:
+                       //              Handles page-up and page-down keypresses
+
+                       var scrollamount = 0;
+                       var oldscroll = this.domNode.scrollTop;
+                       var height = dojo.style(this.domNode, "height");
+                       // if no item is highlighted, highlight the first option
+                       if(!this.getHighlightedOption()){
+                               this._highlightNextOption();
+                       }
+                       while(scrollamount<height){
+                               if(up){
+                                       // stop at option 1
+                                       if(!this.getHighlightedOption().previousSibling ||
+                                               this._highlighted_option.previousSibling.style.display == "none"){
+                                               break;
+                                       }
+                                       this._highlightPrevOption();
+                               }else{
+                                       // stop at last option
+                                       if(!this.getHighlightedOption().nextSibling ||
+                                               this._highlighted_option.nextSibling.style.display == "none"){
+                                               break;
+                                       }
+                                       this._highlightNextOption();
+                               }
+                               // going backwards
+                               var newscroll=this.domNode.scrollTop;
+                               scrollamount+=(newscroll-oldscroll)*(up ? -1:1);
+                               oldscroll=newscroll;
+                       }
+               },
+
+               pageUp: function(){
+                       // summary:
+                       //              Handles pageup keypress.
+                       //              TODO: just call _page directly from handleKey().
+                       // tags:
+                       //              private
+                       this._page(true);
+               },
+
+               pageDown: function(){
+                       // summary:
+                       //              Handles pagedown keypress.
+                       //              TODO: just call _page directly from handleKey().
+                       // tags:
+                       //              private
+                       this._page(false);
+               },
+
+               getHighlightedOption: function(){
+                       // summary:
+                       //              Returns the highlighted option.
+                       var ho = this._highlighted_option;
+                       return (ho && ho.parentNode) ? ho : null;
+               },
+
+               handleKey: function(evt){
+                       // summary:
+                       //              Handle keystroke event forwarded from ComboBox, returning false if it's
+                       //              a keystroke I recognize and process, true otherwise.
+                       switch(evt.charOrCode){
+                               case dojo.keys.DOWN_ARROW:
+                                       this._highlightNextOption();
+                                       return false;
+                               case dojo.keys.PAGE_DOWN:
+                                       this.pageDown();
+                                       return false;
+                               case dojo.keys.UP_ARROW:
+                                       this._highlightPrevOption();
+                                       return false;
+                               case dojo.keys.PAGE_UP:
+                                       this.pageUp();
+                                       return false;
+                               default:
+                                       return true;
+                       }
+               }
+       }
+);
+
+dojo.declare(
+       "dijit.form.ComboBox",
+       [dijit.form.ValidationTextBox, dijit.form.ComboBoxMixin],
+       {
+               // summary:
+               //              Auto-completing text box, and base class for dijit.form.FilteringSelect.
+               //
+               // description:
+               //              The drop down box's values are populated from an class called
+               //              a data provider, which returns a list of values based on the characters
+               //              that the user has typed into the input box.
+               //              If OPTION tags are used as the data provider via markup,
+               //              then the OPTION tag's child text node is used as the widget value
+               //              when selected.  The OPTION tag's value attribute is ignored.
+               //              To set the default value when using OPTION tags, specify the selected
+               //              attribute on 1 of the child OPTION tags.
+               //
+               //              Some of the options to the ComboBox are actually arguments to the data
+               //              provider.
+
+               _setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
+                       // summary:
+                       //              Hook so set('value', value) works.
+                       // description:
+                       //              Sets the value of the select.
+                       this._set("item", null); // value not looked up in store
+                       if(!value){ value = ''; } // null translates to blank
+                       dijit.form.ValidationTextBox.prototype._setValueAttr.call(this, value, priorityChange, displayedValue);
+               }
+       }
+);
+
+dojo.declare("dijit.form._ComboBoxDataStore", null, {
+       // summary:
+       //              Inefficient but small data store specialized for inlined `dijit.form.ComboBox` data
+       //
+       // description:
+       //              Provides a store for inlined data like:
+       //
+       //      |       <select>
+       //      |               <option value="AL">Alabama</option>
+       //      |               ...
+       //
+       //              Actually. just implements the subset of dojo.data.Read/Notification
+       //              needed for ComboBox and FilteringSelect to work.
+       //
+       //              Note that an item is just a pointer to the <option> DomNode.
+
+       constructor: function( /*DomNode*/ root){
+               this.root = root;
+               if(root.tagName != "SELECT" && root.firstChild){
+                       root = dojo.query("select", root);
+                       if(root.length > 0){ // SELECT is a child of srcNodeRef
+                               root = root[0];
+                       }else{ // no select, so create 1 to parent the option tags to define selectedIndex
+                               this.root.innerHTML = "<SELECT>"+this.root.innerHTML+"</SELECT>";
+                               root = this.root.firstChild;
+                       }
+                       this.root = root;
+               }
+               dojo.query("> option", root).forEach(function(node){
+                       //      TODO: this was added in #3858 but unclear why/if it's needed;  doesn't seem to be.
+                       //      If it is needed then can we just hide the select itself instead?
+                       //node.style.display="none";
+                       node.innerHTML = dojo.trim(node.innerHTML);
+               });
+
+       },
+
+       getValue: function(     /*item*/ item,
+                                               /*attribute-name-string*/ attribute,
+                                               /*value?*/ defaultValue){
+               return (attribute == "value") ? item.value : (item.innerText || item.textContent || '');
+       },
+
+       isItemLoaded: function(/*anything*/ something){
+               return true;
+       },
+
+       getFeatures: function(){
+               return {"dojo.data.api.Read": true, "dojo.data.api.Identity": true};
+       },
+
+       _fetchItems: function(  /*Object*/ args,
+                                                       /*Function*/ findCallback,
+                                                       /*Function*/ errorCallback){
+               // summary:
+               //              See dojo.data.util.simpleFetch.fetch()
+               if(!args.query){ args.query = {}; }
+               if(!args.query.name){ args.query.name = ""; }
+               if(!args.queryOptions){ args.queryOptions = {}; }
+               var matcher = dojo.data.util.filter.patternToRegExp(args.query.name, args.queryOptions.ignoreCase),
+                       items = dojo.query("> option", this.root).filter(function(option){
+                               return (option.innerText || option.textContent || '').match(matcher);
+                       } );
+               if(args.sort){
+                       items.sort(dojo.data.util.sorter.createSortFunction(args.sort, this));
+               }
+               findCallback(items, args);
+       },
+
+       close: function(/*dojo.data.api.Request || args || null*/ request){
+               return;
+       },
+
+       getLabel: function(/*item*/ item){
+               return item.innerHTML;
+       },
+
+       getIdentity: function(/*item*/ item){
+               return dojo.attr(item, "value");
+       },
+
+       fetchItemByIdentity: function(/*Object*/ args){
+               // summary:
+               //              Given the identity of an item, this method returns the item that has
+               //              that identity through the onItem callback.
+               //              Refer to dojo.data.api.Identity.fetchItemByIdentity() for more details.
+               //
+               // description:
+               //              Given arguments like:
+               //
+               //      |               {identity: "CA", onItem: function(item){...}
+               //
+               //              Call `onItem()` with the DOM node `<option value="CA">California</option>`
+               var item = dojo.query("> option[value='" + args.identity + "']", this.root)[0];
+               args.onItem(item);
+       },
+
+       fetchSelectedItem: function(){
+               // summary:
+               //              Get the option marked as selected, like `<option selected>`.
+               //              Not part of dojo.data API.
+               var root = this.root,
+                       si = root.selectedIndex;
+               return typeof si == "number"
+                       ? dojo.query("> option:nth-child(" + (si != -1 ? si+1 : 1) + ")", root)[0]
+                       : null; // dojo.data.Item
+       }
 });
-if(_53.sort){
-_57.sort(dojo.data.util.sorter.createSortFunction(_53.sort,this));
-}
-_54(_57,_53);
-},close:function(_59){
-return;
-},getLabel:function(_5a){
-return _5a.innerHTML;
-},getIdentity:function(_5b){
-return dojo.attr(_5b,"value");
-},fetchItemByIdentity:function(_5c){
-var _5d=dojo.query("> option[value='"+_5c.identity+"']",this.root)[0];
-_5c.onItem(_5d);
-},fetchSelectedItem:function(){
-var _5e=this.root,si=_5e.selectedIndex;
-return typeof si=="number"?dojo.query("> option:nth-child("+(si!=-1?si+1:1)+")",_5e)[0]:null;
-}});
+//Mix in the simple fetch implementation to this class.
 dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);
+
 }
index db2d04aea2169ecd0f44ecb440b34ff89918bc72..d311582ac0c59bc49f3c633827bef2f47d9a5002 100644 (file)
@@ -1,12 +1,15 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.ComboButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.ComboButton"] = true;
 dojo.provide("dijit.form.ComboButton");
 dojo.require("dijit.form.Button");
+
+
+
 }
index a6519b2a78bd913567aa6b8632f0ff5b5582645f..cd0d389a0254b4ff36a460bca643fcc7a1c3deb2 100644 (file)
@@ -1,27 +1,96 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.CurrencyTextBox"]){
-dojo._hasResource["dijit.form.CurrencyTextBox"]=true;
+if(!dojo._hasResource["dijit.form.CurrencyTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.CurrencyTextBox"] = true;
 dojo.provide("dijit.form.CurrencyTextBox");
 dojo.require("dojo.currency");
 dojo.require("dijit.form.NumberTextBox");
-dojo.declare("dijit.form.CurrencyTextBox",dijit.form.NumberTextBox,{currency:"",baseClass:"dijitTextBox dijitCurrencyTextBox",regExpGen:function(_1){
-return "("+(this._focused?this.inherited(arguments,[dojo.mixin({},_1,this.editOptions)])+"|":"")+dojo.currency.regexp(_1)+")";
-},_formatter:dojo.currency.format,parse:function(_2,_3){
-var v=dojo.currency.parse(_2,_3);
-if(isNaN(v)&&/\d+/.test(_2)){
-return this.inherited(arguments,[_2,dojo.mixin({},_3,this.editOptions)]);
-}
-return v;
-},_setConstraintsAttr:function(_4){
-if(!_4.currency&&this.currency){
-_4.currency=this.currency;
-}
-this.inherited(arguments,[dojo.currency._mixInDefaults(dojo.mixin(_4,{exponent:false}))]);
-}});
+
+
+/*=====
+dojo.declare(
+       "dijit.form.CurrencyTextBox.__Constraints",
+       [dijit.form.NumberTextBox.__Constraints, dojo.currency.__FormatOptions, dojo.currency.__ParseOptions], {
+       // summary:
+       //              Specifies both the rules on valid/invalid values (minimum, maximum,
+       //              number of required decimal places), and also formatting options for
+       //              displaying the value when the field is not focused (currency symbol,
+       //              etc.)
+       // description:
+       //              Follows the pattern of `dijit.form.NumberTextBox.constraints`.
+       //              In general developers won't need to set this parameter
+       // example:
+       //              To ensure that the user types in the cents (for example, 1.00 instead of just 1):
+       //      |               {fractional:true}
+});
+=====*/
+
+dojo.declare(
+       "dijit.form.CurrencyTextBox",
+       dijit.form.NumberTextBox,
+       {
+               // summary:
+               //              A validating currency textbox
+               // description:
+               //              CurrencyTextBox is similar to `dijit.form.NumberTextBox` but has a few
+               //              extra features related to currency:
+               //
+               //              1. After specifying the currency type (american dollars, euros, etc.) it automatically
+               //                      sets parse/format options such as how many decimal places to show.
+               //              2. The currency mark (dollar sign, euro mark, etc.) is displayed when the field is blurred
+               //                      but erased during editing, so that the user can just enter a plain number.
+
+               // currency: [const] String
+               //              the [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code, a three letter sequence like "USD"
+               currency: "",
+
+               /*=====
+               // constraints: dijit.form.CurrencyTextBox.__Constraints
+               //              Despite the name, this parameter specifies both constraints on the input
+               //              (including minimum/maximum allowed values) as well as
+               //              formatting options.  See `dijit.form.CurrencyTextBox.__Constraints` for details.
+               constraints: {},
+               ======*/
+               
+               baseClass: "dijitTextBox dijitCurrencyTextBox",
+
+               // Override regExpGen ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
+               // than a straight regexp to deal with locale  (plus formatting options too?)
+               regExpGen: function(constraints){
+                       // if focused, accept either currency data or NumberTextBox format
+                       return '(' + (this._focused? this.inherited(arguments, [ dojo.mixin({}, constraints, this.editOptions) ]) + '|' : '')
+                               + dojo.currency.regexp(constraints) + ')';
+               },
+
+               // Override NumberTextBox._formatter to deal with currencies, ex: converts "123.45" to "$123.45"
+               _formatter: dojo.currency.format,
+
+               _parser: dojo.currency.parse,
+
+               parse: function(/*String*/ value, /*Object*/ constraints){
+                       // summary:
+                       //              Parses string value as a Currency, according to the constraints object
+                       // tags:
+                       //              protected extension
+                       var v = this.inherited(arguments);
+                       if(isNaN(v) && /\d+/.test(value)){ // currency parse failed, but it could be because they are using NumberTextBox format so try its parse
+                               v = dojo.hitch(dojo.mixin({}, this, { _parser: dijit.form.NumberTextBox.prototype._parser }), "inherited")(arguments);
+                       }
+                       return v;
+               },
+
+               _setConstraintsAttr: function(/*Object*/ constraints){
+                       if(!constraints.currency && this.currency){
+                               constraints.currency = this.currency;
+                       }
+                       this.inherited(arguments, [ dojo.currency._mixInDefaults(dojo.mixin(constraints, { exponent: false })) ]); // get places
+               }
+       }
+);
+
 }
index d040be5f8c678258917f2598c84cfac3a6175a6f..3d929ae76b86d640c9015b2879de0ae35d1f43d8 100644 (file)
@@ -1,14 +1,40 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.DateTextBox"]){
-dojo._hasResource["dijit.form.DateTextBox"]=true;
+if(!dojo._hasResource["dijit.form.DateTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.DateTextBox"] = true;
 dojo.provide("dijit.form.DateTextBox");
 dojo.require("dijit.Calendar");
 dojo.require("dijit.form._DateTimeTextBox");
-dojo.declare("dijit.form.DateTextBox",dijit.form._DateTimeTextBox,{baseClass:"dijitTextBox dijitDateTextBox",popupClass:"dijit.Calendar",_selector:"date",value:new Date("")});
+
+
+dojo.declare(
+       "dijit.form.DateTextBox",
+       dijit.form._DateTimeTextBox,
+       {
+               // summary:
+               //              A validating, serializable, range-bound date text box with a drop down calendar
+               //
+               //              Example:
+               // |    new dijit.form.DateTextBox({value: new Date(2009, 0, 20)})
+               //
+               //              Example:
+               // |    <input dojotype='dijit.form.DateTextBox' value='2009-01-20'>
+
+               baseClass: "dijitTextBox dijitComboBox dijitDateTextBox",
+               popupClass: "dijit.Calendar",
+               _selector: "date",
+
+               // value: Date
+               //              The value of this widget as a JavaScript Date object, with only year/month/day specified.
+               //              If specified in markup, use the format specified in `dojo.date.stamp.fromISOString`.
+               //              set("value", ...) accepts either a Date object or a string.
+               value: new Date("")     // value.toString()="NaN"
+       }
+);
+
 }
index 53f66278e43958f5024007374a5d2ace8e3e26a2..2489a4cdfdfe6bc6028c0a81d16be1d48dd7b11e 100644 (file)
@@ -1,12 +1,15 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.DropDownButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.DropDownButton"] = true;
 dojo.provide("dijit.form.DropDownButton");
 dojo.require("dijit.form.Button");
+
+
+
 }
index 08703226c8c664f0e20558400d0f363b4e3f7f8f..81b44ff3ba00a1d9d27f3298255c5748e12795ba 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.FilteringSelect"]){
-dojo._hasResource["dijit.form.FilteringSelect"]=true;
+if(!dojo._hasResource["dijit.form.FilteringSelect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.FilteringSelect"] = true;
 dojo.provide("dijit.form.FilteringSelect");
 dojo.require("dijit.form.ComboBox");
-dojo.declare("dijit.form.FilteringSelect",[dijit.form.MappedTextBox,dijit.form.ComboBoxMixin],{_isvalid:true,required:true,_lastDisplayedValue:"",isValid:function(){
-return this._isvalid||(!this.required&&this.get("displayedValue")=="");
-},_refreshState:function(){
-if(!this.searchTimer){
-this.inherited(arguments);
-}
-},_callbackSetLabel:function(_1,_2,_3){
-if((_2&&_2.query[this.searchAttr]!=this._lastQuery)||(!_2&&_1.length&&this.store.getIdentity(_1[0])!=this._lastQuery)){
-return;
-}
-if(!_1.length){
-this.valueNode.value="";
-dijit.form.TextBox.superclass._setValueAttr.call(this,"",_3||(_3===undefined&&!this._focused));
-this._isvalid=false;
-this.validate(this._focused);
-this.item=null;
-}else{
-this.set("item",_1[0],_3);
-}
-},_openResultList:function(_4,_5){
-if(_5.query[this.searchAttr]!=this._lastQuery){
-return;
-}
-if(this.item===undefined){
-this._isvalid=_4.length!=0||this._maxOptions!=0;
-this.validate(true);
-}
-dijit.form.ComboBoxMixin.prototype._openResultList.apply(this,arguments);
-},_getValueAttr:function(){
-return this.valueNode.value;
-},_getValueField:function(){
-return "value";
-},_setValueAttr:function(_6,_7){
-if(!this._onChangeActive){
-_7=null;
-}
-this._lastQuery=_6;
-if(_6===null||_6===""){
-this._setDisplayedValueAttr("",_7);
-return;
-}
-var _8=this;
-this.store.fetchItemByIdentity({identity:_6,onItem:function(_9){
-_8._callbackSetLabel(_9?[_9]:[],undefined,_7);
-}});
-},_setItemAttr:function(_a,_b,_c){
-this._isvalid=true;
-this.inherited(arguments);
-this.valueNode.value=this.value;
-this._lastDisplayedValue=this.textbox.value;
-},_getDisplayQueryString:function(_d){
-return _d.replace(/([\\\*\?])/g,"\\$1");
-},_setDisplayedValueAttr:function(_e,_f){
-if(!this._created){
-_f=false;
-}
-if(this.store){
-this._hideResultList();
-var _10=dojo.clone(this.query);
-this._lastQuery=_10[this.searchAttr]=this._getDisplayQueryString(_e);
-this.textbox.value=_e;
-this._lastDisplayedValue=_e;
-var _11=this;
-var _12={query:_10,queryOptions:{ignoreCase:this.ignoreCase,deep:true},onComplete:function(_13,_14){
-_11._fetchHandle=null;
-dojo.hitch(_11,"_callbackSetLabel")(_13,_14,_f);
-},onError:function(_15){
-_11._fetchHandle=null;
-console.error("dijit.form.FilteringSelect: "+_15);
-dojo.hitch(_11,"_callbackSetLabel")([],undefined,false);
-}};
-dojo.mixin(_12,this.fetchProperties);
-this._fetchHandle=this.store.fetch(_12);
-}
-},postMixInProperties:function(){
-this.inherited(arguments);
-this._isvalid=!this.required;
-},undo:function(){
-this.set("displayedValue",this._lastDisplayedValue);
-}});
+
+
+dojo.declare(
+       "dijit.form.FilteringSelect",
+       [dijit.form.MappedTextBox, dijit.form.ComboBoxMixin],
+       {
+               // summary:
+               //              An enhanced version of the HTML SELECT tag, populated dynamically
+               //
+               // description:
+               //              An enhanced version of the HTML SELECT tag, populated dynamically. It works
+               //              very nicely with very large data sets because it can load and page data as needed.
+               //              It also resembles ComboBox, but does not allow values outside of the provided ones.
+               //              If OPTION tags are used as the data provider via markup, then the
+               //              OPTION tag's child text node is used as the displayed value when selected
+               //              while the OPTION tag's value attribute is used as the widget value on form submit.
+               //              To set the default value when using OPTION tags, specify the selected
+               //              attribute on 1 of the child OPTION tags.
+               //
+               //              Similar features:
+               //                      - There is a drop down list of possible values.
+               //                      - You can only enter a value from the drop down list.  (You can't
+               //                              enter an arbitrary value.)
+               //                      - The value submitted with the form is the hidden value (ex: CA),
+               //                              not the displayed value a.k.a. label (ex: California)
+               //
+               //              Enhancements over plain HTML version:
+               //                      - If you type in some text then it will filter down the list of
+               //                              possible values in the drop down list.
+               //                      - List can be specified either as a static list or via a javascript
+               //                              function (that can get the list from a server)
+
+               // required: Boolean
+               //              True (default) if user is required to enter a value into this field.
+               required: true,
+
+               _lastDisplayedValue: "",
+
+               _isValidSubset: function(){
+                       return this._opened;
+               },
+
+               isValid: function(){
+                       // Overrides ValidationTextBox.isValid()
+                       return this.item || (!this.required && this.get('displayedValue') == ""); // #5974
+               },
+
+               _refreshState: function(){
+                       if(!this.searchTimer){ // state will be refreshed after results are returned
+                               this.inherited(arguments);
+                       }
+               },
+
+               _callbackSetLabel: function(
+                                               /*Array*/ result,
+                                               /*Object*/ dataObject,
+                                               /*Boolean?*/ priorityChange){
+                       // summary:
+                       //              Callback from dojo.data after lookup of user entered value finishes
+
+                       // setValue does a synchronous lookup,
+                       // so it calls _callbackSetLabel directly,
+                       // and so does not pass dataObject
+                       // still need to test against _lastQuery in case it came too late
+                       if((dataObject && dataObject.query[this.searchAttr] != this._lastQuery) || (!dataObject && result.length && this.store.getIdentity(result[0]) != this._lastQuery)){
+                               return;
+                       }
+                       if(!result.length){
+                               //#3268: don't modify display value on bad input
+                               //#3285: change CSS to indicate error
+                               this.valueNode.value = "";
+                               dijit.form.TextBox.superclass._setValueAttr.call(this, "", priorityChange || (priorityChange === undefined && !this._focused));
+                               this._set("item", null);
+                               this.validate(this._focused);
+                       }else{
+                               this.set('item', result[0], priorityChange);
+                       }
+               },
+
+               _openResultList: function(/*Object*/ results, /*Object*/ dataObject){
+                       // Callback when a data store query completes.
+                       // Overrides ComboBox._openResultList()
+
+                       // #3285: tap into search callback to see if user's query resembles a match
+                       if(dataObject.query[this.searchAttr] != this._lastQuery){
+                               return;
+                       }
+                       dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments);
+
+                       if(this.item === undefined){ // item == undefined for keyboard search
+                               // If the search returned no items that means that the user typed
+                               // in something invalid (and they can't make it valid by typing more characters),
+                               // so flag the FilteringSelect as being in an invalid state
+                               this.validate(true);
+                       }
+               },
+
+               _getValueAttr: function(){
+                       // summary:
+                       //              Hook for get('value') to work.
+
+                       // don't get the textbox value but rather the previously set hidden value.
+                       // Use this.valueNode.value which isn't always set for other MappedTextBox widgets until blur
+                       return this.valueNode.value;
+               },
+
+               _getValueField: function(){
+                       // Overrides ComboBox._getValueField()
+                       return "value";
+               },
+
+               _setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange){
+                       // summary:
+                       //              Hook so set('value', value) works.
+                       // description:
+                       //              Sets the value of the select.
+                       //              Also sets the label to the corresponding value by reverse lookup.
+                       if(!this._onChangeActive){ priorityChange = null; }
+                       this._lastQuery = value;
+
+                       if(value === null || value === ''){
+                               this._setDisplayedValueAttr('', priorityChange);
+                               return;
+                       }
+
+                       //#3347: fetchItemByIdentity if no keyAttr specified
+                       var self = this;
+                       this.store.fetchItemByIdentity({
+                               identity: value,
+                               onItem: function(item){
+                                       self._callbackSetLabel(item? [item] : [], undefined, priorityChange);
+                               }
+                       });
+               },
+
+               _setItemAttr: function(/*item*/ item, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
+                       // summary:
+                       //              Set the displayed valued in the input box, and the hidden value
+                       //              that gets submitted, based on a dojo.data store item.
+                       // description:
+                       //              Users shouldn't call this function; they should be calling
+                       //              set('item', value)
+                       // tags:
+                       //              private
+                       this.inherited(arguments);
+                       this.valueNode.value = this.value;
+                       this._lastDisplayedValue = this.textbox.value;
+               },
+
+               _getDisplayQueryString: function(/*String*/ text){
+                       return text.replace(/([\\\*\?])/g, "\\$1");
+               },
+
+               _setDisplayedValueAttr: function(/*String*/ label, /*Boolean?*/ priorityChange){
+                       // summary:
+                       //              Hook so set('displayedValue', label) works.
+                       // description:
+                       //              Sets textbox to display label. Also performs reverse lookup
+                       //              to set the hidden value.  label should corresponding to item.searchAttr.
+
+                       if(label == null){ label = ''; }
+
+                       // This is called at initialization along with every custom setter.
+                       // Usually (or always?) the call can be ignored.   If it needs to be
+                       // processed then at least make sure that the XHR request doesn't trigger an onChange()
+                       // event, even if it returns after creation has finished
+                       if(!this._created){
+                               if(!("displayedValue" in this.params)){
+                                       return;
+                               }
+                               priorityChange = false;
+                       }
+
+                       // Do a reverse lookup to map the specified displayedValue to the hidden value.
+                       // Note that if there's a custom labelFunc() this code
+                       if(this.store){
+                               this.closeDropDown();
+                               var query = dojo.clone(this.query); // #6196: populate query with user-specifics
+                               // escape meta characters of dojo.data.util.filter.patternToRegExp().
+                               this._lastQuery = query[this.searchAttr] = this._getDisplayQueryString(label);
+                               // If the label is not valid, the callback will never set it,
+                               // so the last valid value will get the warning textbox.   Set the
+                               // textbox value now so that the impending warning will make
+                               // sense to the user
+                               this.textbox.value = label;
+                               this._lastDisplayedValue = label;
+                               this._set("displayedValue", label);     // for watch("displayedValue") notification
+                               var _this = this;
+                               var fetch = {
+                                       query: query,
+                                       queryOptions: {
+                                               ignoreCase: this.ignoreCase,
+                                               deep: true
+                                       },
+                                       onComplete: function(result, dataObject){
+                                               _this._fetchHandle = null;
+                                               dojo.hitch(_this, "_callbackSetLabel")(result, dataObject, priorityChange);
+                                       },
+                                       onError: function(errText){
+                                               _this._fetchHandle = null;
+                                               console.error('dijit.form.FilteringSelect: ' + errText);
+                                               dojo.hitch(_this, "_callbackSetLabel")([], undefined, false);
+                                       }
+                               };
+                               dojo.mixin(fetch, this.fetchProperties);
+                               this._fetchHandle = this.store.fetch(fetch);
+                       }
+               },
+
+               undo: function(){
+                       this.set('displayedValue', this._lastDisplayedValue);
+               }
+       }
+);
+
 }
index 618700b5dd2f72b657de7f28ea852aa78fabec14..8eba470b95502eec782314a2b8511dd08b31ddf4 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.Form"]){
-dojo._hasResource["dijit.form.Form"]=true;
+if(!dojo._hasResource["dijit.form.Form"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.Form"] = true;
 dojo.provide("dijit.form.Form");
 dojo.require("dijit._Widget");
 dojo.require("dijit._Templated");
 dojo.require("dijit.form._FormMixin");
-dojo.declare("dijit.form.Form",[dijit._Widget,dijit._Templated,dijit.form._FormMixin],{name:"",action:"",method:"",encType:"","accept-charset":"",accept:"",target:"",templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{action:"",method:"",encType:"","accept-charset":"",accept:"",target:""}),postMixInProperties:function(){
-this.nameAttrSetting=this.name?("name='"+this.name+"'"):"";
-this.inherited(arguments);
-},execute:function(_1){
-},onExecute:function(){
-},_setEncTypeAttr:function(_2){
-this.encType=_2;
-dojo.attr(this.domNode,"encType",_2);
-if(dojo.isIE){
-this.domNode.encoding=_2;
-}
-},postCreate:function(){
-if(dojo.isIE&&this.srcNodeRef&&this.srcNodeRef.attributes){
-var _3=this.srcNodeRef.attributes.getNamedItem("encType");
-if(_3&&!_3.specified&&(typeof _3.value=="string")){
-this.set("encType",_3.value);
-}
-}
-this.inherited(arguments);
-},reset:function(e){
-var _4={returnValue:true,preventDefault:function(){
-this.returnValue=false;
-},stopPropagation:function(){
-},currentTarget:e?e.target:this.domNode,target:e?e.target:this.domNode};
-if(!(this.onReset(_4)===false)&&_4.returnValue){
-this.inherited(arguments,[]);
-}
-},onReset:function(e){
-return true;
-},_onReset:function(e){
-this.reset(e);
-dojo.stopEvent(e);
-return false;
-},_onSubmit:function(e){
-var fp=dijit.form.Form.prototype;
-if(this.execute!=fp.execute||this.onExecute!=fp.onExecute){
-dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.","","2.0");
-this.onExecute();
-this.execute(this.getValues());
-}
-if(this.onSubmit(e)===false){
-dojo.stopEvent(e);
-}
-},onSubmit:function(e){
-return this.isValid();
-},submit:function(){
-if(!(this.onSubmit()===false)){
-this.containerNode.submit();
-}
-}});
+dojo.require("dijit.layout._ContentPaneResizeMixin");
+
+
+dojo.declare(
+       "dijit.form.Form",
+       [dijit._Widget, dijit._Templated, dijit.form._FormMixin, dijit.layout._ContentPaneResizeMixin],
+       {
+               // summary:
+               //              Widget corresponding to HTML form tag, for validation and serialization
+               //
+               // example:
+               //      |       <form dojoType="dijit.form.Form" id="myForm">
+               //      |               Name: <input type="text" name="name" />
+               //      |       </form>
+               //      |       myObj = {name: "John Doe"};
+               //      |       dijit.byId('myForm').set('value', myObj);
+               //      |
+               //      |       myObj=dijit.byId('myForm').get('value');
+
+               // HTML <FORM> attributes
+
+               // name: String?
+               //              Name of form for scripting.
+               name: "",
+
+               // action: String?
+               //              Server-side form handler.
+               action: "",
+
+               // method: String?
+               //              HTTP method used to submit the form, either "GET" or "POST".
+               method: "",
+
+               // encType: String?
+               //              Encoding type for the form, ex: application/x-www-form-urlencoded.
+               encType: "",
+
+               // accept-charset: String?
+               //              List of supported charsets.
+               "accept-charset": "",
+
+               // accept: String?
+               //              List of MIME types for file upload.
+               accept: "",
+
+               // target: String?
+               //              Target frame for the document to be opened in.
+               target: "",
+
+               templateString: "<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",
+
+               attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+                       action: "",
+                       method: "",
+                       encType: "",
+                       "accept-charset": "",
+                       accept: "",
+                       target: ""
+               }),
+
+               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);
+               },
+
+               execute: function(/*Object*/ formContents){
+                       // summary:
+                       //              Deprecated: use submit()
+                       // tags:
+                       //              deprecated
+               },
+
+               onExecute: function(){
+                       // summary:
+                       //              Deprecated: use onSubmit()
+                       // tags:
+                       //              deprecated
+               },
+
+               _setEncTypeAttr: function(/*String*/ value){
+                       this.encType = value;
+                       dojo.attr(this.domNode, "encType", value);
+                       if(dojo.isIE){ this.domNode.encoding = value; }
+               },
+
+               postCreate: function(){
+                       // IE tries to hide encType
+                       // TODO: remove in 2.0, no longer necessary with data-dojo-params
+                       if(dojo.isIE && this.srcNodeRef && this.srcNodeRef.attributes){
+                               var item = this.srcNodeRef.attributes.getNamedItem('encType');
+                               if(item && !item.specified && (typeof item.value == "string")){
+                                       this.set('encType', item.value);
+                               }
+                       }
+                       this.inherited(arguments);
+               },
+
+               reset: function(/*Event?*/ e){
+                       // summary:
+                       //              restores all widget values back to their init values,
+                       //              calls onReset() which can cancel the reset by returning false
+
+                       // create fake event so we can know if preventDefault() is called
+                       var faux = {
+                               returnValue: true, // the IE way
+                               preventDefault: function(){ // not IE
+                                                       this.returnValue = false;
+                                               },
+                               stopPropagation: function(){},
+                               currentTarget: e ? e.target : this.domNode,
+                               target: e ? e.target : this.domNode
+                       };
+                       // if return value is not exactly false, and haven't called preventDefault(), then reset
+                       if(!(this.onReset(faux) === false) && faux.returnValue){
+                               this.inherited(arguments, []);
+                       }
+               },
+
+               onReset: function(/*Event?*/ e){
+                       // summary:
+                       //              Callback when user resets the form. This method is intended
+                       //              to be over-ridden. When the `reset` method is called
+                       //              programmatically, the return value from `onReset` is used
+                       //              to compute whether or not resetting should proceed
+                       // tags:
+                       //              callback
+                       return true; // Boolean
+               },
+
+               _onReset: function(e){
+                       this.reset(e);
+                       dojo.stopEvent(e);
+                       return false;
+               },
+
+               _onSubmit: function(e){
+                       var fp = dijit.form.Form.prototype;
+                       // TODO: remove this if statement beginning with 2.0
+                       if(this.execute != fp.execute || this.onExecute != fp.onExecute){
+                               dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.", "", "2.0");
+                               this.onExecute();
+                               this.execute(this.getValues());
+                       }
+                       if(this.onSubmit(e) === false){ // only exactly false stops submit
+                               dojo.stopEvent(e);
+                       }
+               },
+
+               onSubmit: function(/*Event?*/ e){
+                       // summary:
+                       //              Callback when user submits the form.
+                       // description:
+                       //              This method is intended to be over-ridden, but by default it checks and
+                       //              returns the validity of form elements. When the `submit`
+                       //              method is called programmatically, the return value from
+                       //              `onSubmit` is used to compute whether or not submission
+                       //              should proceed
+                       // tags:
+                       //              extension
+
+                       return this.isValid(); // Boolean
+               },
+
+               submit: function(){
+                       // summary:
+                       //              programmatically submit form if and only if the `onSubmit` returns true
+                       if(!(this.onSubmit() === false)){
+                               this.containerNode.submit();
+                       }
+               }
+       }
+);
+
 }
index 944282d807c9707cf2101c14fa30ec3376cd47b7..e81805e6e27602843b89f982ad737c0e7c7b1f13 100644 (file)
@@ -1,38 +1,74 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.HorizontalRule"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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;
-}});
+
+
+dojo.declare("dijit.form.HorizontalRule", [dijit._Widget, dijit._Templated],
+{
+       // summary:
+       //              Hash marks for `dijit.form.HorizontalSlider`
+
+       templateString: '<div class="dijitRuleContainer dijitRuleContainerH"></div>',
+
+       // count: Integer
+       //              Number of hash marks to generate
+       count: 3,
+
+       // container: String
+       //              For HorizontalSlider, this is either "topDecoration" or "bottomDecoration",
+       //              and indicates whether this rule goes above or below the slider.
+       container: "containerNode",
+
+       // ruleStyle: String
+       //              CSS style to apply to individual hash marks
+       ruleStyle: "",
+
+       _positionPrefix: '<div class="dijitRuleMark dijitRuleMarkH" style="left:',
+       _positionSuffix: '%;',
+       _suffix: '"></div>',
+
+       _genHTML: function(pos, ndx){
+               return this._positionPrefix + pos + this._positionSuffix + this.ruleStyle + this._suffix;
+       },
+
+       // _isHorizontal: [protected extension] Boolean
+       //              VerticalRule will override this...
+       _isHorizontal: true,
+
+       buildRendering: function(){
+               this.inherited(arguments);
+
+               var innerHTML;
+               if(this.count == 1){
+                       innerHTML = this._genHTML(50, 0);
+               }else{
+                       var i;
+                       var interval = 100 / (this.count-1);
+                       if(!this._isHorizontal || this.isLeftToRight()){
+                               innerHTML = this._genHTML(0, 0);
+                               for(i=1; i < this.count-1; i++){
+                                       innerHTML += this._genHTML(interval*i, i);
+                               }
+                               innerHTML += this._genHTML(100, this.count-1);
+                       }else{
+                               innerHTML = this._genHTML(100, 0);
+                               for(i=1; i < this.count-1; i++){
+                                       innerHTML += this._genHTML(100-interval*i, i);
+                               }
+                               innerHTML += this._genHTML(0, this.count-1);
+                       }
+               }
+               this.domNode.innerHTML = innerHTML;
+       }
+});
+
 }
index 6cf6742c510b0973e3ebcf35506a07f300699b3e..d923e8081069ef9cd0cbc4d0684ac52e1360f641 100644 (file)
@@ -1,38 +1,97 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.HorizontalRuleLabels"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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:"\"><div class=\"dijitRuleLabel dijitRuleLabelH\">",_suffix:"</div></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);
+
+
+dojo.declare("dijit.form.HorizontalRuleLabels", dijit.form.HorizontalRule,
+{
+       // summary:
+       //              Labels for `dijit.form.HorizontalSlider`
+
+       templateString: '<div class="dijitRuleContainer dijitRuleContainerH dijitRuleLabelsContainer dijitRuleLabelsContainerH"></div>',
+
+       // labelStyle: String
+       //              CSS style to apply to individual text labels
+       labelStyle: "",
+
+       // labels: String[]?
+       //              Array of text labels to render - evenly spaced from left-to-right or bottom-to-top.
+       //              Alternately, minimum and maximum can be specified, to get numeric labels.
+       labels: [],
+
+       // numericMargin: Integer
+       //              Number of generated numeric labels that should be rendered as '' on the ends when labels[] are not specified
+       numericMargin: 0,
+
+       // numericMinimum: Integer
+       //              Leftmost label value for generated numeric labels when labels[] are not specified
+       minimum: 0,
+
+       // numericMaximum: Integer
+       //              Rightmost label value for generated numeric labels when labels[] are not specified
+       maximum: 1,
+
+       // constraints: Object
+       //              pattern, places, lang, et al (see dojo.number) for generated numeric labels when labels[] are not specified
+       constraints: {pattern:"#%"},
+
+       _positionPrefix: '<div class="dijitRuleLabelContainer dijitRuleLabelContainerH" style="left:',
+       _labelPrefix: '"><div class="dijitRuleLabel dijitRuleLabelH">',
+       _suffix: '</div></div>',
+
+       _calcPosition: function(pos){
+               // summary:
+               //              Returns the value to be used in HTML for the label as part of the left: attribute
+               // tags:
+               //              protected extension
+               return pos;
+       },
+
+       _genHTML: function(pos, ndx){
+               return this._positionPrefix + this._calcPosition(pos) + this._positionSuffix + this.labelStyle + this._labelPrefix + this.labels[ndx] + this._suffix;
+       },
+
+       getLabels: function(){
+               // summary:
+               //              Overridable function to return array of labels to use for this slider.
+               //              Can specify a getLabels() method instead of a labels[] array, or min/max attributes.
+               // tags:
+               //              protected extension
+
+               // if the labels array was not specified directly, then see if <li> children were
+               var labels = this.labels;
+               if(!labels.length){
+                       // for markup creation, labels are specified as child elements
+                       labels = dojo.query("> li", this.srcNodeRef).map(function(node){
+                               return String(node.innerHTML);
+                       });
+               }
+               this.srcNodeRef.innerHTML = '';
+               // if the labels were not specified directly and not as <li> children, then calculate numeric labels
+               if(!labels.length && this.count > 1){
+                       var start = this.minimum;
+                       var inc = (this.maximum - start) / (this.count-1);
+                       for(var i=0; i < this.count; i++){
+                               labels.push((i < this.numericMargin || i >= (this.count-this.numericMargin)) ? '' : dojo.number.format(start, this.constraints));
+                               start += inc;
+                       }
+               }
+               return labels;
+       },
+
+       postMixInProperties: function(){
+               this.inherited(arguments);
+               this.labels = this.getLabels();
+               this.count = this.labels.length;
+       }
 });
-}
-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;
-}});
+
 }
index a0cb8cf2b22cf8ab03db6603f1144c93ea230460..93dc4a0c242192ca3d783b74c3202afb583f4346 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.HorizontalSlider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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 dijitSliderH\" 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 dijitSliderDecoration dijitSliderDecorationT dijitSliderDecorationH\"></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\" 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\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\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 dijitSliderDecoration dijitSliderDecorationB dijitSliderDecorationH\"></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",cssStateNodes:{incrementButton:"dijitSliderIncrementButton",decrementButton:"dijitSliderDecrementButton",focusNode:"dijitSliderThumb"},_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(){
-if(this._started){
-return;
-}
-dojo.forEach(this.getChildren(),function(_18){
-if(this[_18.container]!=this.containerNode){
-this[_18.container].appendChild(_18.domNode);
-}
-},this);
-this.inherited(arguments);
-},_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);
-}});
+
+
+dojo.declare(
+       "dijit.form.HorizontalSlider",
+       [dijit.form._FormValueWidget, dijit._Container],
+{
+       // summary:
+       //              A form widget that allows one to select a value with a horizontally draggable handle
+
+       templateString: dojo.cache("dijit.form", "templates/HorizontalSlider.html", "<table class=\"dijit dijitReset dijitSlider dijitSliderH\" 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 dijitSliderDecoration dijitSliderDecorationT dijitSliderDecorationH\"></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\" 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\" 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\" role=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div role=\"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\" role=\"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 role=\"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\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderIncrementIconH\" 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 dijitSliderDecoration dijitSliderDecorationB dijitSliderDecorationH\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n"),
+
+       // Overrides FormValueWidget.value to indicate numeric value
+       value: 0,
+
+       // showButtons: [const] Boolean
+       //              Show increment/decrement buttons at the ends of the slider?
+       showButtons: true,
+
+       // minimum:: [const] Integer
+       //              The minimum value the slider can be set to.
+       minimum: 0,
+
+       // maximum: [const] Integer
+       //              The maximum value the slider can be set to.
+       maximum: 100,
+
+       // discreteValues: Integer
+       //              If specified, indicates that the slider handle has only 'discreteValues' possible positions,
+       //              and that after dragging the handle, it will snap to the nearest possible position.
+       //              Thus, the slider has only 'discreteValues' possible values.
+       //
+       //              For example, if minimum=10, maxiumum=30, and discreteValues=3, then the slider handle has
+       //              three possible positions, representing values 10, 20, or 30.
+       //
+       //              If discreteValues is not specified or if it's value is higher than the number of pixels
+       //              in the slider bar, then the slider handle can be moved freely, and the slider's value will be
+       //              computed/reported based on pixel position (in this case it will likely be fractional,
+       //              such as 123.456789).
+       discreteValues: Infinity,
+
+       // pageIncrement: Integer
+       //              If discreteValues is also specified, this indicates the amount of clicks (ie, snap positions)
+       //              that the slider handle is moved via pageup/pagedown keys.
+       //              If discreteValues is not specified, it indicates the number of pixels.
+       pageIncrement: 2,
+
+       // clickSelect: Boolean
+       //              If clicking the slider bar changes the value or not
+       clickSelect: true,
+
+       // slideDuration: Number
+       //              The time in ms to take to animate the slider handle from 0% to 100%,
+       //              when clicking the slider bar to make the handle move.
+       slideDuration: dijit.defaultDuration,
+
+       // Flag to _Templated  (TODO: why is this here?  I see no widgets in the template.)
+       widgetsInTemplate: true,
+
+       attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
+               id: ""
+       }),
+
+       baseClass: "dijitSlider",
+
+       // Apply CSS classes to up/down arrows and handle per mouse state
+       cssStateNodes: {
+               incrementButton: "dijitSliderIncrementButton",
+               decrementButton: "dijitSliderDecrementButton",
+               focusNode: "dijitSliderThumb"
+       },
+
+       _mousePixelCoord: "pageX",
+       _pixelCount: "w",
+       _startingPixelCoord: "x",
+       _startingPixelCount: "l",
+       _handleOffsetCoord: "left",
+       _progressPixelSize: "width",
+
+       _onKeyUp: function(/*Event*/ e){
+               if(this.disabled || this.readOnly || e.altKey || e.ctrlKey || e.metaKey){ return; }
+               this._setValueAttr(this.value, true);
+       },
+
+       _onKeyPress: function(/*Event*/ 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;
+                       // this._descending === false: if ascending vertical (min on top)
+                       // (this._descending || this.isLeftToRight()): if left-to-right horizontal or descending vertical
+                       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){
+                       // make sure you get focus when dragging the handle
+                       // (but don't do on IE because it causes a flicker on mouse up (due to blur then focus)
+                       dijit.focus(this.sliderHandle);
+               }
+               dojo.stopEvent(e);
+       },
+
+       _isReversed: function(){
+               // summary:
+               //              Returns true if direction is from right to left
+               // tags:
+               //              protected extension
+               return !this.isLeftToRight();
+       },
+
+       _onBarClick: function(e){
+               if(this.disabled || this.readOnly || !this.clickSelect){ return; }
+               dijit.focus(this.sliderHandle);
+               dojo.stopEvent(e);
+               var abspos = dojo.position(this.sliderBarContainer, true);
+               var pixelValue = e[this._mousePixelCoord] - abspos[this._startingPixelCoord];
+               this._setPixelValue(this._isReversed() ? (abspos[this._pixelCount] - pixelValue) : pixelValue, abspos[this._pixelCount], true);
+               this._movable.onMouseDown(e);
+       },
+
+       _setPixelValue: function(/*Number*/ pixelValue, /*Number*/ maxPixels, /*Boolean?*/ priorityChange){
+               if(this.disabled || this.readOnly){ return; }
+               pixelValue = pixelValue < 0 ? 0 : maxPixels < pixelValue ? maxPixels : pixelValue;
+               var count = this.discreteValues;
+               if(count <= 1 || count == Infinity){ count = maxPixels; }
+               count--;
+               var pixelsPerValue = maxPixels / count;
+               var wholeIncrements = Math.round(pixelValue / pixelsPerValue);
+               this._setValueAttr((this.maximum-this.minimum)*wholeIncrements/count + this.minimum, priorityChange);
+       },
+
+       _setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange){
+               // summary:
+               //              Hook so set('value', value) works.
+               this._set("value", value);
+               this.valueNode.value = value;
+               dijit.setWaiState(this.focusNode, "valuenow", value);
+               this.inherited(arguments);
+               var percent = (value - this.minimum) / (this.maximum - this.minimum);
+               var progressBar = (this._descending === false) ? this.remainingBar : this.progressBar;
+               var remainingBar = (this._descending === false) ? this.progressBar : this.remainingBar;
+               if(this._inProgressAnim && this._inProgressAnim.status != "stopped"){
+                       this._inProgressAnim.stop(true);
+               }
+               if(priorityChange && this.slideDuration > 0 && progressBar.style[this._progressPixelSize]){
+                       // animate the slider
+                       var _this = this;
+                       var props = {};
+                       var start = parseFloat(progressBar.style[this._progressPixelSize]);
+                       var duration = this.slideDuration * (percent-start/100);
+                       if(duration == 0){ return; }
+                       if(duration < 0){ duration = 0 - duration; }
+                       props[this._progressPixelSize] = { start: start, end: percent*100, units:"%" };
+                       this._inProgressAnim = dojo.animateProperty({ node: progressBar, duration: duration,
+                               onAnimate: function(v){ remainingBar.style[_this._progressPixelSize] = (100-parseFloat(v[_this._progressPixelSize])) + "%"; },
+                               onEnd: function(){ delete _this._inProgressAnim; },
+                               properties: props
+                       })
+                       this._inProgressAnim.play();
+               }else{
+                       progressBar.style[this._progressPixelSize] = (percent*100) + "%";
+                       remainingBar.style[this._progressPixelSize] = ((1-percent)*100) + "%";
+               }
+       },
+
+       _bumpValue: function(signedChange, /*Boolean?*/ priorityChange){
+               if(this.disabled || this.readOnly){ return; }
+               var s = dojo.getComputedStyle(this.sliderBarContainer);
+               var c = dojo._getContentBox(this.sliderBarContainer, s);
+               var count = this.discreteValues;
+               if(count <= 1 || count == Infinity){ count = c[this._pixelCount]; }
+               count--;
+               var value = (this.value - this.minimum) * count / (this.maximum - this.minimum) + signedChange;
+               if(value < 0){ value = 0; }
+               if(value > count){ value = count; }
+               value = value * (this.maximum - this.minimum) / count + this.minimum;
+               this._setValueAttr(value, priorityChange);
+       },
+
+       _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(/*Event*/ e){
+               // summary:
+               //              Decrement slider
+               // tags:
+               //              private
+               this._bumpValue(e.charOrCode == dojo.keys.PAGE_DOWN ? -this.pageIncrement : -1);
+       },
+
+       increment: function(/*Event*/ e){
+               // summary:
+               //              Increment slider
+               // tags:
+               //              private
+               this._bumpValue(e.charOrCode == dojo.keys.PAGE_UP ? this.pageIncrement : 1);
+       },
+
+       _mouseWheeled: function(/*Event*/ evt){
+               // summary:
+               //              Event handler for mousewheel where supported
+               dojo.stopEvent(evt);
+               var janky = !dojo.isMozilla;
+               var scroll = evt[(janky ? "wheelDelta" : "detail")] * (janky ? 1 : -1);
+               this._bumpValue(scroll < 0 ? -1 : 1, true); // negative scroll acts like a decrement
+       },
+
+       startup: function(){
+               if(this._started){ return; }
+
+               dojo.forEach(this.getChildren(), function(child){
+                       if(this[child.container] != this.containerNode){
+                               this[child.container].appendChild(child.domNode);
+                       }
+               }, this);
+
+               this.inherited(arguments);
+       },
+
+       _typematicCallback: function(/*Number*/ count, /*Object*/ button, /*Event*/ e){
+               if(count == -1){
+                       this._setValueAttr(this.value, true);
+               }else{
+                       this[(button == (this._descending? this.incrementButton : this.decrementButton)) ? "decrement" : "increment"](e);
+               }
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+               if(this.showButtons){
+                       this.incrementButton.style.display="";
+                       this.decrementButton.style.display="";
+               }
+
+               // find any associated label element and add to slider focusnode.
+               var label = dojo.query('label[for="'+this.id+'"]');
+               if(label.length){
+                       label[0].id = (this.id+"_label");
+                       dijit.setWaiState(this.focusNode, "labelledby", label[0].id);
+               }
+
+               dijit.setWaiState(this.focusNode, "valuemin", this.minimum);
+               dijit.setWaiState(this.focusNode, "valuemax", this.maximum);
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
+
+               if(this.showButtons){
+                       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");
+
+               // define a custom constructor for a SliderMover that points back to me
+               var mover = dojo.declare(dijit.form._SliderMover, {
+                       widget: this
+               });
+               this._movable = new dojo.dnd.Moveable(this.sliderHandle, {mover: mover});
+
+               this._layoutHackIE7();
+       },
+
+       destroy: function(){
+               this._movable.destroy();
+               if(this._inProgressAnim && this._inProgressAnim.status != "stopped"){
+                       this._inProgressAnim.stop(true);
+               }
+               this._supportingWidgets = dijit.findWidgets(this.domNode); // tells destroy about pseudo-child widgets (ruler/labels)
+               this.inherited(arguments);
+       }
+});
+
+dojo.declare("dijit.form._SliderMover",
+       dojo.dnd.Mover,
+{
+       onMouseMove: function(e){
+               var widget = this.widget;
+               var abspos = widget._abspos;
+               if(!abspos){
+                       abspos = widget._abspos = dojo.position(widget.sliderBarContainer, true);
+                       widget._setPixelValue_ = dojo.hitch(widget, "_setPixelValue");
+                       widget._isReversed_ = widget._isReversed();
+               }
+               var coordEvent = e.touches ? e.touches[0] : e, // if multitouch take first touch for coords
+                       pixelValue = coordEvent[widget._mousePixelCoord] - abspos[widget._startingPixelCoord];
+               widget._setPixelValue_(widget._isReversed_ ? (abspos[widget._pixelCount]-pixelValue) : pixelValue, abspos[widget._pixelCount], false);
+       },
+
+       destroy: function(e){
+               dojo.dnd.Mover.prototype.destroy.apply(this, arguments);
+               var widget = this.widget;
+               widget._abspos = null;
+               widget._setValueAttr(widget.value, true);
+       }
+});
+
 }
index e7dd213c0b239a32cb6a72364e7bfcbbcb8e371d..ebdaaf15b4087cd8cfee0f760c5bae81051cfe0a 100644 (file)
@@ -1,12 +1,15 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.MappedTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.MappedTextBox"] = true;
 dojo.provide("dijit.form.MappedTextBox");
 dojo.require("dijit.form.ValidationTextBox");
+
+
+
 }
index 8aacb414881a1524ca462f894129df52345d66cb..12f3b40e728ea2d8986975e71235ff754e016c53 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.MultiSelect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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;
+
+
+dojo.declare("dijit.form.MultiSelect", dijit.form._FormValueWidget, {
+       // summary:
+       //              Widget version of a <select multiple=true> element,
+       //              for selecting multiple options.
+
+       // size: Number
+       //              Number of elements to display on a page
+       //              NOTE: may be removed in version 2.0, since elements may have variable height;
+       //              set the size via style="..." or CSS class names instead.
+       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(){
+               // summary:
+               //              Reset the widget's value to what it was at initialization time
+
+               // TODO: once we inherit from FormValueWidget this won't be needed
+               this._hasBeenBlurred = false;
+               this._setValueAttr(this._resetValue, true);
+       },
+
+       addSelected: function(/*dijit.form.MultiSelect*/ select){
+               // summary:
+               //              Move the selected nodes of a passed Select widget
+               //              instance to this Select widget.
+               //
+               // example:
+               // |    // move all the selected values from "bar" to "foo"
+               // |    dijit.byId("foo").addSelected(dijit.byId("bar"));
+
+               select.getSelected().forEach(function(n){
+                       this.containerNode.appendChild(n);
+                       // scroll to bottom to see item
+                       // cannot use scrollIntoView since <option> tags don't support all attributes
+                       // does not work on IE due to a bug where <select> always shows scrollTop = 0
+                       this.domNode.scrollTop = this.domNode.offsetHeight; // overshoot will be ignored
+                       // scrolling the source select is trickier esp. on safari who forgets to change the scrollbar size
+                       var oldscroll = select.domNode.scrollTop;
+                       select.domNode.scrollTop = 0;
+                       select.domNode.scrollTop = oldscroll;
+               },this);
+       },
+
+       getSelected: function(){
+               // summary:
+               //              Access the NodeList of the selected options directly
+               return dojo.query("option",this.containerNode).filter(function(n){
+                       return n.selected; // Boolean
+               }); // dojo.NodeList
+       },
+
+       _getValueAttr: function(){
+               // summary:
+               //              Hook so get('value') works.
+               // description:
+               //              Returns an array of the selected options' values.
+               return this.getSelected().map(function(n){
+                       return n.value;
+               });
+       },
+
+       multiple: true, // for Form
+
+       _setValueAttr: function(/*Array*/ values){
+               // summary:
+               //              Hook so set('value', values) works.
+               // description:
+               //              Set the value(s) of this Select based on passed values
+               dojo.query("option",this.containerNode).forEach(function(n){
+                       n.selected = (dojo.indexOf(values,n.value) != -1);
+               });
+       },
+
+       invertSelection: function(onChange){
+               // summary:
+               //              Invert the selection
+               // onChange: Boolean
+               //              If null, onChange is not fired.
+               dojo.query("option",this.containerNode).forEach(function(n){
+                       n.selected = !n.selected;
+               });
+               this._handleOnChange(this.get('value'), onChange == true);
+       },
+
+       _onChange: function(/*Event*/ e){
+               this._handleOnChange(this.get('value'), true);
+       },
+
+       // for layout widgets:
+       resize: function(/*Object*/ size){
+               if(size){
+                       dojo.marginBox(this.domNode, size);
+               }
+       },
+
+       postCreate: function(){
+               this._onChange();
+       }
 });
-this._handleOnChange(this.get("value"),_4==true);
-},_onChange:function(e){
-this._handleOnChange(this.get("value"),true);
-},resize:function(_5){
-if(_5){
-dojo.marginBox(this.domNode,_5);
-}
-},postCreate:function(){
-this._onChange();
-}});
+
 }
index 82a3c40247e776ceb21e147ae71a4aca4f80a7b7..ba5a782f5131762cc85723fc7b55f9c3c4ecc77b 100644 (file)
@@ -1,38 +1,71 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.NumberSpinner"]){
-dojo._hasResource["dijit.form.NumberSpinner"]=true;
+if(!dojo._hasResource["dijit.form.NumberSpinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.NumberSpinner"] = true;
 dojo.provide("dijit.form.NumberSpinner");
 dojo.require("dijit.form._Spinner");
 dojo.require("dijit.form.NumberTextBox");
-dojo.declare("dijit.form.NumberSpinner",[dijit.form._Spinner,dijit.form.NumberTextBoxMixin],{adjust:function(_1,_2){
-var tc=this.constraints,v=isNaN(_1),_3=!isNaN(tc.max),_4=!isNaN(tc.min);
-if(v&&_2!=0){
-_1=(_2>0)?_4?tc.min:_3?tc.max:0:_3?this.constraints.max:_4?tc.min:0;
-}
-var _5=_1+_2;
-if(v||isNaN(_5)){
-return _1;
-}
-if(_3&&(_5>tc.max)){
-_5=tc.max;
-}
-if(_4&&(_5<tc.min)){
-_5=tc.min;
-}
-return _5;
-},_onKeyPress:function(e){
-if((e.charOrCode==dojo.keys.HOME||e.charOrCode==dojo.keys.END)&&!(e.ctrlKey||e.altKey||e.metaKey)&&typeof this.get("value")!="undefined"){
-var _6=this.constraints[(e.charOrCode==dojo.keys.HOME?"min":"max")];
-if(typeof _6=="number"){
-this._setValueAttr(_6,false);
-}
-dojo.stopEvent(e);
-}
-}});
+
+
+dojo.declare("dijit.form.NumberSpinner",
+       [dijit.form._Spinner, dijit.form.NumberTextBoxMixin],
+       {
+       // summary:
+       //              Extends NumberTextBox to add up/down arrows and pageup/pagedown for incremental change to the value
+       //
+       // description:
+       //              A `dijit.form.NumberTextBox` extension to provide keyboard accessible value selection
+       //              as well as icons for spinning direction. When using the keyboard, the typematic rules
+       //              apply, meaning holding the key will gradually increase or decrease the value and
+       //              accelerate.
+       //
+       // example:
+       //      | new dijit.form.NumberSpinner({ constraints:{ max:300, min:100 }}, "someInput");
+
+       adjust: function(/*Object*/ val, /*Number*/ delta){
+               // summary:
+               //              Change Number val by the given amount
+               // tags:
+               //              protected
+
+               var tc = this.constraints,
+                       v = isNaN(val),
+                       gotMax = !isNaN(tc.max),
+                       gotMin = !isNaN(tc.min)
+               ;
+               if(v && delta != 0){ // blank or invalid value and they want to spin, so create defaults
+                       val = (delta > 0) ?
+                               gotMin ? tc.min : gotMax ? tc.max : 0 :
+                               gotMax ? this.constraints.max : gotMin ? tc.min : 0
+                       ;
+               }
+               var newval = val + delta;
+               if(v || isNaN(newval)){ return val; }
+               if(gotMax && (newval > tc.max)){
+                       newval = tc.max;
+               }
+               if(gotMin && (newval < tc.min)){
+                       newval = tc.min;
+               }
+               return newval;
+       },
+
+       _onKeyPress: function(e){
+               if((e.charOrCode == dojo.keys.HOME || e.charOrCode == dojo.keys.END) && !(e.ctrlKey || e.altKey || e.metaKey)
+               && typeof this.get('value') != 'undefined' /* gibberish, so HOME and END are default editing keys*/){
+                       var value = this.constraints[(e.charOrCode == dojo.keys.HOME ? "min" : "max")];
+                       if(typeof value == "number"){
+                               this._setValueAttr(value, false);
+                       }
+                       // eat home or end key whether we change the value or not
+                       dojo.stopEvent(e);
+               }
+       }
+});
+
 }
index d477d1ba9b32ce03b560f8d498ed60ceb7c0fe0f..4d0d64f99771275e293d3da59701bbcdf0062561 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.NumberTextBox"]){
-dojo._hasResource["dijit.form.NumberTextBox"]=true;
+if(!dojo._hasResource["dijit.form.NumberTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.NumberTextBox"] = true;
 dojo.provide("dijit.form.NumberTextBox");
 dojo.require("dijit.form.ValidationTextBox");
 dojo.require("dojo.number");
-dojo.declare("dijit.form.NumberTextBoxMixin",null,{regExpGen:dojo.number.regexp,value:NaN,editOptions:{pattern:"#.######"},_formatter:dojo.number.format,_setConstraintsAttr:function(_1){
-var _2=typeof _1.places=="number"?_1.places:0;
-if(_2){
-_2++;
-}
-if(typeof _1.max!="number"){
-_1.max=9*Math.pow(10,15-_2);
-}
-if(typeof _1.min!="number"){
-_1.min=-9*Math.pow(10,15-_2);
-}
-this.inherited(arguments,[_1]);
-if(this.focusNode&&this.focusNode.value&&!isNaN(this.value)){
-this.set("value",this.value);
-}
-},_onFocus:function(){
-if(this.disabled){
-return;
-}
-var _3=this.get("value");
-if(typeof _3=="number"&&!isNaN(_3)){
-var _4=this.format(_3,this.constraints);
-if(_4!==undefined){
-this.textbox.value=_4;
-}
-}
-this.inherited(arguments);
-},format:function(_5,_6){
-var _7=String(_5);
-if(typeof _5!="number"){
-return _7;
-}
-if(isNaN(_5)){
-return "";
-}
-if(!("rangeCheck" in this&&this.rangeCheck(_5,_6))&&_6.exponent!==false&&/\de[-+]?\d/i.test(_7)){
-return _7;
-}
-if(this.editOptions&&this._focused){
-_6=dojo.mixin({},_6,this.editOptions);
-}
-return this._formatter(_5,_6);
-},parse:dojo.number.parse,_getDisplayedValueAttr:function(){
-var v=this.inherited(arguments);
-return isNaN(v)?this.textbox.value:v;
-},filter:function(_8){
-return (_8===null||_8===""||_8===undefined)?NaN:this.inherited(arguments);
-},serialize:function(_9,_a){
-return (typeof _9!="number"||isNaN(_9))?"":this.inherited(arguments);
-},_setValueAttr:function(_b,_c,_d){
-if(_b!==undefined&&_d===undefined){
-_d=String(_b);
-if(typeof _b=="number"){
-if(isNaN(_b)){
-_d="";
-}else{
-if(("rangeCheck" in this&&this.rangeCheck(_b,this.constraints))||this.constraints.exponent===false||!/\de[-+]?\d/i.test(_d)){
-_d=undefined;
-}
-}
-}else{
-if(!_b){
-_d="";
-_b=NaN;
-}else{
-_b=undefined;
-}
-}
-}
-this.inherited(arguments,[_b,_c,_d]);
-},_getValueAttr:function(){
-var v=this.inherited(arguments);
-if(isNaN(v)&&this.textbox.value!==""){
-if(this.constraints.exponent!==false&&/\de[-+]?\d/i.test(this.textbox.value)&&(new RegExp("^"+dojo.number._realNumberRegexp(dojo.mixin({},this.constraints))+"$").test(this.textbox.value))){
-var n=Number(this.textbox.value);
-return isNaN(n)?undefined:n;
-}else{
-return undefined;
-}
-}else{
-return v;
-}
-},isValid:function(_e){
-if(!this._focused||this._isEmpty(this.textbox.value)){
-return this.inherited(arguments);
-}else{
-var v=this.get("value");
-if(!isNaN(v)&&this.rangeCheck(v,this.constraints)){
-if(this.constraints.exponent!==false&&/\de[-+]?\d/i.test(this.textbox.value)){
-return true;
-}else{
-return this.inherited(arguments);
-}
-}else{
-return false;
-}
-}
-}});
-dojo.declare("dijit.form.NumberTextBox",[dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],{});
+
+
+/*=====
+dojo.declare(
+       "dijit.form.NumberTextBox.__Constraints",
+       [dijit.form.RangeBoundTextBox.__Constraints, dojo.number.__FormatOptions, dojo.number.__ParseOptions], {
+       // summary:
+       //              Specifies both the rules on valid/invalid values (minimum, maximum,
+       //              number of required decimal places), and also formatting options for
+       //              displaying the value when the field is not focused.
+       // example:
+       //              Minimum/maximum:
+       //              To specify a field between 0 and 120:
+       //      |               {min:0,max:120}
+       //              To specify a field that must be an integer:
+       //      |               {fractional:false}
+       //              To specify a field where 0 to 3 decimal places are allowed on input:
+       //      |               {places:'0,3'}
+});
+=====*/
+
+dojo.declare("dijit.form.NumberTextBoxMixin",
+       null,
+       {
+               // summary:
+               //              A mixin for all number textboxes
+               // tags:
+               //              protected
+
+               // Override ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
+               // than a straight regexp to deal with locale (plus formatting options too?)
+               regExpGen: dojo.number.regexp,
+
+               /*=====
+               // constraints: dijit.form.NumberTextBox.__Constraints
+               //              Despite the name, this parameter specifies both constraints on the input
+               //              (including minimum/maximum allowed values) as well as
+               //              formatting options like places (the number of digits to display after
+               //              the decimal point).  See `dijit.form.NumberTextBox.__Constraints` for details.
+               constraints: {},
+               ======*/
+
+               // value: Number
+               //              The value of this NumberTextBox as a Javascript Number (i.e., not a String).
+               //              If the displayed value is blank, the value is NaN, and if the user types in
+               //              an gibberish value (like "hello world"), the value is undefined
+               //              (i.e. get('value') returns undefined).
+               //
+               //              Symmetrically, set('value', NaN) will clear the displayed value,
+               //              whereas set('value', undefined) will have no effect.
+               value: NaN,
+
+               // editOptions: [protected] Object
+               //              Properties to mix into constraints when the value is being edited.
+               //              This is here because we edit the number in the format "12345", which is
+               //              different than the display value (ex: "12,345")
+               editOptions: { pattern: '#.######' },
+
+               /*=====
+               _formatter: function(value, options){
+                       // summary:
+                       //              _formatter() is called by format().  It's the base routine for formatting a number,
+                       //              as a string, for example converting 12345 into "12,345".
+                       // value: Number
+                       //              The number to be converted into a string.
+                       // options: dojo.number.__FormatOptions?
+                       //              Formatting options
+                       // tags:
+                       //              protected extension
+
+                       return "12345";         // String
+               },
+                =====*/
+               _formatter: dojo.number.format,
+
+               _setConstraintsAttr: function(/*Object*/ constraints){
+                       var places = typeof constraints.places == "number"? constraints.places : 0;
+                       if(places){ places++; } // decimal rounding errors take away another digit of precision
+                       if(typeof constraints.max != "number"){
+                               constraints.max = 9 * Math.pow(10, 15-places);
+                       }
+                       if(typeof constraints.min != "number"){
+                               constraints.min = -9 * Math.pow(10, 15-places);
+                       }
+                       this.inherited(arguments, [ constraints ]);
+                       if(this.focusNode && this.focusNode.value && !isNaN(this.value)){
+                               this.set('value', this.value);
+                       }
+               },
+
+               _onFocus: function(){
+                       if(this.disabled){ return; }
+                       var val = this.get('value');
+                       if(typeof val == "number" && !isNaN(val)){
+                               var formattedValue = this.format(val, this.constraints);
+                               if(formattedValue !== undefined){
+                                       this.textbox.value = formattedValue;
+                               }
+                       }
+                       this.inherited(arguments);
+               },
+
+               format: function(/*Number*/ value, /*dojo.number.__FormatOptions*/ constraints){
+                       // summary:
+                       //              Formats the value as a Number, according to constraints.
+                       // tags:
+                       //              protected
+
+                       var formattedValue = String(value);
+                       if(typeof value != "number"){ return formattedValue; }
+                       if(isNaN(value)){ return ""; }
+                       // check for exponential notation that dojo.number.format chokes on
+                       if(!("rangeCheck" in this && this.rangeCheck(value, constraints)) && constraints.exponent !== false && /\de[-+]?\d/i.test(formattedValue)){
+                               return formattedValue;
+                       }
+                       if(this.editOptions && this._focused){
+                               constraints = dojo.mixin({}, constraints, this.editOptions);
+                       }
+                       return this._formatter(value, constraints);
+               },
+
+               /*=====
+               _parser: function(value, constraints){
+                       // summary:
+                       //              Parses the string value as a Number, according to constraints.
+                       // value: String
+                       //              String representing a number
+                       // constraints: dojo.number.__ParseOptions
+                       //              Formatting options
+                       // tags:
+                       //              protected
+
+                       return 123.45;          // Number
+               },
+               =====*/
+               _parser: dojo.number.parse,
+
+               parse: function(/*String*/ value, /*dojo.number.__FormatOptions*/ constraints){
+                       // summary:
+                       //              Replacable function to convert a formatted string to a number value
+                       // tags:
+                       //              protected extension
+
+                       var v = this._parser(value, dojo.mixin({}, constraints, (this.editOptions && this._focused) ? this.editOptions : {}));
+                       if(this.editOptions && this._focused && isNaN(v)){
+                               v = this._parser(value, constraints); // parse w/o editOptions: not technically needed but is nice for the user
+                       }
+                       return v;
+               },
+
+               _getDisplayedValueAttr: function(){
+                       var v = this.inherited(arguments);
+                       return isNaN(v) ? this.textbox.value : v;
+               },
+
+               filter: function(/*Number*/ value){
+                       // summary:
+                       //              This is called with both the display value (string), and the actual value (a number).
+                       //              When called with the actual value it does corrections so that '' etc. are represented as NaN.
+                       //              Otherwise it dispatches to the superclass's filter() method.
+                       //
+                       //              See `dijit.form.TextBox.filter` for more details.
+                       return (value === null || value === '' || value === undefined) ? NaN : this.inherited(arguments); // set('value', null||''||undefined) should fire onChange(NaN)
+               },
+
+               serialize: function(/*Number*/ value, /*Object?*/ options){
+                       // summary:
+                       //              Convert value (a Number) into a canonical string (ie, how the number literal is written in javascript/java/C/etc.)
+                       // tags:
+                       //              protected
+                       return (typeof value != "number" || isNaN(value)) ? '' : this.inherited(arguments);
+               },
+
+               _setBlurValue: function(){
+                       var val = dojo.hitch(dojo.mixin({}, this, { _focused: true }), "get")('value'); // parse with editOptions
+                       this._setValueAttr(val, true);
+               },
+
+               _setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){
+                       // summary:
+                       //              Hook so set('value', ...) works.
+                       if(value !== undefined && formattedValue === undefined){
+                               formattedValue = String(value);
+                               if(typeof value == "number"){
+                                       if(isNaN(value)){ formattedValue = '' }
+                                       // check for exponential notation that dojo.number.format chokes on
+                                       else if(("rangeCheck" in this && this.rangeCheck(value, this.constraints)) || this.constraints.exponent === false || !/\de[-+]?\d/i.test(formattedValue)){
+                                               formattedValue = undefined; // lets format comnpute a real string value
+                                       }
+                               }else if(!value){ // 0 processed in if branch above, ''|null|undefined flow thru here
+                                       formattedValue = '';
+                                       value = NaN;
+                               }else{ // non-numeric values
+                                       value = undefined;
+                               }
+                       }
+                       this.inherited(arguments, [value, priorityChange, formattedValue]);
+               },
+
+               _getValueAttr: function(){
+                       // summary:
+                       //              Hook so get('value') works.
+                       //              Returns Number, NaN for '', or undefined for unparsable text
+                       var v = this.inherited(arguments); // returns Number for all values accepted by parse() or NaN for all other displayed values
+
+                       // If the displayed value of the textbox is gibberish (ex: "hello world"), this.inherited() above
+                       // returns NaN; this if() branch converts the return value to undefined.
+                       // Returning undefined prevents user text from being overwritten when doing _setValueAttr(_getValueAttr()).
+                       // A blank displayed value is still returned as NaN.
+                       if(isNaN(v) && this.textbox.value !== ''){
+                               if(this.constraints.exponent !== false && /\de[-+]?\d/i.test(this.textbox.value) && (new RegExp("^"+dojo.number._realNumberRegexp(dojo.mixin({}, this.constraints))+"$").test(this.textbox.value))){    // check for exponential notation that parse() rejected (erroneously?)
+                                       var n = Number(this.textbox.value);
+                                       return isNaN(n) ? undefined : n; // return exponential Number or undefined for random text (may not be possible to do with the above RegExp check)
+                               }else{
+                                       return undefined; // gibberish
+                               }
+                       }else{
+                               return v; // Number or NaN for ''
+                       }
+               },
+
+               isValid: function(/*Boolean*/ isFocused){
+                       // Overrides dijit.form.RangeBoundTextBox.isValid to check that the editing-mode value is valid since
+                       // it may not be formatted according to the regExp vaidation rules
+                       if(!this._focused || this._isEmpty(this.textbox.value)){
+                               return this.inherited(arguments);
+                       }else{
+                               var v = this.get('value');
+                               if(!isNaN(v) && this.rangeCheck(v, this.constraints)){
+                                       if(this.constraints.exponent !== false && /\de[-+]?\d/i.test(this.textbox.value)){ // exponential, parse doesn't like it
+                                               return true; // valid exponential number in range
+                                       }else{
+                                               return this.inherited(arguments);
+                                       }
+                               }else{
+                                       return false;
+                               }
+                       }
+               }
+       }
+);
+
+dojo.declare("dijit.form.NumberTextBox",
+       [dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],
+       {
+               // summary:
+               //              A TextBox for entering numbers, with formatting and range checking
+               // description:
+               //              NumberTextBox is a textbox for entering and displaying numbers, supporting
+               //              the following main features:
+               //
+               //                      1. Enforce minimum/maximum allowed values (as well as enforcing that the user types
+               //                              a number rather than a random string)
+               //                      2. NLS support (altering roles of comma and dot as "thousands-separator" and "decimal-point"
+               //                              depending on locale).
+               //                      3. Separate modes for editing the value and displaying it, specifically that
+               //                              the thousands separator character (typically comma) disappears when editing
+               //                              but reappears after the field is blurred.
+               //                      4. Formatting and constraints regarding the number of places (digits after the decimal point)
+               //                              allowed on input, and number of places displayed when blurred (see `constraints` parameter).
+
+               baseClass: "dijitTextBox dijitNumberTextBox"
+       }
+);
+
 }
index 154bdd4bc1929ae375aae8282d4d63600acd1d96..295ec5ffdb882fbddc97954b790bf1d5d94f315d 100644 (file)
@@ -1,12 +1,16 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.RadioButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.RadioButton"] = true;
 dojo.provide("dijit.form.RadioButton");
 dojo.require("dijit.form.CheckBox");
+
+
+// TODO: for 2.0, move the RadioButton code into this file
+
 }
index b2e2f4ca9bf883921a50a0aec71e468b8a16bc60..589967f2552a6f1b9a6057c88dcb4427dbf122d5 100644 (file)
@@ -1,12 +1,15 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.RangeBoundTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.RangeBoundTextBox"] = true;
 dojo.provide("dijit.form.RangeBoundTextBox");
 dojo.require("dijit.form.ValidationTextBox");
+
+
+
 }
index 7caf553f25c12ad392a79e4a6b5483686a97082f..a681cdf8924ce61ff03e60a835058707ae3e9216 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.Select"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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.require("dijit.Tooltip");
-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,ro,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.create("div",{style:{overflowX:"hidden",overflowY:"scroll"}}));
-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);
-},resize:function(mb){
-if(mb){
-dojo.marginBox(this.domNode,mb);
-if("w" in mb){
-this.menuTableNode.style.width="100%";
-}
-}
-}});
-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,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\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\"></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({id:this.id+"_menu"});
-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();
+dojo.requireLocalization("dijit.form", "validate", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare("dijit.form._SelectMenu", dijit.Menu, {
+       // summary:
+       //              An internally-used menu for dropdown that allows us a vertical scrollbar
+       buildRendering: function(){
+               // summary:
+               //              Stub in our own changes, so that our domNode is not a table
+               //              otherwise, we won't respond correctly to heights/overflows
+               this.inherited(arguments);
+               var o = (this.menuTableNode = this.domNode);
+               var n = (this.domNode = dojo.create("div", {style: {overflowX: "hidden", overflowY: "scroll"}}));
+               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);
+       },
+
+       postCreate: function(){
+               // summary:
+               //              stop mousemove from selecting text on IE to be consistent with other browsers
+
+               this.inherited(arguments);
+
+               this.connect(this.domNode, "onmousemove", dojo.stopEvent);
+       },
+
+       resize: function(/*Object*/ mb){
+               // summary:
+               //              Overridden so that we are able to handle resizing our
+               //              internal widget.  Note that this is not a "full" resize
+               //              implementation - it only works correctly if you pass it a
+               //              marginBox.
+               //
+               // mb: Object
+               //              The margin box to set this dropdown to.
+               if(mb){
+                       dojo.marginBox(this.domNode, mb);
+                       if("w" in mb){
+                               // We've explicitly set the wrapper <div>'s width, so set <table> width to match.
+                               // 100% is safer than a pixel value because there may be a scroll bar with
+                               // browser/OS specific width.
+                               this.menuTableNode.style.width = "100%";
+                       }
+               }
+       }
 });
-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.get("value"));
-},_setDisplay:function(_a){
-this.containerNode.innerHTML="<span class=\"dijitReset dijitInline "+this.baseClass+"Label\">"+(_a||this.emptyLabel||"&nbsp;")+"</span>";
-dijit.setWaiState(this.focusNode,"valuetext",(_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,!this.isLeftToRight());
-}
-}
-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();
-},closeDropDown:function(){
-this.inherited(arguments);
-if(this.dropDown&&this.dropDown.menuTableNode){
-this.dropDown.menuTableNode.style.width="";
-}
-},uninitialize:function(_10){
-if(this.dropDown&&!this.dropDown._destroyed){
-this.dropDown.destroyRecursive(_10);
-delete this.dropDown;
-}
-this.inherited(arguments);
-}});
+
+dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropDown], {
+       // summary:
+       //              This is a "styleable" select box - it is basically a DropDownButton which
+       //              can take a <select> as its input.
+
+       baseClass: "dijitSelect",
+
+       templateString: dojo.cache("dijit.form", "templates/Select.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\trole=\"combobox\" aria-haspopup=\"true\"\n\t><tbody role=\"presentation\"><tr role=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" role=\"presentation\"\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}\" aria-hidden=\"true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" role=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" role=\"presentation\">&#9660;</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),
+
+       // attributeMap: Object
+       //              Add in our style to be applied to the focus node
+       attributeMap: dojo.mixin(dojo.clone(dijit.form._FormSelectWidget.prototype.attributeMap),{style:"tableNode"}),
+
+       // required: Boolean
+       //              Can be true or false, default is false.
+       required: false,
+
+       // state: String
+       //              Shows current state (ie, validation result) of input (Normal, Warning, or Error)
+       state: "",
+
+       // message: String
+       //              Currently displayed error/prompt message
+       message: "",
+
+       //      tooltipPosition: String[]
+       //              See description of dijit.Tooltip.defaultPosition for details on this parameter.
+       tooltipPosition: [],
+
+       // emptyLabel: string
+       //              What to display in an "empty" dropdown
+       emptyLabel: "&nbsp;",
+
+       // _isLoaded: Boolean
+       //              Whether or not we have been loaded
+       _isLoaded: false,
+
+       // _childrenLoaded: Boolean
+       //              Whether or not our children have been loaded
+       _childrenLoaded: false,
+
+       _fillContent: function(){
+               // summary:
+               //              Set the value to be the first, or the selected index
+               this.inherited(arguments);
+               // set value from selected option
+               if(this.options.length && !this.value && this.srcNodeRef){
+                       var si = this.srcNodeRef.selectedIndex || 0; // || 0 needed for when srcNodeRef is not a SELECT
+                       this.value = this.options[si >= 0 ? si : 0].value;
+               }
+               // Create the dropDown widget
+               this.dropDown = new dijit.form._SelectMenu({id: this.id + "_menu"});
+               dojo.addClass(this.dropDown.domNode, this.baseClass + "Menu");
+       },
+
+       _getMenuItemForOption: function(/*dijit.form.__SelectOption*/ option){
+               // summary:
+               //              For the given option, return the menu item that should be
+               //              used to display it.  This can be overridden as needed
+               if(!option.value && !option.label){
+                       // We are a separator (no label set for it)
+                       return new dijit.MenuSeparator();
+               }else{
+                       // Just a regular menu option
+                       var click = dojo.hitch(this, "_setValueAttr", option);
+                       var item = new dijit.MenuItem({
+                               option: option,
+                               label: option.label || this.emptyLabel,
+                               onClick: click,
+                               disabled: option.disabled || false
+                       });
+                       dijit.setWaiRole(item.focusNode, "listitem");
+                       return item;
+               }
+       },
+
+       _addOptionItem: function(/*dijit.form.__SelectOption*/ option){
+               // summary:
+               //              For the given option, add an option to our dropdown.
+               //              If the option doesn't have a value, then a separator is added
+               //              in that place.
+               if(this.dropDown){
+                       this.dropDown.addChild(this._getMenuItemForOption(option));
+               }
+       },
+
+       _getChildren: function(){
+               if(!this.dropDown){
+                       return [];
+               }
+               return this.dropDown.getChildren();
+       },
+
+       _loadChildren: function(/*Boolean*/ loadMenuItems){
+               // summary:
+               //              Resets the menu and the length attribute of the button - and
+               //              ensures that the label is appropriately set.
+               //      loadMenuItems: Boolean
+               //              actually loads the child menu items - we only do this when we are
+               //              populating for showing the dropdown.
+
+               if(loadMenuItems === true){
+                       // this.inherited destroys this.dropDown's child widgets (MenuItems).
+                       // Avoid this.dropDown (Menu widget) having a pointer to a destroyed widget (which will cause
+                       // issues later in _setSelected). (see #10296)
+                       if(this.dropDown){
+                               delete this.dropDown.focusedChild;
+                       }
+                       if(this.options.length){
+                               this.inherited(arguments);
+                       }else{
+                               // Drop down menu is blank but add one blank entry just so something appears on the screen
+                               // to let users know that they are no choices (mimicing native select behavior)
+                               dojo.forEach(this._getChildren(), function(child){ child.destroyRecursive(); });
+                               var item = new dijit.MenuItem({label: "&nbsp;"});
+                               this.dropDown.addChild(item);
+                       }
+               }else{
+                       this._updateSelection();
+               }
+
+               this._isLoaded = false;
+               this._childrenLoaded = true;
+
+               if(!this._loadingStore){
+                       // Don't call this if we are loading - since we will handle it later
+                       this._setValueAttr(this.value);
+               }
+       },
+
+       _setValueAttr: function(value){
+               this.inherited(arguments);
+               dojo.attr(this.valueNode, "value", this.get("value"));
+       },
+
+       _setDisplay: function(/*String*/ newDisplay){
+               // summary:
+               //              sets the display for the given value (or values)
+               var lbl = newDisplay || this.emptyLabel;
+               this.containerNode.innerHTML = '<span class="dijitReset dijitInline ' + this.baseClass + 'Label">' + lbl + '</span>';
+               dijit.setWaiState(this.focusNode, "valuetext", lbl);
+       },
+
+       validate: function(/*Boolean*/ isFocused){
+               // summary:
+               //              Called by oninit, onblur, and onkeypress.
+               // description:
+               //              Show missing or invalid messages if appropriate, and highlight textbox field.
+               //              Used when a select is initially set to no value and the user is required to
+               //              set the value.
+               
+               var isValid = this.isValid(isFocused);
+               this._set("state", isValid ? "" : "Error");
+               dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
+               var message = isValid ? "" : this._missingMsg;
+               if(this.message !== message){
+                       this._set("message", message);
+                       dijit.hideTooltip(this.domNode);
+                       if(message){
+                               dijit.showTooltip(message, this.domNode, this.tooltipPosition, !this.isLeftToRight());
+                       }
+               }
+               return isValid;
+       },
+
+       isValid: function(/*Boolean*/ isFocused){
+               // summary:
+               //              Whether or not this is a valid value.  The only way a Select
+               //              can be invalid is when it's required but nothing is selected.
+               return (!this.required || this.value === 0 || !(/^\s*$/.test(this.value || ""))); // handle value is null or undefined
+       },
+
+       reset: function(){
+               // summary:
+               //              Overridden so that the state will be cleared.
+               this.inherited(arguments);
+               dijit.hideTooltip(this.domNode);
+               this._set("state", "");
+               this._set("message", "")
+       },
+
+       postMixInProperties: function(){
+               // summary:
+               //              set the missing message
+               this.inherited(arguments);
+               this._missingMsg = dojo.i18n.getLocalization("dijit.form", "validate",
+                                                                       this.lang).missingMessage;
+       },
+
+       postCreate: function(){
+               // summary:
+               //              stop mousemove from selecting text on IE to be consistent with other browsers
+
+               this.inherited(arguments);
+
+               this.connect(this.domNode, "onmousemove", dojo.stopEvent);
+       },
+
+       _setStyleAttr: function(/*String||Object*/ value){
+               this.inherited(arguments);
+               dojo.toggleClass(this.domNode, this.baseClass + "FixedWidth", !!this.tableNode.style.width);
+       },
+
+       isLoaded: function(){
+               return this._isLoaded;
+       },
+
+       loadDropDown: function(/*Function*/ loadCallback){
+               // summary:
+               //              populates the menu
+               this._loadChildren(true);
+               this._isLoaded = true;
+               loadCallback();
+       },
+
+       closeDropDown: function(){
+               // overriding _HasDropDown.closeDropDown()
+               this.inherited(arguments);
+
+               if(this.dropDown && this.dropDown.menuTableNode){
+                       // Erase possible width: 100% setting from _SelectMenu.resize().
+                       // Leaving it would interfere with the next openDropDown() call, which
+                       // queries the natural size of the drop down.
+                       this.dropDown.menuTableNode.style.width = "";
+               }
+       },
+
+       uninitialize: function(preserveDom){
+               if(this.dropDown && !this.dropDown._destroyed){
+                       this.dropDown.destroyRecursive(preserveDom);
+                       delete this.dropDown;
+               }
+               this.inherited(arguments);
+       }
+});
+
 }
index b4824c74e22d3f8b2af1ac5c668069c90cd55e28..6ff823105d85d9cdb79b8c69ea7d559cf38df539 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.SimpleTextarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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:"dijitTextBox 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);
-}});
+
+
+dojo.declare("dijit.form.SimpleTextarea",
+       dijit.form.TextBox,
+       {
+       // summary:
+       //              A simple textarea that degrades, and responds to
+       //              minimal LayoutContainer usage, and works with dijit.form.Form.
+       //              Doesn't automatically size according to input, like Textarea.
+       //
+       // example:
+       //      |       <textarea dojoType="dijit.form.SimpleTextarea" name="foo" value="bar" rows=30 cols=40></textarea>
+       //
+       // example:
+       //      |       new dijit.form.SimpleTextarea({ rows:20, cols:30 }, "foo");
+
+       baseClass: "dijitTextBox dijitTextArea",
+
+       attributeMap: dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap, {
+               rows:"textbox", cols: "textbox"
+       }),
+
+       // rows: Number
+       //              The number of rows of text.
+       rows: "3",
+
+       // rows: Number
+       //              The number of characters per line.
+       cols: "20",
+
+       templateString: "<textarea ${!nameAttrSetting} dojoAttachPoint='focusNode,containerNode,textbox' autocomplete='off'></textarea>",
+
+       postMixInProperties: function(){
+               // Copy value from srcNodeRef, unless user specified a value explicitly (or there is no srcNodeRef)
+               // TODO: parser will handle this in 2.0
+               if(!this.value && this.srcNodeRef){
+                       this.value = this.srcNodeRef.value;
+               }
+               this.inherited(arguments);
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+               if(dojo.isIE && this.cols){ // attribute selectors is not supported in IE6
+                       dojo.addClass(this.textbox, "dijitTextAreaCols");
+               }
+       },
+
+       filter: function(/*String*/ value){
+               // Override TextBox.filter to deal with newlines... specifically (IIRC) this is for IE which writes newlines
+               // as \r\n instead of just \n
+               if(value){
+                       value = value.replace(/\r/g,"");
+               }
+               return this.inherited(arguments);
+       },
+
+       _previousValue: "",
+       _onInput: function(/*Event?*/ e){
+               // Override TextBox._onInput() to enforce maxLength restriction
+               if(this.maxLength){
+                       var maxLength = parseInt(this.maxLength);
+                       var value = this.textbox.value.replace(/\r/g,'');
+                       var overflow = value.length - maxLength;
+                       if(overflow > 0){
+                               if(e){ dojo.stopEvent(e); }
+                               var textarea = this.textbox;
+                               if(textarea.selectionStart){
+                                       var pos = textarea.selectionStart;
+                                       var cr = 0;
+                                       if(dojo.isOpera){
+                                               cr = (this.textbox.value.substring(0,pos).match(/\r/g) || []).length;
+                                       }
+                                       this.textbox.value = value.substring(0,pos-overflow-cr)+value.substring(pos-cr);
+                                       textarea.setSelectionRange(pos-overflow, pos-overflow);
+                               }else if(dojo.doc.selection){ //IE
+                                       textarea.focus();
+                                       var range = dojo.doc.selection.createRange();
+                                       // delete overflow characters
+                                       range.moveStart("character", -overflow);
+                                       range.text = '';
+                                       // show cursor
+                                       range.select();
+                               }
+                       }
+                       this._previousValue = this.textbox.value;
+               }
+               this.inherited(arguments);
+       }
+});
+
 }
index 051d5792947e7833581138b4241af238d3af4d7d..80d4cfa9801b121a3b75c74f54cdc98ee56e61e2 100644 (file)
@@ -1,18 +1,23 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.Slider"]){
-dojo._hasResource["dijit.form.Slider"]=true;
+if(!dojo._hasResource["dijit.form.Slider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.Slider"] = true;
 dojo.provide("dijit.form.Slider");
-dojo.deprecated("Call require() for HorizontalSlider / VerticalRule, explicitly rather than 'dijit.form.Slider' itself","","2.0");
 dojo.require("dijit.form.HorizontalSlider");
 dojo.require("dijit.form.VerticalSlider");
 dojo.require("dijit.form.HorizontalRule");
 dojo.require("dijit.form.VerticalRule");
 dojo.require("dijit.form.HorizontalRuleLabels");
 dojo.require("dijit.form.VerticalRuleLabels");
+
+
+dojo.deprecated("Call require() for HorizontalSlider / VerticalRule, explicitly rather than 'dijit.form.Slider' itself", "", "2.0");
+
+// For back-compat, remove for 2.0
+
 }
index 81c9b2a04d22e9d70623f06172b22ea444b2a487..38a9c09d43236604914f3dfc3e58e22ff0b5581d 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.TextBox"]){
-dojo._hasResource["dijit.form.TextBox"]=true;
+if(!dojo._hasResource["dijit.form.TextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.TextBox"] = true;
 dojo.provide("dijit.form.TextBox");
 dojo.require("dijit.form._FormWidget");
-dojo.declare("dijit.form.TextBox",dijit.form._FormValueWidget,{trim:false,uppercase:false,lowercase:false,propercase:false,maxLength:"",selectOnClick:false,placeHolder:"",templateString:dojo.cache("dijit.form","templates/TextBox.html","<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),_singleNodeTemplate:"<input class=\"dijit dijitReset dijitLeft dijitInputField\" dojoAttachPoint=\"textbox,focusNode\" autocomplete=\"off\" type=\"${type}\" ${!nameAttrSetting} />",_buttonInputDisabled:dojo.isIE?"disabled":"",baseClass:"dijitTextBox",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{maxLength:"focusNode"}),postMixInProperties:function(){
-var _1=this.type.toLowerCase();
-if(this.templateString.toLowerCase()=="input"||((_1=="hidden"||_1=="file")&&this.templateString==dijit.form.TextBox.prototype.templateString)){
-this.templateString=this._singleNodeTemplate;
-}
-this.inherited(arguments);
-},_setPlaceHolderAttr:function(v){
-this.placeHolder=v;
-if(!this._phspan){
-this._attachPoints.push("_phspan");
-this._phspan=dojo.create("span",{className:"dijitPlaceHolder dijitInputField"},this.textbox,"after");
-}
-this._phspan.innerHTML="";
-this._phspan.appendChild(document.createTextNode(v));
-this._updatePlaceHolder();
-},_updatePlaceHolder:function(){
-if(this._phspan){
-this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";
-}
-},_getValueAttr:function(){
-return this.parse(this.get("displayedValue"),this.constraints);
-},_setValueAttr:function(_2,_3,_4){
-var _5;
-if(_2!==undefined){
-_5=this.filter(_2);
-if(typeof _4!="string"){
-if(_5!==null&&((typeof _5!="number")||!isNaN(_5))){
-_4=this.filter(this.format(_5,this.constraints));
-}else{
-_4="";
-}
-}
-}
-if(_4!=null&&_4!=undefined&&((typeof _4)!="number"||!isNaN(_4))&&this.textbox.value!=_4){
-this.textbox.value=_4;
-}
-this._updatePlaceHolder();
-this.inherited(arguments,[_5,_3]);
-},displayedValue:"",getDisplayedValue:function(){
-dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.","","2.0");
-return this.get("displayedValue");
-},_getDisplayedValueAttr:function(){
-return this.filter(this.textbox.value);
-},setDisplayedValue:function(_6){
-dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.","","2.0");
-this.set("displayedValue",_6);
-},_setDisplayedValueAttr:function(_7){
-if(_7===null||_7===undefined){
-_7="";
-}else{
-if(typeof _7!="string"){
-_7=String(_7);
-}
-}
-this.textbox.value=_7;
-this._setValueAttr(this.get("value"),undefined,_7);
-},format:function(_8,_9){
-return ((_8==null||_8==undefined)?"":(_8.toString?_8.toString():_8));
-},parse:function(_a,_b){
-return _a;
-},_refreshState:function(){
-},_onInput:function(e){
-if(e&&e.type&&/key/i.test(e.type)&&e.keyCode){
-switch(e.keyCode){
-case dojo.keys.SHIFT:
-case dojo.keys.ALT:
-case dojo.keys.CTRL:
-case dojo.keys.TAB:
-return;
-}
-}
-if(this.intermediateChanges){
-var _c=this;
-setTimeout(function(){
-_c._handleOnChange(_c.get("value"),false);
-},0);
-}
-this._refreshState();
-},postCreate:function(){
-if(dojo.isIE){
-var s=dojo.getComputedStyle(this.domNode);
-if(s){
-var ff=s.fontFamily;
-if(ff){
-var _d=this.domNode.getElementsByTagName("INPUT");
-if(_d){
-for(var i=0;i<_d.length;i++){
-_d[i].style.fontFamily=ff;
-}
-}
-}
-}
-}
-this.textbox.setAttribute("value",this.textbox.value);
-this.inherited(arguments);
-if(dojo.isMoz||dojo.isOpera){
-this.connect(this.textbox,"oninput",this._onInput);
-}else{
-this.connect(this.textbox,"onkeydown",this._onInput);
-this.connect(this.textbox,"onkeyup",this._onInput);
-this.connect(this.textbox,"onpaste",this._onInput);
-this.connect(this.textbox,"oncut",this._onInput);
-}
-},_blankValue:"",filter:function(_e){
-if(_e===null){
-return this._blankValue;
-}
-if(typeof _e!="string"){
-return _e;
-}
-if(this.trim){
-_e=dojo.trim(_e);
-}
-if(this.uppercase){
-_e=_e.toUpperCase();
-}
-if(this.lowercase){
-_e=_e.toLowerCase();
-}
-if(this.propercase){
-_e=_e.replace(/[^\s]+/g,function(_f){
-return _f.substring(0,1).toUpperCase()+_f.substring(1);
-});
-}
-return _e;
-},_setBlurValue:function(){
-this._setValueAttr(this.get("value"),true);
-},_onBlur:function(e){
-if(this.disabled){
-return;
-}
-this._setBlurValue();
-this.inherited(arguments);
-if(this._selectOnClickHandle){
-this.disconnect(this._selectOnClickHandle);
-}
-if(this.selectOnClick&&dojo.isMoz){
-this.textbox.selectionStart=this.textbox.selectionEnd=undefined;
-}
-this._updatePlaceHolder();
-},_onFocus:function(by){
-if(this.disabled||this.readOnly){
-return;
-}
-if(this.selectOnClick&&by=="mouse"){
-this._selectOnClickHandle=this.connect(this.domNode,"onmouseup",function(){
-this.disconnect(this._selectOnClickHandle);
-var _10;
-if(dojo.isIE){
-var _11=dojo.doc.selection.createRange();
-var _12=_11.parentElement();
-_10=_12==this.textbox&&_11.text.length==0;
-}else{
-_10=this.textbox.selectionStart==this.textbox.selectionEnd;
-}
-if(_10){
-dijit.selectInputText(this.textbox);
-}
-});
-}
-this._updatePlaceHolder();
-this._refreshState();
-this.inherited(arguments);
-},reset:function(){
-this.textbox.value="";
-this.inherited(arguments);
-}});
-dijit.selectInputText=function(_13,_14,_15){
-var _16=dojo.global;
-var _17=dojo.doc;
-_13=dojo.byId(_13);
-if(isNaN(_14)){
-_14=0;
-}
-if(isNaN(_15)){
-_15=_13.value?_13.value.length:0;
-}
-dijit.focus(_13);
-if(_17["selection"]&&dojo.body()["createTextRange"]){
-if(_13.createTextRange){
-var _18=_13.createTextRange();
-with(_18){
-collapse(true);
-moveStart("character",-99999);
-moveStart("character",_14);
-moveEnd("character",_15-_14);
-select();
-}
-}
-}else{
-if(_16["getSelection"]){
-if(_13.setSelectionRange){
-_13.setSelectionRange(_14,_15);
-}
-}
-}
+
+
+dojo.declare(
+       "dijit.form.TextBox",
+       dijit.form._FormValueWidget,
+       {
+               // summary:
+               //              A base class for textbox form inputs
+
+               // trim: Boolean
+               //              Removes leading and trailing whitespace if true.  Default is false.
+               trim: false,
+
+               // uppercase: Boolean
+               //              Converts all characters to uppercase if true.  Default is false.
+               uppercase: false,
+
+               // lowercase: Boolean
+               //              Converts all characters to lowercase if true.  Default is false.
+               lowercase: false,
+
+               // propercase: Boolean
+               //              Converts the first character of each word to uppercase if true.
+               propercase: false,
+
+               // maxLength: String
+               //              HTML INPUT tag maxLength declaration.
+               maxLength: "",
+
+               // selectOnClick: [const] Boolean
+               //              If true, all text will be selected when focused with mouse
+               selectOnClick: false,
+
+               // placeHolder: String
+               //              Defines a hint to help users fill out the input field (as defined in HTML 5).
+               //              This should only contain plain text (no html markup).
+               placeHolder: "",
+               
+               templateString: dojo.cache("dijit.form", "templates/TextBox.html", "<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" role=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),
+               _singleNodeTemplate: '<input class="dijit dijitReset dijitLeft dijitInputField" dojoAttachPoint="textbox,focusNode" autocomplete="off" type="${type}" ${!nameAttrSetting} />',
+
+               _buttonInputDisabled: dojo.isIE ? "disabled" : "", // allows IE to disallow focus, but Firefox cannot be disabled for mousedown events
+
+               baseClass: "dijitTextBox",
+
+               attributeMap: dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap, {
+                       maxLength: "focusNode"
+               }),
+               
+               postMixInProperties: function(){
+                       var type = this.type.toLowerCase();
+                       if(this.templateString && this.templateString.toLowerCase() == "input" || ((type == "hidden" || type == "file") && this.templateString == dijit.form.TextBox.prototype.templateString)){
+                               this.templateString = this._singleNodeTemplate;
+                       }
+                       this.inherited(arguments);
+               },
+
+               _setPlaceHolderAttr: function(v){
+                       this._set("placeHolder", v);
+                       if(!this._phspan){
+                               this._attachPoints.push('_phspan');
+                               /* dijitInputField class gives placeHolder same padding as the input field
+                                * parent node already has dijitInputField class but it doesn't affect this <span>
+                                * since it's position: absolute.
+                                */
+                               this._phspan = dojo.create('span',{className:'dijitPlaceHolder dijitInputField'},this.textbox,'after');
+                       }
+                       this._phspan.innerHTML="";
+                       this._phspan.appendChild(document.createTextNode(v));
+                       
+                       this._updatePlaceHolder();
+               },
+               
+               _updatePlaceHolder: function(){
+                       if(this._phspan){
+                               this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";
+                       }
+               },
+
+               _getValueAttr: function(){
+                       // summary:
+                       //              Hook so get('value') works as we like.
+                       // description:
+                       //              For `dijit.form.TextBox` this basically returns the value of the <input>.
+                       //
+                       //              For `dijit.form.MappedTextBox` subclasses, which have both
+                       //              a "displayed value" and a separate "submit value",
+                       //              This treats the "displayed value" as the master value, computing the
+                       //              submit value from it via this.parse().
+                       return this.parse(this.get('displayedValue'), this.constraints);
+               },
+
+               _setValueAttr: function(value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){
+                       // summary:
+                       //              Hook so set('value', ...) works.
+                       //
+                       // description:
+                       //              Sets the value of the widget to "value" which can be of
+                       //              any type as determined by the widget.
+                       //
+                       // value:
+                       //              The visual element value is also set to a corresponding,
+                       //              but not necessarily the same, value.
+                       //
+                       // formattedValue:
+                       //              If specified, used to set the visual element value,
+                       //              otherwise a computed visual value is used.
+                       //
+                       // priorityChange:
+                       //              If true, an onChange event is fired immediately instead of
+                       //              waiting for the next blur event.
+
+                       var filteredValue;
+                       if(value !== undefined){
+                               // TODO: this is calling filter() on both the display value and the actual value.
+                               // I added a comment to the filter() definition about this, but it should be changed.
+                               filteredValue = this.filter(value);
+                               if(typeof formattedValue != "string"){
+                                       if(filteredValue !== null && ((typeof filteredValue != "number") || !isNaN(filteredValue))){
+                                               formattedValue = this.filter(this.format(filteredValue, this.constraints));
+                                       }else{ formattedValue = ''; }
+                               }
+                       }
+                       if(formattedValue != null && formattedValue != undefined && ((typeof formattedValue) != "number" || !isNaN(formattedValue)) && this.textbox.value != formattedValue){
+                               this.textbox.value = formattedValue;
+                               this._set("displayedValue", this.get("displayedValue"));
+                       }
+
+                       this._updatePlaceHolder();
+
+                       this.inherited(arguments, [filteredValue, priorityChange]);
+               },
+
+               // displayedValue: String
+               //              For subclasses like ComboBox where the displayed value
+               //              (ex: Kentucky) and the serialized value (ex: KY) are different,
+               //              this represents the displayed value.
+               //
+               //              Setting 'displayedValue' through set('displayedValue', ...)
+               //              updates 'value', and vice-versa.  Otherwise 'value' is updated
+               //              from 'displayedValue' periodically, like onBlur etc.
+               //
+               //              TODO: move declaration to MappedTextBox?
+               //              Problem is that ComboBox references displayedValue,
+               //              for benefit of FilteringSelect.
+               displayedValue: "",
+
+               getDisplayedValue: function(){
+                       // summary:
+                       //              Deprecated.  Use get('displayedValue') instead.
+                       // tags:
+                       //              deprecated
+                       dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.", "", "2.0");
+                       return this.get('displayedValue');
+               },
+
+               _getDisplayedValueAttr: function(){
+                       // summary:
+                       //              Hook so get('displayedValue') works.
+                       // description:
+                       //              Returns the displayed value (what the user sees on the screen),
+                       //              after filtering (ie, trimming spaces etc.).
+                       //
+                       //              For some subclasses of TextBox (like ComboBox), the displayed value
+                       //              is different from the serialized value that's actually
+                       //              sent to the server (see dijit.form.ValidationTextBox.serialize)
+
+                       // TODO: maybe we should update this.displayedValue on every keystroke so that we don't need
+                       // this method
+                       // TODO: this isn't really the displayed value when the user is typing
+                       return this.filter(this.textbox.value);
+               },
+
+               setDisplayedValue: function(/*String*/ value){
+                       // summary:
+                       //              Deprecated.  Use set('displayedValue', ...) instead.
+                       // tags:
+                       //              deprecated
+                       dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.", "", "2.0");
+                       this.set('displayedValue', value);
+               },
+
+               _setDisplayedValueAttr: function(/*String*/ value){
+                       // summary:
+                       //              Hook so set('displayedValue', ...) works.
+                       // description:
+                       //              Sets the value of the visual element to the string "value".
+                       //              The widget value is also set to a corresponding,
+                       //              but not necessarily the same, value.
+
+                       if(value === null || value === undefined){ value = '' }
+                       else if(typeof value != "string"){ value = String(value) }
+
+                       this.textbox.value = value;
+
+                       // sets the serialized value to something corresponding to specified displayedValue
+                       // (if possible), and also updates the textbox.value, for example converting "123"
+                       // to "123.00"
+                       this._setValueAttr(this.get('value'), undefined);
+
+                       this._set("displayedValue", this.get('displayedValue'));
+               },
+
+               format: function(/*String*/ value, /*Object*/ constraints){
+                       // summary:
+                       //              Replacable function to convert a value to a properly formatted string.
+                       // tags:
+                       //              protected extension
+                       return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value));
+               },
+
+               parse: function(/*String*/ value, /*Object*/ constraints){
+                       // summary:
+                       //              Replacable function to convert a formatted string to a value
+                       // tags:
+                       //              protected extension
+
+                       return value;   // String
+               },
+
+               _refreshState: function(){
+                       // summary:
+                       //              After the user types some characters, etc., this method is
+                       //              called to check the field for validity etc.  The base method
+                       //              in `dijit.form.TextBox` does nothing, but subclasses override.
+                       // tags:
+                       //              protected
+               },
+
+               _onInput: function(e){
+                       if(e && e.type && /key/i.test(e.type) && e.keyCode){
+                               switch(e.keyCode){
+                                       case dojo.keys.SHIFT:
+                                       case dojo.keys.ALT:
+                                       case dojo.keys.CTRL:
+                                       case dojo.keys.TAB:
+                                               return;
+                               }
+                       }
+                       if(this.intermediateChanges){
+                               var _this = this;
+                               // the setTimeout allows the key to post to the widget input box
+                               setTimeout(function(){ _this._handleOnChange(_this.get('value'), false); }, 0);
+                       }
+                       this._refreshState();
+
+                       // In case someone is watch()'ing for changes to displayedValue
+                       this._set("displayedValue", this.get("displayedValue"));
+               },
+
+               postCreate: function(){
+                       if(dojo.isIE){ // IE INPUT tag fontFamily has to be set directly using STYLE
+                               // the setTimeout gives IE a chance to render the TextBox and to deal with font inheritance
+                               setTimeout(dojo.hitch(this, function(){
+                               var s = dojo.getComputedStyle(this.domNode);
+                               if(s){
+                                       var ff = s.fontFamily;
+                                       if(ff){
+                                               var inputs = this.domNode.getElementsByTagName("INPUT");
+                                               if(inputs){
+                                                       for(var i=0; i < inputs.length; i++){
+                                                               inputs[i].style.fontFamily = ff;
+                                                       }
+                                               }
+                                       }
+                               }
+                               }), 0);
+                       }
+
+                       // setting the value here is needed since value="" in the template causes "undefined"
+                       // and setting in the DOM (instead of the JS object) helps with form reset actions
+                       this.textbox.setAttribute("value", this.textbox.value); // DOM and JS values should be the same
+
+                       this.inherited(arguments);
+
+                       if(dojo.isMoz || dojo.isOpera){
+                               this.connect(this.textbox, "oninput", "_onInput");
+                       }else{
+                               this.connect(this.textbox, "onkeydown", "_onInput");
+                               this.connect(this.textbox, "onkeyup", "_onInput");
+                               this.connect(this.textbox, "onpaste", "_onInput");
+                               this.connect(this.textbox, "oncut", "_onInput");
+                       }
+               },
+
+               _blankValue: '', // if the textbox is blank, what value should be reported
+               filter: function(val){
+                       // summary:
+                       //              Auto-corrections (such as trimming) that are applied to textbox
+                       //              value on blur or form submit.
+                       // description:
+                       //              For MappedTextBox subclasses, this is called twice
+                       //                      - once with the display value
+                       //                      - once the value as set/returned by set('value', ...)
+                       //              and get('value'), ex: a Number for NumberTextBox.
+                       //
+                       //              In the latter case it does corrections like converting null to NaN.  In
+                       //              the former case the NumberTextBox.filter() method calls this.inherited()
+                       //              to execute standard trimming code in TextBox.filter().
+                       //
+                       //              TODO: break this into two methods in 2.0
+                       //
+                       // tags:
+                       //              protected extension
+                       if(val === null){ return this._blankValue; }
+                       if(typeof val != "string"){ return val; }
+                       if(this.trim){
+                               val = dojo.trim(val);
+                       }
+                       if(this.uppercase){
+                               val = val.toUpperCase();
+                       }
+                       if(this.lowercase){
+                               val = val.toLowerCase();
+                       }
+                       if(this.propercase){
+                               val = val.replace(/[^\s]+/g, function(word){
+                                       return word.substring(0,1).toUpperCase() + word.substring(1);
+                               });
+                       }
+                       return val;
+               },
+
+               _setBlurValue: function(){
+                       this._setValueAttr(this.get('value'), true);
+               },
+
+               _onBlur: function(e){
+                       if(this.disabled){ return; }
+                       this._setBlurValue();
+                       this.inherited(arguments);
+
+                       if(this._selectOnClickHandle){
+                               this.disconnect(this._selectOnClickHandle);
+                       }
+                       if(this.selectOnClick && dojo.isMoz){
+                               this.textbox.selectionStart = this.textbox.selectionEnd = undefined; // clear selection so that the next mouse click doesn't reselect
+                       }
+                       
+                       this._updatePlaceHolder();
+               },
+
+               _onFocus: function(/*String*/ by){
+                       if(this.disabled || this.readOnly){ return; }
+
+                       // Select all text on focus via click if nothing already selected.
+                       // Since mouse-up will clear the selection need to defer selection until after mouse-up.
+                       // Don't do anything on focus by tabbing into the widget since there's no associated mouse-up event.
+                       if(this.selectOnClick && by == "mouse"){
+                               this._selectOnClickHandle = this.connect(this.domNode, "onmouseup", function(){
+                                       // Only select all text on first click; otherwise users would have no way to clear
+                                       // the selection.
+                                       this.disconnect(this._selectOnClickHandle);
+
+                                       // Check if the user selected some text manually (mouse-down, mouse-move, mouse-up)
+                                       // and if not, then select all the text
+                                       var textIsNotSelected;
+                                       if(dojo.isIE){
+                                               var range = dojo.doc.selection.createRange();
+                                               var parent = range.parentElement();
+                                               textIsNotSelected = parent == this.textbox && range.text.length == 0;
+                                       }else{
+                                               textIsNotSelected = this.textbox.selectionStart == this.textbox.selectionEnd;
+                                       }
+                                       if(textIsNotSelected){
+                                               dijit.selectInputText(this.textbox);
+                                       }
+                               });
+                       }
+
+                       this._updatePlaceHolder();
+                       
+                       // call this.inherited() before refreshState(), since this.inherited() will possibly scroll the viewport
+                       // (to scroll the TextBox into view), which will affect how _refreshState() positions the tooltip
+                       this.inherited(arguments);
+
+                       this._refreshState();
+               },
+
+               reset: function(){
+                       // Overrides dijit._FormWidget.reset().
+                       // Additionally resets the displayed textbox value to ''
+                       this.textbox.value = '';
+                       this.inherited(arguments);
+               }
+       }
+);
+
+dijit.selectInputText = function(/*DomNode*/ element, /*Number?*/ start, /*Number?*/ stop){
+       // summary:
+       //              Select text in the input element argument, from start (default 0), to stop (default end).
+
+       // TODO: use functions in _editor/selection.js?
+       var _window = dojo.global;
+       var _document = dojo.doc;
+       element = dojo.byId(element);
+       if(isNaN(start)){ start = 0; }
+       if(isNaN(stop)){ stop = element.value ? element.value.length : 0; }
+       dijit.focus(element);
+       if(_document["selection"] && dojo.body()["createTextRange"]){ // IE
+               if(element.createTextRange){
+                       var r = element.createTextRange();
+                       r.collapse(true);
+                       r.moveStart("character", -99999); // move to 0
+                       r.moveStart("character", start); // delta from 0 is the correct position
+                       r.moveEnd("character", stop-start);
+                       r.select();
+               }
+       }else if(_window["getSelection"]){
+               if(element.setSelectionRange){
+                       element.setSelectionRange(start, stop);
+               }
+       }
 };
+
 }
index 4dd9cd928883095ee1127bd507d4c24f94af9751..cc1ec917e97f8a9d35030108333229c615a96c36 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.Textarea"]){
-dojo._hasResource["dijit.form.Textarea"]=true;
+if(!dojo._hasResource["dijit.form.Textarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.Textarea"] = true;
 dojo.provide("dijit.form.Textarea");
 dojo.require("dijit.form.SimpleTextarea");
-dojo.declare("dijit.form.Textarea",dijit.form.SimpleTextarea,{cols:"",_previousNewlines:0,_strictMode:(dojo.doc.compatMode!="BackCompat"),_getHeight:function(_1){
-var _2=_1.scrollHeight;
-if(dojo.isIE){
-_2+=_1.offsetHeight-_1.clientHeight-((dojo.isIE<8&&this._strictMode)?dojo._getPadBorderExtents(_1).h:0);
-}else{
-if(dojo.isMoz){
-_2+=_1.offsetHeight-_1.clientHeight;
-}else{
-if(dojo.isWebKit&&!(dojo.isSafari<4)){
-_2+=dojo._getBorderExtents(_1).h;
-}else{
-_2+=dojo._getPadBorderExtents(_1).h;
-}
-}
-}
-return _2;
-},_estimateHeight:function(_3){
-_3.style.maxHeight="";
-_3.style.height="auto";
-_3.rows=(_3.value.match(/\n/g)||[]).length+1;
-},_needsHelpShrinking:dojo.isMoz||dojo.isWebKit,_onInput:function(){
-this.inherited(arguments);
-if(this._busyResizing){
-return;
-}
-this._busyResizing=true;
-var _4=this.textbox;
-if(_4.scrollHeight&&_4.offsetHeight&&_4.clientHeight){
-var _5=this._getHeight(_4)+"px";
-if(_4.style.height!=_5){
-_4.style.maxHeight=_4.style.height=_5;
-}
-if(this._needsHelpShrinking){
-if(this._setTimeoutHandle){
-clearTimeout(this._setTimeoutHandle);
-}
-this._setTimeoutHandle=setTimeout(dojo.hitch(this,"_shrink"),0);
-}
-}else{
-this._estimateHeight(_4);
-}
-this._busyResizing=false;
-},_busyResizing:false,_shrink:function(){
-this._setTimeoutHandle=null;
-if(this._needsHelpShrinking&&!this._busyResizing){
-this._busyResizing=true;
-var _6=this.textbox;
-var _7=false;
-if(_6.value==""){
-_6.value=" ";
-_7=true;
-}
-var _8=_6.scrollHeight;
-if(!_8){
-this._estimateHeight(_6);
-}else{
-var _9=_6.style.paddingBottom;
-var _a=dojo._getPadExtents(_6);
-_a=_a.h-_a.t;
-_6.style.paddingBottom=_a+1+"px";
-var _b=this._getHeight(_6)-1+"px";
-if(_6.style.maxHeight!=_b){
-_6.style.paddingBottom=_a+_8+"px";
-_6.scrollTop=0;
-_6.style.maxHeight=this._getHeight(_6)-_8+"px";
-}
-_6.style.paddingBottom=_9;
-}
-if(_7){
-_6.value="";
-}
-this._busyResizing=false;
-}
-},resize:function(){
-this._onInput();
-},_setValueAttr:function(){
-this.inherited(arguments);
-this.resize();
-},postCreate:function(){
-this.inherited(arguments);
-dojo.style(this.textbox,{overflowY:"hidden",overflowX:"auto",boxSizing:"border-box",MsBoxSizing:"border-box",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box"});
-this.connect(this.textbox,"onscroll",this._onInput);
-this.connect(this.textbox,"onresize",this._onInput);
-this.connect(this.textbox,"onfocus",this._onInput);
-this._setTimeoutHandle=setTimeout(dojo.hitch(this,"resize"),0);
-},uninitialize:function(){
-if(this._setTimeoutHandle){
-clearTimeout(this._setTimeoutHandle);
-}
-this.inherited(arguments);
-}});
+
+
+dojo.declare(
+       "dijit.form.Textarea",
+       dijit.form.SimpleTextarea,
+       {
+       // summary:
+       //              A textarea widget that adjusts it's height according to the amount of data.
+       //
+       // description:
+       //              A textarea that dynamically expands/contracts (changing it's height) as
+       //              the user types, to display all the text without requiring a scroll bar.
+       //
+       //              Takes nearly all the parameters (name, value, etc.) that a vanilla textarea takes.
+       //              Rows is not supported since this widget adjusts the height.
+       //
+       // example:
+       // |    <textarea dojoType="dijit.form.TextArea">...</textarea>
+
+
+       // TODO: for 2.0, rename this to ExpandingTextArea, and rename SimpleTextarea to Textarea
+
+       baseClass: "dijitTextBox dijitTextArea dijitExpandingTextArea",
+
+       // Override SimpleTextArea.cols to default to width:100%, for backward compatibility
+       cols: "",
+
+       _previousNewlines: 0,
+       _strictMode: (dojo.doc.compatMode != 'BackCompat'), // not the same as !dojo.isQuirks
+
+       _getHeight: function(textarea){
+               var newH = textarea.scrollHeight;
+               if(dojo.isIE){
+                       newH += textarea.offsetHeight - textarea.clientHeight - ((dojo.isIE < 8 && this._strictMode) ? dojo._getPadBorderExtents(textarea).h : 0);
+               }else if(dojo.isMoz){
+                       newH += textarea.offsetHeight - textarea.clientHeight; // creates room for horizontal scrollbar
+               }else if(dojo.isWebKit){
+                       newH += dojo._getBorderExtents(textarea).h;
+               }else{ // Opera 9.6 (TODO: test if this is still needed)
+                       newH += dojo._getPadBorderExtents(textarea).h;
+               }
+               return newH;
+       },
+
+       _estimateHeight: function(textarea){
+               // summary:
+               //              Approximate the height when the textarea is invisible with the number of lines in the text.
+               //              Fails when someone calls setValue with a long wrapping line, but the layout fixes itself when the user clicks inside so . . .
+               //              In IE, the resize event is supposed to fire when the textarea becomes visible again and that will correct the size automatically.
+               //
+               textarea.style.maxHeight = "";
+               textarea.style.height = "auto";
+               // #rows = #newlines+1
+               // Note: on Moz, the following #rows appears to be 1 too many.
+               // Actually, Moz is reserving room for the scrollbar.
+               // If you increase the font size, this behavior becomes readily apparent as the last line gets cut off without the +1.
+               textarea.rows = (textarea.value.match(/\n/g) || []).length + 1;
+       },
+
+       _needsHelpShrinking: dojo.isMoz || dojo.isWebKit,
+
+       _onInput: function(){
+               // Override SimpleTextArea._onInput() to deal with height adjustment
+               this.inherited(arguments);
+               if(this._busyResizing){ return; }
+               this._busyResizing = true;
+               var textarea = this.textbox;
+               if(textarea.scrollHeight && textarea.offsetHeight && textarea.clientHeight){
+                       var newH = this._getHeight(textarea) + "px";
+                       if(textarea.style.height != newH){
+                               textarea.style.maxHeight = textarea.style.height = newH;
+                       }
+                       if(this._needsHelpShrinking){
+                               if(this._setTimeoutHandle){
+                                       clearTimeout(this._setTimeoutHandle);
+                               }
+                               this._setTimeoutHandle = setTimeout(dojo.hitch(this, "_shrink"), 0); // try to collapse multiple shrinks into 1
+                       }
+               }else{
+                       // hidden content of unknown size
+                       this._estimateHeight(textarea);
+               }
+               this._busyResizing = false;
+       },
+
+       _busyResizing: false,
+       _shrink: function(){
+               // grow paddingBottom to see if scrollHeight shrinks (when it is unneccesarily big)
+               this._setTimeoutHandle = null;
+               if(this._needsHelpShrinking && !this._busyResizing){
+                       this._busyResizing = true;
+                       var textarea = this.textbox;
+                       var empty = false;
+                       if(textarea.value == ''){
+                               textarea.value = ' '; // prevent collapse all the way back to 0
+                               empty = true;
+                       }
+                       var scrollHeight = textarea.scrollHeight;
+                       if(!scrollHeight){
+                               this._estimateHeight(textarea);
+                       }else{
+                               var oldPadding = textarea.style.paddingBottom;
+                               var newPadding = dojo._getPadExtents(textarea);
+                               newPadding = newPadding.h - newPadding.t;
+                               textarea.style.paddingBottom = newPadding + 1 + "px"; // tweak padding to see if height can be reduced
+                               var newH = this._getHeight(textarea) - 1 + "px"; // see if the height changed by the 1px added
+                               if(textarea.style.maxHeight != newH){ // if can be reduced, so now try a big chunk
+                                       textarea.style.paddingBottom = newPadding + scrollHeight + "px";
+                                       textarea.scrollTop = 0;
+                                       textarea.style.maxHeight = this._getHeight(textarea) - scrollHeight + "px"; // scrollHeight is the added padding
+                               }
+                               textarea.style.paddingBottom = oldPadding;
+                       }
+                       if(empty){
+                               textarea.value = '';
+                       }
+                       this._busyResizing = false;
+               }
+       },
+
+       resize: function(){
+               // summary:
+               //              Resizes the textarea vertically (should be called after a style/value change)
+               this._onInput();
+       },
+
+       _setValueAttr: function(){
+               this.inherited(arguments);
+               this.resize();
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+
+               // tweak textarea style to reduce browser differences
+               dojo.style(this.textbox, { overflowY: 'hidden', overflowX: 'auto', boxSizing: 'border-box', MsBoxSizing: 'border-box', WebkitBoxSizing: 'border-box', MozBoxSizing: 'border-box' });
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
+
+               this.connect(this.textbox, "onscroll", "_onInput");
+               this.connect(this.textbox, "onresize", "_onInput");
+               this.connect(this.textbox, "onfocus", "_onInput"); // useful when a previous estimate was off a bit
+               this._setTimeoutHandle = setTimeout(dojo.hitch(this, "resize"), 0);
+       },
+
+       uninitialize: function(){
+               if(this._setTimeoutHandle){
+                       clearTimeout(this._setTimeoutHandle);
+               }
+               this.inherited(arguments);
+       }
+});
+
 }
index f5e7f99e39b29bcb57e7bef81d716f1a0678491a..81949c4a16d25a5b7e45afd37405c17c0386d94c 100644 (file)
@@ -1,14 +1,87 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.TimeTextBox"]){
-dojo._hasResource["dijit.form.TimeTextBox"]=true;
+if(!dojo._hasResource["dijit.form.TimeTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.TimeTextBox"] = true;
 dojo.provide("dijit.form.TimeTextBox");
 dojo.require("dijit._TimePicker");
 dojo.require("dijit.form._DateTimeTextBox");
-dojo.declare("dijit.form.TimeTextBox",dijit.form._DateTimeTextBox,{baseClass:"dijitTextBox dijitTimeTextBox",popupClass:"dijit._TimePicker",_selector:"time",value:new Date("")});
+
+
+/*=====
+dojo.declare(
+       "dijit.form.TimeTextBox.__Constraints",
+       [dijit.form._DateTimeTextBox.__Constraints, dijit._TimePicker.__Constraints]
+);
+=====*/
+
+dojo.declare(
+       "dijit.form.TimeTextBox",
+       dijit.form._DateTimeTextBox,
+       {
+               // summary:
+               //              A validating, serializable, range-bound time text box with a drop down time picker
+
+               baseClass: "dijitTextBox dijitComboBox dijitTimeTextBox",
+               popupClass: "dijit._TimePicker",
+               _selector: "time",
+
+/*=====
+               // constraints: dijit.form.TimeTextBox.__Constraints
+               constraints:{},
+=====*/
+
+               // value: Date
+               //              The value of this widget as a JavaScript Date object.  Note that the date portion implies time zone and daylight savings rules.
+               //
+               //              Example:
+               // |    new dijit.form.TimeTextBox({value: dojo.date.stamp.fromISOString("T12:59:59", new Date())})
+               //
+               //              When passed to the parser in markup, must be specified according to locale-independent
+               //              `dojo.date.stamp.fromISOString` format.
+               //
+               //              Example:
+               // |    <input dojotype='dijit.form.TimeTextBox' value='T12:34:00'>
+               value: new Date(""),            // value.toString()="NaN"
+               //FIXME: in markup, you have no control over daylight savings
+
+               _onKey: function(evt){
+                       this.inherited(arguments);
+
+                       // If the user has backspaced or typed some numbers, then filter the result list
+                       // by what they typed.  Maybe there's a better way to detect this, like _handleOnChange()?
+                       switch(evt.keyCode){
+                               case dojo.keys.ENTER:
+                               case dojo.keys.TAB:
+                               case dojo.keys.ESCAPE:
+                               case dojo.keys.DOWN_ARROW:
+                               case dojo.keys.UP_ARROW:
+                                       // these keys have special meaning
+                                       break;
+                               default:
+                                       // setTimeout() because the keystroke hasn't yet appeared in the <input>,
+                                       // so the get('displayedValue') call below won't give the result we want.
+                                       setTimeout(dojo.hitch(this, function(){
+                                               // set this.filterString to the filter to apply to the drop down list;
+                                               // it will be used in openDropDown()
+                                               var val = this.get('displayedValue');
+                                               this.filterString = (val && !this.parse(val, this.constraints)) ? val.toLowerCase() : "";
+       
+                                               // close the drop down and reopen it, in order to filter the items shown in the list
+                                               // and also since the drop down may need to be repositioned if the number of list items has changed
+                                               // and it's being displayed above the <input>
+                                               if(this._opened){
+                                                       this.closeDropDown();
+                                               }
+                                               this.openDropDown();
+                                       }), 0);
+                       }
+               }
+       }
+);
+
 }
index f67dd088029fe6e799dc2d4a6eddc31622b446b9..27b836fbddbc732f00267a42fe33544d6e5e033f 100644 (file)
@@ -1,12 +1,15 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.ToggleButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.ToggleButton"] = true;
 dojo.provide("dijit.form.ToggleButton");
 dojo.require("dijit.form.Button");
+
+
+
 }
index 2e0f17317f447f7b96008b16270216e414df9e97..ee4292441aac79462e7017a8e196c45a9cdb7833 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.ValidationTextBox"]){
-dojo._hasResource["dijit.form.ValidationTextBox"]=true;
+if(!dojo._hasResource["dijit.form.ValidationTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.ValidationTextBox"] = true;
 dojo.provide("dijit.form.ValidationTextBox");
 dojo.require("dojo.i18n");
 dojo.require("dijit.form.TextBox");
 dojo.require("dijit.Tooltip");
-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,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.declare("dijit.form.ValidationTextBox",dijit.form.TextBox,{templateString:dojo.cache("dijit.form","templates/ValidationTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitValidationTextBox",required:false,promptMessage:"",invalidMessage:"$_unset_$",missingMessage:"$_unset_$",constraints:{},regExp:".*",regExpGen:function(_1){
-return this.regExp;
-},state:"",tooltipPosition:[],_setValueAttr:function(){
-this.inherited(arguments);
-this.validate(this._focused);
-},validator:function(_2,_3){
-return (new RegExp("^(?:"+this.regExpGen(_3)+")"+(this.required?"":"?")+"$")).test(_2)&&(!this.required||!this._isEmpty(_2))&&(this._isEmpty(_2)||this.parse(_2,_3)!==undefined);
-},_isValidSubset:function(){
-return this.textbox.value.search(this._partialre)==0;
-},isValid:function(_4){
-return this.validator(this.textbox.value,this.constraints);
-},_isEmpty:function(_5){
-return /^\s*$/.test(_5);
-},getErrorMessage:function(_6){
-return (this.required&&this._isEmpty(this.textbox.value))?this.missingMessage:this.invalidMessage;
-},getPromptMessage:function(_7){
-return this.promptMessage;
-},_maskValidSubsetError:true,validate:function(_8){
-var _9="";
-var _a=this.disabled||this.isValid(_8);
-if(_a){
-this._maskValidSubsetError=true;
-}
-var _b=this._isEmpty(this.textbox.value);
-var _c=!_a&&!_b&&_8&&this._isValidSubset();
-this.state=((_a||((!this._hasBeenBlurred||_8)&&_b)||_c)&&this._maskValidSubsetError)?"":"Error";
-if(this.state=="Error"){
-this._maskValidSubsetError=_8;
-}
-this._setStateClass();
-dijit.setWaiState(this.focusNode,"invalid",_a?"false":"true");
-if(_8){
-if(this.state=="Error"){
-_9=this.getErrorMessage(true);
-}else{
-_9=this.getPromptMessage(true);
-}
-this._maskValidSubsetError=true;
-}
-this.displayMessage(_9);
-return _a;
-},_message:"",displayMessage:function(_d){
-if(this._message==_d){
-return;
-}
-this._message=_d;
-dijit.hideTooltip(this.domNode);
-if(_d){
-dijit.showTooltip(_d,this.domNode,this.tooltipPosition,!this.isLeftToRight());
-}
-},_refreshState:function(){
-this.validate(this._focused);
-this.inherited(arguments);
-},constructor:function(){
-this.constraints={};
-},_setConstraintsAttr:function(_e){
-if(!_e.locale&&this.lang){
-_e.locale=this.lang;
-}
-this.constraints=_e;
-this._computePartialRE();
-},_computePartialRE:function(){
-var p=this.regExpGen(this.constraints);
-this.regExp=p;
-var _f="";
-if(p!=".*"){
-this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,function(re){
-switch(re.charAt(0)){
-case "{":
-case "+":
-case "?":
-case "*":
-case "^":
-case "$":
-case "|":
-case "(":
-_f+=re;
-break;
-case ")":
-_f+="|$)";
-break;
-default:
-_f+="(?:"+re+"|$)";
-break;
-}
-});
-}
-try{
-"".search(_f);
-}
-catch(e){
-_f=this.regExp;
-console.warn("RegExp error in "+this.declaredClass+": "+this.regExp);
-}
-this._partialre="^(?:"+_f+")$";
-},postMixInProperties:function(){
-this.inherited(arguments);
-this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);
-if(this.invalidMessage=="$_unset_$"){
-this.invalidMessage=this.messages.invalidMessage;
-}
-if(!this.invalidMessage){
-this.invalidMessage=this.promptMessage;
-}
-if(this.missingMessage=="$_unset_$"){
-this.missingMessage=this.messages.missingMessage;
-}
-if(!this.missingMessage){
-this.missingMessage=this.invalidMessage;
-}
-this._setConstraintsAttr(this.constraints);
-},_setDisabledAttr:function(_10){
-this.inherited(arguments);
-this._refreshState();
-},_setRequiredAttr:function(_11){
-this.required=_11;
-dijit.setWaiState(this.focusNode,"required",_11);
-this._refreshState();
-},reset:function(){
-this._maskValidSubsetError=true;
-this.inherited(arguments);
-},_onBlur:function(){
-this.displayMessage("");
-this.inherited(arguments);
-}});
-dojo.declare("dijit.form.MappedTextBox",dijit.form.ValidationTextBox,{postMixInProperties:function(){
-this.inherited(arguments);
-this.nameAttrSetting="";
-},serialize:function(val,_12){
-return val.toString?val.toString():"";
-},toString:function(){
-var val=this.filter(this.get("value"));
-return val!=null?(typeof val=="string"?val:this.serialize(val,this.constraints)):"";
-},validate:function(){
-this.valueNode.value=this.toString();
-return this.inherited(arguments);
-},buildRendering:function(){
-this.inherited(arguments);
-this.valueNode=dojo.place("<input type='hidden'"+(this.name?" name='"+this.name+"'":"")+">",this.textbox,"after");
-},reset:function(){
-this.valueNode.value="";
-this.inherited(arguments);
-}});
-dojo.declare("dijit.form.RangeBoundTextBox",dijit.form.MappedTextBox,{rangeMessage:"",rangeCheck:function(_13,_14){
-return ("min" in _14?(this.compare(_13,_14.min)>=0):true)&&("max" in _14?(this.compare(_13,_14.max)<=0):true);
-},isInRange:function(_15){
-return this.rangeCheck(this.get("value"),this.constraints);
-},_isDefinitelyOutOfRange:function(){
-var val=this.get("value");
-var _16=false;
-var _17=false;
-if("min" in this.constraints){
-var min=this.constraints.min;
-min=this.compare(val,((typeof min=="number")&&min>=0&&val!=0)?0:min);
-_16=(typeof min=="number")&&min<0;
-}
-if("max" in this.constraints){
-var max=this.constraints.max;
-max=this.compare(val,((typeof max!="number")||max>0)?max:0);
-_17=(typeof max=="number")&&max>0;
-}
-return _16||_17;
-},_isValidSubset:function(){
-return this.inherited(arguments)&&!this._isDefinitelyOutOfRange();
-},isValid:function(_18){
-return this.inherited(arguments)&&((this._isEmpty(this.textbox.value)&&!this.required)||this.isInRange(_18));
-},getErrorMessage:function(_19){
-var v=this.get("value");
-if(v!==null&&v!==""&&v!==undefined&&(typeof v!="number"||!isNaN(v))&&!this.isInRange(_19)){
-return this.rangeMessage;
-}
-return this.inherited(arguments);
-},postMixInProperties:function(){
-this.inherited(arguments);
-if(!this.rangeMessage){
-this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);
-this.rangeMessage=this.messages.rangeMessage;
-}
-},_setConstraintsAttr:function(_1a){
-this.inherited(arguments);
-if(this.focusNode){
-if(this.constraints.min!==undefined){
-dijit.setWaiState(this.focusNode,"valuemin",this.constraints.min);
-}else{
-dijit.removeWaiState(this.focusNode,"valuemin");
-}
-if(this.constraints.max!==undefined){
-dijit.setWaiState(this.focusNode,"valuemax",this.constraints.max);
-}else{
-dijit.removeWaiState(this.focusNode,"valuemax");
-}
-}
-},_setValueAttr:function(_1b,_1c){
-dijit.setWaiState(this.focusNode,"valuenow",_1b);
-this.inherited(arguments);
-}});
+dojo.requireLocalization("dijit.form", "validate", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+/*=====
+       dijit.form.ValidationTextBox.__Constraints = function(){
+               // locale: String
+               //              locale used for validation, picks up value from this widget's lang attribute
+               // _flags_: anything
+               //              various flags passed to regExpGen function
+               this.locale = "";
+               this._flags_ = "";
+       }
+=====*/
+
+dojo.declare(
+       "dijit.form.ValidationTextBox",
+       dijit.form.TextBox,
+       {
+               // summary:
+               //              Base class for textbox widgets with the ability to validate content of various types and provide user feedback.
+               // tags:
+               //              protected
+
+               templateString: dojo.cache("dijit.form", "templates/ValidationTextBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" role=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&#935; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),
+               baseClass: "dijitTextBox dijitValidationTextBox",
+
+               // required: Boolean
+               //              User is required to enter data into this field.
+               required: false,
+
+               // promptMessage: String
+               //              If defined, display this hint string immediately on focus to the textbox, if empty.
+               //              Also displays if the textbox value is Incomplete (not yet valid but will be with additional input).
+               //              Think of this like a tooltip that tells the user what to do, not an error message
+               //              that tells the user what they've done wrong.
+               //
+               //              Message disappears when user starts typing.
+               promptMessage: "",
+
+               // invalidMessage: String
+               //              The message to display if value is invalid.
+               //              The translated string value is read from the message file by default.
+               //              Set to "" to use the promptMessage instead.
+               invalidMessage: "$_unset_$",
+
+               // missingMessage: String
+               //              The message to display if value is empty and the field is required.
+               //              The translated string value is read from the message file by default.
+               //              Set to "" to use the invalidMessage instead.
+               missingMessage: "$_unset_$",
+
+               // message: String
+               //              Currently error/prompt message.
+               //              When using the default tooltip implementation, this will only be
+               //              displayed when the field is focused.
+               message: "",
+
+               // constraints: dijit.form.ValidationTextBox.__Constraints
+               //              user-defined object needed to pass parameters to the validator functions
+               constraints: {},
+
+               // regExp: [extension protected] String
+               //              regular expression string used to validate the input
+               //              Do not specify both regExp and regExpGen
+               regExp: ".*",
+
+               regExpGen: function(/*dijit.form.ValidationTextBox.__Constraints*/ constraints){
+                       // summary:
+                       //              Overridable function used to generate regExp when dependent on constraints.
+                       //              Do not specify both regExp and regExpGen.
+                       // tags:
+                       //              extension protected
+                       return this.regExp; // String
+               },
+
+               // state: [readonly] String
+               //              Shows current state (ie, validation result) of input (""=Normal, Incomplete, or Error)
+               state: "",
+
+               // tooltipPosition: String[]
+               //              See description of `dijit.Tooltip.defaultPosition` for details on this parameter.
+               tooltipPosition: [],
+
+               _setValueAttr: function(){
+                       // summary:
+                       //              Hook so set('value', ...) works.
+                       this.inherited(arguments);
+                       this.validate(this._focused);
+               },
+
+               validator: function(/*anything*/ value, /*dijit.form.ValidationTextBox.__Constraints*/ constraints){
+                       // summary:
+                       //              Overridable function used to validate the text input against the regular expression.
+                       // tags:
+                       //              protected
+                       return (new RegExp("^(?:" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value) &&
+                               (!this.required || !this._isEmpty(value)) &&
+                               (this._isEmpty(value) || this.parse(value, constraints) !== undefined); // Boolean
+               },
+
+               _isValidSubset: function(){
+                       // summary:
+                       //              Returns true if the value is either already valid or could be made valid by appending characters.
+                       //              This is used for validation while the user [may be] still typing.
+                       return this.textbox.value.search(this._partialre) == 0;
+               },
+
+               isValid: function(/*Boolean*/ isFocused){
+                       // summary:
+                       //              Tests if value is valid.
+                       //              Can override with your own routine in a subclass.
+                       // tags:
+                       //              protected
+                       return this.validator(this.textbox.value, this.constraints);
+               },
+
+               _isEmpty: function(value){
+                       // summary:
+                       //              Checks for whitespace
+                       return (this.trim ? /^\s*$/ : /^$/).test(value); // Boolean
+               },
+
+               getErrorMessage: function(/*Boolean*/ isFocused){
+                       // summary:
+                       //              Return an error message to show if appropriate
+                       // tags:
+                       //              protected
+                       return (this.required && this._isEmpty(this.textbox.value)) ? this.missingMessage : this.invalidMessage; // String
+               },
+
+               getPromptMessage: function(/*Boolean*/ isFocused){
+                       // summary:
+                       //              Return a hint message to show when widget is first focused
+                       // tags:
+                       //              protected
+                       return this.promptMessage; // String
+               },
+
+               _maskValidSubsetError: true,
+               validate: function(/*Boolean*/ isFocused){
+                       // summary:
+                       //              Called by oninit, onblur, and onkeypress.
+                       // description:
+                       //              Show missing or invalid messages if appropriate, and highlight textbox field.
+                       // tags:
+                       //              protected
+                       var message = "";
+                       var isValid = this.disabled || this.isValid(isFocused);
+                       if(isValid){ this._maskValidSubsetError = true; }
+                       var isEmpty = this._isEmpty(this.textbox.value);
+                       var isValidSubset = !isValid && isFocused && this._isValidSubset();
+                       this._set("state", isValid ? "" : (((((!this._hasBeenBlurred || isFocused) && isEmpty) || isValidSubset) && this._maskValidSubsetError) ? "Incomplete" : "Error"));
+                       dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
+
+                       if(this.state == "Error"){
+                               this._maskValidSubsetError = isFocused && isValidSubset; // we want the error to show up after a blur and refocus
+                               message = this.getErrorMessage(isFocused);
+                       }else if(this.state == "Incomplete"){
+                               message = this.getPromptMessage(isFocused); // show the prompt whenever the value is not yet complete
+                               this._maskValidSubsetError = !this._hasBeenBlurred || isFocused; // no Incomplete warnings while focused
+                       }else if(isEmpty){
+                               message = this.getPromptMessage(isFocused); // show the prompt whenever there's no error and no text
+                       }
+                       this.set("message", message);
+
+                       return isValid;
+               },
+
+               displayMessage: function(/*String*/ message){
+                       // summary:
+                       //              Overridable method to display validation errors/hints.
+                       //              By default uses a tooltip.
+                       // tags:
+                       //              extension
+                       dijit.hideTooltip(this.domNode);
+                       if(message && this._focused){
+                               dijit.showTooltip(message, this.domNode, this.tooltipPosition, !this.isLeftToRight());
+                       }
+               },
+
+               _refreshState: function(){
+                       // Overrides TextBox._refreshState()
+                       this.validate(this._focused);
+                       this.inherited(arguments);
+               },
+
+               //////////// INITIALIZATION METHODS ///////////////////////////////////////
+
+               constructor: function(){
+                       this.constraints = {};
+               },
+
+               _setConstraintsAttr: function(/*Object*/ constraints){
+                       if(!constraints.locale && this.lang){
+                               constraints.locale = this.lang;
+                       }
+                       this._set("constraints", constraints);
+                       this._computePartialRE();
+               },
+
+               _computePartialRE: function(){
+                       var p = this.regExpGen(this.constraints);
+                       this.regExp = p;
+                       var partialre = "";
+                       // parse the regexp and produce a new regexp that matches valid subsets
+                       // if the regexp is .* then there's no use in matching subsets since everything is valid
+                       if(p != ".*"){ this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,
+                               function (re){
+                                       switch(re.charAt(0)){
+                                               case '{':
+                                               case '+':
+                                               case '?':
+                                               case '*':
+                                               case '^':
+                                               case '$':
+                                               case '|':
+                                               case '(':
+                                                       partialre += re;
+                                                       break;
+                                               case ")":
+                                                       partialre += "|$)";
+                                                       break;
+                                                default:
+                                                       partialre += "(?:"+re+"|$)";
+                                                       break;
+                                       }
+                               }
+                       );}
+                       try{ // this is needed for now since the above regexp parsing needs more test verification
+                               "".search(partialre);
+                       }catch(e){ // should never be here unless the original RE is bad or the parsing is bad
+                               partialre = this.regExp;
+                               console.warn('RegExp error in ' + this.declaredClass + ': ' + this.regExp);
+                       } // should never be here unless the original RE is bad or the parsing is bad
+                       this._partialre = "^(?:" + partialre + ")$";
+               },
+
+               postMixInProperties: function(){
+                       this.inherited(arguments);
+                       this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
+                       if(this.invalidMessage == "$_unset_$"){ this.invalidMessage = this.messages.invalidMessage; }
+                       if(!this.invalidMessage){ this.invalidMessage = this.promptMessage; }
+                       if(this.missingMessage == "$_unset_$"){ this.missingMessage = this.messages.missingMessage; }
+                       if(!this.missingMessage){ this.missingMessage = this.invalidMessage; }
+                       this._setConstraintsAttr(this.constraints); // this needs to happen now (and later) due to codependency on _set*Attr calls attachPoints
+               },
+
+               _setDisabledAttr: function(/*Boolean*/ value){
+                       this.inherited(arguments);      // call FormValueWidget._setDisabledAttr()
+                       this._refreshState();
+               },
+
+               _setRequiredAttr: function(/*Boolean*/ value){
+                       this._set("required", value);
+                       dijit.setWaiState(this.focusNode, "required", value);
+                       this._refreshState();
+               },
+
+               _setMessageAttr: function(/*String*/ message){
+                       this._set("message", message);
+                       this.displayMessage(message);
+               },
+
+               reset:function(){
+                       // Overrides dijit.form.TextBox.reset() by also
+                       // hiding errors about partial matches
+                       this._maskValidSubsetError = true;
+                       this.inherited(arguments);
+               },
+
+               _onBlur: function(){
+                       // the message still exists but for back-compat, and to erase the tooltip
+                       // (if the message is being displayed as a tooltip), call displayMessage('')
+                       this.displayMessage('');
+
+                       this.inherited(arguments);
+               }
+       }
+);
+
+dojo.declare(
+       "dijit.form.MappedTextBox",
+       dijit.form.ValidationTextBox,
+       {
+               // summary:
+               //              A dijit.form.ValidationTextBox subclass which provides a base class for widgets that have
+               //              a visible formatted display value, and a serializable
+               //              value in a hidden input field which is actually sent to the server.
+               // description:
+               //              The visible display may
+               //              be locale-dependent and interactive.  The value sent to the server is stored in a hidden
+               //              input field which uses the `name` attribute declared by the original widget.  That value sent
+               //              to the server is defined by the dijit.form.MappedTextBox.serialize method and is typically
+               //              locale-neutral.
+               // tags:
+               //              protected
+
+               postMixInProperties: function(){
+                       this.inherited(arguments);
+
+                       // we want the name attribute to go to the hidden <input>, not the displayed <input>,
+                       // so override _FormWidget.postMixInProperties() setting of nameAttrSetting
+                       this.nameAttrSetting = "";
+               },
+
+               serialize: function(/*anything*/ val, /*Object?*/ options){
+                       // summary:
+                       //              Overridable function used to convert the get('value') result to a canonical
+                       //              (non-localized) string.  For example, will print dates in ISO format, and
+                       //              numbers the same way as they are represented in javascript.
+                       // tags:
+                       //              protected extension
+                       return val.toString ? val.toString() : ""; // String
+               },
+
+               toString: function(){
+                       // summary:
+                       //              Returns widget as a printable string using the widget's value
+                       // tags:
+                       //              protected
+                       var val = this.filter(this.get('value')); // call filter in case value is nonstring and filter has been customized
+                       return val != null ? (typeof val == "string" ? val : this.serialize(val, this.constraints)) : ""; // String
+               },
+
+               validate: function(){
+                       // Overrides `dijit.form.TextBox.validate`
+                       this.valueNode.value = this.toString();
+                       return this.inherited(arguments);
+               },
+
+               buildRendering: function(){
+                       // Overrides `dijit._Templated.buildRendering`
+
+                       this.inherited(arguments);
+
+                       // Create a hidden <input> node with the serialized value used for submit
+                       // (as opposed to the displayed value).
+                       // Passing in name as markup rather than calling dojo.create() with an attrs argument
+                       // to make dojo.query(input[name=...]) work on IE. (see #8660)
+                       this.valueNode = dojo.place("<input type='hidden'" + (this.name ? " name='" + this.name.replace(/'/g, "&quot;") + "'" : "") + "/>", this.textbox, "after");
+               },
+
+               reset: function(){
+                       // Overrides `dijit.form.ValidationTextBox.reset` to
+                       // reset the hidden textbox value to ''
+                       this.valueNode.value = '';
+                       this.inherited(arguments);
+               }
+       }
+);
+
+/*=====
+       dijit.form.RangeBoundTextBox.__Constraints = function(){
+               // min: Number
+               //              Minimum signed value.  Default is -Infinity
+               // max: Number
+               //              Maximum signed value.  Default is +Infinity
+               this.min = min;
+               this.max = max;
+       }
+=====*/
+
+dojo.declare(
+       "dijit.form.RangeBoundTextBox",
+       dijit.form.MappedTextBox,
+       {
+               // summary:
+               //              Base class for textbox form widgets which defines a range of valid values.
+
+               // rangeMessage: String
+               //              The message to display if value is out-of-range
+               rangeMessage: "",
+
+               /*=====
+               // constraints: dijit.form.RangeBoundTextBox.__Constraints
+               constraints: {},
+               ======*/
+
+               rangeCheck: function(/*Number*/ primitive, /*dijit.form.RangeBoundTextBox.__Constraints*/ constraints){
+                       // summary:
+                       //              Overridable function used to validate the range of the numeric input value.
+                       // tags:
+                       //              protected
+                       return  ("min" in constraints? (this.compare(primitive,constraints.min) >= 0) : true) &&
+                               ("max" in constraints? (this.compare(primitive,constraints.max) <= 0) : true); // Boolean
+               },
+
+               isInRange: function(/*Boolean*/ isFocused){
+                       // summary:
+                       //              Tests if the value is in the min/max range specified in constraints
+                       // tags:
+                       //              protected
+                       return this.rangeCheck(this.get('value'), this.constraints);
+               },
+
+               _isDefinitelyOutOfRange: function(){
+                       // summary:
+                       //              Returns true if the value is out of range and will remain
+                       //              out of range even if the user types more characters
+                       var val = this.get('value');
+                       var isTooLittle = false;
+                       var isTooMuch = false;
+                       if("min" in this.constraints){
+                               var min = this.constraints.min;
+                               min = this.compare(val, ((typeof min == "number") && min >= 0 && val !=0) ? 0 : min);
+                               isTooLittle = (typeof min == "number") && min < 0;
+                       }
+                       if("max" in this.constraints){
+                               var max = this.constraints.max;
+                               max = this.compare(val, ((typeof max != "number") || max > 0) ? max : 0);
+                               isTooMuch = (typeof max == "number") && max > 0;
+                       }
+                       return isTooLittle || isTooMuch;
+               },
+
+               _isValidSubset: function(){
+                       // summary:
+                       //              Overrides `dijit.form.ValidationTextBox._isValidSubset`.
+                       //              Returns true if the input is syntactically valid, and either within
+                       //              range or could be made in range by more typing.
+                       return this.inherited(arguments) && !this._isDefinitelyOutOfRange();
+               },
+
+               isValid: function(/*Boolean*/ isFocused){
+                       // Overrides dijit.form.ValidationTextBox.isValid to check that the value is also in range.
+                       return this.inherited(arguments) &&
+                               ((this._isEmpty(this.textbox.value) && !this.required) || this.isInRange(isFocused)); // Boolean
+               },
+
+               getErrorMessage: function(/*Boolean*/ isFocused){
+                       // Overrides dijit.form.ValidationTextBox.getErrorMessage to print "out of range" message if appropriate
+                       var v = this.get('value');
+                       if(v !== null && v !== '' && v !== undefined && (typeof v != "number" || !isNaN(v)) && !this.isInRange(isFocused)){ // don't check isInRange w/o a real value
+                               return this.rangeMessage; // String
+                       }
+                       return this.inherited(arguments);
+               },
+
+               postMixInProperties: function(){
+                       this.inherited(arguments);
+                       if(!this.rangeMessage){
+                               this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
+                               this.rangeMessage = this.messages.rangeMessage;
+                       }
+               },
+
+               _setConstraintsAttr: function(/*Object*/ constraints){
+                       this.inherited(arguments);
+                       if(this.focusNode){ // not set when called from postMixInProperties
+                               if(this.constraints.min !== undefined){
+                                       dijit.setWaiState(this.focusNode, "valuemin", this.constraints.min);
+                               }else{
+                                       dijit.removeWaiState(this.focusNode, "valuemin");
+                               }
+                               if(this.constraints.max !== undefined){
+                                       dijit.setWaiState(this.focusNode, "valuemax", this.constraints.max);
+                               }else{
+                                       dijit.removeWaiState(this.focusNode, "valuemax");
+                               }
+                       }
+               },
+
+               _setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange){
+                       // summary:
+                       //              Hook so set('value', ...) works.
+
+                       dijit.setWaiState(this.focusNode, "valuenow", value);
+                       this.inherited(arguments);
+               }
+       }
+);
+
 }
index 13576277fc278497438004b4f024730ce2931c5e..98f612cf08199b8989e0ec55b089bd68d208a6ea 100644 (file)
@@ -1,13 +1,35 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.VerticalRule"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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});
+
+
+dojo.declare("dijit.form.VerticalRule", dijit.form.HorizontalRule,
+{
+       // summary:
+       //              Hash marks for the `dijit.form.VerticalSlider`
+
+       templateString: '<div class="dijitRuleContainer dijitRuleContainerV"></div>',
+       _positionPrefix: '<div class="dijitRuleMark dijitRuleMarkV" style="top:',
+
+/*=====
+       // container: String
+       //              This is either "leftDecoration" or "rightDecoration",
+       //              to indicate whether this rule goes to the left or to the right of the slider.
+       //              Note that on RTL system, "leftDecoration" would actually go to the right, and vice-versa.
+       container: "",
+=====*/
+
+       // Overrides HorizontalRule._isHorizontal
+       _isHorizontal: false
+
+});
+
 }
index 9adac9056c8547bfeb5658826a6a86d32d1bb45c..57caba8b5f5eac449b45f68e0c7bd8a8e38ccbea 100644 (file)
@@ -1,15 +1,33 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.VerticalRuleLabels"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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;
-},_isHorizontal:false});
+
+
+dojo.declare("dijit.form.VerticalRuleLabels", dijit.form.HorizontalRuleLabels,
+{
+       // summary:
+       //              Labels for the `dijit.form.VerticalSlider`
+
+       templateString: '<div class="dijitRuleContainer dijitRuleContainerV dijitRuleLabelsContainer dijitRuleLabelsContainerV"></div>',
+
+       _positionPrefix: '<div class="dijitRuleLabelContainer dijitRuleLabelContainerV" style="top:',
+       _labelPrefix: '"><span class="dijitRuleLabel dijitRuleLabelV">',
+
+       _calcPosition: function(pos){
+               // Overrides HorizontalRuleLabel._calcPosition()
+               return 100-pos;
+       },
+
+       // needed to prevent labels from being reversed in RTL mode
+       _isHorizontal: false
+});
+
 }
index 9e98cbe0f974ca0cbea3c57b7c6403c50dcdc20e..f074c7cd1f4598d42c7007f064bac90cdc711c01 100644 (file)
@@ -1,15 +1,42 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form.VerticalSlider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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=\"dijit dijitReset dijitSlider dijitSliderV\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\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\" 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 dijitSliderDecoration dijitSliderDecorationL dijitSliderDecorationV\"></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 dijitSliderMoveableV\" 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 dijitSliderDecoration dijitSliderDecorationR dijitSliderDecorationV\"></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\" 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></table>\n"),_mousePixelCoord:"pageY",_pixelCount:"h",_startingPixelCoord:"y",_startingPixelCount:"t",_handleOffsetCoord:"top",_progressPixelSize:"height",_descending:true,_isReversed:function(){
-return this._descending;
-}});
+
+
+dojo.declare(
+       "dijit.form.VerticalSlider",
+       dijit.form.HorizontalSlider,
+{
+       // summary:
+       //              A form widget that allows one to select a value with a vertically draggable handle
+
+       templateString: dojo.cache("dijit.form", "templates/VerticalSlider.html", "<table class=\"dijit dijitReset dijitSlider dijitSliderV\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\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\" 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\" 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 dijitSliderDecoration dijitSliderDecorationL dijitSliderDecorationV\"></td\n\t\t><td class=\"dijitReset dijitSliderDecorationC\" style=\"height:100%;\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${!nameAttrSetting}\n\t\t\t/><center class=\"dijitReset dijitSliderBarContainerV\" role=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div role=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderRemainingBar dijitSliderRemainingBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"><!--#5629--></div\n\t\t\t\t><div role=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderProgressBar dijitSliderProgressBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable dijitSliderMoveableV\" style=\"vertical-align:top;\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleV\" dojoAttachEvent=\"onmousedown:_onHandleClick\" role=\"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 dijitSliderDecoration dijitSliderDecorationR dijitSliderDecorationV\"></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\" 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\" 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></table>\n"),
+       _mousePixelCoord: "pageY",
+       _pixelCount: "h",
+       _startingPixelCoord: "y",
+       _startingPixelCount: "t",
+       _handleOffsetCoord: "top",
+       _progressPixelSize: "height",
+
+       // _descending: Boolean
+       //              Specifies if the slider values go from high-on-top (true), or low-on-top (false)
+       //              TODO: expose this in 1.2 - the css progress/remaining bar classes need to be reversed
+       _descending: true,
+
+       _isReversed: function(){
+               // summary:
+               //              Overrides HorizontalSlider._isReversed.
+               //              Indicates if values are high on top (with low numbers on the bottom).
+               return this._descending;
+       }
+});
+
 }
index 72898e4067f1f367afcafa4ee2fba3a3924536df..9d5c004c832b7d3e504473393933bc53e44cdb9d 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form._DateTimeTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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");
-new Date("X");
-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;
-},_setConstraintsAttr:function(_9){
-_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);
-}
-this.inherited(arguments,[_9]);
-},_onFocus:function(_b){
-this._open();
-this.inherited(arguments);
-},_setValueAttr:function(_c,_d,_e){
-if(_c!==undefined){
-if(!_c||_c.toString()==dijit.form._DateTimeTextBox.prototype.value.toString()){
-_c=null;
-}
-if(_c instanceof Date&&!(this.dateClassObj instanceof Date)){
-_c=new this.dateClassObj(_c);
-}
-}
-this.inherited(arguments,[_c,_d,_e]);
-if(this._picker){
-if(!_c){
-_c=new this.dateClassObj();
-}
-this._picker.set("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",dir:_f.dir,lang:_f.lang,value:this.get("value")||new this.dateClassObj(),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));
-}});
-}
-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(){
-if(this._picker&&this._opened){
-dijit.placeOnScreenAroundElement(p.domNode.parentNode,this.domNode,{"BL":"TL","TL":"BL"},p.orient?dojo.hitch(p,"orient"):null);
-}
-}),1);
-}
-}
-}
-}
-}});
+dojo.require("dijit._HasDropDown");
+
+
+new Date("X"); // workaround for #11279, new Date("") == NaN
+
+/*=====
+dojo.declare(
+       "dijit.form._DateTimeTextBox.__Constraints",
+       [dijit.form.RangeBoundTextBox.__Constraints, dojo.date.locale.__FormatOptions], {
+       // summary:
+       //              Specifies both the rules on valid/invalid values (first/last date/time allowed),
+       //              and also formatting options for how the date/time is displayed.
+       // example:
+       //              To restrict to dates within 2004, displayed in a long format like "December 25, 2005":
+       //      |               {min:'2004-01-01',max:'2004-12-31', formatLength:'long'}
+});
+=====*/
+
+dojo.declare(
+       "dijit.form._DateTimeTextBox",
+       [ dijit.form.RangeBoundTextBox, dijit._HasDropDown ],
+       {
+               // summary:
+               //              Base class for validating, serializable, range-bound date or time text box.
+
+               templateString: dojo.cache("dijit.form", "templates/DropDownBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\trole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"_buttonNode, _popupStateNode\" role=\"presentation\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&#935; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" role=\"textbox\" aria-haspopup=\"true\"\n\t/></div\n></div>\n"),
+
+               // hasDownArrow: [const] Boolean
+               //              Set this textbox to display a down arrow button, to open the drop down list.
+               hasDownArrow: true,
+
+               // openOnClick: [const] Boolean
+               //              Set to true to open drop down upon clicking anywhere on the textbox.
+               openOnClick: true,
+
+               /*=====
+               // constraints: dijit.form._DateTimeTextBox.__Constraints
+               //              Despite the name, this parameter specifies both constraints on the input
+               //              (including starting/ending dates/times allowed) as well as
+               //              formatting options like whether the date is displayed in long (ex: December 25, 2005)
+               //              or short (ex: 12/25/2005) format.  See `dijit.form._DateTimeTextBox.__Constraints` for details.
+               constraints: {},
+               ======*/
+
+               // Override ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
+               // than a straight regexp to deal with locale  (plus formatting options too?)
+               regExpGen: dojo.date.locale.regexp,
+
+               // datePackage: String
+               //              JavaScript namespace to find calendar routines.  Uses Gregorian calendar routines
+               //              at dojo.date, by default.
+               datePackage: "dojo.date",
+
+               // Override _FormWidget.compare() to work for dates/times
+               compare: function(/*Date*/ val1, /*Date*/ val2){
+                       var isInvalid1 = this._isInvalidDate(val1);
+                       var isInvalid2 = this._isInvalidDate(val2);
+                       return isInvalid1 ? (isInvalid2 ? 0 : -1) : (isInvalid2 ? 1 : dojo.date.compare(val1, val2, this._selector));
+               },
+
+               // flag to _HasDropDown to make drop down Calendar width == <input> width
+               forceWidth: true,
+
+               format: function(/*Date*/ value, /*dojo.date.locale.__FormatOptions*/ constraints){
+                       // summary:
+                       //              Formats the value as a Date, according to specified locale (second argument)
+                       // tags:
+                       //              protected
+                       if(!value){ return ''; }
+                       return this.dateLocaleModule.format(value, constraints);
+               },
+
+               "parse": function(/*String*/ value, /*dojo.date.locale.__FormatOptions*/ constraints){
+                       // summary:
+                       //              Parses as string as a Date, according to constraints
+                       // tags:
+                       //              protected
+
+                       return this.dateLocaleModule.parse(value, constraints) || (this._isEmpty(value) ? null : undefined);     // Date
+               },
+
+               // Overrides ValidationTextBox.serialize() to serialize a date in canonical ISO format.
+               serialize: function(/*anything*/ val, /*Object?*/ options){
+                       if(val.toGregorian){
+                               val = val.toGregorian();
+                       }
+                       return dojo.date.stamp.toISOString(val, options);
+               },
+
+               // dropDownDefaultValue: Date
+               //              The default value to focus in the popupClass widget when the textbox value is empty.
+               dropDownDefaultValue : new Date(),
+
+               // value: Date
+               //              The value of this widget as a JavaScript Date object.  Use get("value") / set("value", val) to manipulate.
+               //              When passed to the parser in markup, must be specified according to `dojo.date.stamp.fromISOString`
+               value: new Date(""),    // value.toString()="NaN"
+
+               _blankValue: null,      // used by filter() when the textbox is blank
+
+               // popupClass: [protected extension] String
+               //              Name of the popup widget class used to select a date/time.
+               //              Subclasses should specify this.
+               popupClass: "", // default is no popup = text only
+
+
+               // _selector: [protected extension] String
+               //              Specifies constraints.selector passed to dojo.date functions, should be either
+               //              "date" or "time".
+               //              Subclass must specify this.
+               _selector: "",
+
+               constructor: function(/*Object*/ args){
+                       var dateClass = args.datePackage ? args.datePackage + ".Date" : "Date";
+                       this.dateClassObj = dojo.getObject(dateClass, false);
+                       this.value = new this.dateClassObj("");
+
+                       this.datePackage = args.datePackage || this.datePackage;
+                       this.dateLocaleModule = dojo.getObject(this.datePackage + ".locale", false);
+                       this.regExpGen = this.dateLocaleModule.regexp;
+                       this._invalidDate = dijit.form._DateTimeTextBox.prototype.value.toString();
+               },
+
+               buildRendering: function(){
+                       this.inherited(arguments);
+
+                       if(!this.hasDownArrow){
+                               this._buttonNode.style.display = "none";
+                       }
+
+                       // If openOnClick is true, we basically just want to treat the whole widget as the
+                       // button.  We need to do that also if the actual drop down button will be hidden,
+                       // so that there's a mouse method for opening the drop down.
+                       if(this.openOnClick || !this.hasDownArrow){
+                               this._buttonNode = this.domNode;
+                               this.baseClass += " dijitComboBoxOpenOnClick";
+                       }
+               },
+
+               _setConstraintsAttr: function(/*Object*/ constraints){
+                       constraints.selector = this._selector;
+                       constraints.fullYear = true; // see #5465 - always format with 4-digit years
+                       var fromISO = dojo.date.stamp.fromISOString;
+                       if(typeof constraints.min == "string"){ constraints.min = fromISO(constraints.min); }
+                       if(typeof constraints.max == "string"){ constraints.max = fromISO(constraints.max); }
+                       this.inherited(arguments);
+               },
+
+               _isInvalidDate: function(/*Date*/ value){
+                       // summary:
+                       //              Runs various tests on the value, checking for invalid conditions
+                       // tags:
+                       //              private
+                       return !value || isNaN(value) || typeof value != "object" || value.toString() == this._invalidDate;
+               },
+
+               _setValueAttr: function(/*Date|String*/ value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){
+                       // summary:
+                       //              Sets the date on this textbox. Note: value can be a JavaScript Date literal or a string to be parsed.
+                       if(value !== undefined){
+                               if(typeof value == "string"){
+                                       value = dojo.date.stamp.fromISOString(value);
+                               }
+                               if(this._isInvalidDate(value)){
+                                       value = null;
+                               }
+                               if(value instanceof Date && !(this.dateClassObj instanceof Date)){
+                                       value = new this.dateClassObj(value);
+                               }
+                       }
+                       this.inherited(arguments);
+                       if(this.dropDown){
+                               this.dropDown.set('value', value, false);
+                       }
+               },
+
+               _set: function(attr, value){
+                       // Avoid spurious watch() notifications when value is changed to new Date object w/the same value
+                       if(attr == "value" && this.value instanceof Date && this.compare(value, this.value) == 0){
+                               return;
+                       }
+                       this.inherited(arguments);
+               },
+
+               _setDropDownDefaultValueAttr: function(/*Date*/ val){
+                       if(this._isInvalidDate(val)){
+                               // convert null setting into today's date, since there needs to be *some* default at all times.
+                                val = new this.dateClassObj()
+                                               }
+                       this.dropDownDefaultValue = val;
+               },
+
+               openDropDown: function(/*Function*/ callback){
+                       // rebuild drop down every time, so that constraints get copied (#6002)
+                       if(this.dropDown){
+                               this.dropDown.destroy();
+                       }
+                       var PopupProto = dojo.getObject(this.popupClass, false),
+                               textBox = this,
+                               value = this.get("value");
+                       this.dropDown = new PopupProto({
+                               onChange: function(value){
+                                               // this will cause InlineEditBox and other handlers to do stuff so make sure it's last
+                                               dijit.form._DateTimeTextBox.superclass._setValueAttr.call(textBox, value, true);
+                                       },
+                                       id: this.id + "_popup",
+                                       dir: textBox.dir,
+                                       lang: textBox.lang,
+                               value: value,
+                               currentFocus: !this._isInvalidDate(value) ? value : this.dropDownDefaultValue,
+                                       constraints: textBox.constraints,
+                               filterString: textBox.filterString, // for TimeTextBox, to filter times shown
+
+                                       datePackage: textBox.datePackage,
+
+                                       isDisabledDate: function(/*Date*/ date){
+                                               // summary:
+                                               //      disables dates outside of the min/max of the _DateTimeTextBox
+                                               return !textBox.rangeCheck(date, textBox.constraints);
+                                       }
+                               });
+
+                       this.inherited(arguments);
+               },
+
+               _getDisplayedValueAttr: function(){
+                       return this.textbox.value;
+               },
+
+               _setDisplayedValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange){
+                       this._setValueAttr(this.parse(value, this.constraints), priorityChange, value);
+               }
+       }
+);
+
 }
index 4c52ed9e2d92a58823cd54861d9fb29e2678b72d..e42702d31ff9c1407e73ff006b2195552d88b0a1 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form._FormMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form._FormMixin"] = true;
 dojo.provide("dijit.form._FormMixin");
 dojo.require("dojo.window");
-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){
-dojo.window.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 set('value', val) instead.","","2.0");
-return this.set("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.set("value",dojo.indexOf(_d,w.value)!=-1);
-});
-}else{
-if(_c[0].multiple){
-_c[0].set("value",_d);
-}else{
-dojo.forEach(_c,function(w,i){
-w.set("value",_d[i]);
-});
-}
-}
-}
-},getValues:function(){
-dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.","","2.0");
-return this.get("value");
-},_getValueAttr:function(){
-var _e={};
-dojo.forEach(this.getDescendants(),function(_f){
-var _10=_f.name;
-if(!_10||_f.disabled){
-return;
-}
-var _11=_f.get("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.get("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();
-}});
+
+
+dojo.declare("dijit.form._FormMixin", null, {
+       // summary:
+       //              Mixin for containers of form widgets (i.e. widgets that represent a single value
+       //              and can be children of a <form> node or dijit.form.Form widget)
+       // description:
+       //              Can extract all the form widgets
+       //              values and combine them into a single javascript object, or alternately
+       //              take such an object and set the values for all the contained
+       //              form widgets
+
+/*=====
+       // value: Object
+       //              Name/value hash for each child widget with a name and value.
+       //              Child widgets without names are not part of the hash.
+       //
+       //              If there are multiple child widgets w/the same name, value is an array,
+       //              unless they are radio buttons in which case value is a scalar (since only
+       //              one radio button can be checked at a time).
+       //
+       //              If a child widget's name is a dot separated list (like a.b.c.d), it's a nested structure.
+       //
+       //              Example:
+       //      |       { name: "John Smith", interests: ["sports", "movies"] }
+=====*/
+
+       // state: [readonly] String
+       //              Will be "Error" if one or more of the child widgets has an invalid value,
+       //              "Incomplete" if not all of the required child widgets are filled in.  Otherwise, "",
+       //              which indicates that the form is ready to be submitted.
+       state: "",
+
+       //      TODO:
+       //      * Repeater
+       //      * better handling for arrays.  Often form elements have names with [] like
+       //      * people[3].sex (for a list of people [{name: Bill, sex: M}, ...])
+       //
+       //
+
+               reset: function(){
+                       dojo.forEach(this.getDescendants(), function(widget){
+                               if(widget.reset){
+                                       widget.reset();
+                               }
+                       });
+               },
+
+               validate: function(){
+                       // summary:
+                       //              returns if the form is valid - same as isValid - but
+                       //              provides a few additional (ui-specific) features.
+                       //              1 - it will highlight any sub-widgets that are not
+                       //                      valid
+                       //              2 - it will call focus() on the first invalid
+                       //                      sub-widget
+                       var didFocus = false;
+                       return dojo.every(dojo.map(this.getDescendants(), function(widget){
+                               // Need to set this so that "required" widgets get their
+                               // state set.
+                               widget._hasBeenBlurred = true;
+                               var valid = widget.disabled || !widget.validate || widget.validate();
+                               if(!valid && !didFocus){
+                                       // Set focus of the first non-valid widget
+                                       dojo.window.scrollIntoView(widget.containerNode || widget.domNode);
+                                       widget.focus();
+                                       didFocus = true;
+                               }
+                               return valid;
+                       }), function(item){ return item; });
+               },
+
+               setValues: function(val){
+                       dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.", "", "2.0");
+                       return this.set('value', val);
+               },
+               _setValueAttr: function(/*Object*/ obj){
+                       // summary:
+                       //              Fill in form values from according to an Object (in the format returned by get('value'))
+
+                       // generate map from name --> [list of widgets with that name]
+                       var map = { };
+                       dojo.forEach(this.getDescendants(), function(widget){
+                               if(!widget.name){ return; }
+                               var entry = map[widget.name] || (map[widget.name] = [] );
+                               entry.push(widget);
+                       });
+
+                       for(var name in map){
+                               if(!map.hasOwnProperty(name)){
+                                       continue;
+                               }
+                               var widgets = map[name],                                                // array of widgets w/this name
+                                       values = dojo.getObject(name, false, obj);      // list of values for those widgets
+
+                               if(values === undefined){
+                                       continue;
+                               }
+                               if(!dojo.isArray(values)){
+                                       values = [ values ];
+                               }
+                               if(typeof widgets[0].checked == 'boolean'){
+                                       // for checkbox/radio, values is a list of which widgets should be checked
+                                       dojo.forEach(widgets, function(w, i){
+                                               w.set('value', dojo.indexOf(values, w.value) != -1);
+                                       });
+                               }else if(widgets[0].multiple){
+                                       // it takes an array (e.g. multi-select)
+                                       widgets[0].set('value', values);
+                               }else{
+                                       // otherwise, values is a list of values to be assigned sequentially to each widget
+                                       dojo.forEach(widgets, function(w, i){
+                                               w.set('value', values[i]);
+                                       });
+                               }
+                       }
+
+                       /***
+                        *      TODO: code for plain input boxes (this shouldn't run for inputs that are part of widgets)
+
+                       dojo.forEach(this.containerNode.elements, function(element){
+                               if(element.name == ''){return}; // like "continue"
+                               var namePath = element.name.split(".");
+                               var myObj=obj;
+                               var name=namePath[namePath.length-1];
+                               for(var j=1,len2=namePath.length;j<len2;++j){
+                                       var p=namePath[j - 1];
+                                       // repeater support block
+                                       var nameA=p.split("[");
+                                       if(nameA.length > 1){
+                                               if(typeof(myObj[nameA[0]]) == "undefined"){
+                                                       myObj[nameA[0]]=[ ];
+                                               } // if
+
+                                               nameIndex=parseInt(nameA[1]);
+                                               if(typeof(myObj[nameA[0]][nameIndex]) == "undefined"){
+                                                       myObj[nameA[0]][nameIndex] = { };
+                                               }
+                                               myObj=myObj[nameA[0]][nameIndex];
+                                               continue;
+                                       } // repeater support ends
+
+                                       if(typeof(myObj[p]) == "undefined"){
+                                               myObj=undefined;
+                                               break;
+                                       };
+                                       myObj=myObj[p];
+                               }
+
+                               if(typeof(myObj) == "undefined"){
+                                       return;         // like "continue"
+                               }
+                               if(typeof(myObj[name]) == "undefined" && this.ignoreNullValues){
+                                       return;         // like "continue"
+                               }
+
+                               // TODO: widget values (just call set('value', ...) on the widget)
+
+                               // TODO: maybe should call dojo.getNodeProp() instead
+                               switch(element.type){
+                                       case "checkbox":
+                                               element.checked = (name in myObj) &&
+                                                       dojo.some(myObj[name], function(val){ return val == element.value; });
+                                               break;
+                                       case "radio":
+                                               element.checked = (name in myObj) && myObj[name] == element.value;
+                                               break;
+                                       case "select-multiple":
+                                               element.selectedIndex=-1;
+                                               dojo.forEach(element.options, function(option){
+                                                       option.selected = dojo.some(myObj[name], function(val){ return option.value == val; });
+                                               });
+                                               break;
+                                       case "select-one":
+                                               element.selectedIndex="0";
+                                               dojo.forEach(element.options, function(option){
+                                                       option.selected = option.value == myObj[name];
+                                               });
+                                               break;
+                                       case "hidden":
+                                       case "text":
+                                       case "textarea":
+                                       case "password":
+                                               element.value = myObj[name] || "";
+                                               break;
+                               }
+                       });
+                       */
+                       
+                       // Note: no need to call this._set("value", ...) as the child updates will trigger onChange events
+                       // which I am monitoring.
+               },
+
+               getValues: function(){
+                       dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.", "", "2.0");
+                       return this.get('value');
+               },
+               _getValueAttr: function(){
+                       // summary:
+                       //              Returns Object representing form values.   See description of `value` for details.
+                       // description:
+
+                       // The value is updated into this.value every time a child has an onChange event,
+                       // so in the common case this function could just return this.value.   However,
+                       // that wouldn't work when:
+                       //
+                       // 1. User presses return key to submit a form.  That doesn't fire an onchange event,
+                       // and even if it did it would come too late due to the setTimout(..., 0) in _handleOnChange()
+                       //
+                       // 2. app for some reason calls this.get("value") while the user is typing into a
+                       // form field.   Not sure if that case needs to be supported or not.
+
+                       // get widget values
+                       var obj = { };
+                       dojo.forEach(this.getDescendants(), function(widget){
+                               var name = widget.name;
+                               if(!name || widget.disabled){ return; }
+
+                               // Single value widget (checkbox, radio, or plain <input> type widget)
+                               var value = widget.get('value');
+
+                               // Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays
+                               if(typeof widget.checked == 'boolean'){
+                                       if(/Radio/.test(widget.declaredClass)){
+                                               // radio button
+                                               if(value !== false){
+                                                       dojo.setObject(name, value, obj);
+                                               }else{
+                                                       // give radio widgets a default of null
+                                                       value = dojo.getObject(name, false, obj);
+                                                       if(value === undefined){
+                                                               dojo.setObject(name, null, obj);
+                                                       }
+                                               }
+                                       }else{
+                                               // checkbox/toggle button
+                                               var ary=dojo.getObject(name, false, obj);
+                                               if(!ary){
+                                                       ary=[];
+                                                       dojo.setObject(name, ary, obj);
+                                               }
+                                               if(value !== false){
+                                                       ary.push(value);
+                                               }
+                                       }
+                               }else{
+                                       var prev=dojo.getObject(name, false, obj);
+                                       if(typeof prev != "undefined"){
+                                               if(dojo.isArray(prev)){
+                                                       prev.push(value);
+                                               }else{
+                                                       dojo.setObject(name, [prev, value], obj);
+                                               }
+                                       }else{
+                                               // unique name
+                                               dojo.setObject(name, value, obj);
+                                       }
+                               }
+                       });
+
+                       /***
+                        * code for plain input boxes (see also dojo.formToObject, can we use that instead of this code?
+                        * but it doesn't understand [] notation, presumably)
+                       var obj = { };
+                       dojo.forEach(this.containerNode.elements, function(elm){
+                               if(!elm.name)   {
+                                       return;         // like "continue"
+                               }
+                               var namePath = elm.name.split(".");
+                               var myObj=obj;
+                               var name=namePath[namePath.length-1];
+                               for(var j=1,len2=namePath.length;j<len2;++j){
+                                       var nameIndex = null;
+                                       var p=namePath[j - 1];
+                                       var nameA=p.split("[");
+                                       if(nameA.length > 1){
+                                               if(typeof(myObj[nameA[0]]) == "undefined"){
+                                                       myObj[nameA[0]]=[ ];
+                                               } // if
+                                               nameIndex=parseInt(nameA[1]);
+                                               if(typeof(myObj[nameA[0]][nameIndex]) == "undefined"){
+                                                       myObj[nameA[0]][nameIndex] = { };
+                                               }
+                                       } else if(typeof(myObj[nameA[0]]) == "undefined"){
+                                               myObj[nameA[0]] = { }
+                                       } // if
+
+                                       if(nameA.length == 1){
+                                               myObj=myObj[nameA[0]];
+                                       } else{
+                                               myObj=myObj[nameA[0]][nameIndex];
+                                       } // if
+                               } // for
+
+                               if((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type == "radio" && elm.checked)){
+                                       if(name == name.split("[")[0]){
+                                               myObj[name]=elm.value;
+                                       } else{
+                                               // can not set value when there is no name
+                                       }
+                               } else if(elm.type == "checkbox" && elm.checked){
+                                       if(typeof(myObj[name]) == 'undefined'){
+                                               myObj[name]=[ ];
+                                       }
+                                       myObj[name].push(elm.value);
+                               } else if(elm.type == "select-multiple"){
+                                       if(typeof(myObj[name]) == 'undefined'){
+                                               myObj[name]=[ ];
+                                       }
+                                       for(var jdx=0,len3=elm.options.length; jdx<len3; ++jdx){
+                                               if(elm.options[jdx].selected){
+                                                       myObj[name].push(elm.options[jdx].value);
+                                               }
+                                       }
+                               } // if
+                               name=undefined;
+                       }); // forEach
+                       ***/
+                       return obj;
+               },
+
+               isValid: function(){
+                       // summary:
+                       //              Returns true if all of the widgets are valid.
+                       //              Deprecated, will be removed in 2.0.  Use get("state") instead.
+
+                       return this.state == "";
+               },
+
+               onValidStateChange: function(isValid){
+                       // summary:
+                       //              Stub function to connect to if you want to do something
+                       //              (like disable/enable a submit button) when the valid
+                       //              state changes on the form as a whole.
+                       //
+                       //              Deprecated.  Will be removed in 2.0.  Use watch("state", ...) instead.
+               },
+
+               _getState: function(){
+                       // summary:
+                       //              Compute what this.state should be based on state of children
+                       var states = dojo.map(this._descendants, function(w){
+                               return w.get("state") || "";
+                       });
+
+                       return dojo.indexOf(states, "Error") >= 0 ? "Error" :
+                               dojo.indexOf(states, "Incomplete") >= 0 ? "Incomplete" : "";
+               },
+
+               disconnectChildren: function(){
+                       // summary:
+                       //              Remove connections to monitor changes to children's value, error state, and disabled state,
+                       //              in order to update Form.value and Form.state.
+                       dojo.forEach(this._childConnections || [], dojo.hitch(this, "disconnect"));
+                       dojo.forEach(this._childWatches || [], function(w){ w.unwatch(); });
+               },
+
+               connectChildren: function(/*Boolean*/ inStartup){
+                       // summary:
+                       //              Setup connections to monitor changes to children's value, error state, and disabled state,
+                       //              in order to update Form.value and Form.state.
+                       //
+                       //              You can call this function directly, ex. in the event that you
+                       //              programmatically add a widget to the form *after* the form has been
+                       //              initialized.
+
+                       var _this = this;
+
+                       // Remove old connections, if any
+                       this.disconnectChildren();
+
+                       this._descendants = this.getDescendants();
+
+                       // (Re)set this.value and this.state.   Send watch() notifications but not on startup.
+                       var set = inStartup ? function(name, val){ _this[name] = val; } : dojo.hitch(this, "_set");
+                       set("value", this.get("value"));
+                       set("state", this._getState());
+
+                       // Monitor changes to error state and disabled state in order to update
+                       // Form.state
+                       var conns = (this._childConnections = []),
+                               watches = (this._childWatches = []);
+                       dojo.forEach(dojo.filter(this._descendants,
+                               function(item){ return item.validate; }
+                       ),
+                       function(widget){
+                               // We are interested in whenever the widget changes validity state - or
+                               // whenever the disabled attribute on that widget is changed.
+                               dojo.forEach(["state", "disabled"], function(attr){
+                                       watches.push(widget.watch(attr, function(attr, oldVal, newVal){
+                                               _this.set("state", _this._getState());
+                                       }));
+                               });
+                       });
+
+                       // And monitor calls to child.onChange so we can update this.value
+                       var onChange = function(){
+                               // summary:
+                               //              Called when child's value or disabled state changes
+                               
+                               // Use setTimeout() to collapse value changes in multiple children into a single
+                               // update to my value.   Multiple updates will occur on:
+                               //      1. Form.set()
+                               //      2. Form.reset()
+                               //      3. user selecting a radio button (which will de-select another radio button,
+                               //               causing two onChange events)
+                               if(_this._onChangeDelayTimer){
+                                       clearTimeout(_this._onChangeDelayTimer);
+                               }
+                               _this._onChangeDelayTimer = setTimeout(function(){
+                                       delete _this._onChangeDelayTimer;
+                                       _this._set("value", _this.get("value"));
+                               }, 10);
+                       };
+                       dojo.forEach(
+                               dojo.filter(this._descendants, function(item){ return item.onChange; } ),
+                               function(widget){
+                                       // When a child widget's value changes,
+                                       // the efficient thing to do is to just update that one attribute in this.value,
+                                       // but that gets a little complicated when a checkbox is checked/unchecked
+                                       // since this.value["checkboxName"] contains an array of all the checkboxes w/the same name.
+                                       // Doing simple thing for now.
+                                       conns.push(_this.connect(widget, "onChange", onChange));
+
+                                       // Disabling/enabling a child widget should remove it's value from this.value.
+                                       // Again, this code could be more efficient, doing simple thing for now.
+                                       watches.push(widget.watch("disabled", onChange));
+                               }
+                       );
+               },
+
+               startup: function(){
+                       this.inherited(arguments);
+
+                       // Initialize value and valid/invalid state tracking.  Needs to be done in startup()
+                       // so that children are initialized.
+                       this.connectChildren(true);
+
+                       // Make state change call onValidStateChange(), will be removed in 2.0
+                       this.watch("state", function(attr, oldVal, newVal){ this.onValidStateChange(newVal == ""); });
+               },
+
+               destroy: function(){
+                       this.disconnectChildren();
+                       this.inherited(arguments);
+               }
+
+       });
+
 }
index 5905c0aefcd60e00cd21ce72832a50e51738aab8..fbbf7226bb61ded557e8a81436c06fce1454c4a6 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.form._FormSelectWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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.set("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.get("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);
+
+
+/*=====
+dijit.form.__SelectOption = function(){
+       // value: String
+       //              The value of the option.  Setting to empty (or missing) will
+       //              place a separator at that location
+       // label: String
+       //              The label for our option.  It can contain html tags.
+       // selected: Boolean
+       //              Whether or not we are a selected option
+       // disabled: Boolean
+       //              Whether or not this specific option is disabled
+       this.value = value;
+       this.label = label;
+       this.selected = selected;
+       this.disabled = disabled;
+}
+=====*/
+
+dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
+       // summary:
+       //              Extends _FormValueWidget in order to provide "select-specific"
+       //              values - i.e., those values that are unique to <select> elements.
+       //              This also provides the mechanism for reading the elements from
+       //              a store, if desired.
+
+       // multiple: [const] Boolean
+       //              Whether or not we are multi-valued
+       multiple: false,
+
+       // options: dijit.form.__SelectOption[]
+       //              The set of options for our select item.  Roughly corresponds to
+       //              the html <option> tag.
+       options: null,
+
+       // store: dojo.data.api.Identity
+       //              A store which, at the very least impelements dojo.data.api.Identity
+       //              to use for getting our list of options - rather than reading them
+       //              from the <option> html tags.
+       store: null,
+
+       // query: object
+       //              A query to use when fetching items from our store
+       query: null,
+
+       // queryOptions: object
+       //              Query options to use when fetching from the store
+       queryOptions: null,
+
+       // onFetch: Function
+       //              A callback to do with an onFetch - but before any items are actually
+       //              iterated over (i.e. to filter even futher what you want to add)
+       onFetch: null,
+
+       // sortByLabel: Boolean
+       //              Flag to sort the options returned from a store by the label of
+       //              the store.
+       sortByLabel: true,
+
+
+       // loadChildrenOnOpen: Boolean
+       //              By default loadChildren is called when the items are fetched from the
+       //              store.  This property allows delaying loadChildren (and the creation
+       //              of the options/menuitems) until the user clicks the button to open the
+       //              dropdown.
+       loadChildrenOnOpen: false,
+
+       getOptions: function(/*anything*/ valueOrIdx){
+               // summary:
+               //              Returns a given option (or options).
+               // valueOrIdx:
+               //              If passed in as a string, that string is used to look up the option
+               //              in the array of options - based on the value property.
+               //              (See dijit.form.__SelectOption).
+               //
+               //              If passed in a number, then the option with the given index (0-based)
+               //              within this select will be returned.
+               //
+               //              If passed in a dijit.form.__SelectOption, the same option will be
+               //              returned if and only if it exists within this select.
+               //
+               //              If passed an array, then an array will be returned with each element
+               //              in the array being looked up.
+               //
+               //              If not passed a value, then all options will be returned
+               //
+               // returns:
+               //              The option corresponding with the given value or index.  null
+               //              is returned if any of the following are true:
+               //                      - A string value is passed in which doesn't exist
+               //                      - An index is passed in which is outside the bounds of the array of options
+               //                      - A dijit.form.__SelectOption is passed in which is not a part of the select
+
+               // NOTE: the compare for passing in a dijit.form.__SelectOption checks
+               //              if the value property matches - NOT if the exact option exists
+               // NOTE: if passing in an array, null elements will be placed in the returned
+               //              array when a value is not found.
+               var lookupValue = valueOrIdx, opts = this.options || [], l = opts.length;
+
+               if(lookupValue === undefined){
+                       return opts; // dijit.form.__SelectOption[]
+               }
+               if(dojo.isArray(lookupValue)){
+                       return dojo.map(lookupValue, "return this.getOptions(item);", this); // dijit.form.__SelectOption[]
+               }
+               if(dojo.isObject(valueOrIdx)){
+                       // We were passed an option - so see if it's in our array (directly),
+                       // and if it's not, try and find it by value.
+                       if(!dojo.some(this.options, function(o, idx){
+                               if(o === lookupValue ||
+                                       (o.value && o.value === lookupValue.value)){
+                                       lookupValue = idx;
+                                       return true;
+                               }
+                               return false;
+                       })){
+                               lookupValue = -1;
+                       }
+               }
+               if(typeof lookupValue == "string"){
+                       for(var i=0; i<l; i++){
+                               if(opts[i].value === lookupValue){
+                                       lookupValue = i;
+                                       break;
+                               }
+                       }
+               }
+               if(typeof lookupValue == "number" && lookupValue >= 0 && lookupValue < l){
+                       return this.options[lookupValue] // dijit.form.__SelectOption
+               }
+               return null; // null
+       },
+
+       addOption: function(/*dijit.form.__SelectOption|dijit.form.__SelectOption[]*/ option){
+               // summary:
+               //              Adds an option or options to the end of the select.  If value
+               //              of the option is empty or missing, a separator is created instead.
+               //              Passing in an array of options will yield slightly better performance
+               //              since the children are only loaded once.
+               if(!dojo.isArray(option)){ option = [option]; }
+               dojo.forEach(option, function(i){
+                       if(i && dojo.isObject(i)){
+                               this.options.push(i);
+                       }
+               }, this);
+               this._loadChildren();
+       },
+
+       removeOption: function(/*String|dijit.form.__SelectOption|Number|Array*/ valueOrIdx){
+               // summary:
+               //              Removes the given option or options.  You can remove by string
+               //              (in which case the value is removed), number (in which case the
+               //              index in the options array is removed), or select option (in
+               //              which case, the select option with a matching value is removed).
+               //              You can also pass in an array of those values for a slightly
+               //              better performance since the children are only loaded once.
+               if(!dojo.isArray(valueOrIdx)){ valueOrIdx = [valueOrIdx]; }
+               var oldOpts = this.getOptions(valueOrIdx);
+               dojo.forEach(oldOpts, function(i){
+                       // We can get null back in our array - if our option was not found.  In
+                       // that case, we don't want to blow up...
+                       if(i){
+                               this.options = dojo.filter(this.options, function(node, idx){
+                                       return (node.value !== i.value || node.label !== i.label);
+                               });
+                               this._removeOptionItem(i);
+                       }
+               }, this);
+               this._loadChildren();
+       },
+
+       updateOption: function(/*dijit.form.__SelectOption|dijit.form.__SelectOption[]*/ newOption){
+               // summary:
+               //              Updates the values of the given option.  The option to update
+               //              is matched based on the value of the entered option.  Passing
+               //              in an array of new options will yeild better performance since
+               //              the children will only be loaded once.
+               if(!dojo.isArray(newOption)){ newOption = [newOption]; }
+               dojo.forEach(newOption, function(i){
+                       var oldOpt = this.getOptions(i), k;
+                       if(oldOpt){
+                               for(k in i){ oldOpt[k] = i[k]; }
+                       }
+               }, this);
+               this._loadChildren();
+       },
+
+       setStore: function(/*dojo.data.api.Identity*/ store,
+                                               /*anything?*/ selectedValue,
+                                               /*Object?*/ fetchArgs){
+               // summary:
+               //              Sets the store you would like to use with this select widget.
+               //              The selected value is the value of the new store to set.  This
+               //              function returns the original store, in case you want to reuse
+               //              it or something.
+               // store: dojo.data.api.Identity
+               //              The store you would like to use - it MUST implement Identity,
+               //              and MAY implement Notification.
+               // selectedValue: anything?
+               //              The value that this widget should set itself to *after* the store
+               //              has been loaded
+               // fetchArgs: Object?
+               //              The arguments that will be passed to the store's fetch() function
+               var oStore = this.store;
+               fetchArgs = fetchArgs || {};
+               if(oStore !== store){
+                       // Our store has changed, so update our notifications
+                       dojo.forEach(this._notifyConnections || [], dojo.disconnect);
+                       delete this._notifyConnections;
+                       if(store && store.getFeatures()["dojo.data.api.Notification"]){
+                               this._notifyConnections = [
+                                       dojo.connect(store, "onNew", this, "_onNewItem"),
+                                       dojo.connect(store, "onDelete", this, "_onDeleteItem"),
+                                       dojo.connect(store, "onSet", this, "_onSetItem")
+                               ];
+                       }
+                       this._set("store", store);
+               }
+
+               // Turn off change notifications while we make all these changes
+               this._onChangeActive = false;
+
+               // Remove existing options (if there are any)
+               if(this.options && this.options.length){
+                       this.removeOption(this.options);
+               }
+
+               // Add our new options
+               if(store){
+                       this._loadingStore = true;
+                       store.fetch(dojo.delegate(fetchArgs, {
+                               onComplete: function(items, opts){
+                                       if(this.sortByLabel && !fetchArgs.sort && items.length){
+                                               items.sort(dojo.data.util.sorter.createSortFunction([{
+                                                       attribute: store.getLabelAttributes(items[0])[0]
+                                               }], store));
+                                       }
+       
+                                       if(fetchArgs.onFetch){
+                                                       items = fetchArgs.onFetch.call(this, items, opts);
+                                       }
+                                       // TODO: Add these guys as a batch, instead of separately
+                                       dojo.forEach(items, function(i){
+                                               this._addOptionForItem(i);
+                                       }, this);
+       
+                                       // Set our value (which might be undefined), and then tweak
+                                       // it to send a change event with the real value
+                                       this._loadingStore = false;
+                                               this.set("value", "_pendingValue" in this ? this._pendingValue : selectedValue);
+                                       delete this._pendingValue;
+       
+                                       if(!this.loadChildrenOnOpen){
+                                               this._loadChildren();
+                                       }else{
+                                               this._pseudoLoadChildren(items);
+                                       }
+                                       this._fetchedWith = opts;
+                                       this._lastValueReported = this.multiple ? [] : null;
+                                       this._onChangeActive = true;
+                                       this.onSetStore();
+                                       this._handleOnChange(this.value);
+                               },
+                               scope: this
+                       }));
+               }else{
+                       delete this._fetchedWith;
+               }
+               return oStore;  // dojo.data.api.Identity
+       },
+
+       // TODO: implement set() and watch() for store and query, although not sure how to handle
+       // setting them individually rather than together (as in setStore() above)
+
+       _setValueAttr: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){
+               // summary:
+               //              set the value of the widget.
+               //              If a string is passed, then we set our value from looking it up.
+               if(this._loadingStore){
+                       // Our store is loading - so save our value, and we'll set it when
+                       // we're done
+                       this._pendingValue = newValue;
+                       return;
+               }
+               var opts = this.getOptions() || [];
+               if(!dojo.isArray(newValue)){
+                       newValue = [newValue];
+               }
+               dojo.forEach(newValue, function(i, idx){
+                       if(!dojo.isObject(i)){
+                               i = i + "";
+                       }
+                       if(typeof i === "string"){
+                               newValue[idx] = dojo.filter(opts, function(node){
+                                       return node.value === i;
+                               })[0] || {value: "", label: ""};
+                       }
+               }, this);
+
+               // Make sure some sane default is set
+               newValue = dojo.filter(newValue, function(i){ return i && i.value; });
+               if(!this.multiple && (!newValue[0] || !newValue[0].value) && opts.length){
+                       newValue[0] = opts[0];
+               }
+               dojo.forEach(opts, function(i){
+                       i.selected = dojo.some(newValue, function(v){ return v.value === i.value; });
+               });
+               var val = dojo.map(newValue, function(i){ return i.value; }),
+                       disp = dojo.map(newValue, function(i){ return i.label; });
+
+               this._set("value", this.multiple ? val : val[0]);
+               this._setDisplay(this.multiple ? disp : disp[0]);
+               this._updateSelection();
+               this._handleOnChange(this.value, priorityChange);
+       },
+
+       _getDisplayedValueAttr: function(){
+               // summary:
+               //              returns the displayed value of the widget
+               var val = this.get("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];
+       },
+
+       _loadChildren: function(){
+               // summary:
+               //              Loads the children represented by this widget's options.
+               //              reset the menu to make it populatable on the next click
+               if(this._loadingStore){ return; }
+               dojo.forEach(this._getChildren(), function(child){
+                       child.destroyRecursive();
+               });
+               // Add each menu item
+               dojo.forEach(this.options, this._addOptionItem, this);
+
+               // Update states
+               this._updateSelection();
+       },
+
+       _updateSelection: function(){
+               // summary:
+               //              Sets the "selected" class on the item for styling purposes
+               this._set("value", this._getValueFromOpts());
+               var val = this.value;
+               if(!dojo.isArray(val)){
+                       val = [val];
+               }
+               if(val && val[0]){
+                       dojo.forEach(this._getChildren(), function(child){
+                               var isSelected = dojo.some(val, function(v){
+                                       return child.option && (v === child.option.value);
+                               });
+                               dojo.toggleClass(child.domNode, this.baseClass + "SelectedOption", isSelected);
+                               dijit.setWaiState(child.domNode, "selected", isSelected);
+                       }, this);
+               }
+       },
+
+       _getValueFromOpts: function(){
+               // summary:
+               //              Returns the value of the widget by reading the options for
+               //              the selected flag
+               var opts = this.getOptions() || [];
+               if(!this.multiple && opts.length){
+                       // Mirror what a select does - choose the first one
+                       var opt = dojo.filter(opts, function(i){
+                               return i.selected;
+                       })[0];
+                       if(opt && opt.value){
+                               return opt.value
+                       }else{
+                               opts[0].selected = true;
+                               return opts[0].value;
+                       }
+               }else if(this.multiple){
+                       // Set value to be the sum of all selected
+                       return dojo.map(dojo.filter(opts, function(i){
+                               return i.selected;
+                       }), function(i){
+                               return i.value;
+                       }) || [];
+               }
+               return "";
+       },
+
+       // Internal functions to call when we have store notifications come in
+       _onNewItem: function(/*item*/ item, /*Object?*/ parentInfo){
+               if(!parentInfo || !parentInfo.parent){
+                       // Only add it if we are top-level
+                       this._addOptionForItem(item);
+               }
+       },
+       _onDeleteItem: function(/*item*/ item){
+               var store = this.store;
+               this.removeOption(store.getIdentity(item));
+       },
+       _onSetItem: function(/*item*/ item){
+               this.updateOption(this._getOptionObjForItem(item));
+       },
+
+       _getOptionObjForItem: function(item){
+               // summary:
+               //              Returns an option object based off the given item.  The "value"
+               //              of the option item will be the identity of the item, the "label"
+               //              of the option will be the label of the item.  If the item contains
+               //              children, the children value of the item will be set
+               var store = this.store, label = store.getLabel(item),
+                       value = (label ? store.getIdentity(item) : null);
+               return {value: value, label: label, item:item}; // dijit.form.__SelectOption
+       },
+
+       _addOptionForItem: function(/*item*/ item){
+               // summary:
+               //              Creates (and adds) the option for the given item
+               var store = this.store;
+               if(!store.isItemLoaded(item)){
+                       // We are not loaded - so let's load it and add later
+                       store.loadItem({item: item, onComplete: function(i){
+                               this._addOptionForItem(item);
+                       },
+                       scope: this});
+                       return;
+               }
+               var newOpt = this._getOptionObjForItem(item);
+               this.addOption(newOpt);
+       },
+
+       constructor: function(/*Object*/ keywordArgs){
+               // summary:
+               //              Saves off our value, if we have an initial one set so we
+               //              can use it if we have a store as well (see startup())
+               this._oValue = (keywordArgs || {}).value || null;
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+               dojo.setSelectable(this.focusNode, false);
+       },
+
+       _fillContent: function(){
+               // summary:
+               //              Loads our options and sets up our dropdown correctly.  We
+               //              don't want any content, so we don't call any inherit chain
+               //              function.
+               var opts = this.options;
+               if(!opts){
+                       opts = this.options = this.srcNodeRef ? dojo.query(">",
+                                               this.srcNodeRef).map(function(node){
+                                                       if(node.getAttribute("type") === "separator"){
+                                                               return { value: "", label: "", selected: false, disabled: false };
+                                                       }
+                                                       return {
+                                                               value: (node.getAttribute("data-" + dojo._scopeName + "-value") || node.getAttribute("value")),
+                                                                               label: String(node.innerHTML),
+                                                               // FIXME: disabled and selected are not valid on complex markup children (which is why we're
+                                                               // looking for data-dojo-value above.  perhaps we should data-dojo-props="" this whole thing?)
+                                                               // decide before 1.6
+                                                                               selected: node.getAttribute("selected") || false,
+                                                               disabled: node.getAttribute("disabled") || false
+                                                       };
+                                               }, this) : [];
+               }
+               if(!this.value){
+                       this._set("value", this._getValueFromOpts());
+               }else if(this.multiple && typeof this.value == "string"){
+                       this_set("value", this.value.split(","));
+               }
+       },
+
+       postCreate: function(){
+               // summary:
+               //              sets up our event handling that we need for functioning
+               //              as a select
+               this.inherited(arguments);
+
+               // Make our event connections for updating state
+               this.connect(this, "onChange", "_updateSelection");
+               this.connect(this, "startup", "_loadChildren");
+
+               this._setValueAttr(this.value, null);
+       },
+
+       startup: function(){
+               // summary:
+               //              Connects in our store, if we have one defined
+               this.inherited(arguments);
+               var store = this.store, fetchArgs = {};
+               dojo.forEach(["query", "queryOptions", "onFetch"], function(i){
+                       if(this[i]){
+                               fetchArgs[i] = this[i];
+                       }
+                       delete this[i];
+               }, this);
+               if(store && store.getFeatures()["dojo.data.api.Identity"]){
+                       // Temporarily set our store to null so that it will get set
+                       // and connected appropriately
+                       this.store = null;
+                       this.setStore(store, this._oValue, fetchArgs);
+               }
+       },
+
+       destroy: function(){
+               // summary:
+               //              Clean up our connections
+               dojo.forEach(this._notifyConnections || [], dojo.disconnect);
+               this.inherited(arguments);
+       },
+
+       _addOptionItem: function(/*dijit.form.__SelectOption*/ option){
+               // summary:
+               //              User-overridable function which, for the given option, adds an
+               //              item to the select.  If the option doesn't have a value, then a
+               //              separator is added in that place.  Make sure to store the option
+               //              in the created option widget.
+       },
+
+       _removeOptionItem: function(/*dijit.form.__SelectOption*/ option){
+               // summary:
+               //              User-overridable function which, for the given option, removes
+               //              its item from the select.
+       },
+
+       _setDisplay: function(/*String or String[]*/ newDisplay){
+               // summary:
+               //              Overridable function which will set the display for the
+               //              widget.  newDisplay is either a string (in the case of
+               //              single selects) or array of strings (in the case of multi-selects)
+       },
+
+       _getChildren: function(){
+               // summary:
+               //              Overridable function to return the children that this widget contains.
+               return [];
+       },
+
+       _getSelectedOptionsAttr: function(){
+               // summary:
+               //              hooks into this.attr to provide a mechanism for getting the
+               //              option items for the current value of the widget.
+               return this.getOptions(this.get("value"));
+       },
+
+       _pseudoLoadChildren: function(/*item[]*/ items){
+               // summary:
+               //              a function that will "fake" loading children, if needed, and
+               //              if we have set to not load children until the widget opens.
+               // items:
+               //              An array of items that will be loaded, when needed
+       },
+
+       onSetStore: function(){
+               // summary:
+               //              a function that can be connected to in order to receive a
+               //              notification that the store has finished loading and all options
+               //              from that store are available
+       }
 });
-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.get("value"));
-},_pseudoLoadChildren:function(_2f){
-},onSetStore:function(){
-}});
+
 }
index eb80ca06bf7fc7771ffd7db1dad8e60931423baa..ebd1cfb18b52e1ac6e198413457c53f980beceef 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._FormWidget"]){
-dojo._hasResource["dijit.form._FormWidget"]=true;
+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.require("dojo.window");
 dojo.require("dijit._Widget");
 dojo.require("dijit._Templated");
 dojo.require("dijit._CssStateMixin");
-dojo.declare("dijit.form._FormWidget",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{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.replace(/'/g,"&quot;")+"\""):"";
-this.inherited(arguments);
-},postCreate:function(){
-this.inherited(arguments);
-this.connect(this.domNode,"onmousedown","_onMouseDown");
-},_setDisabledAttr:function(_1){
-this.disabled=_1;
-dojo.attr(this.focusNode,"disabled",_1);
-if(this.valueNode){
-dojo.attr(this.valueNode,"disabled",_1);
-}
-dijit.setWaiState(this.focusNode,"disabled",_1);
-if(_1){
-this._hovering=false;
-this._active=false;
-var _2="tabIndex" in this.attributeMap?this.attributeMap.tabIndex:"focusNode";
-dojo.forEach(dojo.isArray(_2)?_2:[_2],function(_3){
-var _4=this[_3];
-if(dojo.isWebKit||dijit.hasDefaultTabStop(_4)){
-_4.setAttribute("tabIndex","-1");
-}else{
-_4.removeAttribute("tabIndex");
-}
-},this);
-}else{
-this.focusNode.setAttribute("tabIndex",this.tabIndex);
-}
-},setDisabled:function(_5){
-dojo.deprecated("setDisabled("+_5+") is deprecated. Use set('disabled',"+_5+") instead.","","2.0");
-this.set("disabled",_5);
-},_onFocus:function(e){
-if(this.scrollOnFocus){
-dojo.window.scrollIntoView(this.domNode);
-}
-this.inherited(arguments);
-},isFocusable:function(){
-return !this.disabled&&!this.readOnly&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");
-},focus:function(){
-dijit.focus(this.focusNode);
-},compare:function(_6,_7){
-if(typeof _6=="number"&&typeof _7=="number"){
-return (isNaN(_6)&&isNaN(_7))?0:_6-_7;
-}else{
-if(_6>_7){
-return 1;
-}else{
-if(_6<_7){
-return -1;
-}else{
-return 0;
-}
-}
-}
-},onChange:function(_8){
-},_onChangeActive:false,_handleOnChange:function(_9,_a){
-this._lastValue=_9;
-if(this._lastValueReported==undefined&&(_a===null||!this._onChangeActive)){
-this._resetValue=this._lastValueReported=_9;
-}
-if((this.intermediateChanges||_a||_a===undefined)&&((typeof _9!=typeof this._lastValueReported)||this.compare(_9,this._lastValueReported)!=0)){
-this._lastValueReported=_9;
-if(this._onChangeActive){
-if(this._onChangeHandle){
-clearTimeout(this._onChangeHandle);
-}
-this._onChangeHandle=setTimeout(dojo.hitch(this,function(){
-this._onChangeHandle=null;
-this.onChange(_9);
-}),0);
-}
-}
-},create:function(){
-this.inherited(arguments);
-this._onChangeActive=true;
-},destroy:function(){
-if(this._onChangeHandle){
-clearTimeout(this._onChangeHandle);
-this.onChange(this._lastValueReported);
-}
-this.inherited(arguments);
-},setValue:function(_b){
-dojo.deprecated("dijit.form._FormWidget:setValue("+_b+") is deprecated.  Use set('value',"+_b+") instead.","","2.0");
-this.set("value",_b);
-},getValue:function(){
-dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.","","2.0");
-return this.get("value");
-},_onMouseDown:function(e){
-if(!e.ctrlKey&&this.isFocusable()){
-var _c=this.connect(dojo.body(),"onmouseup",function(){
-if(this.isFocusable()){
-this.focus();
-}
-this.disconnect(_c);
+
+
+dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
+       {
+       // 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.
+
+       // name: [const] 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
+               // Regarding escaping, see heading "Attribute values" in
+               // http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
+               this.nameAttrSetting = this.name ? ('name="' + this.name.replace(/'/g, "&quot;") + '"') : '';
+               this.inherited(arguments);
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
+               this.connect(this.domNode, "onmousedown", "_onMouseDown");
+       },
+
+       _setDisabledAttr: function(/*Boolean*/ value){
+               this._set("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 these, because after the domNode is disabled, we can no longer receive
+                       // mouse related events, see #4200
+                       this._set("hovering", false);
+                       this._set("active", false);
+
+                       // clear tab stop(s) on this widget's focusable node(s)  (ComboBox has two focusable nodes)
+                       var attachPointNames = "tabIndex" in this.attributeMap ? this.attributeMap.tabIndex : "focusNode";
+                       dojo.forEach(dojo.isArray(attachPointNames) ? attachPointNames : [attachPointNames], function(attachPointName){
+                               var node = this[attachPointName];
+                               // complex code because tabIndex=-1 on a <div> doesn't work on FF
+                               if(dojo.isWebKit || dijit.hasDefaultTabStop(node)){     // see #11064 about webkit bug
+                                       node.setAttribute('tabIndex', "-1");
+                               }else{
+                                       node.removeAttribute('tabIndex');
+                               }
+                       }, this);
+               }else{
+                       if(this.tabIndex != ""){
+                               this.focusNode.setAttribute('tabIndex', this.tabIndex);
+                       }
+               }
+       },
+
+       setDisabled: function(/*Boolean*/ disabled){
+               // summary:
+               //              Deprecated.  Use set('disabled', ...) instead.
+               dojo.deprecated("setDisabled("+disabled+") is deprecated. Use set('disabled',"+disabled+") instead.", "", "2.0");
+               this.set('disabled', disabled);
+       },
+
+       _onFocus: function(e){
+               if(this.scrollOnFocus){
+                       dojo.window.scrollIntoView(this.domNode);
+               }
+               this.inherited(arguments);
+       },
+
+       isFocusable: function(){
+               // summary:
+               //              Tells if this widget is focusable or not.  Used internally by dijit.
+               // tags:
+               //              protected
+               return !this.disabled && this.focusNode && (dojo.style(this.domNode, "display") != "none");
+       },
+
+       focus: function(){
+               // summary:
+               //              Put focus on this widget
+               if(!this.disabled){
+                       dijit.focus(this.focusNode);
+               }
+       },
+
+       compare: function(/*anything*/ val1, /*anything*/ val2){
+               // summary:
+               //              Compare 2 values (as returned by get('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==false,
+               //              onChange is only called form priorityChange=true events.
+               // tags:
+               //              private
+               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;
+               }
+               this._pendingOnChange = this._pendingOnChange
+                       || (typeof newValue != typeof this._lastValueReported)
+                       || (this.compare(newValue, this._lastValueReported) != 0);
+               if((this.intermediateChanges || priorityChange || priorityChange === undefined) && this._pendingOnChange){
+                       this._lastValueReported = newValue;
+                       this._pendingOnChange = false;
+                       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;
+       },
+
+       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 set('value', ...) instead.
+               dojo.deprecated("dijit.form._FormWidget:setValue("+value+") is deprecated.  Use set('value',"+value+") instead.", "", "2.0");
+               this.set('value', value);
+       },
+
+       getValue: function(){
+               // summary:
+               //              Deprecated.  Use get('value') instead.
+               dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.", "", "2.0");
+               return this.get('value');
+       },
+       
+       _onMouseDown: function(e){
+               // If user clicks on the button, even if the mouse is released outside of it,
+               // this button should get focus (to mimics native browser buttons).
+               // This is also needed on chrome because otherwise buttons won't get focus at all,
+               // which leads to bizarre focus restore on Dialog close etc.
+               if(!e.ctrlKey && dojo.mouseButtons.isLeft(e) && this.isFocusable()){ // !e.ctrlKey to ignore right-click on mac
+                       // Set a global event to handle mouseup, so it fires properly
+                       // even if the cursor leaves this.domNode before the mouse up event.
+                       var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
+                               if (this.isFocusable()) {
+                                       this.focus();
+                               }
+                               this.disconnect(mouseUpConnector);
+                       });
+               }
+       }
 });
-}
-}});
-dojo.declare("dijit.form._FormValueWidget",dijit.form._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_d){
-this.readOnly=_d;
-dojo.attr(this.focusNode,"readOnly",_d);
-dijit.setWaiState(this.focusNode,"readonly",_d);
-},postCreate:function(){
-this.inherited(arguments);
-if(dojo.isIE){
-this.connect(this.focusNode||this.domNode,"onkeydown",this._onKeyDown);
-}
-if(this._resetValue===undefined){
-this._resetValue=this.value;
-}
-},_setValueAttr:function(_e,_f){
-this.value=_e;
-this._handleOnChange(_e,_f);
-},_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 _10=this.domNode;
-var _11=_10.parentNode;
-var _12=_10.firstChild||_10;
-var _13=_12.style.filter;
-var _14=this;
-while(_11&&_11.clientHeight==0){
-(function ping(){
-var _15=_14.connect(_11,"onscroll",function(e){
-_14.disconnect(_15);
-_12.style.filter=(new Date()).getMilliseconds();
-setTimeout(function(){
-_12.style.filter=_13;
-},0);
+
+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){
+               dojo.attr(this.focusNode, 'readOnly', value);
+               dijit.setWaiState(this.focusNode, "readonly", value);
+               this._set("readOnly", value);
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
+
+               if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){ // 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.set()
+               // is only called when there *is* a value)
+               if(this._resetValue === undefined){
+                       this._lastValueReported = this._resetValue = this.value;
+               }
+       },
+
+       _setValueAttr: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){
+               // summary:
+               //              Hook so set('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._handleOnChange(newValue, priorityChange);
+       },
+
+       _handleOnChange: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){
+               // summary:
+               //              Called when the value of the widget has changed.  Saves the new value in this.value,
+               //              and calls onChange() if appropriate.   See _FormWidget._handleOnChange() for details.
+               this._set("value", newValue);
+               this.inherited(arguments);
+       },
+
+       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
+                       var _this = this;
+                       while(parent && parent.clientHeight == 0){ // search for parents that haven't rendered yet
+                               (function ping(){
+                                       var disconnectHandle = _this.connect(parent, "onscroll",
+                                               function(e){
+                                                       _this.disconnect(disconnectHandle); // only call once
+                                                       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;
+                       }
+               }
+       }
 });
-})();
-_11=_11.parentNode;
-}
-}
-}});
+
 }
index 772f667dcc16fffdc72aab720f88447b4cfbdbc3..37750ffb708c0f745766f67a2e3251c6ff5a7fa8 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._Spinner"]){
-dojo._hasResource["dijit.form._Spinner"]=true;
+if(!dojo._hasResource["dijit.form._Spinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form._Spinner"] = true;
 dojo.provide("dijit.form._Spinner");
 dojo.require("dijit.form.ValidationTextBox");
-dojo.declare("dijit.form._Spinner",dijit.form.RangeBoundTextBox,{defaultTimeout:500,minimumTimeout:10,timeoutChangeRate:0.9,smallDelta:1,largeDelta:10,templateString:dojo.cache("dijit.form","templates/Spinner.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitButtonNode dijitSpinnerButtonContainer\"\n\t\t><input class=\"dijitReset dijitInputField dijitSpinnerButtonInner\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t/><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitUpArrowButton\"\n\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9650;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t\t><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9660;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onkeypress:_onKeyPress\"\n\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" ${!nameAttrSetting}\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitSpinner",cssStateNodes:{"upArrowNode":"dijitUpArrowButton","downArrowNode":"dijitDownArrowButton"},adjust:function(_1,_2){
-return _1;
-},_arrowPressed:function(_3,_4,_5){
-if(this.disabled||this.readOnly){
-return;
-}
-this._setValueAttr(this.adjust(this.get("value"),_4*_5),false);
-dijit.selectInputText(this.textbox,this.textbox.value.length);
-},_arrowReleased:function(_6){
-this._wheelTimer=null;
-if(this.disabled||this.readOnly){
-return;
-}
-},_typematicCallback:function(_7,_8,_9){
-var _a=this.smallDelta;
-if(_8==this.textbox){
-var k=dojo.keys;
-var _b=_9.charOrCode;
-_a=(_b==k.PAGE_UP||_b==k.PAGE_DOWN)?this.largeDelta:this.smallDelta;
-_8=(_b==k.UP_ARROW||_b==k.PAGE_UP)?this.upArrowNode:this.downArrowNode;
-}
-if(_7==-1){
-this._arrowReleased(_8);
-}else{
-this._arrowPressed(_8,(_8==this.upArrowNode)?1:-1,_a);
-}
-},_wheelTimer:null,_mouseWheeled:function(_c){
-dojo.stopEvent(_c);
-var _d=_c.detail?(_c.detail*-1):(_c.wheelDelta/120);
-if(_d!==0){
-var _e=this[(_d>0?"upArrowNode":"downArrowNode")];
-this._arrowPressed(_e,_d,this.smallDelta);
-if(!this._wheelTimer){
-clearTimeout(this._wheelTimer);
-}
-this._wheelTimer=setTimeout(dojo.hitch(this,"_arrowReleased",_e),50);
-}
-},postCreate:function(){
-this.inherited(arguments);
-this.connect(this.domNode,!dojo.isMozilla?"onmousewheel":"DOMMouseScroll","_mouseWheeled");
-this._connects.push(dijit.typematic.addListener(this.upArrowNode,this.textbox,{charOrCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));
-this._connects.push(dijit.typematic.addListener(this.downArrowNode,this.textbox,{charOrCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));
-this._connects.push(dijit.typematic.addListener(this.upArrowNode,this.textbox,{charOrCode:dojo.keys.PAGE_UP,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));
-this._connects.push(dijit.typematic.addListener(this.downArrowNode,this.textbox,{charOrCode:dojo.keys.PAGE_DOWN,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));
-}});
+
+
+dojo.declare(
+       "dijit.form._Spinner",
+       dijit.form.RangeBoundTextBox,
+       {
+               // summary:
+               //              Mixin for validation widgets with a spinner.
+               // description:
+               //              This class basically (conceptually) extends `dijit.form.ValidationTextBox`.
+               //              It modifies the template to have up/down arrows, and provides related handling code.
+
+               // defaultTimeout: Number
+               //              Number of milliseconds before a held arrow key or up/down button becomes typematic
+               defaultTimeout: 500,
+
+               // minimumTimeout: Number
+               //              minimum number of milliseconds that typematic event fires when held key or button is held
+               minimumTimeout: 10,
+
+               // timeoutChangeRate: Number
+               //              Fraction of time used to change the typematic timer between events.
+               //              1.0 means that each typematic event fires at defaultTimeout intervals.
+               //              < 1.0 means that each typematic event fires at an increasing faster rate.
+               timeoutChangeRate: 0.90,
+
+               // smallDelta: Number
+               //              Adjust the value by this much when spinning using the arrow keys/buttons
+               smallDelta: 1,
+
+               // largeDelta: Number
+               //              Adjust the value by this much when spinning using the PgUp/Dn keys
+               largeDelta: 10,
+
+               templateString: dojo.cache("dijit.form", "templates/Spinner.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" role=\"presentation\"\n\t><div class=\"dijitReset dijitButtonNode dijitSpinnerButtonContainer\"\n\t\t><input class=\"dijitReset dijitInputField dijitSpinnerButtonInner\" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t\t/><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitUpArrowButton\"\n\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9650;\" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t\t><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9660;\" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&#935;\" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onkeypress:_onKeyPress\"\n\t\t\trole=\"spinbutton\" autocomplete=\"off\" ${!nameAttrSetting}\n\t/></div\n></div>\n"),
+
+               baseClass: "dijitTextBox dijitSpinner",
+
+               // Set classes like dijitUpArrowButtonHover or dijitDownArrowButtonActive depending on
+               // mouse action over specified node
+               cssStateNodes: {
+                       "upArrowNode": "dijitUpArrowButton",
+                       "downArrowNode": "dijitDownArrowButton"
+               },
+
+               adjust: function(/*Object*/ val, /*Number*/ delta){
+                       // summary:
+                       //              Overridable function used to adjust a primitive value(Number/Date/...) by the delta amount specified.
+                       //              The val is adjusted in a way that makes sense to the object type.
+                       // tags:
+                       //              protected extension
+                       return val;
+               },
+
+               _arrowPressed: function(/*Node*/ nodePressed, /*Number*/ direction, /*Number*/ increment){
+                       // summary:
+                       //              Handler for arrow button or arrow key being pressed
+                       if(this.disabled || this.readOnly){ return; }
+                       this._setValueAttr(this.adjust(this.get('value'), direction*increment), false);
+                       dijit.selectInputText(this.textbox, this.textbox.value.length);
+               },
+
+               _arrowReleased: function(/*Node*/ node){
+                       // summary:
+                       //              Handler for arrow button or arrow key being released
+                       this._wheelTimer = null;
+                       if(this.disabled || this.readOnly){ return; }
+               },
+
+               _typematicCallback: function(/*Number*/ count, /*DOMNode*/ node, /*Event*/ evt){
+                       var inc=this.smallDelta;
+                       if(node == this.textbox){
+                               var k=dojo.keys;
+                               var key = evt.charOrCode;
+                               inc = (key == k.PAGE_UP || key == k.PAGE_DOWN) ? this.largeDelta : this.smallDelta;
+                               node = (key == k.UP_ARROW || key == k.PAGE_UP) ? this.upArrowNode : this.downArrowNode;
+                       }
+                       if(count == -1){ this._arrowReleased(node); }
+                       else{ this._arrowPressed(node, (node == this.upArrowNode) ? 1 : -1, inc); }
+               },
+
+               _wheelTimer: null,
+               _mouseWheeled: function(/*Event*/ evt){
+                       // summary:
+                       //              Mouse wheel listener where supported
+
+                       dojo.stopEvent(evt);
+                       // FIXME: Safari bubbles
+
+                       // be nice to DOH and scroll as much as the event says to
+                       var scrollAmount = evt.detail ? (evt.detail * -1) : (evt.wheelDelta / 120);
+                       if(scrollAmount !== 0){
+                               var node = this[(scrollAmount > 0 ? "upArrowNode" : "downArrowNode" )];
+
+                               this._arrowPressed(node, scrollAmount, this.smallDelta);
+
+                               if(!this._wheelTimer){
+                                       clearTimeout(this._wheelTimer);
+                               }
+                               this._wheelTimer = setTimeout(dojo.hitch(this,"_arrowReleased",node), 50);
+                       }
+
+               },
+
+               postCreate: function(){
+                       this.inherited(arguments);
+
+                       // extra listeners
+                       this.connect(this.domNode, !dojo.isMozilla ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
+                       this._connects.push(dijit.typematic.addListener(this.upArrowNode, this.textbox, {charOrCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
+                       this._connects.push(dijit.typematic.addListener(this.downArrowNode, this.textbox, {charOrCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
+                       this._connects.push(dijit.typematic.addListener(this.upArrowNode, this.textbox, {charOrCode:dojo.keys.PAGE_UP,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
+                       this._connects.push(dijit.typematic.addListener(this.downArrowNode, this.textbox, {charOrCode:dojo.keys.PAGE_DOWN,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
+               }
+});
+
 }
index 2874dd890c2d0863acdf463fc695bc00a4f65ff6..b42a99d393717d95c37e41b14bce182ff43d5a84 100644 (file)
@@ -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
+({"rangeMessage":"Værdien er uden for intervallet.","invalidMessage":"Den angivne værdi er ikke gyldig.","missingMessage":"Værdien er påkrævet."})
\ No newline at end of file
diff --git a/lib/dijit/form/nls/kk/ComboBox.js b/lib/dijit/form/nls/kk/ComboBox.js
new file mode 100644 (file)
index 0000000..edb918a
--- /dev/null
@@ -0,0 +1 @@
+({"previousMessage":"Алдыңғы нұсқалар","nextMessage":"Басқа нұсқалар"})
\ No newline at end of file
diff --git a/lib/dijit/form/nls/kk/Textarea.js b/lib/dijit/form/nls/kk/Textarea.js
new file mode 100644 (file)
index 0000000..617fcb9
--- /dev/null
@@ -0,0 +1 @@
+({"iframeEditTitle":"өңдеу аумағы","iframeFocusTitle":"өңдеу аумағының жақтауы"})
\ No newline at end of file
diff --git a/lib/dijit/form/nls/kk/validate.js b/lib/dijit/form/nls/kk/validate.js
new file mode 100644 (file)
index 0000000..d676121
--- /dev/null
@@ -0,0 +1 @@
+({"rangeMessage":"Бұл мән ауқымнан тыс.","invalidMessage":"Енгізілген мән жарамды емес.","missingMessage":"Бұл мән міндетті."})
\ No newline at end of file
index d918f59e03780e4a6ea933172b89f30efbf567f5..33b050a1d9699228393489945cc9f66d3df345f5 100644 (file)
@@ -1 +1 @@
-({"iframeEditTitle":"Obszar edycji","iframeFocusTitle":"Ramka obszaru edycji"})
\ No newline at end of file
+({"iframeEditTitle":"edycja obszaru","iframeFocusTitle":"edycja ramki obszaru"})
\ No newline at end of file
index e9556880caff4bdf48a4b4179677a536b17b3e01..61d4469c641c7dc3cbf11a93e37d78731540a20d 100644 (file)
@@ -1 +1 @@
-({"previousMessage":"Prejšnje možnosti","nextMessage":"Dodatne možnosti"})
\ No newline at end of file
+({"previousMessage":"Prejšnje izbire","nextMessage":"Dodatne izbire"})
\ No newline at end of file
index 912ee3962a94e0ed0b76cb0857a4665afd036f79..0e0d5117553b0eec3947e67d5f6ee5af44e8cb5c 100644 (file)
@@ -1 +1 @@
-({"iframeEditTitle":"urejanje področja","iframeFocusTitle":"urejanje področja okvirja"})
\ No newline at end of file
+({"iframeEditTitle":"urejevalno področje","iframeFocusTitle":"okvir urejevalnega področja"})
\ No newline at end of file
index 763572486a37fe5bbb8f594319c8092cd1470ab6..b84b35350b368e97bf6531a01aa059961a1ba240 100644 (file)
@@ -1 +1 @@
-({"rangeMessage":"Ta vrednost je zunaj obsega. ","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."})
\ No newline at end of file
+({"rangeMessage":"Ta vrednost je izven območja.","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."})
\ No newline at end of file
index 373752a812383753c613e0bfda71378878250b4b..6f2749240d0fe57d61a1b8c60d573ec7bfae1aee 100644 (file)
@@ -1,3 +1,10 @@
+/* Dijit widget common icons*/
+
+/*commonIcons.css is located in dijit/icons
+
+commonIconsRtl.css is TBD. This needs to be reviewed to determine in Rtl is reqd. 
+
+The 16 x 16px icons in these sprites are action and object type images which can be used in the following widgets: accordionContainer, menu, tab, titlepane, tree, and all button widgets and error validation contexts. */
 
 .dijitIconSave,
 .dijitIconPrint,
 .dijitFolderOpened,
 .dijitIconFolderOpen,
 .dijitIconError {
-       background-image: url('images/commonIconsObjActEnabled.png'); 
+       background-image: url('images/commonIconsObjActEnabled.png'); /* Contains both object and action icons in a sprite image for the enabled state.  */
        width: 16px;
        height: 16px;
 }
+
 .dj_ie6 .dijitIconSave,
 .dj_ie6 .dijitIconPrint,
 .dj_ie6 .dijitIconCut,
@@ -75,6 +83,7 @@
 .dj_ie6 .dijitIconError {
        background-image: url('images/commonIconsObjActEnabled8bit.png');
 }
+
 .dijitDisabled .dijitIconSave,
 .dijitDisabled .dijitIconPrint,
 .dijitDisabled .dijitIconCut,
 .dijitDisabled .dijitFolderOpened,
 .dijitDisabled .dijitIconFolderOpen,
 .dijitDisabled .dijitIconError {
-       background-image: url('images/commonIconsObjActDisabled.png'); 
+       background-image: url('images/commonIconsObjActDisabled.png'); /* Contains both object and action icons as a sprite image for the disabled state. These would be used by buttons and menus.   */
 }
+
+/*Action icons*/
 .dijitIconSave { background-position: 0px; }
 .dijitIconPrint { background-position: -16px; }
 .dijitIconCut { background-position: -32px; }
 .dijitIconConfigure { background-position: -208px; }
 .dijitIconSearch { background-position: -224px; }
 .dijitIconError { background-position: -496px; } 
+/* .dijitIconError is also called .dijitContentPaneError icon in the claro/common.css and is applied to HREF url errors that render in a dialog box with the error messsage */
+
+/*Object icons*/
 .dijitIconApplication { background-position: -240px; }
 .dijitIconBookmark { background-position: -256px; }
 .dijitIconChart { background-position: -272px; }
 .dijitIconSample { background-position: -416px; }
 .dijitIconTable { background-position: -432px; }
 .dijitIconUsers { background-position: -448px; }
+
+
+/*Tree folder icons*/
 .dijitIconFolderClosed, .dijitFolderClosed { background-position: -464px; }
 .dijitIconFolderOpen, .dijitFolderOpened { background-position: -480px; }
+
index 347f3b792d51d57a6c7f543c45f62058844d7abf..4d4c26f2d234bc8ea6b7856daf9beee64b96d997 100644 (file)
@@ -1,3 +1,8 @@
+/* Dijit widget common icons*/
+
+/*commonIcons_rtl.css is located in dijit/icons
+
+The 16 x 16px icons in these sprites are action and object type images which can be used in the following widgets: accordionContainer, menu, tab, titlepane, tree, and all button widgets and error validation contexts. */
 
 .dijitRtl .dijitIconSave,
 .dijitRtl .dijitIconPrint,
 .dijitRtl .dijitFolderOpened,
 .dijitRtl .dijitIconFolderOpen,
 .dijitRtl .dijitIconError, .dijitRtl .dijitContentPaneError { 
-       background-image: url('images/commonIconsObjActEnabled_rtl.png'); 
+       background-image: url('images/commonIconsObjActEnabled_rtl.png'); /* Contains both object and action icons in a sprite image for the enabled state.  */
        width: 16px;
        height: 16px;
 }
+
 .dj_ie6 .dijitRtl .dijitIconSave,
 .dj_ie6 .dijitRtl .dijitIconPrint,
 .dj_ie6 .dijitRtl .dijitIconCut,
@@ -75,6 +81,7 @@
 .dj_ie6 .dijitRtl .dijitIconError, .dj_ie6 .dijitRtl .dijitContentPaneError {
        background-image: url('images/commonIconsObjActEnabled8bit_rtl.png');
 }
+
 .dijitRtl .dijitDisabled .dijitIconSave,
 .dijitRtl .dijitDisabled .dijitIconPrint,
 .dijitRtl .dijitDisabled .dijitIconCut,
 .dijitRtl .dijitDisabled .dijitFolderOpened,
 .dijitRtl .dijitDisabled .dijitIconFolderOpen,
 .dijitRtl .dijitDisabled .dijitIconError, .dijitRtl .dijitDisabled .dijitContentPaneError {
-       background-image: url('images/commonIconsObjActDisabled_rtl.png'); 
+       background-image: url('images/commonIconsObjActDisabled_rtl.png'); /* Contains both object and action icons as a sprite image for the disabled state. These would be used by buttons and menus.   */
 }
+
+
+/*For Claro and future themes.*/
 .dijitRtl .dijitContentPaneLoading {
        background:url('images/loadingAnimation_rtl.gif') no-repeat;
 }
index 90ee97e20429c9d206acb7ec639bab4c6ac56e4a..8c667ac7d5559edc85a44af614a774b3090b93a7 100644 (file)
@@ -1,14 +1,24 @@
+/* Dijit Editor icons*/
+
+/*editorIcons.css  is located in dijit/images 
+
+editorIcons.css contains references to the dijit editor widget icons. There are 46 icons used to map to the related editor funtionality in the editor's toolbar.
+
+*/
+
 
 .dijitEditorIcon {
-       background-image: url('images/editorIconsEnabled.png'); 
+       background-image: url('images/editorIconsEnabled.png'); /* editor icons sprite image for the enabled state */
        background-repeat: no-repeat;
        width: 18px;
        height: 18px;
        text-align: center;
 }
 .dijitDisabled .dijitEditorIcon {
-       background-image: url('images/editorIconsDisabled.png'); 
+       background-image: url('images/editorIconsDisabled.png'); /* editor icons sprite image for the disabled state */
 }
+
+
 .dijitEditorIconSep { background-position: 0px; }
 .dijitEditorIconSave { background-position: -18px; }
 .dijitEditorIconPrint { background-position: -36px; }
 .dijitEditorIconRemoveFormat { background-position: -774px; }
 .dijitEditorIconFullScreen { background-position: -792px; }
 .dijitEditorIconWikiword { background-position: -810px; }
+/* .dijitEditorIconToggleDir { background-position: -540px; ;} - 03172010: This icon was not in dijit.editor but is in dojox.editor. */
+
+/* no longer in the editor toolbar:  .dijitEditorIconToggleDir { background-position: -540px;  padding: 0; margin: 0; color:#555555;
+                                                                       font-family:verdana,arial,sans-serif; font-weight: 800; font-size: 70%; */
+
+
+
+
+
+
+
index 8dcdd73709e44f4832c27bc9011135c6f92349b9..4d8cb71984b55cb8e8d9f8775581143c2cd2ed81 100644 (file)
@@ -1,10 +1,23 @@
+/* Dijit Editor RTL icons*/
 
+/*editorIcons_rtl.css is located in dijit/images 
+
+editorIcons_rtl.css contains references to the dijit editor widget icons. There are 46 icons used to map to the related editor funtionality in the editor's toolbar.
+
+*/
+
+
+/* Editor */
 .dijitEditorRtl .dijitEditorIcon {
-       background-image: url('images/editorIconsEnabled_rtl.png'); 
+       background-image: url('images/editorIconsEnabled_rtl.png'); /* editor icons sprite image for the enabled right to left state */
 }
 .dijitEditorRtlDisabled .dijitEditorIcon {
-       background-image: url('images/editorIconsDisabled_rtl.png'); 
+       background-image: url('images/editorIconsDisabled_rtl.png'); /* editor icons sprite image for the disabled right to left state */
 }
+
+/* Toolbar */
 .dijitToolbarRtl .dijitToolbarSeparator {
        background-image: url('images/editorIconsEnabled_rtl.png');
 }
+
+/* took this information above from editorRtl.css - good or bad? */
\ No newline at end of file
index 5bad370f5c659f4ba7eef0a8fbc658e55ba28411..6177583ba538fdab23e3e8e41aa5fdbb6f3a9b12 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.AccordionContainer"]){
-dojo._hasResource["dijit.layout.AccordionContainer"]=true;
+if(!dojo._hasResource["dijit.layout.AccordionContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.AccordionContainer"] = true;
 dojo.provide("dijit.layout.AccordionContainer");
-dojo.require("dojo.fx");
 dojo.require("dijit._Container");
 dojo.require("dijit._Templated");
 dojo.require("dijit._CssStateMixin");
 dojo.require("dijit.layout.StackContainer");
 dojo.require("dijit.layout.ContentPane");
 dojo.require("dijit.layout.AccordionPane");
-dojo.declare("dijit.layout.AccordionContainer",dijit.layout.StackContainer,{duration:dijit.defaultDuration,buttonWidget:"dijit.layout._AccordionButton",_verticalSpace:0,baseClass:"dijitAccordionContainer",postCreate:function(){
-this.domNode.style.overflow="hidden";
-this.inherited(arguments);
-dijit.setWaiRole(this.domNode,"tablist");
-},startup:function(){
-if(this._started){
-return;
-}
-this.inherited(arguments);
-if(this.selectedChildWidget){
-var _1=this.selectedChildWidget.containerNode.style;
-_1.display="";
-_1.overflow="auto";
-this.selectedChildWidget._wrapperWidget.set("selected",true);
-}
-},_getTargetHeight:function(_2){
-var cs=dojo.getComputedStyle(_2);
-return Math.max(this._verticalSpace-dojo._getPadBorderExtents(_2,cs).h-dojo._getMarginExtents(_2,cs).h,0);
-},layout:function(){
-var _3=this.selectedChildWidget;
-if(!_3){
-return;
-}
-var _4=_3._wrapperWidget.domNode,_5=dojo._getMarginExtents(_4),_6=dojo._getPadBorderExtents(_4),_7=this._contentBox;
-var _8=0;
-dojo.forEach(this.getChildren(),function(_9){
-if(_9!=_3){
-_8+=dojo.marginBox(_9._wrapperWidget.domNode).h;
-}
-});
-this._verticalSpace=_7.h-_8-_5.h-_6.h-_3._buttonWidget.getTitleHeight();
-this._containerContentBox={h:this._verticalSpace,w:this._contentBox.w-_5.w-_6.w};
-if(_3){
-_3.resize(this._containerContentBox);
-}
-},_setupChild:function(_a){
-_a._wrapperWidget=new dijit.layout._AccordionInnerContainer({contentWidget:_a,buttonWidget:this.buttonWidget,id:_a.id+"_wrapper",dir:_a.dir,lang:_a.lang,parent:this});
-this.inherited(arguments);
-},addChild:function(_b,_c){
-if(this._started){
-dojo.place(_b.domNode,this.containerNode,_c);
-if(!_b._started){
-_b.startup();
-}
-this._setupChild(_b);
-dojo.publish(this.id+"-addChild",[_b,_c]);
-this.layout();
-if(!this.selectedChildWidget){
-this.selectChild(_b);
-}
-}else{
-this.inherited(arguments);
-}
-},removeChild:function(_d){
-_d._wrapperWidget.destroy();
-delete _d._wrapperWidget;
-dojo.removeClass(_d.domNode,"dijitHidden");
-this.inherited(arguments);
-},getChildren:function(){
-return dojo.map(this.inherited(arguments),function(_e){
-return _e.declaredClass=="dijit.layout._AccordionInnerContainer"?_e.contentWidget:_e;
-},this);
-},destroy:function(){
-dojo.forEach(this.getChildren(),function(_f){
-_f._wrapperWidget.destroy();
+
+
+//dojo.require("dijit.layout.AccordionPane "); // for back compat, remove for 2.0
+
+// Design notes:
+//
+// An AccordionContainer is a StackContainer, but each child (typically ContentPane)
+// is wrapped in a _AccordionInnerContainer.   This is hidden from the caller.
+//
+// The resulting markup will look like:
+//
+//     <div class=dijitAccordionContainer>
+//             <div class=dijitAccordionInnerContainer>        (one pane)
+//                             <div class=dijitAccordionTitle>         (title bar) ... </div>
+//                             <div class=dijtAccordionChildWrapper>   (content pane) </div>
+//             </div>
+//     </div>
+//
+// Normally the dijtAccordionChildWrapper is hidden for all but one child (the shown
+// child), so the space for the content pane is all the title bars + the one dijtAccordionChildWrapper,
+// which on claro has a 1px border plus a 2px bottom margin.
+//
+// During animation there are two dijtAccordionChildWrapper's shown, so we need
+// to compensate for that.
+
+dojo.declare(
+       "dijit.layout.AccordionContainer",
+       dijit.layout.StackContainer,
+       {
+               // summary:
+               //              Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time,
+               //              and switching between panes is visualized by sliding the other panes up/down.
+               // example:
+               //      |       <div dojoType="dijit.layout.AccordionContainer">
+               //      |               <div dojoType="dijit.layout.ContentPane" title="pane 1">
+               //      |               </div>
+               //      |               <div dojoType="dijit.layout.ContentPane" title="pane 2">
+               //      |                       <p>This is some text</p>
+               //      |               </div>
+               //      |       </div>
+
+               // duration: Integer
+               //              Amount of time (in ms) it takes to slide panes
+               duration: dijit.defaultDuration,
+
+               // buttonWidget: [const] String
+               //              The name of the widget used to display the title of each pane
+               buttonWidget: "dijit.layout._AccordionButton",
+
+/*=====
+               // _verticalSpace: Number
+               //              Pixels of space available for the open pane
+               //              (my content box size minus the cumulative size of all the title bars)
+               _verticalSpace: 0,
+=====*/
+               baseClass: "dijitAccordionContainer",
+
+               buildRendering: function(){
+                       this.inherited(arguments);
+                       this.domNode.style.overflow = "hidden";         // TODO: put this in dijit.css
+                       dijit.setWaiRole(this.domNode, "tablist");      // TODO: put this in template
+               },
+
+               startup: function(){
+                       if(this._started){ return; }
+                       this.inherited(arguments);
+                       if(this.selectedChildWidget){
+                               var style = this.selectedChildWidget.containerNode.style;
+                               style.display = "";
+                               style.overflow = "auto";
+                               this.selectedChildWidget._wrapperWidget.set("selected", true);
+                       }
+               },
+
+               layout: function(){
+                       // Implement _LayoutWidget.layout() virtual method.
+                       // Set the height of the open pane based on what room remains.
+
+                       var openPane = this.selectedChildWidget;
+                       
+                       if(!openPane){ return;}
+
+                       // space taken up by title, plus wrapper div (with border/margin) for open pane
+                       var wrapperDomNode = openPane._wrapperWidget.domNode,
+                               wrapperDomNodeMargin = dojo._getMarginExtents(wrapperDomNode),
+                               wrapperDomNodePadBorder = dojo._getPadBorderExtents(wrapperDomNode),
+                               wrapperContainerNode = openPane._wrapperWidget.containerNode,
+                               wrapperContainerNodeMargin = dojo._getMarginExtents(wrapperContainerNode),
+                               wrapperContainerNodePadBorder = dojo._getPadBorderExtents(wrapperContainerNode),
+                               mySize = this._contentBox;
+
+                       // get cumulative height of all the unselected title bars
+                       var totalCollapsedHeight = 0;
+                       dojo.forEach(this.getChildren(), function(child){
+                   if(child != openPane){
+                                       totalCollapsedHeight += dojo._getMarginSize(child._wrapperWidget.domNode).h;
+                               }
+                       });
+                       this._verticalSpace = mySize.h - totalCollapsedHeight - wrapperDomNodeMargin.h
+                               - wrapperDomNodePadBorder.h - wrapperContainerNodeMargin.h - wrapperContainerNodePadBorder.h
+                               - openPane._buttonWidget.getTitleHeight();
+
+                       // Memo size to make displayed child
+                       this._containerContentBox = {
+                               h: this._verticalSpace,
+                               w: this._contentBox.w - wrapperDomNodeMargin.w - wrapperDomNodePadBorder.w
+                                       - wrapperContainerNodeMargin.w - wrapperContainerNodePadBorder.w
+                       };
+
+                       if(openPane){
+                               openPane.resize(this._containerContentBox);
+                       }
+               },
+
+               _setupChild: function(child){
+                       // Overrides _LayoutWidget._setupChild().
+                       // Put wrapper widget around the child widget, showing title
+
+                       child._wrapperWidget = new dijit.layout._AccordionInnerContainer({
+                               contentWidget: child,
+                               buttonWidget: this.buttonWidget,
+                               id: child.id + "_wrapper",
+                               dir: child.dir,
+                               lang: child.lang,
+                               parent: this
+                       });
+
+                       this.inherited(arguments);
+               },
+
+               addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+                       if(this._started){
+                               // Adding a child to a started Accordion is complicated because children have
+                               // wrapper widgets.  Default code path (calling this.inherited()) would add
+                               // the new child inside another child's wrapper.
+
+                               // First add in child as a direct child of this AccordionContainer
+                               dojo.place(child.domNode, this.containerNode, insertIndex);
+
+                               if(!child._started){
+                                       child.startup();
+                               }
+                               
+                               // Then stick the wrapper widget around the child widget
+                               this._setupChild(child);
+
+                               // Code below copied from StackContainer
+                               dojo.publish(this.id+"-addChild", [child, insertIndex]);
+                               this.layout();
+                               if(!this.selectedChildWidget){
+                                       this.selectChild(child);
+                               }
+                       }else{
+                               // We haven't been started yet so just add in the child widget directly,
+                               // and the wrapper will be created on startup()
+                               this.inherited(arguments);
+                       }
+               },
+
+               removeChild: function(child){
+                       // Overrides _LayoutWidget.removeChild().
+
+                       // Destroy wrapper widget first, before StackContainer.getChildren() call.
+                       // Replace wrapper widget with true child widget (ContentPane etc.).
+                       // This step only happens if the AccordionContainer has been started; otherwise there's no wrapper.
+                       if(child._wrapperWidget){
+                               dojo.place(child.domNode, child._wrapperWidget.domNode, "after");
+                               child._wrapperWidget.destroy();
+                               delete child._wrapperWidget;
+                       }
+
+                       dojo.removeClass(child.domNode, "dijitHidden");
+
+                       this.inherited(arguments);
+               },
+
+               getChildren: function(){
+                       // Overrides _Container.getChildren() to return content panes rather than internal AccordionInnerContainer panes
+                       return dojo.map(this.inherited(arguments), function(child){
+                               return child.declaredClass == "dijit.layout._AccordionInnerContainer" ? child.contentWidget : child;
+                       }, this);
+               },
+
+               destroy: function(){
+                       if(this._animation){
+                               this._animation.stop();
+                       }
+                       dojo.forEach(this.getChildren(), function(child){
+                               // If AccordionContainer has been started, then each child has a wrapper widget which
+                               // also needs to be destroyed.
+                               if(child._wrapperWidget){
+                                       child._wrapperWidget.destroy();
+                               }else{
+                                       child.destroyRecursive();
+                               }
+                       });
+                       this.inherited(arguments);
+               },
+
+               _showChild: function(child){
+                       // Override StackContainer._showChild() to set visibility of _wrapperWidget.containerNode
+                       child._wrapperWidget.containerNode.style.display="block";
+                       return this.inherited(arguments);
+               },
+
+               _hideChild: function(child){
+                       // Override StackContainer._showChild() to set visibility of _wrapperWidget.containerNode
+                       child._wrapperWidget.containerNode.style.display="none";
+                       this.inherited(arguments);
+               },
+
+               _transition: function(/*dijit._Widget?*/ newWidget, /*dijit._Widget?*/ oldWidget, /*Boolean*/ animate){
+                       // Overrides StackContainer._transition() to provide sliding of title bars etc.
+
+                       if(dojo.isIE < 8){
+                               // workaround animation bugs by not animating; not worth supporting animation for IE6 & 7
+                               animate = false;
+                       }
+
+                       if(this._animation){
+                               // there's an in-progress animation.  speedily end it so we can do the newly requested one
+                               this._animation.stop(true);
+                               delete this._animation;
+                       }
+
+                       var self = this;
+
+                       if(newWidget){
+                               newWidget._wrapperWidget.set("selected", true);
+
+                               var d = this._showChild(newWidget);     // prepare widget to be slid in
+
+                               // Size the new widget, in case this is the first time it's being shown,
+                               // or I have been resized since the last time it was shown.
+                               // Note that page must be visible for resizing to work.
+                               if(this.doLayout && newWidget.resize){
+                                       newWidget.resize(this._containerContentBox);
+                               }
+                       }
+
+                       if(oldWidget){
+                               oldWidget._wrapperWidget.set("selected", false);
+                               if(!animate){
+                                       this._hideChild(oldWidget);
+                               }
+                       }
+
+                       if(animate){
+                               var newContents = newWidget._wrapperWidget.containerNode,
+                                       oldContents = oldWidget._wrapperWidget.containerNode;
+
+                               // During the animation we will be showing two dijitAccordionChildWrapper nodes at once,
+                               // which on claro takes up 4px extra space (compared to stable AccordionContainer).
+                               // Have to compensate for that by immediately shrinking the pane being closed.
+                               var wrapperContainerNode = newWidget._wrapperWidget.containerNode,
+                                       wrapperContainerNodeMargin = dojo._getMarginExtents(wrapperContainerNode),
+                                       wrapperContainerNodePadBorder = dojo._getPadBorderExtents(wrapperContainerNode),
+                                       animationHeightOverhead = wrapperContainerNodeMargin.h + wrapperContainerNodePadBorder.h;
+
+                               oldContents.style.height = (self._verticalSpace - animationHeightOverhead) + "px";
+
+                               this._animation = new dojo.Animation({
+                                       node: newContents,
+                                       duration: this.duration,
+                                       curve: [1, this._verticalSpace - animationHeightOverhead - 1],
+                                       onAnimate: function(value){
+                                               value = Math.floor(value);      // avoid fractional values
+                                               newContents.style.height = value + "px";
+                                               oldContents.style.height = (self._verticalSpace - animationHeightOverhead - value) + "px";
+                                       },
+                                       onEnd: function(){
+                                               delete self._animation;
+                                               newContents.style.height = "auto";
+                                               oldWidget._wrapperWidget.containerNode.style.display = "none";
+                                               oldContents.style.height = "auto";
+                                               self._hideChild(oldWidget);
+                                       }
+                               });
+                               this._animation.onStop = this._animation.onEnd;
+                               this._animation.play();
+                       }
+
+                       return d;       // If child has an href, promise that fires when the widget has finished loading
+               },
+
+               // note: we are treating the container as controller here
+               _onKeyPress: function(/*Event*/ e, /*dijit._Widget*/ fromTitle){
+                       // summary:
+                       //              Handle keypress events
+                       // description:
+                       //              This is called from a handler on AccordionContainer.domNode
+                       //              (setup in StackContainer), and is also called directly from
+                       //              the click handler for accordion labels
+                       if(this.disabled || e.altKey || !(fromTitle || e.ctrlKey)){
+                               return;
+                       }
+                       var k = dojo.keys,
+                               c = e.charOrCode;
+                       if((fromTitle && (c == k.LEFT_ARROW || c == k.UP_ARROW)) ||
+                                       (e.ctrlKey && c == k.PAGE_UP)){
+                               this._adjacent(false)._buttonWidget._onTitleClick();
+                               dojo.stopEvent(e);
+                       }else if((fromTitle && (c == k.RIGHT_ARROW || c == k.DOWN_ARROW)) ||
+                                       (e.ctrlKey && (c == k.PAGE_DOWN || c == k.TAB))){
+                               this._adjacent(true)._buttonWidget._onTitleClick();
+                               dojo.stopEvent(e);
+                       }
+               }
+       }
+);
+
+dojo.declare("dijit.layout._AccordionInnerContainer",
+       [dijit._Widget, dijit._CssStateMixin], {
+               // summary:
+               //              Internal widget placed as direct child of AccordionContainer.containerNode.
+               //              When other widgets are added as children to an AccordionContainer they are wrapped in
+               //              this widget.
+               
+/*=====
+               // buttonWidget: String
+               //              Name of class to use to instantiate title
+               //              (Wish we didn't have a separate widget for just the title but maintaining it
+               //              for backwards compatibility, is it worth it?)
+                buttonWidget: null,
+=====*/
+
+/*=====
+               // contentWidget: dijit._Widget
+               //              Pointer to the real child widget
+               contentWidget: null,
+=====*/
+
+               baseClass: "dijitAccordionInnerContainer",
+
+               // tell nested layout widget that we will take care of sizing
+               isContainer: true,
+               isLayoutContainer: true,
+
+               buildRendering: function(){
+                       // Builds a template like:
+                       //      <div class=dijitAccordionInnerContainer>
+                       //              Button
+                       //              <div class=dijitAccordionChildWrapper>
+                       //                      ContentPane
+                       //              </div>
+                       //      </div>
+
+                       // Create wrapper div, placed where the child is now
+                       this.domNode = dojo.place("<div class='" + this.baseClass + "'>", this.contentWidget.domNode, "after");
+                       
+                       // wrapper div's first child is the button widget (ie, the title bar)
+                       var child = this.contentWidget,
+                               cls = dojo.getObject(this.buttonWidget);
+                       this.button = child._buttonWidget = (new cls({
+                               contentWidget: child,
+                               label: child.title,
+                               title: child.tooltip,
+                               dir: child.dir,
+                               lang: child.lang,
+                               iconClass: child.iconClass,
+                               id: child.id + "_button",
+                               parent: this.parent
+                       })).placeAt(this.domNode);
+                       
+                       // and then the actual content widget (changing it from prior-sibling to last-child),
+                       // wrapped by a <div class=dijitAccordionChildWrapper>
+                       this.containerNode = dojo.place("<div class='dijitAccordionChildWrapper' style='display:none'>", this.domNode);
+                       dojo.place(this.contentWidget.domNode, this.containerNode);
+               },
+
+               postCreate: function(){
+                       this.inherited(arguments);
+
+                       // Map changes in content widget's title etc. to changes in the button
+                       var button = this.button;
+                       this._contentWidgetWatches = [
+                               this.contentWidget.watch('title', dojo.hitch(this, function(name, oldValue, newValue){
+                                       button.set("label", newValue);
+                               })),
+                               this.contentWidget.watch('tooltip', dojo.hitch(this, function(name, oldValue, newValue){
+                                       button.set("title", newValue);
+                               })),
+                               this.contentWidget.watch('iconClass', dojo.hitch(this, function(name, oldValue, newValue){
+                                       button.set("iconClass", newValue);
+                               }))
+                       ];
+               },
+
+               _setSelectedAttr: function(/*Boolean*/ isSelected){
+                       this._set("selected", isSelected);
+                       this.button.set("selected", isSelected);
+                       if(isSelected){
+                               var cw = this.contentWidget;
+                               if(cw.onSelected){ cw.onSelected(); }
+                       }
+               },
+
+               startup: function(){
+                       // Called by _Container.addChild()
+                       this.contentWidget.startup();
+               },
+
+               destroy: function(){
+                       this.button.destroyRecursive();
+
+                       dojo.forEach(this._contentWidgetWatches || [], function(w){ w.unwatch(); });
+
+                       delete this.contentWidget._buttonWidget;
+                       delete this.contentWidget._wrapperWidget;
+
+                       this.inherited(arguments);
+               },
+               
+               destroyDescendants: function(){
+                       // since getChildren isn't working for me, have to code this manually
+                       this.contentWidget.destroyRecursive();
+               }
 });
-this.inherited(arguments);
-},_transition:function(_10,_11,_12){
-if(this._inTransition){
-return;
-}
-var _13=[];
-var _14=this._verticalSpace;
-if(_10){
-_10._wrapperWidget.set("selected",true);
-this._showChild(_10);
-if(this.doLayout&&_10.resize){
-_10.resize(this._containerContentBox);
-}
-var _15=_10.domNode;
-dojo.addClass(_15,"dijitVisible");
-dojo.removeClass(_15,"dijitHidden");
-if(_12){
-var _16=_15.style.overflow;
-_15.style.overflow="hidden";
-_13.push(dojo.animateProperty({node:_15,duration:this.duration,properties:{height:{start:1,end:this._getTargetHeight(_15)}},onEnd:function(){
-_15.style.overflow=_16;
-if(dojo.isIE){
-setTimeout(function(){
-dojo.removeClass(_15.parentNode,"dijitAccordionInnerContainerFocused");
-setTimeout(function(){
-dojo.addClass(_15.parentNode,"dijitAccordionInnerContainerFocused");
-},0);
-},0);
-}
-}}));
-}
-}
-if(_11){
-_11._wrapperWidget.set("selected",false);
-var _17=_11.domNode;
-if(_12){
-var _18=_17.style.overflow;
-_17.style.overflow="hidden";
-_13.push(dojo.animateProperty({node:_17,duration:this.duration,properties:{height:{start:this._getTargetHeight(_17),end:1}},onEnd:function(){
-dojo.addClass(_17,"dijitHidden");
-dojo.removeClass(_17,"dijitVisible");
-_17.style.overflow=_18;
-if(_11.onHide){
-_11.onHide();
-}
-}}));
-}else{
-dojo.addClass(_17,"dijitHidden");
-dojo.removeClass(_17,"dijitVisible");
-if(_11.onHide){
-_11.onHide();
-}
-}
-}
-if(_12){
-this._inTransition=true;
-var _19=dojo.fx.combine(_13);
-_19.onEnd=dojo.hitch(this,function(){
-delete this._inTransition;
+
+dojo.declare("dijit.layout._AccordionButton",
+       [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
+       {
+       // summary:
+       //              The title bar to click to open up an accordion pane.
+       //              Internal widget used by AccordionContainer.
+       // tags:
+       //              private
+
+       templateString: dojo.cache("dijit.layout", "templates/AccordionButton.html", "<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' role=\"tab\" aria-expanded=\"false\"\n\t\t><span class='dijitInline dijitAccordionArrow' role=\"presentation\"></span\n\t\t><span class='arrowTextUp' role=\"presentation\">+</span\n\t\t><span class='arrowTextDown' role=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" role=\"presentation\"/>\n\t\t<span role=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),
+       attributeMap: dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap), {
+               label: {node: "titleTextNode", type: "innerHTML" },
+               title: {node: "titleTextNode", type: "attribute", attribute: "title"},
+               iconClass: { node: "iconNode", type: "class" }
+       }),
+
+       baseClass: "dijitAccordionTitle",
+
+       getParent: function(){
+               // summary:
+               //              Returns the AccordionContainer parent.
+               // tags:
+               //              private
+               return this.parent;
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+               var titleTextNodeId = this.id.replace(' ','_');
+               dojo.attr(this.titleTextNode, "id", titleTextNodeId+"_title");
+               dijit.setWaiState(this.focusNode, "labelledby", dojo.attr(this.titleTextNode, "id"));
+               dojo.setSelectable(this.domNode, false);
+       },
+
+       getTitleHeight: function(){
+               // summary:
+               //              Returns the height of the title dom node.
+               return dojo._getMarginSize(this.domNode).h;     // Integer
+       },
+
+       // TODO: maybe the parent should set these methods directly rather than forcing the code
+       // into the button widget?
+       _onTitleClick: function(){
+               // summary:
+               //              Callback when someone clicks my title.
+               var parent = this.getParent();
+                       parent.selectChild(this.contentWidget, true);
+                       dijit.focus(this.focusNode);
+       },
+
+       _onTitleKeyPress: function(/*Event*/ evt){
+               return this.getParent()._onKeyPress(evt, this.contentWidget);
+       },
+
+       _setSelectedAttr: function(/*Boolean*/ isSelected){
+               this._set("selected", isSelected);
+               dijit.setWaiState(this.focusNode, "expanded", isSelected);
+               dijit.setWaiState(this.focusNode, "selected", isSelected);
+               this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1");
+       }
 });
-_19.play();
-}
-},_onKeyPress:function(e,_1a){
-if(this._inTransition||this.disabled||e.altKey||!(_1a||e.ctrlKey)){
-if(this._inTransition){
-dojo.stopEvent(e);
-}
-return;
-}
-var k=dojo.keys,c=e.charOrCode;
-if((_1a&&(c==k.LEFT_ARROW||c==k.UP_ARROW))||(e.ctrlKey&&c==k.PAGE_UP)){
-this._adjacent(false)._buttonWidget._onTitleClick();
-dojo.stopEvent(e);
-}else{
-if((_1a&&(c==k.RIGHT_ARROW||c==k.DOWN_ARROW))||(e.ctrlKey&&(c==k.PAGE_DOWN||c==k.TAB))){
-this._adjacent(true)._buttonWidget._onTitleClick();
-dojo.stopEvent(e);
-}
-}
-}});
-dojo.declare("dijit.layout._AccordionInnerContainer",[dijit._Widget,dijit._CssStateMixin],{baseClass:"dijitAccordionInnerContainer",isContainer:true,isLayoutContainer:true,buildRendering:function(){
-this.domNode=dojo.place("<div class='"+this.baseClass+"'>",this.contentWidget.domNode,"after");
-var _1b=this.contentWidget,cls=dojo.getObject(this.buttonWidget);
-this.button=_1b._buttonWidget=(new cls({contentWidget:_1b,label:_1b.title,title:_1b.tooltip,dir:_1b.dir,lang:_1b.lang,iconClass:_1b.iconClass,id:_1b.id+"_button",parent:this.parent})).placeAt(this.domNode);
-dojo.place(this.contentWidget.domNode,this.domNode);
-},postCreate:function(){
-this.inherited(arguments);
-this.connect(this.contentWidget,"set",function(_1c,_1d){
-var _1e={title:"label",tooltip:"title",iconClass:"iconClass"}[_1c];
-if(_1e){
-this.button.set(_1e,_1d);
-}
-},this);
-},_setSelectedAttr:function(_1f){
-this.selected=_1f;
-this.button.set("selected",_1f);
-if(_1f){
-var cw=this.contentWidget;
-if(cw.onSelected){
-cw.onSelected();
-}
-}
-},startup:function(){
-this.contentWidget.startup();
-},destroy:function(){
-this.button.destroyRecursive();
-delete this.contentWidget._buttonWidget;
-delete this.contentWidget._wrapperWidget;
-this.inherited(arguments);
-},destroyDescendants:function(){
-this.contentWidget.destroyRecursive();
-}});
-dojo.declare("dijit.layout._AccordionButton",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:dojo.cache("dijit.layout","templates/AccordionButton.html","<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap),{label:{node:"titleTextNode",type:"innerHTML"},title:{node:"titleTextNode",type:"attribute",attribute:"title"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitAccordionTitle",getParent:function(){
-return this.parent;
-},postCreate:function(){
-this.inherited(arguments);
-dojo.setSelectable(this.domNode,false);
-var _20=dojo.attr(this.domNode,"id").replace(" ","_");
-dojo.attr(this.titleTextNode,"id",_20+"_title");
-dijit.setWaiState(this.focusNode,"labelledby",dojo.attr(this.titleTextNode,"id"));
-},getTitleHeight:function(){
-return dojo.marginBox(this.domNode).h;
-},_onTitleClick:function(){
-var _21=this.getParent();
-if(!_21._inTransition){
-_21.selectChild(this.contentWidget,true);
-dijit.focus(this.focusNode);
-}
-},_onTitleKeyPress:function(evt){
-return this.getParent()._onKeyPress(evt,this.contentWidget);
-},_setSelectedAttr:function(_22){
-this.selected=_22;
-dijit.setWaiState(this.focusNode,"expanded",_22);
-dijit.setWaiState(this.focusNode,"selected",_22);
-this.focusNode.setAttribute("tabIndex",_22?"0":"-1");
-}});
+
 }
index 98b92f8e8f433a8d611f880d8a5845b8e179346d..394ba346c3788799b0e21f10973cb12ab67e8d94 100644 (file)
@@ -1,16 +1,30 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.layout.AccordionPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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(){
-}});
+
+
+dojo.declare("dijit.layout.AccordionPane", dijit.layout.ContentPane, {
+       // summary:
+       //              Deprecated widget.   Use `dijit.layout.ContentPane` instead.
+       // tags:
+       //              deprecated
+
+       constructor: function(){
+               dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead", "", "2.0");
+       },
+
+       onSelected: function(){
+               // summary:
+               //              called when this pane is selected
+       }
+});
+
 }
index 426a662163d595685f3234eae2dc3a446428a11c..c053256d431537826aedd8abc3037aa4972b8079 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.layout.BorderContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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({id:_1.id+"_splitter",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();
-}
-dojo.removeClass(_a.domNode,this.baseClass+"Pane");
-},getChildren:function(){
-return dojo.filter(this.inherited(arguments),function(_d){
-return !_d.isSplitter;
+dojo.require("dijit._Templated");
+
+
+dojo.declare(
+       "dijit.layout.BorderContainer",
+       dijit.layout._LayoutWidget,
+{
+       // summary:
+       //              Provides layout in up to 5 regions, a mandatory center with optional borders along its 4 sides.
+       //
+       // description:
+       //              A BorderContainer is a box with a specified size, such as style="width: 500px; height: 500px;",
+       //              that contains a child widget marked region="center" and optionally children widgets marked
+       //              region equal to "top", "bottom", "leading", "trailing", "left" or "right".
+       //              Children along the edges will be laid out according to width or height dimensions and may
+       //              include optional splitters (splitter="true") to make them resizable by the user.  The remaining
+       //              space is designated for the center region.
+       //
+       //              The outer size must be specified on the BorderContainer node.  Width must be specified for the sides
+       //              and height for the top and bottom, respectively.  No dimensions should be specified on the center;
+       //              it will fill the remaining space.  Regions named "leading" and "trailing" may be used just like
+       //              "left" and "right" except that they will be reversed in right-to-left environments.
+       //
+       //              For complex layouts, multiple children can be specified for a single region.   In this case, the
+       //              layoutPriority flag on the children determines which child is closer to the edge (low layoutPriority)
+       //              and which child is closer to the center (high layoutPriority).   layoutPriority can also be used
+       //              instead of the design attribute to conrol layout precedence of horizontal vs. vertical panes.
+       // example:
+       // |    <div dojoType="dijit.layout.BorderContainer" design="sidebar" gutters="false"
+       // |            style="width: 400px; height: 300px;">
+       // |            <div dojoType="dijit.layout.ContentPane" region="top">header text</div>
+       // |            <div dojoType="dijit.layout.ContentPane" region="right" splitter="true" style="width: 200px;">table of contents</div>
+       // |            <div dojoType="dijit.layout.ContentPane" region="center">client area</div>
+       // |    </div>
+
+       // design: String
+       //              Which design is used for the layout:
+       //                      - "headline" (default) where the top and bottom extend
+       //                              the full width of the container
+       //                      - "sidebar" where the left and right sides extend from top to bottom.
+       design: "headline",
+
+       // gutters: [const] Boolean
+       //              Give each pane a border and margin.
+       //              Margin determined by domNode.paddingLeft.
+       //              When false, only resizable panes have a gutter (i.e. draggable splitter) for resizing.
+       gutters: true,
+
+       // liveSplitters: [const] Boolean
+       //              Specifies whether splitters resize as you drag (true) or only upon mouseup (false)
+       liveSplitters: true,
+
+       // persist: Boolean
+       //              Save splitter positions in a cookie.
+       persist: false,
+
+       baseClass: "dijitBorderContainer",
+
+       // _splitterClass: String
+       //              Optional hook to override the default Splitter widget used by BorderContainer
+       _splitterClass: "dijit.layout._Splitter",
+
+       postMixInProperties: function(){
+               // change class name to indicate that BorderContainer is being used purely for
+               // layout (like LayoutContainer) rather than for pretty formatting.
+               if(!this.gutters){
+                       this.baseClass += "NoGutter";
+               }
+               this.inherited(arguments);
+       },
+
+       startup: function(){
+               if(this._started){ return; }
+               dojo.forEach(this.getChildren(), this._setupChild, this);
+               this.inherited(arguments);
+       },
+
+       _setupChild: function(/*dijit._Widget*/ child){
+               // Override _LayoutWidget._setupChild().
+
+               var region = child.region;
+               if(region){
+                       this.inherited(arguments);
+
+                       dojo.addClass(child.domNode, this.baseClass+"Pane");
+
+                       var ltr = this.isLeftToRight();
+                       if(region == "leading"){ region = ltr ? "left" : "right"; }
+                       if(region == "trailing"){ region = ltr ? "right" : "left"; }
+
+                       // Create draggable splitter for resizing pane,
+                       // or alternately if splitter=false but BorderContainer.gutters=true then
+                       // insert dummy div just for spacing
+                       if(region != "center" && (child.splitter || this.gutters) && !child._splitterWidget){
+                               var _Splitter = dojo.getObject(child.splitter ? this._splitterClass : "dijit.layout._Gutter");
+                               var splitter = new _Splitter({
+                                       id: child.id + "_splitter",
+                                       container: this,
+                                       child: child,
+                                       region: region,
+                                       live: this.liveSplitters
+                               });
+                               splitter.isSplitter = true;
+                               child._splitterWidget = splitter;
+
+                               dojo.place(splitter.domNode, child.domNode, "after");
+
+                               // Splitters aren't added as Contained children, so we need to call startup explicitly
+                               splitter.startup();
+                       }
+                       child.region = region;  // TODO: technically wrong since it overwrites "trailing" with "left" etc.
+               }
+       },
+
+       layout: function(){
+               // Implement _LayoutWidget.layout() virtual method.
+               this._layoutChildren();
+       },
+
+       addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+               // Override _LayoutWidget.addChild().
+               this.inherited(arguments);
+               if(this._started){
+                       this.layout(); //OPT
+               }
+       },
+
+       removeChild: function(/*dijit._Widget*/ child){
+               // Override _LayoutWidget.removeChild().
+
+               var region = child.region;
+               var splitter = child._splitterWidget
+               if(splitter){
+                       splitter.destroy();
+                       delete child._splitterWidget;
+               }
+               this.inherited(arguments);
+               
+               if(this._started){
+                       this._layoutChildren();
+               }
+               // Clean up whatever style changes we made to the child pane.
+               // Unclear how height and width should be handled.
+               dojo.removeClass(child.domNode, this.baseClass+"Pane");
+               dojo.style(child.domNode, {
+                       top: "auto",
+                       bottom: "auto",
+                       left: "auto",
+                       right: "auto",
+                       position: "static"
+               });
+               dojo.style(child.domNode, region == "top" || region == "bottom" ? "width" : "height", "auto");
+       },
+
+       getChildren: function(){
+               // Override _LayoutWidget.getChildren() to only return real children, not the splitters.
+               return dojo.filter(this.inherited(arguments), function(widget){
+                       return !widget.isSplitter;
+               });
+       },
+
+       // TODO: remove in 2.0
+       getSplitter: function(/*String*/region){
+               // summary:
+               //              Returns the widget responsible for rendering the splitter associated with region
+               // tags:
+               //              deprecated
+               return dojo.filter(this.getChildren(), function(child){
+                       return child.region == region;
+               })[0]._splitterWidget;
+       },
+
+       resize: function(newSize, currentSize){
+               // Overrides _LayoutWidget.resize().
+
+               // resetting potential padding to 0px to provide support for 100% width/height + padding
+               // TODO: this hack doesn't respect the box model and is a temporary fix
+               if(!this.cs || !this.pe){
+                       var node = this.domNode;
+                       this.cs = dojo.getComputedStyle(node);
+                       this.pe = dojo._getPadExtents(node, this.cs);
+                       this.pe.r = dojo._toPixelValue(node, this.cs.paddingRight);
+                       this.pe.b = dojo._toPixelValue(node, this.cs.paddingBottom);
+
+                       dojo.style(node, "padding", "0px");
+               }
+
+               this.inherited(arguments);
+       },
+
+       _layoutChildren: function(/*String?*/ changedChildId, /*Number?*/ changedChildSize){
+               // summary:
+               //              This is the main routine for setting size/position of each child.
+               // description:
+               //              With no arguments, measures the height of top/bottom panes, the width
+               //              of left/right panes, and then sizes all panes accordingly.
+               //
+               //              With changedRegion specified (as "left", "top", "bottom", or "right"),
+               //              it changes that region's width/height to changedRegionSize and
+               //              then resizes other regions that were affected.
+               // changedChildId:
+               //              Id of the child which should be resized because splitter was dragged.
+               // changedChildSize:
+               //              The new width/height (in pixels) to make specified child
+
+               if(!this._borderBox || !this._borderBox.h){
+                       // We are currently hidden, or we haven't been sized by our parent yet.
+                       // Abort.   Someone will resize us later.
+                       return;
+               }
+
+               // Generate list of wrappers of my children in the order that I want layoutChildren()
+               // to process them (i.e. from the outside to the inside)
+               var wrappers = dojo.map(this.getChildren(), function(child, idx){
+                       return {
+                               pane: child,
+                               weight: [
+                                       child.region == "center" ? Infinity : 0,
+                                       child.layoutPriority,
+                                       (this.design == "sidebar" ? 1 : -1) * (/top|bottom/.test(child.region) ? 1 : -1),
+                                       idx
+                               ]
+                       };
+               }, this);
+               wrappers.sort(function(a, b){
+                       var aw = a.weight, bw = b.weight;
+                       for(var i=0; i<aw.length; i++){
+                               if(aw[i] != bw[i]){
+                                       return aw[i] - bw[i];
+                               }
+                       }
+                       return 0;
+               });
+
+               // Make new list, combining the externally specified children with splitters and gutters
+               var childrenAndSplitters = [];
+               dojo.forEach(wrappers, function(wrapper){
+                       var pane = wrapper.pane;
+                       childrenAndSplitters.push(pane);
+                       if(pane._splitterWidget){
+                               childrenAndSplitters.push(pane._splitterWidget);
+                       }
+               });
+
+               // Compute the box in which to lay out my children
+               var dim = {
+                       l: this.pe.l,
+                       t: this.pe.t,
+                       w: this._borderBox.w - this.pe.w,
+                       h: this._borderBox.h - this.pe.h
+               };
+
+               // Layout the children, possibly changing size due to a splitter drag
+               dijit.layout.layoutChildren(this.domNode, dim, childrenAndSplitters,
+                       changedChildId, changedChildSize);
+       },
+
+       destroyRecursive: function(){
+               // Destroy splitters first, while getChildren() still works
+               dojo.forEach(this.getChildren(), function(child){
+                       var splitter = child._splitterWidget;
+                       if(splitter){
+                               splitter.destroy();
+                       }
+                       delete child._splitterWidget;
+               });
+
+               // Then destroy the real children, and myself
+               this.inherited(arguments);
+       }
 });
-},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,_14){
-if(!this._borderBox||!this._borderBox.h){
-return;
-}
-var _15=(this.design=="sidebar");
-var _16=0,_17=0,_18=0,_19=0;
-var _1a={},_1b={},_1c={},_1d={},_1e=(this._center&&this._center.style)||{};
-var _1f=/left|right/.test(_13);
-var _20=!_13||(!_1f&&!_15);
-var _21=!_13||(_1f&&_15);
-if(this._top){
-_1a=(_13=="top"||_21)&&this._top.style;
-_16=_13=="top"?_14:dojo.marginBox(this._top).h;
-}
-if(this._left){
-_1b=(_13=="left"||_20)&&this._left.style;
-_18=_13=="left"?_14:dojo.marginBox(this._left).w;
-}
-if(this._right){
-_1c=(_13=="right"||_20)&&this._right.style;
-_19=_13=="right"?_14:dojo.marginBox(this._right).w;
-}
-if(this._bottom){
-_1d=(_13=="bottom"||_21)&&this._bottom.style;
-_17=_13=="bottom"?_14:dojo.marginBox(this._bottom).h;
-}
-var _22=this._splitters;
-var _23=_22.top,_24=_22.bottom,_25=_22.left,_26=_22.right;
-var _27=this._splitterThickness;
-var _28=_27.top||0,_29=_27.left||0,_2a=_27.right||0,_2b=_27.bottom||0;
-if(_29>50||_2a>50){
-setTimeout(dojo.hitch(this,function(){
-this._splitterThickness={};
-for(var _2c in this._splitters){
-this._computeSplitterThickness(_2c);
-}
-this._layoutChildren();
-}),50);
-return false;
-}
-var pe=this.pe;
-var _2d={left:(_15?_18+_29:0)+pe.l+"px",right:(_15?_19+_2a:0)+pe.r+"px"};
-if(_23){
-dojo.mixin(_23.style,_2d);
-_23.style.top=_16+pe.t+"px";
-}
-if(_24){
-dojo.mixin(_24.style,_2d);
-_24.style.bottom=_17+pe.b+"px";
-}
-_2d={top:(_15?0:_16+_28)+pe.t+"px",bottom:(_15?0:_17+_2b)+pe.b+"px"};
-if(_25){
-dojo.mixin(_25.style,_2d);
-_25.style.left=_18+pe.l+"px";
-}
-if(_26){
-dojo.mixin(_26.style,_2d);
-_26.style.right=_19+pe.r+"px";
-}
-dojo.mixin(_1e,{top:pe.t+_16+_28+"px",left:pe.l+_18+_29+"px",right:pe.r+_19+_2a+"px",bottom:pe.b+_17+_2b+"px"});
-var _2e={top:_15?pe.t+"px":_1e.top,bottom:_15?pe.b+"px":_1e.bottom};
-dojo.mixin(_1b,_2e);
-dojo.mixin(_1c,_2e);
-_1b.left=pe.l+"px";
-_1c.right=pe.r+"px";
-_1a.top=pe.t+"px";
-_1d.bottom=pe.b+"px";
-if(_15){
-_1a.left=_1d.left=_18+_29+pe.l+"px";
-_1a.right=_1d.right=_19+_2a+pe.r+"px";
-}else{
-_1a.left=_1d.left=pe.l+"px";
-_1a.right=_1d.right=pe.r+"px";
-}
-var _2f=this._borderBox.h-pe.t-pe.b,_30=_2f-(_16+_28+_17+_2b),_31=_15?_2f:_30;
-var _32=this._borderBox.w-pe.l-pe.r,_33=_32-(_18+_29+_19+_2a),_34=_15?_33:_32;
-var dim={top:{w:_34,h:_16},bottom:{w:_34,h:_17},left:{w:_18,h:_31},right:{w:_19,h:_31},center:{h:_30,w:_33}};
-if(_13){
-var _35=this["_"+_13+"Widget"],mb={};
-mb[/top|bottom/.test(_13)?"h":"w"]=_14;
-_35.resize?_35.resize(mb,dim[_35.region]):dojo.marginBox(_35.domNode,mb);
-}
-var _36=dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.some(this.getChildren(),function(_37){
-return _37.domNode.tagName=="TEXTAREA"||_37.domNode.tagName=="INPUT";
+
+// This argument can be specified for the children of a BorderContainer.
+// Since any widget can be specified as a LayoutContainer child, mix it
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget, {
+       // region: [const] String
+       //              Parameter for children of `dijit.layout.BorderContainer`.
+       //              Values: "top", "bottom", "leading", "trailing", "left", "right", "center".
+       //              See the `dijit.layout.BorderContainer` description for details.
+       region: '',
+
+       // layoutPriority: [const] Number
+       //              Parameter for children of `dijit.layout.BorderContainer`.
+       //              Children with a higher layoutPriority will be placed closer to the BorderContainer center,
+       //              between children with a lower layoutPriority.
+       layoutPriority: 0,
+
+       // splitter: [const] Boolean
+       //              Parameter for child of `dijit.layout.BorderContainer` where region != "center".
+       //              If true, enables user to resize the widget by putting a draggable splitter between
+       //              this widget and the region=center widget.
+       splitter: false,
+
+       // minSize: [const] Number
+       //              Parameter for children of `dijit.layout.BorderContainer`.
+       //              Specifies a minimum size (in pixels) for this widget when resized by a splitter.
+       minSize: 0,
+
+       // maxSize: [const] Number
+       //              Parameter for children of `dijit.layout.BorderContainer`.
+       //              Specifies a maximum size (in pixels) for this widget when resized by a splitter.
+       maxSize: Infinity
 });
-if(_36){
-var _38=function(_39,_3a,_3b){
-if(_39){
-(_39.resize?_39.resize(_3a,_3b):dojo.marginBox(_39.domNode,_3a));
-}
-};
-if(_25){
-_25.style.height=_31;
-}
-if(_26){
-_26.style.height=_31;
-}
-_38(this._leftWidget,{h:_31},dim.left);
-_38(this._rightWidget,{h:_31},dim.right);
-if(_23){
-_23.style.width=_34;
-}
-if(_24){
-_24.style.width=_34;
-}
-_38(this._topWidget,{w:_34},dim.top);
-_38(this._bottomWidget,{w:_34},dim.bottom);
-_38(this._centerWidget,dim.center);
-}else{
-var _3c=!_13||(/top|bottom/.test(_13)&&this.design!="sidebar"),_3d=!_13||(/left|right/.test(_13)&&this.design=="sidebar"),_3e={center:true,left:_3c,right:_3c,top:_3d,bottom:_3d};
-dojo.forEach(this.getChildren(),function(_3f){
-if(_3f.resize&&_3e[_3f.region]){
-_3f.resize(null,dim[_3f.region]);
-}
-},this);
-}
-},destroy:function(){
-for(var _40 in this._splitters){
-var _41=this._splitters[_40];
-dijit.byNode(_41).destroy();
-dojo.destroy(_41);
-}
-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 _42=dojo.cookie(this._cookieName);
-if(_42){
-this.child.domNode.style[this.horizontal?"height":"width"]=_42;
-}
-}
-},_computeMaxSize:function(){
-var dim=this.horizontal?"h":"w",_43=this.container._splitterThickness[this.region];
-var _44={left:"right",right:"left",top:"bottom",bottom:"top",leading:"trailing",trailing:"leading"},_45=this.container["_"+_44[this.region]];
-var _46=dojo.contentBox(this.container.domNode)[dim]-(_45?dojo.marginBox(_45)[dim]:0)-20-_43*2;
-return Math.min(this.child.maxSize,_46);
-},_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 _47=this._factor,max=this._computeMaxSize(),min=this.child.minSize||20,_48=this.horizontal,_49=_48?"pageY":"pageX",_4a=e[_49],_4b=this.domNode.style,dim=_48?"h":"w",_4c=dojo.marginBox(this.child.domNode)[dim],_4d=this.region,_4e=parseInt(this.domNode.style[_4d],10),_4f=this._resize,_50=this.child.domNode,_51=dojo.hitch(this.container,this.container._layoutChildren),de=dojo.doc;
-this._handlers=(this._handlers||[]).concat([dojo.connect(de,"onmousemove",this._drag=function(e,_52){
-var _53=e[_49]-_4a,_54=_47*_53+_4c,_55=Math.max(Math.min(_54,max),min);
-if(_4f||_52){
-_51(_4d,_55);
-}
-_4b[_4d]=_47*_53+_4e+(_55-_54)+"px";
-}),dojo.connect(de,"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 _56=this.horizontal;
-var _57=1;
-var dk=dojo.keys;
-switch(e.charOrCode){
-case _56?dk.UP_ARROW:dk.LEFT_ARROW:
-_57*=-1;
-case _56?dk.DOWN_ARROW:dk.RIGHT_ARROW:
-break;
-default:
-return;
-}
-var _58=dojo.marginBox(this.child.domNode)[_56?"h":"w"]+this._factor*_57;
-this.container._layoutChildren(this.region,Math.max(Math.min(_58,this._computeMaxSize()),this.child.minSize));
-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"));
-}});
+
+dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
+{
+       // summary:
+       //              A draggable spacer between two items in a `dijit.layout.BorderContainer`.
+       // description:
+       //              This is instantiated by `dijit.layout.BorderContainer`.  Users should not
+       //              create it directly.
+       // tags:
+       //              private
+
+/*=====
+       // container: [const] dijit.layout.BorderContainer
+       //              Pointer to the parent BorderContainer
+       container: null,
+
+       // child: [const] dijit.layout._LayoutWidget
+       //              Pointer to the pane associated with this splitter
+       child: null,
+
+       // region: [const] String
+       //              Region of pane associated with this splitter.
+       //              "top", "bottom", "left", "right".
+       region: null,
+=====*/
+
+       // live: [const] Boolean
+       //              If true, the child's size changes and the child widget is redrawn as you drag the splitter;
+       //              otherwise, the size doesn't change until you drop the splitter (by mouse-up)
+       live: true,
+
+       templateString: '<div class="dijitSplitter" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse" tabIndex="0" role="separator"><div class="dijitSplitterThumb"></div></div>',
+
+       postMixInProperties: function(){
+               this.inherited(arguments);
+
+               this.horizontal = /top|bottom/.test(this.region);
+               this._factor = /top|left/.test(this.region) ? 1 : -1;
+               this._cookieName = this.container.id + "_" + this.region;
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+
+               dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V"));
+
+               if(this.container.persist){
+                       // restore old size
+                       var persistSize = dojo.cookie(this._cookieName);
+                       if(persistSize){
+                               this.child.domNode.style[this.horizontal ? "height" : "width"] = persistSize;
+                       }
+               }
+       },
+
+       _computeMaxSize: function(){
+               // summary:
+               //              Return the maximum size that my corresponding pane can be set to
+
+               var dim = this.horizontal ? 'h' : 'w',
+                       childSize = dojo.marginBox(this.child.domNode)[dim],
+                       center = dojo.filter(this.container.getChildren(), function(child){ return child.region == "center";})[0],
+                       spaceAvailable = dojo.marginBox(center.domNode)[dim];   // can expand until center is crushed to 0
+
+               return Math.min(this.child.maxSize, childSize + spaceAvailable);
+       },
+
+       _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");
+
+               // Safeguard in case the stop event was missed.  Shouldn't be necessary if we always get the mouse up.
+               if(this.fake){ dojo.destroy(this.fake); }
+               if(!(this._resize = this.live)){ //TODO: disable live for IE6?
+                       // create fake splitter to display at old position while we drag
+                       (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 dijitSplitter" + (this.horizontal ? "H" : "V") + "Active");
+               if(this.fake){
+                       dojo.removeClass(this.fake, "dijitSplitterHover dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover");
+               }
+
+               //Performance: load data info local vars for onmousevent function closure
+               var factor = this._factor,
+                       isHorizontal = this.horizontal,
+                       axis = isHorizontal ? "pageY" : "pageX",
+                       pageStart = e[axis],
+                       splitterStyle = this.domNode.style,
+                       dim = isHorizontal ? 'h' : 'w',
+                       childStart = dojo.marginBox(this.child.domNode)[dim],
+                       max = this._computeMaxSize(),
+                       min = this.child.minSize || 20,
+                       region = this.region,
+                       splitterAttr = region == "top" || region == "bottom" ? "top" : "left",  // style attribute of splitter to adjust
+                       splitterStart = parseInt(splitterStyle[splitterAttr], 10),
+                       resize = this._resize,
+                       layoutFunc = dojo.hitch(this.container, "_layoutChildren", this.child.id),
+                       de = dojo.doc;
+
+               this._handlers = (this._handlers || []).concat([
+                       dojo.connect(de, "onmousemove", this._drag = function(e, forceResize){
+                               var delta = e[axis] - pageStart,
+                                       childSize = factor * delta + childStart,
+                                       boundChildSize = Math.max(Math.min(childSize, max), min);
+
+                               if(resize || forceResize){
+                                       layoutFunc(boundChildSize);
+                               }
+                               // TODO: setting style directly (usually) sets content box size, need to set margin box size
+                               splitterStyle[splitterAttr] = delta + splitterStart + factor*(boundChildSize - childSize) + "px";
+                       }),
+                       dojo.connect(de, "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 dijitSplitter"
+                               + (this.horizontal ? "H" : "V") + "Active dijitSplitterShadow");
+                       this._drag(e); //TODO: redundant with onmousemove?
+                       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(/*Event*/ e){
+               // should we apply typematic to this?
+               this._resize = true;
+               var horizontal = this.horizontal;
+               var tick = 1;
+               var dk = dojo.keys;
+               switch(e.charOrCode){
+                       case horizontal ? dk.UP_ARROW : dk.LEFT_ARROW:
+                               tick *= -1;
+//                             break;
+                       case horizontal ? dk.DOWN_ARROW : dk.RIGHT_ARROW:
+                               break;
+                       default:
+//                             this.inherited(arguments);
+                               return;
+               }
+               var childSize = dojo._getMarginSize(this.child.domNode)[ horizontal ? 'h' : 'w' ] + this._factor * tick;
+               this.container._layoutChildren(this.child.id, Math.max(Math.min(childSize, this._computeMaxSize()), this.child.minSize));
+               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],
+{
+       // summary:
+       //              Just a spacer div to separate side pane from center pane.
+       //              Basically a trick to lookup the gutter/splitter width from the theme.
+       // description:
+       //              Instantiated by `dijit.layout.BorderContainer`.  Users should not
+       //              create directly.
+       // tags:
+       //              private
+
+       templateString: '<div class="dijitGutter" role="presentation"></div>',
+
+       postMixInProperties: function(){
+               this.inherited(arguments);
+               this.horizontal = /top|bottom/.test(this.region);
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+               dojo.addClass(this.domNode, "dijitGutter" + (this.horizontal ? "H" : "V"));
+       }
+});
+
 }
index 56952800a49b57df1b2ee8af50486ad4b8ed8a28..399ec1bc9e4844804a207e3362b0bcc00fadb06e 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.ContentPane"]){
-dojo._hasResource["dijit.layout.ContentPane"]=true;
+if(!dojo._hasResource["dijit.layout.ContentPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.ContentPane"] = true;
 dojo.provide("dijit.layout.ContentPane");
 dojo.require("dijit._Widget");
-dojo.require("dijit._Contained");
-dojo.require("dijit.layout._LayoutWidget");
-dojo.require("dojo.parser");
+dojo.require("dijit.layout._ContentPaneResizeMixin");
 dojo.require("dojo.string");
 dojo.require("dojo.html");
-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,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
-dojo.declare("dijit.layout.ContentPane",dijit._Widget,{href:"",extractContent:false,parseOnLoad:true,preventCache:false,preload:false,refreshOnShow:false,loadingMessage:"<span class='dijitContentPaneLoading'>${loadingState}</span>",errorMessage:"<span class='dijitContentPaneError'>${errorState}</span>",isLoaded:false,baseClass:"dijitContentPane",doLayout:true,ioArgs:{},isContainer:true,isLayoutContainer:true,onLoadDeferred:null,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[]}),postMixInProperties:function(){
-this.inherited(arguments);
-var _1=dojo.i18n.getLocalization("dijit","loading",this.lang);
-this.loadingMessage=dojo.string.substitute(this.loadingMessage,_1);
-this.errorMessage=dojo.string.substitute(this.errorMessage,_1);
-if(!this.href&&this.srcNodeRef&&this.srcNodeRef.innerHTML){
-this.isLoaded=true;
-}
-},buildRendering:function(){
-this.inherited(arguments);
-if(!this.containerNode){
-this.containerNode=this.domNode;
-}
-},postCreate:function(){
-this.domNode.title="";
-if(!dojo.attr(this.domNode,"role")){
-dijit.setWaiRole(this.domNode,"group");
-}
-dojo.addClass(this.domNode,this.baseClass);
-},startup:function(){
-if(this._started){
-return;
-}
-var _2=dijit._Contained.prototype.getParent.call(this);
-this._childOfLayoutWidget=_2&&_2.isLayoutContainer;
-this._needLayout=!this._childOfLayoutWidget;
-if(this.isLoaded){
-dojo.forEach(this.getChildren(),function(_3){
-_3.startup();
-});
-}
-if(this._isShown()||this.preload){
-this._onShow();
-}
-this.inherited(arguments);
-},_checkIfSingleChild:function(){
-var _4=dojo.query("> *",this.containerNode).filter(function(_5){
-return _5.tagName!=="SCRIPT";
-}),_6=_4.filter(function(_7){
-return dojo.hasAttr(_7,"dojoType")||dojo.hasAttr(_7,"widgetId");
-}),_8=dojo.filter(_6.map(dijit.byNode),function(_9){
-return _9&&_9.domNode&&_9.resize;
-});
-if(_4.length==_6.length&&_8.length==1){
-this._singleChild=_8[0];
-}else{
-delete this._singleChild;
-}
-dojo.toggleClass(this.containerNode,this.baseClass+"SingleChild",!!this._singleChild);
-},setHref:function(_a){
-dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.","","2.0");
-return this.set("href",_a);
-},_setHrefAttr:function(_b){
-this.cancel();
-this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));
-this.href=_b;
-if(this._created&&(this.preload||this._isShown())){
-this._load();
-}else{
-this._hrefChanged=true;
-}
-return this.onLoadDeferred;
-},setContent:function(_c){
-dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated.  Use set('content', ...) instead.","","2.0");
-this.set("content",_c);
-},_setContentAttr:function(_d){
-this.href="";
-this.cancel();
-this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));
-this._setContent(_d||"");
-this._isDownloaded=false;
-return this.onLoadDeferred;
-},_getContentAttr:function(){
-return this.containerNode.innerHTML;
-},cancel:function(){
-if(this._xhrDfd&&(this._xhrDfd.fired==-1)){
-this._xhrDfd.cancel();
-}
-delete this._xhrDfd;
-this.onLoadDeferred=null;
-},uninitialize:function(){
-if(this._beingDestroyed){
-this.cancel();
-}
-this.inherited(arguments);
-},destroyRecursive:function(_e){
-if(this._beingDestroyed){
-return;
-}
-this.inherited(arguments);
-},resize:function(_f,_10){
-if(!this._wasShown){
-this._onShow();
-}
-this._resizeCalled=true;
-if(_f){
-dojo.marginBox(this.domNode,_f);
-}
-var cn=this.containerNode;
-if(cn===this.domNode){
-var mb=_10||{};
-dojo.mixin(mb,_f||{});
-if(!("h" in mb)||!("w" in mb)){
-mb=dojo.mixin(dojo.marginBox(cn),mb);
-}
-this._contentBox=dijit.layout.marginBox2contentBox(cn,mb);
-}else{
-this._contentBox=dojo.contentBox(cn);
-}
-this._layoutChildren();
-},_isShown:function(){
-if(this._childOfLayoutWidget){
-if(this._resizeCalled&&"open" in this){
-return this.open;
-}
-return this._resizeCalled;
-}else{
-if("open" in this){
-return this.open;
-}else{
-var _11=this.domNode;
-return (_11.style.display!="none")&&(_11.style.visibility!="hidden")&&!dojo.hasClass(_11,"dijitHidden");
-}
-}
-},_onShow:function(){
-if(this.href){
-if(!this._xhrDfd&&(!this.isLoaded||this._hrefChanged||this.refreshOnShow)){
-this.refresh();
-}
-}else{
-if(!this._childOfLayoutWidget&&this._needLayout){
-this._layoutChildren();
-}
-}
-this.inherited(arguments);
-this._wasShown=true;
-},refresh:function(){
-this.cancel();
-this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));
-this._load();
-return this.onLoadDeferred;
-},_load:function(){
-this._setContent(this.onDownloadStart(),true);
-var _12=this;
-var _13={preventCache:(this.preventCache||this.refreshOnShow),url:this.href,handleAs:"text"};
-if(dojo.isObject(this.ioArgs)){
-dojo.mixin(_13,this.ioArgs);
-}
-var _14=(this._xhrDfd=(this.ioMethod||dojo.xhrGet)(_13));
-_14.addCallback(function(_15){
-try{
-_12._isDownloaded=true;
-_12._setContent(_15,false);
-_12.onDownloadEnd();
-}
-catch(err){
-_12._onError("Content",err);
-}
-delete _12._xhrDfd;
-return _15;
-});
-_14.addErrback(function(err){
-if(!_14.canceled){
-_12._onError("Download",err);
-}
-delete _12._xhrDfd;
-return err;
-});
-delete this._hrefChanged;
-},_onLoadHandler:function(_16){
-this.isLoaded=true;
-try{
-this.onLoadDeferred.callback(_16);
-this.onLoad(_16);
-}
-catch(e){
-console.error("Error "+this.widgetId+" running custom onLoad code: "+e.message);
-}
-},_onUnloadHandler:function(){
-this.isLoaded=false;
-try{
-this.onUnload();
-}
-catch(e){
-console.error("Error "+this.widgetId+" running custom onUnload code: "+e.message);
-}
-},destroyDescendants:function(){
-if(this.isLoaded){
-this._onUnloadHandler();
-}
-var _17=this._contentSetter;
-dojo.forEach(this.getChildren(),function(_18){
-if(_18.destroyRecursive){
-_18.destroyRecursive();
-}
-});
-if(_17){
-dojo.forEach(_17.parseResults,function(_19){
-if(_19.destroyRecursive&&_19.domNode&&_19.domNode.parentNode==dojo.body()){
-_19.destroyRecursive();
-}
-});
-delete _17.parseResults;
-}
-dojo.html._emptyNode(this.containerNode);
-delete this._singleChild;
-},_setContent:function(_1a,_1b){
-this.destroyDescendants();
-var _1c=this._contentSetter;
-if(!(_1c&&_1c instanceof dojo.html._ContentSetter)){
-_1c=this._contentSetter=new dojo.html._ContentSetter({node:this.containerNode,_onError:dojo.hitch(this,this._onError),onContentError:dojo.hitch(this,function(e){
-var _1d=this.onContentError(e);
-try{
-this.containerNode.innerHTML=_1d;
-}
-catch(e){
-console.error("Fatal "+this.id+" could not change content due to "+e.message,e);
-}
-})});
-}
-var _1e=dojo.mixin({cleanContent:this.cleanContent,extractContent:this.extractContent,parseContent:this.parseOnLoad,dir:this.dir,lang:this.lang},this._contentSetterParams||{});
-dojo.mixin(_1c,_1e);
-_1c.set((dojo.isObject(_1a)&&_1a.domNode)?_1a.domNode:_1a);
-delete this._contentSetterParams;
-if(!_1b){
-dojo.forEach(this.getChildren(),function(_1f){
-if(!this.parseOnLoad||_1f.getParent){
-_1f.startup();
-}
-},this);
-this._scheduleLayout();
-this._onLoadHandler(_1a);
-}
-},_onError:function(_20,err,_21){
-this.onLoadDeferred.errback(err);
-var _22=this["on"+_20+"Error"].call(this,err);
-if(_21){
-console.error(_21,err);
-}else{
-if(_22){
-this._setContent(_22,true);
-}
-}
-},_scheduleLayout:function(){
-if(this._isShown()){
-this._layoutChildren();
-}else{
-this._needLayout=true;
-}
-},_layoutChildren:function(){
-if(this.doLayout){
-this._checkIfSingleChild();
-}
-if(this._singleChild&&this._singleChild.resize){
-var cb=this._contentBox||dojo.contentBox(this.containerNode);
-this._singleChild.resize({w:cb.w,h:cb.h});
-}else{
-dojo.forEach(this.getChildren(),function(_23){
-if(_23.resize){
-_23.resize();
-}
+dojo.requireLocalization("dijit", "loading", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare(
+       "dijit.layout.ContentPane", [dijit._Widget, dijit.layout._ContentPaneResizeMixin],
+{
+       // summary:
+       //              A widget containing an HTML fragment, specified inline
+       //              or by uri.  Fragment may include widgets.
+       //
+       // description:
+       //              This widget embeds a document fragment in the page, specified
+       //              either by uri, javascript generated markup or DOM reference.
+       //              Any widgets within this content are instantiated and managed,
+       //              but laid out according to the HTML structure.  Unlike IFRAME,
+       //              ContentPane embeds a document fragment as would be found
+       //              inside the BODY tag of a full HTML document.  It should not
+       //              contain the HTML, HEAD, or BODY tags.
+       //              For more advanced functionality with scripts and
+       //              stylesheets, see dojox.layout.ContentPane.  This widget may be
+       //              used stand alone or as a base class for other widgets.
+       //              ContentPane is useful as a child of other layout containers
+       //              such as BorderContainer or TabContainer, but note that those
+       //              widgets can contain any widget as a child.
+       //
+       // example:
+       //              Some quick samples:
+       //              To change the innerHTML: cp.set('content', '<b>new content</b>')
+       //
+       //              Or you can send it a NodeList: cp.set('content', dojo.query('div [class=selected]', userSelection))
+       //
+       //              To do an ajax update: cp.set('href', url)
+
+       // href: String
+       //              The href of the content that displays now.
+       //              Set this at construction if you want to load data externally when the
+       //              pane is shown.  (Set preload=true to load it immediately.)
+       //              Changing href after creation doesn't have any effect; Use set('href', ...);
+       href: "",
+
+/*=====
+       // content: String || DomNode || NodeList || dijit._Widget
+       //              The innerHTML of the ContentPane.
+       //              Note that the initialization parameter / argument to set("content", ...)
+       //              can be a String, DomNode, Nodelist, or _Widget.
+       content: "",
+=====*/
+
+       // extractContent: Boolean
+       //              Extract visible content from inside of <body> .... </body>.
+       //              I.e., strip <html> and <head> (and it's contents) from the href
+       extractContent: false,
+
+       // parseOnLoad: Boolean
+       //              Parse content and create the widgets, if any.
+       parseOnLoad: true,
+
+       // parserScope: String
+       //              Flag passed to parser.  Root for attribute names to search for.   If scopeName is dojo,
+       //              will search for data-dojo-type (or dojoType).  For backwards compatibility
+       //              reasons defaults to dojo._scopeName (which is "dojo" except when
+       //              multi-version support is used, when it will be something like dojo16, dojo20, etc.)
+       parserScope: dojo._scopeName,
+
+       // preventCache: Boolean
+       //              Prevent caching of data from href's by appending a timestamp to the href.
+       preventCache: false,
+
+       // preload: Boolean
+       //              Force load of data on initialization even if pane is hidden.
+       preload: false,
+
+       // refreshOnShow: Boolean
+       //              Refresh (re-download) content when pane goes from hidden to shown
+       refreshOnShow: false,
+
+       // loadingMessage: String
+       //              Message that shows while downloading
+       loadingMessage: "<span class='dijitContentPaneLoading'>${loadingState}</span>",
+
+       // errorMessage: String
+       //              Message that shows if an error occurs
+       errorMessage: "<span class='dijitContentPaneError'>${errorState}</span>",
+
+       // isLoaded: [readonly] Boolean
+       //              True if the ContentPane has data in it, either specified
+       //              during initialization (via href or inline content), or set
+       //              via set('content', ...) / set('href', ...)
+       //
+       //              False if it doesn't have any content, or if ContentPane is
+       //              still in the process of downloading href.
+       isLoaded: false,
+
+       baseClass: "dijitContentPane",
+
+       // ioArgs: Object
+       //              Parameters to pass to xhrGet() request, for example:
+       // |    <div dojoType="dijit.layout.ContentPane" href="./bar" ioArgs="{timeout: 500}">
+       ioArgs: {},
+
+       // onLoadDeferred: [readonly] dojo.Deferred
+       //              This is the `dojo.Deferred` returned by set('href', ...) and refresh().
+       //              Calling onLoadDeferred.addCallback() or addErrback() registers your
+       //              callback to be called only once, when the prior set('href', ...) call or
+       //              the initial href parameter to the constructor finishes loading.
+       //
+       //              This is different than an onLoad() handler which gets called any time any href
+       //              or content is loaded.
+       onLoadDeferred: null,
+
+       // Override _Widget's attributeMap because we don't want the title attribute (used to specify
+       // tab labels) to be copied to ContentPane.domNode... otherwise a tooltip shows up over the
+       // entire pane.
+       attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+               title: []
+       }),
+
+       // Flag to parser that I'll parse my contents, so it shouldn't.
+       stopParser: true,
+
+       // template: [private] Boolean
+       //              Flag from the parser that this ContentPane is inside a template
+       //              so the contents are pre-parsed.
+       // (TODO: this declaration can be commented out in 2.0)
+       template: false,
+
+       create: function(params, srcNodeRef){
+               // Convert a srcNodeRef argument into a content parameter, so that the original contents are
+               // processed in the same way as contents set via set("content", ...), calling the parser etc.
+               // Avoid modifying original params object since that breaks NodeList instantiation, see #11906.
+               if((!params || !params.template) && srcNodeRef && !("href" in params) && !("content" in params)){
+                       var df = dojo.doc.createDocumentFragment();
+                       srcNodeRef = dojo.byId(srcNodeRef)
+                       while(srcNodeRef.firstChild){
+                               df.appendChild(srcNodeRef.firstChild);
+                       }
+                       params = dojo.delegate(params, {content: df});
+               }
+               this.inherited(arguments, [params, srcNodeRef]);
+       },
+
+       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);
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+
+               // Since we have no template we need to set this.containerNode ourselves, to make getChildren() work.
+               // For subclasses of ContentPane that do have a template, does nothing.
+               if(!this.containerNode){
+                       this.containerNode = this.domNode;
+               }
+
+               // remove the title attribute so it doesn't show up when hovering
+               // over a node  (TODO: remove in 2.0, no longer needed after #11490)
+               this.domNode.title = "";
+
+               if(!dojo.attr(this.domNode,"role")){
+                       dijit.setWaiRole(this.domNode, "group");
+               }
+       },
+
+       _startChildren: function(){
+               // summary:
+               //              Call startup() on all children including non _Widget ones like dojo.dnd.Source objects
+
+               // This starts all the widgets
+               this.inherited(arguments);
+
+               // And this catches stuff like dojo.dnd.Source
+               if(this._contentSetter){
+                       dojo.forEach(this._contentSetter.parseResults, function(obj){
+                               if(!obj._started && !obj._destroyed && dojo.isFunction(obj.startup)){
+                                       obj.startup();
+                                       obj._started = true;
+                               }
+                       }, this);
+               }
+       },
+
+       setHref: function(/*String|Uri*/ href){
+               // summary:
+               //              Deprecated.   Use set('href', ...) instead.
+               dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.", "", "2.0");
+               return this.set("href", href);
+       },
+       _setHrefAttr: function(/*String|Uri*/ href){
+               // summary:
+               //              Hook so set("href", ...) works.
+               // description:
+               //              Reset the (external defined) content of this pane and replace with new url
+               //              Note: It delays the download until widget is shown if preload is false.
+               //      href:
+               //              url to the page you want to get, must be within the same domain as your mainpage
+
+               // Cancel any in-flight requests (a set('href', ...) will cancel any in-flight set('href', ...))
+               this.cancel();
+
+               this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
+               this.onLoadDeferred.addCallback(dojo.hitch(this, "onLoad"));
+
+               this._set("href", href);
+
+               // _setHrefAttr() is called during creation and by the user, after creation.
+               // Assuming preload == false, only in the second case do we actually load the URL;
+               // otherwise it's done in startup(), and only if this widget is shown.
+               if(this.preload || (this._created && this._isShown())){
+                       this._load();
+               }else{
+                       // Set flag to indicate that href needs to be loaded the next time the
+                       // ContentPane is made visible
+                       this._hrefChanged = true;
+               }
+
+               return this.onLoadDeferred;             // dojo.Deferred
+       },
+
+       setContent: function(/*String|DomNode|Nodelist*/data){
+               // summary:
+               //              Deprecated.   Use set('content', ...) instead.
+               dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated.  Use set('content', ...) instead.", "", "2.0");
+               this.set("content", data);
+       },
+       _setContentAttr: function(/*String|DomNode|Nodelist*/data){
+               // summary:
+               //              Hook to make set("content", ...) work.
+               //              Replaces old content with data content, include style classes from old content
+               //      data:
+               //              the new Content may be String, DomNode or NodeList
+               //
+               //              if data is a NodeList (or an array of nodes) nodes are copied
+               //              so you can import nodes from another document implicitly
+
+               // clear href so we can't run refresh and clear content
+               // refresh should only work if we downloaded the content
+               this._set("href", "");
+
+               // Cancel any in-flight requests (a set('content', ...) will cancel any in-flight set('href', ...))
+               this.cancel();
+
+               // Even though user is just setting content directly, still need to define an onLoadDeferred
+               // because the _onLoadHandler() handler is still getting called from setContent()
+               this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
+               if(this._created){
+                       // For back-compat reasons, call onLoad() for set('content', ...)
+                       // calls but not for content specified in srcNodeRef (ie: <div dojoType=ContentPane>...</div>)
+                       // or as initialization parameter (ie: new ContentPane({content: ...})
+                       this.onLoadDeferred.addCallback(dojo.hitch(this, "onLoad"));
+               }
+
+               this._setContent(data || "");
+
+               this._isDownloaded = false; // mark that content is from a set('content') not a set('href')
+
+               return this.onLoadDeferred;     // dojo.Deferred
+       },
+       _getContentAttr: function(){
+               // summary:
+               //              Hook to make get("content") work
+               return this.containerNode.innerHTML;
+       },
+
+       cancel: function(){
+               // summary:
+               //              Cancels an in-flight download of content
+               if(this._xhrDfd && (this._xhrDfd.fired == -1)){
+                       this._xhrDfd.cancel();
+               }
+               delete this._xhrDfd; // garbage collect
+
+               this.onLoadDeferred = null;
+       },
+
+       uninitialize: function(){
+               if(this._beingDestroyed){
+                       this.cancel();
+               }
+               this.inherited(arguments);
+       },
+
+       destroyRecursive: function(/*Boolean*/ preserveDom){
+               // summary:
+               //              Destroy the ContentPane and its contents
+
+               // if we have multiple controllers destroying us, bail after the first
+               if(this._beingDestroyed){
+                       return;
+               }
+               this.inherited(arguments);
+       },
+
+       _onShow: function(){
+               // summary:
+               //              Called when the ContentPane is made visible
+               // description:
+               //              For a plain ContentPane, this is called on initialization, from startup().
+               //              If the ContentPane is a hidden pane of a TabContainer etc., then it's
+               //              called whenever the pane is made visible.
+               //
+               //              Does necessary processing, including href download and layout/resize of
+               //              child widget(s)
+
+               this.inherited(arguments);
+
+               if(this.href){
+                       if(!this._xhrDfd && // if there's an href that isn't already being loaded
+                               (!this.isLoaded || this._hrefChanged || this.refreshOnShow)
+                       ){
+                               return this.refresh();  // If child has an href, promise that fires when the load is complete
+                       }
+               }
+       },
+
+       refresh: function(){
+               // summary:
+               //              [Re]download contents of href and display
+               // description:
+               //              1. cancels any currently in-flight requests
+               //              2. posts "loading..." message
+               //              3. sends XHR to download new data
+
+               // Cancel possible prior in-flight request
+               this.cancel();
+
+               this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
+               this.onLoadDeferred.addCallback(dojo.hitch(this, "onLoad"));
+               this._load();
+               return this.onLoadDeferred;             // If child has an href, promise that fires when refresh is complete
+       },
+
+       _load: function(){
+               // summary:
+               //              Load/reload the href specified in this.href
+
+               // display loading message
+               this._setContent(this.onDownloadStart(), true);
+
+               var self = this;
+               var getArgs = {
+                       preventCache: (this.preventCache || this.refreshOnShow),
+                       url: this.href,
+                       handleAs: "text"
+               };
+               if(dojo.isObject(this.ioArgs)){
+                       dojo.mixin(getArgs, this.ioArgs);
+               }
+
+               var hand = (this._xhrDfd = (this.ioMethod || dojo.xhrGet)(getArgs));
+
+               hand.addCallback(function(html){
+                       try{
+                               self._isDownloaded = true;
+                               self._setContent(html, false);
+                               self.onDownloadEnd();
+                       }catch(err){
+                               self._onError('Content', err); // onContentError
+                       }
+                       delete self._xhrDfd;
+                       return html;
+               });
+
+               hand.addErrback(function(err){
+                       if(!hand.canceled){
+                               // show error message in the pane
+                               self._onError('Download', err); // onDownloadError
+                       }
+                       delete self._xhrDfd;
+                       return err;
+               });
+
+               // Remove flag saying that a load is needed
+               delete this._hrefChanged;
+       },
+
+       _onLoadHandler: function(data){
+               // summary:
+               //              This is called whenever new content is being loaded
+               this._set("isLoaded", true);
+               try{
+                       this.onLoadDeferred.callback(data);
+               }catch(e){
+                       console.error('Error '+this.widgetId+' running custom onLoad code: ' + e.message);
+               }
+       },
+
+       _onUnloadHandler: function(){
+               // summary:
+               //              This is called whenever the content is being unloaded
+               this._set("isLoaded", false);
+               try{
+                       this.onUnload();
+               }catch(e){
+                       console.error('Error '+this.widgetId+' running custom onUnload code: ' + e.message);
+               }
+       },
+
+       destroyDescendants: function(){
+               // summary:
+               //              Destroy all the widgets inside the ContentPane and empty containerNode
+
+               // Make sure we call onUnload (but only when the ContentPane has real content)
+               if(this.isLoaded){
+                       this._onUnloadHandler();
+               }
+
+               // Even if this.isLoaded == false there might still be a "Loading..." message
+               // to erase, so continue...
+
+               // For historical reasons we need to delete all widgets under this.containerNode,
+               // even ones that the user has created manually.
+               var setter = this._contentSetter;
+               dojo.forEach(this.getChildren(), function(widget){
+                       if(widget.destroyRecursive){
+                               widget.destroyRecursive();
+                       }
+               });
+               if(setter){
+                       // Most of the widgets in setter.parseResults have already been destroyed, but
+                       // things like Menu that have been moved to <body> haven't yet
+                       dojo.forEach(setter.parseResults, function(widget){
+                               if(widget.destroyRecursive && widget.domNode && widget.domNode.parentNode == dojo.body()){
+                                       widget.destroyRecursive();
+                               }
+                       });
+                       delete setter.parseResults;
+               }
+
+               // And then clear away all the DOM nodes
+               dojo.html._emptyNode(this.containerNode);
+
+               // Delete any state information we have about current contents
+               delete this._singleChild;
+       },
+
+       _setContent: function(/*String|DocumentFragment*/ cont, /*Boolean*/ isFakeContent){
+               // summary:
+               //              Insert the content into the container node
+
+               // first get rid of child widgets
+               this.destroyDescendants();
+
+               // dojo.html.set will take care of the rest of the details
+               // we provide an override for the error handling to ensure the widget gets the errors
+               // configure the setter instance with only the relevant widget instance properties
+               // NOTE: unless we hook into attr, or provide property setters for each property,
+               // we need to re-configure the ContentSetter with each use
+               var setter = this._contentSetter;
+               if(! (setter && setter instanceof dojo.html._ContentSetter)){
+                       setter = this._contentSetter = new dojo.html._ContentSetter({
+                               node: this.containerNode,
+                               _onError: dojo.hitch(this, this._onError),
+                               onContentError: dojo.hitch(this, function(e){
+                                       // fires if a domfault occurs when we are appending this.errorMessage
+                                       // like for instance if domNode is a UL and we try append a DIV
+                                       var errMess = this.onContentError(e);
+                                       try{
+                                               this.containerNode.innerHTML = errMess;
+                                       }catch(e){
+                                               console.error('Fatal '+this.id+' could not change content due to '+e.message, e);
+                                       }
+                               })/*,
+                               _onError */
+                       });
+               };
+
+               var setterParams = dojo.mixin({
+                       cleanContent: this.cleanContent,
+                       extractContent: this.extractContent,
+                       parseContent: this.parseOnLoad,
+                       parserScope: this.parserScope,
+                       startup: false,
+                       dir: this.dir,
+                       lang: this.lang
+               }, this._contentSetterParams || {});
+
+               setter.set( (dojo.isObject(cont) && cont.domNode) ? cont.domNode : cont, setterParams );
+
+               // setter params must be pulled afresh from the ContentPane each time
+               delete this._contentSetterParams;
+
+               if(this.doLayout){
+                       this._checkIfSingleChild();
+               }
+
+               if(!isFakeContent){
+                       if(this._started){
+                               // Startup each top level child widget (and they will start their children, recursively)
+                               this._startChildren();
+       
+                               // Call resize() on each of my child layout widgets,
+                               // or resize() on my single child layout widget...
+                               // either now (if I'm currently visible) or when I become visible
+                               this._scheduleLayout();
+                       }
+
+                       this._onLoadHandler(cont);
+               }
+       },
+
+       _onError: function(type, err, consoleText){
+               this.onLoadDeferred.errback(err);
+
+               // shows user the string that is returned by on[type]Error
+               // override on[type]Error and return your own string to customize
+               var errText = this['on' + type + 'Error'].call(this, err);
+               if(consoleText){
+                       console.error(consoleText, err);
+               }else if(errText){// a empty string won't change current content
+                       this._setContent(errText, true);
+               }
+       },
+
+       // EVENT's, should be overide-able
+       onLoad: function(data){
+               // summary:
+               //              Event hook, is called after everything is loaded and widgetified
+               // tags:
+               //              callback
+       },
+
+       onUnload: function(){
+               // summary:
+               //              Event hook, is called before old content is cleared
+               // tags:
+               //              callback
+       },
+
+       onDownloadStart: function(){
+               // summary:
+               //              Called before download starts.
+               // description:
+               //              The string returned by this function will be the html
+               //              that tells the user we are loading something.
+               //              Override with your own function if you want to change text.
+               // tags:
+               //              extension
+               return this.loadingMessage;
+       },
+
+       onContentError: function(/*Error*/ error){
+               // summary:
+               //              Called on DOM faults, require faults etc. in content.
+               //
+               //              In order to display an error message in the pane, return
+               //              the error message from this method, as an HTML string.
+               //
+               //              By default (if this method is not overriden), it returns
+               //              nothing, so the error message is just printed to the console.
+               // tags:
+               //              extension
+       },
+
+       onDownloadError: function(/*Error*/ error){
+               // summary:
+               //              Called when download error occurs.
+               //
+               //              In order to display an error message in the pane, return
+               //              the error message from this method, as an HTML string.
+               //
+               //              Default behavior (if this method is not overriden) is to display
+               //              the error message inside the pane.
+               // tags:
+               //              extension
+               return this.errorMessage;
+       },
+
+       onDownloadEnd: function(){
+               // summary:
+               //              Called when download is finished.
+               // tags:
+               //              callback
+       }
 });
-}
-delete this._needLayout;
-},onLoad:function(_24){
-},onUnload:function(){
-},onDownloadStart:function(){
-return this.loadingMessage;
-},onContentError:function(_25){
-},onDownloadError:function(_26){
-return this.errorMessage;
-},onDownloadEnd:function(){
-}});
+
 }
index 9d9fdc6a4e119239abada7b442822de4d53034f7..11204346f2dc8a4b14542de6bb1a65689417cec4 100644 (file)
@@ -1,28 +1,86 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.LayoutContainer"]){
-dojo._hasResource["dijit.layout.LayoutContainer"]=true;
+if(!dojo._hasResource["dijit.layout.LayoutContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.LayoutContainer"] = true;
 dojo.provide("dijit.layout.LayoutContainer");
 dojo.require("dijit.layout._LayoutWidget");
-dojo.declare("dijit.layout.LayoutContainer",dijit.layout._LayoutWidget,{baseClass:"dijitLayoutContainer",constructor:function(){
-dojo.deprecated("dijit.layout.LayoutContainer is deprecated","use BorderContainer instead",2);
-},layout:function(){
-dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());
-},addChild:function(_1,_2){
-this.inherited(arguments);
-if(this._started){
-dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());
-}
-},removeChild:function(_3){
-this.inherited(arguments);
-if(this._started){
-dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());
-}
-}});
-dojo.extend(dijit._Widget,{layoutAlign:"none"});
+
+
+dojo.declare("dijit.layout.LayoutContainer",
+       dijit.layout._LayoutWidget,
+       {
+       // summary:
+       //              Deprecated.  Use `dijit.layout.BorderContainer` instead.
+       //
+       // description:
+       //              Provides Delphi-style panel layout semantics.
+       //
+       //              A LayoutContainer is a box with a specified size (like style="width: 500px; height: 500px;"),
+       //              that contains children widgets marked with "layoutAlign" of "left", "right", "bottom", "top", and "client".
+       //              It takes it's children marked as left/top/bottom/right, and lays them out along the edges of the box,
+       //              and then it takes the child marked "client" and puts it into the remaining space in the middle.
+       //
+       //              Left/right positioning is similar to CSS's "float: left" and "float: right",
+       //              and top/bottom positioning would be similar to "float: top" and "float: bottom", if there were such
+       //              CSS.
+       //
+       //              Note that there can only be one client element, but there can be multiple left, right, top,
+       //              or bottom elements.
+       //
+       // example:
+       // |    <style>
+       // |            html, body{ height: 100%; width: 100%; }
+       // |    </style>
+       // |    <div dojoType="dijit.layout.LayoutContainer" style="width: 100%; height: 100%">
+       // |            <div dojoType="dijit.layout.ContentPane" layoutAlign="top">header text</div>
+       // |            <div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="width: 200px;">table of contents</div>
+       // |            <div dojoType="dijit.layout.ContentPane" layoutAlign="client">client area</div>
+       // |    </div>
+       //
+       //              Lays out each child in the natural order the children occur in.
+       //              Basically each child is laid out into the "remaining space", where "remaining space" is initially
+       //              the content area of this widget, but is reduced to a smaller rectangle each time a child is added.
+       // tags:
+       //              deprecated
+
+       baseClass: "dijitLayoutContainer",
+
+       constructor: function(){
+               dojo.deprecated("dijit.layout.LayoutContainer is deprecated", "use BorderContainer instead", 2.0);
+       },
+
+       layout: function(){
+               dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
+       },
+
+       addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+               this.inherited(arguments);
+               if(this._started){
+                       dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
+               }
+       },
+
+       removeChild: function(/*dijit._Widget*/ widget){
+               this.inherited(arguments);
+               if(this._started){
+                       dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
+               }
+       }
+});
+
+// This argument can be specified for the children of a LayoutContainer.
+// Since any widget can be specified as a LayoutContainer child, mix it
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget, {
+       // layoutAlign: String
+       //              "none", "left", "right", "bottom", "top", and "client".
+       //              See the LayoutContainer description for details on this parameter.
+       layoutAlign: 'none'
+});
+
 }
index 38e6567e780ebed4973a16f93bfac9ae1a1a312a..34e2d92bbc633783dafb2dc1ad3e5239e716589c 100644 (file)
@@ -1,20 +1,51 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.LinkPane"]){
-dojo._hasResource["dijit.layout.LinkPane"]=true;
+if(!dojo._hasResource["dijit.layout.LinkPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.LinkPane"] = true;
 dojo.provide("dijit.layout.LinkPane");
 dojo.require("dijit.layout.ContentPane");
 dojo.require("dijit._Templated");
-dojo.declare("dijit.layout.LinkPane",[dijit.layout.ContentPane,dijit._Templated],{templateString:"<div class=\"dijitLinkPane\" dojoAttachPoint=\"containerNode\"></div>",postMixInProperties:function(){
-if(this.srcNodeRef){
-this.title+=this.srcNodeRef.innerHTML;
-}
-this.inherited(arguments);
-},_fillContent:function(_1){
-}});
+
+
+dojo.declare("dijit.layout.LinkPane",
+       [dijit.layout.ContentPane, dijit._Templated],
+       {
+       // summary:
+       //              A ContentPane with an href where (when declared in markup)
+       //              the title is specified as innerHTML rather than as a title attribute.
+       // description:
+       //              LinkPane is just a ContentPane that is declared in markup similarly
+       //              to an anchor.  The anchor's body (the words between `<a>` and `</a>`)
+       //              become the title of the widget (used for TabContainer, AccordionContainer, etc.)
+       // example:
+       //      | <a href="foo.html">my title</a>
+
+       // I'm using a template because the user may specify the input as
+       // <a href="foo.html">title</a>, in which case we need to get rid of the
+       // <a> because we don't want a link.
+       templateString: '<div class="dijitLinkPane" dojoAttachPoint="containerNode"></div>',
+
+       postMixInProperties: function(){
+               // If user has specified node contents, they become the title
+               // (the link must be plain text)
+               if(this.srcNodeRef){
+                       this.title += this.srcNodeRef.innerHTML;
+               }
+               this.inherited(arguments);
+       },
+
+       _fillContent: function(/*DomNode*/ source){
+               // Overrides _Templated._fillContent().
+
+               // _Templated._fillContent() relocates srcNodeRef innerHTML to templated container node,
+               // but in our case the srcNodeRef innerHTML is the title, so shouldn't be
+               // copied
+       }
+});
+
 }
index 4ee0bd16e0331ae3aa787b3a15559bdde6b22938..a91c526debd4dfc8b9165c58191f899ae45500df 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=false>&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>&#9654;</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'></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({id:_1.id+"_stcMi",label:_1.title,dir:_1.dir,lang:_1.lang,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],"set",function(_6,_7){
-if(this._postStartup){
-if(_6=="label"){
-if(_3){
-_3.set(_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",dir:this.dir,lang:this.lang,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){
-if(this._anim&&this._anim.status()=="playing"){
-this._anim.stop();
-}
-var w=this.scrollNode,sl=this._convertToScrollLeft(this._getScrollForSelectedTab());
-w.scrollLeft=sl;
-}
-this._setButtonClass(this._getScroll());
-this._postResize=true;
-},_getScroll:function(){
-var sl=(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&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.isIE&&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(this._postResize&&_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,"dijitTabDisabled")){
-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 _26=this._getScrollBounds();
-this._leftBtn.set("disabled",_25<=_26.min);
-this._rightBtn.set("disabled",_25>=_26.max);
-}});
-dojo.declare("dijit.layout._ScrollingTabControllerButton",dijit.form.Button,{baseClass:"dijitTab tabStripButton",templateString:dojo.cache("dijit.layout","templates/_ScrollingTabControllerButton.html","<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div waiRole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div waiRole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img waiRole=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),tabIndex:"-1"});
+dojo.require("dijit.form.Button");
+dojo.require("dijit._HasDropDown");
+
+
+dojo.declare("dijit.layout.ScrollingTabController",
+       dijit.layout.TabController,
+       {
+       // summary:
+       //              Set of tabs with left/right arrow keys and a menu to switch between tabs not
+       //              all fitting on a single row.
+       //              Works only for horizontal tabs (either above or below the content, not to the left
+       //              or right).
+       // tags:
+       //              private
+
+       templateString: dojo.cache("dijit.layout", "templates/ScrollingTabController.html", "<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerMenuButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" containerId=\"${containerId}\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdropDownPosition=\"below-alt, above-alt\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=\"false\">&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=\"false\">&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=\"false\">&#9654;</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div role='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>\n"),
+
+       // useMenu: [const] Boolean
+       //              True if a menu should be used to select tabs when they are too
+       //              wide to fit the TabContainer, false otherwise.
+       useMenu: true,
+
+       // useSlider: [const] Boolean
+       //              True if a slider should be used to select tabs when they are too
+       //              wide to fit the TabContainer, false otherwise.
+       useSlider: true,
+
+       // tabStripClass: [const] String
+       //              The css class to apply to the tab strip, if it is visible.
+       tabStripClass: "",
+
+       widgetsInTemplate: true,
+
+       // _minScroll: Number
+       //              The distance in pixels from the edge of the tab strip which,
+       //              if a scroll animation is less than, forces the scroll to
+       //              go all the way to the left/right.
+       _minScroll: 5,
+
+       attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+               "class": "containerNode"
+       }),
+
+       buildRendering: 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);
+
+               // Do not show the TabController until the related
+               // StackController has added it's children.  This gives
+               // a less visually jumpy instantiation.
+               dojo.style(this.domNode, "visibility", "visible");
+               this._postStartup = true;
+       },
+
+       onAddChild: function(page, insertIndex){
+               this.inherited(arguments);
+
+               // changes to the tab button label or iconClass will have changed the width of the
+               // buttons, so do a resize
+               dojo.forEach(["label", "iconClass"], function(attr){
+                       this.pane2watches[page.id].push(
+                               this.pane2button[page.id].watch(attr, dojo.hitch(this, function(name, oldValue, newValue){
+                                       if(this._postStartup && this._dim){
+                                               this.resize(this._dim);
+                                       }
+                               }))
+                       );
+               }, this);
+
+               // Increment the width of the wrapper when a tab is added
+               // This makes sure that the buttons never wrap.
+               // The value 200 is chosen as it should be bigger than most
+               // Tab button widths.
+               dojo.style(this.containerNode, "width",
+                       (dojo.style(this.containerNode, "width") + 200) + "px");
+       },
+
+       onRemoveChild: function(page, insertIndex){
+               // null out _selectedTab because we are about to delete that dom node
+               var button = this.pane2button[page.id];
+               if(this._selectedTab === button.domNode){
+                       this._selectedTab = null;
+               }
+
+               this.inherited(arguments);
+       },
+
+       _initButtons: function(){
+               // summary:
+               //              Creates the buttons used to scroll to view tabs that
+               //              may not be visible if the TabContainer is too narrow.
+
+               // Make a list of the buttons to display when the tab labels become
+               // wider than the TabContainer, and hide the other buttons.
+               // Also gets the total width of the displayed buttons.
+               this._btnWidth = 0;
+               this._buttons = dojo.query("> .tabStripButton", this.domNode).filter(function(btn){
+                       if((this.useMenu && btn == this._menuBtn.domNode) ||
+                               (this.useSlider && (btn == this._rightBtn.domNode || btn == this._leftBtn.domNode))){
+                               this._btnWidth += dojo._getMarginSize(btn).w;
+                               return true;
+                       }else{
+                               dojo.style(btn, "display", "none");
+                               return false;
+                       }
+               }, this);
+       },
+
+       _getTabsWidth: function(){
+               var children = this.getChildren();
+               if(children.length){
+                       var leftTab = children[this.isLeftToRight() ? 0 : children.length - 1].domNode,
+                               rightTab = children[this.isLeftToRight() ? children.length - 1 : 0].domNode;
+                       return rightTab.offsetLeft + dojo.style(rightTab, "width") - leftTab.offsetLeft;
+               }else{
+                       return 0;
+               }
+       },
+
+       _enableBtn: function(width){
+               // summary:
+               //              Determines if the tabs are wider than the width of the TabContainer, and
+               //              thus that we need to display left/right/menu navigation buttons.
+               var tabsWidth = this._getTabsWidth();
+               width = width || dojo.style(this.scrollNode, "width");
+               return tabsWidth > 0 && width < tabsWidth;
+       },
+
+       resize: function(dim){
+               // summary:
+               //              Hides or displays the buttons used to scroll the tab list and launch the menu
+               //              that selects tabs.
+
+               if(this.domNode.offsetWidth == 0){
+                       return;
+               }
+
+               // Save the dimensions to be used when a child is renamed.
+               this._dim = dim;
+
+               // Set my height to be my natural height (tall enough for one row of tab labels),
+               // and my content-box width based on margin-box width specified in dim parameter.
+               // But first reset scrollNode.height in case it was set by layoutChildren() call
+               // in a previous run of this method.
+               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);
+
+               // Show/hide the left/right/menu navigation buttons depending on whether or not they
+               // are needed.
+               var enable = this._enableBtn(this._contentBox.w);
+               this._buttons.style("display", enable ? "" : "none");
+
+               // Position and size the navigation buttons and the tablist
+               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"}]);
+
+               // set proper scroll so that selected tab is visible
+               if(this._selectedTab){
+                       if(this._anim && this._anim.status() == "playing"){
+                               this._anim.stop();
+                       }
+                       var w = this.scrollNode,
+                               sl = this._convertToScrollLeft(this._getScrollForSelectedTab());
+                       w.scrollLeft = sl;
+               }
+
+               // Enable/disabled left right buttons depending on whether or not user can scroll to left or right
+               this._setButtonClass(this._getScroll());
+               
+               this._postResize = true;
+
+               // Return my size so layoutChildren() can use it.
+               // Also avoids IE9 layout glitch on browser resize when scroll buttons present
+               return {h: this._contentBox.h, w: dim.w};
+       },
+
+       _getScroll: function(){
+               // summary:
+               //              Returns the current scroll of the tabs where 0 means
+               //              "scrolled all the way to the left" and some positive number, based on #
+               //              of pixels of possible scroll (ex: 1000) means "scrolled all the way to the right"
+               var sl = (this.isLeftToRight() || dojo.isIE < 8 || (dojo.isIE && 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){
+               // summary:
+               //              Given a scroll value where 0 means "scrolled all the way to the left"
+               //              and some positive number, based on # of pixels of possible scroll (ex: 1000)
+               //              means "scrolled all the way to the right", return value to set this.scrollNode.scrollLeft
+               //              to achieve that scroll.
+               //
+               //              This method is to adjust for RTL funniness in various browsers and versions.
+               if(this.isLeftToRight() || dojo.isIE < 8 || (dojo.isIE && dojo.isQuirks) || dojo.isWebKit){
+                       return val;
+               }else{
+                       var maxScroll = dojo.style(this.containerNode, "width") - dojo.style(this.scrollNode, "width");
+                       return (dojo.isIE == 8 ? -1 : 1) * (val - maxScroll);
+               }
+       },
+
+       onSelectChild: function(/*dijit._Widget*/ page){
+               // summary:
+               //              Smoothly scrolls to a tab when it is selected.
+
+               var tab = this.pane2button[page.id];
+               if(!tab || !page){return;}
+
+               // Scroll to the selected tab, except on startup, when scrolling is handled in resize()
+               var node = tab.domNode;
+               if(this._postResize && node != this._selectedTab){
+                       this._selectedTab = node;
+
+                       var sl = this._getScroll();
+
+                       if(sl > node.offsetLeft ||
+                                       sl + dojo.style(this.scrollNode, "width") <
+                                       node.offsetLeft + dojo.style(node, "width")){
+                               this.createSmoothScroll().play();
+                       }
+               }
+
+               this.inherited(arguments);
+       },
+
+       _getScrollBounds: function(){
+               // summary:
+               //              Returns the minimum and maximum scroll setting to show the leftmost and rightmost
+               //              tabs (respectively)
+               var children = this.getChildren(),
+                       scrollNodeWidth = dojo.style(this.scrollNode, "width"),         // about 500px
+                       containerWidth = dojo.style(this.containerNode, "width"),       // 50,000px
+                       maxPossibleScroll = containerWidth - scrollNodeWidth,   // scrolling until right edge of containerNode visible
+                       tabsWidth = this._getTabsWidth();
+
+               if(children.length && tabsWidth > scrollNodeWidth){
+                       // Scrolling should happen
+                       return {
+                               min: this.isLeftToRight() ? 0 : children[children.length-1].domNode.offsetLeft,
+                               max: this.isLeftToRight() ?
+                                       (children[children.length-1].domNode.offsetLeft + dojo.style(children[children.length-1].domNode, "width")) - scrollNodeWidth :
+                                       maxPossibleScroll
+                       };
+               }else{
+                       // No scrolling needed, all tabs visible, we stay either scrolled to far left or far right (depending on dir)
+                       var onlyScrollPosition = this.isLeftToRight() ? 0 : maxPossibleScroll;
+                       return {
+                               min: onlyScrollPosition,
+                               max: onlyScrollPosition
+                       };
+               }
+       },
+
+       _getScrollForSelectedTab: function(){
+               // summary:
+               //              Returns the scroll value setting so that the selected tab
+               //              will appear in the center
+               var w = this.scrollNode,
+                       n = this._selectedTab,
+                       scrollNodeWidth = dojo.style(this.scrollNode, "width"),
+                       scrollBounds = this._getScrollBounds();
+
+               // TODO: scroll minimal amount (to either right or left) so that
+               // selected tab is fully visible, and just return if it's already visible?
+               var pos = (n.offsetLeft + dojo.style(n, "width")/2) - scrollNodeWidth/2;
+               pos = Math.min(Math.max(pos, scrollBounds.min), scrollBounds.max);
+
+               // TODO:
+               // If scrolling close to the left side or right side, scroll
+               // all the way to the left or right.  See this._minScroll.
+               // (But need to make sure that doesn't scroll the tab out of view...)
+               return pos;
+       },
+
+       createSmoothScroll: function(x){
+               // summary:
+               //              Creates a dojo._Animation object that smoothly scrolls the tab list
+               //              either to a fixed horizontal pixel value, or to the selected tab.
+               // description:
+               //              If an number argument is passed to the function, that horizontal
+               //              pixel position is scrolled to.  Otherwise the currently selected
+               //              tab is scrolled to.
+               // x: Integer?
+               //              An optional pixel value to scroll to, indicating distance from left.
+
+               // Calculate position to scroll to
+               if(arguments.length > 0){
+                       // position specified by caller, just make sure it's within bounds
+                       var scrollBounds = this._getScrollBounds();
+                       x = Math.min(Math.max(x, scrollBounds.min), scrollBounds.max);
+               }else{
+                       // scroll to center the current tab
+                       x = this._getScrollForSelectedTab();
+               }
+
+               if(this._anim && this._anim.status() == "playing"){
+                       this._anim.stop();
+               }
+
+               var self = this,
+                       w = this.scrollNode,
+                       anim = new dojo._Animation({
+                               beforeBegin: function(){
+                                       if(this.curve){ delete this.curve; }
+                                       var oldS = w.scrollLeft,
+                                               newS = self._convertToScrollLeft(x);
+                                       anim.curve = new dojo._Line(oldS, newS);
+                               },
+                               onAnimate: function(val){
+                                       w.scrollLeft = val;
+                               }
+                       });
+               this._anim = anim;
+
+               // Disable/enable left/right buttons according to new scroll position
+               this._setButtonClass(x);
+
+               return anim; // dojo._Animation
+       },
+
+       _getBtnNode: function(/*Event*/ e){
+               // summary:
+               //              Gets a button DOM node from a mouse click event.
+               // e:
+               //              The mouse click event.
+               var n = e.target;
+               while(n && !dojo.hasClass(n, "tabStripButton")){
+                       n = n.parentNode;
+               }
+               return n;
+       },
+
+       doSlideRight: function(/*Event*/ e){
+               // summary:
+               //              Scrolls the menu to the right.
+               // e:
+               //              The mouse click event.
+               this.doSlide(1, this._getBtnNode(e));
+       },
+
+       doSlideLeft: function(/*Event*/ e){
+               // summary:
+               //              Scrolls the menu to the left.
+               // e:
+               //              The mouse click event.
+               this.doSlide(-1,this._getBtnNode(e));
+       },
+
+       doSlide: function(/*Number*/ direction, /*DomNode*/ node){
+               // summary:
+               //              Scrolls the tab list to the left or right by 75% of the widget width.
+               // direction:
+               //              If the direction is 1, the widget scrolls to the right, if it is
+               //              -1, it scrolls to the left.
+
+               if(node && dojo.hasClass(node, "dijitTabDisabled")){return;}
+
+               var sWidth = dojo.style(this.scrollNode, "width");
+               var d = (sWidth * 0.75) * direction;
+
+               var to = this._getScroll() + d;
+
+               this._setButtonClass(to);
+
+               this.createSmoothScroll(to).play();
+       },
+
+       _setButtonClass: function(/*Number*/ scroll){
+               // summary:
+               //              Disables the left scroll button if the tabs are scrolled all the way to the left,
+               //              or the right scroll button in the opposite case.
+               // scroll: Integer
+               //              amount of horizontal scroll
+
+               var scrollBounds = this._getScrollBounds();
+               this._leftBtn.set("disabled", scroll <= scrollBounds.min);
+               this._rightBtn.set("disabled", scroll >= scrollBounds.max);
+       }
+});
+
+
+dojo.declare("dijit.layout._ScrollingTabControllerButtonMixin", null, {
+       baseClass: "dijitTab tabStripButton",
+
+       templateString: dojo.cache("dijit.layout", "templates/_ScrollingTabControllerButton.html", "<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div role=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div role=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img role=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),
+
+               // Override inherited tabIndex: 0 from dijit.form.Button, because user shouldn't be
+               // able to tab to the left/right/menu buttons
+       tabIndex: "",
+
+       // Similarly, override FormWidget.isFocusable() because clicking a button shouldn't focus it
+       // either (this override avoids focus() call in FormWidget.js)
+       isFocusable: function(){ return false; }
+});
+
+dojo.declare("dijit.layout._ScrollingTabControllerButton",
+       [dijit.form.Button, dijit.layout._ScrollingTabControllerButtonMixin]);
+
+dojo.declare(
+       "dijit.layout._ScrollingTabControllerMenuButton",
+       [dijit.form.Button, dijit._HasDropDown, dijit.layout._ScrollingTabControllerButtonMixin],
+{
+       // id of the TabContainer itself
+       containerId: "",
+
+       // -1 so user can't tab into the button, but so that button can still be focused programatically.
+       // Because need to move focus to the button (or somewhere) before the menu is hidden or IE6 will crash.
+       tabIndex: "-1",
+
+       isLoaded: function(){
+               // recreate menu every time, in case the TabContainer's list of children (or their icons/labels) have changed
+               return false;
+       },
+
+       loadDropDown: function(callback){
+               this.dropDown = new dijit.Menu({
+                       id: this.containerId + "_menu",
+                       dir: this.dir,
+                       lang: this.lang
+               });
+               var container = dijit.byId(this.containerId);
+               dojo.forEach(container.getChildren(), function(page){
+                       var menuItem = new dijit.MenuItem({
+                               id: page.id + "_stcMi",
+                               label: page.title,
+                               iconClass: page.iconClass,
+                               dir: page.dir,
+                               lang: page.lang,
+                               onClick: function(){
+                                       container.selectChild(page);
+                               }
+                       });
+                       this.dropDown.addChild(menuItem);
+               }, this);
+               callback();
+       },
+
+       closeDropDown: function(/*Boolean*/ focus){
+               this.inherited(arguments);
+               if(this.dropDown){
+                       this.dropDown.destroyRecursive();
+                       delete this.dropDown;
+               }
+       }
+});
+
 }
index b0db3e4656e5c1d4cc12348e52189d41b643b80b..cb18273e49b991853ecbe0fa4f3da3427252f1b8 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.SplitContainer"]){
-dojo._hasResource["dijit.layout.SplitContainer"]=true;
+if(!dojo._hasResource["dijit.layout.SplitContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.SplitContainer"] = true;
 dojo.provide("dijit.layout.SplitContainer");
 dojo.require("dojo.cookie");
 dojo.require("dijit.layout._LayoutWidget");
-dojo.declare("dijit.layout.SplitContainer",dijit.layout._LayoutWidget,{constructor:function(){
-dojo.deprecated("dijit.layout.SplitContainer is deprecated","use BorderContainer with splitter instead",2);
-},activeSizing:false,sizerWidth:7,orientation:"horizontal",persist:true,baseClass:"dijitSplitContainer",postMixInProperties:function(){
-this.inherited("postMixInProperties",arguments);
-this.isHorizontal=(this.orientation=="horizontal");
-},postCreate:function(){
-this.inherited(arguments);
-this.sizers=[];
-if(dojo.isMozilla){
-this.domNode.style.overflow="-moz-scrollbars-none";
-}
-if(typeof this.sizerWidth=="object"){
-try{
-this.sizerWidth=parseInt(this.sizerWidth.toString());
-}
-catch(e){
-this.sizerWidth=7;
-}
-}
-var _1=dojo.doc.createElement("div");
-this.virtualSizer=_1;
-_1.style.position="relative";
-_1.style.zIndex=10;
-_1.className=this.isHorizontal?"dijitSplitContainerVirtualSizerH":"dijitSplitContainerVirtualSizerV";
-this.domNode.appendChild(_1);
-dojo.setSelectable(_1,false);
-},destroy:function(){
-delete this.virtualSizer;
-dojo.forEach(this._ownconnects,dojo.disconnect);
-this.inherited(arguments);
-},startup:function(){
-if(this._started){
-return;
-}
-dojo.forEach(this.getChildren(),function(_2,i,_3){
-this._setupChild(_2);
-if(i<_3.length-1){
-this._addSizer();
-}
-},this);
-if(this.persist){
-this._restoreState();
-}
-this.inherited(arguments);
-},_setupChild:function(_4){
-this.inherited(arguments);
-_4.domNode.style.position="absolute";
-dojo.addClass(_4.domNode,"dijitSplitPane");
-},_onSizerMouseDown:function(e){
-if(e.target.id){
-for(var i=0;i<this.sizers.length;i++){
-if(this.sizers[i].id==e.target.id){
-break;
-}
-}
-if(i<this.sizers.length){
-this.beginSizing(e,i);
-}
-}
-},_addSizer:function(_5){
-_5=_5===undefined?this.sizers.length:_5;
-var _6=dojo.doc.createElement("div");
-_6.id=dijit.getUniqueId("dijit_layout_SplitterContainer_Splitter");
-this.sizers.splice(_5,0,_6);
-this.domNode.appendChild(_6);
-_6.className=this.isHorizontal?"dijitSplitContainerSizerH":"dijitSplitContainerSizerV";
-var _7=dojo.doc.createElement("div");
-_7.className="thumb";
-_6.appendChild(_7);
-this.connect(_6,"onmousedown","_onSizerMouseDown");
-dojo.setSelectable(_6,false);
-},removeChild:function(_8){
-if(this.sizers.length){
-var i=dojo.indexOf(this.getChildren(),_8);
-if(i!=-1){
-if(i==this.sizers.length){
-i--;
-}
-dojo.destroy(this.sizers[i]);
-this.sizers.splice(i,1);
-}
-}
-this.inherited(arguments);
-if(this._started){
-this.layout();
-}
-},addChild:function(_9,_a){
-this.inherited(arguments);
-if(this._started){
-var _b=this.getChildren();
-if(_b.length>1){
-this._addSizer(_a);
-}
-this.layout();
-}
-},layout:function(){
-this.paneWidth=this._contentBox.w;
-this.paneHeight=this._contentBox.h;
-var _c=this.getChildren();
-if(!_c.length){
-return;
-}
-var _d=this.isHorizontal?this.paneWidth:this.paneHeight;
-if(_c.length>1){
-_d-=this.sizerWidth*(_c.length-1);
-}
-var _e=0;
-dojo.forEach(_c,function(_f){
-_e+=_f.sizeShare;
-});
-var _10=_d/_e;
-var _11=0;
-dojo.forEach(_c.slice(0,_c.length-1),function(_12){
-var _13=Math.round(_10*_12.sizeShare);
-_12.sizeActual=_13;
-_11+=_13;
-});
-_c[_c.length-1].sizeActual=_d-_11;
-this._checkSizes();
-var pos=0;
-var _14=_c[0].sizeActual;
-this._movePanel(_c[0],pos,_14);
-_c[0].position=pos;
-pos+=_14;
-if(!this.sizers){
-return;
-}
-dojo.some(_c.slice(1),function(_15,i){
-if(!this.sizers[i]){
-return true;
-}
-this._moveSlider(this.sizers[i],pos,this.sizerWidth);
-this.sizers[i].position=pos;
-pos+=this.sizerWidth;
-_14=_15.sizeActual;
-this._movePanel(_15,pos,_14);
-_15.position=pos;
-pos+=_14;
-},this);
-},_movePanel:function(_16,pos,_17){
-if(this.isHorizontal){
-_16.domNode.style.left=pos+"px";
-_16.domNode.style.top=0;
-var box={w:_17,h:this.paneHeight};
-if(_16.resize){
-_16.resize(box);
-}else{
-dojo.marginBox(_16.domNode,box);
-}
-}else{
-_16.domNode.style.left=0;
-_16.domNode.style.top=pos+"px";
-var box={w:this.paneWidth,h:_17};
-if(_16.resize){
-_16.resize(box);
-}else{
-dojo.marginBox(_16.domNode,box);
-}
-}
-},_moveSlider:function(_18,pos,_19){
-if(this.isHorizontal){
-_18.style.left=pos+"px";
-_18.style.top=0;
-dojo.marginBox(_18,{w:_19,h:this.paneHeight});
-}else{
-_18.style.left=0;
-_18.style.top=pos+"px";
-dojo.marginBox(_18,{w:this.paneWidth,h:_19});
-}
-},_growPane:function(_1a,_1b){
-if(_1a>0){
-if(_1b.sizeActual>_1b.sizeMin){
-if((_1b.sizeActual-_1b.sizeMin)>_1a){
-_1b.sizeActual=_1b.sizeActual-_1a;
-_1a=0;
-}else{
-_1a-=_1b.sizeActual-_1b.sizeMin;
-_1b.sizeActual=_1b.sizeMin;
-}
-}
-}
-return _1a;
-},_checkSizes:function(){
-var _1c=0;
-var _1d=0;
-var _1e=this.getChildren();
-dojo.forEach(_1e,function(_1f){
-_1d+=_1f.sizeActual;
-_1c+=_1f.sizeMin;
-});
-if(_1c<=_1d){
-var _20=0;
-dojo.forEach(_1e,function(_21){
-if(_21.sizeActual<_21.sizeMin){
-_20+=_21.sizeMin-_21.sizeActual;
-_21.sizeActual=_21.sizeMin;
-}
-});
-if(_20>0){
-var _22=this.isDraggingLeft?_1e.reverse():_1e;
-dojo.forEach(_22,function(_23){
-_20=this._growPane(_20,_23);
-},this);
-}
-}else{
-dojo.forEach(_1e,function(_24){
-_24.sizeActual=Math.round(_1d*(_24.sizeMin/_1c));
+
+
+//
+// FIXME: make it prettier
+// FIXME: active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case)
+//
+
+
+dojo.declare("dijit.layout.SplitContainer",
+       dijit.layout._LayoutWidget,
+       {
+       // summary:
+       //              Deprecated.  Use `dijit.layout.BorderContainer` instead.
+       // description:
+       //              A Container widget with sizing handles in-between each child.
+       //              Contains multiple children widgets, all of which are displayed side by side
+       //              (either horizontally or vertically); there's a bar between each of the children,
+       //              and you can adjust the relative size of each child by dragging the bars.
+       //
+       //              You must specify a size (width and height) for the SplitContainer.
+       // tags:
+       //              deprecated
+
+       constructor: function(){
+               dojo.deprecated("dijit.layout.SplitContainer is deprecated", "use BorderContainer with splitter instead", 2.0);
+       },
+
+       // activeSizing: Boolean
+       //              If true, the children's size changes as you drag the bar;
+       //              otherwise, the sizes don't change until you drop the bar (by mouse-up)
+       activeSizing: false,
+
+       // sizerWidth: Integer
+       //              Size in pixels of the bar between each child
+       sizerWidth: 7, // FIXME: this should be a CSS attribute (at 7 because css wants it to be 7 until we fix to css)
+
+       // orientation: String
+       //              either 'horizontal' or vertical; indicates whether the children are
+       //              arranged side-by-side or up/down.
+       orientation: 'horizontal',
+
+       // persist: Boolean
+       //              Save splitter positions in a cookie
+       persist: true,
+
+       baseClass: "dijitSplitContainer",
+
+       postMixInProperties: function(){
+               this.inherited("postMixInProperties",arguments);
+               this.isHorizontal = (this.orientation == 'horizontal');
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
+               this.sizers = [];
+
+               // overflow has to be explicitly hidden for splitContainers using gekko (trac #1435)
+               // to keep other combined css classes from inadvertantly making the overflow visible
+               if(dojo.isMozilla){
+                       this.domNode.style.overflow = '-moz-scrollbars-none'; // hidden doesn't work
+               }
+
+               // create the fake dragger
+               if(typeof this.sizerWidth == "object"){
+                       try{ //FIXME: do this without a try/catch
+                               this.sizerWidth = parseInt(this.sizerWidth.toString());
+                       }catch(e){ this.sizerWidth = 7; }
+               }
+               var sizer = dojo.doc.createElement('div');
+               this.virtualSizer = sizer;
+               sizer.style.position = 'relative';
+
+               // #1681: work around the dreaded 'quirky percentages in IE' layout bug
+               // If the splitcontainer's dimensions are specified in percentages, it
+               // will be resized when the virtualsizer is displayed in _showSizingLine
+               // (typically expanding its bounds unnecessarily). This happens because
+               // we use position: relative for .dijitSplitContainer.
+               // The workaround: instead of changing the display style attribute,
+               // switch to changing the zIndex (bring to front/move to back)
+
+               sizer.style.zIndex = 10;
+               sizer.className = this.isHorizontal ? 'dijitSplitContainerVirtualSizerH' : 'dijitSplitContainerVirtualSizerV';
+               this.domNode.appendChild(sizer);
+               dojo.setSelectable(sizer, false);
+       },
+
+       destroy: function(){
+               delete this.virtualSizer;
+               dojo.forEach(this._ownconnects, dojo.disconnect);
+               this.inherited(arguments);
+       },
+       startup: function(){
+               if(this._started){ return; }
+
+               dojo.forEach(this.getChildren(), function(child, i, children){
+                       // attach the children and create the draggers
+                       this._setupChild(child);
+
+                       if(i < children.length-1){
+                               this._addSizer();
+                       }
+               }, this);
+
+               if(this.persist){
+                       this._restoreState();
+               }
+
+               this.inherited(arguments);
+       },
+
+       _setupChild: function(/*dijit._Widget*/ child){
+               this.inherited(arguments);
+               child.domNode.style.position = "absolute";
+               dojo.addClass(child.domNode, "dijitSplitPane");
+       },
+
+       _onSizerMouseDown: function(e){
+               if(e.target.id){
+                       for(var i=0;i<this.sizers.length;i++){
+                               if(this.sizers[i].id == e.target.id){
+                                       break;
+                               }
+                       }
+                       if(i<this.sizers.length){
+                               this.beginSizing(e,i);
+                       }
+               }
+       },
+       _addSizer: function(index){
+               index = index === undefined ? this.sizers.length : index;
+
+               // TODO: use a template for this!!!
+               var sizer = dojo.doc.createElement('div');
+               sizer.id=dijit.getUniqueId('dijit_layout_SplitterContainer_Splitter');
+               this.sizers.splice(index,0,sizer);
+               this.domNode.appendChild(sizer);
+
+               sizer.className = this.isHorizontal ? 'dijitSplitContainerSizerH' : 'dijitSplitContainerSizerV';
+
+               // add the thumb div
+               var thumb = dojo.doc.createElement('div');
+               thumb.className = 'thumb';
+               sizer.appendChild(thumb);
+
+               // FIXME: are you serious? why aren't we using mover start/stop combo?
+               this.connect(sizer, "onmousedown", '_onSizerMouseDown');
+
+               dojo.setSelectable(sizer, false);
+       },
+
+       removeChild: function(widget){
+               // summary:
+               //              Remove sizer, but only if widget is really our child and
+               // we have at least one sizer to throw away
+               if(this.sizers.length){
+                       var i=dojo.indexOf(this.getChildren(), widget)
+                       if(i != -1){
+                               if(i == this.sizers.length){
+                                       i--;
+                               }
+                               dojo.destroy(this.sizers[i]);
+                               this.sizers.splice(i,1);
+                       }
+               }
+
+               // Remove widget and repaint
+               this.inherited(arguments);
+               if(this._started){
+                       this.layout();
+               }
+       },
+
+       addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+               // summary:
+               //              Add a child widget to the container
+               // child:
+               //              a widget to add
+               // insertIndex:
+               //              postion in the "stack" to add the child widget
+
+               this.inherited(arguments);
+
+               if(this._started){
+                       // Do the stuff that startup() does for each widget
+                       var children = this.getChildren();
+                       if(children.length > 1){
+                               this._addSizer(insertIndex);
+                       }
+
+                       // and then reposition (ie, shrink) every pane to make room for the new guy
+                       this.layout();
+               }
+       },
+
+       layout: function(){
+               // summary:
+               //              Do layout of panels
+
+               // base class defines this._contentBox on initial creation and also
+               // on resize
+               this.paneWidth = this._contentBox.w;
+               this.paneHeight = this._contentBox.h;
+
+               var children = this.getChildren();
+               if(!children.length){ return; }
+
+               //
+               // calculate space
+               //
+
+               var space = this.isHorizontal ? this.paneWidth : this.paneHeight;
+               if(children.length > 1){
+                       space -= this.sizerWidth * (children.length - 1);
+               }
+
+               //
+               // calculate total of SizeShare values
+               //
+               var outOf = 0;
+               dojo.forEach(children, function(child){
+                       outOf += child.sizeShare;
+               });
+
+               //
+               // work out actual pixels per sizeshare unit
+               //
+               var pixPerUnit = space / outOf;
+
+               //
+               // set the SizeActual member of each pane
+               //
+               var totalSize = 0;
+               dojo.forEach(children.slice(0, children.length - 1), function(child){
+                       var size = Math.round(pixPerUnit * child.sizeShare);
+                       child.sizeActual = size;
+                       totalSize += size;
+               });
+
+               children[children.length-1].sizeActual = space - totalSize;
+
+               //
+               // make sure the sizes are ok
+               //
+               this._checkSizes();
+
+               //
+               // now loop, positioning each pane and letting children resize themselves
+               //
+
+               var pos = 0;
+               var size = children[0].sizeActual;
+               this._movePanel(children[0], pos, size);
+               children[0].position = pos;
+               pos += size;
+
+               // if we don't have any sizers, our layout method hasn't been called yet
+               // so bail until we are called..TODO: REVISIT: need to change the startup
+               // algorithm to guaranteed the ordering of calls to layout method
+               if(!this.sizers){
+                       return;
+               }
+
+               dojo.some(children.slice(1), function(child, i){
+                       // error-checking
+                       if(!this.sizers[i]){
+                               return true;
+                       }
+                       // first we position the sizing handle before this pane
+                       this._moveSlider(this.sizers[i], pos, this.sizerWidth);
+                       this.sizers[i].position = pos;
+                       pos += this.sizerWidth;
+
+                       size = child.sizeActual;
+                       this._movePanel(child, pos, size);
+                       child.position = pos;
+                       pos += size;
+               }, this);
+       },
+
+       _movePanel: function(panel, pos, size){
+               if(this.isHorizontal){
+                       panel.domNode.style.left = pos + 'px';  // TODO: resize() takes l and t parameters too, don't need to set manually
+                       panel.domNode.style.top = 0;
+                       var box = {w: size, h: this.paneHeight};
+                       if(panel.resize){
+                               panel.resize(box);
+                       }else{
+                               dojo.marginBox(panel.domNode, box);
+                       }
+               }else{
+                       panel.domNode.style.left = 0;   // TODO: resize() takes l and t parameters too, don't need to set manually
+                       panel.domNode.style.top = pos + 'px';
+                       var box = {w: this.paneWidth, h: size};
+                       if(panel.resize){
+                               panel.resize(box);
+                       }else{
+                               dojo.marginBox(panel.domNode, box);
+                       }
+               }
+       },
+
+       _moveSlider: function(slider, pos, size){
+               if(this.isHorizontal){
+                       slider.style.left = pos + 'px';
+                       slider.style.top = 0;
+                       dojo.marginBox(slider, { w: size, h: this.paneHeight });
+               }else{
+                       slider.style.left = 0;
+                       slider.style.top = pos + 'px';
+                       dojo.marginBox(slider, { w: this.paneWidth, h: size });
+               }
+       },
+
+       _growPane: function(growth, pane){
+               if(growth > 0){
+                       if(pane.sizeActual > pane.sizeMin){
+                               if((pane.sizeActual - pane.sizeMin) > growth){
+
+                                       // stick all the growth in this pane
+                                       pane.sizeActual = pane.sizeActual - growth;
+                                       growth = 0;
+                               }else{
+                                       // put as much growth in here as we can
+                                       growth -= pane.sizeActual - pane.sizeMin;
+                                       pane.sizeActual = pane.sizeMin;
+                               }
+                       }
+               }
+               return growth;
+       },
+
+       _checkSizes: function(){
+
+               var totalMinSize = 0;
+               var totalSize = 0;
+               var children = this.getChildren();
+
+               dojo.forEach(children, function(child){
+                       totalSize += child.sizeActual;
+                       totalMinSize += child.sizeMin;
+               });
+
+               // only make adjustments if we have enough space for all the minimums
+
+               if(totalMinSize <= totalSize){
+
+                       var growth = 0;
+
+                       dojo.forEach(children, function(child){
+                               if(child.sizeActual < child.sizeMin){
+                                       growth += child.sizeMin - child.sizeActual;
+                                       child.sizeActual = child.sizeMin;
+                               }
+                       });
+
+                       if(growth > 0){
+                               var list = this.isDraggingLeft ? children.reverse() : children;
+                               dojo.forEach(list, function(child){
+                                       growth = this._growPane(growth, child);
+                               }, this);
+                       }
+               }else{
+                       dojo.forEach(children, function(child){
+                               child.sizeActual = Math.round(totalSize * (child.sizeMin / totalMinSize));
+                       });
+               }
+       },
+
+       beginSizing: function(e, i){
+               var children = this.getChildren();
+               this.paneBefore = children[i];
+               this.paneAfter = children[i+1];
+
+               this.isSizing = true;
+               this.sizingSplitter = this.sizers[i];
+
+               if(!this.cover){
+                       this.cover = dojo.create('div', {
+                                       style: {
+                                               position:'absolute',
+                                               zIndex:5,
+                                               top: 0,
+                                               left: 0,
+                                               width: "100%",
+                                               height: "100%"
+                                       }
+                               }, this.domNode);
+               }else{
+                       this.cover.style.zIndex = 5;
+               }
+               this.sizingSplitter.style.zIndex = 6;
+
+               // TODO: REVISIT - we want MARGIN_BOX and core hasn't exposed that yet (but can't we use it anyway if we pay attention? we do elsewhere.)
+               this.originPos = dojo.position(children[0].domNode, true);
+               if(this.isHorizontal){
+                       var client = e.layerX || e.offsetX || 0;
+                       var screen = e.pageX;
+                       this.originPos = this.originPos.x;
+               }else{
+                       var client = e.layerY || e.offsetY || 0;
+                       var screen = e.pageY;
+                       this.originPos = this.originPos.y;
+               }
+               this.startPoint = this.lastPoint = screen;
+               this.screenToClientOffset = screen - client;
+               this.dragOffset = this.lastPoint - this.paneBefore.sizeActual - this.originPos - this.paneBefore.position;
+
+               if(!this.activeSizing){
+                       this._showSizingLine();
+               }
+
+               //
+               // attach mouse events
+               //
+               this._ownconnects = [];
+               this._ownconnects.push(dojo.connect(dojo.doc.documentElement, "onmousemove", this, "changeSizing"));
+               this._ownconnects.push(dojo.connect(dojo.doc.documentElement, "onmouseup", this, "endSizing"));
+
+               dojo.stopEvent(e);
+       },
+
+       changeSizing: function(e){
+               if(!this.isSizing){ return; }
+               this.lastPoint = this.isHorizontal ? e.pageX : e.pageY;
+               this.movePoint();
+               if(this.activeSizing){
+                       this._updateSize();
+               }else{
+                       this._moveSizingLine();
+               }
+               dojo.stopEvent(e);
+       },
+
+       endSizing: function(e){
+               if(!this.isSizing){ return; }
+               if(this.cover){
+                       this.cover.style.zIndex = -1;
+               }
+               if(!this.activeSizing){
+                       this._hideSizingLine();
+               }
+
+               this._updateSize();
+
+               this.isSizing = false;
+
+               if(this.persist){
+                       this._saveState(this);
+               }
+
+               dojo.forEach(this._ownconnects, dojo.disconnect);
+       },
+
+       movePoint: function(){
+
+               // make sure lastPoint is a legal point to drag to
+               var p = this.lastPoint - this.screenToClientOffset;
+
+               var a = p - this.dragOffset;
+               a = this.legaliseSplitPoint(a);
+               p = a + this.dragOffset;
+
+               this.lastPoint = p + this.screenToClientOffset;
+       },
+
+       legaliseSplitPoint: function(a){
+
+               a += this.sizingSplitter.position;
+
+               this.isDraggingLeft = !!(a > 0);
+
+               if(!this.activeSizing){
+                       var min = this.paneBefore.position + this.paneBefore.sizeMin;
+                       if(a < min){
+                               a = min;
+                       }
+
+                       var max = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin));
+                       if(a > max){
+                               a = max;
+                       }
+               }
+
+               a -= this.sizingSplitter.position;
+
+               this._checkSizes();
+
+               return a;
+       },
+
+       _updateSize: function(){
+       //FIXME: sometimes this.lastPoint is NaN
+               var pos = this.lastPoint - this.dragOffset - this.originPos;
+
+               var start_region = this.paneBefore.position;
+               var end_region = this.paneAfter.position + this.paneAfter.sizeActual;
+
+               this.paneBefore.sizeActual = pos - start_region;
+               this.paneAfter.position = pos + this.sizerWidth;
+               this.paneAfter.sizeActual = end_region - this.paneAfter.position;
+
+               dojo.forEach(this.getChildren(), function(child){
+                       child.sizeShare = child.sizeActual;
+               });
+
+               if(this._started){
+                       this.layout();
+               }
+       },
+
+       _showSizingLine: function(){
+
+               this._moveSizingLine();
+
+               dojo.marginBox(this.virtualSizer,
+                       this.isHorizontal ? { w: this.sizerWidth, h: this.paneHeight } : { w: this.paneWidth, h: this.sizerWidth });
+
+               this.virtualSizer.style.display = 'block';
+       },
+
+       _hideSizingLine: function(){
+               this.virtualSizer.style.display = 'none';
+       },
+
+       _moveSizingLine: function(){
+               var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position;
+               dojo.style(this.virtualSizer,(this.isHorizontal ? "left" : "top"),pos+"px");
+               // this.virtualSizer.style[ this.isHorizontal ? "left" : "top" ] = pos + 'px'; // FIXME: remove this line if the previous is better
+       },
+
+       _getCookieName: function(i){
+               return this.id + "_" + i;
+       },
+
+       _restoreState: function(){
+               dojo.forEach(this.getChildren(), function(child, i){
+                       var cookieName = this._getCookieName(i);
+                       var cookieValue = dojo.cookie(cookieName);
+                       if(cookieValue){
+                               var pos = parseInt(cookieValue);
+                               if(typeof pos == "number"){
+                                       child.sizeShare = pos;
+                               }
+                       }
+               }, this);
+       },
+
+       _saveState: function(){
+               if(!this.persist){
+                       return;
+               }
+               dojo.forEach(this.getChildren(), function(child, i){
+                       dojo.cookie(this._getCookieName(i), child.sizeShare, {expires:365});
+               }, this);
+       }
 });
-}
-},beginSizing:function(e,i){
-var _25=this.getChildren();
-this.paneBefore=_25[i];
-this.paneAfter=_25[i+1];
-this.isSizing=true;
-this.sizingSplitter=this.sizers[i];
-if(!this.cover){
-this.cover=dojo.create("div",{style:{position:"absolute",zIndex:5,top:0,left:0,width:"100%",height:"100%"}},this.domNode);
-}else{
-this.cover.style.zIndex=5;
-}
-this.sizingSplitter.style.zIndex=6;
-this.originPos=dojo.position(_25[0].domNode,true);
-if(this.isHorizontal){
-var _26=e.layerX||e.offsetX||0;
-var _27=e.pageX;
-this.originPos=this.originPos.x;
-}else{
-var _26=e.layerY||e.offsetY||0;
-var _27=e.pageY;
-this.originPos=this.originPos.y;
-}
-this.startPoint=this.lastPoint=_27;
-this.screenToClientOffset=_27-_26;
-this.dragOffset=this.lastPoint-this.paneBefore.sizeActual-this.originPos-this.paneBefore.position;
-if(!this.activeSizing){
-this._showSizingLine();
-}
-this._ownconnects=[];
-this._ownconnects.push(dojo.connect(dojo.doc.documentElement,"onmousemove",this,"changeSizing"));
-this._ownconnects.push(dojo.connect(dojo.doc.documentElement,"onmouseup",this,"endSizing"));
-dojo.stopEvent(e);
-},changeSizing:function(e){
-if(!this.isSizing){
-return;
-}
-this.lastPoint=this.isHorizontal?e.pageX:e.pageY;
-this.movePoint();
-if(this.activeSizing){
-this._updateSize();
-}else{
-this._moveSizingLine();
-}
-dojo.stopEvent(e);
-},endSizing:function(e){
-if(!this.isSizing){
-return;
-}
-if(this.cover){
-this.cover.style.zIndex=-1;
-}
-if(!this.activeSizing){
-this._hideSizingLine();
-}
-this._updateSize();
-this.isSizing=false;
-if(this.persist){
-this._saveState(this);
-}
-dojo.forEach(this._ownconnects,dojo.disconnect);
-},movePoint:function(){
-var p=this.lastPoint-this.screenToClientOffset;
-var a=p-this.dragOffset;
-a=this.legaliseSplitPoint(a);
-p=a+this.dragOffset;
-this.lastPoint=p+this.screenToClientOffset;
-},legaliseSplitPoint:function(a){
-a+=this.sizingSplitter.position;
-this.isDraggingLeft=!!(a>0);
-if(!this.activeSizing){
-var min=this.paneBefore.position+this.paneBefore.sizeMin;
-if(a<min){
-a=min;
-}
-var max=this.paneAfter.position+(this.paneAfter.sizeActual-(this.sizerWidth+this.paneAfter.sizeMin));
-if(a>max){
-a=max;
-}
-}
-a-=this.sizingSplitter.position;
-this._checkSizes();
-return a;
-},_updateSize:function(){
-var pos=this.lastPoint-this.dragOffset-this.originPos;
-var _28=this.paneBefore.position;
-var _29=this.paneAfter.position+this.paneAfter.sizeActual;
-this.paneBefore.sizeActual=pos-_28;
-this.paneAfter.position=pos+this.sizerWidth;
-this.paneAfter.sizeActual=_29-this.paneAfter.position;
-dojo.forEach(this.getChildren(),function(_2a){
-_2a.sizeShare=_2a.sizeActual;
+
+// These arguments can be specified for the children of a SplitContainer.
+// Since any widget can be specified as a SplitContainer child, mix them
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget, {
+       // sizeMin: [deprecated] Integer
+       //              Deprecated.  Parameter for children of `dijit.layout.SplitContainer`.
+       //              Minimum size (width or height) of a child of a SplitContainer.
+       //              The value is relative to other children's sizeShare properties.
+       sizeMin: 10,
+
+       // sizeShare: [deprecated] Integer
+       //              Deprecated.  Parameter for children of `dijit.layout.SplitContainer`.
+       //              Size (width or height) of a child of a SplitContainer.
+       //              The value is relative to other children's sizeShare properties.
+       //              For example, if there are two children and each has sizeShare=10, then
+       //              each takes up 50% of the available space.
+       sizeShare: 10
 });
-if(this._started){
-this.layout();
-}
-},_showSizingLine:function(){
-this._moveSizingLine();
-dojo.marginBox(this.virtualSizer,this.isHorizontal?{w:this.sizerWidth,h:this.paneHeight}:{w:this.paneWidth,h:this.sizerWidth});
-this.virtualSizer.style.display="block";
-},_hideSizingLine:function(){
-this.virtualSizer.style.display="none";
-},_moveSizingLine:function(){
-var pos=(this.lastPoint-this.startPoint)+this.sizingSplitter.position;
-dojo.style(this.virtualSizer,(this.isHorizontal?"left":"top"),pos+"px");
-},_getCookieName:function(i){
-return this.id+"_"+i;
-},_restoreState:function(){
-dojo.forEach(this.getChildren(),function(_2b,i){
-var _2c=this._getCookieName(i);
-var _2d=dojo.cookie(_2c);
-if(_2d){
-var pos=parseInt(_2d);
-if(typeof pos=="number"){
-_2b.sizeShare=pos;
-}
-}
-},this);
-},_saveState:function(){
-if(!this.persist){
-return;
-}
-dojo.forEach(this.getChildren(),function(_2e,i){
-dojo.cookie(this._getCookieName(i),_2e.sizeShare,{expires:365});
-},this);
-}});
-dojo.extend(dijit._Widget,{sizeMin:10,sizeShare:10});
+
 }
index 78a49021df4094e92183dea5d1e9f2f4f0e6013d..98af4c942bdcb48c76097ad06382b930e6e2e5b0 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.StackContainer"]){
-dojo._hasResource["dijit.layout.StackContainer"]=true;
+if(!dojo._hasResource["dijit.layout.StackContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.StackContainer"] = true;
 dojo.provide("dijit.layout.StackContainer");
 dojo.require("dijit._Templated");
 dojo.require("dijit.layout._LayoutWidget");
-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,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
 dojo.require("dojo.cookie");
-dojo.declare("dijit.layout.StackContainer",dijit.layout._LayoutWidget,{doLayout:true,persist:false,baseClass:"dijitStackContainer",postCreate:function(){
-this.inherited(arguments);
-dojo.addClass(this.domNode,"dijitLayoutContainer");
-dijit.setWaiRole(this.containerNode,"tabpanel");
-this.connect(this.domNode,"onkeypress",this._onKeyPress);
-},startup:function(){
-if(this._started){
-return;
-}
-var _1=this.getChildren();
-dojo.forEach(_1,this._setupChild,this);
-if(this.persist){
-this.selectedChildWidget=dijit.byId(dojo.cookie(this.id+"_selectedChild"));
-}else{
-dojo.some(_1,function(_2){
-if(_2.selected){
-this.selectedChildWidget=_2;
-}
-return _2.selected;
-},this);
-}
-var _3=this.selectedChildWidget;
-if(!_3&&_1[0]){
-_3=this.selectedChildWidget=_1[0];
-_3.selected=true;
-}
-dojo.publish(this.id+"-startup",[{children:_1,selected:_3}]);
-this.inherited(arguments);
-},resize:function(){
-var _4=this.selectedChildWidget;
-if(_4&&!this._hasBeenShown){
-this._hasBeenShown=true;
-this._showChild(_4);
-}
-this.inherited(arguments);
-},_setupChild:function(_5){
-this.inherited(arguments);
-dojo.removeClass(_5.domNode,"dijitVisible");
-dojo.addClass(_5.domNode,"dijitHidden");
-_5.domNode.title="";
-},addChild:function(_6,_7){
-this.inherited(arguments);
-if(this._started){
-dojo.publish(this.id+"-addChild",[_6,_7]);
-this.layout();
-if(!this.selectedChildWidget){
-this.selectChild(_6);
-}
-}
-},removeChild:function(_8){
-this.inherited(arguments);
-if(this._started){
-dojo.publish(this.id+"-removeChild",[_8]);
-}
-if(this._beingDestroyed){
-return;
-}
-if(this.selectedChildWidget===_8){
-this.selectedChildWidget=undefined;
-if(this._started){
-var _9=this.getChildren();
-if(_9.length){
-this.selectChild(_9[0]);
-}
-}
-}
-if(this._started){
-this.layout();
-}
-},selectChild:function(_a,_b){
-_a=dijit.byId(_a);
-if(this.selectedChildWidget!=_a){
-this._transition(_a,this.selectedChildWidget,_b);
-this.selectedChildWidget=_a;
-dojo.publish(this.id+"-selectChild",[_a]);
-if(this.persist){
-dojo.cookie(this.id+"_selectedChild",this.selectedChildWidget.id);
-}
-}
-},_transition:function(_c,_d){
-if(_d){
-this._hideChild(_d);
-}
-this._showChild(_c);
-if(_c.resize){
-if(this.doLayout){
-_c.resize(this._containerContentBox||this._contentBox);
-}else{
-_c.resize();
-}
-}
-},_adjacent:function(_e){
-var _f=this.getChildren();
-var _10=dojo.indexOf(_f,this.selectedChildWidget);
-_10+=_e?1:_f.length-1;
-return _f[_10%_f.length];
-},forward:function(){
-this.selectChild(this._adjacent(true),true);
-},back:function(){
-this.selectChild(this._adjacent(false),true);
-},_onKeyPress:function(e){
-dojo.publish(this.id+"-containerKeyPress",[{e:e,page:this}]);
-},layout:function(){
-if(this.doLayout&&this.selectedChildWidget&&this.selectedChildWidget.resize){
-this.selectedChildWidget.resize(this._containerContentBox||this._contentBox);
-}
-},_showChild:function(_11){
-var _12=this.getChildren();
-_11.isFirstChild=(_11==_12[0]);
-_11.isLastChild=(_11==_12[_12.length-1]);
-_11.selected=true;
-dojo.removeClass(_11.domNode,"dijitHidden");
-dojo.addClass(_11.domNode,"dijitVisible");
-_11._onShow();
-},_hideChild:function(_13){
-_13.selected=false;
-dojo.removeClass(_13.domNode,"dijitVisible");
-dojo.addClass(_13.domNode,"dijitHidden");
-_13.onHide();
-},closeChild:function(_14){
-var _15=_14.onClose(this,_14);
-if(_15){
-this.removeChild(_14);
-_14.destroyRecursive();
-}
-},destroyDescendants:function(_16){
-dojo.forEach(this.getChildren(),function(_17){
-this.removeChild(_17);
-_17.destroyRecursive(_16);
-},this);
-}});
 dojo.require("dijit.layout.StackController");
-dojo.extend(dijit._Widget,{selected:false,closable:false,iconClass:"",showTitle:true});
+
+
+dojo.declare(
+       "dijit.layout.StackContainer",
+       dijit.layout._LayoutWidget,
+       {
+       // summary:
+       //              A container that has multiple children, but shows only
+       //              one child at a time
+       //
+       // description:
+       //              A container for widgets (ContentPanes, for example) That displays
+       //              only one Widget at a time.
+       //
+       //              Publishes topics [widgetId]-addChild, [widgetId]-removeChild, and [widgetId]-selectChild
+       //
+       //              Can be base class for container, Wizard, Show, etc.
+
+       // doLayout: Boolean
+       //              If true, change the size of my currently displayed child to match my size
+       doLayout: true,
+
+       // persist: Boolean
+       //              Remembers the selected child across sessions
+       persist: false,
+
+       baseClass: "dijitStackContainer",
+
+/*=====
+       // selectedChildWidget: [readonly] dijit._Widget
+       //              References the currently selected child widget, if any.
+       //              Adjust selected child with selectChild() method.
+       selectedChildWidget: null,
+=====*/
+
+       buildRendering: function(){
+               this.inherited(arguments);
+               dojo.addClass(this.domNode, "dijitLayoutContainer");
+               dijit.setWaiRole(this.containerNode, "tabpanel");
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
+               this.connect(this.domNode, "onkeypress", this._onKeyPress);
+       },
+
+       startup: function(){
+               if(this._started){ return; }
+
+               var children = this.getChildren();
+
+               // Setup each page panel to be initially hidden
+               dojo.forEach(children, this._setupChild, this);
+
+               // Figure out which child to initially display, defaulting to first one
+               if(this.persist){
+                       this.selectedChildWidget = dijit.byId(dojo.cookie(this.id + "_selectedChild"));
+               }else{
+                       dojo.some(children, function(child){
+                               if(child.selected){
+                                       this.selectedChildWidget = child;
+                               }
+                               return child.selected;
+                       }, this);
+               }
+               var selected = this.selectedChildWidget;
+               if(!selected && children[0]){
+                       selected = this.selectedChildWidget = children[0];
+                       selected.selected = true;
+               }
+
+               // Publish information about myself so any StackControllers can initialize.
+               // This needs to happen before this.inherited(arguments) so that for
+               // TabContainer, this._contentBox doesn't include the space for the tab labels.
+               dojo.publish(this.id+"-startup", [{children: children, selected: selected}]);
+
+               // Startup each child widget, and do initial layout like setting this._contentBox,
+               // then calls this.resize() which does the initial sizing on the selected child.
+               this.inherited(arguments);
+       },
+
+       resize: function(){
+               // Resize is called when we are first made visible (it's called from startup()
+               // if we are initially visible).   If this is the first time we've been made
+               // visible then show our first child.
+               var selected = this.selectedChildWidget;
+               if(selected && !this._hasBeenShown){
+                       this._hasBeenShown = true;
+                       this._showChild(selected);
+               }
+               this.inherited(arguments);
+       },
+
+       _setupChild: function(/*dijit._Widget*/ child){
+               // Overrides _LayoutWidget._setupChild()
+
+               this.inherited(arguments);
+
+               dojo.replaceClass(child.domNode, "dijitHidden", "dijitVisible");
+
+               // remove the title attribute so it doesn't show up when i hover
+               // over a node
+               child.domNode.title = "";
+       },
+
+       addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+               // Overrides _Container.addChild() to do layout and publish events
+
+               this.inherited(arguments);
+
+               if(this._started){
+                       dojo.publish(this.id+"-addChild", [child, insertIndex]);
+
+                       // in case the tab titles have overflowed from one line to two lines
+                       // (or, if this if first child, from zero lines to one line)
+                       // TODO: w/ScrollingTabController this is no longer necessary, although
+                       // ScrollTabController.resize() does need to get called to show/hide
+                       // the navigation buttons as appropriate, but that's handled in ScrollingTabController.onAddChild()
+                       this.layout();
+
+                       // if this is the first child, then select it
+                       if(!this.selectedChildWidget){
+                               this.selectChild(child);
+                       }
+               }
+       },
+
+       removeChild: function(/*dijit._Widget*/ page){
+               // Overrides _Container.removeChild() to do layout and publish events
+
+               this.inherited(arguments);
+
+               if(this._started){
+                       // this will notify any tablists to remove a button; do this first because it may affect sizing
+                       dojo.publish(this.id + "-removeChild", [page]);
+               }
+
+               // If we are being destroyed than don't run the code below (to select another page), because we are deleting
+               // every page one by one
+               if(this._beingDestroyed){ return; }
+
+               // Select new page to display, also updating TabController to show the respective tab.
+               // Do this before layout call because it can affect the height of the TabController.
+               if(this.selectedChildWidget === page){
+                       this.selectedChildWidget = undefined;
+                       if(this._started){
+                               var children = this.getChildren();
+                               if(children.length){
+                                       this.selectChild(children[0]);
+                               }
+                       }
+               }
+
+               if(this._started){
+                       // In case the tab titles now take up one line instead of two lines
+                       // (note though that ScrollingTabController never overflows to multiple lines),
+                       // or the height has changed slightly because of addition/removal of tab which close icon
+                       this.layout();
+               }
+       },
+
+       selectChild: function(/*dijit._Widget|String*/ page, /*Boolean*/ animate){
+               // summary:
+               //              Show the given widget (which must be one of my children)
+               // page:
+               //              Reference to child widget or id of child widget
+
+               page = dijit.byId(page);
+
+               if(this.selectedChildWidget != page){
+                       // Deselect old page and select new one
+                       var d = this._transition(page, this.selectedChildWidget, animate);
+                       this._set("selectedChildWidget", page);
+                       dojo.publish(this.id+"-selectChild", [page]);
+
+                       if(this.persist){
+                               dojo.cookie(this.id + "_selectedChild", this.selectedChildWidget.id);
+                       }
+               }
+
+               return d;               // If child has an href, promise that fires when the child's href finishes loading
+       },
+
+       _transition: function(/*dijit._Widget*/ newWidget, /*dijit._Widget*/ oldWidget, /*Boolean*/ animate){
+               // summary:
+               //              Hide the old widget and display the new widget.
+               //              Subclasses should override this.
+               // tags:
+               //              protected extension
+               if(oldWidget){
+                       this._hideChild(oldWidget);
+               }
+               var d = this._showChild(newWidget);
+
+               // Size the new widget, in case this is the first time it's being shown,
+               // or I have been resized since the last time it was shown.
+               // Note that page must be visible for resizing to work.
+               if(newWidget.resize){
+                       if(this.doLayout){
+                               newWidget.resize(this._containerContentBox || this._contentBox);
+                       }else{
+                               // the child should pick it's own size but we still need to call resize()
+                               // (with no arguments) to let the widget lay itself out
+                               newWidget.resize();
+                       }
+               }
+
+               return d;       // If child has an href, promise that fires when the child's href finishes loading
+       },
+
+       _adjacent: function(/*Boolean*/ forward){
+               // summary:
+               //              Gets the next/previous child widget in this container from the current selection.
+               var children = this.getChildren();
+               var index = dojo.indexOf(children, this.selectedChildWidget);
+               index += forward ? 1 : children.length - 1;
+               return children[ index % children.length ]; // dijit._Widget
+       },
+
+       forward: function(){
+               // summary:
+               //              Advance to next page.
+               return this.selectChild(this._adjacent(true), true);
+       },
+
+       back: function(){
+               // summary:
+               //              Go back to previous page.
+               return this.selectChild(this._adjacent(false), true);
+       },
+
+       _onKeyPress: function(e){
+               dojo.publish(this.id+"-containerKeyPress", [{ e: e, page: this}]);
+       },
+
+       layout: function(){
+               // Implement _LayoutWidget.layout() virtual method.
+               if(this.doLayout && this.selectedChildWidget && this.selectedChildWidget.resize){
+                       this.selectedChildWidget.resize(this._containerContentBox || this._contentBox);
+               }
+       },
+
+       _showChild: function(/*dijit._Widget*/ page){
+               // summary:
+               //              Show the specified child by changing it's CSS, and call _onShow()/onShow() so
+               //              it can do any updates it needs regarding loading href's etc.
+               // returns:
+               //              Promise that fires when page has finished showing, or true if there's no href
+               var children = this.getChildren();
+               page.isFirstChild = (page == children[0]);
+               page.isLastChild = (page == children[children.length-1]);
+               page._set("selected", true);
+
+               dojo.replaceClass(page.domNode, "dijitVisible", "dijitHidden");
+
+               return page._onShow() || true;
+       },
+
+       _hideChild: function(/*dijit._Widget*/ page){
+               // summary:
+               //              Hide the specified child by changing it's CSS, and call _onHide() so
+               //              it's notified.
+               page._set("selected", false);
+               dojo.replaceClass(page.domNode, "dijitHidden", "dijitVisible");
+
+               page.onHide();
+       },
+
+       closeChild: function(/*dijit._Widget*/ page){
+               // summary:
+               //              Callback when user clicks the [X] to remove a page.
+               //              If onClose() returns true then remove and destroy the child.
+               // tags:
+               //              private
+               var remove = page.onClose(this, page);
+               if(remove){
+                       this.removeChild(page);
+                       // makes sure we can clean up executeScripts in ContentPane onUnLoad
+                       page.destroyRecursive();
+               }
+       },
+
+       destroyDescendants: function(/*Boolean*/ preserveDom){
+               dojo.forEach(this.getChildren(), function(child){
+                       this.removeChild(child);
+                       child.destroyRecursive(preserveDom);
+               }, this);
+       }
+});
+
+// For back-compat, remove for 2.0
+
+
+// These arguments can be specified for the children of a StackContainer.
+// Since any widget can be specified as a StackContainer child, mix them
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget, {
+       // selected: Boolean
+       //              Parameter for children of `dijit.layout.StackContainer` or subclasses.
+       //              Specifies that this widget should be the initially displayed pane.
+       //              Note: to change the selected child use `dijit.layout.StackContainer.selectChild`
+       selected: false,
+
+       // closable: Boolean
+       //              Parameter for children of `dijit.layout.StackContainer` or subclasses.
+       //              True if user can close (destroy) this child, such as (for example) clicking the X on the tab.
+       closable: false,
+
+       // iconClass: String
+       //              Parameter for children of `dijit.layout.StackContainer` or subclasses.
+       //              CSS Class specifying icon to use in label associated with this pane.
+       iconClass: "",
+
+       // showTitle: Boolean
+       //              Parameter for children of `dijit.layout.StackContainer` or subclasses.
+       //              When true, display title of this widget as tab label etc., rather than just using
+       //              icon specified in iconClass
+       showTitle: true
+});
+
 }
index 033dadf6f9328199982876e9f020026e0d2358ea..e0d2075bbed743bac4e5c7917e635fd8a0a668db 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.layout.StackController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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,ro,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.getObject(this.buttonWidget);
-var _6=new _5({id:this.id+"_"+_3.id,label:_3.title,dir:_3.dir,lang:_3.lang,showLabel:_3.showTitle,iconClass:_3.iconClass,closeButton:_3.closable,title:_3.tooltip});
-dijit.setWaiState(_6.focusNode,"selected","false");
-this.pane2handles[_3.id]=[this.connect(_3,"set",function(_7,_8){
-var _9={title:"label",showTitle:"showLabel",iconClass:"iconClass",closable:"closeButton",tooltip:"title"}[_7];
-if(_9){
-_6.set(_9,_8);
-}
-}),this.connect(_6,"onClick",dojo.hitch(this,"onButtonClick",_3)),this.connect(_6,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",_3))];
-this.addChild(_6,_4);
-this.pane2button[_3.id]=_6;
-_3.controlButton=_6;
-if(!this._currentChild){
-_6.focusNode.setAttribute("tabIndex","0");
-dijit.setWaiState(_6.focusNode,"selected","true");
-this._currentChild=_3;
-}
-if(!this.isLeftToRight()&&dojo.isIE&&this._rectifyRtlTabList){
-this._rectifyRtlTabList();
-}
-},onRemoveChild:function(_a){
-if(this._currentChild===_a){
-this._currentChild=null;
-}
-dojo.forEach(this.pane2handles[_a.id],this.disconnect,this);
-delete this.pane2handles[_a.id];
-var _b=this.pane2button[_a.id];
-if(_b){
-this.removeChild(_b);
-delete this.pane2button[_a.id];
-_b.destroy();
-}
-delete _a.controlButton;
-},onSelectChild:function(_c){
-if(!_c){
-return;
-}
-if(this._currentChild){
-var _d=this.pane2button[this._currentChild.id];
-_d.set("checked",false);
-dijit.setWaiState(_d.focusNode,"selected","false");
-_d.focusNode.setAttribute("tabIndex","-1");
-}
-var _e=this.pane2button[_c.id];
-_e.set("checked",true);
-dijit.setWaiState(_e.focusNode,"selected","true");
-this._currentChild=_c;
-_e.focusNode.setAttribute("tabIndex","0");
-var _f=dijit.byId(this.containerId);
-dijit.setWaiState(_f.containerNode,"labelledby",_e.id);
-},onButtonClick:function(_10){
-var _11=dijit.byId(this.containerId);
-_11.selectChild(_10);
-},onCloseButtonClick:function(_12){
-var _13=dijit.byId(this.containerId);
-_13.closeChild(_12);
-if(this._currentChild){
-var b=this.pane2button[this._currentChild.id];
-if(b){
-dijit.focus(b.focusNode||b.domNode);
-}
-}
-},adjacent:function(_14){
-if(!this.isLeftToRight()&&(!this.tabPosition||/top|bottom/.test(this.tabPosition))){
-_14=!_14;
-}
-var _15=this.getChildren();
-var _16=dojo.indexOf(_15,this.pane2button[this._currentChild.id]);
-var _17=_14?1:_15.length-1;
-return _15[(_16+_17)%_15.length];
-},onkeypress:function(e){
-if(this.disabled||e.altKey){
-return;
-}
-var _18=null;
-if(e.ctrlKey||!e._djpage){
-var k=dojo.keys;
-switch(e.charOrCode){
-case k.LEFT_ARROW:
-case k.UP_ARROW:
-if(!e._djpage){
-_18=false;
-}
-break;
-case k.PAGE_UP:
-if(e.ctrlKey){
-_18=false;
-}
-break;
-case k.RIGHT_ARROW:
-case k.DOWN_ARROW:
-if(!e._djpage){
-_18=true;
-}
-break;
-case k.PAGE_DOWN:
-if(e.ctrlKey){
-_18=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(_18!==null){
-this.adjacent(_18).onClick();
-dojo.stopEvent(e);
-}
-}
-},onContainerKeyPress:function(_19){
-_19.e._djpage=_19.page;
-this.onkeypress(_19.e);
-}});
-dojo.declare("dijit.layout._StackButton",dijit.form.ToggleButton,{tabIndex:"-1",postCreate:function(evt){
-dijit.setWaiRole((this.focusNode||this.domNode),"tab");
-this.inherited(arguments);
-},onClick:function(evt){
-dijit.focus(this.focusNode);
-},onClickCloseButton:function(evt){
-evt.stopPropagation();
-}});
+dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+dojo.declare(
+               "dijit.layout.StackController",
+               [dijit._Widget, dijit._Templated, dijit._Container],
+               {
+                       // summary:
+                       //              Set of buttons to select a page in a page list.
+                       // description:
+                       //              Monitors the specified StackContainer, and whenever a page is
+                       //              added, deleted, or selected, updates itself accordingly.
+
+                       templateString: "<span role='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",
+
+                       // containerId: [const] String
+                       //              The id of the page container that I point to
+                       containerId: "",
+
+                       // buttonWidget: [const] String
+                       //              The name of the button widget to create to correspond to each page
+                       buttonWidget: "dijit.layout._StackButton",
+
+                       constructor: function(){
+                               this.pane2button = {};          // mapping from pane id to buttons
+                               this.pane2connects = {};        // mapping from pane id to this.connect() handles
+                               this.pane2watches = {};         // mapping from pane id to watch() handles
+                       },
+
+                       buildRendering: function(){
+                               this.inherited(arguments);
+                               dijit.setWaiRole(this.domNode, "tablist");      // TODO: unneeded?   it's in template above.
+                       },
+
+                       postCreate: function(){
+                               this.inherited(arguments);
+
+                               // Listen to notifications from StackContainer
+                               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(/*Object*/ info){
+                               // summary:
+                               //              Called after StackContainer has finished initializing
+                               // tags:
+                               //              private
+                               dojo.forEach(info.children, this.onAddChild, this);
+                               if(info.selected){
+                                       // Show button corresponding to selected pane (unless selected
+                                       // is null because there are no panes)
+                                       this.onSelectChild(info.selected);
+                               }
+                       },
+
+                       destroy: function(){
+                               for(var pane in this.pane2button){
+                                       this.onRemoveChild(dijit.byId(pane));
+                               }
+                               this.inherited(arguments);
+                       },
+
+                       onAddChild: function(/*dijit._Widget*/ page, /*Integer?*/ insertIndex){
+                               // summary:
+                               //              Called whenever a page is added to the container.
+                               //              Create button corresponding to the page.
+                               // tags:
+                               //              private
+
+                               // create an instance of the button widget
+                               var cls = dojo.getObject(this.buttonWidget);
+                               var button = new cls({
+                                       id: this.id + "_" + page.id,
+                                       label: page.title,
+                                       dir: page.dir,
+                                       lang: page.lang,
+                                       showLabel: page.showTitle,
+                                       iconClass: page.iconClass,
+                                       closeButton: page.closable,
+                                       title: page.tooltip
+                               });
+                               dijit.setWaiState(button.focusNode,"selected", "false");
+
+
+                               // map from page attribute to corresponding tab button attribute
+                               var pageAttrList = ["title", "showTitle", "iconClass", "closable", "tooltip"],
+                                       buttonAttrList = ["label", "showLabel", "iconClass", "closeButton", "title"];
+
+                               // watch() so events like page title changes are reflected in tab button
+                               this.pane2watches[page.id] = dojo.map(pageAttrList, function(pageAttr, idx){
+                                       return page.watch(pageAttr, function(name, oldVal, newVal){
+                                               button.set(buttonAttrList[idx], newVal);
+                                       });
+                               });
+                                       
+                               // connections so that clicking a tab button selects the corresponding page
+                               this.pane2connects[page.id] = [
+                                       this.connect(button, 'onClick', dojo.hitch(this,"onButtonClick", page)),
+                                       this.connect(button, 'onClickCloseButton', dojo.hitch(this,"onCloseButtonClick", page))
+                               ];
+
+                               this.addChild(button, insertIndex);
+                               this.pane2button[page.id] = button;
+                               page.controlButton = button;    // this value might be overwritten if two tabs point to same container
+                               if(!this._currentChild){ // put the first child into the tab order
+                                       button.focusNode.setAttribute("tabIndex", "0");
+                                       dijit.setWaiState(button.focusNode, "selected", "true");
+                                       this._currentChild = page;
+                               }
+                               // make sure all tabs have the same length
+                               if(!this.isLeftToRight() && dojo.isIE && this._rectifyRtlTabList){
+                                       this._rectifyRtlTabList();
+                               }
+                       },
+
+                       onRemoveChild: function(/*dijit._Widget*/ page){
+                               // summary:
+                               //              Called whenever a page is removed from the container.
+                               //              Remove the button corresponding to the page.
+                               // tags:
+                               //              private
+
+                               if(this._currentChild === page){ this._currentChild = null; }
+
+                               // disconnect/unwatch connections/watches related to page being removed
+                               dojo.forEach(this.pane2connects[page.id], dojo.hitch(this, "disconnect"));
+                               delete this.pane2connects[page.id];
+                               dojo.forEach(this.pane2watches[page.id], function(w){ w.unwatch(); });
+                               delete this.pane2watches[page.id];
+
+                               var button = this.pane2button[page.id];
+                               if(button){
+                                       this.removeChild(button);
+                                       delete this.pane2button[page.id];
+                                       button.destroy();
+                               }
+                               delete page.controlButton;
+                       },
+
+                       onSelectChild: function(/*dijit._Widget*/ page){
+                               // summary:
+                               //              Called when a page has been selected in the StackContainer, either by me or by another StackController
+                               // tags:
+                               //              private
+
+                               if(!page){ return; }
+
+                               if(this._currentChild){
+                                       var oldButton=this.pane2button[this._currentChild.id];
+                                       oldButton.set('checked', false);
+                                       dijit.setWaiState(oldButton.focusNode, "selected", "false");
+                                       oldButton.focusNode.setAttribute("tabIndex", "-1");
+                               }
+
+                               var newButton=this.pane2button[page.id];
+                               newButton.set('checked', true);
+                               dijit.setWaiState(newButton.focusNode, "selected", "true");
+                               this._currentChild = page;
+                               newButton.focusNode.setAttribute("tabIndex", "0");
+                               var container = dijit.byId(this.containerId);
+                               dijit.setWaiState(container.containerNode, "labelledby", newButton.id);
+                       },
+
+                       onButtonClick: function(/*dijit._Widget*/ page){
+                               // summary:
+                               //              Called whenever one of my child buttons is pressed in an attempt to select a page
+                               // tags:
+                               //              private
+
+                               var container = dijit.byId(this.containerId);
+                               container.selectChild(page);
+                       },
+
+                       onCloseButtonClick: function(/*dijit._Widget*/ page){
+                               // summary:
+                               //              Called whenever one of my child buttons [X] is pressed in an attempt to close a page
+                               // tags:
+                               //              private
+
+                               var container = dijit.byId(this.containerId);
+                               container.closeChild(page);
+                               if(this._currentChild){
+                                       var b = this.pane2button[this._currentChild.id];
+                                       if(b){
+                                               dijit.focus(b.focusNode || b.domNode);
+                                       }
+                               }
+                       },
+
+                       // TODO: this is a bit redundant with forward, back api in StackContainer
+                       adjacent: function(/*Boolean*/ forward){
+                               // summary:
+                               //              Helper for onkeypress to find next/previous button
+                               // tags:
+                               //              private
+
+                               if(!this.isLeftToRight() && (!this.tabPosition || /top|bottom/.test(this.tabPosition))){ forward = !forward; }
+                               // find currently focused button in children array
+                               var children = this.getChildren();
+                               var current = dojo.indexOf(children, this.pane2button[this._currentChild.id]);
+                               // pick next button to focus on
+                               var offset = forward ? 1 : children.length - 1;
+                               return children[ (current + offset) % children.length ]; // dijit._Widget
+                       },
+
+                       onkeypress: function(/*Event*/ e){
+                               // summary:
+                               //              Handle keystrokes on the page list, for advancing to next/previous button
+                               //              and closing the current page if the page is closable.
+                               // tags:
+                               //              private
+
+                               if(this.disabled || e.altKey ){ return; }
+                               var forward = null;
+                               if(e.ctrlKey || !e._djpage){
+                                       var k = dojo.keys;
+                                       switch(e.charOrCode){
+                                               case k.LEFT_ARROW:
+                                               case k.UP_ARROW:
+                                                       if(!e._djpage){ forward = false; }
+                                                       break;
+                                               case k.PAGE_UP:
+                                                       if(e.ctrlKey){ forward = false; }
+                                                       break;
+                                               case k.RIGHT_ARROW:
+                                               case k.DOWN_ARROW:
+                                                       if(!e._djpage){ forward = true; }
+                                                       break;
+                                               case k.PAGE_DOWN:
+                                                       if(e.ctrlKey){ forward = true; }
+                                                       break;
+                                               case k.HOME:
+                                               case k.END:
+                                                       var children = this.getChildren();
+                                                       if(children && children.length){
+                                                               children[e.charOrCode == k.HOME ? 0 : children.length-1].onClick();
+                                                       }
+                                                       dojo.stopEvent(e);
+                                                       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); // avoid browser tab closing.
+                                                               }
+                                                       }
+                                       }
+                                       // handle next/previous page navigation (left/right arrow, etc.)
+                                       if(forward !== null){
+                                               this.adjacent(forward).onClick();
+                                               dojo.stopEvent(e);
+                                       }
+                               }
+                       },
+
+                       onContainerKeyPress: function(/*Object*/ info){
+                               // summary:
+                               //              Called when there was a keypress on the container
+                               // tags:
+                               //              private
+                               info.e._djpage = info.page;
+                               this.onkeypress(info.e);
+                       }
+       });
+
+
+dojo.declare("dijit.layout._StackButton",
+               dijit.form.ToggleButton,
+               {
+               // summary:
+               //              Internal widget used by StackContainer.
+               // description:
+               //              The button-like or tab-like object you click to select or delete a page
+               // tags:
+               //              private
+
+               // Override _FormWidget.tabIndex.
+               // StackContainer buttons are not in the tab order by default.
+               // Probably we should be calling this.startupKeyNavChildren() instead.
+               tabIndex: "-1",
+
+               buildRendering: function(/*Event*/ evt){
+                       this.inherited(arguments);
+                       dijit.setWaiRole((this.focusNode || this.domNode), "tab");
+               },
+
+               onClick: function(/*Event*/ evt){
+                       // summary:
+                       //              This is for TabContainer where the tabs are <span> rather than button,
+                       //              so need to set focus explicitly (on some browsers)
+                       //              Note that you shouldn't override this method, but you can connect to it.
+                       dijit.focus(this.focusNode);
+
+                       // ... now let StackController catch the event and tell me what to do
+               },
+
+               onClickCloseButton: function(/*Event*/ evt){
+                       // summary:
+                       //              StackContainer connects to this function; if your widget contains a close button
+                       //              then clicking it should call this function.
+                       //              Note that you shouldn't override this method, but you can connect to it.
+                       evt.stopPropagation();
+               }
+       });
+
 }
index d765cf7e47fbc5133580164976ee52d2d069029d..00942246442983cda7d13f935ff5f1556589b33a 100644 (file)
@@ -1,23 +1,76 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.TabContainer"]){
-dojo._hasResource["dijit.layout.TabContainer"]=true;
+if(!dojo._hasResource["dijit.layout.TabContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.TabContainer"] = true;
 dojo.provide("dijit.layout.TabContainer");
 dojo.require("dijit.layout._TabContainerBase");
 dojo.require("dijit.layout.TabController");
 dojo.require("dijit.layout.ScrollingTabController");
-dojo.declare("dijit.layout.TabContainer",dijit.layout._TabContainerBase,{useMenu:true,useSlider:true,controllerWidget:"",_makeController:function(_1){
-var _2=this.baseClass+"-tabs"+(this.doLayout?"":" dijitTabNoLayout"),_3=dojo.getObject(this.controllerWidget);
-return new _3({id:this.id+"_tablist",dir:this.dir,lang:this.lang,tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id,"class":_2,nested:this.nested,useMenu:this.useMenu,useSlider:this.useSlider,tabStripClass:this.tabStrip?this.baseClass+(this.tabStrip?"":"No")+"Strip":null},_1);
-},postMixInProperties:function(){
-this.inherited(arguments);
-if(!this.controllerWidget){
-this.controllerWidget=(this.tabPosition=="top"||this.tabPosition=="bottom")&&!this.nested?"dijit.layout.ScrollingTabController":"dijit.layout.TabController";
-}
-}});
+
+
+dojo.declare("dijit.layout.TabContainer",
+       dijit.layout._TabContainerBase,
+       {
+               // summary:
+               //              A Container with tabs to select each child (only one of which is displayed at a time).
+               // description:
+               //              A TabContainer is a container that has multiple panes, but shows only
+               //              one pane at a time.  There are a set of tabs corresponding to each pane,
+               //              where each tab has the name (aka title) of the pane, and optionally a close button.
+
+               // useMenu: [const] Boolean
+               //              True if a menu should be used to select tabs when they are too
+               //              wide to fit the TabContainer, false otherwise.
+               useMenu: true,
+
+               // useSlider: [const] Boolean
+               //              True if a slider should be used to select tabs when they are too
+               //              wide to fit the TabContainer, false otherwise.
+               useSlider: true,
+
+               // controllerWidget: String
+               //              An optional parameter to override the widget used to display the tab labels
+               controllerWidget: "",
+
+               _makeController: function(/*DomNode*/ srcNode){
+                       // summary:
+                       //              Instantiate tablist controller widget and return reference to it.
+                       //              Callback from _TabContainerBase.postCreate().
+                       // tags:
+                       //              protected extension
+
+                       var cls = this.baseClass + "-tabs" + (this.doLayout ? "" : " dijitTabNoLayout"),
+                               TabController = dojo.getObject(this.controllerWidget);
+
+                       return new TabController({
+                               id: this.id + "_tablist",
+                               dir: this.dir,
+                               lang: this.lang,
+                               tabPosition: this.tabPosition,
+                               doLayout: this.doLayout,
+                               containerId: this.id,
+                               "class": cls,
+                               nested: this.nested,
+                               useMenu: this.useMenu,
+                               useSlider: this.useSlider,
+                               tabStripClass: this.tabStrip ? this.baseClass + (this.tabStrip ? "":"No") + "Strip": null
+                       }, srcNode);
+               },
+
+               postMixInProperties: function(){
+                       this.inherited(arguments);
+
+                       // Scrolling controller only works for horizontal non-nested tabs
+                       if(!this.controllerWidget){
+                               this.controllerWidget = (this.tabPosition == "top" || this.tabPosition == "bottom") && !this.nested ?
+                                                       "dijit.layout.ScrollingTabController" : "dijit.layout.TabController";
+                       }
+               }
+});
+
 }
index edb3930c5bc5dd095ee748bdbe20fd5ec902dc59..0a2276aca8548860fc4c9f810759dc1eb7191ac5 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.layout.TabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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,ro,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",cssStateNodes:{closeNode:"dijitTabCloseButton"},templateString:dojo.cache("dijit.layout","templates/_TabButton.html","<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div waiRole=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' waiRole=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>x</span\n\t\t        ></span>\n\t\t\t</div>\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);
-}
-var _4=dojo.i18n.getLocalization("dijit","common");
-this._closeMenu=new dijit.Menu({id:this.id+"_Menu",dir:this.dir,lang:this.lang,targetNodeIds:[this.domNode]});
-this._closeMenu.addChild(new dijit.MenuItem({label:_4.itemClose,dir:this.dir,lang:this.lang,onClick:dojo.hitch(this,"onClickCloseButton")}));
-}else{
-if(this._closeMenu){
-this._closeMenu.destroyRecursive();
-delete this._closeMenu;
-}
-}
-},_setLabelAttr:function(_5){
-this.inherited(arguments);
-if(this.showLabel==false&&!this.params.title){
-this.iconNode.alt=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");
-}
-},destroy:function(){
-if(this._closeMenu){
-this._closeMenu.destroyRecursive();
-delete this._closeMenu;
-}
-this.inherited(arguments);
-}});
+dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+
+// Menu is used for an accessible close button, would be nice to have a lighter-weight solution
+
+
+dojo.declare("dijit.layout.TabController",
+       dijit.layout.StackController,
+{
+       // summary:
+       //              Set of tabs (the things with titles and a close button, that you click to show a tab panel).
+       //              Used internally by `dijit.layout.TabContainer`.
+       // description:
+       //              Lets the user select the currently shown pane in a TabContainer or StackContainer.
+       //              TabController also monitors the TabContainer, and whenever a pane is
+       //              added or deleted updates itself accordingly.
+       // tags:
+       //              private
+
+       templateString: "<div role='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",
+
+       // tabPosition: String
+       //              Defines where tabs go relative to the content.
+       //              "top", "bottom", "left-h", "right-h"
+       tabPosition: "top",
+
+       // buttonWidget: String
+       //              The name of the tab widget to create to correspond to each page
+       buttonWidget: "dijit.layout._TabButton",
+
+       _rectifyRtlTabList: function(){
+               // summary:
+               //              For left/right TabContainer when page is RTL mode, rectify the width of all tabs to be equal, otherwise the tab widths are different in IE
+
+               if(0 >= this.tabPosition.indexOf('-h')){ return; }
+               if(!this.pane2button){ return; }
+
+               var maxWidth = 0;
+               for(var pane in this.pane2button){
+                       var ow = this.pane2button[pane].innerDiv.scrollWidth;
+                       maxWidth = Math.max(maxWidth, ow);
+               }
+               //unify the length of all the tabs
+               for(pane in this.pane2button){
+                       this.pane2button[pane].innerDiv.style.width = maxWidth + 'px';
+               }
+       }
+});
+
+dojo.declare("dijit.layout._TabButton",
+       dijit.layout._StackButton,
+       {
+       // summary:
+       //              A tab (the thing you click to select a pane).
+       // description:
+       //              Contains the title of the pane, and optionally a close-button to destroy the pane.
+       //              This is an internal widget and should not be instantiated directly.
+       // tags:
+       //              private
+
+       // baseClass: String
+       //              The CSS class applied to the domNode.
+       baseClass: "dijitTab",
+
+       // Apply dijitTabCloseButtonHover when close button is hovered
+       cssStateNodes: {
+               closeNode: "dijitTabCloseButton"
+       },
+
+       templateString: dojo.cache("dijit.layout", "templates/_TabButton.html", "<div role=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div role=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div role=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div role=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitTabButtonIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' role=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>[x]</span\n\t\t        ></span>\n\t\t\t</div>\n        </div>\n    </div>\n</div>\n"),
+
+       // Override _FormWidget.scrollOnFocus.
+       // Don't scroll the whole tab container into view when the button is focused.
+       scrollOnFocus: false,
+
+       buildRendering: function(){
+               this.inherited(arguments);
+
+               dojo.setSelectable(this.containerNode, false);
+       },
+
+       startup: function(){
+               this.inherited(arguments);
+               var n = this.domNode;
+
+               // Required to give IE6 a kick, as it initially hides the
+               // tabs until they are focused on.
+               setTimeout(function(){
+                       n.className = n.className;
+               }, 1);
+       },
+
+       _setCloseButtonAttr: function(/*Boolean*/ disp){
+               // summary:
+               //              Hide/show close button
+               this._set("closeButton", disp);
+               dojo.toggleClass(this.innerDiv, "dijitClosable", disp);
+               this.closeNode.style.display = disp ? "" : "none";
+               if(disp){
+                       var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
+                       if(this.closeNode){
+                               dojo.attr(this.closeNode,"title", _nlsResources.itemClose);
+                       }
+                       // add context menu onto title button
+                       var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
+                       this._closeMenu = new dijit.Menu({
+                               id: this.id+"_Menu",
+                               dir: this.dir,
+                               lang: this.lang,
+                               targetNodeIds: [this.domNode]
+                       });
+
+                       this._closeMenu.addChild(new dijit.MenuItem({
+                               label: _nlsResources.itemClose,
+                               dir: this.dir,
+                               lang: this.lang,
+                               onClick: dojo.hitch(this, "onClickCloseButton")
+                       }));
+               }else{
+                       if(this._closeMenu){
+                               this._closeMenu.destroyRecursive();
+                               delete this._closeMenu;
+                       }
+               }
+       },
+       _setLabelAttr: function(/*String*/ content){
+               // summary:
+               //              Hook for set('label', ...) to work.
+               // description:
+               //              takes an HTML string.
+               //              Inherited ToggleButton implementation will Set the label (text) of the button;
+               //              Need to set the alt attribute of icon on tab buttons if no label displayed
+               this.inherited(arguments);
+               if(this.showLabel == false && !this.params.title){
+                       this.iconNode.alt = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || '');
+               }
+       },
+
+       destroy: function(){
+               if(this._closeMenu){
+                       this._closeMenu.destroyRecursive();
+                       delete this._closeMenu;
+               }
+               this.inherited(arguments);
+       }
+});
+
 }
diff --git a/lib/dijit/layout/_ContentPaneResizeMixin.js b/lib/dijit/layout/_ContentPaneResizeMixin.js
new file mode 100644 (file)
index 0000000..fe361be
--- /dev/null
@@ -0,0 +1,260 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._ContentPaneResizeMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout._ContentPaneResizeMixin"] = true;
+dojo.provide("dijit.layout._ContentPaneResizeMixin");
+dojo.require("dijit._Contained");
+dojo.require("dijit.layout._LayoutWidget");
+
+
+dojo.declare("dijit.layout._ContentPaneResizeMixin", null, {
+       // summary:
+       //              Resize() functionality of ContentPane.   If there's a single layout widget
+       //              child then it will call resize() with the same dimensions as the ContentPane.
+       //              Otherwise just calls resize on each child.
+       //
+       //              Also implements basic startup() functionality, where starting the parent
+       //              will start the children
+
+       // doLayout: Boolean
+       //              - false - don't adjust size of children
+       //              - true - if there is a single visible child widget, set it's size to
+       //                              however big the ContentPane is
+       doLayout: true,
+
+       // 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,
+
+       // isLayoutContainer: [protected] Boolean
+       //              Indicates that this widget will call resize() on it's child widgets
+       //              when they become visible.
+       isLayoutContainer: true,
+
+       _startChildren: function(){
+               // summary:
+               //              Call startup() on all children including non _Widget ones like dojo.dnd.Source objects
+
+               // This starts all the widgets
+               dojo.forEach(this.getChildren(), function(child){
+                       child.startup();
+                       child._started = true;
+               });
+       },
+
+       startup: function(){
+               // summary:
+               //              See `dijit.layout._LayoutWidget.startup` for description.
+               //              Although ContentPane doesn't extend _LayoutWidget, it does implement
+               //              the same API.
+
+               if(this._started){ return; }
+
+               var parent = dijit._Contained.prototype.getParent.call(this);
+               this._childOfLayoutWidget = parent && parent.isLayoutContainer;
+
+               // I need to call resize() on my child/children (when I become visible), unless
+               // I'm the child of a layout widget in which case my parent will call resize() on me and I'll do it then.
+               this._needLayout = !this._childOfLayoutWidget;
+
+               this.inherited(arguments);
+
+               this._startChildren();
+
+               if(this._isShown()){
+                       this._onShow();
+               }
+
+               if(!this._childOfLayoutWidget){
+                       // If my parent isn't a layout container, since 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._needLayout = !this._childOfLayoutWidget;
+                               this.resize();
+                       });
+               }
+       },
+
+       _checkIfSingleChild: function(){
+               // summary:
+               //              Test if we have exactly one visible widget as a child,
+               //              and if so assume that we are a container for that widget,
+               //              and should propagate startup() and resize() calls to it.
+               //              Skips over things like data stores since they aren't visible.
+
+               var childNodes = dojo.query("> *", this.containerNode).filter(function(node){
+                               return node.tagName !== "SCRIPT"; // or a regexp for hidden elements like script|area|map|etc..
+                       }),
+                       childWidgetNodes = childNodes.filter(function(node){
+                               return dojo.hasAttr(node, "data-dojo-type") || dojo.hasAttr(node, "dojoType") || dojo.hasAttr(node, "widgetId");
+                       }),
+                       candidateWidgets = dojo.filter(childWidgetNodes.map(dijit.byNode), function(widget){
+                               return widget && widget.domNode && widget.resize;
+                       });
+
+               if(
+                       // all child nodes are widgets
+                       childNodes.length == childWidgetNodes.length &&
+
+                       // all but one are invisible (like dojo.data)
+                       candidateWidgets.length == 1
+               ){
+                       this._singleChild = candidateWidgets[0];
+               }else{
+                       delete this._singleChild;
+               }
+
+               // So we can set overflow: hidden to avoid a safari bug w/scrollbars showing up (#9449)
+               dojo.toggleClass(this.containerNode, this.baseClass + "SingleChild", !!this._singleChild);
+       },
+
+       resize: function(changeSize, resultSize){
+               // summary:
+               //              See `dijit.layout._LayoutWidget.resize` for description.
+               //              Although ContentPane doesn't extend _LayoutWidget, it does implement
+               //              the same API.
+
+               // For the TabContainer --> BorderContainer --> ContentPane case, _onShow() is
+               // never called, so resize() is our trigger to do the initial href download (see [20099]).
+               // However, don't load href for closed TitlePanes.
+               if(!this._wasShown && this.open !== false){
+                       this._onShow();
+               }
+
+               this._resizeCalled = true;
+
+               this._scheduleLayout(changeSize, resultSize);
+       },
+
+       _scheduleLayout: function(changeSize, resultSize){
+               // summary:
+               //              Resize myself, and call resize() on each of my child layout widgets, either now
+               //              (if I'm currently visible) or when I become visible
+               if(this._isShown()){
+                       this._layout(changeSize, resultSize);
+               }else{
+                       this._needLayout = true;
+                       this._changeSize = changeSize;
+                       this._resultSize = resultSize;
+               }
+       },
+
+       _layout: function(changeSize, resultSize){
+               // summary:
+               //              Resize myself according to optional changeSize/resultSize parameters, like a layout widget.
+               //              Also, since I am a Container widget, each of my children expects me to
+               //              call resize() or layout() on them.
+               //
+               //              Should be called on initialization and also whenever we get new content
+               //              (from an href, or from set('content', ...))... but deferred until
+               //              the ContentPane is visible
+
+               // Set margin box size, unless it wasn't specified, in which case use current size.
+               if(changeSize){
+                       dojo.marginBox(this.domNode, changeSize);
+               }
+
+               // Compute content box size of containerNode in case we [later] need to size our single child.
+               var cn = this.containerNode;
+               if(cn === this.domNode){
+                       // If changeSize or resultSize was passed to this method and this.containerNode ==
+                       // this.domNode then we can compute the content-box size without querying the node,
+                       // which is more reliable (similar to LayoutWidget.resize) (see for example #9449).
+                       var mb = resultSize || {};
+                       dojo.mixin(mb, changeSize || {}); // changeSize overrides resultSize
+                       if(!("h" in mb) || !("w" in mb)){
+                               mb = dojo.mixin(dojo.marginBox(cn), mb); // just use dojo.marginBox() to fill in missing values
+                       }
+                       this._contentBox = dijit.layout.marginBox2contentBox(cn, mb);
+               }else{
+                       this._contentBox = dojo.contentBox(cn);
+               }
+
+               this._layoutChildren();
+
+               delete this._needLayout;
+       },
+       
+       _layoutChildren: function(){
+               // Call _checkIfSingleChild() again in case app has manually mucked w/the content
+               // of the ContentPane (rather than changing it through the set("content", ...) API.
+               if(this.doLayout){
+                       this._checkIfSingleChild();
+               }
+
+               if(this._singleChild && this._singleChild.resize){
+                       var cb = this._contentBox || dojo.contentBox(this.containerNode);
+
+                       // note: if widget has padding this._contentBox will have l and t set,
+                       // but don't pass them to resize() or it will doubly-offset the child
+                       this._singleChild.resize({w: cb.w, h: cb.h});
+               }else{
+                       // All my child widgets are independently sized (rather than matching my size),
+                       // but I still need to call resize() on each child to make it layout.
+                       dojo.forEach(this.getChildren(), function(widget){
+                               if(widget.resize){
+                                       widget.resize();
+                               }
+                       });
+               }
+       },
+
+       _isShown: function(){
+               // summary:
+               //              Returns true if the content is currently shown.
+               // description:
+               //              If I am a child of a layout widget then it actually returns true if I've ever been visible,
+               //              not whether I'm currently visible, since that's much faster than tracing up the DOM/widget
+               //              tree every call, and at least solves the performance problem on page load by deferring loading
+               //              hidden ContentPanes until they are first shown
+
+               if(this._childOfLayoutWidget){
+                       // If we are TitlePane, etc - we return that only *IF* we've been resized
+                       if(this._resizeCalled && "open" in this){
+                               return this.open;
+                       }
+                       return this._resizeCalled;
+               }else if("open" in this){
+                       return this.open;               // for TitlePane, etc.
+               }else{
+                       var node = this.domNode, parent = this.domNode.parentNode;
+                       return (node.style.display != 'none') && (node.style.visibility != 'hidden') && !dojo.hasClass(node, "dijitHidden") &&
+                                       parent && parent.style && (parent.style.display != 'none');
+               }
+       },
+
+       _onShow: function(){
+               // summary:
+               //              Called when the ContentPane is made visible
+               // description:
+               //              For a plain ContentPane, this is called on initialization, from startup().
+               //              If the ContentPane is a hidden pane of a TabContainer etc., then it's
+               //              called whenever the pane is made visible.
+               //
+               //              Does layout/resize of child widget(s)
+
+               if(this._needLayout){
+                       // If a layout has been scheduled for when we become visible, do it now
+                       this._layout(this._changeSize, this._resultSize);
+               }
+
+               this.inherited(arguments);
+
+               // Need to keep track of whether ContentPane has been shown (which is different than
+               // whether or not it's currently visible).
+               this._wasShown = true;
+       }
+});
+
+}
index ec7be37b70f8b1e79be0f2a45a3c5b0d611ce8ea..cbbf71009d08b6de5d45c90e07462c900fe6806c 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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._LayoutWidget"]){
-dojo._hasResource["dijit.layout._LayoutWidget"]=true;
+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.require("dijit._Widget");
 dojo.require("dijit._Container");
 dojo.require("dijit._Contained");
-dojo.declare("dijit.layout._LayoutWidget",[dijit._Widget,dijit._Container,dijit._Contained],{baseClass:"dijitLayoutContainer",isLayoutContainer:true,postCreate:function(){
-dojo.addClass(this.domNode,"dijitContainer");
-this.inherited(arguments);
-},startup:function(){
-if(this._started){
-return;
-}
-this.inherited(arguments);
-var _1=this.getParent&&this.getParent();
-if(!(_1&&_1.isLayoutContainer)){
-this.resize();
-this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){
-this.resize();
-});
-}
-},resize:function(_2,_3){
-var _4=this.domNode;
-if(_2){
-dojo.marginBox(_4,_2);
-if(_2.t){
-_4.style.top=_2.t+"px";
-}
-if(_2.l){
-_4.style.left=_2.l+"px";
-}
-}
-var mb=_3||{};
-dojo.mixin(mb,_2||{});
-if(!("h" in mb)||!("w" in mb)){
-mb=dojo.mixin(dojo.marginBox(_4),mb);
-}
-var cs=dojo.getComputedStyle(_4);
-var me=dojo._getMarginExtents(_4,cs);
-var be=dojo._getBorderExtents(_4,cs);
-var bb=(this._borderBox={w:mb.w-(me.w+be.w),h:mb.h-(me.h+be.h)});
-var pe=dojo._getPadExtents(_4,cs);
-this._contentBox={l:dojo._toPixelValue(_4,cs.paddingLeft),t:dojo._toPixelValue(_4,cs.paddingTop),w:bb.w-pe.w,h:bb.h-pe.h};
-this.layout();
-},layout:function(){
-},_setupChild:function(_5){
-dojo.addClass(_5.domNode,this.baseClass+"-child");
-if(_5.baseClass){
-dojo.addClass(_5.domNode,this.baseClass+"-"+_5.baseClass);
-}
-},addChild:function(_6,_7){
-this.inherited(arguments);
-if(this._started){
-this._setupChild(_6);
-}
-},removeChild:function(_8){
-dojo.removeClass(_8.domNode,this.baseClass+"-child");
-if(_8.baseClass){
-dojo.removeClass(_8.domNode,this.baseClass+"-"+_8.baseClass);
-}
-this.inherited(arguments);
-}});
-dijit.layout.marginBox2contentBox=function(_9,mb){
-var cs=dojo.getComputedStyle(_9);
-var me=dojo._getMarginExtents(_9,cs);
-var pb=dojo._getPadBorderExtents(_9,cs);
-return {l:dojo._toPixelValue(_9,cs.paddingLeft),t:dojo._toPixelValue(_9,cs.paddingTop),w:mb.w-(me.w+pb.w),h:mb.h-(me.h+pb.h)};
+
+
+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,
+
+               buildRendering: function(){
+                       this.inherited(arguments);
+                       dojo.addClass(this.domNode, "dijitContainer");
+               },
+
+               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
+
+                       var cls = this.baseClass + "-child "
+                               + (child.baseClass ? this.baseClass + "-" + child.baseClass : "");
+                       dojo.addClass(child.domNode, cls);
+               },
+
+               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()
+                       var cls = this.baseClass + "-child"
+                                       + (child.baseClass ?
+                                               " " + this.baseClass + "-" + child.baseClass : "");
+                       dojo.removeClass(child.domNode, cls);
+                       
+                       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 _a=function(_b){
-return _b.substring(0,1).toUpperCase()+_b.substring(1);
-};
-var _c=function(_d,_e){
-_d.resize?_d.resize(_e):dojo.marginBox(_d.domNode,_e);
-dojo.mixin(_d,dojo.marginBox(_d.domNode));
-dojo.mixin(_d,_e);
-};
-dijit.layout.layoutChildren=function(_f,dim,_10){
-dim=dojo.mixin({},dim);
-dojo.addClass(_f,"dijitLayoutContainer");
-_10=dojo.filter(_10,function(_11){
-return _11.layoutAlign!="client";
-}).concat(dojo.filter(_10,function(_12){
-return _12.layoutAlign=="client";
-}));
-dojo.forEach(_10,function(_13){
-var elm=_13.domNode,pos=_13.layoutAlign;
-var _14=elm.style;
-_14.left=dim.l+"px";
-_14.top=dim.t+"px";
-_14.bottom=_14.right="auto";
-dojo.addClass(elm,"dijitAlign"+_a(pos));
-if(pos=="top"||pos=="bottom"){
-_c(_13,{w:dim.w});
-dim.h-=_13.h;
-if(pos=="top"){
-dim.t+=_13.h;
-}else{
-_14.top=dim.t+dim.h+"px";
-}
-}else{
-if(pos=="left"||pos=="right"){
-_c(_13,{h:dim.h});
-dim.w-=_13.w;
-if(pos=="left"){
-dim.l+=_13.w;
-}else{
-_14.left=dim.l+dim.w+"px";
-}
-}else{
-if(pos=="client"){
-_c(_13,dim);
-}
-}
-}
-});
-};
+       var capitalize = function(word){
+               return word.substring(0,1).toUpperCase() + word.substring(1);
+       };
+
+       var size = function(widget, dim){
+               // size the child
+               var newSize = widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim);
+
+               // record child's size
+               if(newSize){
+                       // if the child returned it's new size then use that
+                       dojo.mixin(widget, newSize);
+               }else{
+                       // otherwise, call marginBox(), 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, /*Widget[]*/ children,
+                       /*String?*/ changedRegionId, /*Number?*/ changedRegionSize){
+               // 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 of Widgets or at least objects containing:
+               //                      * domNode: pointer to DOM node to position
+               //                      * region or layoutAlign: position to place DOM node
+               //                      * resize(): (optional) method to set size of node
+               //                      * id: (optional) Id of widgets, referenced from resize object, below.
+               // changedRegionId:
+               //              If specified, the slider for the region with the specified id has been dragged, and thus
+               //              the region's height or width should be adjusted according to changedRegionSize
+               // changedRegionSize:
+               //              See changedRegionId.
+
+               // 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.    TODO: move these lines to LayoutContainer?   Unneeded other places I think.
+               children = dojo.filter(children, function(item){ return item.region != "center" && item.layoutAlign != "client"; })
+                       .concat(dojo.filter(children, function(item){ return item.region == "center" || item.layoutAlign == "client"; }));
+
+               // set positions/sizes
+               dojo.forEach(children, function(child){
+                       var elm = child.domNode,
+                               pos = (child.region || 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.position = "absolute";
+
+                       dojo.addClass(elm, "dijitAlign" + capitalize(pos));
+
+                       // Size adjustments to make to this child widget
+                       var sizeSetting = {};
+
+                       // Check for optional size adjustment due to splitter drag (height adjustment for top/bottom align
+                       // panes and width adjustment for left/right align panes.
+                       if(changedRegionId && changedRegionId == child.id){
+                               sizeSetting[child.region == "top" || child.region == "bottom" ? "h" : "w"] = changedRegionSize;
+                       }
+
+                       // set size && adjust record of remaining space.
+                       // note that setting the width of a <div> may affect its height.
+                       if(pos == "top" || pos == "bottom"){
+                               sizeSetting.w = dim.w;
+                               size(child, sizeSetting);
+                               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"){
+                               sizeSetting.h = dim.h;
+                               size(child, sizeSetting);
+                               dim.w -= child.w;
+                               if(pos == "left"){
+                                       dim.l += child.w;
+                               }else{
+                                       elmStyle.left = dim.l + dim.w + "px";
+                               }
+                       }else if(pos == "client" || pos == "center"){
+                               size(child, dim);
+                       }
+               });
+       };
+
 })();
+
 }
index 0ba42ec352c23d2e691d1d2900394d51541b8658..5e07cb653ea8fb81a2ee4da0c6e1dbefb89c87bc 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.layout._TabContainerBase"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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);
-}});
+
+
+dojo.declare("dijit.layout._TabContainerBase",
+       [dijit.layout.StackContainer, dijit._Templated],
+       {
+       // summary:
+       //              Abstract base class for TabContainer.   Must define _makeController() to instantiate
+       //              and return the widget that displays the tab labels
+       // description:
+       //              A TabContainer is a container that has multiple panes, but shows only
+       //              one pane at a time.  There are a set of tabs corresponding to each pane,
+       //              where each tab has the name (aka title) of the pane, and optionally a close button.
+
+       // tabPosition: String
+       //              Defines where tabs go relative to tab content.
+       //              "top", "bottom", "left-h", "right-h"
+       tabPosition: "top",
+
+       baseClass: "dijitTabContainer",
+
+       // tabStrip: [const] Boolean
+       //              Defines whether the tablist gets an extra class for layouting, putting a border/shading
+       //              around the set of tabs.   Not supported by claro theme.
+       tabStrip: false,
+
+       // nested: [const] Boolean
+       //              If true, use styling for a TabContainer nested inside another TabContainer.
+       //              For tundra etc., makes tabs look like links, and hides the outer
+       //              border since the outer TabContainer already has a border.
+       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(){
+               // set class name according to tab position, ex: dijitTabContainerTop
+               this.baseClass += this.tabPosition.charAt(0).toUpperCase() + this.tabPosition.substr(1).replace(/-.*/, "");
+
+               this.srcNodeRef && dojo.style(this.srcNodeRef, "visibility", "hidden");
+
+               this.inherited(arguments);
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+
+               // Create the tab list that will have a tab (a.k.a. tab button) for each tab panel
+               this.tablist = this._makeController(this.tablistNode);
+
+               if(!this.doLayout){ dojo.addClass(this.domNode, "dijitTabContainerNoLayout"); }
+
+               if(this.nested){
+                       /* workaround IE's lack of support for "a > b" selectors by
+                        * tagging each node in the template.
+                        */
+                       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(/*dijit._Widget*/ tab){
+               // Overrides StackContainer._setupChild().
+               dojo.addClass(tab.domNode, "dijitTabPane");
+               this.inherited(arguments);
+       },
+
+       startup: function(){
+               if(this._started){ return; }
+
+               // wire up the tablist and its tabs
+               this.tablist.startup();
+
+               this.inherited(arguments);
+       },
+
+       layout: function(){
+               // Overrides StackContainer.layout().
+               // Configure the content pane to take up all the space except for where the tabs are
+
+               if(!this._contentBox || typeof(this._contentBox.l) == "undefined"){return;}
+
+               var sc = this.selectedChildWidget;
+
+               if(this.doLayout){
+                       // position and size the titles and the container node
+                       var titleAlign = this.tabPosition.replace(/-h/, "");
+                       this.tablist.layoutAlign = titleAlign;
+                       var children = [this.tablist, {
+                               domNode: this.tablistSpacer,
+                               layoutAlign: titleAlign
+                       }, {
+                               domNode: this.containerNode,
+                               layoutAlign: "client"
+                       }];
+                       dijit.layout.layoutChildren(this.domNode, this._contentBox, children);
+
+                       // Compute size to make each of my children.
+                       // children[2] is the margin-box size of this.containerNode, set by layoutChildren() call above
+                       this._containerContentBox = dijit.layout.marginBox2contentBox(this.containerNode, children[2]);
+
+                       if(sc && sc.resize){
+                               sc.resize(this._containerContentBox);
+                       }
+               }else{
+                       // just layout the tab controller, so it can position left/right buttons etc.
+                       if(this.tablist.resize){
+                               //make the tabs zero width so that they don't interfere with width calc, then reset
+                               var s = this.tablist.domNode.style;
+                               s.width="0";
+                               var width = dojo.contentBox(this.domNode).w;
+                               s.width="";
+                               this.tablist.resize({w: width});
+                       }
+
+                       // and call resize() on the selected pane just to tell it that it's been made visible
+                       if(sc && sc.resize){
+                               sc.resize();
+                       }
+               }
+       },
+
+       destroy: function(){
+               if(this.tablist){
+                       this.tablist.destroy();
+               }
+               this.inherited(arguments);
+       }
+});
+
 }
diff --git a/lib/dijit/lib/main.js b/lib/dijit/lib/main.js
new file mode 100644 (file)
index 0000000..28f1164
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+       Available via Academic Free License >= 2.1 OR the modified BSD license.
+       see: http://dojotoolkit.org/license for details
+*/
+
+
+// AMD module id = dijit
+//
+// This is a package main module for the dijit package. The dijit package is somewhat unusual
+// in that is it currently constructed to just provide an empty object.
+//
+
+// for now, we publish dijit into the global namespace because so many tests and apps expect it.
+define(["dojo"], function(dojo) {
+       // the current dojo bootstrap defines dijit; this may change and this module provides a little
+       // future-proof with the disjunction.
+       dijit= dojo._dijit || {};
+       return dijit;
+});
diff --git a/lib/dijit/nls/dijit-all_ROOT.js b/lib/dijit/nls/dijit-all_ROOT.js
deleted file mode 100644 (file)
index 43cfcad..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_ROOT");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ROOT");dojo.nls.colors.ROOT={"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.ROOT");dijit.nls.loading.ROOT={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ROOT");dijit.nls.common.ROOT={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ROOT");dijit._editor.nls.commands.ROOT={"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ROOT");dijit.form.nls.validate.ROOT={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ROOT");dijit.form.nls.ComboBox.ROOT={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ROOT");dijit._editor.nls.FontChoice.ROOT={"noFormat":"None","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":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ROOT");dijit._editor.nls.LinkDialog.ROOT={"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ROOT");dojo.cldr.nls.number.ROOT={"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:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ROOT");dojo.cldr.nls.currency.ROOT={"USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ROOT");dojo.cldr.nls.gregorian.ROOT={"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"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","eraNarrow":["BCE","CE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"y MMMM d","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, y MMMM dd","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","dateFormatItem-yM":"y-M","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"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","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"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"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BCE","CE"],"field-minute":"Minute","field-dayperiod":"Dayperiod","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"field-day-relative+-1":"Yesterday","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","field-day":"Day","days-format-wide":["1","2","3","4","5","6","7"],"field-zone":"Zone","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","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})","dayPeriods-format-abbr-pm":"PM","days-format-abbr":["1","2","3","4","5","6","7"],"eraNames":["BCE","CE"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","field-month":"Month","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"yyyy-MM-dd","field-second":"Second","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dateFormat-medium":"y MMM d","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_ar.js b/lib/dijit/nls/dijit-all_ar.js
deleted file mode 100644 (file)
index 2c32d81..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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":"ادراج/تحرير جدول","print":"‏طباعة‏","underline":"~تسطير","foreColor":"لون الواجهة الأمامية","htmlToggle":"مصدر HTML","formatBlock":"نمط الفقرة","newPage":"صفحة جديدة","insertHorizontalRule":"مسطرة أفقية","delete":"حذف","insertUnorderedList":"كشف نقطي","tableProp":"خصائص الجدول","insertImage":"ادراج صورة","superscript":"رمز علوي","subscript":"رمز سفلي","createLink":"تكوين وصلة","undo":"تراجع","fullScreen":"تبديل الشاشة الكاملة","italic":"~مائل","fontName":"اسم طاقم الطباعة","justifyLeft":"محاذاة الى اليسار","unlink":"ازالة وصلة","toggleTableBorder":"تبديل حدود الجدول","viewSource":"‫مشاهدة مصدر HTML‬","ctrlKey":"ctrl+${0}","fontSize":"حجم طاقم الطباعة","systemShortcut":"التصرف \"${0}\" يكون متاحا فقط في برنامج الاستعراض الخاص بك باستخدام المسار المختصر للوحة المفاتيح. استخدم ${1}.","indent":"‏ازاحة للداخل‏","redo":"‏اعادة‏","strikethrough":"تشطيب","justifyFull":"ضبط","justifyCenter":"محاذاة في الوسط","hiliteColor":"‏لون الخلفية‏","deleteTable":"حذف جدول","outdent":"ازاحة للخارج","cut":"قص","plainFormatBlock":"نمط الفقرة","toggleDir":"تبديل الاتجاه","bold":"عري~ض","tabIndent":"ازاحة للداخل باستخدام Tab","justifyRight":"محاذاة الى اليمين","appleKey":"⌘${0}"};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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ar");dijit.form.nls.ComboBox.ar={"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ar");dijit._editor.nls.FontChoice.ar={"1":"صغير جدا جدا","2":"صغير جدا","formatBlock":"النسق","3":"صغير","4":"متوسط","5":"كبير","6":"كبير جدا","7":"كبير جدا جدا","fantasy":"خيالي","serif":"serif","p":"فقرة","pre":"منسق بصفة مسبقة","sans-serif":"sans-serif","fontName":"طاقم طباعة","h1":"عنوان","h2":"عنوان فرعي","h3":"فرعي-عنوان فرعي","monospace":"أحادي المسافة","fontSize":"الحجم","cursive":"كتابة بحروف متصلة","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ar");dijit._editor.nls.LinkDialog.ar={"text":"الوصف:","insertImageTitle":"خصائص الصورة","set":"تحديد","newWindow":"نافذة جديدة","topWindow":"النافذة العلوية","target":"الهدف: ","createLinkTitle":"خصائص الوصلة","parentWindow":"النافذة الرئيسية","currentWindow":"النافذة الحالية","url":"عنوان URL:"};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("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":"يورو","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"};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","dayPeriods-format-wide-pm":"م","field-minute":"الدقائق","eraNames":["قبل الميلاد","ميلادي"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"أمس","field-weekday":"اليوم","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-MMdd":"dd‏/MM","days-standAlone-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"field-era":"العصر","field-hour":"الساعات","dayPeriods-format-wide-am":"ص","quarters-standAlone-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-y":"y","timeFormat-full":"zzzz h:mm:ss a","months-standAlone-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"اليوم","field-day-relative+1":"غدًا","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["ق.م","م"],"field-day-relative+2":"بعد الغد","dateFormatItem-yyyyMM":"MM‏/yyyy","dateFormatItem-yyyyMMMM":"MMMM، y","dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","field-zone":"التوقيت","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"dd‏/MM‏/yyyy","quarters-standAlone-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"السنة","quarters-standAlone-narrow":["١","٢","٣","٤"],"field-week":"الأسبوع","months-standAlone-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"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":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormatItem-M":"L","days-format-narrow":["ح","ن","ث","ر","خ","ج","س"],"field-second":"الثواني","field-day":"يوم","months-format-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"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","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_ca.js b/lib/dijit/nls/dijit-all_ca.js
deleted file mode 100644 (file)
index 48456f7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Imprimeix","underline":"Subratllat","foreColor":"Color de primer pla","htmlToggle":"Font HTML","formatBlock":"Estil de paràgraf","newPage":"Pàgina nova","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","fullScreen":"Commuta pantalla completa","italic":"Cursiva","fontName":"Nom del tipus de lletra","justifyLeft":"Alinea a la esquerra","unlink":"Elimina l'enllaç","toggleTableBorder":"Inverteix els contorns de taula","viewSource":"Visualitza font HTML","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","appleKey":"⌘${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ca");dijit._editor.nls.FontChoice.ca={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ca");dijit._editor.nls.LinkDialog.ca={"text":"Descipció:","insertImageTitle":"Propietats de la imatge","set":"Defineix","newWindow":"Finestra nova","topWindow":"Finestra superior","target":"Destinació:","createLinkTitle":"Propietats de l'enllaç","parentWindow":"Finestra pare","currentWindow":"Finestra actual","url":"URL:"};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("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","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ca");dojo.cldr.nls.gregorian.ca={"months-format-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"field-weekday":"dia de la setmana","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"E d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["aC","dC"],"dateFormat-long":"d MMMM 'de' y","months-format-wide":["de gener","de febrer","de març","d’abril","de maig","de juny","de juliol","d’agost","de setembre","d’octubre","de novembre","de desembre"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"p.m.","dateFormat-full":"EEEE d MMMM 'de' y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],"timeFormat-short":"H:mm","quarters-format-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"timeFormat-long":"H:mm:ss z","field-year":"any","dateFormatItem-yMMM":"LLL y","dateFormatItem-yQ":"Q yyyy","field-hour":"hora","months-format-abbr":["de gen.","de febr.","de març","d’abr.","de maig","de juny","de jul.","d’ag.","de set.","d’oct.","de nov.","de des."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"H:mm:ss zzzz","field-day-relative+0":"avui","field-day-relative+1":"demà","field-day-relative+2":"demà passat","dateFormatItem-H":"H","field-day-relative+3":"d'aquí a tres dies","months-standAlone-abbr":["gen.","febr.","març","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."],"quarters-format-abbr":["1T","2T","3T","4T"],"quarters-standAlone-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"dateFormatItem-MMMMd":"d MMMM","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1T","2T","3T","4T"],"eraAbbr":["aC","dC"],"field-minute":"minut","field-dayperiod":"a.m./p.m.","days-standAlone-abbr":["dg","dl","dt","dc","dj","dv","ds"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ahir","field-day-relative+-2":"abans d'ahir","field-day-relative+-3":"fa tres dies","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E d/M","dateFormatItem-yMMMM":"LLLL 'del' y","field-day":"dia","days-format-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"field-zone":"zona","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"dateFormatItem-hm":"h:mm a","days-format-abbr":["dg.","dl.","dt.","dc.","dj.","dv.","ds."],"eraNames":["aC","dC"],"days-format-narrow":["g","l","t","c","j","v","s"],"field-month":"mes","days-standAlone-narrow":["g","l","t","c","j","v","s"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"a.m.","dateFormatItem-MMMMEd":"E d MMMM","dateFormat-short":"dd/MM/yy","field-second":"segon","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"setmana","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_cs.js b/lib/dijit/nls/dijit-all_cs.js
deleted file mode 100644 (file)
index db73adb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_cs");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.cs");dojo.nls.colors.cs={"lightsteelblue":"světlá ocelová modrá","orangered":"oranžovočervená","midnightblue":"temně modrá","cadetblue":"šedomodrá","seashell":"lasturová","slategrey":"břidlicová šedá","coral":"korálová červená","darkturquoise":"tmavě tyrkysová","antiquewhite":"krémově bílá","mediumspringgreen":"střední jarní zelená","salmon":"lososová","darkgrey":"tmavě šedá","ivory":"slonovinová","greenyellow":"zelenožlutá","mistyrose":"růžovobílá","lightsalmon":"světle lososová","silver":"stříbrná","dimgrey":"kouřově šedá","orange":"oranžová","white":"bílá","navajowhite":"světle krémová","royalblue":"královská modrá","deeppink":"sytě růžová","lime":"limetková","oldlace":"světle béžová","chartreuse":"chartreuska","darkcyan":"tmavě azurová","yellow":"žlutá","linen":"bledě šedobéžová","olive":"olivová","gold":"zlatá","lawngreen":"jasně zelená","lightyellow":"bledě žlutá","tan":"šedobéžová","darkviolet":"tmavě fialová","lightslategrey":"světlá břidlicová šedá","grey":"šedá","darkkhaki":"pískově hnědá","green":"zelená","deepskyblue":"sytá nebeská modrá","aqua":"azurová","sienna":"siena","mintcream":"mentolová","rosybrown":"růžovohnědá","mediumslateblue":"střední břidlicová modrá","magenta":"purpurová","lightseagreen":"světlá mořská zelená","cyan":"azurová","olivedrab":"khaki","darkgoldenrod":"tmavě béžová","slateblue":"břidlicová modrá","mediumaquamarine":"střední akvamarínová","lavender":"levandulová","mediumseagreen":"střední mořská zelená","maroon":"kaštanová","darkslategray":"tmavá břidlicová šedá","mediumturquoise":"středně tyrkysová","ghostwhite":"modravě bílá","darkblue":"tmavě modrá","mediumvioletred":"středně fialovočervená","brown":"červenohnědá","lightgray":"světle šedá","sandybrown":"oranžovohnědá","pink":"růžová","firebrick":"cihlová","indigo":"indigově modrá","snow":"sněhobílá","darkorchid":"tmavě orchidejová","turquoise":"tyrkysová","chocolate":"hnědobéžová","springgreen":"jarní zelená","moccasin":"bledě krémová","navy":"námořnická modrá","lemonchiffon":"světle citrónová","teal":"šedozelená","floralwhite":"květinově bílá","cornflowerblue":"chrpově modrá","paleturquoise":"bledě tyrkysová","purple":"nachová","gainsboro":"bledě šedá","plum":"švestková","red":"červená","blue":"modrá","forestgreen":"lesní zelená","darkgreen":"tmavě zelená","honeydew":"nazelenalá","darkseagreen":"tmavá mořská zelená","lightcoral":"světle korálová","palevioletred":"bledě fialovočervená","mediumpurple":"středně nachová","saddlebrown":"hnědá","darkmagenta":"tmavě purpurová","thistle":"bodláková","whitesmoke":"kouřově bílá","wheat":"zlatohnědá","violet":"fialová","lightskyblue":"světlá nebeská modrá","goldenrod":"béžová","mediumblue":"středně modrá","skyblue":"nebeská modrá","crimson":"karmínová","darksalmon":"tmavě lososová","darkred":"tmavě červená","darkslategrey":"tmavá břidlicová šedá","peru":"karamelová","lightgrey":"světle šedá","lightgoldenrodyellow":"světle žlutá","blanchedalmond":"mandlová","aliceblue":"modravá","bisque":"bledě oranžová","slategray":"břidlicová šedá","palegoldenrod":"bledě písková","darkorange":"tmavě oranžová","aquamarine":"akvamarínová","lightgreen":"světle zelená","burlywood":"krémová","dodgerblue":"jasně modrá","darkgray":"tmavě šedá","lightcyan":"světle azurová","powderblue":"bledě modrá","blueviolet":"modrofialová","orchid":"orchidejová","dimgray":"kouřově šedá","beige":"bledě béžová","fuchsia":"fuchsiová","lavenderblush":"levandulová růžová","hotpink":"jasně růžová","steelblue":"ocelová modrá","tomato":"tomatová","lightpink":"světle růžová","limegreen":"limetkově zelená","indianred":"indiánská červená","papayawhip":"papájová","lightslategray":"světlá břidlicová šedá","gray":"šedá","mediumorchid":"středně orchidejová","cornsilk":"režná","black":"černá","seagreen":"mořská zelená","darkslateblue":"tmavá břidlicová modrá","khaki":"písková","lightblue":"světle modrá","palegreen":"bledě zelená","azure":"bledě azurová","peachpuff":"broskvová","darkolivegreen":"tmavě olivová","yellowgreen":"žlutozelená"};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ě"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.cs");dijit.nls.common.cs={"buttonOk":"OK","buttonCancel":"Storno","buttonSave":"Uložit","itemClose":"Zavřít"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.cs");dijit._editor.nls.commands.cs={"removeFormat":"Odebrat formát","copy":"Kopírovat","paste":"Vložit","selectAll":"Vybrat vše","insertOrderedList":"Číslovaný seznam","insertTable":"Vložit/upravit tabulku","print":"Tisk","underline":"Podtržení","foreColor":"Barva popředí","htmlToggle":"Zdroj HTML","formatBlock":"Styl odstavce","newPage":"Nová stránka","insertHorizontalRule":"Vodorovná čára","delete":"Odstranit","insertUnorderedList":"Seznam s odrážkami","tableProp":"Vlastnost tabulky","insertImage":"Vložit obrázek","superscript":"Horní index","subscript":"Dolní index","createLink":"Vytvořit odkaz","undo":"Zpět","fullScreen":"Přepnout režim celé obrazovky","italic":"Kurzíva","fontName":"Název písma","justifyLeft":"Zarovnat vlevo","unlink":"Odebrat odkaz","toggleTableBorder":"Přepnout ohraničení tabulky","viewSource":"Zobrazit zdroj ve formátu HTML","fontSize":"Velikost písma","systemShortcut":"Akce \"${0}\" je v prohlížeči dostupná pouze prostřednictvím klávesové zkratky. Použijte klávesovou zkratku ${1}.","indent":"Odsadit","redo":"Opakovat","strikethrough":"Přeškrtnutí","justifyFull":"Do bloku","justifyCenter":"Zarovnat na střed","hiliteColor":"Barva pozadí","deleteTable":"Odstranit tabulku","outdent":"Předsadit","cut":"Vyjmout","plainFormatBlock":"Styl odstavce","toggleDir":"Přepnout směr","bold":"Tučné","tabIndent":"Odsazení tabulátoru","justifyRight":"Zarovnat vpravo","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.cs");dijit.form.nls.validate.cs={"rangeMessage":"Tato hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota není platná.","missingMessage":"Tato hodnota je vyžadována."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.cs");dijit.form.nls.ComboBox.cs={"previousMessage":"Předchozí volby","nextMessage":"Další volby"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.cs");dijit._editor.nls.FontChoice.cs={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.cs");dijit._editor.nls.LinkDialog.cs={"text":"Popis:","insertImageTitle":"Vlastnosti obrázku","set":"Nastavit","newWindow":"Nové okno","topWindow":"Okno nejvyšší úrovně","target":"Cíl:","createLinkTitle":"Vlastnosti odkazu","parentWindow":"Nadřízené okno","currentWindow":"Aktuální okno","url":"Adresa URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.cs");dojo.cldr.nls.number.cs={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.cs");dojo.cldr.nls.currency.cs={"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","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.cs");dojo.cldr.nls.gregorian.cs={"dayPeriods-format-wide-pm":"odp.","eraNames":["př.Kr.","po Kr."],"field-day-relative+-1":"Včera","field-day-relative+-2":"Předevčírem","days-standAlone-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"months-standAlone-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"dayPeriods-format-wide-am":"dop.","quarters-standAlone-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["1.","2.","3.","4.","5.","6.","7.","8.","9.","10.","11.","12."],"field-day-relative+0":"Dnes","field-day-relative+1":"Zítra","days-standAlone-narrow":["N","P","Ú","S","Č","P","S"],"eraAbbr":["př.Kr.","po Kr."],"field-day-relative+2":"Pozítří","dateFormat-long":"d. MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"months-standAlone-wide":["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],"timeFormat-long":"H:mm:ss z","months-format-abbr":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"timeFormat-short":"H:mm","dateFormatItem-H":"H","quarters-format-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"days-format-abbr":["ne","po","út","st","čt","pá","so"],"days-format-narrow":["N","P","Ú","S","Č","P","S"],"months-format-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"days-standAlone-abbr":["ne","po","út","st","čt","pá","so"],"dateFormat-short":"d.M.yy","dateFormat-full":"EEEE, d. MMMM y","months-format-wide":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"quarters-format-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"days-format-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"eraNarrow":["př.Kr.","po Kr."],"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","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","dateFormatItem-yM":"y-M","field-year":"Year","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","field-hour":"Hour","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","field-minute":"Minute","field-dayperiod":"Dayperiod","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","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})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","field-month":"Month","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","field-second":"Second","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_da.js b/lib/dijit/nls/dijit-all_da.js
deleted file mode 100644 (file)
index a87e64a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Udskriv","underline":"Understreget","foreColor":"Forgrundsfarve","htmlToggle":"HTML-kilde","formatBlock":"Afsnitstypografi","newPage":"Ny side","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","fullScreen":"Aktivér/deaktivér fuldskærm","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejusteret","unlink":"Fjern link","toggleTableBorder":"Skift tabelramme","viewSource":"Vis HTML-kilde","ctrlKey":"Ctrl+${0}","fontSize":"Skriftstørrelse","systemShortcut":"Funktionen \"${0}\" kan kun bruges i din 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","appleKey":"⌘${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.da");dijit._editor.nls.FontChoice.da={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.da");dijit._editor.nls.LinkDialog.da={"text":"Beskrivelse:","insertImageTitle":"Billedegenskaber","set":"Definér","newWindow":"Nyt vindue","topWindow":"Øverste vindue","target":"Mål:","createLinkTitle":"Linkegenskaber","parentWindow":"Overordnet vindue","currentWindow":"Aktuelt vindue","url":"URL:"};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("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","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.da");dojo.cldr.nls.gregorian.da={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"ugedag","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE. d/M/y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d. MMM y","months-format-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"dayPeriods-format-wide-pm":"e.m.","dateFormat-full":"EEEE 'den' d. MMMM y","dateFormatItem-Md":"d/M","field-era":"æra","dateFormatItem-yM":"M/y","months-standAlone-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"timeFormat-short":"HH.mm","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"timeFormat-long":"HH.mm.ss z","field-year":"år","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","field-hour":"time","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan.","feb.","mar.","apr.","maj","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yyQ":"Q. 'kvartal' yy","timeFormat-full":"HH.mm.ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgen","field-day-relative+2":"i overmorgen","dateFormatItem-H":"HH","field-day-relative+3":"i overovermorgen","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. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-M":"M","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH.mm.ss","dateFormatItem-Hm":"HH.mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minut","field-dayperiod":"dagtid","days-standAlone-abbr":["søn","man","tir","ons","tor","fre","lør"],"dateFormatItem-d":"d.","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"i går","field-day-relative+-2":"i forgårs","field-day-relative+-3":"i forforgårs","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E. d/M","field-day":"dag","days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"field-zone":"zone","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","dateFormatItem-hm":"h.mm a","days-format-abbr":["søn","man","tir","ons","tor","fre","lør"],"eraNames":["f.Kr.","e.Kr."],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"måned","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"MMM","dayPeriods-format-wide-am":"f.m.","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormat-short":"dd/MM/yy","field-second":"sekund","dateFormatItem-yMMMEd":"EEE. d. MMM y","field-week":"uge","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-Hms":"HH.mm.ss","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_de-de.js b/lib/dijit/nls/dijit-all_de-de.js
deleted file mode 100644 (file)
index 7af3dd8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_de-de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de_de");dojo.nls.colors.de_de={"lightsteelblue":"Helles Stahlblau","orangered":"Orangerot","midnightblue":"Mitternachtblau","cadetblue":"Kadettenblau","seashell":"Muschelweiß","slategrey":"Schiefergrau","coral":"Koralle","darkturquoise":"Dunkeltürkis","antiquewhite":"Antikweiß","mediumspringgreen":"Mittelfrühlingsgrün","salmon":"Lachs","darkgrey":"Dunkelgrau","ivory":"Elfenbein","greenyellow":"Grüngelb","mistyrose":"Blassrose","lightsalmon":"Helllachs","silver":"Silbergrau","dimgrey":"Blassgrau","orange":"Orange","white":"Weiß","navajowhite":"Navajo-weiß","royalblue":"Königsblau","deeppink":"Tiefrosa","lime":"Limone","oldlace":"Alte Spitze","chartreuse":"Helles Gelbgrün","darkcyan":"Dunkelzyan","yellow":"Gelb","linen":"Leinen","olive":"Oliv","gold":"Gold","lawngreen":"Grasgrün","lightyellow":"Hellgelb","tan":"Hautfarben","darkviolet":"Dunkelviolett","lightslategrey":"Helles Schiefergrau","grey":"Grau","darkkhaki":"Dunkelkhaki","green":"Grün","deepskyblue":"Dunkles Himmelblau","aqua":"Wasserblau","sienna":"Sienna","mintcream":"Mintcreme","rosybrown":"Rosigbraun","mediumslateblue":"Mittelschieferblau ","magenta":"Magenta","lightseagreen":"Helles Meergrün","cyan":"Zyan","olivedrab":"Olivgrau","darkgoldenrod":"Dunkelgoldgelb","slateblue":"Schieferblau","mediumaquamarine":"Mittelaquamarin","lavender":"Lavendelblau","mediumseagreen":"Mittelmeeresgrün","maroon":"Kastanienbraun","darkslategray":"Dunkelschiefergrau","mediumturquoise":"Mitteltürkis ","ghostwhite":"Geisterweiß","darkblue":"Dunkelblau","mediumvioletred":"Mittelviolettrot ","brown":"Braun","lightgray":"Hellgrau","sandybrown":"Sandbraun","pink":"Rosa","firebrick":"Schamottestein","indigo":"Indigoblau","snow":"Schneeweiß","darkorchid":"Dunkelorchidee","turquoise":"Türkis","chocolate":"Schokoladenbraun","springgreen":"Frühlingsgrün","moccasin":"Mokassin","navy":"Marineblau","lemonchiffon":"Zitronenchiffon","teal":"Smaragdgrün","floralwhite":"Blütenweiß","cornflowerblue":"Kornblumenblau","paleturquoise":"Blasstürkis","purple":"Purpurrot","gainsboro":"Gainsboro","plum":"Pflaume","red":"Rot","blue":"Blau","forestgreen":"Forstgrün","darkgreen":"Dunkelgrün","honeydew":"Honigtau","darkseagreen":"Dunkles Meergrün","lightcoral":"Hellkoralle","palevioletred":"Blassviolettrot ","mediumpurple":"Mittelpurpur","saddlebrown":"Sattelbraun","darkmagenta":"Dunkelmagenta","thistle":"Distel","whitesmoke":"Rauchweiß","wheat":"Weizen","violet":"Violett","lightskyblue":"Helles Himmelblau","goldenrod":"Goldgelb","mediumblue":"Mittelblau","skyblue":"Himmelblau","crimson":"Karmesinrot","darksalmon":"Dunkellachs","darkred":"Dunkelrot","darkslategrey":"Dunkelschiefergrau","peru":"Peru","lightgrey":"Hellgrau","lightgoldenrodyellow":"Hellgoldgelb","blanchedalmond":"Mandelweiß","aliceblue":"Alice-blau","bisque":"Bisquit","slategray":"Schiefergrau","palegoldenrod":"Blassgoldgelb","darkorange":"Dunkelorange","aquamarine":"Aquamarin","lightgreen":"Hellgrün","burlywood":"Burlywood","dodgerblue":"Dodger-blau","darkgray":"Dunkelgrau","lightcyan":"Hellzyan","powderblue":"Pulverblau","blueviolet":"Blauviolett","orchid":"Orchidee","dimgray":"Blassgrau","beige":"Beige","fuchsia":"Fuchsia","lavenderblush":"Lavendelhauch","hotpink":"Knallrosa","steelblue":"Stahlblau","tomato":"Tomatenrot","lightpink":"Hellrosa","limegreen":"Limonengrün","indianred":"Indischrot","papayawhip":"Papayacreme","lightslategray":"Helles Schiefergrau","gray":"Grau","mediumorchid":"Mittelorchidee","cornsilk":"Kornseide","black":"Schwarz","seagreen":"Meeresgrün","darkslateblue":"Dunkelschieferblau","khaki":"Khaki","lightblue":"Hellblau","palegreen":"Blassgrün","azure":"Azur","peachpuff":"Pfirsich","darkolivegreen":"Dunkelolivgrün","yellowgreen":"Gelbgrün"};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."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de_de");dijit.nls.common.de_de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.de_de");dijit._editor.nls.commands.de_de={"removeFormat":"Formatierung entfernen","copy":"Kopieren","paste":"Einfügen","selectAll":"Alles auswählen","insertOrderedList":"Nummerierung","insertTable":"Tabelle einfügen/bearbeiten","print":"Drucken","underline":"Unterstrichen","foreColor":"Vordergrundfarbe","htmlToggle":"HTML-Quelltext","formatBlock":"Absatzstil","newPage":"Neue Seite","insertHorizontalRule":"Horizontaler Strich","delete":"Löschen","insertUnorderedList":"Aufzählungszeichen","tableProp":"Tabelleneigenschaft","insertImage":"Grafik einfügen","superscript":"Hochgestellt","subscript":"Tiefgestellt","createLink":"Link erstellen","undo":"Rückgängig","fullScreen":"Gesamtanzeige","italic":"Kursiv","fontName":"Schriftartname","justifyLeft":"Linksbündig","unlink":"Link entfernen","toggleTableBorder":"Tabellenumrandung ein-/ausschalten","viewSource":"HTML-Quelle","ctrlKey":"Strg+${0}","fontSize":"Schriftgröße","systemShortcut":"Die Aktion \"${0}\" ist nur über einen Direktaufruf in Ihrem Browser verfügbar. Verwenden Sie ${1}.","indent":"Einrücken","redo":"Wiederherstellen","strikethrough":"Durchgestrichen","justifyFull":"Blocksatz","justifyCenter":"Zentriert","hiliteColor":"Hintergrundfarbe","deleteTable":"Tabelle löschen","outdent":"Ausrücken","cut":"Ausschneiden","plainFormatBlock":"Absatzstil","toggleDir":"Wechselrichtung","bold":"Fett","tabIndent":"Tabulatoreinrückung","justifyRight":"Rechtsbündig","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de_de");dijit.form.nls.validate.de_de={"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de_de");dijit.form.nls.ComboBox.de_de={"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.de_de");dijit._editor.nls.FontChoice.de_de={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.de_de");dijit._editor.nls.LinkDialog.de_de={"text":"Beschreibung:","insertImageTitle":"Grafikeigenschaften","set":"Festlegen","newWindow":"Neues Fenster","topWindow":"Aktives Fenster","target":"Ziel:","createLinkTitle":"Linkeigenschaften","parentWindow":"Übergeordnetes Fenster","currentWindow":"Aktuelles Fenster","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de_de");dojo.cldr.nls.number.de_de={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.de_de");dojo.cldr.nls.currency.de_de={"HKD_displayName":"Hongkong-Dollar","CHF_displayName":"Schweizer Franken","JPY_symbol":"¥","CAD_displayName":"Kanadischer Dollar","CNY_displayName":"Renminbi Yuan","USD_symbol":"$","AUD_displayName":"Australischer Dollar","JPY_displayName":"Yen","USD_displayName":"US-Dollar","GBP_displayName":"Pfund Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.de_de");dojo.cldr.nls.gregorian.de_de={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Wochentag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d.M.y","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["v. Chr.","n. Chr."],"dayPeriods-format-wide-earlyMorning":"morgens","dayPeriods-format-wide-morning":"vormittags","dateFormat-long":"d. MMMM y","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"dayPeriods-format-wide-evening":"abends","dateFormatItem-EEEd":"d. EEE","dayPeriods-format-wide-pm":"nachm.","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yyMMdd":"dd.MM.yy","dayPeriods-format-wide-noon":"Mittag","field-era":"Epoche","dateFormatItem-yM":"M.y","months-standAlone-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"timeFormat-long":"HH:mm:ss z","field-year":"Jahr","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Stunde","dateFormatItem-MMdd":"dd.MM.","months-format-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"heute","field-day-relative+1":"morgen","field-day-relative+2":"übermorgen","dateFormatItem-H":"HH","field-day-relative+3":"überübermorgen","months-standAlone-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"dateFormatItem-M":"L","days-standAlone-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","eraAbbr":["v. Chr.","n. Chr."],"field-minute":"Minute","field-dayperiod":"Tageshälfte","days-standAlone-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dayPeriods-format-wide-night":"nachts","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"gestern","field-day-relative+-2":"vorgestern","field-day-relative+-3":"vorvorgestern","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E, d.M.","field-day":"Tag","days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"field-zone":"Zone","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":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"eraNames":["v. Chr.","n. Chr."],"days-format-narrow":["S","M","D","M","D","F","S"],"field-month":"Monat","days-standAlone-narrow":["S","M","D","M","D","F","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"vorm.","dateFormatItem-MMMMdd":"dd. MMMM","dateFormat-short":"dd.MM.yy","dateFormatItem-MMd":"d.MM.","dayPeriods-format-wide-afternoon":"nachmittags","field-second":"Sekunde","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormatItem-Ed":"E d.","field-week":"Woche","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_de.js b/lib/dijit/nls/dijit-all_de.js
deleted file mode 100644 (file)
index 196dbf3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de");dojo.nls.colors.de={"lightsteelblue":"Helles Stahlblau","orangered":"Orangerot","midnightblue":"Mitternachtblau","cadetblue":"Kadettenblau","seashell":"Muschelweiß","slategrey":"Schiefergrau","coral":"Koralle","darkturquoise":"Dunkeltürkis","antiquewhite":"Antikweiß","mediumspringgreen":"Mittelfrühlingsgrün","salmon":"Lachs","darkgrey":"Dunkelgrau","ivory":"Elfenbein","greenyellow":"Grüngelb","mistyrose":"Blassrose","lightsalmon":"Helllachs","silver":"Silbergrau","dimgrey":"Blassgrau","orange":"Orange","white":"Weiß","navajowhite":"Navajo-weiß","royalblue":"Königsblau","deeppink":"Tiefrosa","lime":"Limone","oldlace":"Alte Spitze","chartreuse":"Helles Gelbgrün","darkcyan":"Dunkelzyan","yellow":"Gelb","linen":"Leinen","olive":"Oliv","gold":"Gold","lawngreen":"Grasgrün","lightyellow":"Hellgelb","tan":"Hautfarben","darkviolet":"Dunkelviolett","lightslategrey":"Helles Schiefergrau","grey":"Grau","darkkhaki":"Dunkelkhaki","green":"Grün","deepskyblue":"Dunkles Himmelblau","aqua":"Wasserblau","sienna":"Sienna","mintcream":"Mintcreme","rosybrown":"Rosigbraun","mediumslateblue":"Mittelschieferblau ","magenta":"Magenta","lightseagreen":"Helles Meergrün","cyan":"Zyan","olivedrab":"Olivgrau","darkgoldenrod":"Dunkelgoldgelb","slateblue":"Schieferblau","mediumaquamarine":"Mittelaquamarin","lavender":"Lavendelblau","mediumseagreen":"Mittelmeeresgrün","maroon":"Kastanienbraun","darkslategray":"Dunkelschiefergrau","mediumturquoise":"Mitteltürkis ","ghostwhite":"Geisterweiß","darkblue":"Dunkelblau","mediumvioletred":"Mittelviolettrot ","brown":"Braun","lightgray":"Hellgrau","sandybrown":"Sandbraun","pink":"Rosa","firebrick":"Schamottestein","indigo":"Indigoblau","snow":"Schneeweiß","darkorchid":"Dunkelorchidee","turquoise":"Türkis","chocolate":"Schokoladenbraun","springgreen":"Frühlingsgrün","moccasin":"Mokassin","navy":"Marineblau","lemonchiffon":"Zitronenchiffon","teal":"Smaragdgrün","floralwhite":"Blütenweiß","cornflowerblue":"Kornblumenblau","paleturquoise":"Blasstürkis","purple":"Purpurrot","gainsboro":"Gainsboro","plum":"Pflaume","red":"Rot","blue":"Blau","forestgreen":"Forstgrün","darkgreen":"Dunkelgrün","honeydew":"Honigtau","darkseagreen":"Dunkles Meergrün","lightcoral":"Hellkoralle","palevioletred":"Blassviolettrot ","mediumpurple":"Mittelpurpur","saddlebrown":"Sattelbraun","darkmagenta":"Dunkelmagenta","thistle":"Distel","whitesmoke":"Rauchweiß","wheat":"Weizen","violet":"Violett","lightskyblue":"Helles Himmelblau","goldenrod":"Goldgelb","mediumblue":"Mittelblau","skyblue":"Himmelblau","crimson":"Karmesinrot","darksalmon":"Dunkellachs","darkred":"Dunkelrot","darkslategrey":"Dunkelschiefergrau","peru":"Peru","lightgrey":"Hellgrau","lightgoldenrodyellow":"Hellgoldgelb","blanchedalmond":"Mandelweiß","aliceblue":"Alice-blau","bisque":"Bisquit","slategray":"Schiefergrau","palegoldenrod":"Blassgoldgelb","darkorange":"Dunkelorange","aquamarine":"Aquamarin","lightgreen":"Hellgrün","burlywood":"Burlywood","dodgerblue":"Dodger-blau","darkgray":"Dunkelgrau","lightcyan":"Hellzyan","powderblue":"Pulverblau","blueviolet":"Blauviolett","orchid":"Orchidee","dimgray":"Blassgrau","beige":"Beige","fuchsia":"Fuchsia","lavenderblush":"Lavendelhauch","hotpink":"Knallrosa","steelblue":"Stahlblau","tomato":"Tomatenrot","lightpink":"Hellrosa","limegreen":"Limonengrün","indianred":"Indischrot","papayawhip":"Papayacreme","lightslategray":"Helles Schiefergrau","gray":"Grau","mediumorchid":"Mittelorchidee","cornsilk":"Kornseide","black":"Schwarz","seagreen":"Meeresgrün","darkslateblue":"Dunkelschieferblau","khaki":"Khaki","lightblue":"Hellblau","palegreen":"Blassgrün","azure":"Azur","peachpuff":"Pfirsich","darkolivegreen":"Dunkelolivgrün","yellowgreen":"Gelbgrün"};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."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de");dijit.nls.common.de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.de");dijit._editor.nls.commands.de={"removeFormat":"Formatierung entfernen","copy":"Kopieren","paste":"Einfügen","selectAll":"Alles auswählen","insertOrderedList":"Nummerierung","insertTable":"Tabelle einfügen/bearbeiten","print":"Drucken","underline":"Unterstrichen","foreColor":"Vordergrundfarbe","htmlToggle":"HTML-Quelltext","formatBlock":"Absatzstil","newPage":"Neue Seite","insertHorizontalRule":"Horizontaler Strich","delete":"Löschen","insertUnorderedList":"Aufzählungszeichen","tableProp":"Tabelleneigenschaft","insertImage":"Grafik einfügen","superscript":"Hochgestellt","subscript":"Tiefgestellt","createLink":"Link erstellen","undo":"Rückgängig","fullScreen":"Gesamtanzeige","italic":"Kursiv","fontName":"Schriftartname","justifyLeft":"Linksbündig","unlink":"Link entfernen","toggleTableBorder":"Tabellenumrandung ein-/ausschalten","viewSource":"HTML-Quelle","ctrlKey":"Strg+${0}","fontSize":"Schriftgröße","systemShortcut":"Die Aktion \"${0}\" ist nur über einen Direktaufruf in Ihrem Browser verfügbar. Verwenden Sie ${1}.","indent":"Einrücken","redo":"Wiederherstellen","strikethrough":"Durchgestrichen","justifyFull":"Blocksatz","justifyCenter":"Zentriert","hiliteColor":"Hintergrundfarbe","deleteTable":"Tabelle löschen","outdent":"Ausrücken","cut":"Ausschneiden","plainFormatBlock":"Absatzstil","toggleDir":"Wechselrichtung","bold":"Fett","tabIndent":"Tabulatoreinrückung","justifyRight":"Rechtsbündig","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de");dijit.form.nls.validate.de={"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de");dijit.form.nls.ComboBox.de={"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.de");dijit._editor.nls.FontChoice.de={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.de");dijit._editor.nls.LinkDialog.de={"text":"Beschreibung:","insertImageTitle":"Grafikeigenschaften","set":"Festlegen","newWindow":"Neues Fenster","topWindow":"Aktives Fenster","target":"Ziel:","createLinkTitle":"Linkeigenschaften","parentWindow":"Übergeordnetes Fenster","currentWindow":"Aktuelles Fenster","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de");dojo.cldr.nls.number.de={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.de");dojo.cldr.nls.currency.de={"HKD_displayName":"Hongkong-Dollar","CHF_displayName":"Schweizer Franken","JPY_symbol":"¥","CAD_displayName":"Kanadischer Dollar","CNY_displayName":"Renminbi Yuan","USD_symbol":"$","AUD_displayName":"Australischer Dollar","JPY_displayName":"Yen","USD_displayName":"US-Dollar","GBP_displayName":"Pfund Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.de");dojo.cldr.nls.gregorian.de={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Wochentag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d.M.y","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["v. Chr.","n. Chr."],"dayPeriods-format-wide-earlyMorning":"morgens","dayPeriods-format-wide-morning":"vormittags","dateFormat-long":"d. MMMM y","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"dayPeriods-format-wide-evening":"abends","dateFormatItem-EEEd":"d. EEE","dayPeriods-format-wide-pm":"nachm.","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yyMMdd":"dd.MM.yy","dayPeriods-format-wide-noon":"Mittag","field-era":"Epoche","dateFormatItem-yM":"M.y","months-standAlone-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"timeFormat-long":"HH:mm:ss z","field-year":"Jahr","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Stunde","dateFormatItem-MMdd":"dd.MM.","months-format-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"heute","field-day-relative+1":"morgen","field-day-relative+2":"übermorgen","dateFormatItem-H":"HH","field-day-relative+3":"überübermorgen","months-standAlone-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"dateFormatItem-M":"L","days-standAlone-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","eraAbbr":["v. Chr.","n. Chr."],"field-minute":"Minute","field-dayperiod":"Tageshälfte","days-standAlone-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dayPeriods-format-wide-night":"nachts","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"gestern","field-day-relative+-2":"vorgestern","field-day-relative+-3":"vorvorgestern","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E, d.M.","field-day":"Tag","days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"field-zone":"Zone","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":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"eraNames":["v. Chr.","n. Chr."],"days-format-narrow":["S","M","D","M","D","F","S"],"field-month":"Monat","days-standAlone-narrow":["S","M","D","M","D","F","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"vorm.","dateFormatItem-MMMMdd":"dd. MMMM","dateFormat-short":"dd.MM.yy","dateFormatItem-MMd":"d.MM.","dayPeriods-format-wide-afternoon":"nachmittags","field-second":"Sekunde","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormatItem-Ed":"E d.","field-week":"Woche","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_el.js b/lib/dijit/nls/dijit-all_el.js
deleted file mode 100644 (file)
index a9f2945..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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":"Εισαγωγή/Τροποποίηση πίνακα","print":"Εκτύπωση","underline":"Υπογράμμιση","foreColor":"Χρώμα προσκηνίου","htmlToggle":"Πρωτογενής κώδικας HTML","formatBlock":"Στυλ παραγράφου","newPage":"Νέα σελίδα","insertHorizontalRule":"Οριζόντια γραμμή","delete":"Διαγραφή","insertUnorderedList":"Λίστα με κουκίδες","tableProp":"Ιδιότητα πίνακα","insertImage":"Εισαγωγή εικόνας","superscript":"Εκθέτης","subscript":"Δείκτης","createLink":"Δημιουργία σύνδεσης","undo":"Αναίρεση","fullScreen":"Εναλλαγή κατάστασης πλήρους οθόνης","italic":"Πλάγια","fontName":"Όνομα γραμματοσειράς","justifyLeft":"Στοίχιση αριστερά","unlink":"Αφαίρεση σύνδεσης","toggleTableBorder":"Εναλλαγή εμφάνισης περιγράμματος πίνακα","viewSource":"Προβολή προέλευσης HTML","fontSize":"Μέγεθος γραμματοσειράς","systemShortcut":"Σε αυτό το πρόγραμμα πλοήγησης, η ενέργεια \"${0}\" είναι διαθέσιμη μόνο με τη χρήση μιας συντόμευσης πληκτρολογίου. Χρησιμοποιήστε τη συντόμευση ${1}.","indent":"Εσοχή","redo":"Ακύρωση αναίρεσης","strikethrough":"Διαγράμμιση","justifyFull":"Πλήρης στοίχιση","justifyCenter":"Στοίχιση στο κέντρο","hiliteColor":"Χρώμα φόντου","deleteTable":"Διαγραφή πίνακα","outdent":"Μείωση περιθωρίου","cut":"Αποκοπή","plainFormatBlock":"Στυλ παραγράφου","toggleDir":"Εναλλαγή κατεύθυνσης","bold":"Έντονα","tabIndent":"Εσοχή με το πλήκτρο Tab","justifyRight":"Στοίχιση δεξιά","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.el");dijit.form.nls.ComboBox.el={"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.el");dijit._editor.nls.FontChoice.el={"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":"πλάγιοι","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.el");dijit._editor.nls.LinkDialog.el={"text":"Περιγραφή:","insertImageTitle":"Ιδιότητες εικόνας","set":"Ορισμός","newWindow":"Νέο παράθυρο","topWindow":"Παράθυρο σε πρώτο πλάνο","target":"Προορισμός:","createLinkTitle":"Ιδιότητες σύνδεσης","parentWindow":"Γονικό παράθυρο","currentWindow":"Τρέχον παράθυρο","url":"Διεύθυνση URL:"};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("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":"Ευρώ","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};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":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"field-weekday":"Ημέρα εβδομάδας","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-MMMEd":"E, d MMM","eraNarrow":["π.Χ.","μ.Χ."],"dateFormat-long":"d MMMM y","months-format-wide":["Ιανουαρίου","Φεβρουαρίου","Μαρτίου","Απριλίου","Μαΐου","Ιουνίου","Ιουλίου","Αυγούστου","Σεπτεμβρίου","Οκτωβρίου","Νοεμβρίου","Δεκεμβρίου"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"μ.μ.","dateFormat-full":"EEEE, d 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","field-day-relative+0":"Σήμερα","field-day-relative+1":"Αύριο","field-day-relative+2":"Μεθαύριο","dateFormatItem-H":"HH","field-day-relative+3":"Σε τρεις ημέρες από τώρα","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":"HH:mm","quarters-standAlone-abbr":["Τ1","Τ2","Τ3","Τ4"],"eraAbbr":["π.Χ.","μ.Χ."],"field-minute":"Λεπτό","field-dayperiod":"π.μ./μ.μ.","days-standAlone-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Χθες","field-day-relative+-2":"Προχθές","field-day-relative+-3":"Πριν από τρεις ημέρες","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","dayPeriods-format-wide-am":"π.μ.","dateFormatItem-MMMMEd":"E, d MMMM","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"d/M/yy","field-second":"Δευτερόλεπτο","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormatItem-Ed":"E d","field-week":"Εβδομάδα","dateFormat-medium":"d MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_en-gb.js b/lib/dijit/nls/dijit-all_en-gb.js
deleted file mode 100644 (file)
index a66fb43..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_en-gb");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_gb");dojo.nls.colors.en_gb={"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.en_gb");dijit.nls.loading.en_gb={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_gb");dijit.nls.common.en_gb={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en_gb");dijit._editor.nls.commands.en_gb={"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_gb");dijit.form.nls.validate.en_gb={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_gb");dijit.form.nls.ComboBox.en_gb={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.en_gb");dijit._editor.nls.FontChoice.en_gb={"noFormat":"None","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":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.en_gb");dijit._editor.nls.LinkDialog.en_gb={"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_gb");dojo.cldr.nls.number.en_gb={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en_gb");dojo.cldr.nls.currency.en_gb={"HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","USD_symbol":"$","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en_gb");dojo.cldr.nls.gregorian.en_gb={"dateFormatItem-yyMMM":"MMM yy","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-yyyyMMMM":"MMMM y","timeFormat-full":"HH:mm:ss zzzz","timeFormat-medium":"HH:mm:ss","dateFormatItem-MEd":"E, d/M","dateFormat-medium":"d MMM y","dateFormatItem-MMdd":"dd/MM","dateFormatItem-yyyyMM":"MM/yyyy","dateFormat-full":"EEEE, d MMMM y","timeFormat-long":"HH:mm:ss z","timeFormat-short":"HH:mm","dateFormat-short":"dd/MM/yyyy","dateFormatItem-MMMMd":"d MMMM","dateFormat-long":"d MMMM y","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yM":"M/y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"PM","field-minute":"Minute","eraNames":["Before Christ","Anno Domini"],"dateTimeFormat-full":"{1} {0}","field-day-relative+-1":"Yesterday","field-weekday":"Day of the Week","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateTimeFormat-short":"{1} {0}","field-era":"Era","field-hour":"Hour","dayPeriods-format-wide-am":"AM","dateTimeFormat-medium":"{1} {0}","dateFormatItem-y":"y","months-standAlone-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["BC","AD"],"dateFormatItem-EEEd":"d EEE","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-ms":"mm:ss","field-year":"Year","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","field-week":"Week","months-standAlone-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-MMMd":"MMM d","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayPeriods-format-wide-noon":"noon","field-month":"Month","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","days-format-narrow":["S","M","T","W","T","F","S"],"field-second":"Second","field-day":"Day","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-yMMMEd":"EEE, MMM d, y","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"eraNarrow":["B","A"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
diff --git a/lib/dijit/nls/dijit-all_en-us.js b/lib/dijit/nls/dijit-all_en-us.js
deleted file mode 100644 (file)
index 2c6e1b0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_en-us");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_us");dojo.nls.colors.en_us={"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.en_us");dijit.nls.loading.en_us={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_us");dijit.nls.common.en_us={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en_us");dijit._editor.nls.commands.en_us={"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_us");dijit.form.nls.validate.en_us={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_us");dijit.form.nls.ComboBox.en_us={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.en_us");dijit._editor.nls.FontChoice.en_us={"noFormat":"None","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":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.en_us");dijit._editor.nls.LinkDialog.en_us={"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_us");dojo.cldr.nls.number.en_us={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en_us");dojo.cldr.nls.currency.en_us={"HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","USD_symbol":"$","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en_us");dojo.cldr.nls.gregorian.en_us={"dateFormatItem-yM":"M/y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"PM","field-minute":"Minute","eraNames":["Before Christ","Anno Domini"],"dateFormatItem-MMMEd":"E, MMM d","dateTimeFormat-full":"{1} {0}","field-day-relative+-1":"Yesterday","field-weekday":"Day of the Week","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateTimeFormat-short":"{1} {0}","field-era":"Era","field-hour":"Hour","dayPeriods-format-wide-am":"AM","dateTimeFormat-medium":"{1} {0}","dateFormatItem-y":"y","timeFormat-full":"h:mm:ss a zzzz","months-standAlone-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["BC","AD"],"dateFormat-long":"MMMM d, y","timeFormat-medium":"h:mm:ss a","dateFormatItem-EEEd":"d EEE","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"MMM d, y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-ms":"mm:ss","field-year":"Year","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","field-week":"Week","months-standAlone-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-MMMd":"MMM d","timeFormat-long":"h:mm:ss a z","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayPeriods-format-wide-noon":"noon","timeFormat-short":"h:mm a","field-month":"Month","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","days-format-narrow":["S","M","T","W","T","F","S"],"field-second":"Second","field-day":"Day","dateFormatItem-MEd":"E, M/d","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormat-short":"M/d/yy","dateFormatItem-yMMMEd":"EEE, MMM d, y","dateFormat-full":"EEEE, MMMM d, y","dateFormatItem-Md":"M/d","dateFormatItem-yMEd":"EEE, M/d/y","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"eraNarrow":["B","A"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
diff --git a/lib/dijit/nls/dijit-all_en.js b/lib/dijit/nls/dijit-all_en.js
deleted file mode 100644 (file)
index 0ae531f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_en");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en");dojo.nls.colors.en={"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.en");dijit.nls.loading.en={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en");dijit.nls.common.en={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en");dijit._editor.nls.commands.en={"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en");dijit.form.nls.validate.en={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en");dijit.form.nls.ComboBox.en={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.en");dijit._editor.nls.FontChoice.en={"noFormat":"None","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":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.en");dijit._editor.nls.LinkDialog.en={"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en");dojo.cldr.nls.number.en={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en");dojo.cldr.nls.currency.en={"HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","USD_symbol":"$","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en");dojo.cldr.nls.gregorian.en={"dateFormatItem-yM":"M/y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"PM","field-minute":"Minute","eraNames":["Before Christ","Anno Domini"],"dateFormatItem-MMMEd":"E, MMM d","dateTimeFormat-full":"{1} {0}","field-day-relative+-1":"Yesterday","field-weekday":"Day of the Week","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateTimeFormat-short":"{1} {0}","field-era":"Era","field-hour":"Hour","dayPeriods-format-wide-am":"AM","dateTimeFormat-medium":"{1} {0}","dateFormatItem-y":"y","timeFormat-full":"h:mm:ss a zzzz","months-standAlone-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["BC","AD"],"dateFormat-long":"MMMM d, y","timeFormat-medium":"h:mm:ss a","dateFormatItem-EEEd":"d EEE","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"MMM d, y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-ms":"mm:ss","field-year":"Year","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","field-week":"Week","months-standAlone-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-MMMd":"MMM d","timeFormat-long":"h:mm:ss a z","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayPeriods-format-wide-noon":"noon","timeFormat-short":"h:mm a","field-month":"Month","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","days-format-narrow":["S","M","T","W","T","F","S"],"field-second":"Second","field-day":"Day","dateFormatItem-MEd":"E, M/d","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormat-short":"M/d/yy","dateFormatItem-yMMMEd":"EEE, MMM d, y","dateFormat-full":"EEEE, MMMM d, y","dateFormatItem-Md":"M/d","dateFormatItem-yMEd":"EEE, M/d/y","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"eraNarrow":["B","A"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
diff --git a/lib/dijit/nls/dijit-all_es-es.js b/lib/dijit/nls/dijit-all_es-es.js
deleted file mode 100644 (file)
index a647048..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_es-es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es_es");dojo.nls.colors.es_es={"lightsteelblue":"azul acero claro","orangered":"rojo anaranjado","midnightblue":"azul medianoche","cadetblue":"azul cadete","seashell":"blanco marfil","slategrey":"gris pizarra","coral":"coral","darkturquoise":"turquesa oscuro","antiquewhite":"blanco antiguo","mediumspringgreen":"verde primavera medio","salmon":"salmón","darkgrey":"gris oscuro","ivory":"marfil","greenyellow":"amarillo verdoso","mistyrose":"rosa difuminado","lightsalmon":"salmón claro","silver":"plateado","dimgrey":"gris marengo","orange":"naranja","white":"blanco","navajowhite":"blanco navajo","royalblue":"azul real","deeppink":"rosa fuerte","lime":"lima","oldlace":"encaje antiguo","chartreuse":"verde pálido 2","darkcyan":"cian oscuro","yellow":"amarillo","linen":"blanco arena","olive":"verde oliva","gold":"oro","lawngreen":"verde césped","lightyellow":"amarillo claro","tan":"canela","darkviolet":"violeta oscuro","lightslategrey":"gris pizarra claro","grey":"gris","darkkhaki":"caqui oscuro","green":"verde","deepskyblue":"azul cielo fuerte","aqua":"aguamarina","sienna":"siena","mintcream":"crema menta","rosybrown":"marrón rosáceo","mediumslateblue":"azul pizarra medio","magenta":"magenta","lightseagreen":"verde mar claro","cyan":"cian","olivedrab":"verde oliva pardusco","darkgoldenrod":"ocre oscuro","slateblue":"azul pizarra","mediumaquamarine":"aguamarina medio","lavender":"lavanda","mediumseagreen":"verde mar medio","maroon":"granate","darkslategray":"gris pizarra oscuro","mediumturquoise":"turquesa medio","ghostwhite":"blanco ligero","darkblue":"azul oscuro","mediumvioletred":"rojo violáceo medio","brown":"marrón","lightgray":"gris claro","sandybrown":"marrón arcilla","pink":"rosa","firebrick":"teja","indigo":"añil","snow":"nieve","darkorchid":"orquídea oscuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde fuerte","moccasin":"arena","navy":"azul marino","lemonchiffon":"amarillo pastel","teal":"verde azulado","floralwhite":"blanco manteca","cornflowerblue":"azul aciano","paleturquoise":"turquesa pálido","purple":"púrpura","gainsboro":"azul gainsboro","plum":"ciruela","red":"rojo","blue":"azul","forestgreen":"verde pino","darkgreen":"verde oscuro","honeydew":"flor de rocío","darkseagreen":"verde mar oscuro","lightcoral":"coral claro","palevioletred":"rojo violáceo pálido","mediumpurple":"púrpura medio","saddlebrown":"cuero","darkmagenta":"magenta oscuro","thistle":"cardo","whitesmoke":"blanco ahumado","wheat":"trigo","violet":"violeta","lightskyblue":"azul cielo claro","goldenrod":"ocre","mediumblue":"azul medio","skyblue":"azul cielo","crimson":"carmesí","darksalmon":"salmón oscuro","darkred":"rojo oscuro","darkslategrey":"gris pizarra oscuro","peru":"perú","lightgrey":"gris claro","lightgoldenrodyellow":"ocre claro","blanchedalmond":"almendra pálido","aliceblue":"blanco azulado","bisque":"miel","slategray":"gris pizarra","palegoldenrod":"ocre pálido","darkorange":"naranja oscuro","aquamarine":"aguamarina 2","lightgreen":"verde claro","burlywood":"madera","dodgerblue":"azul fuerte","darkgray":"gris oscuro","lightcyan":"cian claro","powderblue":"azul suave","blueviolet":"azul violáceo","orchid":"orquídea","dimgray":"gris marengo","beige":"beige","fuchsia":"fucsia","lavenderblush":"lavanda rosácea","hotpink":"rosa oscuro","steelblue":"azul acero","tomato":"tomate","lightpink":"rosa claro","limegreen":"lima limón","indianred":"rojo teja","papayawhip":"papaya claro","lightslategray":"gris pizarra claro","gray":"gris","mediumorchid":"orquídea medio","cornsilk":"crudo","black":"negro","seagreen":"verde mar","darkslateblue":"azul pizarra oscuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"blanco cielo","peachpuff":"melocotón","darkolivegreen":"verde oliva oscuro","yellowgreen":"verde amarillento"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es_es");dijit.nls.common.es_es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.es_es");dijit._editor.nls.commands.es_es={"removeFormat":"Eliminar formato","copy":"Copiar","paste":"Pegar","selectAll":"Seleccionar todo","insertOrderedList":"Lista numerada","insertTable":"Insertar/Editar tabla","print":"Imprimir","underline":"Subrayado","foreColor":"Color de primer plano","htmlToggle":"Fuente HTML","formatBlock":"Estilo de párrafo","newPage":"Nueva página","insertHorizontalRule":"Regla horizontal","delete":"Suprimir","insertUnorderedList":"Lista con viñetas","tableProp":"Propiedad de tabla","insertImage":"Insertar imagen","superscript":"Superíndice","subscript":"Subíndice","createLink":"Crear enlace","undo":"Deshacer","fullScreen":"Conmutar pantalla completa","italic":"Cursiva","fontName":"Nombre de font","justifyLeft":"Alinear izquierda","unlink":"Eliminar enlace","toggleTableBorder":"Conmutar borde de tabla","viewSource":"Ver fuente HTML","ctrlKey":"control+${0}","fontSize":"Tamaño de font","systemShortcut":"La acción \"${0}\" sólo está disponible en su navegador mediante un atajo de teclado. Utilice ${1}.","indent":"Sangría","redo":"Rehacer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinear centro","hiliteColor":"Color de segundo plano","deleteTable":"Suprimir tabla","outdent":"Anular sangría","cut":"Cortar","plainFormatBlock":"Estilo de párrafo","toggleDir":"Conmutar dirección","bold":"Negrita","tabIndent":"Sangría de tabulador","justifyRight":"Alinear derecha","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es_es");dijit.form.nls.validate.es_es={"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es_es");dijit.form.nls.ComboBox.es_es={"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.es_es");dijit._editor.nls.FontChoice.es_es={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.es_es");dijit._editor.nls.LinkDialog.es_es={"text":"Descripción: ","insertImageTitle":"Propiedades de la imagen","set":"Establecer","newWindow":"Nueva ventana","topWindow":"Ventana superior","target":"Destino: ","createLinkTitle":"Propiedades del enlace","parentWindow":"Ventana padre","currentWindow":"Ventana actual","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es_es");dojo.cldr.nls.number.es_es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","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:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.es_es");dojo.cldr.nls.currency.es_es={"HKD_displayName":"dólar de Hong Kong","CHF_displayName":"franco suizo","CAD_displayName":"dólar canadiense","CNY_displayName":"yuan renminbi chino","AUD_displayName":"dólar australiano","JPY_displayName":"yen japonés","USD_displayName":"dólar estadounidense","GBP_displayName":"libra esterlina británica","EUR_displayName":"euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.es_es");dojo.cldr.nls.gregorian.es_es={"months-format-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"día de la semana","dateFormatItem-yyQQQQ":"QQQQ 'de' yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["a.C.","d.C."],"dateFormatItem-MMMdd":"dd-MMM","dateFormat-long":"d 'de' MMMM 'de' y","months-format-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"p.m.","dateFormat-full":"EEEE d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"año","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","field-hour":"hora","months-format-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"hoy","field-day-relative+1":"mañana","field-day-relative+2":"pasado mañana","field-day-relative+3":"Dentro de tres días","months-standAlone-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"dateFormatItem-MMMMd":"d 'de' MMMM","dateFormatItem-yyMMM":"MMM-yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["a.C.","d.C."],"field-minute":"minuto","field-dayperiod":"periodo del día","days-standAlone-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ayer","dateFormatItem-h":"hh a","field-day-relative+-2":"antes de ayer","field-day-relative+-3":"Hace tres días","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMMMM":"MMMM 'de' y","field-day":"día","days-format-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"field-zone":"zona","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"eraNames":["antes de Cristo","anno Dómini"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mes","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"a.m.","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","field-second":"segundo","dateFormatItem-yMMMEd":"EEE, d MMM y","field-week":"semana","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_es.js b/lib/dijit/nls/dijit-all_es.js
deleted file mode 100644 (file)
index 616b3b0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es");dojo.nls.colors.es={"lightsteelblue":"azul acero claro","orangered":"rojo anaranjado","midnightblue":"azul medianoche","cadetblue":"azul cadete","seashell":"blanco marfil","slategrey":"gris pizarra","coral":"coral","darkturquoise":"turquesa oscuro","antiquewhite":"blanco antiguo","mediumspringgreen":"verde primavera medio","salmon":"salmón","darkgrey":"gris oscuro","ivory":"marfil","greenyellow":"amarillo verdoso","mistyrose":"rosa difuminado","lightsalmon":"salmón claro","silver":"plateado","dimgrey":"gris marengo","orange":"naranja","white":"blanco","navajowhite":"blanco navajo","royalblue":"azul real","deeppink":"rosa fuerte","lime":"lima","oldlace":"encaje antiguo","chartreuse":"verde pálido 2","darkcyan":"cian oscuro","yellow":"amarillo","linen":"blanco arena","olive":"verde oliva","gold":"oro","lawngreen":"verde césped","lightyellow":"amarillo claro","tan":"canela","darkviolet":"violeta oscuro","lightslategrey":"gris pizarra claro","grey":"gris","darkkhaki":"caqui oscuro","green":"verde","deepskyblue":"azul cielo fuerte","aqua":"aguamarina","sienna":"siena","mintcream":"crema menta","rosybrown":"marrón rosáceo","mediumslateblue":"azul pizarra medio","magenta":"magenta","lightseagreen":"verde mar claro","cyan":"cian","olivedrab":"verde oliva pardusco","darkgoldenrod":"ocre oscuro","slateblue":"azul pizarra","mediumaquamarine":"aguamarina medio","lavender":"lavanda","mediumseagreen":"verde mar medio","maroon":"granate","darkslategray":"gris pizarra oscuro","mediumturquoise":"turquesa medio","ghostwhite":"blanco ligero","darkblue":"azul oscuro","mediumvioletred":"rojo violáceo medio","brown":"marrón","lightgray":"gris claro","sandybrown":"marrón arcilla","pink":"rosa","firebrick":"teja","indigo":"añil","snow":"nieve","darkorchid":"orquídea oscuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde fuerte","moccasin":"arena","navy":"azul marino","lemonchiffon":"amarillo pastel","teal":"verde azulado","floralwhite":"blanco manteca","cornflowerblue":"azul aciano","paleturquoise":"turquesa pálido","purple":"púrpura","gainsboro":"azul gainsboro","plum":"ciruela","red":"rojo","blue":"azul","forestgreen":"verde pino","darkgreen":"verde oscuro","honeydew":"flor de rocío","darkseagreen":"verde mar oscuro","lightcoral":"coral claro","palevioletred":"rojo violáceo pálido","mediumpurple":"púrpura medio","saddlebrown":"cuero","darkmagenta":"magenta oscuro","thistle":"cardo","whitesmoke":"blanco ahumado","wheat":"trigo","violet":"violeta","lightskyblue":"azul cielo claro","goldenrod":"ocre","mediumblue":"azul medio","skyblue":"azul cielo","crimson":"carmesí","darksalmon":"salmón oscuro","darkred":"rojo oscuro","darkslategrey":"gris pizarra oscuro","peru":"perú","lightgrey":"gris claro","lightgoldenrodyellow":"ocre claro","blanchedalmond":"almendra pálido","aliceblue":"blanco azulado","bisque":"miel","slategray":"gris pizarra","palegoldenrod":"ocre pálido","darkorange":"naranja oscuro","aquamarine":"aguamarina 2","lightgreen":"verde claro","burlywood":"madera","dodgerblue":"azul fuerte","darkgray":"gris oscuro","lightcyan":"cian claro","powderblue":"azul suave","blueviolet":"azul violáceo","orchid":"orquídea","dimgray":"gris marengo","beige":"beige","fuchsia":"fucsia","lavenderblush":"lavanda rosácea","hotpink":"rosa oscuro","steelblue":"azul acero","tomato":"tomate","lightpink":"rosa claro","limegreen":"lima limón","indianred":"rojo teja","papayawhip":"papaya claro","lightslategray":"gris pizarra claro","gray":"gris","mediumorchid":"orquídea medio","cornsilk":"crudo","black":"negro","seagreen":"verde mar","darkslateblue":"azul pizarra oscuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"blanco cielo","peachpuff":"melocotón","darkolivegreen":"verde oliva oscuro","yellowgreen":"verde amarillento"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es");dijit.nls.common.es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.es");dijit._editor.nls.commands.es={"removeFormat":"Eliminar formato","copy":"Copiar","paste":"Pegar","selectAll":"Seleccionar todo","insertOrderedList":"Lista numerada","insertTable":"Insertar/Editar tabla","print":"Imprimir","underline":"Subrayado","foreColor":"Color de primer plano","htmlToggle":"Fuente HTML","formatBlock":"Estilo de párrafo","newPage":"Nueva página","insertHorizontalRule":"Regla horizontal","delete":"Suprimir","insertUnorderedList":"Lista con viñetas","tableProp":"Propiedad de tabla","insertImage":"Insertar imagen","superscript":"Superíndice","subscript":"Subíndice","createLink":"Crear enlace","undo":"Deshacer","fullScreen":"Conmutar pantalla completa","italic":"Cursiva","fontName":"Nombre de font","justifyLeft":"Alinear izquierda","unlink":"Eliminar enlace","toggleTableBorder":"Conmutar borde de tabla","viewSource":"Ver fuente HTML","ctrlKey":"control+${0}","fontSize":"Tamaño de font","systemShortcut":"La acción \"${0}\" sólo está disponible en su navegador mediante un atajo de teclado. Utilice ${1}.","indent":"Sangría","redo":"Rehacer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinear centro","hiliteColor":"Color de segundo plano","deleteTable":"Suprimir tabla","outdent":"Anular sangría","cut":"Cortar","plainFormatBlock":"Estilo de párrafo","toggleDir":"Conmutar dirección","bold":"Negrita","tabIndent":"Sangría de tabulador","justifyRight":"Alinear derecha","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es");dijit.form.nls.validate.es={"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es");dijit.form.nls.ComboBox.es={"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.es");dijit._editor.nls.FontChoice.es={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.es");dijit._editor.nls.LinkDialog.es={"text":"Descripción: ","insertImageTitle":"Propiedades de la imagen","set":"Establecer","newWindow":"Nueva ventana","topWindow":"Ventana superior","target":"Destino: ","createLinkTitle":"Propiedades del enlace","parentWindow":"Ventana padre","currentWindow":"Ventana actual","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es");dojo.cldr.nls.number.es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","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:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.es");dojo.cldr.nls.currency.es={"HKD_displayName":"dólar de Hong Kong","CHF_displayName":"franco suizo","CAD_displayName":"dólar canadiense","CNY_displayName":"yuan renminbi chino","AUD_displayName":"dólar australiano","JPY_displayName":"yen japonés","USD_displayName":"dólar estadounidense","GBP_displayName":"libra esterlina británica","EUR_displayName":"euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.es");dojo.cldr.nls.gregorian.es={"months-format-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"día de la semana","dateFormatItem-yyQQQQ":"QQQQ 'de' yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["a.C.","d.C."],"dateFormatItem-MMMdd":"dd-MMM","dateFormat-long":"d 'de' MMMM 'de' y","months-format-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"p.m.","dateFormat-full":"EEEE d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"año","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","field-hour":"hora","months-format-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"hoy","field-day-relative+1":"mañana","field-day-relative+2":"pasado mañana","field-day-relative+3":"Dentro de tres días","months-standAlone-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"dateFormatItem-MMMMd":"d 'de' MMMM","dateFormatItem-yyMMM":"MMM-yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["a.C.","d.C."],"field-minute":"minuto","field-dayperiod":"periodo del día","days-standAlone-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ayer","dateFormatItem-h":"hh a","field-day-relative+-2":"antes de ayer","field-day-relative+-3":"Hace tres días","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMMMM":"MMMM 'de' y","field-day":"día","days-format-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"field-zone":"zona","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"eraNames":["antes de Cristo","anno Dómini"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mes","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"a.m.","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","field-second":"segundo","dateFormatItem-yMMMEd":"EEE, d MMM y","field-week":"semana","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_fi-fi.js b/lib/dijit/nls/dijit-all_fi-fi.js
deleted file mode 100644 (file)
index d257fb4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Tulosta","underline":"Alleviivaus","foreColor":"Edustaväri","htmlToggle":"HTML-lähde","formatBlock":"Kappaletyyli","newPage":"Uusi sivu","insertHorizontalRule":"Vaakasuuntainen viiva","delete":"Poista","insertUnorderedList":"Numeroimaton luettelo","tableProp":"Taulukon ominaisuudet","insertImage":"Lisää kuva","superscript":"Yläindeksi","subscript":"Alaindeksi","createLink":"Luo linkki","undo":"Kumoa","fullScreen":"Vaihda koko näyttö","italic":"Kursivointi","fontName":"Fontin nimi","justifyLeft":"Tasaus vasemmalle","unlink":"Poista linkki","toggleTableBorder":"Ota taulukon kehys käyttöön/poista kehys käytöstä","viewSource":"Näytä HTML-lähde","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.fi_fi");dijit._editor.nls.FontChoice.fi_fi={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.fi_fi");dijit._editor.nls.LinkDialog.fi_fi={"text":"Kuvaus:","insertImageTitle":"Kuvan ominaisuudet","set":"Aseta","newWindow":"Uusi ikkuna","topWindow":"Päällimmäinen ikkuna","target":"Kohde:","createLinkTitle":"Linkin ominaisuudet","parentWindow":"Pääikkuna","currentWindow":"Nykyinen ikkuna","url":"URL-osoite:"};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("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","GBP_symbol":"£","EUR_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"],"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.","dayPeriods-format-wide-pm":"ip.","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","dayPeriods-standAlone-wide-pm":"ip.","dayPeriods-format-abbr-am":"ap.","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","field-day-relative+0":"tänään","field-day-relative+1":"huomenna","field-day-relative+2":"ylihuomenna","dateFormatItem-H":"H","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-M":"L","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-yyMMM":"LLLL 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","field-day-relative+-1":"eilen","field-day-relative+-2":"toissapäivänä","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M.","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","dayPeriods-format-abbr-pm":"ip.","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","dayPeriods-format-wide-am":"ap.","dayPeriods-standAlone-wide-am":"ap.","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","dateFormatItem-hms":"h.mm.ss a","quarters-standAlone-narrow":["1","2","3","4"],"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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_fi.js b/lib/dijit/nls/dijit-all_fi.js
deleted file mode 100644 (file)
index 95a4f21..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Tulosta","underline":"Alleviivaus","foreColor":"Edustaväri","htmlToggle":"HTML-lähde","formatBlock":"Kappaletyyli","newPage":"Uusi sivu","insertHorizontalRule":"Vaakasuuntainen viiva","delete":"Poista","insertUnorderedList":"Numeroimaton luettelo","tableProp":"Taulukon ominaisuudet","insertImage":"Lisää kuva","superscript":"Yläindeksi","subscript":"Alaindeksi","createLink":"Luo linkki","undo":"Kumoa","fullScreen":"Vaihda koko näyttö","italic":"Kursivointi","fontName":"Fontin nimi","justifyLeft":"Tasaus vasemmalle","unlink":"Poista linkki","toggleTableBorder":"Ota taulukon kehys käyttöön/poista kehys käytöstä","viewSource":"Näytä HTML-lähde","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.fi");dijit._editor.nls.FontChoice.fi={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.fi");dijit._editor.nls.LinkDialog.fi={"text":"Kuvaus:","insertImageTitle":"Kuvan ominaisuudet","set":"Aseta","newWindow":"Uusi ikkuna","topWindow":"Päällimmäinen ikkuna","target":"Kohde:","createLinkTitle":"Linkin ominaisuudet","parentWindow":"Pääikkuna","currentWindow":"Nykyinen ikkuna","url":"URL-osoite:"};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("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","GBP_symbol":"£","EUR_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"],"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.","dayPeriods-format-wide-pm":"ip.","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","dayPeriods-standAlone-wide-pm":"ip.","dayPeriods-format-abbr-am":"ap.","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","field-day-relative+0":"tänään","field-day-relative+1":"huomenna","field-day-relative+2":"ylihuomenna","dateFormatItem-H":"H","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-M":"L","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-yyMMM":"LLLL 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","field-day-relative+-1":"eilen","field-day-relative+-2":"toissapäivänä","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M.","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","dayPeriods-format-abbr-pm":"ip.","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","dayPeriods-format-wide-am":"ap.","dayPeriods-standAlone-wide-am":"ap.","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","dateFormatItem-hms":"h.mm.ss a","quarters-standAlone-narrow":["1","2","3","4"],"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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_fr-fr.js b/lib/dijit/nls/dijit-all_fr-fr.js
deleted file mode 100644 (file)
index 8055fbf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_fr-fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr_fr");dojo.nls.colors.fr_fr={"lightsteelblue":"bleu acier clair","orangered":"rouge orangé","midnightblue":"bleu nuit","cadetblue":"bleu pétrole","seashell":"coquillage","slategrey":"gris ardoise","coral":"corail","darkturquoise":"turquoise foncé","antiquewhite":"blanc antique","mediumspringgreen":"vert printemps moyen","salmon":"saumon","darkgrey":"gris foncé","ivory":"ivoire","greenyellow":"vert-jaune","mistyrose":"rose pâle","lightsalmon":"saumon clair","silver":"argent","dimgrey":"gris soutenu","orange":"orange","white":"blanc","navajowhite":"chair","royalblue":"bleu roi","deeppink":"rose soutenu","lime":"vert citron","oldlace":"blanc cassé","chartreuse":"vert vif","darkcyan":"cyan foncé","yellow":"jaune","linen":"écru","olive":"olive","gold":"or","lawngreen":"vert prairie","lightyellow":"jaune clair","tan":"grège","darkviolet":"violet foncé","lightslategrey":"gris ardoise clair","grey":"gris","darkkhaki":"kaki foncé","green":"vert","deepskyblue":"bleu ciel soutenu","aqua":"bleu-vert","sienna":"terre de sienne","mintcream":"crème de menthe","rosybrown":"vieux rose","mediumslateblue":"bleu ardoise moyen","magenta":"magenta","lightseagreen":"vert d'eau clair","cyan":"cyan","olivedrab":"brun verdâtre","darkgoldenrod":"jaune paille foncé","slateblue":"bleu ardoise","mediumaquamarine":"aigue-marine moyen","lavender":"lavande","mediumseagreen":"vert d'eau moyen","maroon":"marron","darkslategray":"gris ardoise foncé","mediumturquoise":"turquoise moyen","ghostwhite":"blanc laiteux","darkblue":"bleu foncé","mediumvioletred":"rouge violacé moyen","brown":"brun","lightgray":"gris clair","sandybrown":"sable","pink":"rose","firebrick":"rouge brique","indigo":"indigo","snow":"neige","darkorchid":"lilas foncé","turquoise":"turquoise","chocolate":"chocolat","springgreen":"vert printemps","moccasin":"chamois","navy":"bleu marine","lemonchiffon":"mousse de citron","teal":"sarcelle","floralwhite":"lys","cornflowerblue":"bleuet","paleturquoise":"turquoise pâle","purple":"pourpre","gainsboro":"gris souris","plum":"prune","red":"rouge","blue":"bleu","forestgreen":"vert sapin","darkgreen":"vert foncé","honeydew":"opalin","darkseagreen":"vert d'eau foncé","lightcoral":"corail clair","palevioletred":"rouge violacé pâle","mediumpurple":"pourpre moyen","saddlebrown":"brun cuir","darkmagenta":"magenta foncé","thistle":"chardon","whitesmoke":"blanc cendré","wheat":"blé","violet":"violet","lightskyblue":"bleu ciel clair","goldenrod":"jaune paille","mediumblue":"bleu moyen","skyblue":"bleu ciel","crimson":"cramoisi","darksalmon":"saumon foncé","darkred":"rouge foncé","darkslategrey":"gris ardoise foncé","peru":"caramel","lightgrey":"gris clair","lightgoldenrodyellow":"jaune paille clair","blanchedalmond":"coquille d'oeuf","aliceblue":"bleu gris","bisque":"beige rosé","slategray":"gris ardoise","palegoldenrod":"jaune paille pâle","darkorange":"orange foncé","aquamarine":"aigue-marine","lightgreen":"vert clair","burlywood":"bois précieux","dodgerblue":"bleu France","darkgray":"gris foncé","lightcyan":"cyan clair","powderblue":"bleu de smalt","blueviolet":"bleu-violet","orchid":"lilas","dimgray":"gris soutenu","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavandin","hotpink":"rose intense","steelblue":"bleu acier","tomato":"tomate","lightpink":"rose clair","limegreen":"citron vert","indianred":"rose indien","papayawhip":"crème de papaye","lightslategray":"gris ardoise clair","gray":"gris","mediumorchid":"lilas moyen","cornsilk":"vanille","black":"noir","seagreen":"vert d'eau","darkslateblue":"bleu ardoise foncé","khaki":"kaki","lightblue":"bleu clair","palegreen":"vert pâle","azure":"bleu azur","peachpuff":"pêche","darkolivegreen":"olive foncé","yellowgreen":"vert jaunâtre"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr_fr");dijit.nls.common.fr_fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fr_fr");dijit._editor.nls.commands.fr_fr={"removeFormat":"Supprimer la mise en forme","copy":"Copier","paste":"Coller","selectAll":"Sélectionner tout","insertOrderedList":"Liste numérotée","insertTable":"Insérer/Modifier un tableau","print":"Imprimer","underline":"Souligner","foreColor":"Couleur avant-plan","htmlToggle":"Source HTML","formatBlock":"Style de paragraphe","newPage":"Nouvelle page","insertHorizontalRule":"Règle horizontale","delete":"Supprimer","insertUnorderedList":"Liste à puces","tableProp":"Propriété du tableau","insertImage":"Insérer une image","superscript":"Exposant","subscript":"Indice","createLink":"Créer un lien","undo":"Annuler","fullScreen":"Basculer vers le mode plein écran","italic":"Italique","fontName":"Nom de police","justifyLeft":"Aligner à gauche","unlink":"Supprimer le lien","toggleTableBorder":"Afficher/Masquer la bordure du tableau","viewSource":"Afficher la source HTML","fontSize":"Taille de police","systemShortcut":"Action \"${0}\" uniquement disponible dans votre navigateur via un raccourci clavier. Utilisez ${1}.","indent":"Retrait","redo":"Rétablir","strikethrough":"Barrer","justifyFull":"Justifier","justifyCenter":"Aligner au centre","hiliteColor":"Couleur arrière-plan","deleteTable":"Supprimer le tableau","outdent":"Retrait négatif","cut":"Couper","plainFormatBlock":"Style de paragraphe","toggleDir":"Changer de sens","bold":"Gras","tabIndent":"Retrait de tabulation","justifyRight":"Aligner à droite","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr_fr");dijit.form.nls.validate.fr_fr={"rangeMessage":"Cette valeur n'est pas comprise dans la plage autorisée.","invalidMessage":"La valeur indiquée n'est pas correcte.","missingMessage":"Cette valeur est requise."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr_fr");dijit.form.nls.ComboBox.fr_fr={"previousMessage":"Choix précédents","nextMessage":"Plus de choix"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.fr_fr");dijit._editor.nls.FontChoice.fr_fr={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.fr_fr");dijit._editor.nls.LinkDialog.fr_fr={"text":"Description :","insertImageTitle":"Propriétés des images","set":"Définir","newWindow":"Nouvelle fenêtre","topWindow":"Première fenêtre","target":"Cible :","createLinkTitle":"Propriétés des liens","parentWindow":"Fenêtre parent","currentWindow":"Fenêtre en cours","url":"URL :"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr_fr");dojo.cldr.nls.number.fr_fr={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fr_fr");dojo.cldr.nls.currency.fr_fr={"HKD_displayName":"dollar de Hong Kong","CHF_displayName":"franc suisse","CHF_symbol":"CHF","JPY_symbol":"¥JP","HKD_symbol":"$HK","CAD_displayName":"dollar canadien","CNY_displayName":"yuan renminbi chinois","USD_symbol":"$US","AUD_displayName":"dollar australien","JPY_displayName":"yen japonais","CAD_symbol":"$CA","USD_displayName":"dollar des États-Unis","CNY_symbol":"Ұ","GBP_displayName":"livre sterling","GBP_symbol":"£UK","AUD_symbol":"$AU","EUR_displayName":"euro","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fr_fr");dojo.cldr.nls.gregorian.fr_fr={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"jour de la semaine","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["av. J.-C.","ap. J.-C."],"dayPeriods-format-wide-morning":"matin","dateFormatItem-MMMdd":"dd MMM","dateFormat-long":"d MMMM y","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"midi","field-era":"ère","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"année","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"'T'Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"heure","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"dateFormatItem-yyQ":"'T'Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"aujourd’hui","field-day-relative+1":"demain","field-day-relative+2":"après-demain","field-day-relative+3":"après-après-demain","months-standAlone-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormatItem-yyMMMEEEd":"EEE d MMM yy","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["av. J.-C.","ap. J.-C."],"field-minute":"minute","field-dayperiod":"cadran","days-standAlone-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"dayPeriods-format-wide-night":"soir","dateFormatItem-yyMMMd":"d MMM yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["T1","T2","T3","T4"],"field-day-relative+-1":"hier","field-day-relative+-2":"avant-hier","field-day-relative+-3":"avant-avant-hier","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"jour","days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"field-zone":"fuseau horaire","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":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"eraNames":["avant Jésus-Christ","après Jésus-Christ"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mois","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"EEE d MMMM","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","dayPeriods-format-wide-afternoon":"après-midi","field-second":"seconde","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"semaine","dateFormat-medium":"d MMM y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_fr.js b/lib/dijit/nls/dijit-all_fr.js
deleted file mode 100644 (file)
index 75b8e3f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr");dojo.nls.colors.fr={"lightsteelblue":"bleu acier clair","orangered":"rouge orangé","midnightblue":"bleu nuit","cadetblue":"bleu pétrole","seashell":"coquillage","slategrey":"gris ardoise","coral":"corail","darkturquoise":"turquoise foncé","antiquewhite":"blanc antique","mediumspringgreen":"vert printemps moyen","salmon":"saumon","darkgrey":"gris foncé","ivory":"ivoire","greenyellow":"vert-jaune","mistyrose":"rose pâle","lightsalmon":"saumon clair","silver":"argent","dimgrey":"gris soutenu","orange":"orange","white":"blanc","navajowhite":"chair","royalblue":"bleu roi","deeppink":"rose soutenu","lime":"vert citron","oldlace":"blanc cassé","chartreuse":"vert vif","darkcyan":"cyan foncé","yellow":"jaune","linen":"écru","olive":"olive","gold":"or","lawngreen":"vert prairie","lightyellow":"jaune clair","tan":"grège","darkviolet":"violet foncé","lightslategrey":"gris ardoise clair","grey":"gris","darkkhaki":"kaki foncé","green":"vert","deepskyblue":"bleu ciel soutenu","aqua":"bleu-vert","sienna":"terre de sienne","mintcream":"crème de menthe","rosybrown":"vieux rose","mediumslateblue":"bleu ardoise moyen","magenta":"magenta","lightseagreen":"vert d'eau clair","cyan":"cyan","olivedrab":"brun verdâtre","darkgoldenrod":"jaune paille foncé","slateblue":"bleu ardoise","mediumaquamarine":"aigue-marine moyen","lavender":"lavande","mediumseagreen":"vert d'eau moyen","maroon":"marron","darkslategray":"gris ardoise foncé","mediumturquoise":"turquoise moyen","ghostwhite":"blanc laiteux","darkblue":"bleu foncé","mediumvioletred":"rouge violacé moyen","brown":"brun","lightgray":"gris clair","sandybrown":"sable","pink":"rose","firebrick":"rouge brique","indigo":"indigo","snow":"neige","darkorchid":"lilas foncé","turquoise":"turquoise","chocolate":"chocolat","springgreen":"vert printemps","moccasin":"chamois","navy":"bleu marine","lemonchiffon":"mousse de citron","teal":"sarcelle","floralwhite":"lys","cornflowerblue":"bleuet","paleturquoise":"turquoise pâle","purple":"pourpre","gainsboro":"gris souris","plum":"prune","red":"rouge","blue":"bleu","forestgreen":"vert sapin","darkgreen":"vert foncé","honeydew":"opalin","darkseagreen":"vert d'eau foncé","lightcoral":"corail clair","palevioletred":"rouge violacé pâle","mediumpurple":"pourpre moyen","saddlebrown":"brun cuir","darkmagenta":"magenta foncé","thistle":"chardon","whitesmoke":"blanc cendré","wheat":"blé","violet":"violet","lightskyblue":"bleu ciel clair","goldenrod":"jaune paille","mediumblue":"bleu moyen","skyblue":"bleu ciel","crimson":"cramoisi","darksalmon":"saumon foncé","darkred":"rouge foncé","darkslategrey":"gris ardoise foncé","peru":"caramel","lightgrey":"gris clair","lightgoldenrodyellow":"jaune paille clair","blanchedalmond":"coquille d'oeuf","aliceblue":"bleu gris","bisque":"beige rosé","slategray":"gris ardoise","palegoldenrod":"jaune paille pâle","darkorange":"orange foncé","aquamarine":"aigue-marine","lightgreen":"vert clair","burlywood":"bois précieux","dodgerblue":"bleu France","darkgray":"gris foncé","lightcyan":"cyan clair","powderblue":"bleu de smalt","blueviolet":"bleu-violet","orchid":"lilas","dimgray":"gris soutenu","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavandin","hotpink":"rose intense","steelblue":"bleu acier","tomato":"tomate","lightpink":"rose clair","limegreen":"citron vert","indianred":"rose indien","papayawhip":"crème de papaye","lightslategray":"gris ardoise clair","gray":"gris","mediumorchid":"lilas moyen","cornsilk":"vanille","black":"noir","seagreen":"vert d'eau","darkslateblue":"bleu ardoise foncé","khaki":"kaki","lightblue":"bleu clair","palegreen":"vert pâle","azure":"bleu azur","peachpuff":"pêche","darkolivegreen":"olive foncé","yellowgreen":"vert jaunâtre"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr");dijit.nls.common.fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fr");dijit._editor.nls.commands.fr={"removeFormat":"Supprimer la mise en forme","copy":"Copier","paste":"Coller","selectAll":"Sélectionner tout","insertOrderedList":"Liste numérotée","insertTable":"Insérer/Modifier un tableau","print":"Imprimer","underline":"Souligner","foreColor":"Couleur avant-plan","htmlToggle":"Source HTML","formatBlock":"Style de paragraphe","newPage":"Nouvelle page","insertHorizontalRule":"Règle horizontale","delete":"Supprimer","insertUnorderedList":"Liste à puces","tableProp":"Propriété du tableau","insertImage":"Insérer une image","superscript":"Exposant","subscript":"Indice","createLink":"Créer un lien","undo":"Annuler","fullScreen":"Basculer vers le mode plein écran","italic":"Italique","fontName":"Nom de police","justifyLeft":"Aligner à gauche","unlink":"Supprimer le lien","toggleTableBorder":"Afficher/Masquer la bordure du tableau","viewSource":"Afficher la source HTML","fontSize":"Taille de police","systemShortcut":"Action \"${0}\" uniquement disponible dans votre navigateur via un raccourci clavier. Utilisez ${1}.","indent":"Retrait","redo":"Rétablir","strikethrough":"Barrer","justifyFull":"Justifier","justifyCenter":"Aligner au centre","hiliteColor":"Couleur arrière-plan","deleteTable":"Supprimer le tableau","outdent":"Retrait négatif","cut":"Couper","plainFormatBlock":"Style de paragraphe","toggleDir":"Changer de sens","bold":"Gras","tabIndent":"Retrait de tabulation","justifyRight":"Aligner à droite","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr");dijit.form.nls.validate.fr={"rangeMessage":"Cette valeur n'est pas comprise dans la plage autorisée.","invalidMessage":"La valeur indiquée n'est pas correcte.","missingMessage":"Cette valeur est requise."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr");dijit.form.nls.ComboBox.fr={"previousMessage":"Choix précédents","nextMessage":"Plus de choix"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.fr");dijit._editor.nls.FontChoice.fr={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.fr");dijit._editor.nls.LinkDialog.fr={"text":"Description :","insertImageTitle":"Propriétés des images","set":"Définir","newWindow":"Nouvelle fenêtre","topWindow":"Première fenêtre","target":"Cible :","createLinkTitle":"Propriétés des liens","parentWindow":"Fenêtre parent","currentWindow":"Fenêtre en cours","url":"URL :"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr");dojo.cldr.nls.number.fr={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fr");dojo.cldr.nls.currency.fr={"HKD_displayName":"dollar de Hong Kong","CHF_displayName":"franc suisse","CHF_symbol":"CHF","JPY_symbol":"¥JP","HKD_symbol":"$HK","CAD_displayName":"dollar canadien","CNY_displayName":"yuan renminbi chinois","USD_symbol":"$US","AUD_displayName":"dollar australien","JPY_displayName":"yen japonais","CAD_symbol":"$CA","USD_displayName":"dollar des États-Unis","CNY_symbol":"Ұ","GBP_displayName":"livre sterling","GBP_symbol":"£UK","AUD_symbol":"$AU","EUR_displayName":"euro","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fr");dojo.cldr.nls.gregorian.fr={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"jour de la semaine","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["av. J.-C.","ap. J.-C."],"dayPeriods-format-wide-morning":"matin","dateFormatItem-MMMdd":"dd MMM","dateFormat-long":"d MMMM y","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"midi","field-era":"ère","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"année","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"'T'Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"heure","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"dateFormatItem-yyQ":"'T'Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"aujourd’hui","field-day-relative+1":"demain","field-day-relative+2":"après-demain","field-day-relative+3":"après-après-demain","months-standAlone-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormatItem-yyMMMEEEd":"EEE d MMM yy","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["av. J.-C.","ap. J.-C."],"field-minute":"minute","field-dayperiod":"cadran","days-standAlone-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"dayPeriods-format-wide-night":"soir","dateFormatItem-yyMMMd":"d MMM yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["T1","T2","T3","T4"],"field-day-relative+-1":"hier","field-day-relative+-2":"avant-hier","field-day-relative+-3":"avant-avant-hier","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"jour","days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"field-zone":"fuseau horaire","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":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"eraNames":["avant Jésus-Christ","après Jésus-Christ"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mois","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"EEE d MMMM","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","dayPeriods-format-wide-afternoon":"après-midi","field-second":"seconde","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"semaine","dateFormat-medium":"d MMM y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_he-il.js b/lib/dijit/nls/dijit-all_he-il.js
deleted file mode 100644 (file)
index b40fa1b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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":"הוספת/עריכת טבלה","print":"הדפסה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","newPage":"דף חדש ","insertHorizontalRule":"קו אופקי","delete":"מחיקה","appleKey":"⌘${0}‎","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","fullScreen":"מיתוג מסך מלא ","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","viewSource":"הצגת מקור HTML ","ctrlKey":"ctrl+${0}‎","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין"};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("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":"אפשרויות נוספות"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.he_il");dijit._editor.nls.FontChoice.he_il={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.he_il");dijit._editor.nls.LinkDialog.he_il={"text":"תיאור:","insertImageTitle":"תכונות תמונה","set":"הגדרה","newWindow":"חלון חדש","topWindow":"חלון עליון ","target":"יעד:","createLinkTitle":"תכונות קישור","parentWindow":"חלון אב","currentWindow":"חלון נוכחי ","url":"URL:‏"};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("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":"אירו","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};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={"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":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"dateFormatItem-EEEd":"EEE ה-d","dayPeriods-format-wide-pm":"אחה״צ","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":"MMM y","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","field-day-relative+0":"היום","field-day-relative+1":"מחר","field-day-relative+2":"מחרתיים","dateFormatItem-H":"HH","field-day-relative+3":"בעוד שלושה ימים","months-standAlone-abbr":["ינו׳","פבר׳","מרס","אפר׳","מאי","יונ׳","יול׳","אוג׳","ספט׳","אוק׳","נוב׳","דצמ׳"],"quarters-format-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"quarters-standAlone-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormatItem-M":"L","days-standAlone-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"dateFormatItem-MMMMd":"d בMMMM","dateFormatItem-yyMMM":"MMM yyyy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"eraAbbr":["לפנה״ס","לסה״נ"],"field-minute":"דקה","field-dayperiod":"לפה״צ/אחה״צ","days-standAlone-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"אתמול","field-day-relative+-2":"שלשום","field-day-relative+-3":"לפני שלושה ימים","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","dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"eraNames":["לפני הספירה","לספירה"],"days-format-narrow":["א","ב","ג","ד","ה","ו","ש"],"field-month":"חודש","days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"לפנה״צ","dateFormatItem-MMMMEd":"E, d בMMMM","dateFormat-short":"dd/MM/yy","field-second":"שנייה","dateFormatItem-yMMMEd":"EEE, d בMMM y","dateFormatItem-Ed":"E ה-d","field-week":"שבוע","dateFormat-medium":"d בMMM yyyy","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yyyy":"y","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_he.js b/lib/dijit/nls/dijit-all_he.js
deleted file mode 100644 (file)
index fb88b3d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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":"הוספת/עריכת טבלה","print":"הדפסה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","newPage":"דף חדש ","insertHorizontalRule":"קו אופקי","delete":"מחיקה","appleKey":"⌘${0}‎","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","fullScreen":"מיתוג מסך מלא ","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","viewSource":"הצגת מקור HTML ","ctrlKey":"ctrl+${0}‎","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין"};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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he");dijit.form.nls.ComboBox.he={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.he");dijit._editor.nls.FontChoice.he={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.he");dijit._editor.nls.LinkDialog.he={"text":"תיאור:","insertImageTitle":"תכונות תמונה","set":"הגדרה","newWindow":"חלון חדש","topWindow":"חלון עליון ","target":"יעד:","createLinkTitle":"תכונות קישור","parentWindow":"חלון אב","currentWindow":"חלון נוכחי ","url":"URL:‏"};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("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":"אירו","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.he");dojo.cldr.nls.gregorian.he={"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":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"dateFormatItem-EEEd":"EEE ה-d","dayPeriods-format-wide-pm":"אחה״צ","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":"MMM y","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","field-day-relative+0":"היום","field-day-relative+1":"מחר","field-day-relative+2":"מחרתיים","dateFormatItem-H":"HH","field-day-relative+3":"בעוד שלושה ימים","months-standAlone-abbr":["ינו׳","פבר׳","מרס","אפר׳","מאי","יונ׳","יול׳","אוג׳","ספט׳","אוק׳","נוב׳","דצמ׳"],"quarters-format-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"quarters-standAlone-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormatItem-M":"L","days-standAlone-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"dateFormatItem-MMMMd":"d בMMMM","dateFormatItem-yyMMM":"MMM yyyy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"eraAbbr":["לפנה״ס","לסה״נ"],"field-minute":"דקה","field-dayperiod":"לפה״צ/אחה״צ","days-standAlone-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"אתמול","field-day-relative+-2":"שלשום","field-day-relative+-3":"לפני שלושה ימים","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","dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"eraNames":["לפני הספירה","לספירה"],"days-format-narrow":["א","ב","ג","ד","ה","ו","ש"],"field-month":"חודש","days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"לפנה״צ","dateFormatItem-MMMMEd":"E, d בMMMM","dateFormat-short":"dd/MM/yy","field-second":"שנייה","dateFormatItem-yMMMEd":"EEE, d בMMM y","dateFormatItem-Ed":"E ה-d","field-week":"שבוע","dateFormat-medium":"d בMMM yyyy","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yyyy":"y","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_hu.js b/lib/dijit/nls/dijit-all_hu.js
deleted file mode 100644 (file)
index 104c387..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_hu");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.hu");dojo.nls.colors.hu={"lightsteelblue":"világos acélkék","orangered":"narancsvörös","midnightblue":"éjkék","cadetblue":"kadétkék","seashell":"kagyló","slategrey":"palaszürke","coral":"korall","darkturquoise":"sötét türkizkék","antiquewhite":"antik fehér","mediumspringgreen":"közepes tavaszzöld","salmon":"lazacszín","darkgrey":"sötétszürke","ivory":"elefántcsont","greenyellow":"zöldessárga","mistyrose":"halvány rózsaszín","lightsalmon":"világos lazacszín","silver":"ezüst","dimgrey":"halványszürke","orange":"narancssárga","white":"fehér","navajowhite":"navajo fehér","royalblue":"királykék","deeppink":"sötétrózsaszín","lime":"lime","oldlace":"régi csipke","chartreuse":"chartreuse","darkcyan":"sötét ciánkék","yellow":"sárga","linen":"vászonfehér","olive":"olajzöld","gold":"arany","lawngreen":"fűzöld","lightyellow":"világossárga","tan":"rozsdabarna","darkviolet":"sötét ibolyaszín","lightslategrey":"világos palaszürke","grey":"szürke","darkkhaki":"sötét khakiszín","green":"zöld","deepskyblue":"sötét égszínkék","aqua":"vízszín","sienna":"vörösesbarna","mintcream":"mentaszósz","rosybrown":"barnásrózsaszín","mediumslateblue":"közepes palakék","magenta":"bíbor","lightseagreen":"világos tengerzöld","cyan":"ciánkék","olivedrab":"olajzöld drapp","darkgoldenrod":"sötét aranyvessző","slateblue":"palakék","mediumaquamarine":"közepes akvamarin","lavender":"levendula","mediumseagreen":"közepes tengerzöld","maroon":"gesztenyebarna","darkslategray":"sötét palaszürke","mediumturquoise":"közepes türkizkék","ghostwhite":"szellemfehér","darkblue":"sötétkék","mediumvioletred":"közepes ibolyavörös","brown":"barna","lightgray":"világosszürke","sandybrown":"homokbarna","pink":"rózsaszín","firebrick":"téglavörös","indigo":"indigó","snow":"hó","darkorchid":"sötét orchidea","turquoise":"türkizkék","chocolate":"csokoládé","springgreen":"tavaszzöld","moccasin":"mokkaszín","navy":"tengerészkék","lemonchiffon":"sárga műselyem","teal":"pávakék","floralwhite":"virágfehér","cornflowerblue":"búzavirágkék","paleturquoise":"halvány türkizkék","purple":"lila","gainsboro":"gainsboro","plum":"szilvakék","red":"vörös","blue":"kék","forestgreen":"erdőzöld","darkgreen":"sötétzöld","honeydew":"mézharmat","darkseagreen":"sötét tengerzöld","lightcoral":"világos korall","palevioletred":"halvány ibolyavörös","mediumpurple":"közepes lila","saddlebrown":"nyeregbarna","darkmagenta":"sötétbíbor","thistle":"bogáncs","whitesmoke":"fehér füst","wheat":"búza","violet":"ibolyaszín","lightskyblue":"világos égszínkék","goldenrod":"aranyvessző","mediumblue":"közepes kék","skyblue":"égszínkék","crimson":"karmazsinvörös","darksalmon":"sötét lazacszín","darkred":"sötétvörös","darkslategrey":"sötét palaszürke","peru":"peru","lightgrey":"világosszürke","lightgoldenrodyellow":"világos aranyvessző sárga","blanchedalmond":"hámozott mandula","aliceblue":"Alice kék","bisque":"porcelán","slategray":"palaszürke","palegoldenrod":"halvány aranyvessző","darkorange":"sötét narancssárga","aquamarine":"akvamarin","lightgreen":"világoszöld","burlywood":"nyersfa","dodgerblue":"dodger kék","darkgray":"sötétszürke","lightcyan":"világos ciánkék","powderblue":"púderkék","blueviolet":"ibolyakék","orchid":"orchidea","dimgray":"halványszürke","beige":"bézs","fuchsia":"fukszia","lavenderblush":"pirosas levendula","hotpink":"meleg rózsaszín","steelblue":"acélkék","tomato":"paradicsom","lightpink":"világos rózsaszín","limegreen":"limezöld","indianred":"indiánvörös","papayawhip":"papayahab","lightslategray":"világos palaszürke","gray":"szürke","mediumorchid":"közepes orchidea","cornsilk":"kukoricahaj","black":"fekete","seagreen":"tengerzöld","darkslateblue":"sötét palakék","khaki":"khakiszín","lightblue":"világoskék","palegreen":"halványzöld","azure":"azúrkék","peachpuff":"barackszín","darkolivegreen":"sötét olajzöld","yellowgreen":"sárgászöld"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.hu");dijit.nls.common.hu={"buttonOk":"OK","buttonCancel":"Mégse","buttonSave":"Mentés","itemClose":"Bezárás"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.hu");dijit._editor.nls.commands.hu={"removeFormat":"Formázás eltávolítása","copy":"Másolás","paste":"Beillesztés","selectAll":"Összes kijelölése","insertOrderedList":"Számozott lista","insertTable":"Táblázat beszúrása/szerkesztése","print":"Nyomtatás","underline":"Aláhúzott","foreColor":"Előtérszín","htmlToggle":"HTML forrás","formatBlock":"Bekezdés stílusa","newPage":"Új oldal","insertHorizontalRule":"Vízszintes vonalzó","delete":"Törlés","insertUnorderedList":"Felsorolásjeles lista","tableProp":"Táblázat tulajdonságai","insertImage":"Kép beszúrása","superscript":"Felső index","subscript":"Alsó index","createLink":"Hivatkozás létrehozása","undo":"Visszavonás","fullScreen":"Váltás teljes képernyőre","italic":"Dőlt","fontName":"Betűtípus","justifyLeft":"Balra igazítás","unlink":"Hivatkozás eltávolítása","toggleTableBorder":"Táblázatszegély ki-/bekapcsolása","viewSource":"HTML forrás megjelenítése","fontSize":"Betűméret","systemShortcut":"A(z) \"${0}\" művelet a böngészőben csak billentyűparancs használatával érhető el. Használja a következőt: ${1}.","indent":"Behúzás","redo":"Újra","strikethrough":"Áthúzott","justifyFull":"Sorkizárás","justifyCenter":"Középre igazítás","hiliteColor":"Háttérszín","deleteTable":"Táblázat törlése","outdent":"Negatív behúzás","cut":"Kivágás","plainFormatBlock":"Bekezdés stílusa","toggleDir":"Irány váltókapcsoló","bold":"Félkövér","tabIndent":"Tab behúzás","justifyRight":"Jobbra igazítás","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.hu");dijit.form.nls.validate.hu={"rangeMessage":"Az érték kívül van a megengedett tartományon.","invalidMessage":"A megadott érték érvénytelen.","missingMessage":"Meg kell adni egy értéket."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.hu");dijit.form.nls.ComboBox.hu={"previousMessage":"Előző menüpontok","nextMessage":"További menüpontok"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.hu");dijit._editor.nls.FontChoice.hu={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.hu");dijit._editor.nls.LinkDialog.hu={"text":"Leírás:","insertImageTitle":"Kép tulajdonságai","set":"Beállítás","newWindow":"Új ablak","topWindow":"Legfelső szintű ablak","target":"Cél:","createLinkTitle":"Hivatkozás tulajdonságai","parentWindow":"Szülő ablak","currentWindow":"Aktuális ablak","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.hu");dojo.cldr.nls.number.hu={"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":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.hu");dojo.cldr.nls.currency.hu={"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","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.hu");dojo.cldr.nls.gregorian.hu={"field-dayperiod":"napszak","dayPeriods-format-wide-pm":"du.","field-minute":"perc","eraNames":["időszámításunk előtt","időszámításunk szerint"],"field-day-relative+-1":"tegnap","field-weekday":"hét napja","field-day-relative+-2":"tegnapelőtt","dateFormatItem-MMdd":"MM.dd.","field-day-relative+-3":"három nappal ezelőtt","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","Sz","O","N","D"],"field-era":"éra","field-hour":"óra","dayPeriods-format-wide-am":"de.","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."],"field-day-relative+0":"ma","field-day-relative+1":"holnap","days-standAlone-narrow":["V","H","K","Sz","Cs","P","Sz"],"eraAbbr":["i. e.","i. sz."],"field-day-relative+2":"holnapután","field-day-relative+3":"három nap múlva","dateFormatItem-yyyyMM":"yyyy.MM","dateFormatItem-yyyyMMMM":"y. MMMM","dateFormat-long":"y. MMMM d.","timeFormat-medium":"H:mm:ss","field-zone":"zóna","dateFormatItem-Hm":"H:mm","dateFormat-medium":"yyyy.MM.dd.","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["I. negyedév","II. negyedév","III. negyedév","IV. negyedév"],"field-year":"év","field-week":"hét","months-standAlone-wide":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],"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","dateFormatItem-H":"H","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"],"dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["V","H","K","Sz","Cs","P","Sz"],"field-second":"másodperc","field-day":"nap","dateFormatItem-MEd":"M. d., E","months-format-narrow":["J","F","M","Á","M","J","J","A","Sz","O","N","D"],"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."],"quarters-standAlone-narrow":["1","2","3","4"],"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","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_it-it.js b/lib/dijit/nls/dijit-all_it-it.js
deleted file mode 100644 (file)
index 7d5b800..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_it-it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it_it");dojo.nls.colors.it_it={"lightsteelblue":"blu acciao chiaro","orangered":"vermiglio","midnightblue":"blu melanzana scuro","cadetblue":"verde acqua","seashell":"sabbia rosa","slategrey":"grigio ardesia","coral":"corallo","darkturquoise":"turchese scuro","antiquewhite":"bianco antico","mediumspringgreen":"verde primavera medio","salmon":"salmone","darkgrey":"grigio scuro","ivory":"avorio","greenyellow":"giallo verde","mistyrose":"rosa pallido","lightsalmon":"salmone chiaro","silver":"grigio 25%","dimgrey":"grigio 80%","orange":"arancione","white":"bianco","navajowhite":"pesca chiaro","royalblue":"blu reale","deeppink":"ciclamino","lime":"verde fluorescente","oldlace":"mandorla","chartreuse":"verde brillante","darkcyan":"ciano scuro","yellow":"giallo","linen":"lino","olive":"verde oliva","gold":"oro","lawngreen":"verde prato","lightyellow":"giallo chiaro","tan":"grigio bruno","darkviolet":"viola scuro","lightslategrey":"grigio ardesia chiaro","grey":"grigio","darkkhaki":"kaki scuro","green":"verde","deepskyblue":"azzurro cielo scuro","aqua":"acqua","sienna":"cuoio","mintcream":"bianco nuvola","rosybrown":"marrone rosato","mediumslateblue":"blu ardesia medio","magenta":"magenta","lightseagreen":"verde mare chiaro","cyan":"ciano","olivedrab":"marrone oliva","darkgoldenrod":"ocra scuro","slateblue":"blu ardesia","mediumaquamarine":"acquamarina medio","lavender":"lavanda","mediumseagreen":"verde mare medio","maroon":"scarlatto","darkslategray":"grigio ardesia scuro","mediumturquoise":"turchese medio","ghostwhite":"bianco gesso","darkblue":"blu scuro","mediumvioletred":"vinaccia","brown":"marrone","lightgray":"grigio chiaro","sandybrown":"marrone sabbia","pink":"rosa","firebrick":"rosso mattone","indigo":"indaco","snow":"neve","darkorchid":"orchidea scuro","turquoise":"turchese","chocolate":"cioccolato","springgreen":"verde primavera","moccasin":"mocassino","navy":"blu notte","lemonchiffon":"caffelatte chiaro","teal":"verde turchese","floralwhite":"bianco giglio","cornflowerblue":"blu fiordaliso","paleturquoise":"turchese pallido","purple":"porpora","gainsboro":"grigio 10%","plum":"prugna","red":"rosso","blue":"blu","forestgreen":"verde foresta","darkgreen":"verde scuro","honeydew":"bianco germoglio","darkseagreen":"verde mare scuro","lightcoral":"rosa corallo","palevioletred":"vinaccia chiaro","mediumpurple":"porpora medio","saddlebrown":"cacao","darkmagenta":"magenta scuro","thistle":"rosa cenere","whitesmoke":"bianco fumo","wheat":"sabbia","violet":"viola","lightskyblue":"azzurro cielo chiaro","goldenrod":"ocra gialla","mediumblue":"blu medio","skyblue":"azzurro cielo","crimson":"cremisi","darksalmon":"salmone scuro","darkred":"rosso scuro","darkslategrey":"grigio ardesia scuro","peru":"marrone terra bruciata","lightgrey":"grigio chiaro","lightgoldenrodyellow":"giallo tenue","blanchedalmond":"mandorla chiaro","aliceblue":"blu alice","bisque":"incarnato","slategray":"grigio ardesia","palegoldenrod":"giallo zolfo chiaro","darkorange":"arancione scuro","aquamarine":"acquamarina","lightgreen":"verde chiaro","burlywood":"tabacco","dodgerblue":"blu d'oriente","darkgray":"grigio scuro","lightcyan":"ciano chiaro","powderblue":"azzurro polvere","blueviolet":"blu violetto","orchid":"orchidea","dimgray":"grigio 80%","beige":"beige","fuchsia":"fucsia","lavenderblush":"bianco rosato","hotpink":"rosa acceso","steelblue":"blu acciao","tomato":"pomodoro","lightpink":"rosa chiaro","limegreen":"verde lime","indianred":"terra indiana","papayawhip":"cipria","lightslategray":"grigio ardesia chiaro","gray":"grigio","mediumorchid":"orchidea medio","cornsilk":"crema","black":"nero","seagreen":"verde mare","darkslateblue":"blu ardesia scuro","khaki":"kaki","lightblue":"azzurro","palegreen":"verde pallido","azure":"azzurro ghiaccio","peachpuff":"pesca","darkolivegreen":"verde oliva scuro","yellowgreen":"giallo verde"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it_it");dijit.nls.common.it_it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.it_it");dijit._editor.nls.commands.it_it={"removeFormat":"Rimuovi formato","copy":"Copia","paste":"Incolla","selectAll":"Seleziona tutto","insertOrderedList":"Elenco numerato","insertTable":"Inserisci/Modifica tabella","print":"Stampa","underline":"Sottolinea","foreColor":"Colore primo piano","htmlToggle":"Origine HTML","formatBlock":"Stile paragrafo","newPage":"Nuova pagina","insertHorizontalRule":"Righello orizzontale","delete":"Elimina","insertUnorderedList":"Elenco puntato","tableProp":"Proprietà tabella","insertImage":"Inserisci immagine","superscript":"Apice","subscript":"Pedice","createLink":"Crea collegamento","undo":"Annulla","fullScreen":"Attiva/Disattiva schermo intero","italic":"Corsivo","fontName":"Nome carattere","justifyLeft":"Allinea a sinistra","unlink":"Rimuovi collegamento","toggleTableBorder":"Attiva/Disattiva bordo tabella","viewSource":"Visualizza origine HTML","fontSize":"Dimensione carattere","systemShortcut":"La azione \"${0}\" è disponibile solo nel browser tramite un tasto di scelta rapida. Utilizzare ${1}.","indent":"Rientro","redo":"Ripristina","strikethrough":"Barrato","justifyFull":"Giustifica","justifyCenter":"Allinea al centro","hiliteColor":"Colore sfondo","deleteTable":"Elimina tabella","outdent":"Annulla rientro","cut":"Taglia","plainFormatBlock":"Stile paragrafo","toggleDir":"Attiva/Disattiva direzione","bold":"Grassetto","tabIndent":"Rientro tabulazione","justifyRight":"Allinea a destra","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it_it");dijit.form.nls.validate.it_it={"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it_it");dijit.form.nls.ComboBox.it_it={"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.it_it");dijit._editor.nls.FontChoice.it_it={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.it_it");dijit._editor.nls.LinkDialog.it_it={"text":"Descrizione:","insertImageTitle":"Proprietà immagine","set":"Imposta","newWindow":"Nuova finestra","topWindow":"Finestra superiore","target":"Destinazione:","createLinkTitle":"Proprietà collegamento","parentWindow":"Finestra padre","currentWindow":"Finestra corrente","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it_it");dojo.cldr.nls.number.it_it={"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"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.it_it");dojo.cldr.nls.currency.it_it={"HKD_displayName":"Dollaro di Hong Kong","CHF_displayName":"Franco Svizzero","CAD_displayName":"Dollaro Canadese","CNY_displayName":"Renmimbi Cinese","AUD_displayName":"Dollaro Australiano","JPY_displayName":"Yen Giapponese","USD_displayName":"Dollaro Statunitense","GBP_displayName":"Sterlina Inglese","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.it_it");dojo.cldr.nls.gregorian.it_it={"months-format-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"field-weekday":"giorno della settimana","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d/M/y","dateFormatItem-MMMEd":"EEE d MMM","eraNarrow":["aC","dC"],"dateFormat-long":"dd MMMM y","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"dayPeriods-format-wide-pm":"p.","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"anno","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q-yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"ora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"oggi","field-day-relative+1":"domani","field-day-relative+2":"dopodomani","field-day-relative+3":"tra tre giorni","months-standAlone-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["aC","dC"],"field-minute":"minuto","field-dayperiod":"periodo del giorno","days-standAlone-abbr":["dom","lun","mar","mer","gio","ven","sab"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ieri","dateFormatItem-h":"hh a","field-day-relative+-2":"l'altro ieri","field-day-relative+-3":"tre giorni fa","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"giorno","days-format-wide":["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],"field-zone":"zona","dateFormatItem-y":"y","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"eraNames":["a.C.","d.C"],"days-format-narrow":["D","L","M","M","G","V","S"],"field-month":"mese","days-standAlone-narrow":["D","L","M","M","G","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"m.","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"dd/MM/yy","field-second":"secondo","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"settimana","dateFormat-medium":"dd/MMM/y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_it.js b/lib/dijit/nls/dijit-all_it.js
deleted file mode 100644 (file)
index a71d9a5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it");dojo.nls.colors.it={"lightsteelblue":"blu acciao chiaro","orangered":"vermiglio","midnightblue":"blu melanzana scuro","cadetblue":"verde acqua","seashell":"sabbia rosa","slategrey":"grigio ardesia","coral":"corallo","darkturquoise":"turchese scuro","antiquewhite":"bianco antico","mediumspringgreen":"verde primavera medio","salmon":"salmone","darkgrey":"grigio scuro","ivory":"avorio","greenyellow":"giallo verde","mistyrose":"rosa pallido","lightsalmon":"salmone chiaro","silver":"grigio 25%","dimgrey":"grigio 80%","orange":"arancione","white":"bianco","navajowhite":"pesca chiaro","royalblue":"blu reale","deeppink":"ciclamino","lime":"verde fluorescente","oldlace":"mandorla","chartreuse":"verde brillante","darkcyan":"ciano scuro","yellow":"giallo","linen":"lino","olive":"verde oliva","gold":"oro","lawngreen":"verde prato","lightyellow":"giallo chiaro","tan":"grigio bruno","darkviolet":"viola scuro","lightslategrey":"grigio ardesia chiaro","grey":"grigio","darkkhaki":"kaki scuro","green":"verde","deepskyblue":"azzurro cielo scuro","aqua":"acqua","sienna":"cuoio","mintcream":"bianco nuvola","rosybrown":"marrone rosato","mediumslateblue":"blu ardesia medio","magenta":"magenta","lightseagreen":"verde mare chiaro","cyan":"ciano","olivedrab":"marrone oliva","darkgoldenrod":"ocra scuro","slateblue":"blu ardesia","mediumaquamarine":"acquamarina medio","lavender":"lavanda","mediumseagreen":"verde mare medio","maroon":"scarlatto","darkslategray":"grigio ardesia scuro","mediumturquoise":"turchese medio","ghostwhite":"bianco gesso","darkblue":"blu scuro","mediumvioletred":"vinaccia","brown":"marrone","lightgray":"grigio chiaro","sandybrown":"marrone sabbia","pink":"rosa","firebrick":"rosso mattone","indigo":"indaco","snow":"neve","darkorchid":"orchidea scuro","turquoise":"turchese","chocolate":"cioccolato","springgreen":"verde primavera","moccasin":"mocassino","navy":"blu notte","lemonchiffon":"caffelatte chiaro","teal":"verde turchese","floralwhite":"bianco giglio","cornflowerblue":"blu fiordaliso","paleturquoise":"turchese pallido","purple":"porpora","gainsboro":"grigio 10%","plum":"prugna","red":"rosso","blue":"blu","forestgreen":"verde foresta","darkgreen":"verde scuro","honeydew":"bianco germoglio","darkseagreen":"verde mare scuro","lightcoral":"rosa corallo","palevioletred":"vinaccia chiaro","mediumpurple":"porpora medio","saddlebrown":"cacao","darkmagenta":"magenta scuro","thistle":"rosa cenere","whitesmoke":"bianco fumo","wheat":"sabbia","violet":"viola","lightskyblue":"azzurro cielo chiaro","goldenrod":"ocra gialla","mediumblue":"blu medio","skyblue":"azzurro cielo","crimson":"cremisi","darksalmon":"salmone scuro","darkred":"rosso scuro","darkslategrey":"grigio ardesia scuro","peru":"marrone terra bruciata","lightgrey":"grigio chiaro","lightgoldenrodyellow":"giallo tenue","blanchedalmond":"mandorla chiaro","aliceblue":"blu alice","bisque":"incarnato","slategray":"grigio ardesia","palegoldenrod":"giallo zolfo chiaro","darkorange":"arancione scuro","aquamarine":"acquamarina","lightgreen":"verde chiaro","burlywood":"tabacco","dodgerblue":"blu d'oriente","darkgray":"grigio scuro","lightcyan":"ciano chiaro","powderblue":"azzurro polvere","blueviolet":"blu violetto","orchid":"orchidea","dimgray":"grigio 80%","beige":"beige","fuchsia":"fucsia","lavenderblush":"bianco rosato","hotpink":"rosa acceso","steelblue":"blu acciao","tomato":"pomodoro","lightpink":"rosa chiaro","limegreen":"verde lime","indianred":"terra indiana","papayawhip":"cipria","lightslategray":"grigio ardesia chiaro","gray":"grigio","mediumorchid":"orchidea medio","cornsilk":"crema","black":"nero","seagreen":"verde mare","darkslateblue":"blu ardesia scuro","khaki":"kaki","lightblue":"azzurro","palegreen":"verde pallido","azure":"azzurro ghiaccio","peachpuff":"pesca","darkolivegreen":"verde oliva scuro","yellowgreen":"giallo verde"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it");dijit.nls.common.it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.it");dijit._editor.nls.commands.it={"removeFormat":"Rimuovi formato","copy":"Copia","paste":"Incolla","selectAll":"Seleziona tutto","insertOrderedList":"Elenco numerato","insertTable":"Inserisci/Modifica tabella","print":"Stampa","underline":"Sottolinea","foreColor":"Colore primo piano","htmlToggle":"Origine HTML","formatBlock":"Stile paragrafo","newPage":"Nuova pagina","insertHorizontalRule":"Righello orizzontale","delete":"Elimina","insertUnorderedList":"Elenco puntato","tableProp":"Proprietà tabella","insertImage":"Inserisci immagine","superscript":"Apice","subscript":"Pedice","createLink":"Crea collegamento","undo":"Annulla","fullScreen":"Attiva/Disattiva schermo intero","italic":"Corsivo","fontName":"Nome carattere","justifyLeft":"Allinea a sinistra","unlink":"Rimuovi collegamento","toggleTableBorder":"Attiva/Disattiva bordo tabella","viewSource":"Visualizza origine HTML","fontSize":"Dimensione carattere","systemShortcut":"La azione \"${0}\" è disponibile solo nel browser tramite un tasto di scelta rapida. Utilizzare ${1}.","indent":"Rientro","redo":"Ripristina","strikethrough":"Barrato","justifyFull":"Giustifica","justifyCenter":"Allinea al centro","hiliteColor":"Colore sfondo","deleteTable":"Elimina tabella","outdent":"Annulla rientro","cut":"Taglia","plainFormatBlock":"Stile paragrafo","toggleDir":"Attiva/Disattiva direzione","bold":"Grassetto","tabIndent":"Rientro tabulazione","justifyRight":"Allinea a destra","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it");dijit.form.nls.validate.it={"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it");dijit.form.nls.ComboBox.it={"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.it");dijit._editor.nls.FontChoice.it={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.it");dijit._editor.nls.LinkDialog.it={"text":"Descrizione:","insertImageTitle":"Proprietà immagine","set":"Imposta","newWindow":"Nuova finestra","topWindow":"Finestra superiore","target":"Destinazione:","createLinkTitle":"Proprietà collegamento","parentWindow":"Finestra padre","currentWindow":"Finestra corrente","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it");dojo.cldr.nls.number.it={"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"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.it");dojo.cldr.nls.currency.it={"HKD_displayName":"Dollaro di Hong Kong","CHF_displayName":"Franco Svizzero","CAD_displayName":"Dollaro Canadese","CNY_displayName":"Renmimbi Cinese","AUD_displayName":"Dollaro Australiano","JPY_displayName":"Yen Giapponese","USD_displayName":"Dollaro Statunitense","GBP_displayName":"Sterlina Inglese","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.it");dojo.cldr.nls.gregorian.it={"months-format-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"field-weekday":"giorno della settimana","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d/M/y","dateFormatItem-MMMEd":"EEE d MMM","eraNarrow":["aC","dC"],"dateFormat-long":"dd MMMM y","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"dayPeriods-format-wide-pm":"p.","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"anno","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q-yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"ora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"oggi","field-day-relative+1":"domani","field-day-relative+2":"dopodomani","field-day-relative+3":"tra tre giorni","months-standAlone-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["aC","dC"],"field-minute":"minuto","field-dayperiod":"periodo del giorno","days-standAlone-abbr":["dom","lun","mar","mer","gio","ven","sab"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ieri","dateFormatItem-h":"hh a","field-day-relative+-2":"l'altro ieri","field-day-relative+-3":"tre giorni fa","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"giorno","days-format-wide":["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],"field-zone":"zona","dateFormatItem-y":"y","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"eraNames":["a.C.","d.C"],"days-format-narrow":["D","L","M","M","G","V","S"],"field-month":"mese","days-standAlone-narrow":["D","L","M","M","G","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"m.","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"dd/MM/yy","field-second":"secondo","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"settimana","dateFormat-medium":"dd/MMM/y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_ja-jp.js b/lib/dijit/nls/dijit-all_ja-jp.js
deleted file mode 100644 (file)
index 067474b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_ja-jp");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja_jp");dojo.nls.colors.ja_jp={"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.ja_jp");dijit.nls.loading.ja_jp={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja_jp");dijit.nls.common.ja_jp={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ja_jp");dijit._editor.nls.commands.ja_jp={"removeFormat":"形式の除去","copy":"コピー","paste":"貼り付け","selectAll":"すべて選択","insertOrderedList":"番号付きリスト","insertTable":"テーブルの挿入/編集","print":"印刷","underline":"下線","foreColor":"前景色","htmlToggle":"HTML ソース","formatBlock":"段落スタイル","newPage":"新しいページ","insertHorizontalRule":"水平罫線","delete":"削除","insertUnorderedList":"黒丸付きリスト","tableProp":"テーブルプロパティ","insertImage":"イメージの挿入","superscript":"上付き文字","subscript":"下付き文字","createLink":"リンクの作成","undo":"元に戻す","fullScreen":"全画面表示に切り替え","italic":"斜体","fontName":"フォント名","justifyLeft":"左揃え","unlink":"リンクの削除","toggleTableBorder":"テーブルボーダーの切り替え","viewSource":"HTML ソースの表示","fontSize":"フォントサイズ","systemShortcut":"\"${0}\" アクションを使用できるのは、ブラウザーでキーボードショートカットを使用する場合のみです。 ${1} を使用してください。","indent":"インデント","redo":"やり直し","strikethrough":"取り消し線","justifyFull":"両端揃え","justifyCenter":"中央揃え","hiliteColor":"背景色","deleteTable":"テーブルの削除","outdent":"アウトデント","cut":"切り取り","plainFormatBlock":"段落スタイル","toggleDir":"方向の切り替え","bold":"太字","tabIndent":"タブインデント","justifyRight":"右揃え","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja_jp");dijit.form.nls.validate.ja_jp={"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja_jp");dijit.form.nls.ComboBox.ja_jp={"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ja_jp");dijit._editor.nls.FontChoice.ja_jp={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ja_jp");dijit._editor.nls.LinkDialog.ja_jp={"text":"説明:","insertImageTitle":"イメージ・プロパティー","set":"設定","newWindow":"新規ウィンドウ","topWindow":"最上位ウィンドウ","target":"ターゲット:","createLinkTitle":"リンク・プロパティー","parentWindow":"親ウィンドウ","currentWindow":"現行ウィンドウ","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja_jp");dojo.cldr.nls.number.ja_jp={"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"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ja_jp");dojo.cldr.nls.currency.ja_jp={"HKD_displayName":"香港ドル","CHF_displayName":"スイス フラン","JPY_symbol":"¥","CAD_displayName":"カナダ ドル","CNY_displayName":"中国人民元","USD_symbol":"$","AUD_displayName":"オーストラリア ドル","JPY_displayName":"日本円","USD_displayName":"米ドル","CNY_symbol":"元","GBP_displayName":"英国ポンド","EUR_displayName":"ユーロ","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ja_jp");dojo.cldr.nls.gregorian.ja_jp={"field-weekday":"曜日","dateFormatItem-yQQQ":"yQQQ","dateFormatItem-yMEd":"y/M/d(EEE)","dateFormatItem-MMMEd":"M月d日(E)","eraNarrow":["BC","AD"],"dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"午後","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M/d","dateFormatItem-yMd":"y/M/d","field-era":"時代","dateFormatItem-yM":"y/M","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"timeFormat-short":"H:mm","quarters-format-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"timeFormat-long":"H:mm:ss z","field-year":"年","dateFormatItem-yMMM":"y年M月","dateFormatItem-yQ":"y/Q","field-hour":"時","dateFormatItem-MMdd":"MM/dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy/Q","timeFormat-full":"H時mm分ss秒 zzzz","field-day-relative+0":"今日","field-day-relative+1":"明日","field-day-relative+2":"明後日","dateFormatItem-H":"H時","field-day-relative+3":"3日後","months-standAlone-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"dateFormatItem-M":"L","days-standAlone-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"dateFormatItem-yyMMM":"y年M月","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","eraAbbr":["BC","AD"],"field-minute":"分","field-dayperiod":"午前/午後","days-standAlone-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨日","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"一昨日","field-day-relative+-3":"3日前","dateFormatItem-MMMd":"M月d日","dateFormatItem-MEd":"M/d(E)","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"field-zone":"タイムゾーン","dateFormatItem-yyyyMM":"yyyy/MM","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"ah:mm","dateFormatItem-GGGGyMd":"GGGGy年M月d日","days-format-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-yMMMd":"y年M月d日","eraNames":["紀元前","西暦"],"days-format-narrow":["日","月","火","水","木","金","土"],"field-month":"月","days-standAlone-narrow":["日","月","火","水","木","金","土"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"午前","dateFormat-short":"yy/MM/dd","field-second":"秒","dateFormatItem-yMMMEd":"y年M月d日(EEE)","dateFormatItem-Ed":"d日(EEE)","field-week":"週","dateFormat-medium":"yyyy/MM/dd","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","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"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
diff --git a/lib/dijit/nls/dijit-all_ja.js b/lib/dijit/nls/dijit-all_ja.js
deleted file mode 100644 (file)
index af7cb82..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_ja");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja");dojo.nls.colors.ja={"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.ja");dijit.nls.loading.ja={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja");dijit.nls.common.ja={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ja");dijit._editor.nls.commands.ja={"removeFormat":"形式の除去","copy":"コピー","paste":"貼り付け","selectAll":"すべて選択","insertOrderedList":"番号付きリスト","insertTable":"テーブルの挿入/編集","print":"印刷","underline":"下線","foreColor":"前景色","htmlToggle":"HTML ソース","formatBlock":"段落スタイル","newPage":"新しいページ","insertHorizontalRule":"水平罫線","delete":"削除","insertUnorderedList":"黒丸付きリスト","tableProp":"テーブルプロパティ","insertImage":"イメージの挿入","superscript":"上付き文字","subscript":"下付き文字","createLink":"リンクの作成","undo":"元に戻す","fullScreen":"全画面表示に切り替え","italic":"斜体","fontName":"フォント名","justifyLeft":"左揃え","unlink":"リンクの削除","toggleTableBorder":"テーブルボーダーの切り替え","viewSource":"HTML ソースの表示","fontSize":"フォントサイズ","systemShortcut":"\"${0}\" アクションを使用できるのは、ブラウザーでキーボードショートカットを使用する場合のみです。 ${1} を使用してください。","indent":"インデント","redo":"やり直し","strikethrough":"取り消し線","justifyFull":"両端揃え","justifyCenter":"中央揃え","hiliteColor":"背景色","deleteTable":"テーブルの削除","outdent":"アウトデント","cut":"切り取り","plainFormatBlock":"段落スタイル","toggleDir":"方向の切り替え","bold":"太字","tabIndent":"タブインデント","justifyRight":"右揃え","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja");dijit.form.nls.validate.ja={"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja");dijit.form.nls.ComboBox.ja={"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ja");dijit._editor.nls.FontChoice.ja={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ja");dijit._editor.nls.LinkDialog.ja={"text":"説明:","insertImageTitle":"イメージ・プロパティー","set":"設定","newWindow":"新規ウィンドウ","topWindow":"最上位ウィンドウ","target":"ターゲット:","createLinkTitle":"リンク・プロパティー","parentWindow":"親ウィンドウ","currentWindow":"現行ウィンドウ","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja");dojo.cldr.nls.number.ja={"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"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ja");dojo.cldr.nls.currency.ja={"HKD_displayName":"香港ドル","CHF_displayName":"スイス フラン","JPY_symbol":"¥","CAD_displayName":"カナダ ドル","CNY_displayName":"中国人民元","USD_symbol":"$","AUD_displayName":"オーストラリア ドル","JPY_displayName":"日本円","USD_displayName":"米ドル","CNY_symbol":"元","GBP_displayName":"英国ポンド","EUR_displayName":"ユーロ","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ja");dojo.cldr.nls.gregorian.ja={"field-weekday":"曜日","dateFormatItem-yQQQ":"yQQQ","dateFormatItem-yMEd":"y/M/d(EEE)","dateFormatItem-MMMEd":"M月d日(E)","eraNarrow":["BC","AD"],"dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"午後","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M/d","dateFormatItem-yMd":"y/M/d","field-era":"時代","dateFormatItem-yM":"y/M","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"timeFormat-short":"H:mm","quarters-format-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"timeFormat-long":"H:mm:ss z","field-year":"年","dateFormatItem-yMMM":"y年M月","dateFormatItem-yQ":"y/Q","field-hour":"時","dateFormatItem-MMdd":"MM/dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy/Q","timeFormat-full":"H時mm分ss秒 zzzz","field-day-relative+0":"今日","field-day-relative+1":"明日","field-day-relative+2":"明後日","dateFormatItem-H":"H時","field-day-relative+3":"3日後","months-standAlone-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"dateFormatItem-M":"L","days-standAlone-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"dateFormatItem-yyMMM":"y年M月","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","eraAbbr":["BC","AD"],"field-minute":"分","field-dayperiod":"午前/午後","days-standAlone-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨日","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"一昨日","field-day-relative+-3":"3日前","dateFormatItem-MMMd":"M月d日","dateFormatItem-MEd":"M/d(E)","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"field-zone":"タイムゾーン","dateFormatItem-yyyyMM":"yyyy/MM","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"ah:mm","dateFormatItem-GGGGyMd":"GGGGy年M月d日","days-format-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-yMMMd":"y年M月d日","eraNames":["紀元前","西暦"],"days-format-narrow":["日","月","火","水","木","金","土"],"field-month":"月","days-standAlone-narrow":["日","月","火","水","木","金","土"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"午前","dateFormat-short":"yy/MM/dd","field-second":"秒","dateFormatItem-yMMMEd":"y年M月d日(EEE)","dateFormatItem-Ed":"d日(EEE)","field-week":"週","dateFormat-medium":"yyyy/MM/dd","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","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"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
diff --git a/lib/dijit/nls/dijit-all_ko-kr.js b/lib/dijit/nls/dijit-all_ko-kr.js
deleted file mode 100644 (file)
index f94d4bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_ko-kr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko_kr");dojo.nls.colors.ko_kr={"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.ko_kr");dijit.nls.loading.ko_kr={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko_kr");dijit.nls.common.ko_kr={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ko_kr");dijit._editor.nls.commands.ko_kr={"removeFormat":"형식 제거","copy":"복사","paste":"붙여넣기","selectAll":"모두 선택","insertOrderedList":"번호 목록","insertTable":"테이블 삽입/편집","print":"인쇄","underline":"밑줄","foreColor":"전경색","htmlToggle":"HTML 소스","formatBlock":"단락 스타일","newPage":"새 페이지","insertHorizontalRule":"수평 자","delete":"삭제","insertUnorderedList":"글머리표 목록","tableProp":"테이블 특성","insertImage":"이미지 삽입","superscript":"위첨자","subscript":"아래첨자","createLink":"링크 작성","undo":"실행 취소","fullScreen":"토글 전체 화면","italic":"기울임체","fontName":"글꼴 이름","justifyLeft":"왼쪽 맞춤","unlink":"링크 제거","toggleTableBorder":"토글 테이블 테두리","viewSource":"HTML 소스 보기","fontSize":"글꼴 크기","systemShortcut":"\"${0}\" 조치는 브라우저에서 키보드 단축키를 이용해서만 사용할 수 있습니다. ${1}을(를) 사용하십시오.","indent":"들여쓰기","redo":"다시 실행","strikethrough":"취소선","justifyFull":"양쪽 맞춤","justifyCenter":"가운데 맞춤","hiliteColor":"배경색","deleteTable":"테이블 삭제","outdent":"내어쓰기","cut":"잘라내기","plainFormatBlock":"단락 스타일","toggleDir":"토글 방향","bold":"굵은체","tabIndent":"탭 들여쓰기","justifyRight":"오른쪽 맞춤","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko_kr");dijit.form.nls.validate.ko_kr={"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko_kr");dijit.form.nls.ComboBox.ko_kr={"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ko_kr");dijit._editor.nls.FontChoice.ko_kr={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ko_kr");dijit._editor.nls.LinkDialog.ko_kr={"text":"설명:","insertImageTitle":"이미지 특성","set":"설정","newWindow":"새 창","topWindow":"최상위 창","target":"대상:","createLinkTitle":"링크 특성","parentWindow":"상위 창","currentWindow":"현재 창","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko_kr");dojo.cldr.nls.number.ko_kr={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ko_kr");dojo.cldr.nls.currency.ko_kr={"HKD_displayName":"홍콩 달러","CHF_displayName":"스위스 프랑","CAD_displayName":"캐나다 달러","CNY_displayName":"중국 위안 인민폐","AUD_displayName":"호주 달러","JPY_displayName":"일본 엔화","USD_displayName":"미국 달러","GBP_displayName":"영국령 파운드 스털링","EUR_displayName":"유로화","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ko_kr");dojo.cldr.nls.gregorian.ko_kr={"months-format-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"field-weekday":"요일","dateFormatItem-yQQQ":"y년 QQQ","dateFormatItem-yMEd":"yyyy. M. d. EEE","dateFormatItem-MMMEd":"MMM d일 (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}","dateFormatItem-EEEd":"d일 EEE","dayPeriods-format-wide-pm":"오후","dateFormat-full":"y년 M월 d일 EEEE","dateFormatItem-Md":"M. d.","field-era":"연호","dateFormatItem-yM":"yyyy. M.","months-standAlone-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"timeFormat-short":"a h:mm","quarters-format-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"timeFormat-long":"a h시 m분 s초 z","field-year":"년","dateFormatItem-yMMM":"y년 MMM","dateFormatItem-yQ":"y년 Q분기","field-hour":"시","dateFormatItem-MMdd":"MM. dd","months-format-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyQ":"yy년 Q분기","timeFormat-full":"a h시 m분 s초 zzzz","field-day-relative+0":"오늘","field-day-relative+1":"내일","field-day-relative+2":"모레","field-day-relative+3":"3일후","months-standAlone-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"quarters-format-abbr":["1분기","2분기","3분기","4분기"],"quarters-standAlone-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"dateFormatItem-yyMMM":"yy년 MMM","timeFormat-medium":"a h:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1분기","2분기","3분기","4분기"],"eraAbbr":["기원전","서기"],"field-minute":"분","field-dayperiod":"오전/오후","days-standAlone-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"어제","dateFormatItem-h":"a h","dateTimeFormat-long":"{1} {0}","field-day-relative+-2":"그저께","field-day-relative+-3":"그끄제","dateFormatItem-MMMd":"MMM d일","dateFormatItem-MEd":"M. d. (E)","dateTimeFormat-full":"{1} {0}","field-day":"일","days-format-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"field-zone":"시간대","dateFormatItem-yyyyMM":"yyyy. MM","dateFormatItem-y":"y","months-standAlone-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyMM":"YY. M.","dateFormatItem-hm":"a h:mm","days-format-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-yMMMd":"y년 MMM d일","eraNames":["서력기원전","서력기원"],"days-format-narrow":["일","월","화","수","목","금","토"],"field-month":"월","days-standAlone-narrow":["일","월","화","수","목","금","토"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"오전","dateFormat-short":"yy. M. d.","field-second":"초","dateFormatItem-yMMMEd":"y년 MMM d일 EEE","dateFormatItem-Ed":"d일 (E)","field-week":"주","dateFormat-medium":"yyyy. M. d.","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H시 m분 s초","dateFormatItem-hms":"a h:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
diff --git a/lib/dijit/nls/dijit-all_ko.js b/lib/dijit/nls/dijit-all_ko.js
deleted file mode 100644 (file)
index b25c076..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_ko");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko");dojo.nls.colors.ko={"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.ko");dijit.nls.loading.ko={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko");dijit.nls.common.ko={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ko");dijit._editor.nls.commands.ko={"removeFormat":"형식 제거","copy":"복사","paste":"붙여넣기","selectAll":"모두 선택","insertOrderedList":"번호 목록","insertTable":"테이블 삽입/편집","print":"인쇄","underline":"밑줄","foreColor":"전경색","htmlToggle":"HTML 소스","formatBlock":"단락 스타일","newPage":"새 페이지","insertHorizontalRule":"수평 자","delete":"삭제","insertUnorderedList":"글머리표 목록","tableProp":"테이블 특성","insertImage":"이미지 삽입","superscript":"위첨자","subscript":"아래첨자","createLink":"링크 작성","undo":"실행 취소","fullScreen":"토글 전체 화면","italic":"기울임체","fontName":"글꼴 이름","justifyLeft":"왼쪽 맞춤","unlink":"링크 제거","toggleTableBorder":"토글 테이블 테두리","viewSource":"HTML 소스 보기","fontSize":"글꼴 크기","systemShortcut":"\"${0}\" 조치는 브라우저에서 키보드 단축키를 이용해서만 사용할 수 있습니다. ${1}을(를) 사용하십시오.","indent":"들여쓰기","redo":"다시 실행","strikethrough":"취소선","justifyFull":"양쪽 맞춤","justifyCenter":"가운데 맞춤","hiliteColor":"배경색","deleteTable":"테이블 삭제","outdent":"내어쓰기","cut":"잘라내기","plainFormatBlock":"단락 스타일","toggleDir":"토글 방향","bold":"굵은체","tabIndent":"탭 들여쓰기","justifyRight":"오른쪽 맞춤","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko");dijit.form.nls.validate.ko={"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko");dijit.form.nls.ComboBox.ko={"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ko");dijit._editor.nls.FontChoice.ko={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ko");dijit._editor.nls.LinkDialog.ko={"text":"설명:","insertImageTitle":"이미지 특성","set":"설정","newWindow":"새 창","topWindow":"최상위 창","target":"대상:","createLinkTitle":"링크 특성","parentWindow":"상위 창","currentWindow":"현재 창","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko");dojo.cldr.nls.number.ko={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ko");dojo.cldr.nls.currency.ko={"HKD_displayName":"홍콩 달러","CHF_displayName":"스위스 프랑","CAD_displayName":"캐나다 달러","CNY_displayName":"중국 위안 인민폐","AUD_displayName":"호주 달러","JPY_displayName":"일본 엔화","USD_displayName":"미국 달러","GBP_displayName":"영국령 파운드 스털링","EUR_displayName":"유로화","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ko");dojo.cldr.nls.gregorian.ko={"months-format-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"field-weekday":"요일","dateFormatItem-yQQQ":"y년 QQQ","dateFormatItem-yMEd":"yyyy. M. d. EEE","dateFormatItem-MMMEd":"MMM d일 (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}","dateFormatItem-EEEd":"d일 EEE","dayPeriods-format-wide-pm":"오후","dateFormat-full":"y년 M월 d일 EEEE","dateFormatItem-Md":"M. d.","field-era":"연호","dateFormatItem-yM":"yyyy. M.","months-standAlone-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"timeFormat-short":"a h:mm","quarters-format-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"timeFormat-long":"a h시 m분 s초 z","field-year":"년","dateFormatItem-yMMM":"y년 MMM","dateFormatItem-yQ":"y년 Q분기","field-hour":"시","dateFormatItem-MMdd":"MM. dd","months-format-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyQ":"yy년 Q분기","timeFormat-full":"a h시 m분 s초 zzzz","field-day-relative+0":"오늘","field-day-relative+1":"내일","field-day-relative+2":"모레","field-day-relative+3":"3일후","months-standAlone-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"quarters-format-abbr":["1분기","2분기","3분기","4분기"],"quarters-standAlone-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"dateFormatItem-yyMMM":"yy년 MMM","timeFormat-medium":"a h:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1분기","2분기","3분기","4분기"],"eraAbbr":["기원전","서기"],"field-minute":"분","field-dayperiod":"오전/오후","days-standAlone-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"어제","dateFormatItem-h":"a h","dateTimeFormat-long":"{1} {0}","field-day-relative+-2":"그저께","field-day-relative+-3":"그끄제","dateFormatItem-MMMd":"MMM d일","dateFormatItem-MEd":"M. d. (E)","dateTimeFormat-full":"{1} {0}","field-day":"일","days-format-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"field-zone":"시간대","dateFormatItem-yyyyMM":"yyyy. MM","dateFormatItem-y":"y","months-standAlone-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyMM":"YY. M.","dateFormatItem-hm":"a h:mm","days-format-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-yMMMd":"y년 MMM d일","eraNames":["서력기원전","서력기원"],"days-format-narrow":["일","월","화","수","목","금","토"],"field-month":"월","days-standAlone-narrow":["일","월","화","수","목","금","토"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"오전","dateFormat-short":"yy. M. d.","field-second":"초","dateFormatItem-yMMMEd":"y년 MMM d일 EEE","dateFormatItem-Ed":"d일 (E)","field-week":"주","dateFormat-medium":"yyyy. M. d.","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H시 m분 s초","dateFormatItem-hms":"a h:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
diff --git a/lib/dijit/nls/dijit-all_nb.js b/lib/dijit/nls/dijit-all_nb.js
deleted file mode 100644 (file)
index 7352edc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Skriv ut","underline":"Understreking","foreColor":"Forgrunnsfarge","htmlToggle":"HTML-kilde","formatBlock":"Avsnittsstil","newPage":"Ny side","insertHorizontalRule":"Vannrett strek","delete":"Slett","insertUnorderedList":"Punktliste","tableProp":"Tabellegenskap","insertImage":"Sett inn bilde","superscript":"Hevet skrift","subscript":"Senket skrift","createLink":"Opprett kobling","undo":"Angre","fullScreen":"Slå på/av full skjerm","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejuster","unlink":"Fjern kobling","toggleTableBorder":"Bytt tabellkant","viewSource":"Vis HTML-kilde","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.nb");dijit._editor.nls.FontChoice.nb={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.nb");dijit._editor.nls.LinkDialog.nb={"text":"Beskrivelse:","insertImageTitle":"Bildeegenskaper","set":"Definer","newWindow":"Nytt vindu","topWindow":"Øverste vindu","target":"Mål:","createLinkTitle":"Koblingsegenskaper","parentWindow":"Overordnet vindu","currentWindow":"Gjeldende vindu","url":"URL:"};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("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={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"ukedag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d. MMMM y","months-format-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","field-era":"tidsalder","dateFormatItem-yM":"M y","months-standAlone-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"timeFormat-long":"HH:mm:ss z","field-year":"år","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"time","dateFormatItem-MMdd":"dd.MM","months-format-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"'kl'. HH:mm:ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgen","field-day-relative+2":"i overmorgen","field-day-relative+3":"i overovermorgen","months-standAlone-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-M":"L","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minutt","field-dayperiod":"AM/PM","days-standAlone-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"dateFormatItem-d":"d.","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"i går","field-day-relative+-2":"i forgårs","field-day-relative+-3":"i forforgårs","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M","field-day":"dag","days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"field-zone":"sone","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM.yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"eraNames":["f.Kr.","e.Kr."],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"måned","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd.MM.yy","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"uke","dateFormat-medium":"d. MMM y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_nl-nl.js b/lib/dijit/nls/dijit-all_nl-nl.js
deleted file mode 100644 (file)
index 13107dc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Afdrukken","underline":"Onderstrepen","foreColor":"Voorgrondkleur","htmlToggle":"HTML-bron","formatBlock":"Alineastijl","newPage":"Nieuwe pagina","insertHorizontalRule":"Horizontale liniaal","delete":"Wissen","insertUnorderedList":"Lijst met opsommingstekens","tableProp":"Tabeleigenschap","insertImage":"Afbeelding invoegen","superscript":"Superscript","subscript":"Subscript","createLink":"Link maken","undo":"Ongedaan maken","fullScreen":"Volledig scherm in-/uitschakelen","italic":"Cursief","fontName":"Lettertype","justifyLeft":"Links uitlijnen","unlink":"Link verwijderen","toggleTableBorder":"Tabelkader wijzigen","viewSource":"HTML-bron bekijken","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.nl_nl");dijit._editor.nls.FontChoice.nl_nl={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.nl_nl");dijit._editor.nls.LinkDialog.nl_nl={"text":"Beschrijving:","insertImageTitle":"Afbeeldingseigenschappen","set":"Instellen","newWindow":"Nieuw venster","topWindow":"Bovenste venster","target":"Doel:","createLinkTitle":"Linkeigenschappen","parentWindow":"Hoofdvenster","currentWindow":"Huidig venster","url":"URL:"};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("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","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};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-y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"PM","field-minute":"Minuut","eraNames":["Voor Christus","na Christus"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"gisteren","field-weekday":"Dag van de week","dateFormatItem-yQQQ":"QQQ y","field-day-relative+-2":"eergisteren","dateFormatItem-MMdd":"dd-MM","field-day-relative+-3":"eereergisteren","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","dayPeriods-format-wide-am":"AM","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","field-day-relative+0":"vandaag","field-day-relative+1":"morgen","days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"eraAbbr":["v. Chr.","n. Chr."],"field-day-relative+2":"overmorgen","field-day-relative+3":"overovermorgen","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","dateFormat-medium":"d MMM y","dateFormatItem-yyMM":"MM-yy","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"dateFormatItem-ms":"mm:ss","field-year":"Jaar","field-week":"Week","months-standAlone-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"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"],"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"],"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-y","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."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_nl.js b/lib/dijit/nls/dijit-all_nl.js
deleted file mode 100644 (file)
index 9f7820b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Afdrukken","underline":"Onderstrepen","foreColor":"Voorgrondkleur","htmlToggle":"HTML-bron","formatBlock":"Alineastijl","newPage":"Nieuwe pagina","insertHorizontalRule":"Horizontale liniaal","delete":"Wissen","insertUnorderedList":"Lijst met opsommingstekens","tableProp":"Tabeleigenschap","insertImage":"Afbeelding invoegen","superscript":"Superscript","subscript":"Subscript","createLink":"Link maken","undo":"Ongedaan maken","fullScreen":"Volledig scherm in-/uitschakelen","italic":"Cursief","fontName":"Lettertype","justifyLeft":"Links uitlijnen","unlink":"Link verwijderen","toggleTableBorder":"Tabelkader wijzigen","viewSource":"HTML-bron bekijken","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.nl");dijit._editor.nls.FontChoice.nl={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.nl");dijit._editor.nls.LinkDialog.nl={"text":"Beschrijving:","insertImageTitle":"Afbeeldingseigenschappen","set":"Instellen","newWindow":"Nieuw venster","topWindow":"Bovenste venster","target":"Doel:","createLinkTitle":"Linkeigenschappen","parentWindow":"Hoofdvenster","currentWindow":"Huidig venster","url":"URL:"};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("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","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};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-y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"PM","field-minute":"Minuut","eraNames":["Voor Christus","na Christus"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"gisteren","field-weekday":"Dag van de week","dateFormatItem-yQQQ":"QQQ y","field-day-relative+-2":"eergisteren","dateFormatItem-MMdd":"dd-MM","field-day-relative+-3":"eereergisteren","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","dayPeriods-format-wide-am":"AM","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","field-day-relative+0":"vandaag","field-day-relative+1":"morgen","days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"eraAbbr":["v. Chr.","n. Chr."],"field-day-relative+2":"overmorgen","field-day-relative+3":"overovermorgen","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","dateFormat-medium":"d MMM y","dateFormatItem-yyMM":"MM-yy","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"dateFormatItem-ms":"mm:ss","field-year":"Jaar","field-week":"Week","months-standAlone-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"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"],"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"],"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-y","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."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_pl.js b/lib/dijit/nls/dijit-all_pl.js
deleted file mode 100644 (file)
index db6e375..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_pl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pl");dojo.nls.colors.pl={"lightsteelblue":"jasny stalowoniebieski","orangered":"pomarańczowoczerwony","midnightblue":"ciemnogranatowy","cadetblue":"niebieskoszary","seashell":"muszla","slategrey":"łupkowy szary","coral":"koralowy","darkturquoise":"ciemnoturkusowy","antiquewhite":"biel antyczna","mediumspringgreen":"średnia wiosenna zieleń","salmon":"łososiowy","darkgrey":"ciemnoszary","ivory":"kość słoniowa","greenyellow":"zielonożółty","mistyrose":"bladoróżany","lightsalmon":"jasnołososiowy","silver":"srebrny","dimgrey":"przytłumiony szary","orange":"pomarańczowy","white":"biały","navajowhite":"piaskowy","royalblue":"błękit królewski","deeppink":"głęboki różowy","lime":"limetkowy","oldlace":"bladopomarańczowy","chartreuse":"jaskrawozielony","darkcyan":"ciemny cyjan","yellow":"żółty","linen":"lniany","olive":"oliwkowy","gold":"złoty","lawngreen":"trawiasty","lightyellow":"jasnożółty","tan":"kawowy","darkviolet":"ciemnofioletowy","lightslategrey":"jasny łupkowy szary","grey":"szary","darkkhaki":"ciemny khaki","green":"zielony","deepskyblue":"intensywny błękit nieba","aqua":"wodny","sienna":"siena","mintcream":"jasnomiętowy","rosybrown":"różowobrązowy","mediumslateblue":"średni łupkowy niebieski","magenta":"magenta","lightseagreen":"jasna morska zieleń","cyan":"cyjan","olivedrab":"oliwkowa zieleń","darkgoldenrod":"ciemnogliniany","slateblue":"łupkowy niebieski","mediumaquamarine":"średnia akwamaryna","lavender":"lawendowy","mediumseagreen":"średnia morska zieleń","maroon":"bordowy","darkslategray":"ciemny łupkowy szary","mediumturquoise":"średni turkusowy","ghostwhite":"bladobiały","darkblue":"ciemnoniebieski","mediumvioletred":"średni fioletowoczerwony","brown":"brązowy","lightgray":"jasnoszary","sandybrown":"piaskowy brąz","pink":"różowy","firebrick":"ceglasty","indigo":"indygo","snow":"śnieżny","darkorchid":"ciemna orchidea","turquoise":"turkusowy","chocolate":"czekoladowy","springgreen":"wiosenna zieleń","moccasin":"mokasynowy","navy":"granatowy","lemonchiffon":"cytrynowy","teal":"cyrankowy","floralwhite":"kwiatowa biel","cornflowerblue":"chabrowy","paleturquoise":"bladoturkusowy","purple":"purpurowy","gainsboro":"bladoszary","plum":"śliwkowy","red":"czerwony","blue":"niebieski","forestgreen":"leśna zieleń","darkgreen":"ciemnozielony","honeydew":"melon","darkseagreen":"ciemna morska zieleń","lightcoral":"jasnokoralowy","palevioletred":"blady fioletowoczerwony","mediumpurple":"średnia purpura","saddlebrown":"skórzany brązowy","darkmagenta":"ciemna magenta","thistle":"bladofioletowy","whitesmoke":"przydymiony biały","wheat":"pszeniczny","violet":"fioletowy","lightskyblue":"jasny błękit nieba","goldenrod":"gliniany","mediumblue":"średni niebieski","skyblue":"błękit nieba","crimson":"karmazynowy","darksalmon":"ciemnołososiowy","darkred":"ciemnoczerwony","darkslategrey":"ciemny łupkowy szary","peru":"jasnobrązowy","lightgrey":"jasnoszary","lightgoldenrodyellow":"jasnogliniana żółć","blanchedalmond":"migdałowy","aliceblue":"bladoniebieski","bisque":"biszkoptowy","slategray":"łupkowy szary","palegoldenrod":"bladogliniany","darkorange":"ciemnopomarańczowy","aquamarine":"akwamaryna","lightgreen":"jasnozielony","burlywood":"kolor drewna","dodgerblue":"błękit Dodgers","darkgray":"ciemnoszary","lightcyan":"jasny cyjan","powderblue":"pudrowy niebieski","blueviolet":"niebieskofioletowy","orchid":"orchidea","dimgray":"przytłumiony szary","beige":"beżowy","fuchsia":"fuksja","lavenderblush":"lawendoworóżowy","hotpink":"intensywny różowy","steelblue":"stalowy niebieski","tomato":"pomidorowy","lightpink":"jasnoróżowy","limegreen":"limetkowozielony","indianred":"kasztanowy","papayawhip":"papaja","lightslategray":"jasny łupkowy szary","gray":"szary","mediumorchid":"średnia orchidea","cornsilk":"kukurydziany","black":"czarny","seagreen":"morska zieleń","darkslateblue":"ciemny łupkowy niebieski","khaki":"khaki","lightblue":"jasnoniebieski","palegreen":"bladozielony","azure":"lazur","peachpuff":"brzoskwiniowy","darkolivegreen":"ciemnooliwkowy","yellowgreen":"żółtozielony"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pl");dijit.nls.common.pl={"buttonOk":"OK","buttonCancel":"Anuluj","buttonSave":"Zapisz","itemClose":"Zamknij"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pl");dijit._editor.nls.commands.pl={"removeFormat":"Usuń formatowanie","copy":"Kopiuj","paste":"Wklej","selectAll":"Wybierz wszystko","insertOrderedList":"Lista numerowana","insertTable":"Wstaw/edytuj tabelę","print":"Drukuj","underline":"Podkreślenie","foreColor":"Kolor pierwszego planu","htmlToggle":"Źródło HTML","formatBlock":"Styl akapitu","newPage":"Nowa strona","insertHorizontalRule":"Linia pozioma","delete":"Usuń","insertUnorderedList":"Lista wypunktowana","tableProp":"Właściwość tabeli","insertImage":"Wstaw obraz","superscript":"Indeks górny","subscript":"Indeks dolny","createLink":"Utwórz odsyłacz","undo":"Cofnij","fullScreen":"Przełącz pełny ekran","italic":"Kursywa","fontName":"Nazwa czcionki","justifyLeft":"Wyrównaj do lewej","unlink":"Usuń odsyłacz","toggleTableBorder":"Przełącz ramkę tabeli","viewSource":"Wyświetl kod źródłowy HTML","ctrlKey":"Ctrl+${0}","fontSize":"Wielkość czcionki","systemShortcut":"Działanie ${0} jest dostępne w tej przeglądarce wyłącznie przy użyciu skrótu klawiaturowego. Należy użyć klawiszy ${1}.","indent":"Wcięcie","redo":"Ponów","strikethrough":"Przekreślenie","justifyFull":"Wyrównaj do lewej i prawej","justifyCenter":"Wyrównaj do środka","hiliteColor":"Kolor tła","deleteTable":"Usuń tabelę","outdent":"Usuń wcięcie","cut":"Wytnij","plainFormatBlock":"Styl akapitu","toggleDir":"Przełącz kierunek","bold":"Pogrubienie","tabIndent":"Wcięcie o tabulator","justifyRight":"Wyrównaj do prawej","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pl");dijit.form.nls.validate.pl={"rangeMessage":"Ta wartość jest spoza zakresu.","invalidMessage":"Wprowadzona wartość jest niepoprawna.","missingMessage":"Ta wartość jest wymagana."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pl");dijit.form.nls.ComboBox.pl={"previousMessage":"Poprzednie wybory","nextMessage":"Więcej wyborów"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.pl");dijit._editor.nls.FontChoice.pl={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.pl");dijit._editor.nls.LinkDialog.pl={"text":"Opis:","insertImageTitle":"Właściwości obrazu","set":"Ustaw","newWindow":"Nowe okno","topWindow":"Okno najwyższego poziomu","target":"Cel:","createLinkTitle":"Właściwości odsyłacza","parentWindow":"Okno macierzyste","currentWindow":"Bieżące okno","url":"Adres URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pl");dojo.cldr.nls.number.pl={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pl");dojo.cldr.nls.currency.pl={"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","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pl");dojo.cldr.nls.gregorian.pl={"months-format-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"field-weekday":"Dzień tygodnia","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d-M-y","dateFormatItem-MMMEd":"d MMM E","eraNarrow":["p.n.e.","n.e."],"dayPeriods-format-wide-earlyMorning":"nad ranem","dayPeriods-format-wide-morning":"rano","dateFormat-long":"d MMMM y","months-format-wide":["stycznia","lutego","marca","kwietnia","maja","czerwca","lipca","sierpnia","września","października","listopada","grudnia"],"dayPeriods-format-wide-evening":"wieczorem","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, d MMMM y","dateFormatItem-Md":"d-M","dayPeriods-format-wide-noon":"w południe","field-era":"Era","dateFormatItem-yM":"M-y","months-standAlone-wide":["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],"timeFormat-short":"HH:mm","quarters-format-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"timeFormat-long":"HH:mm:ss z","field-year":"Rok","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"Godzina","dateFormatItem-MMdd":"dd-MM","months-format-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"Dzisiaj","field-day-relative+1":"Jutro","field-day-relative+2":"Pojutrze","field-day-relative+3":"Za trzy dni","months-standAlone-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"dateFormatItem-M":"L","days-standAlone-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1 kw.","2 kw.","3 kw.","4 kw."],"eraAbbr":["p.n.e.","n.e."],"field-minute":"Minuta","field-dayperiod":"Dayperiod","days-standAlone-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"dayPeriods-format-wide-night":"w nocy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Wczoraj","dateFormatItem-h":"hh a","field-day-relative+-2":"Przedwczoraj","field-day-relative+-3":"Trzy dni temu","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d-M","dayPeriods-format-wide-lateMorning":"przed południem","dateFormatItem-yMMMM":"LLLL y","field-day":"Dzień","days-format-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"field-zone":"Strefa","dateFormatItem-yyyyMM":"yyyy-MM","dateFormatItem-y":"y","months-standAlone-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"eraNames":["p.n.e.","n.e."],"days-format-narrow":["N","P","W","Ś","C","P","S"],"field-month":"Miesiąc","days-standAlone-narrow":["N","P","W","Ś","C","P","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd-MM-yyyy","dayPeriods-format-wide-afternoon":"po południu","field-second":"Sekunda","dateFormatItem-yMMMEd":"EEE, d MMM y","field-week":"Tydzień","dateFormat-medium":"dd-MM-yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yMMM":"y MMM","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_pt-br.js b/lib/dijit/nls/dijit-all_pt-br.js
deleted file mode 100644 (file)
index 384e56d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_pt-br");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt_br");dojo.nls.colors.pt_br={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_br");dijit.nls.common.pt_br={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pt_br");dijit._editor.nls.commands.pt_br={"removeFormat":"Remover Formato","copy":"Copiar","paste":"Colar","selectAll":"Selecionar Todos","insertOrderedList":"Lista Numerada","insertTable":"Inserir/Editar Tabela","print":"Impressão","underline":"Sublinhado","foreColor":"Cor do Primeiro Plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de Parágrafo","newPage":"Nova Página","insertHorizontalRule":"Régua Horizontal","delete":"Excluir","insertUnorderedList":"Lista com Marcadores","tableProp":"Propriedade da Tabela","insertImage":"Inserir Imagem","superscript":"Sobrescrito","subscript":"Subscrito","createLink":"Criar Link","undo":"Desfazer","fullScreen":"Comutar Tela Cheia","italic":"Itálico","fontName":"Nome da Fonte","justifyLeft":"Alinhar pela Esquerda","unlink":"Remover Link","toggleTableBorder":"Alternar Moldura da Tabela","viewSource":"Visualizar Origem HTML","fontSize":"Tamanho da Fonte","systemShortcut":"A ação \"${0}\" está disponível em seu navegador apenas usando um atalho do teclado. Use ${1}.","indent":"Recuar","redo":"Refazer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinhar pelo Centro","hiliteColor":"Cor de segundo plano","deleteTable":"Excluir Tabela","outdent":"Não-chanfrado","cut":"Recortar","plainFormatBlock":"Estilo de Parágrafo","toggleDir":"Comutar Direção","bold":"Negrito","tabIndent":"Recuo de Guia","justifyRight":"Alinhar pela Direita","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt_br");dijit.form.nls.validate.pt_br={"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt_br");dijit.form.nls.ComboBox.pt_br={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.pt_br");dijit._editor.nls.FontChoice.pt_br={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.pt_br");dijit._editor.nls.LinkDialog.pt_br={"text":"Descrição:","insertImageTitle":"Propriedades de Imagem","set":"Definir","newWindow":"Nova Janela","topWindow":"Primeira Janela","target":"Destino:","createLinkTitle":"Propriedades de Link","parentWindow":"Janela Pai","currentWindow":"Janela Atual","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_br");dojo.cldr.nls.number.pt_br={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pt_br");dojo.cldr.nls.currency.pt_br={"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","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pt_br");dojo.cldr.nls.gregorian.pt_br={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dia da semana","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dayPeriods-format-wide-morning":"manhã","dateFormat-long":"d 'de' MMMM 'de' y","months-format-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"meio-dia","field-era":"Era","dateFormatItem-yM":"MM/yyyy","months-standAlone-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"timeFormat-short":"HH:mm","quarters-format-wide":["1º trimestre","2º trimestre","3º trimestre","4º trimestre"],"timeFormat-long":"HH'h'mm'min'ss's' z","field-year":"Ano","dateFormatItem-yMMM":"MMM 'de' y","dateFormatItem-yQ":"yyyy Q","field-hour":"Hora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH'h'mm'min'ss's' zzzz","field-day-relative+0":"Hoje","field-day-relative+1":"Amanhã","field-day-relative+2":"Depois de amanhã","field-day-relative+3":"Daqui a três dias","months-standAlone-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1º trimestre","2º trimestre","3º trimestre","4º trimestre"],"dateFormatItem-HHmmss":"HH'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-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH'h'mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"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"],"dayPeriods-format-wide-night":"noite","dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","field-day-relative+-1":"Ontem","field-day-relative+-2":"Anteontem","field-day-relative+-3":"Há três dias","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","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","dateFormat-short":"dd/MM/yy","dayPeriods-format-wide-afternoon":"tarde","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","dateFormat-medium":"dd/MM/yyyy","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_pt-pt.js b/lib/dijit/nls/dijit-all_pt-pt.js
deleted file mode 100644 (file)
index 50ad9e3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Imprimir","underline":"Sublinhado","foreColor":"Cor de primeiro plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de parágrafo","newPage":"Nova página","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","fullScreen":"Alternar ecrã completo","italic":"Itálico","fontName":"Nome do tipo de letra","justifyLeft":"Alinhar à esquerda","unlink":"Remover ligação","toggleTableBorder":"Alternar contorno da tabela","viewSource":"Ver origem HTML","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.pt_pt");dijit._editor.nls.FontChoice.pt_pt={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.pt_pt");dijit._editor.nls.LinkDialog.pt_pt={"text":"Descrição:","insertImageTitle":"Propriedades da imagem","set":"Definir","newWindow":"Nova janela","topWindow":"Janela superior","target":"Destino:","createLinkTitle":"Propriedades da ligação","parentWindow":"Janela ascendente","currentWindow":"Janela actual","url":"URL:"};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("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","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};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={"quarters-standAlone-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"quarters-format-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-wide-am":"a.m.","dateFormat-medium":"d 'de' MMM 'de' yyyy","quarters-standAlone-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-abbr-pm":"p.m.","dateFormatItem-hm":"h:mm","months-standAlone-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"dayPeriods-standAlone-abbr-am":"a.m.","dayPeriods-format-wide-pm":"Depois do meio-dia","months-standAlone-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"dateFormatItem-yQQQ":"QQQ 'de' y","dayPeriods-format-wide-am":"Antes do meio-dia","dayPeriods-format-abbr-pm":"p.m.","dateFormatItem-yyQ":"QQQ 'de' yy","dayPeriods-format-abbr-am":"a.m.","months-format-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"days-standAlone-wide":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"months-format-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"days-standAlone-abbr":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"days-format-wide":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"dateFormatItem-yQ":"QQQ 'de' yyyy","dateFormatItem-hms":"h:mm:ss","quarters-format-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-wide-pm":"p.m.","days-format-abbr":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dia da semana","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dayPeriods-format-wide-morning":"manhã","dateFormat-long":"d 'de' MMMM 'de' y","dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"meio-dia","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","field-day-relative+0":"Hoje","field-day-relative+1":"Amanhã","field-day-relative+2":"Depois de amanhã","field-day-relative+3":"Daqui a três dias","dateFormatItem-HHmmss":"HH'h'mm'min'ss's'","dateFormatItem-M":"L","dateFormatItem-yyyyMMM":"MMM 'de' y","dateFormatItem-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH'h'mm","eraAbbr":["a.C.","d.C."],"field-minute":"Minuto","field-dayperiod":"Período do dia","dayPeriods-format-wide-night":"noite","dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","field-day-relative+-1":"Ontem","field-day-relative+-2":"Anteontem","field-day-relative+-3":"Há três dias","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","field-day":"Dia","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","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","dateFormat-short":"dd/MM/yy","dayPeriods-format-wide-afternoon":"tarde","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","quarters-standAlone-narrow":["1","2","3","4"],"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})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss"};
diff --git a/lib/dijit/nls/dijit-all_pt.js b/lib/dijit/nls/dijit-all_pt.js
deleted file mode 100644 (file)
index 6e670e6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt");dojo.nls.colors.pt={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt");dijit.nls.common.pt={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pt");dijit._editor.nls.commands.pt={"removeFormat":"Remover Formato","copy":"Copiar","paste":"Colar","selectAll":"Selecionar Todos","insertOrderedList":"Lista Numerada","insertTable":"Inserir/Editar Tabela","print":"Impressão","underline":"Sublinhado","foreColor":"Cor do Primeiro Plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de Parágrafo","newPage":"Nova Página","insertHorizontalRule":"Régua Horizontal","delete":"Excluir","insertUnorderedList":"Lista com Marcadores","tableProp":"Propriedade da Tabela","insertImage":"Inserir Imagem","superscript":"Sobrescrito","subscript":"Subscrito","createLink":"Criar Link","undo":"Desfazer","fullScreen":"Comutar Tela Cheia","italic":"Itálico","fontName":"Nome da Fonte","justifyLeft":"Alinhar pela Esquerda","unlink":"Remover Link","toggleTableBorder":"Alternar Moldura da Tabela","viewSource":"Visualizar Origem HTML","fontSize":"Tamanho da Fonte","systemShortcut":"A ação \"${0}\" está disponível em seu navegador apenas usando um atalho do teclado. Use ${1}.","indent":"Recuar","redo":"Refazer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinhar pelo Centro","hiliteColor":"Cor de segundo plano","deleteTable":"Excluir Tabela","outdent":"Não-chanfrado","cut":"Recortar","plainFormatBlock":"Estilo de Parágrafo","toggleDir":"Comutar Direção","bold":"Negrito","tabIndent":"Recuo de Guia","justifyRight":"Alinhar pela Direita","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt");dijit.form.nls.validate.pt={"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt");dijit.form.nls.ComboBox.pt={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.pt");dijit._editor.nls.FontChoice.pt={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.pt");dijit._editor.nls.LinkDialog.pt={"text":"Descrição:","insertImageTitle":"Propriedades de Imagem","set":"Definir","newWindow":"Nova Janela","topWindow":"Primeira Janela","target":"Destino:","createLinkTitle":"Propriedades de Link","parentWindow":"Janela Pai","currentWindow":"Janela Atual","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt");dojo.cldr.nls.number.pt={"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("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pt");dojo.cldr.nls.currency.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","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pt");dojo.cldr.nls.gregorian.pt={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dia da semana","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dayPeriods-format-wide-morning":"manhã","dateFormat-long":"d 'de' MMMM 'de' y","months-format-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"meio-dia","field-era":"Era","dateFormatItem-yM":"MM/yyyy","months-standAlone-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"timeFormat-short":"HH:mm","quarters-format-wide":["1º trimestre","2º trimestre","3º trimestre","4º trimestre"],"timeFormat-long":"HH'h'mm'min'ss's' z","field-year":"Ano","dateFormatItem-yMMM":"MMM 'de' y","dateFormatItem-yQ":"yyyy Q","field-hour":"Hora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH'h'mm'min'ss's' zzzz","field-day-relative+0":"Hoje","field-day-relative+1":"Amanhã","field-day-relative+2":"Depois de amanhã","field-day-relative+3":"Daqui a três dias","months-standAlone-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1º trimestre","2º trimestre","3º trimestre","4º trimestre"],"dateFormatItem-HHmmss":"HH'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-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH'h'mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"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"],"dayPeriods-format-wide-night":"noite","dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","field-day-relative+-1":"Ontem","field-day-relative+-2":"Anteontem","field-day-relative+-3":"Há três dias","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","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","dateFormat-short":"dd/MM/yy","dayPeriods-format-wide-afternoon":"tarde","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","dateFormat-medium":"dd/MM/yyyy","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_ru.js b/lib/dijit/nls/dijit-all_ru.js
deleted file mode 100644 (file)
index eb33d77..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_ru");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ru");dojo.nls.colors.ru={"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.ru");dijit.nls.loading.ru={"loadingState":"Загрузка...","errorState":"Извините, возникла ошибка"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ru");dijit.nls.common.ru={"buttonOk":"ОК","buttonCancel":"Отмена","buttonSave":"Сохранить","itemClose":"Закрыть"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ru");dijit._editor.nls.commands.ru={"removeFormat":"Удалить формат","copy":"Копировать","paste":"Вставить","selectAll":"Выбрать все","insertOrderedList":"Нумерованный список","insertTable":"Вставить/изменить таблицу","print":"Печать","underline":"Подчеркивание","foreColor":"Цвет текста","htmlToggle":"Код HTML","formatBlock":"Стиль абзаца","newPage":"Создать страницу","insertHorizontalRule":"Горизонтальная линейка","delete":"Удалить","insertUnorderedList":"Список с маркерами","tableProp":"Свойства таблицы","insertImage":"Вставить изображение","superscript":"Верхний индекс","subscript":"Нижний индекс","createLink":"Создать ссылку","undo":"Отменить","fullScreen":"Переключить полноэкранный режим","italic":"Курсив","fontName":"Название шрифта","justifyLeft":"По левому краю","unlink":"Удалить ссылку","toggleTableBorder":"Переключить рамку таблицы","viewSource":"Показать исходный код HTML","fontSize":"Размер шрифта","systemShortcut":"Действие \"${0}\" можно выполнить в браузере только путем нажатия клавиш ${1}.","indent":"Отступ","redo":"Повторить","strikethrough":"Перечеркивание","justifyFull":"По ширине","justifyCenter":"По центру","hiliteColor":"Цвет фона","deleteTable":"Удалить таблицу","outdent":"Втяжка","cut":"Вырезать","plainFormatBlock":"Стиль абзаца","toggleDir":"Изменить направление","bold":"Полужирный","tabIndent":"Табуляция","justifyRight":"По правому краю","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ru");dijit.form.nls.validate.ru={"rangeMessage":"Это значение вне диапазона.","invalidMessage":"Указано недопустимое значение.","missingMessage":"Это обязательное значение."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ru");dijit.form.nls.ComboBox.ru={"previousMessage":"Предыдущие варианты","nextMessage":"Следующие варианты"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ru");dijit._editor.nls.FontChoice.ru={"1":"самый маленький","2":"очень маленький","formatBlock":"Формат","3":"маленький","4":"средний","5":"большой","6":"очень большой","7":"самый большой","fantasy":"артистический","serif":"с засечками","p":"Абзац","pre":"Заранее отформатированный","sans-serif":"без засечек","fontName":"Шрифт","h1":"Заголовок","h2":"Подзаголовок","h3":"Вложенный подзаголовок","monospace":"непропорциональный","fontSize":"Размер","cursive":"курсив","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ru");dijit._editor.nls.LinkDialog.ru={"text":"Описание:","insertImageTitle":"Свойства изображения","set":"Задать","newWindow":"Новое окно","topWindow":"Окно верхнего уровня","target":"Целевой объект:","createLinkTitle":"Свойства ссылки","parentWindow":"Родительское окно","currentWindow":"Текущее окно","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ru");dojo.cldr.nls.number.ru={"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":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ru");dojo.cldr.nls.currency.ru={"HKD_displayName":"Гонконгский доллар","CHF_displayName":"Швейцарский франк","CAD_displayName":"Канадский доллар","CNY_displayName":"Юань Ренминби","USD_symbol":"$","AUD_displayName":"Австралийский доллар","JPY_displayName":"Японская иена","USD_displayName":"Доллар США","GBP_displayName":"Английский фунт стерлингов","EUR_displayName":"Евро","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ru");dojo.cldr.nls.gregorian.ru={"dateFormatItem-yM":"M.y","field-dayperiod":"AM/PM","field-minute":"Минута","eraNames":["до н.э.","н.э."],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"Вчера","field-weekday":"День недели","dateFormatItem-yQQQ":"y QQQ","field-day-relative+-2":"Позавчера","dateFormatItem-MMdd":"dd.MM","days-standAlone-wide":["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"field-era":"Эра","field-hour":"Час","quarters-standAlone-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"dateFormatItem-yyMMMEEEd":"EEE, d MMM yy","dateFormatItem-y":"y","timeFormat-full":"H:mm:ss zzzz","dateFormatItem-yyyy":"y","months-standAlone-abbr":["янв.","февр.","март","апр.","май","июнь","июль","авг.","сент.","окт.","нояб.","дек."],"dateFormatItem-Ed":"E d","dateFormatItem-yMMM":"LLL y","field-day-relative+0":"Сегодня","dateFormatItem-yyyyLLLL":"LLLL y","field-day-relative+1":"Завтра","days-standAlone-narrow":["В","П","В","С","Ч","П","С"],"eraAbbr":["до н.э.","н.э."],"field-day-relative+2":"Послезавтра","dateFormatItem-yyyyMM":"MM.yyyy","dateFormatItem-yyyyMMMM":"LLLL y","dateFormat-long":"d MMMM y 'г'.","timeFormat-medium":"H:mm:ss","field-zone":"Часовой пояс","dateFormatItem-Hm":"H:mm","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-yyMM":"MM.yy","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-yyMMM":"LLL yy","quarters-standAlone-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"dateFormatItem-ms":"mm:ss","dateFormatItem-yyyyQQQQ":"QQQQ y 'г'.","field-year":"Год","months-standAlone-wide":["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],"field-week":"Неделя","dateFormatItem-MMMd":"d MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["янв.","февр.","марта","апр.","мая","июня","июля","авг.","сент.","окт.","нояб.","дек."],"timeFormat-short":"H:mm","dateFormatItem-H":"H","field-month":"Месяц","quarters-format-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"days-format-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"dateFormatItem-M":"L","days-format-narrow":["В","П","В","С","Ч","П","С"],"field-second":"Секунда","field-day":"День","dateFormatItem-MEd":"E, d.M","months-format-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"days-standAlone-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"dateFormat-short":"dd.MM.yy","dateFormatItem-yMMMEd":"E, d MMM y","dateFormat-full":"EEEE, d MMMM y 'г'.","dateFormatItem-Md":"d.M","dateFormatItem-yMEd":"EEE, d.M.y","months-format-wide":["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],"dateFormatItem-d":"d","quarters-format-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"days-format-wide":["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],"eraNarrow":["до н.э.","н.э."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_sk.js b/lib/dijit/nls/dijit-all_sk.js
deleted file mode 100644 (file)
index 2ac818c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Tlačiť","underline":"Podčiarknuť","foreColor":"Farba popredia","htmlToggle":"Zdroj HTML","formatBlock":"Štýl odseku","newPage":"Nová stránka ","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äť","fullScreen":"Zobraziť na celú obrazovku","italic":"Kurzíva","fontName":"Názov písma","justifyLeft":"Zarovnať doľava","unlink":"Odstrániť prepojenie","toggleTableBorder":"Prepnúť rámček tabuľky","viewSource":"Zobraziť zdrojový kód HTML ","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.sk");dijit._editor.nls.FontChoice.sk={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.sk");dijit._editor.nls.LinkDialog.sk={"text":"Opis:","insertImageTitle":"Vlastnosti obrázka ","set":"Nastaviť","newWindow":"Nové okno ","topWindow":"Najvrchnejšie okno ","target":"Cieľ:","createLinkTitle":"Pripojiť vlastnosti","parentWindow":"Rodičovské okno ","currentWindow":"Aktuálne okno ","url":"URL:"};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("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","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};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","dayPeriods-format-wide-pm":"popoludní","field-minute":"Minúta","eraNames":["pred n.l.","n.l."],"dateFormatItem-MMMEd":"E, d. MMM","field-day-relative+-1":"Včera","field-weekday":"Deň v týždni","dateFormatItem-yQQQ":"QQQ y","field-day-relative+-2":"Predvčerom","field-day-relative+-3":"Pred tromi dňami","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","dayPeriods-format-wide-am":"dopoludnia","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":"LLL y","field-day-relative+0":"Dnes","field-day-relative+1":"Zajtra","days-standAlone-narrow":["N","P","U","S","Š","P","S"],"eraAbbr":["pred n.l.","n.l."],"field-day-relative+2":"Pozajtra","field-day-relative+3":"O tri dni","dateFormatItem-yyyyMMMM":"LLLL y","dateFormat-long":"d. MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE, d.","field-zone":"Pásmo","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1. štvrťrok","2. štvrťrok","3. štvrťrok","4. štvrťrok"],"dateFormatItem-yMMMM":"LLLL 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","dateFormatItem-H":"H","field-month":"Mesiac","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["ne","po","ut","st","št","pi","so"],"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"],"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}","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_sl.js b/lib/dijit/nls/dijit-all_sl.js
deleted file mode 100644 (file)
index d67f53f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Natisni","underline":"Podčrtano","foreColor":"Barva ospredja","htmlToggle":"Izvorna koda HTML","formatBlock":"Slog odstavka","newPage":"Nova stran","insertHorizontalRule":"Vodoravno ravnilo","delete":"Izbriši","insertUnorderedList":"Naštevni seznam","tableProp":"Lastnost tabele","insertImage":"Vstavi sliko","superscript":"Nadpisano","subscript":"Podpisano","createLink":"Ustvari povezavo","undo":"Razveljavi","fullScreen":"Preklopi na celozaslonski način","italic":"Ležeče","fontName":"Ime pisave","justifyLeft":"Poravnaj levo","unlink":"Odstrani povezavo","toggleTableBorder":"Preklopi na rob tabele","viewSource":"Prikaži izvorno kodo HTML","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":"Obojestranska poravnava","justifyCenter":"Poravnaj na sredino","hiliteColor":"Barva ozadja","deleteTable":"Izbriši tabelo","outdent":"Viseč odstavek","cut":"Izreži","plainFormatBlock":"Slog odstavka","toggleDir":"Preklopi na usmeritev","bold":"Krepko","tabIndent":"Zamik tabulatorja","justifyRight":"Poravnaj desno","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.sl");dijit._editor.nls.FontChoice.sl={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.sl");dijit._editor.nls.LinkDialog.sl={"text":"Opis:","insertImageTitle":"Lastnosti slike","set":"Nastavi","newWindow":"Novo okno","topWindow":"Najvišje okno","target":"Cilj:","createLinkTitle":"Lastnosti povezave","parentWindow":"Nadrejeno okno","currentWindow":"Trenutno okno","url":"URL:"};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("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","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};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","dayPeriods-format-wide-pm":"pop.","field-minute":"Minuta","eraNames":["pred našim štetjem","naše štetje"],"field-day-relative+-1":"Včeraj","field-weekday":"Dan v tednu","field-day-relative+-2":"Predvčerajšnjim","field-day-relative+-3":"Pred tremi dnevi","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","dayPeriods-format-wide-am":"dop.","dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"field-day-relative+0":"Danes","field-day-relative+1":"Jutri","days-standAlone-narrow":["n","p","t","s","č","p","s"],"eraAbbr":["pr. n. št.","po Kr."],"field-day-relative+2":"Pojutrišnjem","field-day-relative+3":"Čez tri dni","dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"dd. MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Območje","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"d. MMM. yyyy","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"dateFormatItem-ms":"mm:ss","field-year":"Leto","months-standAlone-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"field-week":"Teden","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","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"],"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."],"quarters-standAlone-narrow":["1","2","3","4"],"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","dayPeriods-format-abbr-am":"AM","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-H":"HH","dateFormatItem-M":"L","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-d":"d","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","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})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_sv.js b/lib/dijit/nls/dijit-all_sv.js
deleted file mode 100644 (file)
index 2de24a5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Skriv ut","underline":"Understrykning","foreColor":"Förgrundsfärg","htmlToggle":"HTML-källkod","formatBlock":"Styckeformat","newPage":"Ny sida","insertHorizontalRule":"Horisontell linjal","delete":"Ta bort","appleKey":"⌘+${0}","insertUnorderedList":"Punktlista","tableProp":"Tabellegenskap","insertImage":"Infoga bild","superscript":"Upphöjt","subscript":"Nedsänkt","createLink":"Skapa länk","undo":"Ångra","fullScreen":"Växla helskärm","italic":"Kursiv","fontName":"Teckensnittsnamn","justifyLeft":"Vänsterjustera","unlink":"Ta bort länk","toggleTableBorder":"Aktivera/avaktivera tabellram","viewSource":"Visa HTML-kod","ctrlKey":"Ctrl+${0}","fontSize":"Teckenstorlek","systemShortcut":"Åtgärden \"${0}\" är endast tillgänglig i webbläsaren med 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"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.sv");dijit._editor.nls.FontChoice.sv={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.sv");dijit._editor.nls.LinkDialog.sv={"text":"Beskrivning:","insertImageTitle":"Bildegenskaper","set":"Ange","newWindow":"nytt fönster","topWindow":"översta fönstret","target":"Mål:","createLinkTitle":"Länkegenskaper","parentWindow":"överordnat fönster","currentWindow":"aktuellt fönster","url":"URL-adress:"};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("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","USD_symbol":"US$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"};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"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"em","dateFormat-full":"EEEE'en' 'den' d:'e' 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","field-day-relative+0":"i dag","field-day-relative+1":"i morgon","field-day-relative+2":"i övermorgon","field-day-relative+3":"i överövermorgon","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-M":"L","days-standAlone-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-MMMMd":"d:'e' MMMM","dateFormatItem-yyMMM":"MMM -yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH: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","field-day-relative+-1":"i går","field-day-relative+-2":"i förrgår","field-day-relative+-3":"i förrförrgår","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E d/M","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","dateFormatItem-hm":"h:mm a","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","dayPeriods-format-wide-am":"fm","dateFormatItem-MMMMEd":"E d:'e' MMMM","dateFormat-short":"yyyy-MM-dd","dateFormatItem-MMd":"d/M","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"vecka","dateFormat-medium":"d MMM y","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_th.js b/lib/dijit/nls/dijit-all_th.js
deleted file mode 100644 (file)
index ee65015..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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":"แทรก/แก้ไขตาราง","print":"พิมพ์","underline":"ขีดเส้นใต้","foreColor":"สีพื้นหน้า","htmlToggle":"ซอร์ส HTML","formatBlock":"ลักษณะย่อหน้า","newPage":"หน้าใหม่","insertHorizontalRule":"ไม้บรรทัดแนวนอน","delete":"ลบ","insertUnorderedList":"หัวข้อย่อย","tableProp":"คุณสมบัติตาราง","insertImage":"แทรกอิมเมจ","superscript":"ตัวยก","subscript":"ตัวห้อย","createLink":"สร้างลิงก์","undo":"เลิกทำ","fullScreen":"สลับจอภาพแบบเต็ม","italic":"ตัวเอียง","fontName":"ชื่อฟอนต์","justifyLeft":"จัดชิดซ้าย","unlink":"ลบลิงก์ออก","toggleTableBorder":"สลับเส้นขอบตาราง","viewSource":"ดูซอร์ส HTML","fontSize":"ขนาดฟอนต์","systemShortcut":"การดำเนินการ\"${0}\" ใช้งานได้เฉพาะกับเบราว์เซอร์ของคุณโดยใช้แป้นพิมพ์ลัด ใช้ ${1}","indent":"เพิ่มการเยื้อง","redo":"ทำซ้ำ","strikethrough":"ขีดทับ","justifyFull":"จัดชิดขอบ","justifyCenter":"จัดกึ่งกลาง","hiliteColor":"สีพื้นหลัง","deleteTable":"ลบตาราง","outdent":"ลดการเยื้อง","cut":"ตัด","plainFormatBlock":"ลักษณะย่อหน้า","toggleDir":"สลับทิศทาง","bold":"ตัวหนา","tabIndent":"เยื้องแท็บ","justifyRight":"จัดชิดขวา","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.th");dijit.form.nls.ComboBox.th={"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.th");dijit._editor.nls.FontChoice.th={"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","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.th");dijit._editor.nls.LinkDialog.th={"text":"รายละเอียด","insertImageTitle":"คุณสมบัติอิมเมจ","set":"ตั้งค่า","newWindow":"หน้าต่างใหม่","topWindow":"หน้าต่างบนสุด","target":"เป้าหมาย:","createLinkTitle":"คุณสมบัติลิงก์","parentWindow":"หน้าต่างหลัก","currentWindow":"หน้าต่างปัจจุบัน","url":"URL:"};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("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":"ยูโร","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.th");dojo.cldr.nls.gregorian.th={"months-format-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"field-weekday":"วันในสัปดาห์","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["ก่อน ค.ศ.","ค.ศ."],"dateFormat-long":"d MMMM y","months-format-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"dateTimeFormat-medium":"{1}, {0}","dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"หลังเที่ยง","dateFormat-full":"EEEEที่ d MMMM G y","dateFormatItem-Md":"d/M","field-era":"สมัย","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"timeFormat-short":"H:mm","quarters-format-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"timeFormat-long":"H นาฬิกา m นาที ss วินาที z","field-year":"ปี","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"ชั่วโมง","months-format-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"H นาฬิกา m นาที ss วินาที zzzz","field-day-relative+0":"วันนี้","field-day-relative+1":"พรุ่งนี้","field-day-relative+2":"มะรืนนี้","dateFormatItem-H":"H","field-day-relative+3":"สามวันต่อจากนี้","months-standAlone-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"dateFormatItem-M":"L","days-standAlone-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"dateFormatItem-MMMMd":"d MMMM","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","eraAbbr":["ปีก่อน ค.ศ.","ค.ศ."],"field-minute":"นาที","field-dayperiod":"ช่วงวัน","days-standAlone-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"เมื่อวาน","dateTimeFormat-long":"{1}, {0}","field-day-relative+-2":"เมื่อวานซืน","field-day-relative+-3":"สามวันก่อน","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateTimeFormat-full":"{1}, {0}","dateFormatItem-yMMMM":"MMMM y","field-day":"วัน","days-format-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"field-zone":"เขต","dateFormatItem-y":"y","months-standAlone-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"days-format-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"eraNames":["ปีก่อนคริสต์ศักราช","คริสต์ศักราช"],"days-format-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"field-month":"เดือน","days-standAlone-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"ก่อนเที่ยง","dateFormatItem-MMMMEd":"E d MMMM","dateFormat-short":"d/M/yyyy","field-second":"วินาที","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"สัปดาห์","dateFormat-medium":"d MMM y","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1}, {0}","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_tr.js b/lib/dijit/nls/dijit-all_tr.js
deleted file mode 100644 (file)
index 173d387..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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","print":"Yazdır","underline":"Altı Çizili","foreColor":"Ön Plan Rengi","htmlToggle":"HTML Kaynağı","formatBlock":"Paragraf Stili","newPage":"Yeni Sayfa","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","fullScreen":"Tam Ekranı Aç/Kapat","italic":"İtalik","fontName":"Yazı Tipi Adı","justifyLeft":"Sola Hizala","unlink":"Bağlantıyı Kaldır","toggleTableBorder":"Tablo Kenarlığını Göster/Gizle","viewSource":"HTML Kaynağını Görüntüle","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","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};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("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"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.tr");dijit._editor.nls.FontChoice.tr={"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ı","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.tr");dijit._editor.nls.LinkDialog.tr={"text":"Açıklama:","insertImageTitle":"Resim Özellikleri","set":"Ayarla","newWindow":"Yeni Pencere","topWindow":"En Üst Pencere","target":"Hedef:","createLinkTitle":"Bağlantı Özellikleri","parentWindow":"Üst Pencere","currentWindow":"Geçerli Pencere","url":"URL:"};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("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","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};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"],"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","dayPeriods-format-wide-pm":"PM","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","field-day-relative+0":"Bugün","field-day-relative+1":"Yarın","field-day-relative+2":"Yarından sonraki gün","dateFormatItem-H":"HH","field-day-relative+3":"Üç gün sonra","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-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","field-day-relative+-1":"Dün","field-day-relative+-2":"Evvelsi gün","field-day-relative+-3":"Üç gün önce","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","dateFormatItem-hm":"h:mm a","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","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"dd MMMM E","dateFormat-short":"dd.MM.yyyy","field-second":"Saniye","dateFormatItem-yMMMEd":"dd MMM y EEE","dateFormatItem-Ed":"d E","field-week":"Hafta","dateFormat-medium":"dd MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
diff --git a/lib/dijit/nls/dijit-all_xx.js b/lib/dijit/nls/dijit-all_xx.js
deleted file mode 100644 (file)
index 7ac51c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_xx");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.xx");dojo.nls.colors.xx={"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.xx");dijit.nls.loading.xx={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.xx");dijit.nls.common.xx={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.xx");dijit._editor.nls.commands.xx={"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.xx");dijit.form.nls.validate.xx={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.xx");dijit.form.nls.ComboBox.xx={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.xx");dijit._editor.nls.FontChoice.xx={"noFormat":"None","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":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.xx");dijit._editor.nls.LinkDialog.xx={"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.xx");dojo.cldr.nls.number.xx={"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:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.xx");dojo.cldr.nls.currency.xx={"USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.xx");dojo.cldr.nls.gregorian.xx={"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"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","eraNarrow":["BCE","CE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"y MMMM d","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, y MMMM dd","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","dateFormatItem-yM":"y-M","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"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","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"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"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BCE","CE"],"field-minute":"Minute","field-dayperiod":"Dayperiod","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"field-day-relative+-1":"Yesterday","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","field-day":"Day","days-format-wide":["1","2","3","4","5","6","7"],"field-zone":"Zone","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","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})","dayPeriods-format-abbr-pm":"PM","days-format-abbr":["1","2","3","4","5","6","7"],"eraNames":["BCE","CE"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","field-month":"Month","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"yyyy-MM-dd","field-second":"Second","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dateFormat-medium":"y MMM d","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
diff --git a/lib/dijit/nls/dijit-all_zh-cn.js b/lib/dijit/nls/dijit-all_zh-cn.js
deleted file mode 100644 (file)
index 1949751..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_zh-cn");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_cn");dojo.nls.colors.zh_cn={"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.zh_cn");dijit.nls.loading.zh_cn={"loadingState":"正在加载...","errorState":"对不起,发生了错误"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_cn");dijit.nls.common.zh_cn={"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh_cn");dijit._editor.nls.commands.zh_cn={"removeFormat":"除去格式","copy":"复制","paste":"粘贴","selectAll":"全选","insertOrderedList":"编号列表","insertTable":"插入/编辑表","print":"打印","underline":"下划线","foreColor":"前景色","htmlToggle":"HTML 源代码","formatBlock":"段落样式","newPage":"新建页面","insertHorizontalRule":"水平线","delete":"删除","insertUnorderedList":"符号列表","tableProp":"表属性","insertImage":"插入图像","superscript":"上标","subscript":"下标","createLink":"创建链接","undo":"撤销","fullScreen":"切换全屏幕","italic":"斜体","fontName":"字体名称","justifyLeft":"左对齐","unlink":"除去链接","toggleTableBorder":"切换表边框","viewSource":"查看 HTML 源代码","fontSize":"字体大小","systemShortcut":"只能在浏览器中通过键盘快捷方式执行“${0}”操作。使用 ${1}。","indent":"增加缩进","redo":"重做","strikethrough":"删除线","justifyFull":"对齐","justifyCenter":"居中","hiliteColor":"背景色","deleteTable":"删除表","outdent":"减少缩进","cut":"剪切","plainFormatBlock":"段落样式","toggleDir":"固定方向","bold":"粗体","tabIndent":"制表符缩进","justifyRight":"右对齐","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_cn");dijit.form.nls.validate.zh_cn={"rangeMessage":"此值超出范围。","invalidMessage":"输入的值无效。","missingMessage":"此值是必需值。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_cn");dijit.form.nls.ComboBox.zh_cn={"previousMessage":"先前选项","nextMessage":"更多选项"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.zh_cn");dijit._editor.nls.FontChoice.zh_cn={"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":"草书","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.zh_cn");dijit._editor.nls.LinkDialog.zh_cn={"text":"描述:","insertImageTitle":"图像属性","set":"设置","newWindow":"新窗口","topWindow":"最顶部窗口","target":"目标:","createLinkTitle":"链接属性","parentWindow":"父窗口","currentWindow":"当前窗口","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_cn");dojo.cldr.nls.number.zh_cn={"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"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh_cn");dojo.cldr.nls.currency.zh_cn={"HKD_displayName":"港元","CHF_displayName":"瑞士法郎","CAD_displayName":"加拿大元","CNY_displayName":"人民币","AUD_displayName":"澳大利亚元","JPY_displayName":"日元","USD_displayName":"美元","CNY_symbol":"¥","GBP_displayName":"英镑","EUR_displayName":"欧元","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh_cn");dojo.cldr.nls.gregorian.zh_cn={"months-format-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"field-weekday":"周天","dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-yMEd":"y年M月d日,E","dateFormatItem-MMMEd":"MMMd日E","eraNarrow":["公元前","公元"],"dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M-d","field-era":"时期","dateFormatItem-yM":"yyyy-M","months-standAlone-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"timeFormat-short":"ah:mm","quarters-format-wide":["第1季度","第2季度","第3季度","第4季度"],"timeFormat-long":"zah时mm分ss秒","field-year":"年","dateFormatItem-yMMM":"y年MMM","dateFormatItem-yQ":"y年QQQ","dateFormatItem-yyyyMMMM":"y年MMMM","field-hour":"小时","dateFormatItem-MMdd":"MM-dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","timeFormat-full":"zzzzah时mm分ss秒","field-day-relative+0":"今天","field-day-relative+1":"明天","field-day-relative+2":"后天","dateFormatItem-H":"H时","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"quarters-format-abbr":["1季","2季","3季","4季"],"quarters-standAlone-wide":["第1季度","第2季度","第3季度","第4季度"],"dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","timeFormat-medium":"ah:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1季","2季","3季","4季"],"eraAbbr":["公元前","公元"],"field-minute":"分钟","field-dayperiod":"上午/下午","days-standAlone-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateFormatItem-MEd":"M-dE","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-zone":"区域","dateFormatItem-y":"y年","months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"ah:mm","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dateFormatItem-yMMMd":"y年MMMd日","eraNames":["公元前","公元"],"days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dateFormat-short":"yy-M-d","dayPeriods-format-wide-afternoon":"下午","field-second":"秒钟","dateFormatItem-yMMMEd":"y年MMMd日EEE","dateFormatItem-Ed":"d日E","field-week":"周","dateFormat-medium":"yyyy-M-d","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
diff --git a/lib/dijit/nls/dijit-all_zh-tw.js b/lib/dijit/nls/dijit-all_zh-tw.js
deleted file mode 100644 (file)
index 9f6f5f4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_zh-tw");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_tw");dojo.nls.colors.zh_tw={"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.zh_tw");dijit.nls.loading.zh_tw={"loadingState":"載入中...","errorState":"抱歉,發生錯誤"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_tw");dijit.nls.common.zh_tw={"buttonOk":"確定","buttonCancel":"取消","buttonSave":"儲存","itemClose":"關閉"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh_tw");dijit._editor.nls.commands.zh_tw={"removeFormat":"移除格式","copy":"複製","paste":"貼上","selectAll":"全選","insertOrderedList":"編號清單","insertTable":"插入/編輯表格","print":"列印","underline":"底線","foreColor":"前景顏色","htmlToggle":"HTML 原始檔","formatBlock":"段落樣式","newPage":"新建頁面","insertHorizontalRule":"水平尺規","delete":"刪除","insertUnorderedList":"項目符號清單","tableProp":"表格內容","insertImage":"插入影像","superscript":"上標","subscript":"下標","createLink":"建立鏈結","undo":"復原","fullScreen":"切換全螢幕","italic":"斜體","fontName":"字型名稱","justifyLeft":"靠左對齊","unlink":"移除鏈結","toggleTableBorder":"切換表格邊框","viewSource":"檢視 HTML 原始檔","fontSize":"字型大小","systemShortcut":"\"${0}\" 動作只能在瀏覽器中透過使用鍵盤快速鍵來使用。請使用 ${1}。","indent":"縮排","redo":"重做","strikethrough":"加刪除線","justifyFull":"對齊","justifyCenter":"置中對齊","hiliteColor":"背景顏色","deleteTable":"刪除表格","outdent":"凸排","cut":"剪下","plainFormatBlock":"段落樣式","toggleDir":"切換方向","bold":"粗體","tabIndent":"定位點縮排","justifyRight":"靠右對齊","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_tw");dijit.form.nls.validate.zh_tw={"rangeMessage":"此值超出範圍。","invalidMessage":"輸入的值無效。","missingMessage":"必須提供此值。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_tw");dijit.form.nls.ComboBox.zh_tw={"previousMessage":"前一個選擇項","nextMessage":"其他選擇項"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.zh_tw");dijit._editor.nls.FontChoice.zh_tw={"1":"最小","2":"較小","formatBlock":"格式","3":"小","4":"中","5":"大","6":"較大","7":"最大","fantasy":"Fantasy","serif":"新細明體","p":"段落","pre":"預先格式化","sans-serif":"新細明體","fontName":"字型","h1":"標題","h2":"子標題","h3":"次子標題","monospace":"等寬","fontSize":"大小","cursive":"Cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.zh_tw");dijit._editor.nls.LinkDialog.zh_tw={"text":"說明:","insertImageTitle":"影像內容","set":"設定","newWindow":"新視窗","topWindow":"最上面的視窗","target":"目標:","createLinkTitle":"鏈結內容","parentWindow":"上層視窗","currentWindow":"現行視窗","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_tw");dojo.cldr.nls.number.zh_tw={"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"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh_tw");dojo.cldr.nls.currency.zh_tw={"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":"¥","HKD_symbol":"HK$","JPY_symbol":"JP¥"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh_tw");dojo.cldr.nls.gregorian.zh_tw={"dateFormatItem-yM":"yyyy/M","field-minute":"分鐘","eraNames":["西元前","西元"],"field-weekday":"週天","dateFormatItem-MMdd":"MM/dd","field-day-relative+-3":"大前天","field-relative-day":"大後天","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月","eraAbbr":["西元前","西元"],"field-day-relative+2":"後天","field-day-relative+3":"大後天","timeFormat-medium":"ah:mm:ss","field-zone":"區域","dateFormatItem-yyMM":"yy-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-yMMMEd":"y年M月d日EEE","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季"],"eraNarrow":["西元前","西元"],"dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-MMMEd":"MMMd日E","dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","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季度","field-day-relative+0":"今天","field-day-relative+1":"明天","dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","dateFormatItem-Hm":"H:mm","field-dayperiod":"上午/下午","dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","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","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dayPeriods-format-wide-afternoon":"下午","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
diff --git a/lib/dijit/nls/dijit-all_zh.js b/lib/dijit/nls/dijit-all_zh.js
deleted file mode 100644 (file)
index 12af91a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dijit.nls.dijit-all_zh");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh");dojo.nls.colors.zh={"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.zh");dijit.nls.loading.zh={"loadingState":"正在加载...","errorState":"对不起,发生了错误"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh");dijit.nls.common.zh={"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh");dijit._editor.nls.commands.zh={"removeFormat":"除去格式","copy":"复制","paste":"粘贴","selectAll":"全选","insertOrderedList":"编号列表","insertTable":"插入/编辑表","print":"打印","underline":"下划线","foreColor":"前景色","htmlToggle":"HTML 源代码","formatBlock":"段落样式","newPage":"新建页面","insertHorizontalRule":"水平线","delete":"删除","insertUnorderedList":"符号列表","tableProp":"表属性","insertImage":"插入图像","superscript":"上标","subscript":"下标","createLink":"创建链接","undo":"撤销","fullScreen":"切换全屏幕","italic":"斜体","fontName":"字体名称","justifyLeft":"左对齐","unlink":"除去链接","toggleTableBorder":"切换表边框","viewSource":"查看 HTML 源代码","fontSize":"字体大小","systemShortcut":"只能在浏览器中通过键盘快捷方式执行“${0}”操作。使用 ${1}。","indent":"增加缩进","redo":"重做","strikethrough":"删除线","justifyFull":"对齐","justifyCenter":"居中","hiliteColor":"背景色","deleteTable":"删除表","outdent":"减少缩进","cut":"剪切","plainFormatBlock":"段落样式","toggleDir":"固定方向","bold":"粗体","tabIndent":"制表符缩进","justifyRight":"右对齐","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh");dijit.form.nls.validate.zh={"rangeMessage":"此值超出范围。","invalidMessage":"输入的值无效。","missingMessage":"此值是必需值。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh");dijit.form.nls.ComboBox.zh={"previousMessage":"先前选项","nextMessage":"更多选项"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.zh");dijit._editor.nls.FontChoice.zh={"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":"草书","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.zh");dijit._editor.nls.LinkDialog.zh={"text":"描述:","insertImageTitle":"图像属性","set":"设置","newWindow":"新窗口","topWindow":"最顶部窗口","target":"目标:","createLinkTitle":"链接属性","parentWindow":"父窗口","currentWindow":"当前窗口","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh");dojo.cldr.nls.number.zh={"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"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh");dojo.cldr.nls.currency.zh={"HKD_displayName":"港元","CHF_displayName":"瑞士法郎","CAD_displayName":"加拿大元","CNY_displayName":"人民币","AUD_displayName":"澳大利亚元","JPY_displayName":"日元","USD_displayName":"美元","CNY_symbol":"¥","GBP_displayName":"英镑","EUR_displayName":"欧元","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh");dojo.cldr.nls.gregorian.zh={"months-format-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"field-weekday":"周天","dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-yMEd":"y年M月d日,E","dateFormatItem-MMMEd":"MMMd日E","eraNarrow":["公元前","公元"],"dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M-d","field-era":"时期","dateFormatItem-yM":"yyyy-M","months-standAlone-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"timeFormat-short":"ah:mm","quarters-format-wide":["第1季度","第2季度","第3季度","第4季度"],"timeFormat-long":"zah时mm分ss秒","field-year":"年","dateFormatItem-yMMM":"y年MMM","dateFormatItem-yQ":"y年QQQ","dateFormatItem-yyyyMMMM":"y年MMMM","field-hour":"小时","dateFormatItem-MMdd":"MM-dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","timeFormat-full":"zzzzah时mm分ss秒","field-day-relative+0":"今天","field-day-relative+1":"明天","field-day-relative+2":"后天","dateFormatItem-H":"H时","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"quarters-format-abbr":["1季","2季","3季","4季"],"quarters-standAlone-wide":["第1季度","第2季度","第3季度","第4季度"],"dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","timeFormat-medium":"ah:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1季","2季","3季","4季"],"eraAbbr":["公元前","公元"],"field-minute":"分钟","field-dayperiod":"上午/下午","days-standAlone-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateFormatItem-MEd":"M-dE","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-zone":"区域","dateFormatItem-y":"y年","months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"ah:mm","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dateFormatItem-yMMMd":"y年MMMd日","eraNames":["公元前","公元"],"days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dateFormat-short":"yy-M-d","dayPeriods-format-wide-afternoon":"下午","field-second":"秒钟","dateFormatItem-yMMMEd":"y年MMMd日EEE","dateFormatItem-Ed":"d日E","field-week":"周","dateFormat-medium":"yyyy-M-d","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
diff --git a/lib/dijit/nls/kk/common.js b/lib/dijit/nls/kk/common.js
new file mode 100644 (file)
index 0000000..2ac0faf
--- /dev/null
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Болдырмау","buttonSave":"Сақтау","itemClose":"Жабу"})
\ No newline at end of file
diff --git a/lib/dijit/nls/kk/loading.js b/lib/dijit/nls/kk/loading.js
new file mode 100644 (file)
index 0000000..ba14287
--- /dev/null
@@ -0,0 +1 @@
+({"loadingState":"Жүктелуде...","errorState":"Кешіріңіз, қате орын алды"})
\ No newline at end of file
index 4100866db399e9bf0bf7ac4b91dec72834a3fe6e..bae0ab0c97f16842835e8f93e87a88b971e71069 100644 (file)
@@ -1 +1 @@
-({"loadingState":"Nalaganje...","errorState":"Oprostite, prišlo je do napake."})
\ No newline at end of file
+({"loadingState":"Nalaganje ...","errorState":"Oprostite, prišlo je do napake."})
\ No newline at end of file
diff --git a/lib/dijit/package.json b/lib/dijit/package.json
new file mode 100644 (file)
index 0000000..9ca9423
--- /dev/null
@@ -0,0 +1,24 @@
+{
+  "name": "dijit",
+  "directories": {
+    "lib": "."
+  },
+  "main":"./lib/main",
+  "mappings": {
+    "dojo": "https://github.com/dojo/dojo/zipball/1.0.2"
+  },
+  "description": "Dijit is Dojo\92s UI Library",
+  "licenses": [
+     {
+         "type": "AFLv2.1",
+         "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L43"
+     },
+     {
+         "type": "BSD",
+         "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L13"
+     }
+  ],
+  "bugs": "http://bugs.dojotoolkit.org/",
+  "keywords": ["JavaScript", "Dojo", "Widget"],
+  "homepage": "http://dojotoolkit.org/"
+}
\ No newline at end of file
index 8d3fc5de79b282e52f0e4a128c3ecf49fa52f21c..0470c8e9be7a6a797b894f3f0bc6ec4f810dacb1 100644 (file)
@@ -1,7 +1,25 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
 
 
+/*=====
+// dijit fallback for key summaries otherwise not covered by the doc parser
+
+dijit.demos = {
+       // summary:
+       //              Home of the official dijit demo code
+};
+
+dijit.form = {
+       // summary:
+       //              Form and input related widgets
+};
+
+dijit.layout = {
+       // summary:
+       //              Layout related widgets
+};
+=====*/
index 5035cf5d4cadf6cda487b77b70fce1a2c0aa0424..09be04d03233c190c23eb61908f880f8307a024c 100644 (file)
@@ -1,12 +1,15 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.robot"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.robot"] = true;
 dojo.provide("dijit.robot");
 dojo.require("dojo.robot");
+
+
+
 }
index 8f86dd81bb4ced47d6e272ac7ee5634b4c7fedc9..e5ef90641495131eb19b585a5d0a7a50ac718005 100644 (file)
@@ -1,24 +1,34 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.robotx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.robotx"] = true;
 dojo.provide("dijit.robotx");
 dojo.require("dijit.robot");
 dojo.require("dojo.robotx");
+
+
+//WARNING: This module depends on GLOBAL dijit being set for v1.5 code; therefore the lexical variable that
+//references "dijit" has been renamed to "dijit_"
+
 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=_2.dijit;
-}
-}});
+var __updateDocument = doh.robot._updateDocument;
+
+dojo.mixin(doh.robot,{
+       _updateDocument: function(){
+               __updateDocument();
+               var win = dojo.global;
+               if(win["dijit"]){
+                       window.dijit = win.dijit; // window reference needed for IE
+               }
+       }
+});
+
 })();
+
 }
diff --git a/lib/dijit/themes/a11y/colors3x4-rtl.png b/lib/dijit/themes/a11y/colors3x4-rtl.png
deleted file mode 100644 (file)
index 51a7d11..0000000
Binary files a/lib/dijit/themes/a11y/colors3x4-rtl.png and /dev/null differ
diff --git a/lib/dijit/themes/a11y/colors7x10-rtl.png b/lib/dijit/themes/a11y/colors7x10-rtl.png
deleted file mode 100644 (file)
index c191e90..0000000
Binary files a/lib/dijit/themes/a11y/colors7x10-rtl.png and /dev/null differ
index 3a3256ef06d1452532bc104357c987eb4c654e6f..ff8e64fa74a45776dcde0f7aedd9014b61fa3b0d 100644 (file)
-
+/* Calendar
+ * 
+ * Styling Calendar mainly includes:
+ * 
+ * 1. Calendar container
+ *             .dijitCalendar - main container
+ *             .dijitCalendarHover / .dijitCalendarActive - states e.g. hover,active
+ * 
+ * 2. Month
+ *             .dijitCalendarMonthContainer
+ *             .dijitCalendarMonthLabel
+ *      .dijitCalendarDecrease / .dijitCalendarDecrease - icons for switching to previous/next month
+ *      .dijitCalendarArrowActive .dijitCalendarDecrease - states e.g. hover,active
+ * 
+ * 3. Date
+ *             .dijitCalendarDayLabelTemplate - week day column header e.g. S M T W T F S
+ *             .dijitCalendarDateTemplate - date label wrapper
+ *             .dijitCalendarPreviousMonth .dijitCalendarDateLabel - special labels for previous or next month
+ *      .dijitCalendarSelectedDate .dijitCalendarDateLabel - styles for selected date
+ *             .dijitCalendarDisabledDate .dijitCalendarDateLabel - styles for disabled date
+ *             .dijitCalendarActiveDate .dijitCalendarDateLabel - states e.g. hover,active
+ * 
+ * 4. Year
+ *             .dijitCalendarYearContainer
+ *             .dijitCalendarYearLabel
+ *             .dijitCalendarPreviousYear /.dijitCalendarNextYear
+ *      .dijitCalendarNextYearHover / .dijitCalendarPreviousYearHover - states e.g. hover,active
+ *      
+ * 5. Dropdown Month Menu
+ *             .dijitCalendarMonthMenu - menu container     
+ *             .dijitCalendarMonthMenu .dijitCalendarMonthLabel - month label in menu item
+ *             .dijitCalendarMonthMenu .dijitCalendarMonthLabelHover - menu item hover state
+ */
 .claro .dijitCalendar {
-       border:solid 1px #b5bcc7;
-       background-color:#d4ebff;
-       background-image:url("images/calendarContainerImages.png");
-       background-position:0px -448px;
-       background-repeat:repeat-x;
-       text-align:center;
-       padding:6px 5px 3px 5px;
-       -moz-border-radius:4px;
-       -webkit-border-radius:4px;      
+  border: solid 1px #b5bcc7;
+  background-color: #cfe5fa;
+  background-image: url("images/calendarContainerImages.png");
+  background-position: 0 -448px;
+  background-repeat: repeat-x;
+  text-align: center;
+  padding: 6px 5px 3px 5px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
 }
 .dj_ie6 .claro .dijitCalendar {
-       background-image:none;
+  background-image: none;
 }
 .claro .dijitCalendar img {
-       border:none;
+  border: none;
 }
-.claro .dijitCalendarHover,
-.claro .dijitCalendarActive {
-       background-color: #b7dcff;
-       border:solid 1px #769dc0;
+.claro .dijitCalendarHover, .claro .dijitCalendarActive {
+  /* treat dijitCalenderActive like hover since there's
+        * no concept of clicking a Calendar as a whole (although you can click things inside the calendar)
+        */
+
+  background-color: #abd6ff;
+  border: solid 1px #769dc0;
 }
 .claro .dijitCalendarMonthContainer th {
-       text-align:center;
-       padding-bottom:4px;
-       vertical-align:middle;
-}
-.claro .dijitCalendarMonthLabelSpacer {
-       display:none;
+  text-align: center;
+  padding-bottom: 4px;
+  vertical-align: middle;
 }
 .claro .dijitCalendarMonthLabel {
-       color:#000000;
-       font-size: 1.091em;
-       display: block;
+  color: #000000;
+  font-size: 1.091em;
+  padding: 0 4px;
 }
+/* next/previous month arrows */
 .claro .dijitCalendarIncrementControl {
-       width:18px;
-       height:16px;
-       background-image: url("images/calendarArrows.png");
-       background-repeat: no-repeat;
+  width: 18px;
+  height: 16px;
+  background-image: url("images/calendarArrows.png");
+  background-repeat: no-repeat;
 }
 .dj_ie6 .claro .dijitCalendarIncrementControl {
-       background-image: url("images/calendarArrows8bit.png");
+  background-image: url("images/calendarArrows8bit.png");
 }
 .claro .dijitCalendarIncrease {
-       background-position:-18px 0px;
+  background-position: -18px 0;
 }
 .claro .dijitCalendarArrowHover .dijitCalendarDecrease {
-       background-position:-36px 0px;
+  background-position: -36px 0;
 }
 .claro .dijitCalendarArrowHover .dijitCalendarIncrease {
-       background-position:-55px 0px;
+  background-position: -55px 0;
 }
 .claro .dijitCalendarArrowActive .dijitCalendarDecrease {
-       background-position:-72px 0px;
+  background-position: -72px 0;
 }
 .claro .dijitCalendarArrowActive .dijitCalendarIncrease {
-       background-position:-91px 0px;
+  background-position: -91px 0;
 }
 .claro .dijitA11ySideArrow {
-       
-       display: none;
+  /* text +/- labels instead of arrow icons, for high contrast mode */
+
+  display: none;
 }
 .claro .dijitDayLabels th {
-       padding:0px 4px 0px 4px;
-       border-bottom:solid 1px #99b5cd;
-       font-weight:bold;
-       text-align:center;
+  padding: 0 4px 0 4px;
+  font-weight: bold;
+  text-align: center;
 }
 .claro .dijitCalendarDayLabelTemplate {
-       padding-bottom:0em;
-       text-align:center;
-       border-bottom:1px solid #99B5CD;
-       font-size:0.909em;
-       padding:0 3px 2px;
+  padding-bottom: 0;
+  text-align: center;
+  border-bottom: 1px solid #b5bcc7;
+  font-size: 0.909em;
+  padding: 0 3px 2px;
 }
 .claro .dijitCalendarDateTemplate {
-       text-align:center;
-       background-color:#fff;
-       background-image:url("images/calendarContainerImages.png");
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       border-bottom: 1px solid #dadde1;
-       padding-top:0px;
-       font-size:0.909em;
-       font-family: Arial;
-       font-weight:bold;
-       letter-spacing:.05em;
-       text-align:center;
+  text-align: center;
+  background-color: #ffffff;
+  background-image: url("images/calendarContainerImages.png");
+  background-position: 0 0;
+  background-repeat: repeat-x;
+  border-bottom: 1px solid #d3d3d3;
+  padding-top: 0;
+  font-size: 0.909em;
+  font-family: Arial;
+  font-weight: bold;
+  letter-spacing: .05em;
+  text-align: center;
 }
 .dj_ie6 .claro .dijitCalendarDateTemplate {
-       background-image: none;
+  background-image: none;
 }
-.claro .dijitCalendarPreviousMonth,
-.claro .dijitCalendarNextMonth {
-       background-color:#ebf3f9;
-       background-image:none;
-       border-bottom:solid 1px #d2dae8;
-       color:#547da1;
+.claro .dijitCalendarPreviousMonth, .claro .dijitCalendarNextMonth {
+  background-color: #e9f4fe;
+  background-image: none;
+  border-bottom: solid 1px #d3d3d3;
+  /* todo: redundant with above .dijitCalendarDateTemplate rule */
 }
 .claro .dijitCalendarDateTemplate .dijitCalendarDateLabel {
-       text-decoration:none;
-       display:block;
-       padding:3px 5px 3px 4px;
-       border:solid 1px #fff;
-       color:#1e1e1e;
-       background-color:rgba(171,212,251,0);   
-       -webkit-transition-property:background-color, border;
-       -webkit-transition-duration:.35s;
-}
-.claro .dijitCalendarPreviousMonth .dijitCalendarDateLabel,
-.claro .dijitCalendarNextMonth .dijitCalendarDateLabel{
-       color:#547da1;
-       border-color:#ebf3f9;
+  text-decoration: none;
+  display: block;
+  padding: 3px 5px 3px 4px;
+  border: solid 1px #ffffff;
+  /* intentionally matches background-color, no visible border until hover/selection */
+
+  background-color: rgba(171, 212, 251, 0);
+  /* transparent causes black-flash animation problem on webkit */
+
+  -webkit-transition-property: background-color, border;
+  -moz-transition-property: background-color, border;
+  transition-property: background-color, border;
+  -webkit-transition-duration: 0.35s;
+  -moz-transition-duration: 0.35s;
+  transition-duration: 0.35s;
+}
+.claro .dijitCalendarPreviousMonth .dijitCalendarDateLabel, .claro .dijitCalendarNextMonth .dijitCalendarDateLabel {
+  color: #769dc0;
+  border-color: #e9f4fe;
+  /* intentionally matches background-color, no visible border until hover/selection */
+
 }
 .claro .dijitCalendarYearContainer {
-       vertical-align:middle;
+  vertical-align: middle;
 }
 .claro .dijitCalendarYearControl {
-       padding: 1px 2px 2px 2px;
+  padding: 1px 2px 2px 2px;
 }
 .claro .dijitCalendarYearLabel {
-       padding:2px 0px 0px 0px;
-       margin:0;
+  padding: 2px 0 0 0;
+  margin: 0;
 }
 .claro .dijitCalendarYearLabel span {
-       
-       vertical-align:middle;
+  /* trying to center next/current/previous year vertically, doesn't work on IE6/7 though */
+
+  vertical-align: middle;
 }
 .claro .dijitCalendarSelectedYear {
-       padding:0px 3px;
+  padding: 0 3px;
 }
-.claro .dijitCalendarNextYear,
-.claro .dijitCalendarPreviousYear {
-       padding: 1px 6px 1px 6px;
-       font-size:0.909em;
+.claro .dijitCalendarNextYear, .claro .dijitCalendarPreviousYear {
+  padding: 1px 6px 1px 6px;
+  font-size: 0.909em;
 }
 .claro .dijitCalendarSelectedYear {
-       font-size:1.091em;
-       color:#000;
-}
-.claro .dijitCalendarHoveredDate .dijitCalendarDateLabel{
-       background-color:#abd4fb;
-       border:solid 1px #729dc2;
-       color:#000;
-       -webkit-transition-duration:.2s;
-}
-.claro .dijitCalendarNextYearHover,
-.claro .dijitCalendarPreviousYearHover {
-       color:#000;
-       border:solid 1px #fefefe;
-       padding: 0px 5px 0px 5px;       
-       background-color:#eaf4fe;
-}
-.claro .dijitCalendarNextYearActive,
-.claro .dijitCalendarPreviousYearActive {
-       border: solid 1px #87b3d9;
-       padding: 0px 5px 0px 5px;       
-       background-color:#90bde6;
+  font-size: 1.091em;
+  color: #000000;
+}
+/* End Normal Calendar Style */
+/* Hovered Calendar Style */
+.claro .dijitCalendarHoveredDate .dijitCalendarDateLabel {
+  background-color: #abd6ff;
+  border: solid 1px #769dc0;
+  color: #000000;
+  -webkit-transition-duration: 0.2s;
+  -moz-transition-duration: 0.2s;
+  transition-duration: 0.2s;
+}
+.claro .dijitCalendarNextYearHover, .claro .dijitCalendarPreviousYearHover {
+  color: #000000;
+  border: solid 1px #ffffff;
+  padding: 0 5px 0 5px;
+  /* reduced by 1 to make room for border */
+
+  background-color: #e9f4fe;
+}
+/* End Hovered Calendar Style */
+/* Active Calendar Style */
+.claro .dijitCalendarNextYearActive, .claro .dijitCalendarPreviousYearActive {
+  border: solid 1px #769dc0;
+  padding: 0 5px 0 5px;
+  /* reduced by 1 to make room for border */
+
+  background-color: #cfe5fa;
 }
 .claro .dijitCalendarActiveDate .dijitCalendarDateLabel {
-       background-image:url("images/calendarContainerImages.png");
-       background-position:0px -300px;
-       background-color:#75b5f0;
-       border:solid 1px #fff;
-       -webkit-transition-duration:.1s;
+  background-image: url("images/calendarContainerImages.png");
+  background-position: 0 -300px;
+  background-color: #7dbefa;
+  border: solid 1px #ffffff;
+  -webkit-transition-duration: 0.1s;
+  -moz-transition-duration: 0.1s;
+  transition-duration: 0.1s;
 }
 .dj_ie6 .claro .dijitCalendarActiveDate .dijitCalendarDateLabel {
-       background-image:none;
+  background-image: none;
 }
+/* End Active Calendar Style */
+/* Selected Calendar Style */
 .claro .dijitCalendarSelectedDate .dijitCalendarDateLabel {
-       color:#000;
-       background-color:#e7f4ff;
-       border-color:#accfed;
+  color: #000000;
+  background-color: #abd6ff;
+  border-color: #769dc0;
 }
+/* End Selected Calendar Style */
+/* Disabled Calendar Style*/
 .claro .dijitCalendarDisabledDate .dijitCalendarDateLabel {
-       text-decoration:line-through;
-       
-       
-       background-color: transparent;
-       border-width: 0px;
-       padding: 4px 6px 4px 5px;
-       color: #547DA1;
-}
-.claro .dijitCalendarMonthContainer .dijitMenu{
-       
-       top: 20px !important;
-       left: 0px;
-       border-color: #769dc0;
-       background-color: #fff;
-       text-align:center;
-       background-image: none;
-}
-.claro .dijitCalendarMonthContainer .dijitMenu .dijitCalendarMonthLabel{
-       border-top: solid 1px #fff;
-       border-bottom: solid 1px #fff;
-       padding: 2px 20px;
-}
-.claro .dijitCalendarMonthContainer .dijitMenu .dijitMenuItemHover {
-       background-color: #abd6ff;
-       border-color: #769dc0;
-       border-width:1px 0px;
-       background-image: url("images/commonHighlight.png");
-       background-repeat:repeat-x;
+  text-decoration: line-through;
+  /* override hover effects above, hover and click on disabled date should have no effect */
+
+  background-color: transparent;
+  border-width: 0;
+  padding: 4px 6px 4px 5px;
+  color: #818181;
+}
+/* End Disabled Calendar Style */
+/* Styling for month DropDownButton */
+.claro .dijitCalendar .dijitDropDownButton {
+  margin: 0;
+}
+.claro .dijitCalendar .dijitButtonText {
+  padding: 1px 0 3px;
+  margin-right: -4px;
+}
+.claro .dijitCalendar .dijitDropDownButton .dijitButtonNode {
+  background-color: transparent;
+  background-image: none;
+  padding: 0 3px 0 2px;
+  border: solid 1px #b5bcc7;
+  -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
+  -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
+  box-shadow: 0 0 0 rgba(0, 0, 0, 0);
+}
+.claro .dijitCalendar .dijitDropDownButtonHover .dijitButtonNode {
+  background-color: #e9f4fe;
+  border: solid 1px #ffffff;
+}
+/* Styling for month drop down list */
+.claro .dijitCalendarMonthMenu {
+  border-color: #769dc0;
+  background-color: #ffffff;
+  text-align: center;
+  background-image: none;
+}
+.claro .dijitCalendarMonthMenu .dijitCalendarMonthLabel {
+  border-top: solid 1px #ffffff;
+  /* intentionally invisible until hover */
+
+  border-bottom: solid 1px #ffffff;
+  padding: 2px 0;
+}
+.claro .dijitCalendarMonthMenu .dijitCalendarMonthLabelHover {
+  background-color: #abd6ff;
+  border-color: #769dc0;
+  border-width: 1px 0;
+  background-image: url("images/commonHighlight.png");
+  background-repeat: repeat-x;
 }
diff --git a/lib/dijit/themes/claro/Calendar.less b/lib/dijit/themes/claro/Calendar.less
new file mode 100644 (file)
index 0000000..ec6aa46
--- /dev/null
@@ -0,0 +1,273 @@
+/* Calendar
+ * 
+ * Styling Calendar mainly includes:
+ * 
+ * 1. Calendar container
+ *             .dijitCalendar - main container
+ *             .dijitCalendarHover / .dijitCalendarActive - states e.g. hover,active
+ * 
+ * 2. Month
+ *             .dijitCalendarMonthContainer
+ *             .dijitCalendarMonthLabel
+ *      .dijitCalendarDecrease / .dijitCalendarDecrease - icons for switching to previous/next month
+ *      .dijitCalendarArrowActive .dijitCalendarDecrease - states e.g. hover,active
+ * 
+ * 3. Date
+ *             .dijitCalendarDayLabelTemplate - week day column header e.g. S M T W T F S
+ *             .dijitCalendarDateTemplate - date label wrapper
+ *             .dijitCalendarPreviousMonth .dijitCalendarDateLabel - special labels for previous or next month
+ *      .dijitCalendarSelectedDate .dijitCalendarDateLabel - styles for selected date
+ *             .dijitCalendarDisabledDate .dijitCalendarDateLabel - styles for disabled date
+ *             .dijitCalendarActiveDate .dijitCalendarDateLabel - states e.g. hover,active
+ * 
+ * 4. Year
+ *             .dijitCalendarYearContainer
+ *             .dijitCalendarYearLabel
+ *             .dijitCalendarPreviousYear /.dijitCalendarNextYear
+ *      .dijitCalendarNextYearHover / .dijitCalendarPreviousYearHover - states e.g. hover,active
+ *      
+ * 5. Dropdown Month Menu
+ *             .dijitCalendarMonthMenu - menu container     
+ *             .dijitCalendarMonthMenu .dijitCalendarMonthLabel - month label in menu item
+ *             .dijitCalendarMonthMenu .dijitCalendarMonthLabelHover - menu item hover state
+ */
+
+@import "variables";
+
+.claro .dijitCalendar {
+       border:solid 1px @border-color;
+       background-color: @calendar-background-color;
+       background-image:url("images/calendarContainerImages.png");
+       background-position:0 -448px;
+       background-repeat:repeat-x;
+       text-align:center;
+       padding:6px 5px 3px 5px;
+       .border-radius(4px);
+}
+.dj_ie6 .claro .dijitCalendar {
+       background-image:none;
+}
+.claro .dijitCalendar img {
+       border:none;
+}
+.claro .dijitCalendarHover,
+.claro .dijitCalendarActive {
+       /* treat dijitCalenderActive like hover since there's
+        * no concept of clicking a Calendar as a whole (although you can click things inside the calendar)
+        */
+       background-color: @hovered-background-color;
+       border:solid 1px @hovered-border-color;
+}
+.claro .dijitCalendarMonthContainer th {
+       text-align:center;
+       padding-bottom:4px;
+       vertical-align:middle;
+}
+.claro .dijitCalendarMonthLabel {
+       color: @text-color;
+       font-size: 1.091em;
+       padding: 0 4px;
+}
+
+/* next/previous month arrows */
+.claro .dijitCalendarIncrementControl {
+       width:18px;
+       height:16px;
+       background-image: url("images/calendarArrows.png");
+       background-repeat: no-repeat;
+}
+.dj_ie6 .claro .dijitCalendarIncrementControl {
+       background-image: url("images/calendarArrows8bit.png");
+}
+.claro .dijitCalendarIncrease {
+       background-position:-18px 0;
+}
+.claro .dijitCalendarArrowHover .dijitCalendarDecrease {
+       background-position:-36px 0;
+}
+.claro .dijitCalendarArrowHover .dijitCalendarIncrease {
+       background-position:-55px 0;
+}
+.claro .dijitCalendarArrowActive .dijitCalendarDecrease {
+       background-position:-72px 0;
+}
+.claro .dijitCalendarArrowActive .dijitCalendarIncrease {
+       background-position:-91px 0;
+}
+.claro .dijitA11ySideArrow {
+       /* text +/- labels instead of arrow icons, for high contrast mode */
+       display: none;
+}
+
+
+.claro .dijitDayLabels th {
+       padding:0 4px 0 4px;
+       font-weight:bold;
+       text-align:center;
+}
+.claro .dijitCalendarDayLabelTemplate {
+       padding-bottom:0;
+       text-align:center;
+       border-bottom:1px solid @border-color;
+       font-size:0.909em;
+       padding:0 3px 2px;
+}
+.claro .dijitCalendarDateTemplate {
+       text-align:center;
+       background-color:@calendar-currentmonth-background-color;
+       background-image:url("images/calendarContainerImages.png");
+       background-position:0 0;
+       background-repeat:repeat-x;
+       border-bottom: 1px solid @minor-border-color;
+       padding-top:0;
+       font-size:0.909em;
+       font-family: Arial;
+       font-weight:bold;
+       letter-spacing:.05em;
+       text-align:center;
+}
+.dj_ie6 .claro .dijitCalendarDateTemplate {
+       background-image: none;
+}
+.claro .dijitCalendarPreviousMonth,
+.claro .dijitCalendarNextMonth {
+       background-color: @calendar-adjacentmonth-background-color;
+       background-image:none;
+       border-bottom:solid 1px @minor-border-color;    /* todo: redundant with above .dijitCalendarDateTemplate rule */        
+}
+.claro .dijitCalendarDateTemplate .dijitCalendarDateLabel {
+       text-decoration:none;
+       display:block;
+       padding:3px 5px 3px 4px;
+       border:solid 1px @calendar-currentmonth-background-color;       /* intentionally matches background-color, no visible border until hover/selection */
+       background-color:rgba(171,212,251,0);   /* transparent causes black-flash animation problem on webkit */
+       .transition-property(background-color, border);
+       .transition-duration(.35s);
+}
+.claro .dijitCalendarPreviousMonth .dijitCalendarDateLabel,
+.claro .dijitCalendarNextMonth .dijitCalendarDateLabel{
+       color: @calendar-adjacentmonth-text-color;
+       border-color: @calendar-adjacentmonth-background-color; /* intentionally matches background-color, no visible border until hover/selection */
+}
+
+.claro .dijitCalendarYearContainer {
+       vertical-align:middle;
+}
+.claro .dijitCalendarYearControl {
+       padding: 1px 2px 2px 2px;
+}
+.claro .dijitCalendarYearLabel {
+       padding:2px 0 0 0;
+       margin:0;
+}
+.claro .dijitCalendarYearLabel span {
+       /* trying to center next/current/previous year vertically, doesn't work on IE6/7 though */
+       vertical-align:middle;
+}
+.claro .dijitCalendarSelectedYear {
+       padding:0 3px;
+}
+.claro .dijitCalendarNextYear,
+.claro .dijitCalendarPreviousYear {
+       padding: 1px 6px 1px 6px;
+       font-size:0.909em;
+}
+.claro .dijitCalendarSelectedYear {
+       font-size:1.091em;
+       color:@selected-text-color;
+}
+/* End Normal Calendar Style */
+/* Hovered Calendar Style */
+.claro .dijitCalendarHoveredDate .dijitCalendarDateLabel{
+       background-color:@hovered-background-color;
+       border:solid 1px @hovered-border-color;
+       color:@hovered-text-color;
+       .transition-duration(.2s);
+}
+.claro .dijitCalendarNextYearHover,
+.claro .dijitCalendarPreviousYearHover {
+       color:@hovered-text-color;
+       border:solid 1px @calendar-button-hovered-border-color;
+       padding: 0 5px 0 5px;   /* reduced by 1 to make room for border */
+       background-color: @calendar-button-hovered-background-color;
+}
+/* End Hovered Calendar Style */
+/* Active Calendar Style */
+.claro .dijitCalendarNextYearActive,
+.claro .dijitCalendarPreviousYearActive {
+       border: solid 1px @calendar-button-pressed-border-color;
+       padding: 0 5px 0 5px;   /* reduced by 1 to make room for border */
+       background-color:@calendar-button-pressed-background-color;
+}
+.claro .dijitCalendarActiveDate .dijitCalendarDateLabel {
+       background-image:url("images/calendarContainerImages.png");
+       background-position:0 -300px;
+       background-color: @calendar-date-pressed-background-color;
+       border:solid 1px @calendar-date-pressed-border-color;
+       .transition-duration(.1s);
+}
+.dj_ie6 .claro .dijitCalendarActiveDate .dijitCalendarDateLabel {
+       background-image:none;
+}
+/* End Active Calendar Style */
+/* Selected Calendar Style */
+.claro .dijitCalendarSelectedDate .dijitCalendarDateLabel {
+       color:@selected-text-color;
+       background-color: @calendar-date-selected-background-color;
+       border-color: @calendar-date-selected-border-color;
+}
+/* End Selected Calendar Style */
+/* Disabled Calendar Style*/
+.claro .dijitCalendarDisabledDate .dijitCalendarDateLabel {
+       text-decoration:line-through;
+       
+       /* override hover effects above, hover and click on disabled date should have no effect */
+       background-color: transparent;
+       border-width: 0;
+       padding: 4px 6px 4px 5px;
+       color: @disabled-text-color;
+}
+
+/* End Disabled Calendar Style */
+
+/* Styling for month DropDownButton */
+
+.claro .dijitCalendar .dijitDropDownButton {
+       margin: 0;
+}
+.claro .dijitCalendar .dijitButtonText {
+       padding: 1px 0 3px;
+       margin-right:-4px;
+}
+.claro .dijitCalendar .dijitDropDownButton .dijitButtonNode {
+       background-color: transparent;
+       background-image: none;
+       padding: 0 3px 0 2px;
+       border:solid 1px @border-color;
+       .box-shadow(0 0 0 rgba(0,0,0,0));
+}
+.claro .dijitCalendar .dijitDropDownButtonHover .dijitButtonNode {
+       background-color: @calendar-button-hovered-background-color;
+       border:solid 1px @calendar-button-hovered-border-color;
+}
+
+/* Styling for month drop down list */
+
+.claro .dijitCalendarMonthMenu {
+       border-color: @popup-border-color;
+       background-color: @menu-background-color;
+       text-align:center;
+       background-image: none;
+}
+.claro .dijitCalendarMonthMenu .dijitCalendarMonthLabel {
+       border-top: solid 1px @menu-background-color;           /* intentionally invisible until hover */
+       border-bottom: solid 1px @menu-background-color;
+       padding: 2px 0;
+}
+.claro .dijitCalendarMonthMenu .dijitCalendarMonthLabelHover {
+       background-color: @hovered-background-color;
+       border-color: @hovered-border-color;
+       border-width:1px 0;
+       background-image: url("images/commonHighlight.png");
+       background-repeat:repeat-x;
+}
index 0f35d60efa27e791854ca1a1b44198c213e68ea9..5892a64bf89d3a358738df2cdbf74e3fcb373d39 100644 (file)
@@ -1,18 +1,18 @@
-.claro .dijitCalendarRtl .dijitCalendarIncrease{
-       background-position: 0px 0px;
+.claro .dijitCalendarRtl .dijitCalendarIncrease {
+  background-position: 0 0;
 }
 .claro .dijitCalendarRtl .dijitCalendarDecrease {
-       background-position: -18px 0px;
+  background-position: -18px 0;
 }
 .claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarIncrease {
-       background-position: -36px 0px;
+  background-position: -36px 0;
 }
 .claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarDecrease {
-       background-position: -55px 0px;
+  background-position: -55px 0;
 }
 .claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarIncrease {
-       background-position: -72px 0px;
+  background-position: -72px 0;
 }
 .claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarDecrease {
-       background-position: -91px 0px;
+  background-position: -91px 0;
 }
diff --git a/lib/dijit/themes/claro/Calendar_rtl.less b/lib/dijit/themes/claro/Calendar_rtl.less
new file mode 100644 (file)
index 0000000..713717b
--- /dev/null
@@ -0,0 +1,19 @@
+.claro .dijitCalendarRtl .dijitCalendarIncrease{
+       background-position: 0 0;
+}
+.claro .dijitCalendarRtl .dijitCalendarDecrease {
+       background-position: -18px 0;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarIncrease {
+       background-position: -36px 0;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarDecrease {
+       background-position: -55px 0;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarIncrease {
+       background-position: -72px 0;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarDecrease {
+       background-position: -91px 0;
+}
+
index 87a25ae2551d5e78fad501c5c4267566e79d60e9..34d1c72b2b9a44b80a4658c05981e9ea3ff3d7f1 100644 (file)
@@ -1,18 +1,41 @@
-
+/* ColorPalette
+ * 
+ * Styling of the ColorPalette consists of the following:
+ * 
+ * 1. the whole color palette
+ *             .dijitColorPalette - for outline, border, and background color of the whole color palette
+ *             Note: outline does not work for IE
+ *
+ * 2. the color swatch 
+ *             .dijitColorPalette .dijitPaletteImg
+ *             transparent (but clickable) <img> node inside of each <td>, overlaying the color swatch.
+ *             displays border around a color swatch
+ *
+ * 3. hovered swatch
+ *             .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg
+ *             the hovered state of the color swatch - adds border
+ *     
+ * 4. active and selected swatch
+ *             .dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg
+ *             .dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg
+ *             adds border for active or selected state
+ */
 .claro  .dijitColorPalette {
-       outline: 1px solid #769dc0; 
-       border: 1px solid #c0ccdf;
-       background:#fff;
-       -moz-border-radius: 0px;
+  border: 1px solid #b5bcc7;
+  background: #ffffff;
+  -moz-border-radius: 0;
+  border-radius: 0;
 }
 .claro .dijitColorPalette .dijitPaletteImg {
-       
-       border: 1px solid #cecece;
+  /* transparent (but clickable) <img> node inside of each <td>, overlaying the color swatch.
+        * displays border around a color swatch
+        * overrides border color in dijit.css */
+
+  border: 1px solid #d3d3d3;
 }
 .claro .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       border: 1px solid #000;
+  border: 1px solid #000000;
 }
-.claro .dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
-.claro .dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
-       border: 2px solid #000;
+.claro .dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg, .claro .dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
+  border: 2px solid #000000;
 }
diff --git a/lib/dijit/themes/claro/ColorPalette.less b/lib/dijit/themes/claro/ColorPalette.less
new file mode 100644 (file)
index 0000000..e032733
--- /dev/null
@@ -0,0 +1,44 @@
+/* ColorPalette
+ * 
+ * Styling of the ColorPalette consists of the following:
+ * 
+ * 1. the whole color palette
+ *             .dijitColorPalette - for outline, border, and background color of the whole color palette
+ *             Note: outline does not work for IE
+ *
+ * 2. the color swatch 
+ *             .dijitColorPalette .dijitPaletteImg
+ *             transparent (but clickable) <img> node inside of each <td>, overlaying the color swatch.
+ *             displays border around a color swatch
+ *
+ * 3. hovered swatch
+ *             .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg
+ *             the hovered state of the color swatch - adds border
+ *     
+ * 4. active and selected swatch
+ *             .dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg
+ *             .dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg
+ *             adds border for active or selected state
+ */
+
+@import "variables";
+
+.claro  .dijitColorPalette {
+       border: 1px solid @border-color;
+       background: @colorpalette-background-color;
+       .border-radius(0);
+}
+
+.claro .dijitColorPalette .dijitPaletteImg {
+       /* transparent (but clickable) <img> node inside of each <td>, overlaying the color swatch.
+        * displays border around a color swatch
+        * overrides border color in dijit.css */
+       border: 1px solid @minor-border-color;
+}
+.claro .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+       border: 1px solid @swatch-hovered-border-color;
+}
+.claro .dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
+.claro .dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
+       border: 2px solid @swatch-selected-border-color;
+}
index dd68ce14c5fc360fdbffb4fd45fcae9433f34a90..110b303e2b0e2257468ef379e7540cc6b023c80a 100644 (file)
@@ -1,70 +1,75 @@
-
+/* ========= Styling rules to affect widgets ========= */
 .claro .dijitPopup {
-       box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
-       -webkit-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
-       -moz-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
+  -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25);
+  -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25);
+  box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25);
 }
 .claro .dijitTooltipDialogPopup {
-       
-       box-shadow: none;
-       -webkit-box-shadow: none;
-       -moz-box-shadow: none;
+  /* exception popups: do not use a shadow on these because they aren't rectangular */
+
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
 }
+/* The highlight is shown in the ComboBox menu.  TODO: move to form/Common.less */
 .claro .dijitComboBoxHighlightMatch {
-       background-color:#a5beda;
+  background-color: #abd6ff;
 }
 .claro .dijitFocusedLabel {
-       
-       outline: 1px dotted #666666;
+  /* for checkboxes or radio buttons, hatch border around the corresponding label, to indicate focus */
+
+  outline: 1px dotted #4a4a4a;
 }
 .claro .dijitContentPaneLoading {
-       background:url('images/loadingAnimation.gif') no-repeat left center;
-       padding-left:25px;
+  background: url('images/loadingAnimation.gif') no-repeat left center;
+  padding-left: 25px;
 }
+/* .dijitContentPaneError icon renders in a dialog box with the error messsage when  there is an error in a HREF url */
 .claro .dijitContentPaneError {
-    background:url('../../icons/images/commonIconsObjActEnabled.png') no-repeat left center;
-    background-position: -496px; 
-       no-repeat left center;
-       padding-left:25px;
+  background: url('../../icons/images/commonIconsObjActEnabled.png') no-repeat left center;
+  background-position: -496px;
+  padding-left: 25px;
 }
-.claro .dojoDndItemBefore,
-.claro .dojoDndItemAfter{
-       border-top: 1px solid #769DC0;
+/* Drag and Drop */
+.claro .dojoDndItemBefore, .claro .dojoDndItemAfter {
+  border-top: 1px solid #769dc0;
 }
 .claro .dojoDndItemOver {
-       cursor:pointer;
-       }
+  cursor: pointer;
+}
 .claro table.dojoDndAvatar {
-       border: 1px solid #b5bcc7;
-       border-collapse: collapse;
-       background-color: #fff;
-       -webkit-box-shadow:0px 1px 3px rgba(0, 0, 0, .25);
+  border: 1px solid #b5bcc7;
+  border-collapse: collapse;
+  background-color: #ffffff;
+  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
+  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
 }
-.claro .dojoDndAvatarHeader td { 
-       height: 20px;
-       padding-left:21px;
+.claro .dojoDndAvatarHeader td {
+  height: 20px;
+  padding-left: 21px;
 }
 .claro.dojoDndMove .dojoDndAvatarHeader, .claro.dojoDndCopy .dojoDndAvatarHeader {
-       background-image: url(images/dnd.png);
-       background-repeat: no-repeat;
-       background-position:2px -122px;
+  background-image: url(images/dnd.png);
+  background-repeat: no-repeat;
+  background-position: 2px -122px;
 }
 .claro .dojoDndAvatarItem td {
-       padding: 5px;
+  padding: 5px;
 }
-.claro.dojoDndMove .dojoDndAvatarHeader        {
-       background-color: #f58383; 
-       background-position:2px -103px;
+.claro.dojoDndMove .dojoDndAvatarHeader {
+  background-color: #f58383;
+  background-position: 2px -103px;
 }
-.claro.dojoDndCopy .dojoDndAvatarHeader        {
-       background-color: #f58383; 
-       background-position:2px -68px;
+.claro.dojoDndCopy .dojoDndAvatarHeader {
+  background-color: #f58383;
+  background-position: 2px -68px;
 }
-.claro.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader  {
-       background-color: #97e68d; 
-       background-position:2px -33px;
+.claro.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {
+  background-color: #97e68d;
+  background-position: 2px -33px;
 }
-.claro.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader  {
-       background-color: #97e68d;
-       background-position:2px 2px;
+.claro.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {
+  background-color: #97e68d;
+  background-position: 2px 2px;
 }
diff --git a/lib/dijit/themes/claro/Common.less b/lib/dijit/themes/claro/Common.less
new file mode 100644 (file)
index 0000000..872cf89
--- /dev/null
@@ -0,0 +1,76 @@
+/* ========= Styling rules to affect widgets ========= */
+
+@import "variables";
+
+.claro .dijitPopup {
+       .box-shadow(0 1px 5px rgba(0,0,0,0.25));
+}
+.claro .dijitTooltipDialogPopup {
+       /* exception popups: do not use a shadow on these because they aren't rectangular */
+       .box-shadow(none);
+}
+
+/* The highlight is shown in the ComboBox menu.  TODO: move to form/Common.less */
+.claro .dijitComboBoxHighlightMatch {
+       background-color: @select-matchedtext-background-color;
+}
+
+.claro .dijitFocusedLabel {
+       /* for checkboxes or radio buttons, hatch border around the corresponding label, to indicate focus */
+       outline: 1px dotted @focus-outline-color;
+}
+
+.claro .dijitContentPaneLoading {
+       background:url('images/loadingAnimation.gif') no-repeat left center;
+       padding-left:25px;
+}
+
+/* .dijitContentPaneError icon renders in a dialog box with the error messsage when  there is an error in a HREF url */
+.claro .dijitContentPaneError {
+    background:url('../../icons/images/commonIconsObjActEnabled.png') no-repeat left center;
+    background-position: -496px; 
+       padding-left:25px;
+}
+
+/* Drag and Drop */
+.claro .dojoDndItemBefore,
+.claro .dojoDndItemAfter{
+       border-top: 1px solid @dnd-dropseparator-color;
+}
+.claro .dojoDndItemOver {
+       cursor:pointer;
+       }
+.claro table.dojoDndAvatar {
+       border: 1px solid @border-color;
+       border-collapse: collapse;
+       background-color: @dnd-avatar-background-color;
+       .box-shadow(0 1px 3px rgba(0, 0, 0, .25));
+}
+.claro .dojoDndAvatarHeader td { 
+       height: 20px;
+       padding-left:21px;
+}
+.claro.dojoDndMove .dojoDndAvatarHeader, .claro.dojoDndCopy .dojoDndAvatarHeader {
+       background-image: url(images/dnd.png);
+       background-repeat: no-repeat;
+       background-position:2px -122px;
+}
+.claro .dojoDndAvatarItem td {
+       padding: 5px;
+}
+.claro.dojoDndMove .dojoDndAvatarHeader        {
+       background-color: @dnd-avatar-header-background-color; 
+       background-position:2px -103px;
+}
+.claro.dojoDndCopy .dojoDndAvatarHeader        {
+       background-color: @dnd-avatar-header-background-color; 
+       background-position:2px -68px;
+}
+.claro.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader  {
+       background-color: @dnd-avatar-candrop-header-background-color; 
+       background-position:2px -33px;
+}
+.claro.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader  {
+       background-color: @dnd-avatar-candrop-header-background-color;
+       background-position:2px 2px;
+}
index 10b513485fd1c51bba5d56feebcfe1cbbfb4d4e1..119900eca044924bfaa3a4bdffb75eb8b0cf196d 100644 (file)
-
+/* Dialog 
+ * 
+ * Styling Dialog includes two sections: Dialog and Tooltip & TooltipDialog
+ * 
+ * Dialog:
+ * 1. Dialog (default styling): 
+ *             .dijitDialog - styles for dialog's bounding box
+ *
+ * 2. Dialog title 
+ *             .dijitDialogTitleBar - styles for the title container at the top of dialog
+ *             .dijitDialogTitle - the text container in dialog title
+ * 
+ * 3. Dialog content 
+ *             .dijitDialogPaneContent - main container for content area and action bar
+ *             .dijitDialogPaneContentArea - styles for content container
+ * 
+ * 4. Dialog action bar 
+ *             .dijitDialogPaneActionBar - styles for action buttons lie at the bottom of dialog pane content
+ * 
+ * 5. Dialog underlay 
+ *             .dijitDialogUnderlay - div under the dialog which used for separate dialog and page content
+ * 
+ * 
+ * Tooltip & TooltipDialog:
+ * 1. tooltip content container: 
+ *             .dijitTooltipContainer - tooltip content container
+ *
+ * 2. tooltip connector: 
+ *             .dijitTooltipConnector - tooltip anchor includes 4 direction(up, down, left, right)
+ */
 .claro .dijitDialog {
-       border: 1px solid #769dc0;
-       box-shadow:0px 1px 5px rgba(0,0,0,0.25);
-       -webkit-box-shadow:0px 1px 5px rgba(0,0,0,0.25);
-       -moz-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
-} 
+  border: 1px solid #769dc0;
+  -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25);
+  -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25);
+  box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25);
+}
 .claro .dijitDialogPaneContent {
-       background: #fff repeat-x top left;
-       border-top: 1px solid #769dc0;
-       padding:10px 8px;
-       position: relative;
+  background: #ffffff repeat-x top left;
+  border-top: 1px solid #769dc0;
+  padding: 10px 8px;
+  position: relative;
 }
 .claro .dijitDialogPaneContentArea {
-        
-       margin: -10px -8px;
-       padding: 10px 8px;
+  /* trick to get action bar (gray bar at bottom with OK/cancel buttons) to span from
+        * left to right but still indent dialog content
+        */
+  margin: -10px -8px;
+  padding: 10px 8px;
 }
 .claro .dijitDialogPaneActionBar {
-       
-       background-color: #f2f2f2;
-       padding: 3px 5px 2px 7px;
-       text-align: right;
-       border-top: 1px solid #cdcdcd;
-       margin: 10px -8px -10px;
+  /* gray bar at bottom of dialog with OK/Cancel buttons */
+
+  background-color: #efefef;
+  padding: 3px 5px 2px 7px;
+  text-align: right;
+  border-top: 1px solid #d3d3d3;
+  margin: 10px -8px -10px;
 }
 .claro .dijitDialogPaneActionBar .dijitButton {
-       float: none;
+  float: none;
 }
 .claro .dijitDialogTitleBar {
-       
-       border: 1px solid #fff;
-       border-top:none;
-       background-color: #abd6ff;
-       background-image: url("images/titlebar.png");
-       background-repeat:repeat-x;
-       padding: 5px 7px 4px 7px;
+  /* outer container for the titlebar of the dialog */
+
+  border: 1px solid #ffffff;
+  border-top: none;
+  background-color: #abd6ff;
+  background-image: url("images/titlebar.png");
+  background-repeat: repeat-x;
+  padding: 5px 7px 4px 7px;
 }
 .claro .dijitDialogTitle {
-       
-       padding: 0px 1px;
-       font-size:1.091em;
+  /* typography and styling of the dialog title */
+
+  padding: 0 1px;
+  font-size: 1.091em;
 }
 .claro .dijitDialogCloseIcon {
-       
-       background: url("images/dialogCloseIcon.png");
-       background-repeat:no-repeat;
-       position: absolute;
-       right: 5px;
-       height: 15px;
-       width: 21px;
+  /* the default close icon for the dialog */
+
+  background: url("images/dialogCloseIcon.png");
+  background-repeat: no-repeat;
+  position: absolute;
+  right: 5px;
+  height: 15px;
+  width: 21px;
 }
 .dj_ie6 .claro .dijitDialogCloseIcon {
-       background-image: url("images/dialogCloseIcon8bit.png");
+  background-image: url("images/dialogCloseIcon8bit.png");
 }
 .claro .dijitDialogCloseIconHover {
-       background-position:-21px;
+  background-position: -21px;
 }
 .claro .dijitDialogCloseIconActive {
-       background-position:-42px;
+  background-position: -42px;
 }
-.claro .dijitTooltip,
-.claro .dijitTooltipDialog {
-       
-       background: transparent;        
+/* Tooltip and TooltipDialog */
+.claro .dijitTooltip, .claro .dijitTooltipDialog {
+  /* the outermost dom node, holding the connector and container */
+
+  background: transparent;
+  /* make the area on the sides of the arrow transparent */
+
 }
 .dijitTooltipBelow {
-       
-       padding-top: 13px;
-       padding-left:3px;
-       padding-right:3px;
+  /* leave room for arrow above content */
+
+  padding-top: 13px;
+  padding-left: 3px;
+  padding-right: 3px;
 }
 .dijitTooltipAbove {
-       
-       padding-bottom: 13px;
-       padding-left:3px;
-       padding-right:3px;
+  /* leave room for arrow below content */
+
+  padding-bottom: 13px;
+  padding-left: 3px;
+  padding-right: 3px;
 }
 .claro .dijitTooltipContainer {
-       
-       background-color:#fff;
-       background-image:url("images/tooltip.png");
-       background-repeat:repeat-x;
-       background-position:-575px 100%;
-       border:1px solid #769DC0;
-       padding:6px 8px;
-       border-radius: 4px;
-       -webkit-border-radius: 4px;
-       -moz-border-radius: 4px;
-       box-shadow:0px 1px 3px rgba(0,0,0,0.25);
-       -webkit-box-shadow:0px 1px 3px rgba(0,0,0,0.25);
-       -moz-box-shadow: 0px 1px 3px rgba(0,0,0,0.25);
-       font-size: 1em;
-} 
+  /* the part with the text */
+
+  background-color: #ffffff;
+  background-image: url("images/tooltipGradient.png");
+  background-repeat: repeat-x;
+  background-position: bottom;
+  border: 1px solid #769dc0;
+  padding: 6px 8px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
+  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
+  font-size: 1em;
+}
 .dj_ie6 .claro .dijitTooltipContainer {
-       background-image: none;
+  background-image: none;
 }
 .claro .dijitTooltipConnector {
-       
-       border: 0px;
-       z-index: 2;
-       background-image:url("images/tooltip.png");
-       background-repeat:no-repeat;
-       width:16px;
-       height:14px;
+  /* the arrow piece */
+
+  border: 0;
+  z-index: 2;
+  background-image: url("images/tooltip.png");
+  background-repeat: no-repeat;
+  width: 16px;
+  height: 14px;
 }
 .dj_ie6 .claro .dijitTooltipConnector {
-       background-image:url("images/tooltip8bit.png");
+  background-image: url("images/tooltip8bit.png");
 }
 .claro .dijitTooltipABRight .dijitTooltipConnector {
-       
-       left: auto !important;
-       right: 3px;
+  /* above or below tooltip, but the arrow appears on the right,
+               and the right edges of target and tooltip are aligned rather than the left */
+
+  left: auto !important;
+  right: 3px;
 }
 .claro .dijitTooltipBelow .dijitTooltipConnector {
-       
-       top: 0px;
-       left: 3px;
-       background-position:-31px 0%;
-       width:16px;
-       height:14px;
+  /* the arrow piece for tooltips below an element */
+
+  top: 0;
+  left: 3px;
+  background-position: -31px 0;
+  width: 16px;
+  height: 14px;
 }
 .claro .dijitTooltipAbove .dijitTooltipConnector {
-       
-       bottom: 0px;
-       left: 3px;
-       background-position:-15px 0%;
-       width:16px;
-       height:14px;
+  /* the arrow piece for tooltips above an element */
+
+  bottom: 0;
+  left: 3px;
+  background-position: -15px 0;
+  width: 16px;
+  height: 14px;
 }
-.dj_ie7 .claro .dijitTooltipAbove .dijitTooltipConnector,
-.dj_ie6 .claro .dijitTooltipAbove .dijitTooltipConnector {
-       bottom: -1px;
+.dj_ie7 .claro .dijitTooltipAbove .dijitTooltipConnector, .dj_ie6 .claro .dijitTooltipAbove .dijitTooltipConnector {
+  bottom: -1px;
 }
 .claro .dijitTooltipLeft {
-       padding-right: 14px;
-}
-.dj_ie6 .claro .dijitTooltipLeft {
-       padding-left: 15px;
+  padding-right: 14px;
 }
 .claro .dijitTooltipLeft .dijitTooltipConnector {
-       
-       right: 0px;
-       bottom: 3px;
-       background-position:0px 0%;
-       width:16px;
-       height:14px;
+  /* the arrow piece for tooltips to the left of an element, bottom borders aligned */
+
+  right: 0;
+  background-position: 0 0;
+  width: 16px;
+  height: 14px;
 }
 .claro .dijitTooltipRight {
-       padding-left: 14px;
+  padding-left: 14px;
 }
 .claro .dijitTooltipRight .dijitTooltipConnector {
-       
-       left: 0px;
-       bottom: 3px;
-       background-position:-48px 0%;
-       width:16px;
-       height:14px;
+  /* the arrow piece for tooltips to the right of an element, bottom borders aligned */
+
+  left: 0;
+  background-position: -48px 0;
+  width: 16px;
+  height: 14px;
 }
 .claro .dijitDialogUnderlay {
-       background: #fff;
+  background: #ffffff;
 }
diff --git a/lib/dijit/themes/claro/Dialog.less b/lib/dijit/themes/claro/Dialog.less
new file mode 100644 (file)
index 0000000..ff5c1e6
--- /dev/null
@@ -0,0 +1,203 @@
+/* Dialog 
+ * 
+ * Styling Dialog includes two sections: Dialog and Tooltip & TooltipDialog
+ * 
+ * Dialog:
+ * 1. Dialog (default styling): 
+ *             .dijitDialog - styles for dialog's bounding box
+ *
+ * 2. Dialog title 
+ *             .dijitDialogTitleBar - styles for the title container at the top of dialog
+ *             .dijitDialogTitle - the text container in dialog title
+ * 
+ * 3. Dialog content 
+ *             .dijitDialogPaneContent - main container for content area and action bar
+ *             .dijitDialogPaneContentArea - styles for content container
+ * 
+ * 4. Dialog action bar 
+ *             .dijitDialogPaneActionBar - styles for action buttons lie at the bottom of dialog pane content
+ * 
+ * 5. Dialog underlay 
+ *             .dijitDialogUnderlay - div under the dialog which used for separate dialog and page content
+ * 
+ * 
+ * Tooltip & TooltipDialog:
+ * 1. tooltip content container: 
+ *             .dijitTooltipContainer - tooltip content container
+ *
+ * 2. tooltip connector: 
+ *             .dijitTooltipConnector - tooltip anchor includes 4 direction(up, down, left, right)
+ */
+
+@import "variables";
+
+.claro .dijitDialog {
+       border: 1px solid @popup-border-color;
+       .box-shadow(0 1px 5px rgba(0,0,0,0.25));
+} 
+
+.claro .dijitDialogPaneContent {
+       background: @pane-background-color repeat-x top left;
+       border-top: 1px solid @popup-border-color;
+       padding:10px 8px;
+       position: relative;
+}
+
+.claro .dijitDialogPaneContentArea {
+       /* trick to get action bar (gray bar at bottom with OK/cancel buttons) to span from
+        * left to right but still indent dialog content
+        */ 
+       margin: -10px -8px;
+       padding: 10px 8px;
+}
+
+.claro .dijitDialogPaneActionBar {
+       /* gray bar at bottom of dialog with OK/Cancel buttons */
+       background-color: @bar-background-color;
+       padding: 3px 5px 2px 7px;
+       text-align: right;
+       border-top: 1px solid @minor-border-color;
+       margin: 10px -8px -10px;
+}
+.claro .dijitDialogPaneActionBar .dijitButton {
+       float: none;
+}
+
+.claro .dijitDialogTitleBar {
+       /* outer container for the titlebar of the dialog */
+       border: 1px solid @dialog-titlebar-border-color;
+       border-top:none;
+       background-color: @dialog-titlebar-background-color;
+       background-image: url("images/titlebar.png");
+       background-repeat:repeat-x;
+       padding: 5px 7px 4px 7px;
+}
+
+.claro .dijitDialogTitle {
+       /* typography and styling of the dialog title */
+       padding: 0 1px;
+       font-size:1.091em;
+}
+
+.claro .dijitDialogCloseIcon {
+       /* the default close icon for the dialog */
+       background: url("images/dialogCloseIcon.png");
+       background-repeat:no-repeat;
+       position: absolute;
+       right: 5px;
+       height: 15px;
+       width: 21px;
+}
+.dj_ie6 .claro .dijitDialogCloseIcon {
+       background-image: url("images/dialogCloseIcon8bit.png");
+}
+.claro .dijitDialogCloseIconHover {
+       background-position:-21px;
+}
+.claro .dijitDialogCloseIconActive {
+       background-position:-42px;
+}
+
+/* Tooltip and TooltipDialog */
+
+.claro .dijitTooltip,
+.claro .dijitTooltipDialog {
+       /* the outermost dom node, holding the connector and container */
+       background: transparent;        /* make the area on the sides of the arrow transparent */
+}
+.dijitTooltipBelow {
+       /* leave room for arrow above content */
+       padding-top: 13px;
+       padding-left:3px;
+       padding-right:3px;
+}
+
+.dijitTooltipAbove {
+       /* leave room for arrow below content */
+       padding-bottom: 13px;
+       padding-left:3px;
+       padding-right:3px;
+}
+
+.claro .dijitTooltipContainer {
+       /* the part with the text */
+       background-color:@popup-background-color;
+       background-image:url("images/tooltipGradient.png");
+       background-repeat:repeat-x;
+       background-position:bottom;
+       border:1px solid @popup-border-color;
+       padding:6px 8px;
+       .border-radius(4px);
+       .box-shadow(0 1px 3px rgba(0,0,0,0.25));
+       font-size: 1em;
+} 
+
+.dj_ie6 .claro .dijitTooltipContainer {
+       background-image: none;
+}
+.claro .dijitTooltipConnector {
+       /* the arrow piece */
+       border: 0;
+       z-index: 2;
+       background-image:url("images/tooltip.png");
+       background-repeat:no-repeat;
+       width:16px;
+       height:14px;
+}
+.dj_ie6 .claro .dijitTooltipConnector {
+       background-image:url("images/tooltip8bit.png");
+}
+.claro .dijitTooltipABRight .dijitTooltipConnector {
+       /* above or below tooltip, but the arrow appears on the right,
+               and the right edges of target and tooltip are aligned rather than the left */
+       left: auto !important;
+       right: 3px;
+}
+
+.claro .dijitTooltipBelow .dijitTooltipConnector {
+       /* the arrow piece for tooltips below an element */
+       top: 0;
+       left: 3px;
+       background-position:-31px 0;
+       width:16px;
+       height:14px;
+}
+
+.claro .dijitTooltipAbove .dijitTooltipConnector {
+       /* the arrow piece for tooltips above an element */
+       bottom: 0;
+       left: 3px;
+       background-position:-15px 0;
+       width:16px;
+       height:14px;
+}
+.dj_ie7 .claro .dijitTooltipAbove .dijitTooltipConnector,
+.dj_ie6 .claro .dijitTooltipAbove .dijitTooltipConnector {
+       bottom: -1px;
+}
+
+.claro .dijitTooltipLeft {
+       padding-right: 14px;
+}
+.claro .dijitTooltipLeft .dijitTooltipConnector {
+       /* the arrow piece for tooltips to the left of an element, bottom borders aligned */
+       right: 0;
+       background-position:0 0;
+       width:16px;
+       height:14px;
+}
+
+.claro .dijitTooltipRight {
+       padding-left: 14px;
+}
+.claro .dijitTooltipRight .dijitTooltipConnector {
+       /* the arrow piece for tooltips to the right of an element, bottom borders aligned */
+       left: 0;
+       background-position:-48px 0;
+       width:16px;
+       height:14px;
+}
+
+.claro .dijitDialogUnderlay {
+       background: @dialog-underlay-color;
+}
index 7bb72e75a459b8775e1f4426a50543803afeac19..34930eb644962694322e95b4943ab1eccc145614 100644 (file)
@@ -1,9 +1,9 @@
-
+/* Dialog */
 .claro .dijitDialogRtl .dijitDialogCloseIcon {
-       right: auto;
-       left: 5px;
+  right: auto;
+  left: 5px;
 }
 .claro .dijitDialogRtl .dijitDialogPaneActionBar {
-       text-align: left;
-       padding: 3px 7px 2px 5px;
+  text-align: left;
+  padding: 3px 7px 2px 5px;
 }
diff --git a/lib/dijit/themes/claro/Dialog_rtl.less b/lib/dijit/themes/claro/Dialog_rtl.less
new file mode 100644 (file)
index 0000000..452fe93
--- /dev/null
@@ -0,0 +1,13 @@
+/* Dialog */
+
+@import "variables";
+
+.claro .dijitDialogRtl .dijitDialogCloseIcon {
+       right: auto;
+       left: 5px;
+}
+
+.claro .dijitDialogRtl .dijitDialogPaneActionBar {
+       text-align: left;
+       padding: 3px 7px 2px 5px;
+}
index b9af7e7982834f6a091bf7b14e628396599d425f..641990a09b7f886ecd44b51eee3c06bdaa9a99cd 100644 (file)
@@ -1,36 +1,50 @@
-
-.claro .dijitEditorIFrameContainer{
-       padding:3px 3px 1px 10px;
+/* Editor 
+ * 
+ * Styling Editor means styling the Editor inside iframe container (dijitEditorIFrameContainer)
+ * 
+ * 1. Editor iframe container (default styling): 
+ *             .dijitEditorIFrameContainer - normal state styles: background-color, border, padding
+ *
+ * 2. hovered Editor iframe container (ie, mouse hover on editor)
+ *             .dijitEditorHover .dijitEditorIFrameContainer/dijitEditorIFrame - styles when mouse hover on the container
+ * 
+ * 3. focused Editor iframe container (ie, mouse focus on the editor pane)
+ *             .dijitEditorFocused .dijitEditorIFrameContainer/dijitEditorIFrame - styles when container focused
+ * 
+ * 3. disabled Editor iframe container 
+ *             .dijitEditorDisabled - editor's inner iframe container disable status styles: background, border
+ */
+.claro .dijitEditorIFrameContainer {
+  padding: 3px 3px 1px 10px;
 }
 .claro .dijitEditorIFrame {
-       background-color: #fff;
+  background-color: #ffffff;
 }
 .claro .dijitEditor {
-       border: 1px solid #b5bcc7;
+  border: 1px solid #b5bcc7;
 }
-.claro .dijitEditor .dijitEditorIFrameContainer{
-       background-color: #fff;
-       background-image: url('form/images/textBox_back.png');
-       background-repeat:repeat-x;
+.claro .dijitEditor .dijitEditorIFrameContainer {
+  background-color: #ffffff;
+  background-image: url('form/images/textBox_back.png');
+  background-repeat: repeat-x;
 }
-.dj_ie6 .claro .dijitEditor .dijitEditorIFrameContainer{
-       background-image: none;
+.dj_ie6 .claro .dijitEditor .dijitEditorIFrameContainer {
+  background-image: none;
 }
-.claro .dijitEditorHover .dijitEditorIFrameContainer,
-.claro .dijitEditorHover .dijitEditorIFrameContainer .dijitEditorIFrame{
-       background-color: #eef7ff;
+.claro .dijitEditorHover .dijitEditorIFrameContainer, .claro .dijitEditorHover .dijitEditorIFrameContainer .dijitEditorIFrame {
+  background-color: #e9f4fe;
 }
-.claro .dijitEditorFocused .dijitEditorIFrameContainer,
-.claro .dijitEditorFocused .dijitEditorIFrameContainer .dijitEditorIFrame{
-       
-       background-color: #fff;
+.claro .dijitEditorFocused .dijitEditorIFrameContainer, .claro .dijitEditorFocused .dijitEditorIFrameContainer .dijitEditorIFrame {
+  /* TODO: contradicts rule above, which background-color do you want? */
+
+  background-color: #ffffff;
 }
+/* Disabled */
 .claro .dijitEditorDisabled {
-       border: 1px solid #d3d3d3;
-       color: #818181;
+  border: 1px solid #d3d3d3;
+  color: #818181;
 }
-.claro .dijitDisabled .dijitEditorIFrame,
-.claro .dijitDisabled .dijitEditorIFrameContainer {
-       background-color: #efefef;
-       background-image: none;
+.claro .dijitDisabled .dijitEditorIFrame, .claro .dijitDisabled .dijitEditorIFrameContainer, .claro .dijitDisabled .dijitEditorIFrameContainer .dijitEditorIFrame {
+  background-color: #efefef;
+  background-image: none;
 }
diff --git a/lib/dijit/themes/claro/Editor.less b/lib/dijit/themes/claro/Editor.less
new file mode 100644 (file)
index 0000000..43e6d39
--- /dev/null
@@ -0,0 +1,59 @@
+/* Editor 
+ * 
+ * Styling Editor means styling the Editor inside iframe container (dijitEditorIFrameContainer)
+ * 
+ * 1. Editor iframe container (default styling): 
+ *             .dijitEditorIFrameContainer - normal state styles: background-color, border, padding
+ *
+ * 2. hovered Editor iframe container (ie, mouse hover on editor)
+ *             .dijitEditorHover .dijitEditorIFrameContainer/dijitEditorIFrame - styles when mouse hover on the container
+ * 
+ * 3. focused Editor iframe container (ie, mouse focus on the editor pane)
+ *             .dijitEditorFocused .dijitEditorIFrameContainer/dijitEditorIFrame - styles when container focused
+ * 
+ * 3. disabled Editor iframe container 
+ *             .dijitEditorDisabled - editor's inner iframe container disable status styles: background, border
+ */
+
+@import "variables";
+
+.claro .dijitEditorIFrameContainer{
+       padding:3px 3px 1px 10px;
+}
+.claro .dijitEditorIFrame {
+       background-color: @textbox-background-color;
+}
+.claro .dijitEditor {
+       border: 1px solid @border-color;
+}
+.claro .dijitEditor .dijitEditorIFrameContainer{
+       background-color: @textbox-background-color;
+       background-image: url('form/images/textBox_back.png');
+       background-repeat:repeat-x;
+}
+.dj_ie6 .claro .dijitEditor .dijitEditorIFrameContainer{
+       background-image: none;
+}
+.claro .dijitEditorHover .dijitEditorIFrameContainer,
+.claro .dijitEditorHover .dijitEditorIFrameContainer .dijitEditorIFrame{
+       background-color: @textbox-hovered-background-color;
+}
+.claro .dijitEditorFocused .dijitEditorIFrameContainer,
+.claro .dijitEditorFocused .dijitEditorIFrameContainer .dijitEditorIFrame{
+       /* TODO: contradicts rule above, which background-color do you want? */
+       background-color: @textbox-focused-background-color;
+}
+
+
+/* Disabled */
+.claro .dijitEditorDisabled {
+       border: 1px solid @disabled-border-color;
+       color: @disabled-text-color;
+}
+
+.claro .dijitDisabled .dijitEditorIFrame,
+.claro .dijitDisabled .dijitEditorIFrameContainer,
+.claro .dijitDisabled .dijitEditorIFrameContainer .dijitEditorIFrame {
+       background-color: @textbox-disabled-background-color;
+       background-image: none;
+}
\ No newline at end of file
index b09efaac83cbeb9f25dec5b49cf03926c37fd45a..f633558670829c4416e321fd520162118f5a473f 100644 (file)
@@ -1,4 +1,4 @@
-
-.claro .dijitEditorRtl .dijitEditorIFrameContainer{
-       padding:3px 10px 1px 3px;
+/* Editor */
+.claro .dijitEditorRtl .dijitEditorIFrameContainer {
+  padding: 3px 10px 1px 3px;
 }
diff --git a/lib/dijit/themes/claro/Editor_rtl.less b/lib/dijit/themes/claro/Editor_rtl.less
new file mode 100644 (file)
index 0000000..8ebc013
--- /dev/null
@@ -0,0 +1,9 @@
+/* Editor */
+
+@import "variables";
+
+.claro .dijitEditorRtl .dijitEditorIFrameContainer{
+       padding:3px 10px 1px 3px;
+}
+
+
index b92c24e97ce26443c42279e402eb22d45ed51795..e6058f7800728dd14dc4ded98fa3930273d49625 100644 (file)
@@ -1,11 +1,20 @@
-
+/* InlineEditBox
+ * 
+ * Styling InlineEditBox mainly includes:
+ * 
+ * 1. Normal state
+ *             .dijitInlineEditBoxDisplayMode  - for border
+ * 
+ * 2. Hover state
+ *             .dijitInlineEditBoxDisplayModeHover - for border and background color
+ */
 .claro .dijitInlineEditBoxDisplayMode {
-       border: 1px solid transparent;
+  border: 1px solid transparent;
 }
 .claro .dijitInlineEditBoxDisplayModeHover {
-       background-color: #e2f1ff;
-       border: solid 1px #769dc0;
+  background-color: #e9f4fe;
+  border: solid 1px #769dc0;
 }
 .dj_ie6 .claro .dijitInlineEditBoxDisplayMode {
-       border: none;
+  border: none;
 }
diff --git a/lib/dijit/themes/claro/InlineEditBox.less b/lib/dijit/themes/claro/InlineEditBox.less
new file mode 100644 (file)
index 0000000..a7162be
--- /dev/null
@@ -0,0 +1,25 @@
+/* InlineEditBox
+ * 
+ * Styling InlineEditBox mainly includes:
+ * 
+ * 1. Normal state
+ *             .dijitInlineEditBoxDisplayMode  - for border
+ * 
+ * 2. Hover state
+ *             .dijitInlineEditBoxDisplayModeHover - for border and background color
+ */
+
+@import "variables";
+
+.claro .dijitInlineEditBoxDisplayMode {
+       border: 1px solid transparent;
+}
+
+.claro .dijitInlineEditBoxDisplayModeHover {
+       background-color: @textbox-hovered-background-color;
+       border: solid 1px @hovered-border-color;
+}
+
+.dj_ie6 .claro .dijitInlineEditBoxDisplayMode {
+       border: none;
+}
index 4bb0be6e0504debe3dc2dae7dbff7a580d053d98..c55176d54cafbd2aaee7758a4b9fd58e5cc027ab 100644 (file)
+/* Menu 
 
+There are three areas of styling for the Menu:  
+ 1. The menu 
+       There are three types of menus:
+       i)Context Menu
+       ii)Drop down Menu
+       iii) Navigation Menu
+       All three types of menus are affected by the .dijitMenu class in which you can set the background-color, padding and border
+       .dijitMenu affects the drop down menu in TimeTextBox, Calendar, ComboBox and FilteringSelect
+  .dijitMenuTable - for padding - also affects Select widget   
+       
+ 2. The menu bar
+       .dijitMenuBar - for border, margins, padding, background-color of the menu bar
+       .dijitMenuBar .dijitMenuItem - for padding, text color of menu items in the menu bar (overrides .dijitMenuItem) 
+       
+ 3. Menu items - items in the menu.  
+       .dijitMenuItem - for color
+       .dijitMenuItemHover, .dijitMenuItemSelected - for background-color, border, text color, padding of a menu item or menubar item that has been hovered over or selected   
+       .dijitMenuItemActive - for bacgkround-color of an active (mousedown) menu item
+       td.dijitMenuItemIconCell - for padding around a  menu item's icon
+       td.dijitMenuItemLabel - for padding around a menu item's label  
+       .dijitMenuSeparatorTop - for border, top border, of the separator
+       .dijitMenuSeparatorBottom - for bottom margin of the separator
+       
+       Styles specific to ComboBox and FilteringSelect widgets: 
+       .dijitComboBoxMenu .dijitMenuItem - for padding and border of a menu item in a ComboBox or FilteringSelect widget's menu
+       .dijitComboBoxMenu .dijitMenuItemSelected- for text color, background-color and border of a menu item in a ComboBox or FilteringSelect widget's menu
+
+*/
 .claro .dijitMenuBar {
-       border: 1px solid #b5bcc7;
-       margin: 0px;
-       padding: 0px;
-       background-color: #e6e6e7;
-       background-image: url("images/commonHighlight.png");
-       background-position:0px 0px;
-       background-repeat:repeat-x;
+  border: 1px solid #b5bcc7;
+  margin: 0;
+  padding: 0;
+  background-color: #efefef;
+  background-image: url("images/commonHighlight.png");
+  background-position: 0 0;
+  background-repeat: repeat-x;
 }
 .dj_ie6 .claro .dijitMenuBar {
-       background-image:none;
+  background-image: none;
 }
 .claro .dijitMenu {
-       background-repeat:repeat-y;
-       background-color:#fff;
-       border: 1px solid #769dc0;
-       
-       margin: -1px 0;
-}
-.claro .dijitMenuBar .dijitMenuItem {  
-       padding: 6px 10px 7px;
-       background-position:0px 100px;
-       color:#4a4a4a;
-       margin:-1px;
-}      
+  background-repeat: repeat-y;
+  background-color: #ffffff;
+  border: 1px solid #769dc0;
+  /* so adjoining borders of MenuBar/ComboBox and Menu overlap, avoiding double border */
+
+  margin: -1px 0;
+}
+.dj_ie6 .claro .dijitMenu {
+  margin: 0;
+  /* above -1px makes top/bottom borders disappear on IE6 */
+
+}
+.claro .dijitMenuBar .dijitMenuItem {
+  padding: 6px 10px 7px;
+  background-position: 0 100px;
+  color: #4a4a4a;
+  margin: -1px;
+}
 .claro .dijitMenuItem {
-       background-image: url("images/menuHighlight.png");
-       background-position:0px -40px;
-       background-repeat:repeat-x;
+  background-image: url("images/menuHighlight.png");
+  background-position: 0 -40px;
+  background-repeat: repeat-x;
 }
+/* this prevents jiggling upon hover of a menu item */
 .claro .dijitMenuTable {
-       border-collapse:separate;
-       border-spacing:0 0;
-       padding:0px;
-}
-.claro .dijitMenuItem td{
-       padding:1px;
-}
-.claro .dijitMenuPassive .dijitMenuItemHover,
-.claro .dijitMenuPassive .dijitMenuItemSelected {
-       background-color: #abd6ff;
-       border:solid 1px #769dc0;
-       background-position:0px 0px;
-       color:#000;
-       padding: 5px 9px 6px;
-}
-.claro .dijitMenuPassive .dijitMenuItemActive{
-       background-position:0px -177px;
-}
-.dj_ie6 .claro .dijitMenuItem,
-.dj_ie6 .claro .dijitMenuPassive .dijitMenuItem {
-       background-image: none;
-}
-.claro .dijitMenuActive .dijitMenuItemHover,
-.claro .dijitMenuActive .dijitMenuItemSelected {
-       border:solid 1px #769dc0;
-       padding: 5px 9px 6px;
-       background-color: #9dcfff;
-       background-position:0px 0px;
-       color:#000;
+  border-collapse: separate;
+  border-spacing: 0 0;
+  padding: 0;
+}
+.claro .dijitMenuItem td {
+  padding: 1px;
+}
+/* hover over a MenuBarItem */
+.claro .dijitMenuPassive .dijitMenuItemHover, .claro .dijitMenuPassive .dijitMenuItemSelected {
+  background-color: #abd6ff;
+  border: solid 1px #769dc0;
+  background-position: 0 0;
+  color: #000000;
+  padding: 5px 9px 6px;
+}
+.claro .dijitMenuPassive .dijitMenuItemActive {
+  background-position: 0 -177px;
+}
+.dj_ie6 .claro .dijitMenuItem, .dj_ie6 .claro .dijitMenuPassive .dijitMenuItem {
+  background-image: none;
+}
+/* MenuBarItem that has been selected and menu drops down from it */
+.claro .dijitMenuActive .dijitMenuItemHover, .claro .dijitMenuActive .dijitMenuItemSelected {
+  border: solid 1px #769dc0;
+  padding: 5px 9px 6px;
+  background-color: #abd6ff;
+  background-position: 0 0;
+  color: #000000;
 }
 .dj_ie .claro .dijitMenuActive .dijitMenuItemHover,
 .dj_ie .claro .dijitMenuActive .dijitMenuItemSelected,
 .dj_ie .claro .dijitMenuPassive .dijitMenuItemHover,
 .dj_ie .claro .dijitMenuPassive .dijitMenuItemSelected {
-       padding-top: 6px;
-       padding-bottom: 5px;
-       margin-top: -3px;
+  padding-top: 6px;
+  padding-bottom: 5px;
+  margin-top: -3px;
 }
-.claro .dijitMenuActive .dijitMenuItemActive{
-       background-color: #7dbefa;
-       background-position:0px -177px;
+.claro .dijitMenuActive .dijitMenuItemActive {
+  background-color: #7dbefa;
+  background-position: 0 -177px;
 }
 .claro .dijitMenuItemActive {
-       background-position:0px -177px;
+  background-position: 0 -177px;
 }
 .claro td.dijitMenuItemIconCell {
- padding: 2px;
margin: 0px 0px 0px 4px;
 padding: 2px;
 margin: 0 0 0 4px;
 }
 .claro td.dijitMenuItemLabel {
-       padding-top: 5px;
-       padding-bottom: 5px;
+  padding-top: 5px;
+  padding-bottom: 5px;
 }
 .claro .dijitMenuExpand {
-       width: 7px;
-       height: 7px;
-       background-image: url('images/spriteArrows.png');
-       background-position: -14px 0px;
-       margin-right:3px;
+  width: 7px;
+  height: 7px;
+  background-image: url('images/spriteArrows.png');
+  background-position: -14px 0;
+  margin-right: 3px;
 }
 .claro .dijitMenuItemDisabled .dijitMenuItemIconCell {
-       opacity:1;
+  opacity: 1;
 }
 .claro .dijitMenuSeparatorTop {
-       height: auto;
-       margin-top:1px; 
-       border-bottom: 1px solid #b5bcc7
+  height: auto;
+  margin-top: 1px;
+  /* prevents spacing above/below separator */
+
+  border-bottom: 1px solid #b5bcc7;
 }
-.claro .dijitMenuSeparatorBottom{
-       height: auto;
-       margin-bottom:1px;
+.claro .dijitMenuSeparatorBottom {
+  height: auto;
+  margin-bottom: 1px;
 }
+/* the checked menu item */
 .claro .dijitCheckedMenuItemIconChar {
-       display: none;
+  display: none;
 }
 .claro .dijitCheckedMenuItemIcon {
-       background-image: url('form/images/checkboxRadioButtonStates.png');
-       background-repeat:no-repeat;
-       background-position: -15px 50%;
-       width:15px;
-       height:16px;
+  background-image: url('form/images/checkboxRadioButtonStates.png');
+  background-repeat: no-repeat;
+  background-position: -15px 50%;
+  width: 15px;
+  height: 16px;
 }
 .dj_ie6 .claro .dijitCheckedMenuItemIcon {
-       background-image: url('form/images/checkboxAndRadioButtons_IE6.png');
+  background-image: url('form/images/checkboxAndRadioButtons_IE6.png');
 }
 .claro .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
-       background-position: 0 50%;
+  background-position: 0 50%;
 }
+/*ComboBox Menu*/
 .claro .dijitComboBoxMenu {
-       margin-left:0px;
-       background-image: none;
+  margin-left: 0;
+  background-image: none;
 }
-.claro .dijitComboBoxMenu .dijitMenuItem{
-       padding:2px 0px;
-       text-indent:6px;
-       border-width:1px 0px 1px 0px;
-       border-style:solid;
-       border-color:#fff;
+.claro .dijitComboBoxMenu .dijitMenuItem {
+  padding: 2px;
+  border-width: 1px 0 1px 0;
+  border-style: solid;
+  border-color: #ffffff;
 }
 .claro .dijitComboBoxMenu .dijitMenuItemSelected {
-       color:#000;
-       border-color:#768dc0;
-       background-color:#abd6ff;
+  color: #000000;
+  border-color: #769dc0;
+  background-color: #abd6ff;
 }
 .claro .dijitComboBoxMenuActive .dijitMenuItemSelected {
-       background-position:0px -177px;
-       background-color:#7dbefa;
+  background-position: 0 -177px;
+  background-color: #7dbefa;
+  /* TODO: why is this a different color than normal .dijitMenuItemSelected? */
+
 }
 .claro .dijitMenuPreviousButton, .claro .dijitMenuNextButton {
-       font-style: italic;
+  font-style: italic;
 }
diff --git a/lib/dijit/themes/claro/Menu.less b/lib/dijit/themes/claro/Menu.less
new file mode 100644 (file)
index 0000000..1528df4
--- /dev/null
@@ -0,0 +1,188 @@
+/* Menu 
+
+There are three areas of styling for the Menu:  
+ 1. The menu 
+       There are three types of menus:
+       i)Context Menu
+       ii)Drop down Menu
+       iii) Navigation Menu
+       All three types of menus are affected by the .dijitMenu class in which you can set the background-color, padding and border
+       .dijitMenu affects the drop down menu in TimeTextBox, Calendar, ComboBox and FilteringSelect
+  .dijitMenuTable - for padding - also affects Select widget   
+       
+ 2. The menu bar
+       .dijitMenuBar - for border, margins, padding, background-color of the menu bar
+       .dijitMenuBar .dijitMenuItem - for padding, text color of menu items in the menu bar (overrides .dijitMenuItem) 
+       
+ 3. Menu items - items in the menu.  
+       .dijitMenuItem - for color
+       .dijitMenuItemHover, .dijitMenuItemSelected - for background-color, border, text color, padding of a menu item or menubar item that has been hovered over or selected   
+       .dijitMenuItemActive - for bacgkround-color of an active (mousedown) menu item
+       td.dijitMenuItemIconCell - for padding around a  menu item's icon
+       td.dijitMenuItemLabel - for padding around a menu item's label  
+       .dijitMenuSeparatorTop - for border, top border, of the separator
+       .dijitMenuSeparatorBottom - for bottom margin of the separator
+       
+       Styles specific to ComboBox and FilteringSelect widgets: 
+       .dijitComboBoxMenu .dijitMenuItem - for padding and border of a menu item in a ComboBox or FilteringSelect widget's menu
+       .dijitComboBoxMenu .dijitMenuItemSelected- for text color, background-color and border of a menu item in a ComboBox or FilteringSelect widget's menu
+
+*/
+
+@import "variables";
+
+.claro .dijitMenuBar {
+       border: 1px solid @border-color;
+       margin: 0;
+       padding: 0;
+       background-color: @bar-background-color;
+       background-image: url("images/commonHighlight.png");
+       background-position:0 0;
+       background-repeat:repeat-x;
+}
+.dj_ie6 .claro .dijitMenuBar {
+       background-image:none;
+}
+.claro .dijitMenu {
+       background-repeat:repeat-y;
+       background-color:@menu-background-color;
+       border: 1px solid @popup-border-color;
+
+       /* so adjoining borders of MenuBar/ComboBox and Menu overlap, avoiding double border */
+       margin: -1px 0;
+}
+.dj_ie6 .claro .dijitMenu {
+       margin: 0;      /* above -1px makes top/bottom borders disappear on IE6 */
+}
+.claro .dijitMenuBar .dijitMenuItem {  
+       padding: 6px 10px 7px;
+       background-position:0 100px;
+       color:@unselected-text-color;
+       margin:-1px;
+}      
+.claro .dijitMenuItem {
+       background-image: url("images/menuHighlight.png");
+       background-position:0 -40px;
+       background-repeat:repeat-x;
+}
+
+/* this prevents jiggling upon hover of a menu item */
+.claro .dijitMenuTable {
+       border-collapse:separate;
+       border-spacing:0 0;
+       padding:0;
+}
+.claro .dijitMenuItem td{
+       padding:1px;
+}
+/* hover over a MenuBarItem */
+.claro .dijitMenuPassive .dijitMenuItemHover,
+.claro .dijitMenuPassive .dijitMenuItemSelected {
+       background-color: @hovered-background-color;
+       border:solid 1px @hovered-border-color;
+       background-position:0 0;
+       color:@text-color;
+       padding: 5px 9px 6px;
+}
+.claro .dijitMenuPassive .dijitMenuItemActive{
+       background-position:0 -177px;
+}
+.dj_ie6 .claro .dijitMenuItem,
+.dj_ie6 .claro .dijitMenuPassive .dijitMenuItem {
+       background-image: none;
+}
+
+/* MenuBarItem that has been selected and menu drops down from it */
+.claro .dijitMenuActive .dijitMenuItemHover,
+.claro .dijitMenuActive .dijitMenuItemSelected {
+       border:solid 1px @hovered-border-color;
+       padding: 5px 9px 6px;
+       background-color: @hovered-background-color;
+       background-position:0 0;
+       color:@hovered-text-color;
+}
+.dj_ie .claro .dijitMenuActive .dijitMenuItemHover,
+.dj_ie .claro .dijitMenuActive .dijitMenuItemSelected,
+.dj_ie .claro .dijitMenuPassive .dijitMenuItemHover,
+.dj_ie .claro .dijitMenuPassive .dijitMenuItemSelected {
+       padding-top: 6px;
+       padding-bottom: 5px;
+       margin-top: -3px;
+}
+.claro .dijitMenuActive .dijitMenuItemActive{
+       background-color: @pressed-background-color;
+       background-position:0 -177px;
+}
+.claro .dijitMenuItemActive {
+       background-position:0 -177px;
+}
+.claro td.dijitMenuItemIconCell {
+ padding: 2px;
+ margin: 0 0 0 4px;
+}
+.claro td.dijitMenuItemLabel {
+       padding-top: 5px;
+       padding-bottom: 5px;
+}
+.claro .dijitMenuExpand {
+       width: 7px;
+       height: 7px;
+       background-image: url('images/spriteArrows.png');
+       background-position: -14px 0;
+       margin-right:3px;
+}
+.claro .dijitMenuItemDisabled .dijitMenuItemIconCell {
+       opacity:1;
+}
+.claro .dijitMenuSeparatorTop {
+       height: auto;
+       margin-top:1px; /* prevents spacing above/below separator */
+       border-bottom: 1px solid @border-color
+}
+.claro .dijitMenuSeparatorBottom{
+       height: auto;
+       margin-bottom:1px;
+}
+/* the checked menu item */
+.claro .dijitCheckedMenuItemIconChar {
+       display: none;
+}
+.claro .dijitCheckedMenuItemIcon {
+       background-image: url('form/images/checkboxRadioButtonStates.png');
+       background-repeat:no-repeat;
+       background-position: -15px 50%;
+       width:15px;
+       height:16px;
+}
+.dj_ie6 .claro .dijitCheckedMenuItemIcon {
+       background-image: url('form/images/checkboxAndRadioButtons_IE6.png');
+}
+.claro .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+       background-position: 0 50%;
+}
+
+/*ComboBox Menu*/
+.claro .dijitComboBoxMenu {
+       margin-left:0;
+       background-image: none;
+}
+
+.claro .dijitComboBoxMenu .dijitMenuItem {
+       padding: @textbox-padding;      // Make drop down menu text line up with text in <input>.
+       border-width:1px 0 1px 0;
+       border-style:solid;
+       border-color: @select-dropdownitem-background-color;
+}
+.claro .dijitComboBoxMenu .dijitMenuItemSelected {
+       color:@selected-text-color;
+       border-color:@hovered-border-color;
+       background-color:@hovered-background-color;
+}
+.claro .dijitComboBoxMenuActive .dijitMenuItemSelected {
+       background-position:0 -177px;
+       background-color: @select-dropdownitem-hovered-background-color;        /* TODO: why is this a different color than normal .dijitMenuItemSelected? */
+}
+.claro .dijitMenuPreviousButton, .claro .dijitMenuNextButton {
+       font-style: italic;
+}
index 6ba061bec8bc12b55301d2c24eedc939679befb9..2b96cbae730eeaf0b5ad49c2c7a0444bf4a8142b 100644 (file)
@@ -1,8 +1,8 @@
 .claro .dijitMenuItemRtl .dijitMenuExpand {
-       background-position: -7px 0px;
-       margin-right: 0px;
-       margin-left: 3px;
+  background-position: -7px 0;
+  margin-right: 0;
+  margin-left: 3px;
 }
 .claro .dijitMenuItemRtl .dijitMenuItemIcon {
-       margin:0px 4px 0px 0px;
+  margin: 0 4px 0 0;
 }
diff --git a/lib/dijit/themes/claro/Menu_rtl.less b/lib/dijit/themes/claro/Menu_rtl.less
new file mode 100644 (file)
index 0000000..6f669f5
--- /dev/null
@@ -0,0 +1,11 @@
+@import "variables";
+
+.claro .dijitMenuItemRtl .dijitMenuExpand {
+       background-position: -7px 0;
+       margin-right: 0;
+       margin-left: 3px;
+}
+
+.claro .dijitMenuItemRtl .dijitMenuItemIcon {
+       margin:0 4px 0 0;
+}
index 13e8f266f6f0efb4abc2cb157657e6e52ec5921a..c735e5c2fb98f035921d213e468dc09675a17ba4 100644 (file)
@@ -1,28 +1,57 @@
-
+/* ProgressBar
+ * 
+ * Styling of the ProgressBar consists of the following:
+ * 
+ * 1. the base progress bar
+ *             .dijitProgressBar -     sets margins for the progress bar
+ *
+ * 2. the empty bar
+ *             .dijitProgressBarEmpty  - sets background img and color for bar or parts of bar that are not finished yet
+ *             Also sets border color for whole bar
+ *
+ * 3. tile mode
+ *             .dijitProgressBarTile
+ *             inner container for finished portion when in 'tile' (image) mode 
+ *     
+ * 4. full bar mode
+ *             .dijitProgressBarFull
+ *             adds border to right side of the filled portion of bar
+ *
+ * 5. text for label of  bar
+ *             .dijitProgressBarLabel - sets text color, which must contrast with both the "Empty" and "Full" parts. 
+ *     
+ * 6. indeterminate mode
+ *             .dijitProgressBarIndeterminate .dijitProgressBarTile 
+ *             sets animated gif for the progress bar in 'indeterminate' mode
+ */
 .claro .dijitProgressBar {
-       margin:2px 0px 2px 0px;
+  margin: 2px 0 2px 0;
 }
 .claro .dijitProgressBarEmpty {
-       
-       background:#fff url("images/progressBarEmpty.png") repeat-none left;
-       border-color: #769dc0;
+  /* outer container and background of the bar that's not finished yet*/
+
+  background: #ffffff url("images/progressBarEmpty.png") repeat-none left;
+  border-color: #769dc0;
 }
 .claro .dijitProgressBarTile {
-       
-       background:#9dcfff url("images/progressBarFull.png") repeat-x top;      
+  /* inner container for finished portion when in 'tile' (image) mode */
+
+  background: #abd6ff url("images/progressBarFull.png") repeat-x top;
 }
 .dj_ie6 .claro .dijitProgressBarTile {
-       background-image: none;
-} 
+  background-image: none;
+}
 .claro .dijitProgressBarFull {
-       border-right:1px solid #769dc0;
+  border-right: 1px solid #769dc0;
 }
 .claro .dijitProgressBarLabel {
-       
-       color:#293a4b;
+  /* Set to a color that contrasts with both the "Empty" and "Full" parts. */
+
+  color: #000000;
 }
 .claro .dijitProgressBarIndeterminate .dijitProgressBarTile {
-       
-       background:#cad2de url("images/progressBarAnim.gif") repeat-x top;
-} 
+  /* use an animated gif for the progress bar in 'indeterminate' mode;
+               background-color won't appear unless user has turned off background images */
+
+  background: #efefef url("images/progressBarAnim.gif") repeat-x top;
+}
diff --git a/lib/dijit/themes/claro/ProgressBar.less b/lib/dijit/themes/claro/ProgressBar.less
new file mode 100644 (file)
index 0000000..d361952
--- /dev/null
@@ -0,0 +1,56 @@
+/* ProgressBar
+ * 
+ * Styling of the ProgressBar consists of the following:
+ * 
+ * 1. the base progress bar
+ *             .dijitProgressBar -     sets margins for the progress bar
+ *
+ * 2. the empty bar
+ *             .dijitProgressBarEmpty  - sets background img and color for bar or parts of bar that are not finished yet
+ *             Also sets border color for whole bar
+ *
+ * 3. tile mode
+ *             .dijitProgressBarTile
+ *             inner container for finished portion when in 'tile' (image) mode 
+ *     
+ * 4. full bar mode
+ *             .dijitProgressBarFull
+ *             adds border to right side of the filled portion of bar
+ *
+ * 5. text for label of  bar
+ *             .dijitProgressBarLabel - sets text color, which must contrast with both the "Empty" and "Full" parts. 
+ *     
+ * 6. indeterminate mode
+ *             .dijitProgressBarIndeterminate .dijitProgressBarTile 
+ *             sets animated gif for the progress bar in 'indeterminate' mode
+ */
+ @import "variables";
+.claro .dijitProgressBar {
+       margin:2px 0 2px 0;
+}
+.claro .dijitProgressBarEmpty {
+       /* outer container and background of the bar that's not finished yet*/
+       background: @progressbar-empty-background-color url("images/progressBarEmpty.png") repeat-none left;
+       border-color: @progressbar-border-color;
+}
+.claro .dijitProgressBarTile {
+       /* inner container for finished portion when in 'tile' (image) mode */
+       background: @progressbar-full-background-color url("images/progressBarFull.png") repeat-x top;  
+}
+.dj_ie6 .claro .dijitProgressBarTile {
+       background-image: none;
+} 
+.claro .dijitProgressBarFull {
+       border-right:1px solid @progressbar-border-color;
+}
+.claro .dijitProgressBarLabel {
+       /* Set to a color that contrasts with both the "Empty" and "Full" parts. */
+       color: @progressbar-text-color;
+}
+.claro .dijitProgressBarIndeterminate .dijitProgressBarTile {
+       /* use an animated gif for the progress bar in 'indeterminate' mode;
+               background-color won't appear unless user has turned off background images */
+       background: @bar-background-color url("images/progressBarAnim.gif") repeat-x top;
+} 
\ No newline at end of file
diff --git a/lib/dijit/themes/claro/README b/lib/dijit/themes/claro/README
new file mode 100644 (file)
index 0000000..5ef4714
--- /dev/null
@@ -0,0 +1,64 @@
+These are "less" files that compile into the CSS of claro.
+
+---------
+Installing and running on Windows:
+
+1. Install node:
+    a) Go to https://github.com/ajaxorg/node-builds, press download button, and select "download zip"
+    b) unzip the file into C:\
+
+2. Install less:
+
+       a) Go to https://github.com/cloudhead/less.js/archives/master, press download button, and select "download zip"
+       b) unzip the file into C:\
+
+2. Add node and lessc environment variables:
+
+    a) open Control Panel --> click System icon --> select Advanced tab --> click Environment variables button
+    b) press "edit" on path
+    c) depending on what directory you unzipped to and the exact filenames, you will add something like
+
+       ;C:\ajaxorg-node-builds-0fcee7d\win32;C:\cloudhead-less.js-7fb09f\bin
+       
+       d) add new environment variable NODE_PATH with value like this (depending on exact download name):
+
+               C:\cloudhead-less.js-7fb09f\lib
+
+4. To compile all the files:
+
+       C:\> cd C:\myworkspace\dijit\themes\claro
+       C:\> node compile.js
+
+--------
+To install/run less version 2 on mac:
+
+1. Install Node.js
+       Download a built copy from https://github.com/ajaxorg/node-builds.
+       Alternately, o to http://nodejs.org/#download   (./configure, make, make install).
+       
+2. Download less from https://github.com/cloudhead/less.js/archives/master
+
+3. Edit .bash_profile etc. to add node to your path, and lessc to NODE_PATH:
+
+       export PATH=$PATH:/opt/less/bin
+       export NODE_PATH=$NODE_PATH:/opt/less/lib
+
+To compile all the files:
+
+  $ cd dijit/themes/claro
+  $ node compile.js
+
+
+-------
+Alternately, you can install less version 1, but I'd rather not use it for checked in files
+since it breaks a part a lot of rules into multiple rules, causing spurious diffs.
+
+To install on a mac:
+  $ sudo gem install less
+  
+On Windows or Linux, make sure you have ruby and ruby-gems installed first.
+If you need help installing ruby please check out ruby-lang.org for more details.
+
+-----
+
+See http://lesscss.org/ and https://github.com/cloudhead/less.js/ for more information.
index a5ddf91299f7de7068b668db5372280a093b058d..fb8bf5efa907d8fa1fe79a52334eb27d1b31ad48 100644 (file)
-
+/* Time Picker 
+ *
+ * Styling the Time Picker consists of the following: 
+ *
+ * 1. minor time values
+ *             .dijitTimePickerTick - set text color, size, background color of minor values
+ *             .dijitTimePickerTickHover - set hover style of minor time values
+ *             dijitTimePickerTickSelected - set selected style of minor time values
+ *
+ * 2. major time values - 1:00, 2:00, times on the hour 
+ *             set text color, size, background color, left/right margins for "zoom" affect
+ *             .dijitTimePickerMarkerHover - to set hover style of major time values
+ *             .dijitTimePickerMarkerSelected - set selected style of major time values
+ * 
+ * 3. up and down arrow buttons
+ *             .dijitTimePicker .dijitButtonNode - background-color, border
+ *             .dijitTimePicker .dijitUpArrowHover, .dijitTimePicker .dijitDownArrowHover - set background-color for hover state
+ *
+ *     Other classes provide the fundamental structure of the TimePicker and should not be modified. 
+ */
+/* override Button.css */
 .claro .dijitTimePicker .dijitButtonNode {
-       padding: 0 0;
-       border-radius: 0;
-       -moz-border-radius: 0;
-       -webkit-border-radius: 0;
-}
-.claro .dijitTimePicker{
-       border:1px #b5bcc7 solid;
-       border-top:none;
-       border-bottom:none;
-       background-color:#fff;
-}
-.claro .dijitTimePickerItem{
-       
-       background-image: url("images/commonHighlight.png");
-       background-position:0px -1px;
-       background-repeat:repeat-x;
-       border-top:solid 1px #b5bcc7;
-       border-bottom:solid 1px #b5bcc7;
-       margin-right:-1px;
-       margin-left:-1px;
-       margin-top:-1px;
+  padding: 0 0;
+  -moz-border-radius: 0;
+  border-radius: 0;
+}
+.claro .dijitTimePicker {
+  border: 1px #b5bcc7 solid;
+  border-top: none;
+  border-bottom: none;
+  background-color: #fff;
+  /* TODO: useless?   Appears to be overridden by settings on individual elements */
+
 }
+.claro .dijitTimePickerItem {
+  /* dijitTimePickerItem refers to both Tick's (minor values like 2:15, 2:30, 2:45) and Marker's (major values like 2PM, 3PM) */
+
+  background-image: url("images/commonHighlight.png");
+  background-position: 0 -1px;
+  background-repeat: repeat-x;
+  border-top: solid 1px #b5bcc7;
+  border-bottom: solid 1px #b5bcc7;
+  margin-right: -1px;
+  margin-left: -1px;
+  margin-top: -1px;
+}
+/* to make up for lack of alpha transparency in IE6 */
 .dj_ie6 .claro .dijitTimePickerItem {
-       background-image: none;
+  background-image: none;
 }
 .claro .dijitTimePickerTick {
-       
-       color:#7a7a7a;
-       background-color:#f2f2f2;
-       font-size:0.818em;
+  /* minor value */
+
+  color: #818181;
+  background-color: #efefef;
+  font-size: 0.818em;
 }
 .claro .dijitTimePickerMarker {
-       
-       color:#000;
-       background-color:#e3f2ff;
-       font-size: 1em;
-       white-space: nowrap;
+  /* major value - 1:00, 2:00, times on the hour */
+
+  background-color: #e9f4fe;
+  font-size: 1em;
+  white-space: nowrap;
 }
 .claro .dijitTimePickerTickHover,
 .claro .dijitTimePickerMarkerHover,
 .claro .dijitTimePickerMarkerSelected,
 .claro .dijitTimePickerTickSelected {
-       background-color: #83c0fa;
-       color:#000;
-       border:solid 1px #b5bcc7;
-       margin-left:-7px;
-       margin-right:-7px;
+  background-color: #7dbefa;
+  border: solid 1px #b5bcc7;
+  margin-left: -7px;
+  margin-right: -7px;
+  color: #000000;
+}
+.claro .dijitTimePickerMarkerSelected, .claro .dijitTimePickerTickSelected {
+  font-size: 1em;
 }
-.claro .dijitTimePickerMarkerSelected,
-.claro .dijitTimePickerTickSelected {
-       font-size: 1em;
-       }
 .dj_ie .claro .dijitTimePickerTickHover,
 .dj_ie .claro .dijitTimePickerMarkerHover,
 .dj_ie .claro .dijitTimePickerMarkerSelected,
-.dj_ie .claro .dijitTimePickerTickSelected  {
-       width: 114%;
+.dj_ie .claro .dijitTimePickerTickSelected {
+  width: 114%;
 }
 .dj_ie6 .claro .dijitTimePickerTickHover,
 .dj_ie6 .claro .dijitTimePickerMarkerHover,
 .dj_ie6 .claro .dijitTimePickerMarkerSelected,
-.dj_ie6 .claro .dijitTimePickerTickSelected  {
-       position: relative;     
-       zoom: 1; 
+.dj_ie6 .claro .dijitTimePickerTickSelected {
+  position: relative;
+  /* creates widening of element */
+  zoom: 1;
+  /* creates widening of element */
+
 }
 .claro .dijitTimePickerTick .dijitTimePickerItemInner {
-       padding:1px;
-       margin:0px;
+  padding: 1px;
+  margin: 0;
 }
 .claro .dijitTimePicker .dijitButtonNode {
-       border-left:none;
-       border-right:none;
-       border-color:#b5bcc7;
-       background-color: #f6f7fa;
-       background-image: url("images/commonHighlight.png");
-       background-position:0px -1px;
-       background-repeat:repeat-x;
+  border-left: none;
+  border-right: none;
+  border-color: #b5bcc7;
+  background-color: #efefef;
+  background-image: url("images/commonHighlight.png");
+  background-position: 0 -1px;
+  background-repeat: repeat-x;
 }
 .dj_ie6 .claro .dijitTimePicker .dijitButtonNode {
-       background-image: none;
+  background-image: none;
 }
-.claro .dijitTimePicker .dijitArrowButtonInner{
-       height: 100%; 
-       background-image: url("form/images/commonFormArrows.png");
-       background-repeat: no-repeat;
-       background-position:-140px 45%;
+.claro .dijitTimePicker .dijitArrowButtonInner {
+  height: 100%;
+  /* hack claro.button.css */
+
+  background-image: url("form/images/commonFormArrows.png");
+  background-repeat: no-repeat;
+  background-position: -140px 45%;
 }
-.claro .dijitTimePicker .dijitDownArrowButton .dijitArrowButtonInner{
-       background-position:-35px 45%;
+.claro .dijitTimePicker .dijitDownArrowButton .dijitArrowButtonInner {
+  background-position: -35px 45%;
 }
-.claro .dijitTimePicker .dijitUpArrowHover, 
-.claro .dijitTimePicker .dijitDownArrowHover {
-       background-color: #abd6ff;
+/* hover */
+.claro .dijitTimePicker .dijitUpArrowHover, .claro .dijitTimePicker .dijitDownArrowHover {
+  background-color: #abd6ff;
 }
 .claro .dijitTimePicker .dijitUpArrowHover .dijitArrowButtonInner {
-       background-position:-175px 45%;
+  background-position: -175px 45%;
 }
 .claro .dijitTimePicker .dijitDownArrowHover .dijitArrowButtonInner {
-       background-position:-70px 45%;
+  background-position: -70px 45%;
 }
diff --git a/lib/dijit/themes/claro/TimePicker.less b/lib/dijit/themes/claro/TimePicker.less
new file mode 100644 (file)
index 0000000..cd07a63
--- /dev/null
@@ -0,0 +1,124 @@
+/* Time Picker 
+ *
+ * Styling the Time Picker consists of the following: 
+ *
+ * 1. minor time values
+ *             .dijitTimePickerTick - set text color, size, background color of minor values
+ *             .dijitTimePickerTickHover - set hover style of minor time values
+ *             dijitTimePickerTickSelected - set selected style of minor time values
+ *
+ * 2. major time values - 1:00, 2:00, times on the hour 
+ *             set text color, size, background color, left/right margins for "zoom" affect
+ *             .dijitTimePickerMarkerHover - to set hover style of major time values
+ *             .dijitTimePickerMarkerSelected - set selected style of major time values
+ * 
+ * 3. up and down arrow buttons
+ *             .dijitTimePicker .dijitButtonNode - background-color, border
+ *             .dijitTimePicker .dijitUpArrowHover, .dijitTimePicker .dijitDownArrowHover - set background-color for hover state
+ *
+ *     Other classes provide the fundamental structure of the TimePicker and should not be modified. 
+ */
+
+@import "variables";
+
+/* override Button.css */
+.claro .dijitTimePicker .dijitButtonNode {
+       padding: 0 0;
+       .border-radius(0);
+}
+.claro .dijitTimePicker{
+       border:1px @border-color solid;
+       border-top:none;
+       border-bottom:none;
+       background-color:#fff;  /* TODO: useless?   Appears to be overridden by settings on individual elements */
+}
+.claro .dijitTimePickerItem{
+       /* dijitTimePickerItem refers to both Tick's (minor values like 2:15, 2:30, 2:45) and Marker's (major values like 2PM, 3PM) */
+       background-image: url("images/commonHighlight.png");
+       background-position:0 -1px;
+       background-repeat:repeat-x;
+       border-top:solid 1px @border-color;
+       border-bottom:solid 1px @border-color;
+       margin-right:-1px;
+       margin-left:-1px;
+       margin-top:-1px;
+}
+/* to make up for lack of alpha transparency in IE6 */
+.dj_ie6 .claro .dijitTimePickerItem {
+       background-image: none;
+}
+.claro .dijitTimePickerTick {
+       /* minor value */
+       color:@timepicker-minorvalue-text-color;
+       background-color:@timepicker-minorvalue-background-color;
+       font-size:0.818em;
+}
+.claro .dijitTimePickerMarker {
+       /* major value - 1:00, 2:00, times on the hour */
+       background-color: @timepicker-majorvalue-background-color;
+       font-size: 1em;
+       white-space: nowrap;
+}
+.claro .dijitTimePickerTickHover,
+.claro .dijitTimePickerMarkerHover,
+.claro .dijitTimePickerMarkerSelected,
+.claro .dijitTimePickerTickSelected {
+       background-color: @timepicker-value-hovered-background-color;
+       border:solid 1px @border-color;
+       margin-left:-7px;
+       margin-right:-7px;
+       color:@timepicker-value-hovered-text-color;
+}
+.claro .dijitTimePickerMarkerSelected,
+.claro .dijitTimePickerTickSelected {
+       font-size: 1em;
+}
+.dj_ie .claro .dijitTimePickerTickHover,
+.dj_ie .claro .dijitTimePickerMarkerHover,
+.dj_ie .claro .dijitTimePickerMarkerSelected,
+.dj_ie .claro .dijitTimePickerTickSelected  {
+       width: 114%;
+}
+.dj_ie6 .claro .dijitTimePickerTickHover,
+.dj_ie6 .claro .dijitTimePickerMarkerHover,
+.dj_ie6 .claro .dijitTimePickerMarkerSelected,
+.dj_ie6 .claro .dijitTimePickerTickSelected  {
+       position: relative; /* creates widening of element */   
+       zoom: 1; /* creates widening of element */
+}
+.claro .dijitTimePickerTick .dijitTimePickerItemInner {
+       padding:1px;
+       margin:0;
+}
+.claro .dijitTimePicker .dijitButtonNode {
+       border-left:none;
+       border-right:none;
+       border-color:@border-color;
+       background-color: @unselected-background-color;
+       background-image: url("images/commonHighlight.png");
+       background-position:0 -1px;
+       background-repeat:repeat-x;
+}
+.dj_ie6 .claro .dijitTimePicker .dijitButtonNode {
+       background-image: none;
+}
+.claro .dijitTimePicker .dijitArrowButtonInner{
+       height: 100%; /* hack claro.button.css */
+       background-image: url("form/images/commonFormArrows.png");
+       background-repeat: no-repeat;
+       background-position:-140px 45%;
+}
+.claro .dijitTimePicker .dijitDownArrowButton .dijitArrowButtonInner{
+       background-position:-35px 45%;
+}
+/* hover */
+.claro .dijitTimePicker .dijitUpArrowHover, 
+.claro .dijitTimePicker .dijitDownArrowHover {
+       background-color: @timepicker-arrow-hovered-background-color;
+}
+.claro .dijitTimePicker .dijitUpArrowHover .dijitArrowButtonInner {
+       background-position:-175px 45%;
+}
+.claro .dijitTimePicker .dijitDownArrowHover .dijitArrowButtonInner {
+       background-position:-70px 45%;
+}
index a1bf2fbf071f6b84cd15b2a3dc8eef7b4a7548fe..6dfcf839e991ea997174f5ebcbdb8bc40c3fffbc 100644 (file)
@@ -1,9 +1,9 @@
-
+/* TimePicker */
 .dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickHover,
 .dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerHover,
 .dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerSelected,
 .dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickSelected {
-       margin-left:-6px;
-       margin-right:-8px;
-       width: 114%;    
+  margin-left: -6px;
+  margin-right: -8px;
+  width: 114%;
 }
diff --git a/lib/dijit/themes/claro/TimePicker_rtl.less b/lib/dijit/themes/claro/TimePicker_rtl.less
new file mode 100644 (file)
index 0000000..44f5da5
--- /dev/null
@@ -0,0 +1,12 @@
+/* TimePicker */
+
+@import "variables";
+
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickHover,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerHover,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerSelected,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickSelected {
+       margin-left:-6px;
+       margin-right:-8px;
+       width: 114%;    
+}
\ No newline at end of file
index a0191fc53e790003ef839a3722de204ce6f03f1b..7f0cdbfb7c2b7b7bea7b44febe5c38faa020a198 100644 (file)
@@ -1,54 +1,73 @@
-
+/* TitlePane 
+ * 
+ * Styling TitlePane means styling the TitlePane title and its content container  (dijitTitlePane)
+ * 
+ * TitlePane title:
+ * 1. TitlePane title (default styling): 
+ *             .dijitTitlePaneTitle - TitlePane's title div style: background-color, border
+ *
+ * 2. hovered TitlePane title (ie, mouse hover on a title bar)
+ *             .dijitTitlePaneTitleHover - styles when mouse hover on the title div
+ * 
+ * 3. active TitlePane title (ie, mouse down on a title bar)
+ *             .dijitTitlePaneTitleActive - styles when mouse down on the title div
+ * 
+ * 
+ * TitlePane Content Container:
+ * 1. outer/inner container: 
+ *             .dijitTitlePaneContentOuter / dijitTitlePaneContentInner - styles for the content outer div
+ */
 .claro .dijitTitlePaneTitle {
-       background-color: #e6e6e7;
-       background-image: url("images/titlebar.png");
-       background-repeat:repeat-x;
-       border:1px solid #b5bcc7;
-       padding: 0px 7px 3px 7px;
-       min-height:17px;
-       color:#131313;
+  background-color: #efefef;
+  background-image: url("images/titlebar.png");
+  background-repeat: repeat-x;
+  border: 1px solid #b5bcc7;
+  padding: 0 7px 3px 7px;
+  min-height: 17px;
 }
 .dj_ie6 .claro .dijitTitlePaneTitle {
-       background-image: none;
+  background-image: none;
 }
 .claro .dijitTitlePaneTitleHover {
-       background-color: #abd6ff;
-       border-color: #769dc0;
+  background-color: #abd6ff;
+  border-color: #769dc0;
 }
 .claro .dijitTitlePaneTitleActive {
-       background-color: #7dbefa;
-       border-color: #769dc0;
-       background-position:0px -136px;
+  background-color: #7dbefa;
+  border-color: #769dc0;
+  background-position: 0 -136px;
 }
 .claro .dijitTitlePaneTitleFocus {
-       margin-top:3px;
-       padding-bottom:2px;
+  margin-top: 3px;
+  padding-bottom: 2px;
 }
 .claro .dijitTitlePane .dijitArrowNode {
-       background-image: url('images/spriteArrows.png');
-       background-repeat: no-repeat;
-       height: 8px;
-       width: 7px;
+  background-image: url('images/spriteArrows.png');
+  background-repeat: no-repeat;
+  height: 8px;
+  width: 7px;
 }
 .claro .dijitTitlePane .dijitOpen .dijitArrowNode {
-       background-position: 0px 0px;
+  background-position: 0 0;
 }
 .claro .dijitTitlePane .dijitClosed .dijitArrowNode {
-       background-position: -14px 0px;
+  background-position: -14px 0;
 }
 .claro .dijitTitlePaneFocused .dijitTitlePaneTextNode {
-       color:#000;
+  color: #000000;
+  /* TODO: do we need this?   we usually don't change text color on focus */
+
 }
 .claro .dijitTitlePaneContentOuter {
-       background: #ffffff;
-       border:1px solid #b5bcc7;
-       border-top:none;
+  background: #ffffff;
+  border: 1px solid #b5bcc7;
+  border-top: none;
 }
 .claro .dijitTitlePaneContentInner {
-       padding:10px;
+  padding: 10px;
 }
 .claro .dijitTitlePaneTextNode {
-       margin-left: 4px;
-       margin-right: 4px;
-       vertical-align:text-top;
+  margin-left: 4px;
+  margin-right: 4px;
+  vertical-align: text-top;
 }
diff --git a/lib/dijit/themes/claro/TitlePane.less b/lib/dijit/themes/claro/TitlePane.less
new file mode 100644 (file)
index 0000000..22bacca
--- /dev/null
@@ -0,0 +1,74 @@
+/* TitlePane 
+ * 
+ * Styling TitlePane means styling the TitlePane title and its content container  (dijitTitlePane)
+ * 
+ * TitlePane title:
+ * 1. TitlePane title (default styling): 
+ *             .dijitTitlePaneTitle - TitlePane's title div style: background-color, border
+ *
+ * 2. hovered TitlePane title (ie, mouse hover on a title bar)
+ *             .dijitTitlePaneTitleHover - styles when mouse hover on the title div
+ * 
+ * 3. active TitlePane title (ie, mouse down on a title bar)
+ *             .dijitTitlePaneTitleActive - styles when mouse down on the title div
+ * 
+ * 
+ * TitlePane Content Container:
+ * 1. outer/inner container: 
+ *             .dijitTitlePaneContentOuter / dijitTitlePaneContentInner - styles for the content outer div
+ */
+
+@import "variables";
+
+.claro .dijitTitlePaneTitle {
+       background-color: @unselected-background-color; // TODO: Mailed Jason, shouldn't this toggle to @selected-background-color when pane opened?
+       background-image: url("images/titlebar.png");
+       background-repeat:repeat-x;
+       border:1px solid @border-color;
+       padding: 0 7px 3px 7px;
+       min-height:17px;
+}
+.dj_ie6 .claro .dijitTitlePaneTitle {
+       background-image: none;
+}
+.claro .dijitTitlePaneTitleHover {
+       background-color: @hovered-background-color;
+       border-color: @hovered-border-color;
+}
+.claro .dijitTitlePaneTitleActive {
+       background-color: @pressed-background-color;
+       border-color: @pressed-border-color;
+       background-position:0 -136px;
+}
+.claro .dijitTitlePaneTitleFocus {
+       margin-top:3px;
+       padding-bottom:2px;
+}
+.claro .dijitTitlePane .dijitArrowNode {
+       background-image: url('images/spriteArrows.png');
+       background-repeat: no-repeat;
+       height: 8px;
+       width: 7px;
+}
+.claro .dijitTitlePane .dijitOpen .dijitArrowNode {
+       background-position: 0 0;
+}
+.claro .dijitTitlePane .dijitClosed .dijitArrowNode {
+       background-position: -14px 0;
+}
+.claro .dijitTitlePaneFocused .dijitTitlePaneTextNode {
+       color:@text-color;      /* TODO: do we need this?   we usually don't change text color on focus */
+}
+.claro .dijitTitlePaneContentOuter {
+       background: @pane-background-color;
+       border:1px solid @border-color;
+       border-top:none;
+}
+.claro .dijitTitlePaneContentInner {
+       padding:10px;
+}
+.claro .dijitTitlePaneTextNode {
+       margin-left: 4px;
+       margin-right: 4px;
+       vertical-align:text-top;
+}
\ No newline at end of file
index 09ca395f7e52d1219568cfb6da5d24c608136ff2..3f68ab30e5cf60e4d490c0ad3c3d3bdb3cc13e4f 100644 (file)
@@ -1,4 +1,4 @@
-
+/* TitlePane */
 .claro .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
-       background-position: -7px 0px;
+  background-position: -7px 0;
 }
diff --git a/lib/dijit/themes/claro/TitlePane_rtl.less b/lib/dijit/themes/claro/TitlePane_rtl.less
new file mode 100644 (file)
index 0000000..693584f
--- /dev/null
@@ -0,0 +1,7 @@
+/* TitlePane */
+
+@import "variables";
+
+.claro .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
+       background-position: -7px 0;
+}
\ No newline at end of file
index 2189dcd4d779df4c891c6a2733ace3a11c4c68f8..a9e6f4f5e1c9ae5cc877cd95e63ca11372d2074b 100644 (file)
-
+/* Toolbar 
+ * 
+ * Styling Toolbar means styling the toolbar container and the widget inside toolbar  (dijitToolbar)
+ * 
+ * 1. toolbar (default styling): 
+ *             .dijitToolbar - styles for outer container
+ *
+ * 2. widget inside toolbar
+ *             .dijitToolbar .dijitButtonNode   - Button widget
+ *                                       .dijitComboButton  - ComboButton widget
+ *                                       .dijitDropDownButton  - DropDownButton widget
+ *                                       .dijitToggleButton  - ToggleButton widget
+ *             
+ * 3. hovered widget inside toolbar (ie, mouse hover on the widget inside)
+ *                     .dijitToolbar .dijitButtonNodeHover  - styles for hovered Button widget
+ * 
+ * 4. actived widget inside toolbar (ie, mouse down on the widget inside)
+ *                     .dijitToolbar .dijitButtonNodeActive  - mouse down on Button widget
+ */
 .claro .dijitToolbar {
-       border-bottom: 1px solid #b5bcc7;
-       background-color: #f1f1f1;
-       background-image: url("images/commonHighlight.png");
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       padding: 2px 0px 2px 4px;
-       zoom: 1;
+  border-bottom: 1px solid #b5bcc7;
+  background-color: #efefef;
+  background-image: url("images/commonHighlight.png");
+  background-position: 0 0;
+  background-repeat: repeat-x;
+  padding: 2px 0 2px 4px;
+  zoom: 1;
 }
 .claro .dijitToolbar label {
-       padding: 0px 3px 0 6px;
+  padding: 0 3px 0 6px;
 }
+/** override claro/form/Button.css **/
 .claro .dijitToolbar .dijitButtonNode {
-       border:none;
-       padding: 2px;
-       background-image: url("images/commonHighlight.png");
-       background-position:0 -30px;
-       background-repeat:repeat-x;
-       background-color:rgba(171,214,255,0);
-       border-radius: 2px;     
-       -moz-border-radius: 2px;        
-       -webkit-border-radius: 2px;     
-       -moz-box-shadow: none;
-       -webkit-box-shadow: none;
-       -webkit-transition-property:background-color;
-       -webkit-transition-duration:.3s, .35s;
-}
-.claro .dijitToolbar .dijitComboButton .dijitButtonNode{
-       padding: 3px 2px 3px 2px;       
+  border-width: 0;
+  /* on hover/active, border-->1px, padding-->1px */
+
+  padding: 2px;
+  -moz-border-radius: 2px;
+  border-radius: 2px;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+  -webkit-transition-property: background-color;
+  -moz-transition-property: background-color;
+  transition-property: background-color;
+  -webkit-transition-duration: 0.3s, 0.35s;
+  -moz-transition-duration: 0.3s, 0.35s;
+  transition-duration: 0.3s, 0.35s;
+  background-image: url("images/commonHighlight.png");
+  background-position: 0 -30px;
+  background-repeat: repeat-x;
+  background-color: rgba(171, 214, 255, 0);
 }
 .dj_ie .claro .dijitToolbar .dijitButtonNode {
-       background-color: transparent;   
+  background-color: transparent;
+  /* for IE, which doesn't understand rgba(...) */
+
 }
 .dj_ie6 .claro .dijitToolbar .dijitButtonNode {
-       background: none;       
+  background: none;
+  /* because background-color: transparent above doesn't work */
+
 }
-.claro .dijitToolbar .dijitComboBox .dijitButtonNode {
-       padding: 0px;
+.claro .dijitToolbar .dijitComboButton .dijitStretch {
+  /* no rounded border on side adjacent to arrow */
+
+  -moz-border-radius: 2px 0 0 2px;
+  border-radius: 2px 0 0 2px;
 }
-.claro .dijitToolbar .dijitComboButton {
-       padding: 1px;
+.claro .dijitToolbar .dijitComboButton .dijitArrowButton {
+  /* no rounded border on side adjacent to button */
+
+  -moz-border-radius: 0 2px 2px 0;
+  border-radius: 0 2px 2px 0;
+}
+.claro .dijitToolbar .dijitComboBox .dijitButtonNode {
+  padding: 0;
 }
+/* hover status */
 .claro .dijitToolbar .dijitButtonHover .dijitButtonNode,
 .claro .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode,
-.claro .dijitToolbar .dijitToggleButtonHover .dijitButtonNode {
-       background-position:0 0;
-       border:solid 1px #769dc0;
-       background-color: #abd6ff;
-       padding: 1px;
-}
-.claro .dijitToolbar .dijitComboButtonHover {
-       background-color: #abd6ff;
-       border: solid 1px #769dc0;
-       padding: 0px;
-}
-.claro .dijitToolbar .dijitComboButtonHover .dijitButtonNode,
-.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
-       background-position:0 0;
-       padding: 2px;
-}
-.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
-       background-color: #7dd6fa;
-}
-.claro .dijitToolbar .dijitButtonActive .dijitButtonNode,
-.claro .dijitToolbar .dijitDropDownButtonActive .dijitButtonNode,
-.claro .dijitToolbar .dijitToggleButtonActive .dijitButtonNode {
-       border:solid 1px #769dc0;
-       background-color:#7dbefa;
-       background-position:0px -177px;
-       padding: 1px;
+.claro .dijitToolbar .dijitToggleButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitComboButtonHover .dijitButtonNode {
+  background-position: 0 0;
+  border-width: 1px;
+  background-color: #abd6ff;
+  padding: 1px;
+}
+.claro .dijitToolbar .dijitComboButtonHover .dijitButtonNode, .claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
+  background-position: 0 0;
+  background-color: #f4ffff;
+}
+.claro .dijitToolbar .dijitComboButtonHover .dijitButtonNodeHover, .claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButtonHover {
+  background-color: #abd6ff;
+}
+/* active status */
+.claro .dijitToolbar .dijitButtonActive .dijitButtonNode, .claro .dijitToolbar .dijitDropDownButtonActive .dijitButtonNode, .claro .dijitToolbar .dijitToggleButtonActive .dijitButtonNode {
+  border-width: 1px;
+  background-color: #7dbefa;
+  background-position: 0 -177px;
+  padding: 1px;
 }
 .claro .dijitToolbar .dijitComboButtonActive {
-       -webkit-transition-duration:.2s;
-       border: solid 1px #769dc0;
-       padding: 0px;
+  -webkit-transition-duration: 0.2s;
+  -moz-transition-duration: 0.2s;
+  transition-duration: 0.2s;
+  border-width: 1px;
+  padding: 0;
 }
-.claro .dijitToolbar .dijitComboButtonActive .dijitButtonNode {
-       background-color: #7dbefa;
-       background-position:0px -177px;
-       padding: 2px;
+.claro .dijitToolbar .dijitComboButtonActive .dijitButtonNode, .claro .dijitToolbar .dijitComboButtonActive .dijitDownArrowButton {
+  background-color: #f4ffff;
+  background-position: 0 -177px;
+  padding: 2px;
 }
-.claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive {
-       background-color: #7dbefa;
+.claro .dijitToolbar .dijitComboButtonActive .dijitButtonNodeActive {
+  background-color: #7dbefa;
 }
-.claro .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
-       border-color: #769dc0;
-       background-color:#fff;
-       padding: 1px;
+.claro .dijitToolbar .dijitComboButtonActive .dijitDownArrowButtonActive {
+  background-color: #7dbefa;
 }
-.dj_ie6 .claro .dijitToolbar .dijitButtonContents, 
-.dj_ie7 .claro .dijitToolbar .dijitButtonContents {
-       margin: -2px 0;
-       padding: 0;
+/* Avoid double border between button and arrow */
+.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton, .claro .dijitToolbar .dijitComboButtonActive .dijitDownArrowButton {
+  border-left-width: 0;
 }
-.dj_ie6 .claro .dijitToolbar {
-       background-image: none;
+.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
+  padding-left: 2px;
+  /* since there's no left border, don't reduce from 2px --> 1px */
+
 }
-.dj_ie6 .claro .dijitToolbar .dijitButtonNode {
-       margin: 1px; 
-       border: none;
-}
-.dj_ie6 .claro .dijitToolbar .dijitButtonHover .dijitButtonNode,
-.dj_ie6 .claro .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeHover,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover,
-.dj_ie6 .claro .dijitToolbar .dijitToggleButtonHover .dijitButtonNode,
-.dj_ie6 .claro .dijitToolbar .dijitButtonActive .dijitButtonNode,
-.dj_ie6 .claro .dijitToolbar .dijitDropDownButtonActive .dijitButtonNode,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeActive,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive,
-.dj_ie6 .claro .dijitToolbar .dijitToggleButtonActive .dijitButtonNode,
+/* toggle button checked status */
 .claro .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
-       margin: 0;      
-       border-width: 1px;
-       border-style: solid;
-       background-image: none;
+  margin: 0;
+  /* remove margin and add a border */
+
+  border-width: 1px;
+  border-style: solid;
+  background-image: none;
+  border-color: #769dc0;
+  background-color: #ffffff;
+  padding: 1px;
 }
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeHover,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeActive,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive {
-       padding: 1px;   
+.dj_ie6 .claro .dijitToolbar {
+  background-image: none;
 }
 .claro .dijitToolbarSeparator {
-       
-       background: url('../../icons/images/editorIconsEnabled.png');
+  /* separator icon in the editor sprite */
+
+  background: url('../../icons/images/editorIconsEnabled.png');
 }
+/* Toolbar inside of disabled Editor */
 .claro .dijitDisabled .dijitToolbar {
-       background:none;
-       background-color:#f5f5f5;
-       border-bottom: 1px solid #d3d3d3;
+  background: none;
+  background-color: #efefef;
+  border-bottom: 1px solid #d3d3d3;
+}
+.claro .dijitToolbar .dijitComboBoxDisabled .dijitArrowButtonInner {
+  background-position: 0 50%;
 }
diff --git a/lib/dijit/themes/claro/Toolbar.less b/lib/dijit/themes/claro/Toolbar.less
new file mode 100644 (file)
index 0000000..eb99f2f
--- /dev/null
@@ -0,0 +1,157 @@
+/* Toolbar 
+ * 
+ * Styling Toolbar means styling the toolbar container and the widget inside toolbar  (dijitToolbar)
+ * 
+ * 1. toolbar (default styling): 
+ *             .dijitToolbar - styles for outer container
+ *
+ * 2. widget inside toolbar
+ *             .dijitToolbar .dijitButtonNode   - Button widget
+ *                                       .dijitComboButton  - ComboButton widget
+ *                                       .dijitDropDownButton  - DropDownButton widget
+ *                                       .dijitToggleButton  - ToggleButton widget
+ *             
+ * 3. hovered widget inside toolbar (ie, mouse hover on the widget inside)
+ *                     .dijitToolbar .dijitButtonNodeHover  - styles for hovered Button widget
+ * 
+ * 4. actived widget inside toolbar (ie, mouse down on the widget inside)
+ *                     .dijitToolbar .dijitButtonNodeActive  - mouse down on Button widget
+ */
+
+@import "variables";
+
+.claro .dijitToolbar {
+       border-bottom: 1px solid @border-color;
+       background-color: @bar-background-color;
+       background-image: url("images/commonHighlight.png");
+       background-position:0 0;
+       background-repeat:repeat-x;
+       padding: 2px 0 2px 4px;
+       zoom: 1;
+}
+
+.claro .dijitToolbar label {
+       padding: 0 3px 0 6px;
+}
+
+/** override claro/form/Button.css **/
+.claro .dijitToolbar .dijitButtonNode {
+       border-width: 0;        /* on hover/active, border-->1px, padding-->1px */
+       padding: 2px;
+       .border-radius(@toolbar-button-border-radius);
+       .box-shadow(none);
+       .transition-property(background-color);
+       .transition-duration(.3s, .35s);
+
+       background-image: url("images/commonHighlight.png");
+       background-position:0 -30px;
+       background-repeat:repeat-x;
+       background-color:rgba(171,214,255,0);
+}
+.dj_ie .claro .dijitToolbar .dijitButtonNode {
+       background-color: transparent;   /* for IE, which doesn't understand rgba(...) */
+}
+.dj_ie6 .claro .dijitToolbar .dijitButtonNode {
+       background: none;       /* because background-color: transparent above doesn't work */
+}
+
+.claro .dijitToolbar .dijitComboButton .dijitStretch {
+       /* no rounded border on side adjacent to arrow */
+       .border-radius(@toolbar-button-border-radius 0 0 @toolbar-button-border-radius);
+}
+.claro .dijitToolbar .dijitComboButton .dijitArrowButton {
+       /* no rounded border on side adjacent to button */
+       .border-radius(0 @toolbar-button-border-radius @toolbar-button-border-radius 0);
+}
+
+.claro .dijitToolbar .dijitComboBox .dijitButtonNode {
+       padding: 0;
+}
+
+/* hover status */
+.claro .dijitToolbar .dijitButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitToggleButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitComboButtonHover .dijitButtonNode {
+       background-position:0 0;
+       border-width:1px;
+       background-color: @hovered-background-color;
+       padding: 1px;
+}
+.claro .dijitToolbar .dijitComboButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
+       background-position:0 0;
+       background-color: @toolbar-combobutton-hovered-unhoveredsection-background-color;
+}
+.claro .dijitToolbar .dijitComboButtonHover .dijitButtonNodeHover,
+.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButtonHover {
+       background-color: @hovered-background-color;
+}
+
+/* active status */
+.claro .dijitToolbar .dijitButtonActive .dijitButtonNode,
+.claro .dijitToolbar .dijitDropDownButtonActive .dijitButtonNode,
+.claro .dijitToolbar .dijitToggleButtonActive .dijitButtonNode {
+       border-width: 1px;
+       background-color:@pressed-background-color;
+       background-position:0 -177px;
+       padding: 1px;
+}
+.claro .dijitToolbar .dijitComboButtonActive {
+       .transition-duration(.2s);
+       border-width: 1px;
+       padding: 0;
+}
+.claro .dijitToolbar .dijitComboButtonActive .dijitButtonNode,
+.claro .dijitToolbar .dijitComboButtonActive .dijitDownArrowButton {
+       background-color: @toolbar-combobutton-hovered-unhoveredsection-background-color;
+       background-position:0 -177px;
+       padding: 2px;
+}
+.claro .dijitToolbar .dijitComboButtonActive .dijitButtonNodeActive {
+       background-color: @pressed-background-color;
+}
+.claro .dijitToolbar .dijitComboButtonActive .dijitDownArrowButtonActive {
+       background-color: @pressed-background-color;
+}
+
+/* Avoid double border between button and arrow */
+.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton,
+.claro .dijitToolbar .dijitComboButtonActive .dijitDownArrowButton {
+       border-left-width: 0;
+}
+.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
+       padding-left: 2px;              /* since there's no left border, don't reduce from 2px --> 1px */
+}
+
+/* toggle button checked status */
+.claro .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
+       margin: 0;      /* remove margin and add a border */
+       border-width: 1px;
+       border-style: solid;
+       background-image: none;
+       border-color: @selected-border-color;
+       background-color: @toolbar-button-checked-background-color;
+       padding: 1px;
+}
+
+.dj_ie6 .claro .dijitToolbar {
+       background-image: none;
+}
+
+.claro .dijitToolbarSeparator {
+       /* separator icon in the editor sprite */
+       background: url('../../icons/images/editorIconsEnabled.png');
+}
+
+/* Toolbar inside of disabled Editor */
+.claro .dijitDisabled .dijitToolbar {
+       background:none;
+       background-color:@disabled-background-color;
+       border-bottom: 1px solid @disabled-border-color;
+}
+
+.claro .dijitToolbar .dijitComboBoxDisabled .dijitArrowButtonInner {
+       background-position:0 50%;
+}
+
diff --git a/lib/dijit/themes/claro/Toolbar_rtl.css b/lib/dijit/themes/claro/Toolbar_rtl.css
new file mode 100644 (file)
index 0000000..2fab1de
--- /dev/null
@@ -0,0 +1,30 @@
+/* Toolbar RTL */
+/* Repeated rules from Toolbar.css to override rule from Button_rtl.css, which is loaded after Toolbar.css */
+.claro .dijitToolbar .dijitComboButtonRtl .dijitButtonNode {
+  border-width: 0;
+  padding: 2px;
+}
+.claro .dijitToolbar .dijitComboButtonRtlHover .dijitButtonNode, .claro .dijitToolbar .dijitComboButtonRtlActive .dijitButtonNode {
+  border-width: 1px;
+  padding: 1px;
+}
+.claro .dijitToolbar .dijitComboButtonRtl .dijitStretch {
+  /* no rounded border on side adjacent to arrow */
+
+  -moz-border-radius: 0 2px 2px 0;
+  border-radius: 0 2px 2px 0;
+}
+.claro .dijitToolbar .dijitComboButtonRtl .dijitArrowButton {
+  /* no rounded border on side adjacent to button */
+
+  -moz-border-radius: 2px 0 0 2px;
+  border-radius: 2px 0 0 2px;
+}
+.claro .dijitToolbar .dijitComboButtonRtlHover .dijitArrowButton, .claro .dijitToolbar .dijitComboButtonRtlActive .dijitArrowButton {
+  /* border between button and arrow */
+
+  border-left-width: 1px;
+  border-right-width: 0;
+  padding-left: 1px;
+  padding-right: 2px;
+}
diff --git a/lib/dijit/themes/claro/Toolbar_rtl.less b/lib/dijit/themes/claro/Toolbar_rtl.less
new file mode 100644 (file)
index 0000000..8d31c88
--- /dev/null
@@ -0,0 +1,32 @@
+/* Toolbar RTL */
+
+@import "variables";
+
+/* Repeated rules from Toolbar.css to override rule from Button_rtl.css, which is loaded after Toolbar.css */
+.claro .dijitToolbar .dijitComboButtonRtl .dijitButtonNode {
+       border-width: 0;
+       padding: 2px;
+}
+.claro .dijitToolbar .dijitComboButtonRtlHover .dijitButtonNode,
+.claro .dijitToolbar .dijitComboButtonRtlActive .dijitButtonNode {
+       border-width: 1px;
+       padding: 1px;
+}
+
+.claro .dijitToolbar .dijitComboButtonRtl .dijitStretch {
+       /* no rounded border on side adjacent to arrow */
+       .border-radius(0 2px 2px 0);
+}
+.claro .dijitToolbar .dijitComboButtonRtl .dijitArrowButton {
+       /* no rounded border on side adjacent to button */
+       .border-radius(2px 0 0 2px);
+}
+
+.claro .dijitToolbar .dijitComboButtonRtlHover .dijitArrowButton,
+.claro .dijitToolbar .dijitComboButtonRtlActive .dijitArrowButton {
+       /* border between button and arrow */
+       border-left-width: 1px;
+       border-right-width: 0;
+       padding-left: 1px;
+       padding-right: 2px;
+}
index 739a4931eb7c9784805500d404ca657ce8091a0b..069deb80a653426bac050f0b6b9b66a44b47ac56 100644 (file)
-
+/* Tree 
+ * 
+ * Styling Tree mostly means styling the TreeRow (dijitTreeRow)
+ * There are 4 basic states to style:
+ * 
+ * Tree Row:
+ * 1. tree row (default styling): 
+ *             .dijitTreeRow - styles for each row of the tree
+ *
+ * 2. hovered tree row (mouse hover on a tree row)
+ *             .dijitTreeRowHover - styles when mouse over on one row
+ * 
+ * 3. active tree row (mouse down on a tree row)
+ *             .dijitTreeRowActive - styles when mouse down on one row
+ * 
+ * 4. selected tree row
+ *             dijitTreeRowSelected - style when the row has been selected
+ * 
+ * Tree Expando:
+ *         dijitTreeExpando - the expando at the left of the text of each tree row
+ * 
+ * Drag and Drop on TreeNodes: (insert line on dijitTreeContent node so it'll aligned w/ target element)
+ *             .dijitTreeNode .dojoDndItemBefore/.dojoDndItemAfter - use border style simulate a separate line
+ */
 .claro .dijitTreeNode {
-    zoom: 1;   
+  zoom: 1;
+  /* force layout on IE (TODO: may not be needed anymore) */
+
 }
 .claro .dijitTreeIsRoot {
-    background-image: none;
-}
-.claro .dijitTreeRow {
-       
-       padding: 4px 1px 2px 0px;
-       margin-left: 1px;
-       background-image: url("images/commonHighlight.png");
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       border-color: rgba(118,157,192,0);
-       background-color: rgba(171,214,255,0);
-       -webkit-transition-property:background-color, border-color;
-       -webkit-transition-duration:.25s ;
-       -webkit-transition-timing-function: ease-out;
+  background-image: none;
+}
+/* Styling for basic tree node (unhovered, unselected)
+ * Also use this styling when dropping between items on the tree (in other words, don't
+ * use hover effect)
+ */
+.claro .dijitTreeRow, .claro .dijitTreeNode .dojoDndItemBefore, .claro .dijitTreeNode .dojoDndItemAfter {
+  /* so insert line shows up on IE when dropping after a target element */
+
+  padding: 4px 1px 2px 0;
+  margin: 0 1px;
+  /* replaced by border for selected/hovered row */
+
+  background-color: none;
+  background-color: transparent;
+  background-color: rgba(171, 214, 255, 0);
+  background-image: url("images/commonHighlight.png");
+  background-position: 0 0;
+  background-repeat: repeat-x;
+  border-color: rgba(118, 157, 192, 0);
+  border-width: 0;
+  -webkit-transition-property: background-color, border-color;
+  -moz-transition-property: background-color, border-color;
+  transition-property: background-color, border-color;
+  -webkit-transition-duration: 0.25s;
+  -moz-transition-duration: 0.25s;
+  transition-duration: 0.25s;
+  -webkit-transition-timing-function: ease-out;
+  -moz-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
 }
 .dj_ie6 .claro .dijitTreeRow {
-       background-image: none;
+  background-image: none;
 }
 .claro .dijitTreeRowSelected {
-       background-repeat:repeat-x;
-       background-color:#d8edff;
-       padding: 3px 0px 1px;
-       margin-left: 0px;
-       border:solid 1px #c3e2fd;
-       color:#000;
+  background-repeat: repeat-x;
+  background-color: #cfe5fa;
+  padding: 3px 0 1px;
+  margin: 0;
+  border: solid 1px #769dc0;
+  color: #000000;
 }
 .claro .dijitTreeRowHover {
-       background-color:#abd6ff;
-       padding: 3px 0px 1px;
-       margin-left: 0px;
-       border:solid 1px #769dc0;
-       color:#000;
-       -webkit-transition-duration:.25s ; 
+  background-color: #abd6ff;
+  padding: 3px 0 1px;
+  margin: 0;
+  border: solid 1px #769dc0;
+  color: #000000;
+  -webkit-transition-duration: 0.25s;
+  -moz-transition-duration: 0.25s;
+  transition-duration: 0.25s;
 }
 .claro .dijitTreeRowActive {
-       background-color:#7dbefa;
-       background-position:0px -177px;
-       padding: 3px 0px 1px;
-       margin-left: 0px;
-       border:solid 1px #769dc0;
-       color:#000;
+  background-color: #7dbefa;
+  background-position: 0 -177px;
+  padding: 3px 0 1px;
+  margin-left: 0;
+  border: solid 1px #769dc0;
+  color: #000000;
 }
 .dj_ie6 .claro .dijitTreeRowActive {
-       background-image: none;
+  background-image: none;
 }
 .claro .dijitTreeRowFocused {
-       background-repeat: repeat;
+  background-repeat: repeat;
 }
+/* expando (open/closed) icon */
 .claro .dijitTreeExpando {
-       background-image: url('images/treeExpandImages.png');
-    width: 16px;
-    height: 16px;
-       background-position: -35px 0px          
+  background-image: url('images/treeExpandImages.png');
+  width: 16px;
+  height: 16px;
+  background-position: -35px 0;
+  /* for dijitTreeExpandoOpened */
+
 }
 .dj_ie6 .claro .dijitTreeExpando {
-       background-image: url('images/treeExpandImages8bit.png');
+  background-image: url('images/treeExpandImages8bit.png');
 }
 .claro .dijitTreeRowHover .dijitTreeExpandoOpened {
-       background-position: -53px 0px;
+  background-position: -53px 0;
 }
 .claro .dijitTreeExpandoClosed {
-       background-position: 1px 0px;
+  background-position: 1px 0;
 }
 .claro .dijitTreeRowHover .dijitTreeExpandoClosed {
-       background-position: -17px 0px;
+  background-position: -17px 0;
 }
-.claro .dijitTreeExpandoLeaf{
-       background-image:none;
+.claro .dijitTreeExpandoLeaf, .dj_ie6 .claro .dijitTreeExpandoLeaf {
+  background-image: none;
 }
 .claro .dijitTreeExpandoLoading {
-       background-image: url('images/loadingAnimation.gif');
-}
-.claro .dijitTreeNode .dojoDndItemBefore,
-.claro .dijitTreeNode .dojoDndItemAfter {
-       border-bottom: none;
-       border-top: none;
+  background-image: url('images/loadingAnimation.gif');
 }
+/* Drag and Drop on TreeNodes
+ * Put insert line on dijitTreeContent node so it's aligned w/
+ * (ie, indented equally with) target element, even
+ * though dijitTreeRowNode is the actual "drag object"
+ */
 .claro .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
-       border-top: 2px solid #369;
+  border-top: 2px solid #769dc0;
 }
 .claro .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
-       border-bottom: 2px solid #369;
+  border-bottom: 2px solid #769dc0;
 }
diff --git a/lib/dijit/themes/claro/Tree.less b/lib/dijit/themes/claro/Tree.less
new file mode 100644 (file)
index 0000000..4e639ca
--- /dev/null
@@ -0,0 +1,133 @@
+/* Tree 
+ * 
+ * Styling Tree mostly means styling the TreeRow (dijitTreeRow)
+ * There are 4 basic states to style:
+ * 
+ * Tree Row:
+ * 1. tree row (default styling): 
+ *             .dijitTreeRow - styles for each row of the tree
+ *
+ * 2. hovered tree row (mouse hover on a tree row)
+ *             .dijitTreeRowHover - styles when mouse over on one row
+ * 
+ * 3. active tree row (mouse down on a tree row)
+ *             .dijitTreeRowActive - styles when mouse down on one row
+ * 
+ * 4. selected tree row
+ *             dijitTreeRowSelected - style when the row has been selected
+ * 
+ * Tree Expando:
+ *         dijitTreeExpando - the expando at the left of the text of each tree row
+ * 
+ * Drag and Drop on TreeNodes: (insert line on dijitTreeContent node so it'll aligned w/ target element)
+ *             .dijitTreeNode .dojoDndItemBefore/.dojoDndItemAfter - use border style simulate a separate line
+ */
+
+@import "variables";
+
+.claro .dijitTreeNode {
+    zoom: 1;   /* force layout on IE (TODO: may not be needed anymore) */
+}
+.claro .dijitTreeIsRoot {
+    background-image: none;
+}
+
+/* Styling for basic tree node (unhovered, unselected)
+ * Also use this styling when dropping between items on the tree (in other words, don't
+ * use hover effect)
+ */
+.claro .dijitTreeRow,
+.claro .dijitTreeNode .dojoDndItemBefore,
+.claro .dijitTreeNode .dojoDndItemAfter {
+       /* so insert line shows up on IE when dropping after a target element */
+       padding: 4px 1px 2px 0;
+       margin: 0 1px;  /* replaced by border for selected/hovered row */
+
+       background-color: none; // IE6 doesn't understand rgba() or transparent below
+       background-color: transparent;  // IE8 doesn't understand rgba() below
+       background-color: rgba(171,214,255,0);  // rgba() instead of transparent to prevent flash on hover fade-in
+       background-image: url("images/commonHighlight.png");
+       background-position:0 0;
+       background-repeat:repeat-x;
+
+       border-color: rgba(118,157,192,0);      // rgba() instead of none to prevent flash on hover fade-in
+       border-width: 0;
+
+       .transition-property(background-color, border-color);
+       .transition-duration(.25s);
+       .transition-timing-function(ease-out);
+}
+.dj_ie6 .claro .dijitTreeRow {
+       background-image: none;
+}
+
+.claro .dijitTreeRowSelected {
+       background-repeat:repeat-x;
+       background-color:@selected-background-color;
+       padding: 3px 0 1px;
+       margin: 0;
+       border:solid 1px @selected-border-color;
+       color:@selected-text-color;
+}
+.claro .dijitTreeRowHover {
+       background-color:@hovered-background-color;
+       padding: 3px 0 1px;
+       margin: 0;
+       border:solid 1px @hovered-border-color;
+       color:@hovered-text-color;
+       .transition-duration(.25s);
+}
+.claro .dijitTreeRowActive {
+       background-color:@pressed-background-color;
+       background-position:0 -177px;
+       padding: 3px 0 1px;
+       margin-left: 0;
+       border:solid 1px @pressed-border-color;
+       color:@selected-text-color;
+}
+.dj_ie6 .claro .dijitTreeRowActive {
+       background-image: none;
+}
+.claro .dijitTreeRowFocused {
+       background-repeat: repeat;
+}
+
+/* expando (open/closed) icon */
+
+.claro .dijitTreeExpando {
+       background-image: url('images/treeExpandImages.png');
+    width: 16px;
+    height: 16px;
+       background-position: -35px 0;           /* for dijitTreeExpandoOpened */
+}
+.dj_ie6 .claro .dijitTreeExpando {
+       background-image: url('images/treeExpandImages8bit.png');
+}
+.claro .dijitTreeRowHover .dijitTreeExpandoOpened {
+       background-position: -53px 0;
+}
+.claro .dijitTreeExpandoClosed {
+       background-position: 1px 0;
+}
+.claro .dijitTreeRowHover .dijitTreeExpandoClosed {
+       background-position: -17px 0;
+}
+.claro .dijitTreeExpandoLeaf,
+.dj_ie6 .claro .dijitTreeExpandoLeaf {
+       background-image:none;
+}
+.claro .dijitTreeExpandoLoading {
+       background-image: url('images/loadingAnimation.gif');
+}
+
+/* Drag and Drop on TreeNodes
+ * Put insert line on dijitTreeContent node so it's aligned w/
+ * (ie, indented equally with) target element, even
+ * though dijitTreeRowNode is the actual "drag object"
+ */
+.claro .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+       border-top: 2px solid @dnd-dropseparator-color;         // TODO: normal separator is just 1px, why is this 2px?
+}
+.claro .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+       border-bottom: 2px solid @dnd-dropseparator-color;      // TODO: normal separator is just 1px, why is this 2px?
+}
index 7ed7f1856f22f5d9afe38b4f874a40c6ab5bc90d..d3cb2688c36aa4a9d7d9414cb5d22f1e1e52458a 100644 (file)
+@import url("../dijit.css");
+@import url("../../icons/commonIcons.css");/*sprite containing common icons to be used by all themes*/
+@import url("Common.css");
+@import url("form/Common.css");
+@import url("form/Button.css");
+@import url("form/Checkbox.css");
+@import url("form/RadioButton.css");
+@import url("form/Select.css");
+@import url("layout/TabContainer.css");
+@import url("Dialog.css");
+@import url("layout/AccordionContainer.css");
+@import url("layout/ContentPane.css");
+@import url("Calendar.css");
+@import url("Menu.css");
+@import url("form/Slider.css");
+@import url("ColorPalette.css");
+@import url("InlineEditBox.css");
+@import url("ProgressBar.css");
+@import url("TimePicker.css");
+@import url("layout/BorderContainer.css");
+@import url("Tree.css"); 
+@import url("Toolbar.css");
+@import url("Editor.css");/*in order to test button or menu item with icon */
+@import url("../../icons/editorIcons.css"); /*sprite for editor icons to be used by all themes*/
+@import url("TitlePane.css");
+@import url("form/NumberSpinner.css");
 
-.dijitReset {
-       
-       margin:0;
-       border:0;
-       padding:0;
-       line-height:normal;
-       font: inherit;
-       color: inherit;
-}
-.dijit_a11y .dijitReset {
-       -moz-appearance: none; 
-}
-.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;                     
-}
-.dijitInputContainer {
-       
-       #zoom: 1;
-       overflow: hidden;
-       float: none !important; 
-       position:relative;
-}
-.dj_ie INPUT.dijitTextBox,
-.dj_ie .dijitTextBox INPUT {
-       font-size: 100%;
-}
-.dijitTextBox .dijitSpinnerButtonContainer,
-.dijitTextBox .dijitArrowButtonContainer,
-.dijitTextBox .dijitValidationContainer {
-       float: right;
-       text-align: center;
-}
-.dijitTextBox INPUT.dijitInputField {
-       
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-}
-.dijitTextBox .dijitValidationContainer {
-       display: none;
-}
-.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;
-}
-.dijitOffScreen {
-       position: absolute;
-       visibility: hidden;
-       left: 50%;
-       top: -10000px;
-}
-.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;
-}
-.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;
-}
-.dijitDisplayNone {
-       
-       display:none !important;
-}
-.dijitContainer {
-       
-       overflow: hidden;       
-}
-.dijit_a11y * {
-       background-image:none !important;
-}
-.dijit_a11y .dijitIcon,
-.dijit_a11y DIV.dijitArrowButtonInner, 
-.dijit_a11y SPAN.dijitArrowButtonInner,
-.dijit_a11y IMG.dijitArrowButtonInner,
-.dijit_a11y .dijitCalendarIncrementControl {
-       
-       display: none;
-}
-.dijitSpinner DIV.dijitArrowButtonInner {
-       display: block; 
-}
-.dijit_a11y .dijitA11ySideArrow {
-       display: inline !important; 
-       cursor: pointer;
-}
-.dijit_a11y .dijitCalendarDateLabel {
-       padding: 1px;
-}
-.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
-       border-style: dotted !important;
-       border-width: 1px;
-       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 .dijitTextBoxReadOnly .dijitInputField,
-.dijit_a11y .dijitTextBoxReadOnly .dijitButtonNode {
-       border-style: outset!important;
-       border-width: medium!important;
-       border-color: #999 !important;
-       color:#999 !important;
-}
-.dijitButtonNode * {
-       vertical-align: middle;
-}
-.dijitButtonNode .dijitArrowButtonInner {
-       
-       background: no-repeat center;
-       width: 12px;
-       height: 12px;
-       direction: ltr; 
-}
-.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;
-}
-.dijitButtonContents {
-       display: block;         
-}
-td.dijitButtonContents {
-       display: table-cell;    
-}
-.dijitButtonNode IMG {
-       
-       vertical-align:middle;
-       
-}
-TABLE.dijitComboButton { 
-       
-       border-collapse: collapse;
-       border:0;
-       padding:0;
-       margin:0;
-}
-.dijitToolbar .dijitComboButton {
-       
-       border-collapse: separate;
-}
-.dijitToolbar .dijitToggleButton,
-.dijitToolbar .dijitButton,
-.dijitToolbar .dijitDropDownButton,
-.dijitToolbar .dijitComboButton {
-       margin: 0;
-}
-.dijitToolbar .dijitButtonContents {
-       
-       padding: 1px 2px;
-}
-.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;
-}
-.dj_webkit .dijitSpinner .dijitSpinnerButtonContainer {
-       
-       line-height:inherit;
-}
-.dijitTextBox .dijitButtonNode {
-       border-width: 0;
-}
-.dijitButtonNode,
-.dijitButtonNode * {
-       cursor: pointer;
-}
-.dj_ie .dijitButtonNode {
-       
-       zoom: 1;
-}
-.dj_ie .dijitButtonNode button {
-       
-       overflow: visible;
-}
-DIV.dijitArrowButton {
-       float: right;
-}
-.dijitTextBox {
-       border: solid black 1px;
-       #overflow: hidden; 
-       width: 15em;    
-       vertical-align: middle;
-       #vertical-align: auto;
-}
-.dijitTextBoxReadOnly,
-.dijitTextBoxDisabled {
-       color: gray;
-}
-.dj_webkit .dijitTextBoxDisabled INPUT {
-       color: #eee; 
-}
-.dj_webkit TEXTAREA.dijitTextAreaDisabled {
-       color: #333; 
-}
-.dj_gecko .dijitTextBoxReadOnly INPUT,
-.dj_gecko .dijitTextBoxDisabled INPUT {
-       -moz-user-input: none; 
-}
-.dijitPlaceHolder {
-       
-       color: #AAAAAA;
-       font-style: italic;
-       position: absolute;
-       top: 0;
-       left: 0;
-       #filter: ""; 
-}
-.dijitTimeTextBox {
-       width: 8em;
-}
-.dijitTextBox INPUT:focus {
-       outline: none;  
-}
-.dijitTextBoxFocused {
-       outline: auto 5px -webkit-focus-ring-color;
-}
-.dijitTextBox INPUT {
-       float: left; 
-}
-.dijitInputInner {
-       
-       border:0 !important;
-       vertical-align:middle !important;
-       background-color:transparent !important;
-       width:100% !important;
-       
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-       margin-left: 0 !important;
-       margin-right: 0 !important;
-}
-.dijit_a11y .dijitTextBox INPUT {
-       margin: 0 !important;
-}
-.dijitTextBoxError INPUT.dijitValidationInner,
-.dijitTextBox INPUT.dijitArrowButtonInner {
-       
-       text-indent: -1em !important;
-       direction: ltr !important;
-       text-align: left !important;
-       height: auto !important;
-       #text-indent: 0 !important;
-       #letter-spacing: -5em !important;
-       #text-align: right !important;
-}
-.dj_ie .dijitTextBox INPUT,
-.dj_ie INPUT.dijitTextBox {
-       overflow-y: visible; 
-       line-height: normal; 
-}
-.dj_ie7 .dijitTextBox INPUT.dijitValidationInner,
-.dj_ie7 .dijitTextBox INPUT.dijitArrowButtonInner {
-       line-height: 86%; 
-}
-.dj_ie6 .dijitTextBox INPUT,
-.dj_ie6 INPUT.dijitTextBox,
-.dj_iequirks .dijitTextBox INPUT.dijitValidationInner,
-.dj_iequirks .dijitTextBox INPUT.dijitArrowButtonInner,
-.dj_iequirks .dijitTextBox INPUT.dijitSpinnerButtonInner,
-.dj_iequirks .dijitTextBox INPUT.dijitInputInner,
-.dj_iequirks INPUT.dijitTextBox {
-       line-height: 100%; 
-}
-.dijit_a11y INPUT.dijitValidationInner,
-.dijit_a11y INPUT.dijitArrowButtonInner {
-       
-       text-indent: 0 !important;
-       width: 1em !important;
-       #text-align: left !important;
-}
-.dijitTextBoxError .dijitValidationContainer {
-       display: inline;
-       cursor: default;
-}
-.dijitSpinner .dijitSpinnerButtonContainer,
-.dijitComboBox .dijitArrowButtonContainer {
-       
-       border-width: 0 0 0 1px !important; 
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
-       
-       border-width: 0;
-}
-.dj_ie .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
-       clear: both; 
-}
-.dijit_a11y .dijitTextBox .dijitValidationContainer,
-.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBox .dijitArrowButtonContainer {
-       
-       border: solid black !important;
-       border-width: 0 0 0 1px !important;
-}
-.dj_ie .dijitToolbar .dijitComboBox {
-       
-       vertical-align: middle;
-}
-.dijitTextBox .dijitSpinnerButtonContainer {
-       width: 1em;
-       position: relative !important;
-       overflow: hidden;
-}
-.dijitSpinner .dijitSpinnerButtonInner {
-       width:1em;
-       visibility:hidden !important; 
-       overflow-x:hidden;
-}
-.dijitComboBox .dijitButtonNode,
-.dijitSpinnerButtonContainer .dijitButtonNode {
-       border-width: 0;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
-       border: 0 none !important;
-}
-.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner,
-.dijit_a11y .dijitSpinnerButtonContainer INPUT {
-       width: 1em !important;
-}
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner {
-       margin: 0 auto !important; 
-}
-.dj_ie .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding-left: 0.3em !important;
-       padding-right: 0.3em !important;
-       margin-left: 0.3em !important;
-       margin-right: 0.3em !important;
-       width: 1.4em !important;
-}
-.dj_ie7 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding-left: 0.0em !important; 
-       padding-right: 0.0em !important;
-       width: 1em !important;
-}
-.dj_ie6 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       margin-left: 0.1em !important;
-       margin-right: 0.1em !important;
-       width: 1em !important;
-}
-.dj_iequirks .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       margin-left: 0 !important;
-       margin-right: 0 !important;
-       width: 2em !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       
-       padding: 0;
-       position: absolute !important;
-       right: 0;
-       float: none;
-       height: 50%;
-       width: 100%;
-       bottom: auto;
-       left: 0;
-       right: auto;
-}
-.dj_iequirks .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: auto;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitArrowButton {
-       overflow: visible !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitDownArrowButton {
-       top: 50%;
-       border-top-width: 1px !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitUpArrowButton {
-       #bottom: 50%;   
-       top: 0;
-}
-.dijitSpinner .dijitArrowButtonInner {
-       margin: auto;
-       overflow-x: hidden;
-       height: 100% !important;
-}
-.dj_iequirks .dijitSpinner .dijitArrowButtonInner {
-       height: auto !important;
-}
-.dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       -moz-transform: scale(0.5);
-       -moz-transform-origin: center top;
-       -webkit-transform: scale(0.5);
-       -webkit-transform-origin: center top;
-       -o-transform: scale(0.5);
-       -o-transform-origin: center top;
-       transform: scale(0.5);
-       transform-origin: left top;
-       padding-top: 0;
-       padding-bottom: 0;
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-       width: 100%;
-}
-.dj_ie .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       zoom: 50%; 
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButtonInner {
-       overflow: hidden;
-}
-.dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: 100%;
-}
-.dj_iequirks .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: 1em; 
-}
-.dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       visibility: hidden;
-}
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       vertical-align:top;
-       visibility: visible;
-}
-.dijit_a11y .dijitSpinnerButtonContainer {
-       width: 1em;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
-       border-width: 1px 0px 0px 0px;
-       border-style: solid !important;
-}
-.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 !important;
-       height: auto !important;
-}
-.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:2px;
-       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;
-}
-.dijit_a11y .dijitTooltipConnector {
-       display: none;  
-}
-.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;
-}
-.dj_ff3 .dijit_a11y div.dijitSplitter:focus {
-       outline-style:dotted;
-       outline-width: 2px;
-}
-.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;
-}
-.dijitTitlePaneTitle {
-       cursor: pointer;
-}
-.dijitFixedOpen {
-       
-       cursor: default;
-}
-.dijitTitlePaneTitle * {
-       vertical-align: middle;
-}
-.dijitTitlePane .dijitArrowNodeInner {
-       
-       display: none;
-}
-.dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
-       
-       display:inline !important;
-       font-family: monospace;         
-}
-.dijit_a11y .dijitTitlePane .dijitArrowNode {
-       
-       display:none;
-}
-.dj_ie6 .dijitTitlePaneContentOuter,
-.dj_ie6 .dijitTitlePane .dijitTitlePaneTitle {
-       
-       zoom: 1;
-}
-.dijitColorPalette {
-       border: 1px solid #999;
-       background: #fff;
-       position: relative;
-}
-img.dijitColorPaletteUnder {
-       
-       border-style: none;
-       position: absolute;
-       left: 0;
-       top: 0;
-}
-.dijitColorPalette .dijitPaletteTable {
-       
-       padding: 2px 3px 3px 3px;
-       position: relative;
-       overflow: hidden;
-       outline: 0;
-       border-collapse: separate;
-}
-.dj_ie6 .dijitColorPalette .dijitPaletteTable,
-.dj_ie7 .dijitColorPalette .dijitPaletteTable,
-.dj_iequirks .dijitColorPalette .dijitPaletteTable {
-       
-       padding: 0;
-       margin: 2px 3px 3px 3px;
-}
-.dijitColorPalette .dijitPaletteCell {
-       
-       height: 20px;
-       width: 20px;
-       font-size: 1px;
-       vertical-align: middle;
-       text-align: center;
-}
-.dijitColorPalette .dijitPaletteImg {
-       
-       width: 16px;
-       height: 14px;
-       border: 1px solid #999;
-       cursor: default;
-       vertical-align: middle;
-}
-.dj_iequirks .dijitColorPalette .dijitPaletteImg {
-       margin: 1px;    
-}
-.dijitPaletteTable td {
-               padding: 0px;
-}
-.dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       
-       border: 1px solid #000;
-}
-.dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
-.dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
-       border: 2px solid #000;
-}
-.dijit_a11y .dijitColorPalette .dijitPaletteTable,
-.dijit_a11y .dijitColorPalette .dijitPaletteTable * {
-       
-       background-color: transparent !important;
-}
-.dj_gecko .dijit_a11y .dijitColorPalette .dijitPaletteCellFocused .dijitPaletteImg {
-       border: 3px dotted #000;        
-       margin: -1px;
-}
-.dijit_a11y  .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       border: 2px solid #000 !important;
-}
-.dijitAccordionContainer {
-       border:1px solid #b7b7b7;
-       border-top:0 !important;
-}
-.dijitAccordionTitle {
-       cursor: pointer;
-}
-.dijitAccordionTitleSelected {
-       cursor: default;
-}
-.dijitAccordionTitle .arrowTextUp,
-.dijitAccordionTitle .arrowTextDown {
-       display: none;
-       font-size: 0.65em;
-       font-weight: normal !important;
-}
-.dijit_a11y .dijitAccordionTitle .arrowTextUp,
-.dijit_a11y .dijitAccordionTitleSelected .arrowTextDown {
-       display: inline;
-}
-.dijit_a11y .dijitAccordionTitleSelected .arrowTextUp {
-       display: none;
-}
-.dj_ie6 .dijitAccordionTitle,
-.dj_iequirks .dijitAccordionTitle {
-       
-       zoom: 1;
-}
-.dijitCalendarContainer {
-       width: auto;    
-}
-.dijitCalendarContainer th, .dijitCalendarContainer td {
-       padding: 0;
-}
-.dijitCalendarNextYear {
-       margin:0 0 0 0.55em;
-}
-.dijitCalendarPreviousYear {
-       margin:0 0.55em 0 0;
-}
-.dijitCalendarIncrementControl {
-       vertical-align: middle;
-}
-.dijitCalendarIncrementControl,
-.dijitCalendarDateTemplate,
-.dijitCalendarMonthLabel,
-.dijitCalendarPreviousYear,
-.dijitCalendarNextYear {
-       cursor: pointer;
-}
-.dijitCalendarDisabledDate {
-       color: gray;
-       text-decoration: line-through;
-       cursor: default;
-}
-.dijitSpacer {
-       
-       position: relative;
-       height: 1px;
-       overflow: hidden;
-       visibility: hidden;
-}
-.dijitMenu {
-       border:1px solid black;
-       background-color:white;
-}
-.dijitMenuTable {
-       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.5;
-       cursor:default;
-}
-.dj_ie .dijit_a11y .dijitMenuItemDisabled,
-.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 dotted black !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;
-}
-.dj_ie .dijit_a11y .dijitMenuBar .dijitMenuItem {
-       
-       margin: 0px;
-}
-.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;
-}
-.nowrapTabStrip {
-       width: 50000px;
-       display: block;
-       position: relative;
-}
-.dijitTabListWrapper {
-       overflow: hidden;
-}
-.dijit_a11y .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.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
-       cursor: auto;
-}
-.dijitTab {
-       position:relative;
-       cursor:pointer;
-       white-space:nowrap;
-       z-index:3;
-}
-.dijitTab * {
-       
-       vertical-align: middle;
-}
-.dijitTabChecked {
-       cursor: default;        
-}
-.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;
-}
-.dijitTabCloseButton {
-       margin-left: 1em;
-}
-.dijitTabCloseText {
-       display:none;
-}
-.dijit_a11y .dijitTabCloseButton {
-       background-image: none !important;
-       width: auto !important;
-       height: auto !important;
-       border: thin dotted;    
-}
-.dijit_a11y .dijitTabCloseButtonHover {
-       border:thin solid;      
-}
-.dijit_a11y .dijitTabCloseText {
-       display: inline;
-}
-.dijit_a11y .dijitTabChecked {
-       
-       border-style:dashed !important;
-}
-.dijit_a11y .dijitTabInnerDiv {
-       border-left:none !important;
- }
-.dijitTabPane,
-.dijitStackContainer-child,
-.dijitAccordionContainer-child {
-       
-    border: none !important;
-}
-.dijitInlineEditBoxDisplayMode {
-       border: 1px solid transparent;  
-       cursor: text;
-}
-.dijit_a11y .dijitInlineEditBoxDisplayMode,
-.dj_ie6 .dijitInlineEditBoxDisplayMode {
-       
-       border: none;
-}
-.dijitInlineEditBoxDisplayModeHover,
-.dijit_a11y .dijitInlineEditBoxDisplayModeHover,
-.dj_ie6 .dijitInlineEditBoxDisplayModeHover {
-       
-       background-color: #e2ebf2;
-       border: solid 1px black;
-}
-.dijitInlineEditBoxDisplayModeDisabled {
-       cursor: default;
-}
-.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;
-       overflow: hidden;       
-}
-.dijitDialogTitleBar {
-       cursor: move;
-}
-.dijitDialogFixed .dijitDialogTitleBar {
-       cursor:default;
-}
-.dijitDialogCloseIcon {
-       cursor: pointer;
-}
-.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 .dijitSpinnerButtonContainer,
-.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;
-}
-.dijitSliderMoveableV {
-       right:50%;
-}
-.dijit_a11y DIV.dijitSliderImageHandle,
-.dijitSliderImageHandle {
-       margin:0;
-       padding:0;
-       position:relative !important;
-       border:8px solid gray;
-       width:0;
-       height:0;
-       cursor: pointer;
-}
-.dj_iequirks .dijit_a11y .dijitSliderImageHandle {
-       font-size: 0;
-}
-.dj_ie7 .dijitSliderImageHandle {
-       overflow: hidden; 
-}
-.dj_ie7 .dijit_a11y .dijitSliderImageHandle {
-       overflow: visible; 
-}
-.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
-       border:4px solid #000;
-       height:8px;
-       width:8px;
-}
-.dijitSliderImageHandleV {
-       top:-8px;
-       right: -50%;
-}
-.dijitSliderImageHandleH {
-       left:50%;
-       top:-5px;
-       vertical-align:top;
-}
-.dijitSliderBar {
-       border-style:solid;
-       border-color:black;
-       cursor: pointer;
-}
-.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;
-}
-.dijitSliderDecoration {
-       text-align:center;
-}
-.dijitSliderV TD {
-       position: relative; 
-}
-.dijitSliderDecorationH {
-       width: 100%;
-}
-.dijitSliderDecorationV {
-       height: 100%;
-}
-.dijitSliderButton {
-       font-family:monospace;
-       margin:0;
-       padding:0;
-       display:block;
-}
-.dijit_a11y .dijitSliderButtonInner {
-       visibility:visible !important;
-}
-.dijitSliderButtonContainer {
-       text-align:center;
-       height:0;       
-}
-.dijitSliderButtonContainer * {
-       cursor: pointer;
-}
-.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%;
-}
-.dijitRuleLabelV {
-       
-       text-overflow: ellipsis;
-       white-space: nowrap;
-       overflow: hidden;
-}
-.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 .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;
-}
-.dijit_a11y .dijitButtonContents .dijitButtonText,
-.dijit_a11y .dijitTab .tabLabel {
-       display: inline !important;
-}
-.dijitTextArea {
-       width:100%;
-       overflow-y: auto;       
-}
-.dijitTextArea[cols] {
-       width:auto; 
-}
-.dj_ie .dijitTextAreaCols {
-       width:auto;
-}
-.dijitToolbarSeparator {
-       height: 18px;
-       width: 5px;
-       padding: 0 1px;
-       margin: 0;
-}
-.dijitIEFixedToolbar {
-       position:absolute;
-       
-       top: expression(eval((document.documentElement||document.body).scrollTop));
-}
-.dijitEditor {
-       display: block; 
-}
-.dijitEditorDisabled,
-.dijitEditorReadOnly {
-       color: gray;
-}
-.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 .dijitTimePickerItemSelected .dijitTimePickerItemInner {
-       border: solid 4px black;
-}
-.dijit_a11y .dijitTimePickerItemHover .dijitTimePickerItemInner {
-       border: dashed 4px black;
-}
-.dijitToggleButtonIconChar {
-       
-       display:none !important;
-}
-.dijit_a11y .dijitToggleButton .dijitToggleButtonIconChar {
-       display:inline !important;
-       visibility:hidden;
-}
-.dj_ie6 .dijitToggleButtonIconChar, .dj_ie6 .tabStripButton .dijitButtonText {
-       font-family: "Arial Unicode MS";        
-}
-.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
-       display: inline !important; 
-       visibility:visible !important;
-}
-.dijitArrowButtonChar {
-        display:none !important;
-}
-.dijit_a11y .dijitArrowButtonChar {
-        display:inline !important;
-}
-.dijit_a11y .dijitDropDownButton .dijitArrowButtonInner,
-.dijit_a11y .dijitComboButton .dijitArrowButtonInner {
-       display:none !important;
-}
-.dijitSelect {
-       margin: 0.2em;
-       border-collapse: collapse;
-}
-.dj_ie .dijitSelect,
-.dj_ie7 .dijitSelect,
-.dj_iequirks .dijitSelect {
-       vertical-align: middle; 
-}
-.dj_ie8 .dijitSelect .dijitButtonText {
-       vertical-align: top;
-}
-.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;
-       white-space: nowrap;
-       text-align: left;
-}
-.dijitSelectFixedWidth .dijitButtonContents {
-       width: 100%;
-}
-.dijitSelectMenu .dijitMenuItemIcon {
-       
-       display:none;
-}
-.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
-.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
-       
-       position: static;
-}
-.dijitSelectLabel *
-{
-       vertical-align: baseline;
-}
-.dijitSelectSelectedOption * {
-       font-weight: bold;
-}
-.dijitSelectMenu {
-       border-width: 1px;
-}
-.dijitSelectMenu .dijitMenuTable {
-       margin: 0px;
-       background-color: transparent;
-}
-.dijitForceStatic {
-       position: static !important;
-}
-.dijitReadOnly *,
-.dijitDisabled *,
-.dijitReadOnly,
-.dijitDisabled {
-       
-       cursor: default;
-}
-.claro {
-       font-family:Verdana,Arial,Helvetica,sans-serif;
-       font-size: .688em;
-       color: #131313;
-}
-h1 {
-       font-size: 1.545em; 
-       font-weight: normal;
-       line-height: 1em; 
-       margin-top: 1em;
-       margin-bottom:0.727em;
-}
-.claro .dijitDialog h1 { 
-       margin-top:0em; 
-}
-h2 { 
-       font-size: 1.364em; 
-       line-height: 1.455em; 
-       margin-top:1em; 
-       margin-bottom:0.60em;
-       font-weight: normal;
-}
-h3, h4, h5, h6 {
-       font-size:1.091em; 
-       font-weight: normal; 
-       line-height: 1.5em; 
-       margin-top: 1.5em; 
-       margin-bottom: 0;
-}
-p { 
-       font-size: 1em; 
-       line-height: 1.3em;
-}
-blockquote { 
-       font-size: 0.916em; 
-       margin-top: 3.272em; 
-       margin-bottom: 3.272em; 
-       line-height: 1.636em; 
-       padding: 1.636em; 
-       border-top: 1px solid #ccc; 
-       border-bottom: 1px solid #ccc;
-}
-ol li, ul li { 
-       font-size: 1em; 
-       line-height: 1.5em; 
-       margin: 0;
-}
-pre, code { 
-       font-size:115%;
-       *font-size:100%;
-       font-family:inherit; 
-       background-color: #efefef; 
-       border: 1px solid #ccc;
-}
-pre { 
-       border-width: 1px 0; 
-       padding: 1.5em;
-}
-table {  font-size:100%; }
-table.dojoTabular { 
-       border-collapse: collapse; 
-       border-spacing: 0; 
-       border: 1px solid #ccc; 
-       margin: 0 1.5em;
-}
-.dojoTabular th { 
-       text-align: center; 
-       font-weight: bold;
-}
-table.dojoTabular thead, table.dojoTabular tfoot { 
-       background-color: #efefef; 
-       border: 1px solid #ccc; 
-       border-width: 1px 0; 
-}
-table.dojoTabular thead tr th,
-table.dojoTabular thead tr td,
-table.dojoTabular tbody tr td,
-table.dojoTabular tfoot tr td { 
-       padding: 0.25em 0.5em;
-}
-       
-.dijitIconSave,
-.dijitIconPrint,
-.dijitIconCut,
-.dijitIconCopy,
-.dijitIconClear,
-.dijitIconDelete,
-.dijitIconUndo,
-.dijitIconEdit,
-.dijitIconNewTask,
-.dijitIconEditTask,
-.dijitIconEditProperty,
-.dijitIconTask,
-.dijitIconFilter,
-.dijitIconConfigure,
-.dijitIconSearch,
-.dijitIconApplication,
-.dijitIconBookmark,
-.dijitIconChart,
-.dijitIconConnector,
-.dijitIconDatabase,
-.dijitIconDocuments,
-.dijitIconMail,
-.dijitLeaf,
-.dijitIconFile,
-.dijitIconFunction,
-.dijitIconKey,
-.dijitIconPackage,
-.dijitIconSample,
-.dijitIconTable,
-.dijitIconUsers,
-.dijitFolderClosed,
-.dijitIconFolderClosed,
-.dijitFolderOpened,
-.dijitIconFolderOpen,
-.dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActEnabled.png); 
-       width: 16px;
-       height: 16px;
-}
-.dj_ie6 .dijitIconSave,
-.dj_ie6 .dijitIconPrint,
-.dj_ie6 .dijitIconCut,
-.dj_ie6 .dijitIconCopy,
-.dj_ie6 .dijitIconClear,
-.dj_ie6 .dijitIconDelete,
-.dj_ie6 .dijitIconUndo,
-.dj_ie6 .dijitIconEdit,
-.dj_ie6 .dijitIconNewTask,
-.dj_ie6 .dijitIconEditTask,
-.dj_ie6 .dijitIconEditProperty,
-.dj_ie6 .dijitIconTask,
-.dj_ie6 .dijitIconFilter,
-.dj_ie6 .dijitIconConfigure,
-.dj_ie6 .dijitIconSearch,
-.dj_ie6 .dijitIconApplication,
-.dj_ie6 .dijitIconBookmark,
-.dj_ie6 .dijitIconChart,
-.dj_ie6 .dijitIconConnector,
-.dj_ie6 .dijitIconDatabase,
-.dj_ie6 .dijitIconDocuments,
-.dj_ie6 .dijitIconMail,
-.dj_ie6 .dijitLeaf,
-.dj_ie6 .dijitIconFile,
-.dj_ie6 .dijitIconFunction,
-.dj_ie6 .dijitIconKey,
-.dj_ie6 .dijitIconPackage,
-.dj_ie6 .dijitIconSample,
-.dj_ie6 .dijitIconTable,
-.dj_ie6 .dijitIconUsers,
-.dj_ie6 .dijitFolderClosed,
-.dj_ie6 .dijitIconFolderClosed,
-.dj_ie6 .dijitFolderOpened,
-.dj_ie6 .dijitIconFolderOpen,
-.dj_ie6 .dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActEnabled8bit.png);
-}
-.dijitDisabled .dijitIconSave,
-.dijitDisabled .dijitIconPrint,
-.dijitDisabled .dijitIconCut,
-.dijitDisabled .dijitIconCopy,
-.dijitDisabled .dijitIconClear,
-.dijitDisabled .dijitIconDelete,
-.dijitDisabled .dijitIconUndo,
-.dijitDisabled .dijitIconEdit,
-.dijitDisabled .dijitIconNewTask,
-.dijitDisabled .dijitIconEditTask,
-.dijitDisabled .dijitIconEditProperty,
-.dijitDisabled .dijitIconTask,
-.dijitDisabled .dijitIconFilter,
-.dijitDisabled .dijitIconConfigure,
-.dijitDisabled .dijitIconSearch,
-.dijitDisabled .dijitIconApplication,
-.dijitDisabled .dijitIconBookmark,
-.dijitDisabled .dijitIconChart,
-.dijitDisabled .dijitIconConnector,
-.dijitDisabled .dijitIconDatabase,
-.dijitDisabled .dijitIconDocuments,
-.dijitDisabled .dijitIconMail,
-.dijitDisabled .dijitLeaf,
-.dijitDisabled .dijitIconFile,
-.dijitDisabled .dijitIconFunction,
-.dijitDisabled .dijitIconKey,
-.dijitDisabled .dijitIconPackage,
-.dijitDisabled .dijitIconSample,
-.dijitDisabled .dijitIconTable,
-.dijitDisabled .dijitIconUsers,
-.dijitDisabled .dijitFolderClosed,
-.dijitDisabled .dijitIconFolderClosed,
-.dijitDisabled .dijitFolderOpened,
-.dijitDisabled .dijitIconFolderOpen,
-.dijitDisabled .dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActDisabled.png); 
-}
-.dijitIconSave { background-position: 0px; }
-.dijitIconPrint { background-position: -16px; }
-.dijitIconCut { background-position: -32px; }
-.dijitIconCopy { background-position: -48px; }
-.dijitIconClear { background-position: -64px; }
-.dijitIconDelete { background-position: -80px; }
-.dijitIconUndo { background-position: -96px; }
-.dijitIconEdit { background-position: -112px; }
-.dijitIconNewTask { background-position: -128px; }
-.dijitIconEditTask { background-position: -144px; }
-.dijitIconEditProperty { background-position: -166px; }
-.dijitIconTask { background-position: -176px; }
-.dijitIconFilter { background-position: -192px; }
-.dijitIconConfigure { background-position: -208px; }
-.dijitIconSearch { background-position: -224px; }
-.dijitIconError { background-position: -496px; } 
-.dijitIconApplication { background-position: -240px; }
-.dijitIconBookmark { background-position: -256px; }
-.dijitIconChart { background-position: -272px; }
-.dijitIconConnector { background-position: -288px; }
-.dijitIconDatabase { background-position: -304px; }
-.dijitIconDocuments { background-position: -320px; }
-.dijitIconMail { background-position: -336px; }
-.dijitIconFile, .dijitLeaf { background-position: -352px; }
-.dijitIconFunction { background-position: -368px; }
-.dijitIconKey { background-position: -384px; }
-.dijitIconPackage{ background-position: -400px; }
-.dijitIconSample { background-position: -416px; }
-.dijitIconTable { background-position: -432px; }
-.dijitIconUsers { background-position: -448px; }
-.dijitIconFolderClosed, .dijitFolderClosed { background-position: -464px; }
-.dijitIconFolderOpen, .dijitFolderOpened { background-position: -480px; }
-.claro .dijitPopup {
-       box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
-       -webkit-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
-       -moz-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
-}
-.claro .dijitTooltipDialogPopup {
-       
-       box-shadow: none;
-       -webkit-box-shadow: none;
-       -moz-box-shadow: none;
-}
-.claro .dijitComboBoxHighlightMatch {
-       background-color:#a5beda;
-}
-.claro .dijitFocusedLabel {
-       
-       outline: 1px dotted #666666;
-}
-.claro .dijitContentPaneLoading {
-       background:url(images/loadingAnimation.gif) no-repeat left center;
-       padding-left:25px;
-}
-.claro .dijitContentPaneError {
-    background:url(../../icons/images/commonIconsObjActEnabled.png) no-repeat left center;
-    background-position: -496px; 
-       no-repeat left center;
-       padding-left:25px;
-}
-.claro .dojoDndItemBefore,
-.claro .dojoDndItemAfter{
-       border-top: 1px solid #769DC0;
-}
-.claro .dojoDndItemOver {
-       cursor:pointer;
-       }
-.claro table.dojoDndAvatar {
-       border: 1px solid #b5bcc7;
-       border-collapse: collapse;
-       background-color: #fff;
-       -webkit-box-shadow:0px 1px 3px rgba(0, 0, 0, .25);
-}
-.claro .dojoDndAvatarHeader td { 
-       height: 20px;
-       padding-left:21px;
-}
-.claro.dojoDndMove .dojoDndAvatarHeader, .claro.dojoDndCopy .dojoDndAvatarHeader {
-       background-image: url(images/dnd.png);
-       background-repeat: no-repeat;
-       background-position:2px -122px;
-}
-.claro .dojoDndAvatarItem td {
-       padding: 5px;
-}
-.claro.dojoDndMove .dojoDndAvatarHeader        {
-       background-color: #f58383; 
-       background-position:2px -103px;
-}
-.claro.dojoDndCopy .dojoDndAvatarHeader        {
-       background-color: #f58383; 
-       background-position:2px -68px;
-}
-.claro.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader  {
-       background-color: #97e68d; 
-       background-position:2px -33px;
-}
-.claro.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader  {
-       background-color: #97e68d;
-       background-position:2px 2px;
-}
-.claro .dijitTextBoxError .dijitValidationContainer {
-       background-color: #d46363;
-       background-image: url(form/images/error.png);
-       background-position: top center;
-       border: solid #d46464 0px;
-       border-left-width: 1px;
-       width: 9px;
-}
-.claro .dijitTextBoxError .dijitValidationIcon {
-       width: 0px;
-       background-color: transparent !important; 
-}
-.claro .dijitTextBox .dijitInputContainer,
-.claro .dijitTextArea,
-.claro .dijitInputField .dijitPlaceHolder {
-       padding: 2px;
-}
-.claro .dijitTextBox,
-.claro .dijitTextBox .dijitButtonNode {
-       
-       border-color: #b5bcc7;
-       -webkit-transition-property:background-color, border;
-       -webkit-transition-duration:.35s;
-}
-.claro .dijitTextBox {
-       background-color: #f7fcff;
-}
-.claro .dijitTextBoxHover,
-.claro .dijitTextBoxHover .dijitButtonNode {
-       border-color: #769dc0;
-       -webkit-transition-duration:.25s;
-}
-.claro .dijitTextBoxHover {
-       background-color: #e9f4fe;
-       background-image: url(form/images/textBox_back.png);
-       background-repeat: repeat-x;
-}
-.claro .dijitTextBoxError,
-.claro .dijitTextBoxError .dijitButtonNode {
-       border-color: #d46464;
-}
-.claro .dijitTextBoxError,
-.claro .dijitTextBoxError .dijitInputContainer {
-       background-color: #fdf7f7;
-}
-.claro .dijitTextBoxFocused,
-.claro .dijitTextBoxFocused .dijitButtonNode {
-       border-color:#769dc0;
-       -webkit-transition-duration:.1s;
-}
-.claro .dijitTextBoxFocused {
-       background-color: #fff;
-       background-image: url(form/images/textBox_back.png);
-       background-repeat: repeat-x;
-}
-.claro .dijitTextBoxFocused .dijitInputContainer {
-       background: #fff;
-}
-.claro .dijitTextBoxErrorFocused,
-.claro .dijitTextBoxErrorFocused .dijitButtonNode {
-       border-color: #ce4f4f;
-}
-.claro .dijitTextBoxDisabled,
-.claro .dijitTextBoxDisabled .dijitButtonNode {
-       border-color: #d3d3d3;
-}
-.claro .dijitTextBoxDisabled {
-       background-color: #efefef;
-       background-image: none;
-       color: #818181;
-}
-.claro .dijitComboBox .dijitArrowButtonInner {
-       background-image: url(form/images/commonFormArrows.png);
-       background-position:-35px 53%;
-       background-repeat: no-repeat;
-       margin: 0px;
-       width:16px;
-       height:100%;
-       border: 1px solid #fff;
-}
-.claro .dijitTextBox .dijitInputField {
-       padding-top: 1px; 
-       padding-bottom: 1px;
-}
-.claro .dijitTextBox .dijitInputInner {
-       
-       padding: 1px 2px 1px 0; 
-}
-.claro .dijitTextBox .dijitValidationContainer {
-       padding: 0 0 2px 0; 
-}
-.claro .dijitComboBox .dijitButtonNode {
-       background-color: #ebeef4;
-       background-image: url(form/images/formHighlight.png);
-       background-repeat:repeat-x;
-}
-.claro .dijitComboBoxHover .dijitButtonNode {
-       background-color:#abd6ff;
-}
-.claro .dijitComboBoxHover .dijitArrowButtonInner {
-       background-position:-70px 53%;
-}
-.claro .dijitComboBoxFocused .dijitButtonNode {
-       background-color:#7dbefa;
-       background-position:0px -177px;
-       padding: 1px;
-}      
-.claro .dijitComboBoxFocused .dijitArrowButtonInner {
-       background-position:-70px 53%;
-       border: 0px none;
-}
-.claro div.dijitComboBoxDisabled .dijitArrowButtonInner {
-       
-       background-position:0px 50%;
-       background-color:#f1f1f1;
-}
-.dj_ff3 .claro .dijitInputField input[type="hidden"] {
-       display: none;
-       height: 0;
-       width: 0;
-}
-.dj_ie6 .claro .dijitTextBox,
-.dj_ie6 .claro .dijitComboBox .dijitButtonNode {
-       background-image: none;
-}
-.dj_quirks .claro .dijitComboBox .dijitArrowButtonInner {
-       border: 0px;
-}
-.dj_quirks .claro .dijitComboBox .dijitArrowButtonContainer {
-       padding: 1px;
-}
-.claro .dijitButtonNode {
-       
-       -webkit-transition-property:background-color;
-       -webkit-transition-duration:.3s;
-}
-.claro .dijitButton .dijitButtonNode,
-.claro .dijitDropDownButton .dijitButtonNode,
-.claro .dijitComboButton .dijitButtonNode,
-.claro .dijitToggleButton .dijitButtonNode {
-       
-       border: 1px solid #769dc0;
-       padding:2px 4px 4px 4px;
-       background-image: url(form/images/button.png);
-       background-position: center top;
-       background-repeat: repeat-x;
-       background-color: #e4f2ff;
-       border-radius: 4px;
-       -moz-border-radius: 4px;
-       -webkit-border-radius: 4px;
-       box-shadow:0px 1px 1px rgba(0,0,0,0.15);
-       -webkit-box-shadow:0px 1px 1px rgba(0,0,0,0.15);
-       -moz-box-shadow: 0px 1px 1px rgba(0,0,0,0.15);  
-}
-.claro .dijitComboButton .dijitArrowButton {
-       border-left-width: 0px;
-       padding: 4px 2px 4px 2px;       
-}
-.claro .dijitArrowButtonInner {
-       width: 15px;
-       height: 15px;
-       margin: 0 auto;
-       background-image:url(form/images/buttonArrows.png);
-       background-repeat:no-repeat;
-       background-position:-51px 53%;
-}
-.claro .dijitLeftArrowButton .dijitArrowButtonInner {
-       background-position: -77px 53%;
-}
-.claro .dijitRightArrowButton .dijitArrowButtonInner {
-       background-position: -26px 53%;
-}
-.claro .dijitUpArrowButton .dijitArrowButtonInner {
-       background-position: 0px 53%;
-}
-.claro .dijitDisabled .dijitArrowButtonInner {
-       background-position: -151px 53%;
-}
-.claro .dijitDisabled .dijitLeftArrowButton .dijitArrowButtonInner {
-       background-position: -177px 53%;
-}
-.claro .dijitDisabled .dijitRightArrowButton .dijitArrowButtonInner {
-       background-position: -126px 53%;
-}
-.claro .dijitDisabled .dijitUpArrowButton .dijitArrowButtonInner {
-       background-position: -100px 53%;
-}
-.claro .dijitButtonText {
-       padding: 0 0.3em;
-       text-align: center;
-}
-.claro .dijitDisabled .dijitButtonText {
-       color: #7F7F7F;
-}
-.claro .dijitButtonHover .dijitButtonNode,
-.claro .dijitDropDownButtonHover .dijitButtonNode,
-.claro .dijitComboButton .dijitButtonNodeHover, 
-.claro .dijitComboButton .dijitDownArrowButtonHover,
-.claro .dijitToggleButtonHover .dijitButtonNode {
-       background-color: #afd9ff;
-       color:#000;
-       -webkit-transition-duration:.2s;
-}
-.claro .dijitButtonActive .dijitButtonNode, 
-.claro .dijitDropDownButtonActive .dijitButtonNode,
-.claro .dijitComboButtonActive .dijitButtonNode,
-.claro .dijitToggleButtonActive .dijitButtonNode {
-       background-color: #99cfff;
-       box-shadow:0px 0px 0px rgba(0,0,0,0);
-       -webkit-box-shadow:0px 0px 0px rgba(0,0,0,0);
-       -moz-box-shadow: 0px 0px 0px rgba(0,0,0,0);
-       -webkit-transition-duration:.1s;
-}
-.claro .dijitButtonDisabled,
-.claro .dijitDropDownButtonDisabled,
-.claro .dijitComboButtonDisabled,
-.claro .dijitToggleButtonDisabled {
-       background-image: none;
-       outline: none;
-}
-.claro .dijitButtonDisabled .dijitButtonNode,
-.claro .dijitDropDownButtonDisabled .dijitButtonNode,
-.claro .dijitComboButtonDisabled .dijitButtonNode,
-.claro .dijitToggleButtonDisabled .dijitButtonNode { 
-       background-position:0px -149px;
-       background-color: #e3e3e3;
-       border: solid 1px #c9c9c9;
-       color: #696969;
-       box-shadow:0px 0px 0px rgba(0,0,0,0);
-       -webkit-box-shadow:0px 0px 0px rgba(0,0,0,0);
-       -moz-box-shadow: 0px 0px 0px rgba(0,0,0,0);
-}
-.claro .dijitComboButtonDisabled .dijitArrowButton{ 
-       border-left-width: 0px;
-}
-.claro table.dijitComboButton {
-       border-collapse: separate;      
-}
-.dj_ie6 .claro .dijitButtonNode {
-       background-image: none;
-}
-.claro .dijitComboButton .dijitStretch {
-       -moz-border-radius: 4px 0px 0px 4px;
-       -webkit-border-top-left-radius: 4px;
-       -webkit-border-top-right-radius: 0px;
-       -webkit-border-bottom-right-radius: 0px;
-       -webkit-border-bottom-left-radius: 4px;
-}
-.claro .dijitComboButton .dijitArrowButton {
-       -moz-border-radius: 0px 4px 4px 0px;
-       -webkit-border-top-left-radius: 0px;
-       -webkit-border-top-right-radius: 4px;
-       -webkit-border-bottom-right-radius: 4px;
-       -webkit-border-bottom-left-radius: 0px;
-}
-.claro .dijitToggleButton .dijitCheckBoxIcon {
-       background-image: url(images/checkmarkNoBorder.png);
-}
-.dj_ie6 .claro .dijitToggleButton .dijitCheckBoxIcon {
-       background-image: url(images/checkmarkNoBorder.gif);
-}
-.claro .dijitCheckBox,
-.claro .dijitCheckBoxIcon                      {
-       background-image: url(form/images/checkboxRadioButtonStates.png); 
-       background-repeat: no-repeat;
-       width: 15px;
-       height: 16px;
-       margin: 0 2px 0 0;
-       padding: 0;
-}
-.dj_ie6 .claro .dijitCheckBox,
-.dj_ie6 .claro .dijitCheckBoxIcon                      {
-       background-image: url(form/images/checkboxAndRadioButtons_IE6.png); 
-}
-.claro .dijitCheckBox,
-.claro .dijitToggleButton .dijitCheckBoxIcon {
-       
-       background-position: -15px;
-}
-.claro .dijitCheckBoxChecked,
-.claro .dijitToggleButtonChecked .dijitCheckBoxIcon {
-       
-       background-position: -0px;
-}
-.claro .dijitCheckBoxDisabled {
-       
-       background-position: -75px;
-}
-.claro .dijitCheckBoxCheckedDisabled {
-       
-       background-position: -60px;
-}
-.claro .dijitCheckBoxHover {
-       
-       background-position: -45px;
-}
-.claro .dijitCheckBoxCheckedHover {
-       
-       background-position: -30px;
-}
-.claro .dijitToggleButton .dijitRadio,
-.claro .dijitToggleButton .dijitRadioIcon {
-       background-image: url(form/images/checkboxRadioButtonStates.png);
-}
-.dj_ie6 .claro .dijitToggleButton .dijitRadio,
-.dj_ie6 .claro .dijitToggleButton .dijitRadioIcon {
-       background-image: url(form/images/checkboxAndRadioButtons_IE6.png);
-}
-.claro .dijitRadio,
-.claro .dijitRadioIcon {               
-       background-image: url(form/images/checkboxRadioButtonStates.png); 
-       background-repeat: no-repeat;
-       width: 15px;
-       height: 15px;
-       margin: 0px 2px 0px 0px;
-       padding: 0px;
-}
-.dj_ie6 .claro .dijitRadio,
-.dj_ie6 .claro .dijitRadioIcon {               
-       background-image: url(form/images/checkboxAndRadioButtons_IE6.png); 
-}
-.claro .dijitRadio{
-       
-       background-position: -105px;
-}
-.claro .dijitToggleButton .dijitRadioIcon {
-       
-       background-position: -107px;
-}
-.claro .dijitRadioDisabled {
-       
-       background-position: -165px;
-}
-.claro .dijitRadioHover {
-       
-       background-position: -135px;
-}
-.claro .dijitRadioChecked{
-       background-position: -90px;
-}
-.claro .dijitToggleButtonChecked .dijitRadioIcon {
-       background-position: -92px;
-}
-.claro .dijitRadioCheckedHover{
-       background-position: -120px;
-}
-.claro .dijitRadioCheckedDisabled {
-       
-       background-position: -150px;
-}
-.claro .dijitSelect .dijitButtonText {
-       padding: 0px 5px 2px 5px;
-}
-.claro .dijitSelect {
-       border: 1px solid #b5bcc7;
-       background-color: #f7fcff;
-       border-collapse: separate;
-}
-.dj_ie6 .claro .dijitSelect,
-.dj_ie6 .claro .dijitSelect .dijitButtonNode {
-       background-image:none;
-}
-.claro .dijitSelect .dijitButtonContents {
-       border: 0px solid #b5bcc7;
-       border-right-width: 1px;
-}
-.claro .dijitSelect .dijitArrowButton {
-       padding: 0;
-       border: 1px solid #fff; 
-       border-top:none;
-       background-color:#ebeef4;
-       background-image: url(form/images/formHighlight.png);
-       background-repeat:repeat-x;
-}
-.claro .dijitSelect .dijitArrowButton .dijitArrowButtonInner {
-       background-image: url(form/images/commonFormArrows.png);
-       background-position:-35px 70%;
-       background-repeat: no-repeat;
-       width:16px;
-       height:16px;
-       display:block;
-}
-.claro .dijitSelectHover {
-       border: 1px solid #769dc0;
-       background-color: #e9f4fe;
-       background-image: url(form/images/textBox_back.png);
-       background-repeat: repeat-x;
-}
-.claro .dijitSelectHover .dijitButtonContents {
-       border-color:#81a5c6;
-}
-.claro .dijitSelectHover .dijitArrowButton {
-       background-color:#abd6ff;
-}
-.claro .dijitSelectHover .dijitArrowButton .dijitArrowButtonInner {
-       background-position:-70px 70%;
-}
-.claro .dijitSelectFocused {
-       border: 1px solid #769dc0;
-}
-.claro .dijitSelectFocused .dijitButtonContents {
-       border-color:#81a5c6;
-}
-.claro .dijitSelectFocused .dijitArrowButton {
-       background-color:#7dbefa;
-       background-position:0px -177px;
-       border: none;
-       padding: 0px 1px;
-}
-.claro .dijitSelectFocused .dijitArrowButton .dijitArrowButtonInner {
-       background-position:-70px 70%;
-       margin-bottom: 1px;
-}
-.claro .dijitSelectDisabled {
-       border: 1px solid #d3d3d3;
-       background-color: #efefef;
-       background-image: none;
-       color: #818181;
-}
-.claro .dijitSelectDisabled .dijitArrowButton { 
-       background-color: #efefef;
-}
-.claro .dijitSelectDisabled .dijitArrowButton .dijitArrowButtonInner {
-       background-position:0px 70%
-}
-.claro .dijitSelectMenu td.dijitMenuItemIconCell,
-.claro .dijitSelectMenu td.dijitMenuArrowCell { 
-       
-       display: none;  
-}
-.claro .dijitSelectMenu td.dijitMenuItemLabel {
-       
-       padding-left: 5px;
-       padding-right: 5px;
-}
-.claro .dijitSelectMenu .dijitMenuSeparatorTop {
-       border-bottom:1px solid #769dc0;
-}
-.claro .dijitTabPaneWrapper {
-       background:#fff;
-}
-.claro .dijitTabPaneWrapper,
-.claro .dijitTabContainerTop-tabs,
-.claro .dijitTabContainerBottom-tabs,
-.claro .dijitTabContainerLeft-tabs,
-.claro .dijitTabContainerRight-tabs {
-       
-       border-color: #b5bcc7;
-}
-.claro .dijitTabCloseButton {
-       background: url(layout/images/tabClose.png) no-repeat;
-       width: 14px;
-       height: 14px;
-       margin-left: 5px;
-       margin-right:-3px;
-}
-.claro .dijitTabCloseButtonHover {
-       background-position:-14px;
-}
-.claro .dijitTabCloseButtonActive {
-       background-position:-28px;
-}
-.claro .dijitTabSpacer {
-       
-       display: none;
-}
-.claro .dijitTabInnerDiv {
-       background-color:#e6e6e7;
-       -webkit-transition-property:background-color, border;
-       -webkit-transition-duration:.35s;
-       color:#4a4a4a;
-}
-.claro .dijitTabHover .dijitTabInnerDiv {
-       background-color:#a9d6ff;
-       -webkit-transition-duration:.25s;
-       color:#000;
-}
-.claro .dijitTabActive .dijitTabInnerDiv {
-       background-color:#8bc4f9;
-       color:#000;
-       -webkit-transition-duration:.1s;
-}
-.claro .dijitTabChecked .dijitTabInnerDiv {
-       background-color:#b2d4f3;
-       color:#000;
-}
-.claro .dijitTabContent {
-       border: 1px solid #b5bcc7;
-}
-.claro .dijitTabHover .dijitTabContent,
-.claro .dijitTabActive .dijitTabContent {
-       border-color: #769dc0;
-}
-.claro .dijitTabChecked .dijitTabContent {
-       color:#000;
-       border-color: #b5bcc7;  
-}
-.claro .tabStripButton .dijitTabInnerDiv {
-       background-color: transparent;
-}
-.claro .tabStripButton .dijitTabContent {
-       border: none;
-}
-.claro .dijitTabContainerTop-tabs .dijitTab {
-       top: 1px;       
-       margin-right: 1px;
-       padding-top: 3px;
-}
-.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTab {
-       top: 3px;
-}
-.claro .dijitTabContainerTop-tabs .dijitTabContent {
-       padding:3px 8px 3px 4px;
-       border-bottom: 1px;
-       background-image:url(layout/images/tabTop.png);
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       min-width: 60px;
-       text-align: center;
-}
-.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
-       padding-bottom: 4px;
-       padding-top: 6px;
-}
-.dj_ie .claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
-       border-bottom: none;
-}
-.claro .dijitTabContainerTop-tabs .dijitTabInnerDiv {
-       background-image:url(layout/images/tabTop.png);
-       background-position:0px -248px;
-       background-position:bottom;
-       background-repeat:repeat-x;
-       box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
-       -webkit-box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
-       -moz-box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
-}
-.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabInnerDiv {
-       background-image:none;
-       box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
-       -webkit-box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
-       -moz-box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
-}
-.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
-       background-position:0px -102px;
-       background-repeat:repeat-x;
-}
-.claro .dijitTabContainerBottom-tabs .dijitTab {
-       top: -1px;      
-       margin-right: 1px;
-}
-.claro .dijitTabContainerBottom-tabs .dijitTabContent {
-       padding:3px 8px 4px 4px;
-       border-top: none;
-       background-image: url(layout/images/tabBottom.png);
-       background-position:0px -249px;
-       background-repeat: repeat-x;
-       background-position:bottom;
-       min-width: 60px;
-       text-align: center;
-}
-.claro .dijitTabContainerBottom-tabs .dijitTab {
-       padding-bottom: 3px;
-}
-.claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
-       background-image: url(layout/images/tabBottom.png);
-       background-position: top;
-       background-repeat: repeat-x;
-       box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
-       -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
-       -moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
-       
-}
-.claro .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabContent {
-       padding-bottom: 7px;
-       padding-top: 4px;
-       background-position:0px -119px;
-}
-.claro .dijitTabContainerBottom-tabs .dijitTabChecked {
-       padding-bottom: 0;
-}
-.claro .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
-       background-image:none;
-       box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
-       -webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
-       -moz-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
-}
-.claro .dijitTabContainerLeft-tabs .dijitTab {
-       left: 1px;      
-       margin-bottom: 1px;
-}
-.claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
-       background-image: url(layout/images/tabLeft.png);
-       background-position: -347px -340px;
-       background-repeat: repeat-y;
-}
-.claro .dijitTabContainerLeft-tabs .dijitTabContent {
-       padding:3px 8px 4px 4px;
-       background-image: url(layout/images/tabLeft.png);
-       background-repeat: repeat-y;
-       background-position:0px 0px;
-}
-.claro .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabContent {
-       padding-right: 9px;
-       border-right: none;
-       background-image: none;
-}
-.claro .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv {
-       background-position:0px -179px;
-       background-repeat:repeat-y;
-       box-shadow: -1px 0px 2px rgba(0, 0, 0, .05);
-       -webkit-box-shadow: -1px 0px 2px rgba(0, 0, 0, .05);
-       -moz-box-shadow: -1px 0px 2px rgba(0, 0, 0, 0.05);
-}
-.claro .dijitTabContainerRight-tabs .dijitTab {
-       left: -1px;     
-       margin-bottom: 1px;
-}
-.claro .dijitTabContainerRight-tabs .dijitTabInnerDiv {
-       background-image: url(layout/images/tabRight.png);
-       background-repeat: repeat-y;
-       background-position: -1px -347px;
-}
-.claro .dijitTabContainerRight-tabs .dijitTabContent {
-       padding:3px 8px 4px 4px;
-       background-image: url(layout/images/tabRight.png);
-       background-position:right top;
-       background-repeat: repeat-y;
-}
-.claro .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabContent {
-       padding-left: 5px;
-       border-left: none;
-       background-image: none;
-}
-.claro .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv {
-       background-position:-348px -179px;
-       box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
-       -webkit-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
-       -moz-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
-}
-.claro .dijitTabContainerTop-tabs .dijitTabInnerDiv,
-.claro .dijitTabContainerTop-tabs .dijitTabContent {
-       border-radius: 2px 2px 0px 0px;
-       -moz-border-radius: 2px 2px 0px 0px;
-       -webkit-border-top-left-radius:2px;
-       -webkit-border-top-right-radius:2px;
-}
-.claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv,
-.claro .dijitTabContainerBottom-tabs .dijitTabContent{
-       border-radius: 0px 0px 2px 2px;
-       -moz-border-radius: 0px 0px 2px 2px;
-       -webkit-border-bottom-right-radius:2px;
-       -webkit-border-bottom-left-radius:2px;
-}
-.claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv,
-.claro .dijitTabContainerLeft-tabs .dijitTabContent{
-       border-radius: 2px 0px 0px 2px;
-       -moz-border-radius: 2px 0px 0px 2px;
-       -webkit-border-top-left-radius:2px;
-       -webkit-border-bottom-left-radius:2px;
-}
-.claro .dijitTabContainerRight-tabs .dijitTabInnerDiv,
-.claro .dijitTabContainerRight-tabs .dijitTabContent{
-       border-radius: 0px 2px 2px 0px;
-       -moz-border-radius: 0px 2px 2px 0px;
-       -webkit-border-top-right-radius:2px;
-       -webkit-border-bottom-right-radius:2px;
-}
-.claro .tabStripButton {
-       background-color:#deecf9;
-       border: 1px solid #b5bcc7;
-}
-.claro .dijitTabListContainer-top .tabStripButton {
-       padding: 4px 3px;
-       margin-top:7px;
-       background-image: url(layout/images/tabTop.png);
-       background-position:0px 0px;
-}
-.claro .dijitTabListContainer-bottom .tabStripButton {
-       padding:5px 3px;
-       margin-bottom:4px;
-       background-image: url(layout/images/tabTop.png);
-       background-position:0px -248px;
-       background-position:bottom;
-}
-.claro .tabStripButtonHover {
-       background-color:#a6d2fb;
-}
-.claro .tabStripButtonActive {
-       background-color:#7dbefa;
-}
-.claro .dijitTabStripIcon {
-       height:15px;
-       width:15px;
-       margin: 0 auto;
-       background:url(form/images/buttonArrows.png) no-repeat -75px 50%;
-       background-color: transparent;
-}
-.claro .dijitTabStripSlideRightIcon{
-       background-position: -24px 50%;
-}
-.claro .dijitTabStripMenuIcon {
-       background-position: -51px 50%;
-}
-.claro .dijitTabListContainer-top .tabStripButtonDisabled,
-.claro .dijitTabListContainer-bottom .tabStripButtonDisabled {
-       background-color:#dddddd;
-       border:1px solid #c9c9c9;
-}
-.claro .tabStripButtonDisabled .dijitTabStripSlideLeftIcon {
-       background-position:-175px 50%;
-}
-.claro .tabStripButtonDisabled .dijitTabStripSlideRightIcon {
-       background-position: -124px 50%;
-}
-.claro .tabStripButtonDisabled .dijitTabStripMenuIcon {
-       background-position: -151px 50%;
-} 
-.claro .dijitTabContainerNested .dijitTabListWrapper {
-       height: auto;
-}
-.claro .dijitTabContainerNested .dijitTabContainerTop-tabs {
-       border-bottom:solid 1px #b5bcc7;
-       padding:1px 2px 4px;
-       margin-top:-2px;
-}
-.claro .dijitTabContainerTabListNested .dijitTabContent {
-       background:rgba(255, 255, 255, 0) none repeat scroll 0 0;
-       border: none;
-       padding: 4px;
-       border-color: rgba(118,157,192,0);
-       -webkit-transition-property:background-color, border-color;
-       -webkit-transition-duration:.3s;
-}
-.claro .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv {
-       
-       background: none;
-       border: none;
-       top: 0px;
-       box-shadow: none;
-       -webkit-box-shadow: none;
-       -moz-box-shadow: none;
-}
-.claro .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent {
-       background-color:#eaf4fc;
-       border-radius: 2px 2px 2px 2px;
-       -moz-border-radius: 2px 2px 2px 2px;
-       -webkit-border-radius:2px;
-       border:solid 1px #c8dff3;
-       padding: 3px;
-       webkit-transition-duration:.2s;
-}
-.claro .dijitTabContainerTabListNested .dijitTabHover .tabLabel {
-       text-decoration: none;
-}
-.claro .dijitTabContainerTabListNested .dijitTabActive .dijitTabContent {
-       border-radius: 2px 2px 2px 2px;
-       -moz-border-radius: 2px 2px 2px 2px;
-       -webkit-border-radius:2px;
-       border:solid 1px #a8c7e2;
-       padding: 3px;
-       background:#b9d9f5 url(layout/images/tabNested.png) repeat-x;
-       -webkit-transition-duration:.1s;
-}
-.claro .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent {
-       border-radius: 2px 2px 2px 2px;
-       -moz-border-radius: 2px 2px 2px 2px;
-       -webkit-border-radius:2px;
-       padding: 3px;
-       border:solid 1px #a8c7e2;
-       background-position: 0px 105px;
-       background-color:#d4e8f9;
-}
-.claro .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
-       text-decoration: none;
-       background-image:none;
-}
-.claro .dijitTabPaneWrapperNested {
-       border: none;
-}
-.dj_ie6 .claro .dijitTabContent,
-.dj_ie6 .claro .dijitTabInnerDiv,
-.dj_ie6 .dijitTabListContainer-top .tabStripButton,
-.dj_ie6 .dijitTabListContainer-bottom .tabStripButton{
-       background-image: none;
-}
-.claro .dijitDialog {
-       border: 1px solid #769dc0;
-       box-shadow:0px 1px 5px rgba(0,0,0,0.25);
-       -webkit-box-shadow:0px 1px 5px rgba(0,0,0,0.25);
-       -moz-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
-} 
-.claro .dijitDialogPaneContent {
-       background: #fff repeat-x top left;
-       border-top: 1px solid #769dc0;
-       padding:10px 8px;
-       position: relative;
-}
-.claro .dijitDialogPaneContentArea {
-        
-       margin: -10px -8px;
-       padding: 10px 8px;
-}
-.claro .dijitDialogPaneActionBar {
-       
-       background-color: #f2f2f2;
-       padding: 3px 5px 2px 7px;
-       text-align: right;
-       border-top: 1px solid #cdcdcd;
-       margin: 10px -8px -10px;
-}
-.claro .dijitDialogPaneActionBar .dijitButton {
-       float: none;
-}
-.claro .dijitDialogTitleBar {
-       
-       border: 1px solid #fff;
-       border-top:none;
-       background-color: #abd6ff;
-       background-image: url(images/titlebar.png);
-       background-repeat:repeat-x;
-       padding: 5px 7px 4px 7px;
-}
-.claro .dijitDialogTitle {
-       
-       padding: 0px 1px;
-       font-size:1.091em;
-}
-.claro .dijitDialogCloseIcon {
-       
-       background: url(images/dialogCloseIcon.png);
-       background-repeat:no-repeat;
-       position: absolute;
-       right: 5px;
-       height: 15px;
-       width: 21px;
-}
-.dj_ie6 .claro .dijitDialogCloseIcon {
-       background-image: url(images/dialogCloseIcon8bit.png);
-}
-.claro .dijitDialogCloseIconHover {
-       background-position:-21px;
-}
-.claro .dijitDialogCloseIconActive {
-       background-position:-42px;
-}
-.claro .dijitTooltip,
-.claro .dijitTooltipDialog {
-       
-       background: transparent;        
-}
-.dijitTooltipBelow {
-       
-       padding-top: 13px;
-       padding-left:3px;
-       padding-right:3px;
-}
-.dijitTooltipAbove {
-       
-       padding-bottom: 13px;
-       padding-left:3px;
-       padding-right:3px;
-}
-.claro .dijitTooltipContainer {
-       
-       background-color:#fff;
-       background-image:url(images/tooltip.png);
-       background-repeat:repeat-x;
-       background-position:-575px 100%;
-       border:1px solid #769DC0;
-       padding:6px 8px;
-       border-radius: 4px;
-       -webkit-border-radius: 4px;
-       -moz-border-radius: 4px;
-       box-shadow:0px 1px 3px rgba(0,0,0,0.25);
-       -webkit-box-shadow:0px 1px 3px rgba(0,0,0,0.25);
-       -moz-box-shadow: 0px 1px 3px rgba(0,0,0,0.25);
-       font-size: 1em;
-} 
-.dj_ie6 .claro .dijitTooltipContainer {
-       background-image: none;
-}
-.claro .dijitTooltipConnector {
-       
-       border: 0px;
-       z-index: 2;
-       background-image:url(images/tooltip.png);
-       background-repeat:no-repeat;
-       width:16px;
-       height:14px;
-}
-.dj_ie6 .claro .dijitTooltipConnector {
-       background-image:url(images/tooltip8bit.png);
-}
-.claro .dijitTooltipABRight .dijitTooltipConnector {
-       
-       left: auto !important;
-       right: 3px;
-}
-.claro .dijitTooltipBelow .dijitTooltipConnector {
-       
-       top: 0px;
-       left: 3px;
-       background-position:-31px 0%;
-       width:16px;
-       height:14px;
-}
-.claro .dijitTooltipAbove .dijitTooltipConnector {
-       
-       bottom: 0px;
-       left: 3px;
-       background-position:-15px 0%;
-       width:16px;
-       height:14px;
-}
-.dj_ie7 .claro .dijitTooltipAbove .dijitTooltipConnector,
-.dj_ie6 .claro .dijitTooltipAbove .dijitTooltipConnector {
-       bottom: -1px;
-}
-.claro .dijitTooltipLeft {
-       padding-right: 14px;
-}
-.dj_ie6 .claro .dijitTooltipLeft {
-       padding-left: 15px;
-}
-.claro .dijitTooltipLeft .dijitTooltipConnector {
-       
-       right: 0px;
-       bottom: 3px;
-       background-position:0px 0%;
-       width:16px;
-       height:14px;
-}
-.claro .dijitTooltipRight {
-       padding-left: 14px;
-}
-.claro .dijitTooltipRight .dijitTooltipConnector {
-       
-       left: 0px;
-       bottom: 3px;
-       background-position:-48px 0%;
-       width:16px;
-       height:14px;
-}
-.claro .dijitDialogUnderlay {
-       background: #fff;
-}
-.claro .dijitAccordionContainer {
-       border:none;
-}
-.claro .dijitAccordionInnerContainer {
-       background-color: #e6e6e7;      
-       border:solid 1px #b5bcc7;
-       margin-bottom:1px;
-       -webkit-transition-property:background-color,border;
-       -webkit-transition-duration:.3s;
-       -webkit-transition-timing-function:linear;
-}
-.claro .dijitAccordionTitle {
-       background-color: transparent;  
-       background-image: url(layout/images/accordion.png);
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       padding: 5px 7px 2px 7px;
-       min-height:17px;
-       color:#4a4a4a;
-}
-.dj_ie6 .claro .dijitAccordionTitle {
-       background-image: none;
-}
-.claro .dijitAccordionContainer .dijitAccordionContainer-child {
-       background-color:#fff;
-       
-       border:1px solid #92bce1 !important;
-       margin: 0px 2px 2px;
-       padding: 9px;
-}
-.claro .dijitAccordionInnerContainerActive {
-       border:1px solid #769DC0;
-       background-color:#7dbefa;
-       -webkit-transition-duration:.1s;
-}
-.claro .dijitAccordionInnerContainerActive .dijitAccordionTitle {
-       background-position:0px -136px;
-       color:#000;
-}
-.claro .dijitAccordionInnerContainerSelected {
-       border-color:#92bce1;
-       background-color: #cde8ff;
-}
-.claro .dijitAccordionInnerContainerSelected .dijitAccordionTitle {
-       color:#000;
-       background-position: 0 0;       
-}
-.claro .dijitAccordionInnerContainerHover dijitAccordionTitle {
-       
-       color:#000;
-}
-.claro .dijitAccordionInnerContainerHover,
-.claro .dijitAccordionInnerContainerSelectedActive {
-       border:1px solid #769DC0;
-       background-color:#9dcfff;
-       -webkit-transition-duration:.2s;
-}
-.claro .dijitAccordionInnerContainerSelectedHover .dijitAccordionContainer-child,
-.claro .dijitAccordionInnerContainerSelectedActive .dijitAccordionContainer-child {
-       background-color:#ffffff;
-       border:1px solid #769DC0 !important;
-       -webkit-box-shadow:inset 0px 0px 3px rgba(0, 0, 0, .25);
-       -moz-box-shadow:inset 0px 0px 3px rgba(0, 0, 0, .25);
-}
-.claro .dijitContentPane {
-       padding: 8px;
-}              
-.claro .dijitTabContainerTop-dijitContentPane,
-.claro .dijitTabContainerLeft-dijitContentPane,
-.claro .dijitTabContainerBottom-dijitContentPane,
-.claro .dijitTabContainerRight-dijitContentPane,
-.claro .dijitAccordionContainer-dijitContentPane {
-       background-color: #fff;
-       padding: 8px;           
-}
-.claro .dijitSplitContainer-dijitContentPane,
-.claro .dijitBorderContainer-dijitContentPane {
-       background-color: #fff;         
-       padding: 8px;
-}
-.claro .dijitCalendar {
-       border:solid 1px #b5bcc7;
-       background-color:#d4ebff;
-       background-image:url(images/calendarContainerImages.png);
-       background-position:0px -448px;
-       background-repeat:repeat-x;
-       text-align:center;
-       padding:6px 5px 3px 5px;
-       -moz-border-radius:4px;
-       -webkit-border-radius:4px;      
-}
-.dj_ie6 .claro .dijitCalendar {
-       background-image:none;
-}
-.claro .dijitCalendar img {
-       border:none;
-}
-.claro .dijitCalendarHover,
-.claro .dijitCalendarActive {
-       background-color: #b7dcff;
-       border:solid 1px #769dc0;
-}
-.claro .dijitCalendarMonthContainer th {
-       text-align:center;
-       padding-bottom:4px;
-       vertical-align:middle;
-}
-.claro .dijitCalendarMonthLabelSpacer {
-       display:none;
-}
-.claro .dijitCalendarMonthLabel {
-       color:#000000;
-       font-size: 1.091em;
-       display: block;
-}
-.claro .dijitCalendarIncrementControl {
-       width:18px;
-       height:16px;
-       background-image: url(images/calendarArrows.png);
-       background-repeat: no-repeat;
-}
-.dj_ie6 .claro .dijitCalendarIncrementControl {
-       background-image: url(images/calendarArrows8bit.png);
-}
-.claro .dijitCalendarIncrease {
-       background-position:-18px 0px;
-}
-.claro .dijitCalendarArrowHover .dijitCalendarDecrease {
-       background-position:-36px 0px;
-}
-.claro .dijitCalendarArrowHover .dijitCalendarIncrease {
-       background-position:-55px 0px;
-}
-.claro .dijitCalendarArrowActive .dijitCalendarDecrease {
-       background-position:-72px 0px;
-}
-.claro .dijitCalendarArrowActive .dijitCalendarIncrease {
-       background-position:-91px 0px;
-}
-.claro .dijitA11ySideArrow {
-       
-       display: none;
-}
-.claro .dijitDayLabels th {
-       padding:0px 4px 0px 4px;
-       border-bottom:solid 1px #99b5cd;
-       font-weight:bold;
-       text-align:center;
-}
-.claro .dijitCalendarDayLabelTemplate {
-       padding-bottom:0em;
-       text-align:center;
-       border-bottom:1px solid #99B5CD;
-       font-size:0.909em;
-       padding:0 3px 2px;
-}
-.claro .dijitCalendarDateTemplate {
-       text-align:center;
-       background-color:#fff;
-       background-image:url(images/calendarContainerImages.png);
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       border-bottom: 1px solid #dadde1;
-       padding-top:0px;
-       font-size:0.909em;
-       font-family: Arial;
-       font-weight:bold;
-       letter-spacing:.05em;
-       text-align:center;
-}
-.dj_ie6 .claro .dijitCalendarDateTemplate {
-       background-image: none;
-}
-.claro .dijitCalendarPreviousMonth,
-.claro .dijitCalendarNextMonth {
-       background-color:#ebf3f9;
-       background-image:none;
-       border-bottom:solid 1px #d2dae8;
-       color:#547da1;
-}
-.claro .dijitCalendarDateTemplate .dijitCalendarDateLabel {
-       text-decoration:none;
-       display:block;
-       padding:3px 5px 3px 4px;
-       border:solid 1px #fff;
-       color:#1e1e1e;
-       background-color:rgba(171,212,251,0);   
-       -webkit-transition-property:background-color, border;
-       -webkit-transition-duration:.35s;
-}
-.claro .dijitCalendarPreviousMonth .dijitCalendarDateLabel,
-.claro .dijitCalendarNextMonth .dijitCalendarDateLabel{
-       color:#547da1;
-       border-color:#ebf3f9;
-}
-.claro .dijitCalendarYearContainer {
-       vertical-align:middle;
-}
-.claro .dijitCalendarYearControl {
-       padding: 1px 2px 2px 2px;
-}
-.claro .dijitCalendarYearLabel {
-       padding:2px 0px 0px 0px;
-       margin:0;
-}
-.claro .dijitCalendarYearLabel span {
-       
-       vertical-align:middle;
-}
-.claro .dijitCalendarSelectedYear {
-       padding:0px 3px;
-}
-.claro .dijitCalendarNextYear,
-.claro .dijitCalendarPreviousYear {
-       padding: 1px 6px 1px 6px;
-       font-size:0.909em;
-}
-.claro .dijitCalendarSelectedYear {
-       font-size:1.091em;
-       color:#000;
-}
-.claro .dijitCalendarHoveredDate .dijitCalendarDateLabel{
-       background-color:#abd4fb;
-       border:solid 1px #729dc2;
-       color:#000;
-       -webkit-transition-duration:.2s;
-}
-.claro .dijitCalendarNextYearHover,
-.claro .dijitCalendarPreviousYearHover {
-       color:#000;
-       border:solid 1px #fefefe;
-       padding: 0px 5px 0px 5px;       
-       background-color:#eaf4fe;
-}
-.claro .dijitCalendarNextYearActive,
-.claro .dijitCalendarPreviousYearActive {
-       border: solid 1px #87b3d9;
-       padding: 0px 5px 0px 5px;       
-       background-color:#90bde6;
-}
-.claro .dijitCalendarActiveDate .dijitCalendarDateLabel {
-       background-image:url(images/calendarContainerImages.png);
-       background-position:0px -300px;
-       background-color:#75b5f0;
-       border:solid 1px #fff;
-       -webkit-transition-duration:.1s;
-}
-.dj_ie6 .claro .dijitCalendarActiveDate .dijitCalendarDateLabel {
-       background-image:none;
-}
-.claro .dijitCalendarSelectedDate .dijitCalendarDateLabel {
-       color:#000;
-       background-color:#e7f4ff;
-       border-color:#accfed;
-}
-.claro .dijitCalendarDisabledDate .dijitCalendarDateLabel {
-       text-decoration:line-through;
-       
-       
-       background-color: transparent;
-       border-width: 0px;
-       padding: 4px 6px 4px 5px;
-       color: #547DA1;
-}
-.claro .dijitCalendarMonthContainer .dijitMenu{
-       
-       top: 20px !important;
-       left: 0px;
-       border-color: #769dc0;
-       background-color: #fff;
-       text-align:center;
-       background-image: none;
-}
-.claro .dijitCalendarMonthContainer .dijitMenu .dijitCalendarMonthLabel{
-       border-top: solid 1px #fff;
-       border-bottom: solid 1px #fff;
-       padding: 2px 20px;
-}
-.claro .dijitCalendarMonthContainer .dijitMenu .dijitMenuItemHover {
-       background-color: #abd6ff;
-       border-color: #769dc0;
-       border-width:1px 0px;
-       background-image: url(images/commonHighlight.png);
-       background-repeat:repeat-x;
-}
-.claro .dijitMenuBar {
-       border: 1px solid #b5bcc7;
-       margin: 0px;
-       padding: 0px;
-       background-color: #e6e6e7;
-       background-image: url(images/commonHighlight.png);
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-}
-.dj_ie6 .claro .dijitMenuBar {
-       background-image:none;
-}
-.claro .dijitMenu {
-       background-repeat:repeat-y;
-       background-color:#fff;
-       border: 1px solid #769dc0;
-       
-       margin: -1px 0;
-}
-.claro .dijitMenuBar .dijitMenuItem {  
-       padding: 6px 10px 7px;
-       background-position:0px 100px;
-       color:#4a4a4a;
-       margin:-1px;
-}      
-.claro .dijitMenuItem {
-       background-image: url(images/menuHighlight.png);
-       background-position:0px -40px;
-       background-repeat:repeat-x;
-}
-.claro .dijitMenuTable {
-       border-collapse:separate;
-       border-spacing:0 0;
-       padding:0px;
-}
-.claro .dijitMenuItem td{
-       padding:1px;
-}
-.claro .dijitMenuPassive .dijitMenuItemHover,
-.claro .dijitMenuPassive .dijitMenuItemSelected {
-       background-color: #abd6ff;
-       border:solid 1px #769dc0;
-       background-position:0px 0px;
-       color:#000;
-       padding: 5px 9px 6px;
-}
-.claro .dijitMenuPassive .dijitMenuItemActive{
-       background-position:0px -177px;
-}
-.dj_ie6 .claro .dijitMenuItem,
-.dj_ie6 .claro .dijitMenuPassive .dijitMenuItem {
-       background-image: none;
-}
-.claro .dijitMenuActive .dijitMenuItemHover,
-.claro .dijitMenuActive .dijitMenuItemSelected {
-       border:solid 1px #769dc0;
-       padding: 5px 9px 6px;
-       background-color: #9dcfff;
-       background-position:0px 0px;
-       color:#000;
-}
-.dj_ie .claro .dijitMenuActive .dijitMenuItemHover,
-.dj_ie .claro .dijitMenuActive .dijitMenuItemSelected,
-.dj_ie .claro .dijitMenuPassive .dijitMenuItemHover,
-.dj_ie .claro .dijitMenuPassive .dijitMenuItemSelected {
-       padding-top: 6px;
-       padding-bottom: 5px;
-       margin-top: -3px;
-}
-.claro .dijitMenuActive .dijitMenuItemActive{
-       background-color: #7dbefa;
-       background-position:0px -177px;
-}
-.claro .dijitMenuItemActive {
-       background-position:0px -177px;
-}
-.claro td.dijitMenuItemIconCell {
- padding: 2px;
- margin: 0px 0px 0px 4px;
-}
-.claro td.dijitMenuItemLabel {
-       padding-top: 5px;
-       padding-bottom: 5px;
-}
-.claro .dijitMenuExpand {
-       width: 7px;
-       height: 7px;
-       background-image: url(images/spriteArrows.png);
-       background-position: -14px 0px;
-       margin-right:3px;
-}
-.claro .dijitMenuItemDisabled .dijitMenuItemIconCell {
-       opacity:1;
-}
-.claro .dijitMenuSeparatorTop {
-       height: auto;
-       margin-top:1px; 
-       border-bottom: 1px solid #b5bcc7
-}
-.claro .dijitMenuSeparatorBottom{
-       height: auto;
-       margin-bottom:1px;
-}
-.claro .dijitCheckedMenuItemIconChar {
-       display: none;
-}
-.claro .dijitCheckedMenuItemIcon {
-       background-image: url(form/images/checkboxRadioButtonStates.png);
-       background-repeat:no-repeat;
-       background-position: -15px 50%;
-       width:15px;
-       height:16px;
-}
-.dj_ie6 .claro .dijitCheckedMenuItemIcon {
-       background-image: url(form/images/checkboxAndRadioButtons_IE6.png);
-}
-.claro .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
-       background-position: 0 50%;
-}
-.claro .dijitComboBoxMenu {
-       margin-left:0px;
-       background-image: none;
-}
-.claro .dijitComboBoxMenu .dijitMenuItem{
-       padding:2px 0px;
-       text-indent:6px;
-       border-width:1px 0px 1px 0px;
-       border-style:solid;
-       border-color:#fff;
-}
-.claro .dijitComboBoxMenu .dijitMenuItemSelected {
-       color:#000;
-       border-color:#768dc0;
-       background-color:#abd6ff;
-}
-.claro .dijitComboBoxMenuActive .dijitMenuItemSelected {
-       background-position:0px -177px;
-       background-color:#7dbefa;
-}
-.claro .dijitMenuPreviousButton, .claro .dijitMenuNextButton {
-       font-style: italic;
-}
-.claro .dijitSliderBar {
-       border-style: solid;
-       outline: 1px;
-}
-.claro .dijitSliderFocused .dijitSliderBar {
-       border-color: #769dc0;
-}
-.claro .dijitSliderHover .dijitSliderBar {
-       border-color: #769dc0;
-}
-.claro .dijitSliderDisabled .dijitSliderBar {
-       background-image: none;
-       border-color: #d3d3d3;
-}
-.claro .dijitRuleLabelsContainerH {
-       padding: 2px 0px;
-}
-.claro .dijitSlider .dijitSliderProgressBarH,
-.claro .dijitSlider .dijitSliderLeftBumper{
-       background-image: url(form/images/sliderHorizontal.png);
-       background-repeat:repeat-x;
-       background-position:0 -20px;
-       border-color: #b5bcc7;
-       background-color: #cfe5fa;
-}
-.claro .dijitSlider .dijitSliderRemainingBarH,
-.claro .dijitSlider .dijitSliderRightBumper{
-       background-image: url(form/images/sliderHorizontal.png);
-       background-repeat:repeat-x;
-       background-position:0 -11px;
-       border-color: #b5bcc7;
-       background-color: #fff;
-}
-.claro .dijitSliderRightBumper {
-       border-right: solid 1px #b5bcc7;
-}
-.claro .dijitSliderLeftBumper {
-       border-left: solid 1px #b5bcc7;
-}
-.claro .dijitSliderHover .dijitSliderProgressBarH,
-.claro .dijitSliderHover .dijitSliderLeftBumper{
-       background-position:0 -20px;
-       background-color: #abd6ff;
-       border-color: #769dc0;
-}
-.claro .dijitSliderHover .dijitSliderRemainingBarH,
-.claro .dijitSliderHover .dijitSliderRightBumper{
-       background-position:0 0px;
-       background-color: #fff;
-       border-color: #769dc0;
-}
-.claro .dijitSliderFocused .dijitSliderProgressBarH,
-.claro .dijitSliderFocused .dijitSliderLeftBumper{
-       background-position:0 -30px;
-       background-color: #abd6ff;
-       border-color: #769dc0;
-}
-.claro .dijitSliderFocused .dijitSliderRemainingBarH,
-.claro .dijitSliderFocused .dijitSliderRightBumper{
-       background-position:0 -9px;
-       background-color: #fff;
-       border-color: #769dc0;
-}
-.claro .dijitSliderDisabled .dijitSliderProgressBarH,
-.claro .dijitSliderDisabled .dijitSliderLeftBumper{
-       background-color: #cdcdcd;
-       background-image:none;
-}
-.claro .dijitSliderDisabled .dijitSliderRemainingBarH,
-.claro .dijitSliderDisabled .dijitSliderRightBumper{
-       background-color: #efefef;
-}
-.claro .dijitRuleLabelsContainerV {
-       padding: 0px 2px;
-}
-.claro .dijitSlider .dijitSliderProgressBarV,
-.claro .dijitSlider .dijitSliderBottomBumper{
-       background-image: url(form/images/sliderVertical.png);
-       background-repeat:repeat-y;
-       background-position:-36px 0;
-       border-color: #b5bcc7;
-       background-color: #cfe5fa;
-}
-.claro .dijitSlider .dijitSliderRemainingBarV,
-.claro .dijitSlider .dijitSliderTopBumper{
-       background-image: url(form/images/sliderVertical.png);
-       background-repeat:repeat-y;
-       background-position:-3px 0;
-       border-color: #b5bcc7;
-       background-color: #fff;
-}
-.claro .dijitSliderBottomBumper {
-       border-bottom: solid 1px #b5bcc7;
-}
-.claro .dijitSliderTopBumper {
-       border-top: solid 1px #b5bcc7;
-}
-.claro .dijitSliderHover .dijitSliderProgressBarV,
-.claro .dijitSliderHover .dijitSliderBottomBumper{
-       background-position:-36px 0;
-       background-color: #abd6ff;
-}
-.claro .dijitSliderHover .dijitSliderRemainingBarV,
-.claro .dijitSliderHover .dijitSliderTopBumper{
-       background-position:0 0;
-       background-color: #fff;
-}
-.claro .dijitSliderFocused .dijitSliderProgressBarV,
-.claro .dijitSliderFocused .dijitSliderBottomBumper{
-       background-position:-56px 0;
-       background-color: #abd6ff;
-}
-.claro .dijitSliderFocused .dijitSliderRemainingBarV,
-.claro .dijitSliderFocused .dijitSliderTopBumper{
-       background-position:-18px 0;
-       background-color: #fff;
-}
-.claro .dijitSliderDisabled .dijitSliderProgressBarV,
-.claro .dijitSliderDisabled .dijitSliderBottomBumper{
-       background-color: #cdcdcd;
-}
-.claro .dijitSliderDisabled .dijitSliderRemainingBarV,
-.claro .dijitSliderDisabled .dijitSliderTopBumper{
-       background-color: #efefef;
-}
-.claro .dijitSliderImageHandleH {
-       border: 0px;
-       width: 18px;
-       height: 16px;
-       background-image: url(form/images/sliderThumbs.png);
-       background-repeat:no-repeat;
-       background-position:0 0;
-}
-.claro .dijitSliderHover .dijitSliderImageHandleH {
-       background-position:-18px 0;
-}
-.claro .dijitSliderFocused .dijitSliderImageHandleH {
-       background-position:-36px 0;
-}
-.claro .dijitSliderProgressBarH .dijitSliderThumbHover{
-       background-position:-36px 0;
-}
-.claro .dijitSliderProgressBarH .dijitSliderThumbActive{
-       background-position:-36px 0;
-}
-.claro .dijitSliderReadOnly .dijitSliderImageHandleH,
-.claro .dijitSliderDisabled .dijitSliderImageHandleH {
-       background-position:-54px 0;
-}
-.claro .dijitSliderImageHandleV {
-       border: 0px;
-       width: 18px;
-       height: 16px;
-       background-image: url(form/images/sliderThumbs.png);
-       background-repeat:no-repeat;
-       background-position:-289px 0;
-}
-.claro .dijitSliderHover .dijitSliderImageHandleV {
-       background-position:-307px 0;
-}
-.claro .dijitSliderFocused .dijitSliderImageHandleV {
-       background-position:-325px 0;
-}
-.claro .dijitSliderProgressBarV .dijitSliderThumbHover{
-       background-position:-325px 0;
-}
-.claro .dijitSliderProgressBarV .dijitSliderThumbActive{
-       background-position:-325px 0;
-}
-.claro .dijitSliderReadOnly .dijitSliderImageHandleV,
-.claro .dijitSliderDisabled .dijitSliderImageHandleV {
-       background-position:-343px 0;
-}
-.claro .dijitSliderButtonContainerH{
-       padding: 1px 3px 1px 2px;
-}
-.claro .dijitSliderButtonContainerV{
-       padding: 3px 1px 2px 1px;
-}
-.claro .dijitSliderDecrementIconH,
-.claro .dijitSliderIncrementIconH,
-.claro .dijitSliderDecrementIconV,
-.claro .dijitSliderIncrementIconV {
-       background-image: url(form/images/commonFormArrows.png);
-       background-repeat:no-repeat;
-       background-color: #e9ecf2;
-       -moz-border-radius: 2px;
-       -webkit-border-radius: 2px;
-       border: solid 1px #b5bcc7;
-       font-size: 1px;
-}
-.claro .dijitSliderDecrementIconH,
-.claro .dijitSliderIncrementIconH {
-       height: 12px;
-       width: 9px;
-}
-.claro .dijitSliderDecrementIconV,
-.claro .dijitSliderIncrementIconV {
-       height: 9px;
-       width: 12px;
-}
-.claro .dijitSliderActive .dijitSliderDecrementIconH,
-.claro .dijitSliderActive .dijitSliderIncrementIconH,
-.claro .dijitSliderActive .dijitSliderDecrementIconV,
-.claro .dijitSliderActive .dijitSliderIncrementIconV,
-.claro .dijitSliderHover .dijitSliderDecrementIconH,
-.claro .dijitSliderHover .dijitSliderIncrementIconH,
-.claro .dijitSliderHover .dijitSliderDecrementIconV,
-.claro .dijitSliderHover .dijitSliderIncrementIconV {
-       border: solid 1px #769dc0;
-       background-color:#fff;
-}
-.claro .dijitSliderDecrementIconH {
-       background-position:-357px 50%;
-}
-.claro .dijitSliderActive .dijitSliderDecrementIconH
-.claro .dijitSliderHover .dijitSliderDecrementIconH {
-       background-position:-393px 50%;
-}
-.claro .dijitSliderIncrementIconH {
-       background-position:-251px 50%;
-}
-.claro .dijitSliderActive .dijitSliderIncrementIconH
-.claro .dijitSliderHover .dijitSliderIncrementIconH {
-       background-position:-283px 50%;
-}
-.claro .dijitSliderDecrementIconV {
-       background-position:-38px 50%;
-}
-.claro .dijitSliderActive .dijitSliderDecrementIconV
-.claro .dijitSliderHover .dijitSliderDecrementIconV {
-       background-position:-73px 50%;
-}
-.claro .dijitSliderIncrementIconV {
-       background-position:-143px 49%;
-}
-.claro .dijitSliderActive .dijitSliderIncrementIconV
-.claro .dijitSliderHover .dijitSliderIncrementIconV {
-       background-position:-178px 49%;
-}
-.claro .dijitSliderButtonContainerV .dijitSliderDecrementButtonHover,
-.claro .dijitSliderButtonContainerH .dijitSliderDecrementButtonHover,
-.claro .dijitSliderButtonContainerV .dijitSliderIncrementButtonHover,
-.claro .dijitSliderButtonContainerH .dijitSliderIncrementButtonHover {
-       background-color: #cce3fc;
-}
-.claro .dijitSliderButtonContainerV .dijitSliderDecrementButtonActive,
-.claro .dijitSliderButtonContainerH .dijitSliderDecrementButtonActive,
-.claro .dijitSliderButtonContainerV .dijitSliderIncrementButtonActive,
-.claro .dijitSliderButtonContainerH .dijitSliderIncrementButtonActive {
-       background-color: #a5d0fc;
-       border-color:#6591b9;
-}
-.claro .dijitSliderButtonInner {
-       visibility: hidden;
-}
-.claro .dijitSliderDisabled .dijitSliderBar{
-       border-color: #d3d3d3;
-}
-.claro .dijitSliderReadOnly *,.claro .dijitSliderDisabled * {
-       border-color: #d3d3d3;
-       color: #bdbdbd;
-}
-.claro .dijitSliderReadOnly .dijitSliderDecrementIconH,
-.claro .dijitSliderDisabled .dijitSliderDecrementIconH {
-       background-position:-321px 50%;
-       background-color:#e9e9e9;
-}
-.claro .dijitSliderReadOnly .dijitSliderIncrementIconH,
-.claro .dijitSliderDisabled .dijitSliderIncrementIconH {
-       background-position:-215px 50%;
-       background-color:#e9e9e9;
-}
-.claro .dijitSliderReadOnly .dijitSliderDecrementIconV,
-.claro .dijitSliderDisabled .dijitSliderDecrementIconV {
-       background-position:-3px 49%;
-       background-color:#e9e9e9;
-}
-.claro .dijitSliderReadOnly .dijitSliderIncrementIconV,
-.claro .dijitSliderDisabled .dijitSliderIncrementIconV {
-       background-position:-107px 49%;
-       background-color:#e9e9e9;
-}
-.dj_ie6 .claro .dijitSlider .dijitSliderProgressBarH,
-.dj_ie6 .claro .dijitSlider .dijitSliderLeftBumper,
-.dj_ie6 .claro .dijitSlider .dijitSliderRemainingBarH,
-.dj_ie6 .claro .dijitSlider .dijitSliderRightBumper,
-.dj_ie6 .claro .dijitSlider .dijitSliderProgressBarV,
-.dj_ie6 .claro .dijitSlider .dijitSliderTopBumper,
-.dj_ie6 .claro .dijitSlider .dijitSliderRemainingBarV,
-.dj_ie6 .claro .dijitSlider .dijitSliderBottomBumper {
-       background-image:none;
-}
-.claro  .dijitColorPalette {
-       outline: 1px solid #769dc0; 
-       border: 1px solid #c0ccdf;
-       background:#fff;
-       -moz-border-radius: 0px;
-}
-.claro .dijitColorPalette .dijitPaletteImg {
-       
-       border: 1px solid #cecece;
-}
-.claro .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       border: 1px solid #000;
-}
-.claro .dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
-.claro .dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
-       border: 2px solid #000;
-}
-.claro .dijitInlineEditBoxDisplayMode {
-       border: 1px solid transparent;
-}
-.claro .dijitInlineEditBoxDisplayModeHover {
-       background-color: #e2f1ff;
-       border: solid 1px #769dc0;
-}
-.dj_ie6 .claro .dijitInlineEditBoxDisplayMode {
-       border: none;
-}
-.claro .dijitProgressBar {
-       margin:2px 0px 2px 0px;
-}
-.claro .dijitProgressBarEmpty {
-       
-       background:#fff url(images/progressBarEmpty.png) repeat-none left;
-       border-color: #769dc0;
-}
-.claro .dijitProgressBarTile {
-       
-       background:#9dcfff url(images/progressBarFull.png) repeat-x top;        
-}
-.dj_ie6 .claro .dijitProgressBarTile {
-       background-image: none;
-} 
-.claro .dijitProgressBarFull {
-       border-right:1px solid #769dc0;
-}
-.claro .dijitProgressBarLabel {
-       
-       color:#293a4b;
-}
-.claro .dijitProgressBarIndeterminate .dijitProgressBarTile {
-       
-       background:#cad2de url(images/progressBarAnim.gif) repeat-x top;
-} 
-.claro .dijitTimePicker .dijitButtonNode {
-       padding: 0 0;
-       border-radius: 0;
-       -moz-border-radius: 0;
-       -webkit-border-radius: 0;
-}
-.claro .dijitTimePicker{
-       border:1px #b5bcc7 solid;
-       border-top:none;
-       border-bottom:none;
-       background-color:#fff;
-}
-.claro .dijitTimePickerItem{
-       
-       background-image: url(images/commonHighlight.png);
-       background-position:0px -1px;
-       background-repeat:repeat-x;
-       border-top:solid 1px #b5bcc7;
-       border-bottom:solid 1px #b5bcc7;
-       margin-right:-1px;
-       margin-left:-1px;
-       margin-top:-1px;
-}
-.dj_ie6 .claro .dijitTimePickerItem {
-       background-image: none;
-}
-.claro .dijitTimePickerTick {
-       
-       color:#7a7a7a;
-       background-color:#f2f2f2;
-       font-size:0.818em;
-}
-.claro .dijitTimePickerMarker {
-       
-       color:#000;
-       background-color:#e3f2ff;
-       font-size: 1em;
-       white-space: nowrap;
-}
-.claro .dijitTimePickerTickHover,
-.claro .dijitTimePickerMarkerHover,
-.claro .dijitTimePickerMarkerSelected,
-.claro .dijitTimePickerTickSelected {
-       background-color: #83c0fa;
-       color:#000;
-       border:solid 1px #b5bcc7;
-       margin-left:-7px;
-       margin-right:-7px;
-}
-.claro .dijitTimePickerMarkerSelected,
-.claro .dijitTimePickerTickSelected {
-       font-size: 1em;
-       }
-.dj_ie .claro .dijitTimePickerTickHover,
-.dj_ie .claro .dijitTimePickerMarkerHover,
-.dj_ie .claro .dijitTimePickerMarkerSelected,
-.dj_ie .claro .dijitTimePickerTickSelected  {
-       width: 114%;
-}
-.dj_ie6 .claro .dijitTimePickerTickHover,
-.dj_ie6 .claro .dijitTimePickerMarkerHover,
-.dj_ie6 .claro .dijitTimePickerMarkerSelected,
-.dj_ie6 .claro .dijitTimePickerTickSelected  {
-       position: relative;     
-       zoom: 1; 
-}
-.claro .dijitTimePickerTick .dijitTimePickerItemInner {
-       padding:1px;
-       margin:0px;
-}
-.claro .dijitTimePicker .dijitButtonNode {
-       border-left:none;
-       border-right:none;
-       border-color:#b5bcc7;
-       background-color: #f6f7fa;
-       background-image: url(images/commonHighlight.png);
-       background-position:0px -1px;
-       background-repeat:repeat-x;
-}
-.dj_ie6 .claro .dijitTimePicker .dijitButtonNode {
-       background-image: none;
-}
-.claro .dijitTimePicker .dijitArrowButtonInner{
-       height: 100%; 
-       background-image: url(form/images/commonFormArrows.png);
-       background-repeat: no-repeat;
-       background-position:-140px 45%;
-}
-.claro .dijitTimePicker .dijitDownArrowButton .dijitArrowButtonInner{
-       background-position:-35px 45%;
-}
-.claro .dijitTimePicker .dijitUpArrowHover, 
-.claro .dijitTimePicker .dijitDownArrowHover {
-       background-color: #abd6ff;
-}
-.claro .dijitTimePicker .dijitUpArrowHover .dijitArrowButtonInner {
-       background-position:-175px 45%;
-}
-.claro .dijitTimePicker .dijitDownArrowHover .dijitArrowButtonInner {
-       background-position:-70px 45%;
-}
-.claro .dijitBorderContainer {
-       border: 1px #b5bcc7 solid;
-       padding: 5px;
-}
-.claro .dijitSplitContainer-child,
-.claro .dijitBorderContainer-child {
-       
-       border: 1px #b5bcc7 solid;
-}
-.claro .dijitBorderContainer-dijitTabContainerTop,
-.claro .dijitBorderContainer-dijitTabContainerBottom,
-.claro .dijitBorderContainer-dijitTabContainerLeft,
-.claro .dijitBorderContainer-dijitTabContainerRight,
-.claro .dijitBorderContainer-dijitAccordionContainer {
-       
-        border: none;
-}
-.claro .dijitBorderContainer-dijitBorderContainer {
-       
-       border: 1px #c0ccdf solid;
-       padding: 5px;
-}
-.claro .dijitSplitterH,
-.claro .dijitGutterH {
-       background:none;
-       border:0;
-       height:5px;
-}
-.claro .dijitSplitterH .dijitSplitterThumb {
-       background:#dde2e9 none;
-       height:1px;
-       top:2px;
-       width:19px;
-}
-.claro .dijitSplitterV,
-.claro .dijitGutterV {
-       background:none;
-       border:0;
-       width:5px;
-       margin: 0;
-}
-.claro .dijitSplitterV .dijitSplitterThumb {
-       background:#dde2e9 none;
-       height:19px;
-       left:2px;
-       width:1px;
-       margin: 0;
-}
-.claro .dijitSplitterHHover {
-       font-size: 1px;
-       background: url(layout/images/splitterHorizontalHover.png) no-repeat center top;
-}
-.claro .dijitSplitterHHover .dijitSplitterThumb {
-       background:#769dc0 none;
-}
-.claro .dijitSplitterVHover {
-       font-size: 1px;
-       background: url(layout/images/splitterVerticalHover.png) no-repeat center left;
-}
-.claro .dijitSplitterVHover .dijitSplitterThumb {
-       background:#769dc0 none;
-}
-.dj_ie6 .dijitSplitterHHover,
-.dj_ie6 .claro .dijitSplitterVHover {
-       background-color:#cfe9ff;
-       background-image:none;
-}
-.claro .dijitSplitterHActive {
-       font-size: 1px;
-       background-color:#abd4fb;
-       border-top:blue;
-}
-.claro .dijitSplitterVActive {
-       font-size: 1px;
-       background-color:#abd4fb;
-}
-.claro .dijitTreeNode {
-    zoom: 1;   
-}
-.claro .dijitTreeIsRoot {
-    background-image: none;
-}
-.claro .dijitTreeRow {
-       
-       padding: 4px 1px 2px 0px;
-       margin-left: 1px;
-       background-image: url(images/commonHighlight.png);
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       border-color: rgba(118,157,192,0);
-       background-color: rgba(171,214,255,0);
-       -webkit-transition-property:background-color, border-color;
-       -webkit-transition-duration:.25s ;
-       -webkit-transition-timing-function: ease-out;
-}
-.dj_ie6 .claro .dijitTreeRow {
-       background-image: none;
-}
-.claro .dijitTreeRowSelected {
-       background-repeat:repeat-x;
-       background-color:#d8edff;
-       padding: 3px 0px 1px;
-       margin-left: 0px;
-       border:solid 1px #c3e2fd;
-       color:#000;
-}
-.claro .dijitTreeRowHover {
-       background-color:#abd6ff;
-       padding: 3px 0px 1px;
-       margin-left: 0px;
-       border:solid 1px #769dc0;
-       color:#000;
-       -webkit-transition-duration:.25s ; 
-}
-.claro .dijitTreeRowActive {
-       background-color:#7dbefa;
-       background-position:0px -177px;
-       padding: 3px 0px 1px;
-       margin-left: 0px;
-       border:solid 1px #769dc0;
-       color:#000;
-}
-.dj_ie6 .claro .dijitTreeRowActive {
-       background-image: none;
-}
-.claro .dijitTreeRowFocused {
-       background-repeat: repeat;
-}
-.claro .dijitTreeExpando {
-       background-image: url(images/treeExpandImages.png);
-    width: 16px;
-    height: 16px;
-       background-position: -35px 0px          
-}
-.dj_ie6 .claro .dijitTreeExpando {
-       background-image: url(images/treeExpandImages8bit.png);
-}
-.claro .dijitTreeRowHover .dijitTreeExpandoOpened {
-       background-position: -53px 0px;
-}
-.claro .dijitTreeExpandoClosed {
-       background-position: 1px 0px;
-}
-.claro .dijitTreeRowHover .dijitTreeExpandoClosed {
-       background-position: -17px 0px;
-}
-.claro .dijitTreeExpandoLeaf{
-       background-image:none;
-}
-.claro .dijitTreeExpandoLoading {
-       background-image: url(images/loadingAnimation.gif);
-}
-.claro .dijitTreeNode .dojoDndItemBefore,
-.claro .dijitTreeNode .dojoDndItemAfter {
-       border-bottom: none;
-       border-top: none;
-}
-.claro .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
-       border-top: 2px solid #369;
-}
-.claro .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
-       border-bottom: 2px solid #369;
-}
-.claro .dijitToolbar {
-       border-bottom: 1px solid #b5bcc7;
-       background-color: #f1f1f1;
-       background-image: url(images/commonHighlight.png);
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       padding: 2px 0px 2px 4px;
-       zoom: 1;
-}
-.claro .dijitToolbar label {
-       padding: 0px 3px 0 6px;
-}
-.claro .dijitToolbar .dijitButtonNode {
-       border:none;
-       padding: 2px;
-       background-image: url(images/commonHighlight.png);
-       background-position:0 -30px;
-       background-repeat:repeat-x;
-       background-color:rgba(171,214,255,0);
-       border-radius: 2px;     
-       -moz-border-radius: 2px;        
-       -webkit-border-radius: 2px;     
-       -moz-box-shadow: none;
-       -webkit-box-shadow: none;
-       -webkit-transition-property:background-color;
-       -webkit-transition-duration:.3s, .35s;
-}
-.claro .dijitToolbar .dijitComboButton .dijitButtonNode{
-       padding: 3px 2px 3px 2px;       
-}
-.dj_ie .claro .dijitToolbar .dijitButtonNode {
-       background-color: transparent;   
-}
-.dj_ie6 .claro .dijitToolbar .dijitButtonNode {
-       background: none;       
-}
-.claro .dijitToolbar .dijitComboBox .dijitButtonNode {
-       padding: 0px;
-}
-.claro .dijitToolbar .dijitComboButton {
-       padding: 1px;
-}
-.claro .dijitToolbar .dijitButtonHover .dijitButtonNode,
-.claro .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode,
-.claro .dijitToolbar .dijitToggleButtonHover .dijitButtonNode {
-       background-position:0 0;
-       border:solid 1px #769dc0;
-       background-color: #abd6ff;
-       padding: 1px;
-}
-.claro .dijitToolbar .dijitComboButtonHover {
-       background-color: #abd6ff;
-       border: solid 1px #769dc0;
-       padding: 0px;
-}
-.claro .dijitToolbar .dijitComboButtonHover .dijitButtonNode,
-.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
-       background-position:0 0;
-       padding: 2px;
-}
-.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
-       background-color: #7dd6fa;
-}
-.claro .dijitToolbar .dijitButtonActive .dijitButtonNode,
-.claro .dijitToolbar .dijitDropDownButtonActive .dijitButtonNode,
-.claro .dijitToolbar .dijitToggleButtonActive .dijitButtonNode {
-       border:solid 1px #769dc0;
-       background-color:#7dbefa;
-       background-position:0px -177px;
-       padding: 1px;
-}
-.claro .dijitToolbar .dijitComboButtonActive {
-       -webkit-transition-duration:.2s;
-       border: solid 1px #769dc0;
-       padding: 0px;
-}
-.claro .dijitToolbar .dijitComboButtonActive .dijitButtonNode {
-       background-color: #7dbefa;
-       background-position:0px -177px;
-       padding: 2px;
-}
-.claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive {
-       background-color: #7dbefa;
-}
-.claro .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
-       border-color: #769dc0;
-       background-color:#fff;
-       padding: 1px;
-}
-.dj_ie6 .claro .dijitToolbar .dijitButtonContents, 
-.dj_ie7 .claro .dijitToolbar .dijitButtonContents {
-       margin: -2px 0;
-       padding: 0;
-}
-.dj_ie6 .claro .dijitToolbar {
-       background-image: none;
-}
-.dj_ie6 .claro .dijitToolbar .dijitButtonNode {
-       margin: 1px; 
-       border: none;
-}
-.dj_ie6 .claro .dijitToolbar .dijitButtonHover .dijitButtonNode,
-.dj_ie6 .claro .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeHover,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover,
-.dj_ie6 .claro .dijitToolbar .dijitToggleButtonHover .dijitButtonNode,
-.dj_ie6 .claro .dijitToolbar .dijitButtonActive .dijitButtonNode,
-.dj_ie6 .claro .dijitToolbar .dijitDropDownButtonActive .dijitButtonNode,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeActive,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive,
-.dj_ie6 .claro .dijitToolbar .dijitToggleButtonActive .dijitButtonNode,
-.claro .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
-       margin: 0;      
-       border-width: 1px;
-       border-style: solid;
-       background-image: none;
-}
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeHover,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeActive,
-.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive {
-       padding: 1px;   
-}
-.claro .dijitToolbarSeparator {
-       
-       background: url(../../icons/images/editorIconsEnabled.png);
-}
-.claro .dijitDisabled .dijitToolbar {
-       background:none;
-       background-color:#f5f5f5;
-       border-bottom: 1px solid #d3d3d3;
-}
-.claro .dijitEditorIFrameContainer{
-       padding:3px 3px 1px 10px;
-}
-.claro .dijitEditorIFrame {
-       background-color: #fff;
-}
-.claro .dijitEditor {
-       border: 1px solid #b5bcc7;
-}
-.claro .dijitEditor .dijitEditorIFrameContainer{
-       background-color: #fff;
-       background-image: url(form/images/textBox_back.png);
-       background-repeat:repeat-x;
-}
-.dj_ie6 .claro .dijitEditor .dijitEditorIFrameContainer{
-       background-image: none;
-}
-.claro .dijitEditorHover .dijitEditorIFrameContainer,
-.claro .dijitEditorHover .dijitEditorIFrameContainer .dijitEditorIFrame{
-       background-color: #eef7ff;
-}
-.claro .dijitEditorFocused .dijitEditorIFrameContainer,
-.claro .dijitEditorFocused .dijitEditorIFrameContainer .dijitEditorIFrame{
-       
-       background-color: #fff;
-}
-.claro .dijitEditorDisabled {
-       border: 1px solid #d3d3d3;
-       color: #818181;
-}
-.claro .dijitDisabled .dijitEditorIFrame,
-.claro .dijitDisabled .dijitEditorIFrameContainer {
-       background-color: #efefef;
-       background-image: none;
-}
-.dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled.png); 
-       background-repeat: no-repeat;
-       width: 18px;
-       height: 18px;
-       text-align: center;
-}
-.dijitDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled.png); 
-}
-.dijitEditorIconSep { background-position: 0px; }
-.dijitEditorIconSave { background-position: -18px; }
-.dijitEditorIconPrint { background-position: -36px; }
-.dijitEditorIconCut { background-position: -54px; }
-.dijitEditorIconCopy { background-position: -72px; }
-.dijitEditorIconPaste { background-position: -90px; }
-.dijitEditorIconDelete { background-position: -108px; }
-.dijitEditorIconCancel { background-position: -126px; }
-.dijitEditorIconUndo { background-position: -144px; }
-.dijitEditorIconRedo { background-position: -162px; }
-.dijitEditorIconSelectAll { background-position: -180px; }
-.dijitEditorIconBold { background-position: -198px; }
-.dijitEditorIconItalic { background-position: -216px; }
-.dijitEditorIconUnderline { background-position: -234px; }
-.dijitEditorIconStrikethrough { background-position: -252px; }
-.dijitEditorIconSuperscript { background-position: -270px; }
-.dijitEditorIconSubscript { background-position: -288px; }
-.dijitEditorIconJustifyCenter { background-position: -306px; }
-.dijitEditorIconJustifyFull { background-position: -324px; }
-.dijitEditorIconJustifyLeft { background-position: -342px; }
-.dijitEditorIconJustifyRight { background-position: -360px; }
-.dijitEditorIconIndent { background-position: -378px; }
-.dijitEditorIconOutdent { background-position: -396px; }
-.dijitEditorIconListBulletIndent { background-position: -414px; }
-.dijitEditorIconListBulletOutdent { background-position: -432px; }
-.dijitEditorIconListNumIndent { background-position: -450px; }
-.dijitEditorIconListNumOutdent { background-position: -468px; }
-.dijitEditorIconTabIndent { background-position: -486px; }
-.dijitEditorIconLeftToRight { background-position: -504px; }
-.dijitEditorIconRightToLeft, .dijitEditorIconToggleDir { background-position: -522px; }
-.dijitEditorIconBackColor { background-position: -540px; }
-.dijitEditorIconForeColor { background-position: -558px; }
-.dijitEditorIconHiliteColor { background-position: -576px; }
-.dijitEditorIconNewPage { background-position: -594px; }
-.dijitEditorIconInsertImage { background-position: -612px; }
-.dijitEditorIconInsertTable { background-position: -630px; }
-.dijitEditorIconSpace { background-position: -648px; }
-.dijitEditorIconInsertHorizontalRule { background-position: -666px; }
-.dijitEditorIconInsertOrderedList { background-position: -684px; }
-.dijitEditorIconInsertUnorderedList { background-position: -702px; }
-.dijitEditorIconCreateLink { background-position: -720px; }
-.dijitEditorIconUnlink { background-position: -738px; }
-.dijitEditorIconViewSource { background-position: -756px; }
-.dijitEditorIconRemoveFormat { background-position: -774px; }
-.dijitEditorIconFullScreen { background-position: -792px; }
-.dijitEditorIconWikiword { background-position: -810px; }
-.claro .dijitTitlePaneTitle {
-       background-color: #e6e6e7;
-       background-image: url(images/titlebar.png);
-       background-repeat:repeat-x;
-       border:1px solid #b5bcc7;
-       padding: 0px 7px 3px 7px;
-       min-height:17px;
-       color:#131313;
-}
-.dj_ie6 .claro .dijitTitlePaneTitle {
-       background-image: none;
-}
-.claro .dijitTitlePaneTitleHover {
-       background-color: #abd6ff;
-       border-color: #769dc0;
-}
-.claro .dijitTitlePaneTitleActive {
-       background-color: #7dbefa;
-       border-color: #769dc0;
-       background-position:0px -136px;
-}
-.claro .dijitTitlePaneTitleFocus {
-       margin-top:3px;
-       padding-bottom:2px;
-}
-.claro .dijitTitlePane .dijitArrowNode {
-       background-image: url(images/spriteArrows.png);
-       background-repeat: no-repeat;
-       height: 8px;
-       width: 7px;
-}
-.claro .dijitTitlePane .dijitOpen .dijitArrowNode {
-       background-position: 0px 0px;
-}
-.claro .dijitTitlePane .dijitClosed .dijitArrowNode {
-       background-position: -14px 0px;
-}
-.claro .dijitTitlePaneFocused .dijitTitlePaneTextNode {
-       color:#000;
-}
-.claro .dijitTitlePaneContentOuter {
-       background: #ffffff;
-       border:1px solid #b5bcc7;
-       border-top:none;
-}
-.claro .dijitTitlePaneContentInner {
-       padding:10px;
-}
-.claro .dijitTitlePaneTextNode {
-       margin-left: 4px;
-       margin-right: 4px;
-       vertical-align:text-top;
-}
-.claro .dijitSpinnerButtonContainer {
-       overflow: hidden;
-       position: relative;
-       width: auto;
-       padding: 0 2px;
-}
-.claro .dijitSpinnerButtonContainer .dijitSpinnerButtonInner {
-       border-width: 1px 0; 
-       border-style: solid none;
-}
-.claro .dijitSpinner .dijitArrowButton {
-       width:auto;
-       background-color: #ebeef4;
-       background-image: url(form/images/formHighlight.png);
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       overflow: hidden;
-}
-.dj_iequirks .claro .dijitSpinner .dijitArrowButton {
-       overflow: visible; 
-}
-.claro .dijitSpinner .dijitSpinnerButtonInner {
-       width: 15px;
-}
-.claro .dijitSpinner .dijitArrowButtonInner {
-       border:solid 1px #fff;
-       border-bottom-width: 0; 
-       background-image: url(form/images/commonFormArrows.png);
-       background-repeat: no-repeat;
-       height: 100%;
-       width:15px;
-       padding-left: 1px;
-       padding-right: 1px;
-       
-       background-position:-139px center;
-       
-       display: block;
-       margin: -1px 0px -1px 0px;      
-       #margin-top: 0; 
-}
-.dj_iequirks .claro .dijitSpinner .dijitArrowButtonInner {
-       width: 19px;
-}
-.claro .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
-       background-position:-34px;
-}
-.claro .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding: 0;
-}
-.claro .dijitUpArrowButtonActive,
-.claro .dijitDownArrowButtonActive {
-       background-color:#abd6ff;
-}
-.claro .dijitSpinner .dijitUpArrowButtonHover,
-.claro .dijitSpinner .dijitDownArrowButtonHover,
-.claro .dijitSpinnerFocused .dijitArrowButton {
-       background-color: #a0d1ff;
-}
-.claro .dijitSpinner .dijitUpArrowButtonHover .dijitArrowButtonInner {
-       background-position:-174px;
-}
-.claro .dijitSpinner .dijitDownArrowButtonHover .dijitArrowButtonInner {
-       background-position:-69px;
-}
-.claro .dijitSpinnerFocused {
-       background-color: #fff;
-       background-image: none;
-}
-.claro .dijitSpinner .dijitDownArrowButtonActive,
-.claro .dijitSpinner .dijitUpArrowButtonActive {
-       background-color: #3299f9;
-       background-position:0px -177px;
-}
-.claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner,
-.claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
-       
-       border: 0px;
-       padding: 1px;
-       margin-right:2px;
-       margin-bottom:1px;
-}
-.claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner {
-       background-position:-173px;
-}
-.claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
-       background-position:-68px;
-}
-.claro .dijitSpinnerDisabled .dijitArrowButtonInner {
-       background-color: #f1f1f1;
-}
-.claro .dijitSpinnerDisabled .dijitUpArrowButton .dijitArrowButtonInner {
-       background-position:-104px;
-}
-.claro .dijitSpinnerDisabled .dijitDownArrowButton .dijitArrowButtonInner {
-       background-position:1px;
-}
-.dj_ie7 .claro .dijitSpinner {
-       overflow:visible;
-} 
-.dijitRtl .dijitPlaceHolder {
-       left: auto;
-       right: 0;
-}
-.dijitMenuItemRtl {
-       text-align: right;
-}
-.dj_iequirks .dijitComboButtonRtl BUTTON {
-       
-       float:left;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitComboBoxRtl .dijitArrowButtonContainer {
-       
-       border-right-width: 1px !important;
-       border-right-style: solid !important;
-       border-left-width: 0px !important;
-       border-left-style: none !important;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
-       border-right: 1px solid black !important;
-       border-left: 0px none black !important;
-}
-.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
-       right: 0;
-       left: auto;
-}
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitArrowButtonContainer {
-       float: left;
-}
-.dijitCalendarRtl .dijitCalendarNextYear {
-       margin:0 0.55em 0 0;
-}
-.dijitCalendarRtl .dijitCalendarPreviousYear {
-       margin:0 0 0 0.55em;
-}
-.dijitSliderRtl .dijitSliderImageHandleV {
-       left:auto;
-}
-.dijitSliderRtl .dijitSliderImageHandleH {
-       left:-50%;
-}
-.dijitSliderRtl .dijitSliderMoveableH {
-       right:auto;
-       left:0;
-}
-.dijitSliderRtl .dijitRuleContainerV {
-       float:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleContainerV {
-       text-align:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelV {
-       text-align:left;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelH {
-       zoom:1;
-}
-.dijitSliderRtl .dijitSliderProgressBarH {
-       
-       float:right;
-       right:0;
-       left:auto;
-}
-.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
-       background-position:right;
-       padding-right:25px;
-}
-.dijitTabRtl .dijitTabCloseButton {
-       margin-left: 0px;
-       margin-right: 1em;
-}
-.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
-       width:100%;
-}
-.dijitColorPaletteRtl .dijitColorPaletteUnder {
-       
-       left: auto;
-       right: 0;
-}
-.dijitSelectRtl .dijitButtonContents {
-       text-align: right;
-}
-.claro .dijitTextBoxRtlError .dijitValidationContainer {
-       border-left-width: 0px;
-       border-right-width: 1px;
-}
-.claro .dijitComboButtonRtl .dijitStretch {
-       -moz-border-radius: 0px 4px 4px 0px;
-       -webkit-border-top-left-radius: 0px;
-    -webkit-border-top-right-radius: 4px;
-    -webkit-border-bottom-right-radius: 4px;
-    -webkit-border-bottom-left-radius: 0px;    
-}
-.claro .dijitComboButtonRtl .dijitArrowButton {
-       -moz-border-radius:  4px 0px 0px  4px;
-       -webkit-border-top-left-radius:4px;
-    -webkit-border-top-right-radius:0px;
-    -webkit-border-bottom-right-radius:0px;
-    -webkit-border-bottom-left-radius:4px;
-       padding:3px 0px 4px;
-       border-left-width: 1px;
-       border-right-width: 0px;
-}
-.claro .dijitTabContainerTop-tabs .dijitTabRtl,
-.claro .dijitTabContainerBottom-tabs .dijitTabRtl {
-       margin-right: 0;
-       margin-left: 1px;
-}
-.claro .dijitTabRtl {
-       -moz-box-orient:horizontal;
-       text-align: right;
-}
-.dj_ie7 .claro .dijitTabRtl .dijitTabContent {
-       display: block;
-       left: 0;
-}
-.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl,
-.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabCheckedRtl {
-       top: 1px;
-}
-.dj_ie7 .claro .tabStripButtonRtl .dijitButtonContents,
-.dj_ie8 .claro .tabStripButtonRtl .dijitButtonContents,        
-.dj_ie6 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_ie6 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_ie7 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_iequirks .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_iequirks .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv {
-       float:left;
-}
-.dj_ie6 .claro .dijitTabRtl .tabLabel,
-.dj_ie6 .claro .dijitTabContainerRight-tabs .dijitTabRtl,
-.dj_ie6 .claro .dijitTabContainerLeft-tabs .dijitTabRtl,
-.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_ie7 .claro .dijitTabContainerLeft-tabs .dijitTabRtl .dijitTabInnerDiv {
-       
-       zoom:1;
-}
-.dj_ie6 .claro .dijitTabRtl .dijitTabCloseButton,
-.dj_ie7 .claro .dijitTabRtl .dijitTabCloseButton,
-.dj_iequirks .claro .dijitTabRtl .dijitTabCloseButton {
-       margin-right:5px;
-}
-.dj_ie6 .claro .dijitTabContainerRightRtl .dijitTabContainerRight-tabs,
-.dj_ie6 .claro .dijitTabContainerLeftRtl .dijitTabContainerLeft-tabs {
-       width:1%;
-}
-.dj_ie6 .dijitTabContainerTopStrip,
-.dj_ie6 .dijitTabContainerBottomStrip {
-       position:absolute;
-}
-.dj_iequirks .claro .dijitTabContainerTopRtl .dijitTabContainerTopStrip {
-       padding-top: 10px;
-}
-.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtlChecked .dijitTabInnerDiv {
-       background-position:-341px -179px;
-}
-.dj_ie6 .dijitTabContainerTopRtl .dijitTabStripIcon,
-.dj_ie6 .dijitTabContainerBottomRtl .dijitTabStripIcon {
-   position: relative;
-}
-.dj_ie6-rtl .claro .dijitTabContainerTop-tabs {        
-       
-       padding-left: 3px;
-}
-.dj_iequirks-rtl .claro .dijitTabListWrapper {
-       
-       border-left: 1px solid #fff;
-       border-right: 1px solid #fff;
-}
-.claro .dijitSliderRtl .dijitSliderProgressBarH,
-.claro .dijitSliderRtl .dijitSliderRemainingBarH,
-.claro .dijitSliderRtl .dijitSliderLeftBumper,
-.claro .dijitSliderRtl .dijitSliderRightBumper,
-.claro .dijitSliderRtl .dijitSliderTopBumper {
-       background-position: top right;
-}
-.claro .dijitSliderRtl .dijitSliderProgressBarV,
-.claro .dijitSliderRtl .dijitSliderRemainingBarV,
-.claro .dijitSliderRtl .dijitSliderBottomBumper {
-       background-position: bottom right;
-}
-.claro .dijitSliderRtl .dijitSliderLeftBumper {
-       border-left-width: 0px;
-       border-right-width: 1px;
-}
-.claro .dijitSliderRtl .dijitSliderRightBumper {
-       border-left-width: 1px;
-       border-right-width: 0px;
-}
-.claro .dijitSliderRtl .dijitSliderIncrementIconH {
-       background-position:-357px 50%;
-}
-.claro .dijitSliderRtl .dijitSliderDecrementIconH {
-       background-position:-251px 50%;
-}
-.claro .dijitSelectRtl .dijitButtonContents {
-       border-right-width: 0px;
-       border-left-width: 1px;
-}
-.claro .dijitDialogRtl .dijitDialogCloseIcon {
-       right: auto;
-       left: 5px;
-}
-.claro .dijitDialogRtl .dijitDialogPaneActionBar {
-       text-align: left;
-       padding: 3px 7px 2px 5px;
-}
-.claro .dijitEditorRtl .dijitEditorIFrameContainer{
-       padding:3px 10px 1px 3px;
-}
-.dijitEditorRtl .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
-}
-.dijitEditorRtlDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
-}
-.dijitToolbarRtl .dijitToolbarSeparator {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
-}
-.dijitRtl .dijitIconSave,
-.dijitRtl .dijitIconPrint,
-.dijitRtl .dijitIconCut,
-.dijitRtl .dijitIconCopy,
-.dijitRtl .dijitIconClear,
-.dijitRtl .dijitIconDelete,
-.dijitRtl .dijitIconUndo,
-.dijitRtl .dijitIconEdit,
-.dijitRtl .dijitIconNewTask,
-.dijitRtl .dijitIconEditTask,
-.dijitRtl .dijitIconEditProperty,
-.dijitRtl .dijitIconTask,
-.dijitRtl .dijitIconFilter,
-.dijitRtl .dijitIconConfigure,
-.dijitRtl .dijitIconSearch,
-.dijitRtl .dijitIconApplication,
-.dijitRtl .dijitIconBookmark,
-.dijitRtl .dijitIconChart,
-.dijitRtl .dijitIconConnector,
-.dijitRtl .dijitIconDatabase,
-.dijitRtl .dijitIconDocuments,
-.dijitRtl .dijitIconMail,
-.dijitRtl .dijitLeaf,
-.dijitRtl .dijitIconFile,
-.dijitRtl .dijitIconFunction,
-.dijitRtl .dijitIconKey,
-.dijitRtl .dijitIconPackage,
-.dijitRtl .dijitIconSample,
-.dijitRtl .dijitIconTable,
-.dijitRtl .dijitIconUsers,
-.dijitRtl .dijitFolderClosed,
-.dijitRtl .dijitIconFolderClosed,
-.dijitRtl .dijitFolderOpened,
-.dijitRtl .dijitIconFolderOpen,
-.dijitRtl .dijitIconError, .dijitRtl .dijitContentPaneError { 
-       background-image: url(../../icons/images/commonIconsObjActEnabled_rtl.png); 
-       width: 16px;
-       height: 16px;
-}
-.dj_ie6 .dijitRtl .dijitIconSave,
-.dj_ie6 .dijitRtl .dijitIconPrint,
-.dj_ie6 .dijitRtl .dijitIconCut,
-.dj_ie6 .dijitRtl .dijitIconCopy,
-.dj_ie6 .dijitRtl .dijitIconClear,
-.dj_ie6 .dijitRtl .dijitIconDelete,
-.dj_ie6 .dijitRtl .dijitIconUndo,
-.dj_ie6 .dijitRtl .dijitIconEdit,
-.dj_ie6 .dijitRtl .dijitIconNewTask,
-.dj_ie6 .dijitRtl .dijitIconEditTask,
-.dj_ie6 .dijitRtl .dijitIconEditProperty,
-.dj_ie6 .dijitRtl .dijitIconTask,
-.dj_ie6 .dijitRtl .dijitIconFilter,
-.dj_ie6 .dijitRtl .dijitIconConfigure,
-.dj_ie6 .dijitRtl .dijitIconSearch,
-.dj_ie6 .dijitRtl .dijitIconApplication,
-.dj_ie6 .dijitRtl .dijitIconBookmark,
-.dj_ie6 .dijitRtl .dijitIconChart,
-.dj_ie6 .dijitRtl .dijitIconConnector,
-.dj_ie6 .dijitRtl .dijitIconDatabase,
-.dj_ie6 .dijitRtl .dijitIconDocuments,
-.dj_ie6 .dijitRtl .dijitIconMail,
-.dj_ie6 .dijitRtl .dijitLeaf,
-.dj_ie6 .dijitRtl .dijitIconFile,
-.dj_ie6 .dijitRtl .dijitIconFunction,
-.dj_ie6 .dijitRtl .dijitIconKey,
-.dj_ie6 .dijitRtl .dijitIconPackage,
-.dj_ie6 .dijitRtl .dijitIconSample,
-.dj_ie6 .dijitRtl .dijitIconTable,
-.dj_ie6 .dijitRtl .dijitIconUsers,
-.dj_ie6 .dijitRtl .dijitFolderClosed,
-.dj_ie6 .dijitRtl .dijitIconFolderClosed,
-.dj_ie6 .dijitRtl .dijitFolderOpened,
-.dj_ie6 .dijitRtl .dijitIconFolderOpen,
-.dj_ie6 .dijitRtl .dijitIconError, .dj_ie6 .dijitRtl .dijitContentPaneError {
-       background-image: url(../../icons/images/commonIconsObjActEnabled8bit_rtl.png);
-}
-.dijitRtl .dijitDisabled .dijitIconSave,
-.dijitRtl .dijitDisabled .dijitIconPrint,
-.dijitRtl .dijitDisabled .dijitIconCut,
-.dijitRtl .dijitDisabled .dijitIconCopy,
-.dijitRtl .dijitDisabled .dijitIconClear,
-.dijitRtl .dijitDisabled .dijitIconDelete,
-.dijitRtl .dijitDisabled .dijitIconUndo,
-.dijitRtl .dijitDisabled .dijitIconEdit,
-.dijitRtl .dijitDisabled .dijitIconNewTask,
-.dijitRtl .dijitDisabled .dijitIconEditTask,
-.dijitRtl .dijitDisabled .dijitIconEditProperty,
-.dijitRtl .dijitDisabled .dijitIconTask,
-.dijitRtl .dijitDisabled .dijitIconFilter,
-.dijitRtl .dijitDisabled .dijitIconConfigure,
-.dijitRtl .dijitDisabled .dijitIconSearch,
-.dijitRtl .dijitDisabled .dijitIconApplication,
-.dijitRtl .dijitDisabled .dijitIconBookmark,
-.dijitRtl .dijitDisabled .dijitIconChart,
-.dijitRtl .dijitDisabled .dijitIconConnector,
-.dijitRtl .dijitDisabled .dijitIconDatabase,
-.dijitRtl .dijitDisabled .dijitIconDocuments,
-.dijitRtl .dijitDisabled .dijitIconMail,
-.dijitRtl .dijitDisabled .dijitLeaf,
-.dijitRtl .dijitDisabled .dijitIconFile,
-.dijitRtl .dijitDisabled .dijitIconFunction,
-.dijitRtl .dijitDisabled .dijitIconKey,
-.dijitRtl .dijitDisabled .dijitIconPackage,
-.dijitRtl .dijitDisabled .dijitIconSample,
-.dijitRtl .dijitDisabled .dijitIconTable,
-.dijitRtl .dijitDisabled .dijitIconUsers,
-.dijitRtl .dijitDisabled .dijitFolderClosed,
-.dijitRtl .dijitDisabled .dijitIconFolderClosed,
-.dijitRtl .dijitDisabled .dijitFolderOpened,
-.dijitRtl .dijitDisabled .dijitIconFolderOpen,
-.dijitRtl .dijitDisabled .dijitIconError, .dijitRtl .dijitDisabled .dijitContentPaneError {
-       background-image: url(../../icons/images/commonIconsObjActDisabled_rtl.png); 
-}
-.dijitRtl .dijitContentPaneLoading {
-       background:url(../../icons/images/loadingAnimation_rtl.gif) no-repeat;
-}
-.claro .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
-       background-position: -7px 0px;
-}
-.claro .dijitMenuItemRtl .dijitMenuExpand {
-       background-position: -7px 0px;
-       margin-right: 0px;
-       margin-left: 3px;
-}
-.claro .dijitMenuItemRtl .dijitMenuItemIcon {
-       margin:0px 4px 0px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarIncrease{
-       background-position: 0px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarDecrease {
-       background-position: -18px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarIncrease {
-       background-position: -36px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarDecrease {
-       background-position: -55px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarIncrease {
-       background-position: -72px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarDecrease {
-       background-position: -91px 0px;
-}
-.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickHover,
-.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerHover,
-.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerSelected,
-.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickSelected {
-       margin-left:-6px;
-       margin-right:-8px;
-       width: 114%;    
-}
+@import url("claro_rtl.css");
index 01a0342cdf86c4630bef1fb5d469291f0f7f68dd..6f85707f5d0eb1d549546ff0d566b752a04dafe0 100644 (file)
-
-.dijitRtl .dijitPlaceHolder {
-       left: auto;
-       right: 0;
-}
-.dijitMenuItemRtl {
-       text-align: right;
-}
-.dj_iequirks .dijitComboButtonRtl BUTTON {
-       
-       float:left;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitComboBoxRtl .dijitArrowButtonContainer {
-       
-       border-right-width: 1px !important;
-       border-right-style: solid !important;
-       border-left-width: 0px !important;
-       border-left-style: none !important;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
-       border-right: 1px solid black !important;
-       border-left: 0px none black !important;
-}
-.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
-       right: 0;
-       left: auto;
-}
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitArrowButtonContainer {
-       float: left;
-}
-.dijitCalendarRtl .dijitCalendarNextYear {
-       margin:0 0.55em 0 0;
-}
-.dijitCalendarRtl .dijitCalendarPreviousYear {
-       margin:0 0 0 0.55em;
-}
-.dijitSliderRtl .dijitSliderImageHandleV {
-       left:auto;
-}
-.dijitSliderRtl .dijitSliderImageHandleH {
-       left:-50%;
-}
-.dijitSliderRtl .dijitSliderMoveableH {
-       right:auto;
-       left:0;
-}
-.dijitSliderRtl .dijitRuleContainerV {
-       float:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleContainerV {
-       text-align:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelV {
-       text-align:left;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelH {
-       zoom:1;
-}
-.dijitSliderRtl .dijitSliderProgressBarH {
-       
-       float:right;
-       right:0;
-       left:auto;
-}
-.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
-       background-position:right;
-       padding-right:25px;
-}
-.dijitTabRtl .dijitTabCloseButton {
-       margin-left: 0px;
-       margin-right: 1em;
-}
-.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
-       width:100%;
-}
-.dijitColorPaletteRtl .dijitColorPaletteUnder {
-       
-       left: auto;
-       right: 0;
-}
-.dijitSelectRtl .dijitButtonContents {
-       text-align: right;
-}
-.claro .dijitTextBoxRtlError .dijitValidationContainer {
-       border-left-width: 0px;
-       border-right-width: 1px;
-}
-.claro .dijitComboButtonRtl .dijitStretch {
-       -moz-border-radius: 0px 4px 4px 0px;
-       -webkit-border-top-left-radius: 0px;
-    -webkit-border-top-right-radius: 4px;
-    -webkit-border-bottom-right-radius: 4px;
-    -webkit-border-bottom-left-radius: 0px;    
-}
-.claro .dijitComboButtonRtl .dijitArrowButton {
-       -moz-border-radius:  4px 0px 0px  4px;
-       -webkit-border-top-left-radius:4px;
-    -webkit-border-top-right-radius:0px;
-    -webkit-border-bottom-right-radius:0px;
-    -webkit-border-bottom-left-radius:4px;
-       padding:3px 0px 4px;
-       border-left-width: 1px;
-       border-right-width: 0px;
-}
-.claro .dijitTabContainerTop-tabs .dijitTabRtl,
-.claro .dijitTabContainerBottom-tabs .dijitTabRtl {
-       margin-right: 0;
-       margin-left: 1px;
-}
-.claro .dijitTabRtl {
-       -moz-box-orient:horizontal;
-       text-align: right;
-}
-.dj_ie7 .claro .dijitTabRtl .dijitTabContent {
-       display: block;
-       left: 0;
-}
-.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl,
-.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabCheckedRtl {
-       top: 1px;
-}
-.dj_ie7 .claro .tabStripButtonRtl .dijitButtonContents,
-.dj_ie8 .claro .tabStripButtonRtl .dijitButtonContents,        
-.dj_ie6 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_ie6 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_ie7 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_iequirks .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_iequirks .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv {
-       float:left;
-}
-.dj_ie6 .claro .dijitTabRtl .tabLabel,
-.dj_ie6 .claro .dijitTabContainerRight-tabs .dijitTabRtl,
-.dj_ie6 .claro .dijitTabContainerLeft-tabs .dijitTabRtl,
-.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtl .dijitTabInnerDiv,
-.dj_ie7 .claro .dijitTabContainerLeft-tabs .dijitTabRtl .dijitTabInnerDiv {
-       
-       zoom:1;
-}
-.dj_ie6 .claro .dijitTabRtl .dijitTabCloseButton,
-.dj_ie7 .claro .dijitTabRtl .dijitTabCloseButton,
-.dj_iequirks .claro .dijitTabRtl .dijitTabCloseButton {
-       margin-right:5px;
-}
-.dj_ie6 .claro .dijitTabContainerRightRtl .dijitTabContainerRight-tabs,
-.dj_ie6 .claro .dijitTabContainerLeftRtl .dijitTabContainerLeft-tabs {
-       width:1%;
-}
-.dj_ie6 .dijitTabContainerTopStrip,
-.dj_ie6 .dijitTabContainerBottomStrip {
-       position:absolute;
-}
-.dj_iequirks .claro .dijitTabContainerTopRtl .dijitTabContainerTopStrip {
-       padding-top: 10px;
-}
-.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtlChecked .dijitTabInnerDiv {
-       background-position:-341px -179px;
-}
-.dj_ie6 .dijitTabContainerTopRtl .dijitTabStripIcon,
-.dj_ie6 .dijitTabContainerBottomRtl .dijitTabStripIcon {
-   position: relative;
-}
-.dj_ie6-rtl .claro .dijitTabContainerTop-tabs {        
-       
-       padding-left: 3px;
-}
-.dj_iequirks-rtl .claro .dijitTabListWrapper {
-       
-       border-left: 1px solid #fff;
-       border-right: 1px solid #fff;
-}
-.claro .dijitSliderRtl .dijitSliderProgressBarH,
-.claro .dijitSliderRtl .dijitSliderRemainingBarH,
-.claro .dijitSliderRtl .dijitSliderLeftBumper,
-.claro .dijitSliderRtl .dijitSliderRightBumper,
-.claro .dijitSliderRtl .dijitSliderTopBumper {
-       background-position: top right;
-}
-.claro .dijitSliderRtl .dijitSliderProgressBarV,
-.claro .dijitSliderRtl .dijitSliderRemainingBarV,
-.claro .dijitSliderRtl .dijitSliderBottomBumper {
-       background-position: bottom right;
-}
-.claro .dijitSliderRtl .dijitSliderLeftBumper {
-       border-left-width: 0px;
-       border-right-width: 1px;
-}
-.claro .dijitSliderRtl .dijitSliderRightBumper {
-       border-left-width: 1px;
-       border-right-width: 0px;
-}
-.claro .dijitSliderRtl .dijitSliderIncrementIconH {
-       background-position:-357px 50%;
-}
-.claro .dijitSliderRtl .dijitSliderDecrementIconH {
-       background-position:-251px 50%;
-}
-.claro .dijitSelectRtl .dijitButtonContents {
-       border-right-width: 0px;
-       border-left-width: 1px;
-}
-.claro .dijitDialogRtl .dijitDialogCloseIcon {
-       right: auto;
-       left: 5px;
-}
-.claro .dijitDialogRtl .dijitDialogPaneActionBar {
-       text-align: left;
-       padding: 3px 7px 2px 5px;
-}
-.claro .dijitEditorRtl .dijitEditorIFrameContainer{
-       padding:3px 10px 1px 3px;
-}
-.dijitEditorRtl .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
-}
-.dijitEditorRtlDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
-}
-.dijitToolbarRtl .dijitToolbarSeparator {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
-}
-.dijitRtl .dijitIconSave,
-.dijitRtl .dijitIconPrint,
-.dijitRtl .dijitIconCut,
-.dijitRtl .dijitIconCopy,
-.dijitRtl .dijitIconClear,
-.dijitRtl .dijitIconDelete,
-.dijitRtl .dijitIconUndo,
-.dijitRtl .dijitIconEdit,
-.dijitRtl .dijitIconNewTask,
-.dijitRtl .dijitIconEditTask,
-.dijitRtl .dijitIconEditProperty,
-.dijitRtl .dijitIconTask,
-.dijitRtl .dijitIconFilter,
-.dijitRtl .dijitIconConfigure,
-.dijitRtl .dijitIconSearch,
-.dijitRtl .dijitIconApplication,
-.dijitRtl .dijitIconBookmark,
-.dijitRtl .dijitIconChart,
-.dijitRtl .dijitIconConnector,
-.dijitRtl .dijitIconDatabase,
-.dijitRtl .dijitIconDocuments,
-.dijitRtl .dijitIconMail,
-.dijitRtl .dijitLeaf,
-.dijitRtl .dijitIconFile,
-.dijitRtl .dijitIconFunction,
-.dijitRtl .dijitIconKey,
-.dijitRtl .dijitIconPackage,
-.dijitRtl .dijitIconSample,
-.dijitRtl .dijitIconTable,
-.dijitRtl .dijitIconUsers,
-.dijitRtl .dijitFolderClosed,
-.dijitRtl .dijitIconFolderClosed,
-.dijitRtl .dijitFolderOpened,
-.dijitRtl .dijitIconFolderOpen,
-.dijitRtl .dijitIconError, .dijitRtl .dijitContentPaneError { 
-       background-image: url(../../icons/images/commonIconsObjActEnabled_rtl.png); 
-       width: 16px;
-       height: 16px;
-}
-.dj_ie6 .dijitRtl .dijitIconSave,
-.dj_ie6 .dijitRtl .dijitIconPrint,
-.dj_ie6 .dijitRtl .dijitIconCut,
-.dj_ie6 .dijitRtl .dijitIconCopy,
-.dj_ie6 .dijitRtl .dijitIconClear,
-.dj_ie6 .dijitRtl .dijitIconDelete,
-.dj_ie6 .dijitRtl .dijitIconUndo,
-.dj_ie6 .dijitRtl .dijitIconEdit,
-.dj_ie6 .dijitRtl .dijitIconNewTask,
-.dj_ie6 .dijitRtl .dijitIconEditTask,
-.dj_ie6 .dijitRtl .dijitIconEditProperty,
-.dj_ie6 .dijitRtl .dijitIconTask,
-.dj_ie6 .dijitRtl .dijitIconFilter,
-.dj_ie6 .dijitRtl .dijitIconConfigure,
-.dj_ie6 .dijitRtl .dijitIconSearch,
-.dj_ie6 .dijitRtl .dijitIconApplication,
-.dj_ie6 .dijitRtl .dijitIconBookmark,
-.dj_ie6 .dijitRtl .dijitIconChart,
-.dj_ie6 .dijitRtl .dijitIconConnector,
-.dj_ie6 .dijitRtl .dijitIconDatabase,
-.dj_ie6 .dijitRtl .dijitIconDocuments,
-.dj_ie6 .dijitRtl .dijitIconMail,
-.dj_ie6 .dijitRtl .dijitLeaf,
-.dj_ie6 .dijitRtl .dijitIconFile,
-.dj_ie6 .dijitRtl .dijitIconFunction,
-.dj_ie6 .dijitRtl .dijitIconKey,
-.dj_ie6 .dijitRtl .dijitIconPackage,
-.dj_ie6 .dijitRtl .dijitIconSample,
-.dj_ie6 .dijitRtl .dijitIconTable,
-.dj_ie6 .dijitRtl .dijitIconUsers,
-.dj_ie6 .dijitRtl .dijitFolderClosed,
-.dj_ie6 .dijitRtl .dijitIconFolderClosed,
-.dj_ie6 .dijitRtl .dijitFolderOpened,
-.dj_ie6 .dijitRtl .dijitIconFolderOpen,
-.dj_ie6 .dijitRtl .dijitIconError, .dj_ie6 .dijitRtl .dijitContentPaneError {
-       background-image: url(../../icons/images/commonIconsObjActEnabled8bit_rtl.png);
-}
-.dijitRtl .dijitDisabled .dijitIconSave,
-.dijitRtl .dijitDisabled .dijitIconPrint,
-.dijitRtl .dijitDisabled .dijitIconCut,
-.dijitRtl .dijitDisabled .dijitIconCopy,
-.dijitRtl .dijitDisabled .dijitIconClear,
-.dijitRtl .dijitDisabled .dijitIconDelete,
-.dijitRtl .dijitDisabled .dijitIconUndo,
-.dijitRtl .dijitDisabled .dijitIconEdit,
-.dijitRtl .dijitDisabled .dijitIconNewTask,
-.dijitRtl .dijitDisabled .dijitIconEditTask,
-.dijitRtl .dijitDisabled .dijitIconEditProperty,
-.dijitRtl .dijitDisabled .dijitIconTask,
-.dijitRtl .dijitDisabled .dijitIconFilter,
-.dijitRtl .dijitDisabled .dijitIconConfigure,
-.dijitRtl .dijitDisabled .dijitIconSearch,
-.dijitRtl .dijitDisabled .dijitIconApplication,
-.dijitRtl .dijitDisabled .dijitIconBookmark,
-.dijitRtl .dijitDisabled .dijitIconChart,
-.dijitRtl .dijitDisabled .dijitIconConnector,
-.dijitRtl .dijitDisabled .dijitIconDatabase,
-.dijitRtl .dijitDisabled .dijitIconDocuments,
-.dijitRtl .dijitDisabled .dijitIconMail,
-.dijitRtl .dijitDisabled .dijitLeaf,
-.dijitRtl .dijitDisabled .dijitIconFile,
-.dijitRtl .dijitDisabled .dijitIconFunction,
-.dijitRtl .dijitDisabled .dijitIconKey,
-.dijitRtl .dijitDisabled .dijitIconPackage,
-.dijitRtl .dijitDisabled .dijitIconSample,
-.dijitRtl .dijitDisabled .dijitIconTable,
-.dijitRtl .dijitDisabled .dijitIconUsers,
-.dijitRtl .dijitDisabled .dijitFolderClosed,
-.dijitRtl .dijitDisabled .dijitIconFolderClosed,
-.dijitRtl .dijitDisabled .dijitFolderOpened,
-.dijitRtl .dijitDisabled .dijitIconFolderOpen,
-.dijitRtl .dijitDisabled .dijitIconError, .dijitRtl .dijitDisabled .dijitContentPaneError {
-       background-image: url(../../icons/images/commonIconsObjActDisabled_rtl.png); 
-}
-.dijitRtl .dijitContentPaneLoading {
-       background:url(../../icons/images/loadingAnimation_rtl.gif) no-repeat;
-}
-.claro .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
-       background-position: -7px 0px;
-}
-.claro .dijitMenuItemRtl .dijitMenuExpand {
-       background-position: -7px 0px;
-       margin-right: 0px;
-       margin-left: 3px;
-}
-.claro .dijitMenuItemRtl .dijitMenuItemIcon {
-       margin:0px 4px 0px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarIncrease{
-       background-position: 0px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarDecrease {
-       background-position: -18px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarIncrease {
-       background-position: -36px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarDecrease {
-       background-position: -55px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarIncrease {
-       background-position: -72px 0px;
-}
-.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarDecrease {
-       background-position: -91px 0px;
-}
-.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickHover,
-.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerHover,
-.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerSelected,
-.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickSelected {
-       margin-left:-6px;
-       margin-right:-8px;
-       width: 114%;    
-}
+/* RTL files */
+@import url("../dijit_rtl.css");
+@import url("form/Common_rtl.css");
+@import url("form/Button_rtl.css");
+@import url("layout/TabContainer_rtl.css");
+@import url("form/Slider_rtl.css");
+@import url("form/Select_rtl.css");
+@import url("Dialog_rtl.css");
+@import url("Editor_rtl.css");
+@import url("../../icons/editorIcons_rtl.css");/* RTL sprite for editor icons to be used by all themes*/
+@import url("../../icons/commonIcons_rtl.css");/* RTL sprite for common icons to be used by all themes*/
+@import url("TitlePane_rtl.css");
+@import url("Menu_rtl.css");
+@import url("Calendar_rtl.css");
+@import url("TimePicker_rtl.css");
+@import url("Toolbar_rtl.css");
diff --git a/lib/dijit/themes/claro/compile.js b/lib/dijit/themes/claro/compile.js
new file mode 100644 (file)
index 0000000..14762b5
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+       Available via Academic Free License >= 2.1 OR the modified BSD license.
+       see: http://dojotoolkit.org/license for details
+*/
+
+
+// Script to process all the less files and convert them to CSS files
+// Run from themes/dijit/claro like:
+//
+//     $ node compile.js
+
+// Some guesses for where to find less
+require.paths.unshift('/opt/less/lib', 'C:/less/lib');
+
+var fs = require('fs'),                // file system access
+       path = require('path'), // get directory from file name
+       less = require('less'); // less processor
+
+var options = {
+       compress: false,
+       optimization: 1,
+       silent: false
+};
+
+var allFiles = [].concat(
+               fs.readdirSync("."),
+               fs.readdirSync("form").map(function(fname){ return "form/"+fname; }),
+               fs.readdirSync("layout").map(function(fname){ return "layout/"+fname; })
+       ),
+       lessFiles = allFiles.filter(function(name){ return name && name != "variables.less" && /\.less$/.test(name); });
+
+lessFiles.forEach(function(fname){
+       console.log("=== " + fname);
+       fs.readFile(fname, 'utf-8', function (e, data){
+               if(e){
+                       console.error("lessc: " + e.message);
+                       process.exit(1);
+               }
+
+               new(less.Parser)({
+                       paths: [path.dirname(fname)],
+                       optimization: options.optimization,
+                       filename: fname
+               }).parse(data, function(err, tree){
+                       if(err){
+                               less.writeError(err, options);
+                               process.exit(1);
+                       }else{
+                               try{
+                                       var css = tree.toCSS({ compress: options.compress }),
+                                               outputFname = fname.replace('.less', '.css');
+                                       fd = fs.openSync(outputFname, "w");
+                                       fs.writeSync(fd, css, 0, "utf8");
+                               }catch(e){
+                                       less.writeError(e, options);
+                                       process.exit(2);
+                               }
+                       }
+               });
+       });
+});
index 72f9b1b4086f2e9acc8fd89844b1fcff810e3737..64e470cf314eea3cc40254c6c6ae734a290cda14 100644 (file)
@@ -1,81 +1,41 @@
-
+@import url("../../../dojo/resources/dojo.css");
+/* ======= Styling for the document itself (overriding dojo.css) ======== */
 .claro {
-       font-family:Verdana,Arial,Helvetica,sans-serif;
-       font-size: .688em;
-       color: #131313;
-}
-h1 {
-       font-size: 1.545em; 
-       font-weight: normal;
-       line-height: 1em; 
-       margin-top: 1em;
-       margin-bottom:0.727em;
-}
-.claro .dijitDialog h1 { 
-       margin-top:0em; 
-}
-h2 { 
-       font-size: 1.364em; 
-       line-height: 1.455em; 
-       margin-top:1em; 
-       margin-bottom:0.60em;
-       font-weight: normal;
-}
-h3, h4, h5, h6 {
-       font-size:1.091em; 
-       font-weight: normal; 
-       line-height: 1.5em; 
-       margin-top: 1.5em; 
-       margin-bottom: 0;
-}
-p { 
-       font-size: 1em; 
-       line-height: 1.3em;
-}
-blockquote { 
-       font-size: 0.916em; 
-       margin-top: 3.272em; 
-       margin-bottom: 3.272em; 
-       line-height: 1.636em; 
-       padding: 1.636em; 
-       border-top: 1px solid #ccc; 
-       border-bottom: 1px solid #ccc;
-}
-ol li, ul li { 
-       font-size: 1em; 
-       line-height: 1.5em; 
-       margin: 0;
-}
-pre, code { 
-       font-size:115%;
-       *font-size:100%;
-       font-family:inherit; 
-       background-color: #efefef; 
-       border: 1px solid #ccc;
-}
-pre { 
-       border-width: 1px 0; 
-       padding: 1.5em;
-}
-table {  font-size:100%; }
-table.dojoTabular { 
-       border-collapse: collapse; 
-       border-spacing: 0; 
-       border: 1px solid #ccc; 
-       margin: 0 1.5em;
-}
-.dojoTabular th { 
-       text-align: center; 
-       font-weight: bold;
-}
-table.dojoTabular thead, table.dojoTabular tfoot { 
-       background-color: #efefef; 
-       border: 1px solid #ccc; 
-       border-width: 1px 0; 
-}
-table.dojoTabular thead tr th,
-table.dojoTabular thead tr td,
-table.dojoTabular tbody tr td,
-table.dojoTabular tfoot tr td { 
-       padding: 0.25em 0.5em;
+  font-family: Verdana, Arial, Helvetica, sans-serif;
+  font-size: .688em;
+  color: #131313;
+}
+/* Headings */
+.claro h1 {
+  font-size: 1.545em;
+  margin-bottom: 0.727em;
+}
+.claro h2 {
+  font-size: 1.364em;
+  line-height: 1.455em;
+  margin-top: 1em;
+  margin-bottom: 0.60em;
+  font-weight: normal;
+}
+.claro h3,
+.claro h4,
+.claro h5,
+.claro h6 {
+  font-size: 1.091em;
+  font-weight: normal;
+}
+/* paragraphs, quotes and lists */
+.claro p {
+  line-height: 1.3em;
+}
+/* pre and code */
+.claro pre, .claro code {
+  font-family: inherit;
+  background-color: #efefef;
+  border: 1px solid #d3d3d3;
+}
+/* tables */
+.claro table.dojoTabular thead, .claro table.dojoTabular tfoot {
+  background-color: #efefef;
+  border: 1px solid #d3d3d3;
 }
diff --git a/lib/dijit/themes/claro/document.less b/lib/dijit/themes/claro/document.less
new file mode 100644 (file)
index 0000000..7f86356
--- /dev/null
@@ -0,0 +1,45 @@
+/* ======= Styling for the document itself (overriding dojo.css) ======== */
+
+@import "variables";
+@import url("../../../dojo/resources/dojo.css");
+
+.claro {
+  font-family: Verdana, Arial, Helvetica, sans-serif;
+  font-size: .688em;
+  color: @document-text-color;
+}
+
+/* Headings */
+.claro h1 {
+       font-size: 1.545em; 
+       margin-bottom:0.727em;
+}
+.claro h2 { 
+       font-size: 1.364em; 
+       line-height: 1.455em; 
+       margin-top:1em; 
+       margin-bottom:0.60em;
+       font-weight: normal;
+}
+.claro h3, .claro h4, .claro h5, .claro h6 {
+       font-size:1.091em; 
+       font-weight: normal; 
+}
+
+/* paragraphs, quotes and lists */
+.claro p { 
+       line-height: 1.3em;
+}
+
+/* pre and code */
+.claro pre, .claro code { 
+       font-family:inherit; 
+       background-color: @document-shadedsection-background-color; 
+       border: 1px solid @document-border-color;
+}
+
+/* tables */
+.claro table.dojoTabular thead, .claro table.dojoTabular tfoot { 
+       background-color: @document-shadedsection-background-color; 
+       border: 1px solid @document-border-color; 
+}
index a2a15c0cc382b7220fcef5ce105c9024525cf074..e01a1d31364ce4ed94a9ac906b35cc169fe7303f 100644 (file)
-
+/* Button | DropDownButton | ComboButton | ToggleButton
+ * 
+ * Styling Buttons mainly includes:
+ * 
+ * 1. Containers
+ *             .dijitButton
+ *             .dijitDropDownButton
+ *             .dijitComboButton
+ *             .dijitButtonNode - common button/arrow wrapper shared across all three button types 
+ *
+ * 2. Button text
+ *             .dijitButtonText
+ * 
+ * 3. Arrows - only for DropDownButton and ComboButton
+ *          There are total four directions arrows - down, left, right, up:
+ *             .dijitArrowButtonInner - down arrow by default
+ *      .dijitLeftArrowButton .dijitArrowButtonInner - left arrow
+ *      .dijitRightArrowButton .dijitArrowButtonInner - right arrow
+ *      .dijitUpArrowButton .dijitArrowButtonInner - up arrow
+ * 
+ * 4. States - Hover, Active, Disabled, e.g.
+ *             .dijitButtonHover .dijitButtonNode
+ *             .dijitButtonActive .dijitButtonNode
+ *             .dijitButtonDisabled .dijitButtonNode
+ *      
+ *      .dijitDisabled .dijitArrowButtonInner  - disabled arrow states 
+ */
 .claro .dijitButtonNode {
-       
-       -webkit-transition-property:background-color;
-       -webkit-transition-duration:.3s;
+  /* rules for dijit.form.*Button widgets and arrow nodes on ComboBox, Spinner etc. */
+
+  -webkit-transition-property: background-color;
+  -moz-transition-property: background-color;
+  transition-property: background-color;
+  -webkit-transition-duration: 0.3s;
+  -moz-transition-duration: 0.3s;
+  transition-duration: 0.3s;
 }
 .claro .dijitButton .dijitButtonNode,
 .claro .dijitDropDownButton .dijitButtonNode,
 .claro .dijitComboButton .dijitButtonNode,
 .claro .dijitToggleButton .dijitButtonNode {
-       
-       border: 1px solid #769dc0;
-       padding:2px 4px 4px 4px;
-       background-image: url("images/button.png");
-       background-position: center top;
-       background-repeat: repeat-x;
-       background-color: #e4f2ff;
-       border-radius: 4px;
-       -moz-border-radius: 4px;
-       -webkit-border-radius: 4px;
-       box-shadow:0px 1px 1px rgba(0,0,0,0.15);
-       -webkit-box-shadow:0px 1px 1px rgba(0,0,0,0.15);
-       -moz-box-shadow: 0px 1px 1px rgba(0,0,0,0.15);  
+  /* rules for the dijit.form.*Button widgets (see also ComboButton section below) */
+
+  border: 1px solid #769dc0;
+  padding: 2px 4px 4px 4px;
+  background-image: url("images/button.png");
+  background-position: center top;
+  background-repeat: repeat-x;
+  background-color: #e9f4fe;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
+  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
+  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
 }
 .claro .dijitComboButton .dijitArrowButton {
-       border-left-width: 0px;
-       padding: 4px 2px 4px 2px;       
+  border-left-width: 0;
+  padding: 4px 2px 4px 2px;
+  /* TODO: still needed? */
+
 }
+/*arrow styles for down/up/left/right directions*/
 .claro .dijitArrowButtonInner {
-       width: 15px;
-       height: 15px;
-       margin: 0 auto;
-       background-image:url("images/buttonArrows.png");
-       background-repeat:no-repeat;
-       background-position:-51px 53%;
+  width: 15px;
+  height: 15px;
+  margin: 0 auto;
+  background-image: url("images/buttonArrows.png");
+  background-repeat: no-repeat;
+  background-position: -51px 53%;
 }
 .claro .dijitLeftArrowButton .dijitArrowButtonInner {
-       background-position: -77px 53%;
+  background-position: -77px 53%;
 }
 .claro .dijitRightArrowButton .dijitArrowButtonInner {
-       background-position: -26px 53%;
+  background-position: -26px 53%;
 }
 .claro .dijitUpArrowButton .dijitArrowButtonInner {
-       background-position: 0px 53%;
+  background-position: 0 53%;
 }
 .claro .dijitDisabled .dijitArrowButtonInner {
-       background-position: -151px 53%;
+  background-position: -151px 53%;
 }
 .claro .dijitDisabled .dijitLeftArrowButton .dijitArrowButtonInner {
-       background-position: -177px 53%;
+  background-position: -177px 53%;
 }
 .claro .dijitDisabled .dijitRightArrowButton .dijitArrowButtonInner {
-       background-position: -126px 53%;
+  background-position: -126px 53%;
 }
 .claro .dijitDisabled .dijitUpArrowButton .dijitArrowButtonInner {
-       background-position: -100px 53%;
+  background-position: -100px 53%;
 }
 .claro .dijitButtonText {
-       padding: 0 0.3em;
-       text-align: center;
-}
-.claro .dijitDisabled .dijitButtonText {
-       color: #7F7F7F;
+  padding: 0 0.3em;
+  text-align: center;
 }
+/* hover status */
 .claro .dijitButtonHover .dijitButtonNode,
 .claro .dijitDropDownButtonHover .dijitButtonNode,
-.claro .dijitComboButton .dijitButtonNodeHover, 
+.claro .dijitComboButton .dijitButtonNodeHover,
 .claro .dijitComboButton .dijitDownArrowButtonHover,
 .claro .dijitToggleButtonHover .dijitButtonNode {
-       background-color: #afd9ff;
-       color:#000;
-       -webkit-transition-duration:.2s;
-}
-.claro .dijitButtonActive .dijitButtonNode, 
+  background-color: #abd6ff;
+  color: #000000;
+  -webkit-transition-duration: 0.2s;
+  -moz-transition-duration: 0.2s;
+  transition-duration: 0.2s;
+}
+/* checked status */
+.claro .dijitButtonActive .dijitButtonNode,
 .claro .dijitDropDownButtonActive .dijitButtonNode,
 .claro .dijitComboButtonActive .dijitButtonNode,
 .claro .dijitToggleButtonActive .dijitButtonNode {
-       background-color: #99cfff;
-       box-shadow:0px 0px 0px rgba(0,0,0,0);
-       -webkit-box-shadow:0px 0px 0px rgba(0,0,0,0);
-       -moz-box-shadow: 0px 0px 0px rgba(0,0,0,0);
-       -webkit-transition-duration:.1s;
-}
+  background-color: #abd6ff;
+  -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
+  -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
+  box-shadow: 0 0 0 rgba(0, 0, 0, 0);
+  -webkit-transition-duration: 0.1s;
+  -moz-transition-duration: 0.1s;
+  transition-duration: 0.1s;
+}
+/* disabled status */
 .claro .dijitButtonDisabled,
 .claro .dijitDropDownButtonDisabled,
 .claro .dijitComboButtonDisabled,
 .claro .dijitToggleButtonDisabled {
-       background-image: none;
-       outline: none;
+  background-image: none;
+  outline: none;
 }
 .claro .dijitButtonDisabled .dijitButtonNode,
 .claro .dijitDropDownButtonDisabled .dijitButtonNode,
 .claro .dijitComboButtonDisabled .dijitButtonNode,
-.claro .dijitToggleButtonDisabled .dijitButtonNode { 
-       background-position:0px -149px;
-       background-color: #e3e3e3;
-       border: solid 1px #c9c9c9;
-       color: #696969;
-       box-shadow:0px 0px 0px rgba(0,0,0,0);
-       -webkit-box-shadow:0px 0px 0px rgba(0,0,0,0);
-       -moz-box-shadow: 0px 0px 0px rgba(0,0,0,0);
-}
-.claro .dijitComboButtonDisabled .dijitArrowButton{ 
-       border-left-width: 0px;
-}
+.claro .dijitToggleButtonDisabled .dijitButtonNode {
+  background-position: 0 -149px;
+  background-color: #efefef;
+  border: solid 1px #d3d3d3;
+  color: #818181;
+  -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
+  -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0);
+  box-shadow: 0 0 0 rgba(0, 0, 0, 0);
+}
+.claro .dijitComboButtonDisabled .dijitArrowButton {
+  border-left-width: 0;
+}
+/* for ComboButton */
 .claro table.dijitComboButton {
-       border-collapse: separate;      
+  border-collapse: separate;
+  /* override dijit.css so that ComboBox rounded corners work */
+
 }
 .dj_ie6 .claro .dijitButtonNode {
-       background-image: none;
+  background-image: none;
 }
 .claro .dijitComboButton .dijitStretch {
-       -moz-border-radius: 4px 0px 0px 4px;
-       -webkit-border-top-left-radius: 4px;
-       -webkit-border-top-right-radius: 0px;
-       -webkit-border-bottom-right-radius: 0px;
-       -webkit-border-bottom-left-radius: 4px;
+  -moz-border-radius: 4px 0 0 4px;
+  border-radius: 4px 0 0 4px;
 }
 .claro .dijitComboButton .dijitArrowButton {
-       -moz-border-radius: 0px 4px 4px 0px;
-       -webkit-border-top-left-radius: 0px;
-       -webkit-border-top-right-radius: 4px;
-       -webkit-border-bottom-right-radius: 4px;
-       -webkit-border-bottom-left-radius: 0px;
+  -moz-border-radius: 0 4px 4px 0;
+  border-radius: 0 4px 4px 0;
 }
diff --git a/lib/dijit/themes/claro/form/Button.less b/lib/dijit/themes/claro/form/Button.less
new file mode 100644 (file)
index 0000000..b076d2a
--- /dev/null
@@ -0,0 +1,154 @@
+/* Button | DropDownButton | ComboButton | ToggleButton
+ * 
+ * Styling Buttons mainly includes:
+ * 
+ * 1. Containers
+ *             .dijitButton
+ *             .dijitDropDownButton
+ *             .dijitComboButton
+ *             .dijitButtonNode - common button/arrow wrapper shared across all three button types 
+ *
+ * 2. Button text
+ *             .dijitButtonText
+ * 
+ * 3. Arrows - only for DropDownButton and ComboButton
+ *          There are total four directions arrows - down, left, right, up:
+ *             .dijitArrowButtonInner - down arrow by default
+ *      .dijitLeftArrowButton .dijitArrowButtonInner - left arrow
+ *      .dijitRightArrowButton .dijitArrowButtonInner - right arrow
+ *      .dijitUpArrowButton .dijitArrowButtonInner - up arrow
+ * 
+ * 4. States - Hover, Active, Disabled, e.g.
+ *             .dijitButtonHover .dijitButtonNode
+ *             .dijitButtonActive .dijitButtonNode
+ *             .dijitButtonDisabled .dijitButtonNode
+ *      
+ *      .dijitDisabled .dijitArrowButtonInner  - disabled arrow states 
+ */
+
+@import "../variables";
+
+.claro .dijitButtonNode {
+       /* rules for dijit.form.*Button widgets and arrow nodes on ComboBox, Spinner etc. */
+       .transition-property(background-color);
+       .transition-duration(.3s);
+}
+
+.claro .dijitButton .dijitButtonNode,
+.claro .dijitDropDownButton .dijitButtonNode,
+.claro .dijitComboButton .dijitButtonNode,
+.claro .dijitToggleButton .dijitButtonNode {
+       /* rules for the dijit.form.*Button widgets (see also ComboButton section below) */
+       border: 1px solid @button-border-color;
+       padding:2px 4px 4px 4px;
+       background-image: url("images/button.png");
+       background-position: center top;
+       background-repeat: repeat-x;
+       background-color: @button-background-color;
+       .border-radius(@button-border-radius);
+       .box-shadow(0 1px 1px rgba(0,0,0,0.15));
+}
+
+.claro .dijitComboButton .dijitArrowButton {
+       border-left-width: 0;
+       padding: 4px 2px 4px 2px;       /* TODO: still needed? */
+}
+
+/*arrow styles for down/up/left/right directions*/
+.claro .dijitArrowButtonInner {
+       width: 15px;
+       height: 15px;
+       margin: 0 auto;
+       background-image:url("images/buttonArrows.png");
+       background-repeat:no-repeat;
+       background-position:-51px 53%;
+}
+.claro .dijitLeftArrowButton .dijitArrowButtonInner {
+       background-position: -77px 53%;
+}
+.claro .dijitRightArrowButton .dijitArrowButtonInner {
+       background-position: -26px 53%;
+}
+.claro .dijitUpArrowButton .dijitArrowButtonInner {
+       background-position: 0 53%;
+}
+.claro .dijitDisabled .dijitArrowButtonInner {
+       background-position: -151px 53%;
+}
+.claro .dijitDisabled .dijitLeftArrowButton .dijitArrowButtonInner {
+       background-position: -177px 53%;
+}
+.claro .dijitDisabled .dijitRightArrowButton .dijitArrowButtonInner {
+       background-position: -126px 53%;
+}
+.claro .dijitDisabled .dijitUpArrowButton .dijitArrowButtonInner {
+       background-position: -100px 53%;
+}
+
+.claro .dijitButtonText {
+       padding: 0 0.3em;
+       text-align: center;
+}
+
+
+
+
+
+/* hover status */
+.claro .dijitButtonHover .dijitButtonNode,
+.claro .dijitDropDownButtonHover .dijitButtonNode,
+.claro .dijitComboButton .dijitButtonNodeHover, 
+.claro .dijitComboButton .dijitDownArrowButtonHover,
+.claro .dijitToggleButtonHover .dijitButtonNode {
+       background-color: @button-hovered-background-color;
+       color:@text-color;
+       .transition-duration(.2s);
+}
+
+/* checked status */
+.claro .dijitButtonActive .dijitButtonNode, 
+.claro .dijitDropDownButtonActive .dijitButtonNode,
+.claro .dijitComboButtonActive .dijitButtonNode,
+.claro .dijitToggleButtonActive .dijitButtonNode {
+       background-color: @button-pressed-background-color;
+       .box-shadow(0 0 0 rgba(0,0,0,0));
+       .transition-duration(.1s);
+}
+
+/* disabled status */
+.claro .dijitButtonDisabled,
+.claro .dijitDropDownButtonDisabled,
+.claro .dijitComboButtonDisabled,
+.claro .dijitToggleButtonDisabled {
+       background-image: none;
+       outline: none;
+}
+
+.claro .dijitButtonDisabled .dijitButtonNode,
+.claro .dijitDropDownButtonDisabled .dijitButtonNode,
+.claro .dijitComboButtonDisabled .dijitButtonNode,
+.claro .dijitToggleButtonDisabled .dijitButtonNode { 
+       background-position:0 -149px;
+       background-color: @disabled-background-color;
+       border: solid 1px @disabled-border-color;
+       color: @disabled-text-color;
+       .box-shadow(0 0 0 rgba(0,0,0,0));
+}
+.claro .dijitComboButtonDisabled .dijitArrowButton{ 
+       border-left-width: 0;
+}
+/* for ComboButton */
+.claro table.dijitComboButton {
+       border-collapse: separate;      /* override dijit.css so that ComboBox rounded corners work */
+}
+
+.dj_ie6 .claro .dijitButtonNode {
+       background-image: none;
+}
+
+.claro .dijitComboButton .dijitStretch {
+       .border-radius(@button-border-radius 0 0 @button-border-radius);
+}
+.claro .dijitComboButton .dijitArrowButton {
+       .border-radius(0 @button-border-radius @button-border-radius 0);
+}
index f1484b127ad499da40f30316573a11c5e54ff1ab..2d5b08bff078f6d77d561d5b978aee300423f4fd 100644 (file)
@@ -1,18 +1,13 @@
-
+/* Combo Button */
 .claro .dijitComboButtonRtl .dijitStretch {
-       -moz-border-radius: 0px 4px 4px 0px;
-       -webkit-border-top-left-radius: 0px;
-    -webkit-border-top-right-radius: 4px;
-    -webkit-border-bottom-right-radius: 4px;
-    -webkit-border-bottom-left-radius: 0px;    
+  -moz-border-radius: 0 4px 4px 0;
+  border-radius: 0 4px 4px 0;
 }
 .claro .dijitComboButtonRtl .dijitArrowButton {
-       -moz-border-radius:  4px 0px 0px  4px;
-       -webkit-border-top-left-radius:4px;
-    -webkit-border-top-right-radius:0px;
-    -webkit-border-bottom-right-radius:0px;
-    -webkit-border-bottom-left-radius:4px;
-       padding:3px 0px 4px;
-       border-left-width: 1px;
-       border-right-width: 0px;
+  -moz-border-radius: 4px 0 0 4px;
+  border-radius: 4px 0 0 4px;
+  padding: 3px 0 4px;
+  border-left-width: 1px;
+  border-right-width: 0;
 }
+/* End Combo Button */
\ No newline at end of file
diff --git a/lib/dijit/themes/claro/form/Button_rtl.less b/lib/dijit/themes/claro/form/Button_rtl.less
new file mode 100644 (file)
index 0000000..6225d68
--- /dev/null
@@ -0,0 +1,16 @@
+@import "../variables";
+
+/* Combo Button */
+
+.claro .dijitComboButtonRtl .dijitStretch {
+       .border-radius(0 @button-border-radius @button-border-radius 0);
+}
+
+.claro .dijitComboButtonRtl .dijitArrowButton {
+       .border-radius(@button-border-radius 0 0  @button-border-radius);
+       padding:3px 0 4px;
+       border-left-width: 1px;
+       border-right-width: 0;
+}
+
+/* End Combo Button */
\ No newline at end of file
index be3604ddd9a6fbf3a068ef5bb5a4affca1087947..5765bb3707522b38bbc758c148392ba45f0e2bf0 100644 (file)
@@ -1,46 +1,71 @@
-
+/* CheckBox
+ * 
+ * Styling CheckBox mainly includes:
+ * 
+ * 1. Containers
+ *             .dijitCheckBox|.dijitCheckBoxIcon - for border, padding, width|height and background image
+ * 
+ * 2. CheckBox within ToggleButton
+ *             .dijitToggleButton|.dijitToggleButtonChecked .* - for background image
+ * 
+ * 3. Checked state
+ *             .dijitCheckBoxChecked - for checked background-color|image
+ *             .dijitToggleButtonChecked - for border, background-color|image, display and width|height
+ * 
+ * 4. Hover state
+ *             .dijitCheckBoxHover|.dijitCheckBoxCheckedHover - for background image
+ * 
+ * 5. Disabled state
+ *             .dijitCheckBoxDisabled|.dijitCheckBoxCheckedDisabled - for background image
+ */
 .claro .dijitToggleButton .dijitCheckBoxIcon {
-       background-image: url('../images/checkmarkNoBorder.png');
+  background-image: url('../images/checkmarkNoBorder.png');
 }
 .dj_ie6 .claro .dijitToggleButton .dijitCheckBoxIcon {
-       background-image: url('../images/checkmarkNoBorder.gif');
-}
-.claro .dijitCheckBox,
-.claro .dijitCheckBoxIcon                      {
-       background-image: url('images/checkboxRadioButtonStates.png'); 
-       background-repeat: no-repeat;
-       width: 15px;
-       height: 16px;
-       margin: 0 2px 0 0;
-       padding: 0;
-}
-.dj_ie6 .claro .dijitCheckBox,
-.dj_ie6 .claro .dijitCheckBoxIcon                      {
-       background-image: url('images/checkboxAndRadioButtons_IE6.png'); 
-}
-.claro .dijitCheckBox,
-.claro .dijitToggleButton .dijitCheckBoxIcon {
-       
-       background-position: -15px;
+  background-image: url('../images/checkmarkNoBorder.gif');
+}
+.claro .dijitCheckBox, .claro .dijitCheckBoxIcon {
+  background-image: url('images/checkboxRadioButtonStates.png');
+  /* checkbox sprite image */
+
+  background-repeat: no-repeat;
+  width: 15px;
+  height: 16px;
+  margin: 0 2px 0 0;
+  padding: 0;
 }
-.claro .dijitCheckBoxChecked,
-.claro .dijitToggleButtonChecked .dijitCheckBoxIcon {
-       
-       background-position: -0px;
+.dj_ie6 .claro .dijitCheckBox, .dj_ie6 .claro .dijitCheckBoxIcon {
+  background-image: url('images/checkboxAndRadioButtons_IE6.png');
+  /* checkbox sprite image */
+
+}
+.claro .dijitCheckBox, .claro .dijitToggleButton .dijitCheckBoxIcon {
+  /* unchecked */
+
+  background-position: -15px;
+}
+.claro .dijitCheckBoxChecked, .claro .dijitToggleButtonChecked .dijitCheckBoxIcon {
+  /* checked */
+
+  background-position: 0;
 }
 .claro .dijitCheckBoxDisabled {
-       
-       background-position: -75px;
+  /* disabled */
+
+  background-position: -75px;
 }
 .claro .dijitCheckBoxCheckedDisabled {
-       
-       background-position: -60px;
+  /* disabled but checked */
+
+  background-position: -60px;
 }
 .claro .dijitCheckBoxHover {
-       
-       background-position: -45px;
+  /* hovering over an unchecked enabled checkbox */
+
+  background-position: -45px;
 }
 .claro .dijitCheckBoxCheckedHover {
-       
-       background-position: -30px;
+  /* hovering over an checked enabled checkbox */
+
+  background-position: -30px;
 }
diff --git a/lib/dijit/themes/claro/form/Checkbox.less b/lib/dijit/themes/claro/form/Checkbox.less
new file mode 100644 (file)
index 0000000..21769dc
--- /dev/null
@@ -0,0 +1,79 @@
+/* CheckBox
+ * 
+ * Styling CheckBox mainly includes:
+ * 
+ * 1. Containers
+ *             .dijitCheckBox|.dijitCheckBoxIcon - for border, padding, width|height and background image
+ * 
+ * 2. CheckBox within ToggleButton
+ *             .dijitToggleButton|.dijitToggleButtonChecked .* - for background image
+ * 
+ * 3. Checked state
+ *             .dijitCheckBoxChecked - for checked background-color|image
+ *             .dijitToggleButtonChecked - for border, background-color|image, display and width|height
+ * 
+ * 4. Hover state
+ *             .dijitCheckBoxHover|.dijitCheckBoxCheckedHover - for background image
+ * 
+ * 5. Disabled state
+ *             .dijitCheckBoxDisabled|.dijitCheckBoxCheckedDisabled - for background image
+ */
+
+@import "../variables";
+
+.claro .dijitToggleButton .dijitCheckBoxIcon {
+       background-image: url('../images/checkmarkNoBorder.png');
+}
+
+.dj_ie6 .claro .dijitToggleButton .dijitCheckBoxIcon {
+       background-image: url('../images/checkmarkNoBorder.gif');
+}
+
+.claro .dijitCheckBox,
+.claro .dijitCheckBoxIcon              /* inside a toggle button */    {
+       background-image: url('images/checkboxRadioButtonStates.png'); /* checkbox sprite image */
+       background-repeat: no-repeat;
+       width: 15px;
+       height: 16px;
+       margin: 0 2px 0 0;
+       padding: 0;
+}
+
+.dj_ie6 .claro .dijitCheckBox,
+.dj_ie6 .claro .dijitCheckBoxIcon              /* inside a toggle button */    {
+       background-image: url('images/checkboxAndRadioButtons_IE6.png'); /* checkbox sprite image */
+}
+
+.claro .dijitCheckBox,
+.claro .dijitToggleButton .dijitCheckBoxIcon {
+       /* unchecked */
+       background-position: -15px;
+}
+
+.claro .dijitCheckBoxChecked,
+.claro .dijitToggleButtonChecked .dijitCheckBoxIcon {
+       /* checked */
+       background-position: -0;
+}
+
+.claro .dijitCheckBoxDisabled {
+       /* disabled */
+       background-position: -75px;
+}
+
+.claro .dijitCheckBoxCheckedDisabled {
+       /* disabled but checked */
+       background-position: -60px;
+}
+
+.claro .dijitCheckBoxHover {
+       /* hovering over an unchecked enabled checkbox */
+       background-position: -45px;
+}
+
+.claro .dijitCheckBoxCheckedHover {
+       /* hovering over an checked enabled checkbox */
+       background-position: -30px;
+}
+
+
index b04061b65fde6cd73aefcc44e9cc76889c66ea4c..ab8bb5c3b3099167f40eccd7c999f2532f5da889 100644 (file)
-
+/* claro/form/Common.css */
+/*========================= common css =========================*/
+/* 'dijitTextBox' refers to 'dijit(TextBox|DateTextBox|CurrencyTextBox|...)' */
 .claro .dijitTextBoxError .dijitValidationContainer {
-       background-color: #d46363;
-       background-image: url('images/error.png');
-       background-position: top center;
-       border: solid #d46464 0px;
-       border-left-width: 1px;
-       width: 9px;
+  background-color: #d46464;
+  background-image: url('images/error.png');
+  background-position: top center;
+  border: solid #d46464 0;
+  border-left-width: 1px;
+  width: 9px;
 }
 .claro .dijitTextBoxError .dijitValidationIcon {
-       width: 0px;
-       background-color: transparent !important; 
+  width: 0;
+  background-color: transparent !important;
+  /* so the INPUT doesn't obscure the border in rtl+a11y */
+
+}
+/* Padding for the input area of TextBox based widgets, and corresponding padding for the
+ * down arrow button and the placeholder.   placeholder is explicitly listed  because
+ * dijitPlaceHolder is absolutely positioned, so padding set on dijitInputField
+ * won't affect it
+ */
+.claro .dijitTextArea, .claro .dijitInputField .dijitPlaceHolder {
+  padding: 2px;
 }
-.claro .dijitTextBox .dijitInputContainer,
-.claro .dijitTextArea,
-.claro .dijitInputField .dijitPlaceHolder {
-       padding: 2px;
+.claro .dijitTextBox .dijitInputField {
+  padding: 1px 2px;
+}
+.dj_gecko .claro .dijitTextBox .dijitInputInner, .dj_webkit .claro .dijitTextBox .dijitInputInner {
+  padding: 1px;
 }
-.claro .dijitTextBox,
-.claro .dijitTextBox .dijitButtonNode {
-       
-       border-color: #b5bcc7;
-       -webkit-transition-property:background-color, border;
-       -webkit-transition-duration:.35s;
+.claro .dijitTextBox, .claro .dijitTextBox .dijitButtonNode {
+  /* color for (outer) border on *TextBox widgets, and border between input and buttons on ComboBox and Spinner */
+
+  border-color: #b5bcc7;
+  -webkit-transition-property: background-color, border;
+  -moz-transition-property: background-color, border;
+  transition-property: background-color, border;
+  -webkit-transition-duration: 0.35s;
+  -moz-transition-duration: 0.35s;
+  transition-duration: 0.35s;
 }
 .claro .dijitTextBox {
-       background-color: #f7fcff;
+  background-color: #ffffff;
 }
-.claro .dijitTextBoxHover,
-.claro .dijitTextBoxHover .dijitButtonNode {
-       border-color: #769dc0;
-       -webkit-transition-duration:.25s;
+/* hover */
+.claro .dijitTextBoxHover, .claro .dijitTextBoxHover .dijitButtonNode {
+  border-color: #769dc0;
+  -webkit-transition-duration: 0.25s;
+  -moz-transition-duration: 0.25s;
+  transition-duration: 0.25s;
 }
 .claro .dijitTextBoxHover {
-       background-color: #e9f4fe;
-       background-image: url('images/textBox_back.png');
-       background-repeat: repeat-x;
+  background-color: #e9f4fe;
+  background-image: url('images/textBox_back.png');
+  background-repeat: repeat-x;
 }
-.claro .dijitTextBoxError,
-.claro .dijitTextBoxError .dijitButtonNode {
-       border-color: #d46464;
+/* error state */
+.claro .dijitTextBoxError, .claro .dijitTextBoxError .dijitButtonNode {
+  border-color: #d46464;
 }
-.claro .dijitTextBoxError,
-.claro .dijitTextBoxError .dijitInputContainer {
-       background-color: #fdf7f7;
+.claro .dijitTextBoxError, .claro .dijitTextBoxError .dijitInputContainer {
+  background-color: #ffffff;
 }
-.claro .dijitTextBoxFocused,
-.claro .dijitTextBoxFocused .dijitButtonNode {
-       border-color:#769dc0;
-       -webkit-transition-duration:.1s;
+/* focused state */
+.claro .dijitTextBoxFocused, .claro .dijitTextBoxFocused .dijitButtonNode {
+  border-color: #769dc0;
+  -webkit-transition-duration: 0.1s;
+  -moz-transition-duration: 0.1s;
+  transition-duration: 0.1s;
 }
 .claro .dijitTextBoxFocused {
-       background-color: #fff;
-       background-image: url('images/textBox_back.png');
-       background-repeat: repeat-x;
+  background-color: #ffffff;
+  background-image: url('images/textBox_back.png');
+  background-repeat: repeat-x;
 }
 .claro .dijitTextBoxFocused .dijitInputContainer {
-       background: #fff;
+  background: #ffffff;
 }
-.claro .dijitTextBoxErrorFocused,
-.claro .dijitTextBoxErrorFocused .dijitButtonNode {
-       border-color: #ce4f4f;
+.claro .dijitTextBoxErrorFocused, .claro .dijitTextBoxErrorFocused .dijitButtonNode {
+  border-color: #ce4f4f;
 }
-.claro .dijitTextBoxDisabled,
-.claro .dijitTextBoxDisabled .dijitButtonNode {
-       border-color: #d3d3d3;
+/* disabled state */
+.claro .dijitTextBoxDisabled, .claro .dijitTextBoxDisabled .dijitButtonNode {
+  border-color: #d3d3d3;
 }
-.claro .dijitTextBoxDisabled {
-       background-color: #efefef;
-       background-image: none;
-       color: #818181;
+.claro .dijitTextBoxDisabled, .claro .dijitTextBoxDisabled .dijitInputContainer {
+  background-color: #efefef;
+  background-image: none;
+  color: #818181;
 }
+/*========================= for special widgets =========================*/
+/* Input boxes with an arrow (for a drop down) */
 .claro .dijitComboBox .dijitArrowButtonInner {
-       background-image: url("images/commonFormArrows.png");
-       background-position:-35px 53%;
-       background-repeat: no-repeat;
-       margin: 0px;
-       width:16px;
-       height:100%;
-       border: 1px solid #fff;
+  background-image: url("images/commonFormArrows.png");
+  background-position: -35px 53%;
+  background-repeat: no-repeat;
+  margin: 0;
+  width: 16px;
+  border: 1px solid #ffffff;
 }
-.claro .dijitTextBox .dijitInputField {
-       padding-top: 1px; 
-       padding-bottom: 1px;
+.claro .dijitToolbar .dijitComboBox .dijitArrowButtonInner {
+  border: none;
 }
-.claro .dijitTextBox .dijitInputInner {
-       
-       padding: 1px 2px 1px 0; 
+.claro .dijitToolbar .dijitComboBox .dijitArrowButtonInner {
+  border: none;
 }
-.claro .dijitTextBox .dijitValidationContainer {
-       padding: 0 0 2px 0; 
+/* Add 1px vertical padding to the <input> where user types and the validation icon,
+   to match the 1px border on arrow button */
+.claro .dijitTextBox .dijitInputInner, .claro .dijitTextBox .dijitValidationContainer {
+  padding: 1px 0;
 }
 .claro .dijitComboBox .dijitButtonNode {
-       background-color: #ebeef4;
-       background-image: url("images/formHighlight.png");
-       background-repeat:repeat-x;
-}
-.claro .dijitComboBoxHover .dijitButtonNode {
-       background-color:#abd6ff;
-}
-.claro .dijitComboBoxHover .dijitArrowButtonInner {
-       background-position:-70px 53%;
-}
-.claro .dijitComboBoxFocused .dijitButtonNode {
-       background-color:#7dbefa;
-       background-position:0px -177px;
-       padding: 1px;
-}      
-.claro .dijitComboBoxFocused .dijitArrowButtonInner {
-       background-position:-70px 53%;
-       border: 0px none;
-}
+  background-color: #efefef;
+  background-image: url("images/formHighlight.png");
+  background-repeat: repeat-x;
+}
+/* Arrow "hover" effect:
+ * The arrow button should change color whenever the mouse is in a position such that clicking it
+ * will toggle the drop down.   That's either (1) anywhere over the ComboBox or (2) over the arrow
+ * button, depending on the openOnClick setting for the widget.
+ */
+.claro .dijitComboBoxOpenOnClickHover .dijitButtonNode, .claro .dijitComboBox .dijitDownArrowButtonHover {
+  background-color: #abd6ff;
+}
+.claro .dijitComboBoxOpenOnClickHover .dijitArrowButtonInner, .claro .dijitComboBox .dijitDownArrowButtonHover .dijitArrowButtonInner {
+  background-position: -70px 53%;
+}
+/* Arrow Button change when drop down is open */
+.claro .dijitComboBox .dijitHasDropDownOpen {
+  background-color: #7dbefa;
+  background-position: 0 -177px;
+  padding: 1px;
+}
+.claro .dijitComboBox .dijitHasDropDownOpen .dijitArrowButtonInner {
+  background-position: -70px 53%;
+  border: 0 none;
+}
+/* disabled state */
 .claro div.dijitComboBoxDisabled .dijitArrowButtonInner {
-       
-       background-position:0px 50%;
-       background-color:#f1f1f1;
+  /* specific selector set to override background-position setting from Button.js
+        * (.claro .dijitComboBoxDisabled .dijitArrowButtonInner) */
+
+  background-position: 0 50%;
+  background-color: #efefef;
 }
+/*========================= hacks for browsers =========================*/
+/* it seems the input[type="hidden"] has a height (16px) too... this may cause the widget's height calculate error */
 .dj_ff3 .claro .dijitInputField input[type="hidden"] {
-       display: none;
-       height: 0;
-       width: 0;
+  display: none;
+  height: 0;
+  width: 0;
 }
-.dj_ie6 .claro .dijitTextBox,
-.dj_ie6 .claro .dijitComboBox .dijitButtonNode {
-       background-image: none;
+/* ie6 doesn't support transparent background img */
+.dj_ie6 .claro .dijitTextBox, .dj_ie6 .claro .dijitComboBox .dijitButtonNode {
+  background-image: none;
 }
-.dj_quirks .claro .dijitComboBox .dijitArrowButtonInner {
-       border: 0px;
+.dj_borderbox .claro .dijitComboBox .dijitHasDropDownOpen .dijitArrowButtonInner {
+  width: 18px;
 }
-.dj_quirks .claro .dijitComboBox .dijitArrowButtonContainer {
-       padding: 1px;
+.dj_borderbox .claro .dijitComboBoxFocused .dijitHasDropDownOpen .dijitArrowButtonInner {
+  width: 16px;
 }
diff --git a/lib/dijit/themes/claro/form/Common.less b/lib/dijit/themes/claro/form/Common.less
new file mode 100644 (file)
index 0000000..729867a
--- /dev/null
@@ -0,0 +1,194 @@
+/* claro/form/Common.css */
+
+/*========================= common css =========================*/
+
+@import "../variables";
+
+/* 'dijitTextBox' refers to 'dijit(TextBox|DateTextBox|CurrencyTextBox|...)' */
+
+.claro .dijitTextBoxError .dijitValidationContainer {
+       background-color: @erroricon-background-color;
+       background-image: url('images/error.png');
+       background-position: top center;
+       border: solid @erroricon-background-color 0;
+       border-left-width: 1px;
+       width: 9px;
+}
+.claro .dijitTextBoxError .dijitValidationIcon {
+       width: 0;
+       background-color: transparent !important; /* so the INPUT doesn't obscure the border in rtl+a11y */
+}
+
+/* Padding for the input area of TextBox based widgets, and corresponding padding for the
+ * down arrow button and the placeholder.   placeholder is explicitly listed  because
+ * dijitPlaceHolder is absolutely positioned, so padding set on dijitInputField
+ * won't affect it
+ */
+.claro .dijitTextArea,
+.claro .dijitInputField .dijitPlaceHolder {
+       padding: @textbox-padding;
+}
+.claro .dijitTextBox .dijitInputField {
+       // Subtract 1px from top/bottom because we add 1px to other nodes, see rules below.
+       // Although we are theoretically only adding 1px to top/bottom browsers seem to pad inputs by 1px on left/right,
+       // although that varies by so compensate for that too.
+       padding: @textbox-padding - 1px  @textbox-padding;
+}
+.dj_gecko .claro .dijitTextBox .dijitInputInner,
+.dj_webkit .claro .dijitTextBox .dijitInputInner {
+       // Although we are theoretically only adding 1px to top/bottom, some browsers seem to pad inputs by 1px on left/right,
+       // so compensate for that too.
+       padding: @textbox-padding - 1px;
+}
+
+.claro .dijitTextBox,
+.claro .dijitTextBox .dijitButtonNode {
+       /* color for (outer) border on *TextBox widgets, and border between input and buttons on ComboBox and Spinner */
+       border-color: @border-color;
+       .transition-property(background-color, border);
+       .transition-duration(.35s);
+}
+.claro .dijitTextBox {
+       background-color: @textbox-background-color;
+}
+
+/* hover */
+.claro .dijitTextBoxHover,
+.claro .dijitTextBoxHover .dijitButtonNode {
+       border-color: @hovered-border-color;
+       .transition-duration(.25s);
+}
+.claro .dijitTextBoxHover {
+       background-color: @textbox-hovered-background-color;
+       background-image: url('images/textBox_back.png');
+       background-repeat: repeat-x;
+}
+
+/* error state */
+.claro .dijitTextBoxError,
+.claro .dijitTextBoxError .dijitButtonNode {
+       border-color: @error-border-color;
+}
+.claro .dijitTextBoxError,
+.claro .dijitTextBoxError .dijitInputContainer {
+       background-color: @textbox-error-background-color;
+}
+
+/* focused state */
+.claro .dijitTextBoxFocused,
+.claro .dijitTextBoxFocused .dijitButtonNode {
+       border-color:@focused-border-color;
+       .transition-duration(.1s);
+}
+.claro .dijitTextBoxFocused {
+       background-color: @textbox-focused-background-color;
+       background-image: url('images/textBox_back.png');
+       background-repeat: repeat-x;
+}
+.claro .dijitTextBoxFocused .dijitInputContainer {
+       background: @textbox-focused-background-color;
+}
+
+.claro .dijitTextBoxErrorFocused,
+.claro .dijitTextBoxErrorFocused .dijitButtonNode {
+       border-color: @error-focused-border-color;
+}
+
+/* disabled state */
+.claro .dijitTextBoxDisabled,
+.claro .dijitTextBoxDisabled .dijitButtonNode {
+       border-color: @disabled-border-color;
+}
+.claro .dijitTextBoxDisabled,
+.claro .dijitTextBoxDisabled .dijitInputContainer {
+       background-color: @textbox-disabled-background-color;
+       background-image: none;
+       color: @disabled-text-color;
+}
+
+/*========================= for special widgets =========================*/
+
+/* Input boxes with an arrow (for a drop down) */
+
+.claro .dijitComboBox .dijitArrowButtonInner {
+       background-image: url("images/commonFormArrows.png");
+       background-position:-35px 53%;
+       background-repeat: no-repeat;
+       margin: 0;
+       width:16px;
+       border: 1px solid @arrowbutton-inner-border-color;      // white gutter around the arrow button
+}
+
+.claro .dijitToolbar .dijitComboBox .dijitArrowButtonInner {
+       border: none;
+}
+
+.claro .dijitToolbar .dijitComboBox .dijitArrowButtonInner {
+       border: none;
+}
+
+/* Add 1px vertical padding to the <input> where user types and the validation icon,
+   to match the 1px border on arrow button */
+.claro .dijitTextBox .dijitInputInner,
+.claro .dijitTextBox .dijitValidationContainer {
+       padding: 1px 0;
+}
+
+.claro .dijitComboBox .dijitButtonNode {
+       background-color: @arrowbutton-background-color;
+       background-image: url("images/formHighlight.png");
+       background-repeat:repeat-x;
+}
+
+/* Arrow "hover" effect:
+ * The arrow button should change color whenever the mouse is in a position such that clicking it
+ * will toggle the drop down.   That's either (1) anywhere over the ComboBox or (2) over the arrow
+ * button, depending on the openOnClick setting for the widget.
+ */
+.claro .dijitComboBoxOpenOnClickHover .dijitButtonNode,
+.claro .dijitComboBox .dijitDownArrowButtonHover {
+       background-color:@arrowbutton-hovered-background-color;
+}
+.claro .dijitComboBoxOpenOnClickHover .dijitArrowButtonInner,
+.claro .dijitComboBox .dijitDownArrowButtonHover .dijitArrowButtonInner {
+       background-position:-70px 53%;
+}
+
+/* Arrow Button change when drop down is open */
+.claro .dijitComboBox .dijitHasDropDownOpen {  // .dijitHasDropDown is on dijitArrowButton node
+       background-color: @pressed-background-color;
+       background-position:0 -177px;
+       padding: 1px;           // Since no border on arrow button (see rule below)
+}      
+.claro .dijitComboBox .dijitHasDropDownOpen .dijitArrowButtonInner {
+       background-position:-70px 53%;
+       border: 0 none;
+}
+
+/* disabled state */
+.claro div.dijitComboBoxDisabled .dijitArrowButtonInner {
+       /* specific selector set to override background-position setting from Button.js
+        * (.claro .dijitComboBoxDisabled .dijitArrowButtonInner) */
+       background-position:0 50%;
+       background-color:@disabled-background-color;
+}
+
+/*========================= hacks for browsers =========================*/
+/* it seems the input[type="hidden"] has a height (16px) too... this may cause the widget's height calculate error */
+.dj_ff3 .claro .dijitInputField input[type="hidden"] {
+       display: none;
+       height: 0;
+       width: 0;
+}
+
+/* ie6 doesn't support transparent background img */
+.dj_ie6 .claro .dijitTextBox,
+.dj_ie6 .claro .dijitComboBox .dijitButtonNode {
+       background-image: none;
+}
+.dj_borderbox .claro .dijitComboBox .dijitHasDropDownOpen .dijitArrowButtonInner {
+       width:18px;                             // quirks mode means border-box sizing, so 18px with the border (same as 16px without border)
+}
+.dj_borderbox .claro .dijitComboBoxFocused .dijitHasDropDownOpen .dijitArrowButtonInner {
+       width:16px;                             // when no border, then back to 16px just like content-box sizing
+}
\ No newline at end of file
index 065f0c70d70e3c66a20c3abfb8337c80ce43c2cd..74827c16f2e6b86860cf917c5d57e372bd37c4b6 100644 (file)
@@ -1,5 +1,10 @@
-
-.claro .dijitTextBoxRtlError .dijitValidationContainer {
-       border-left-width: 0px;
+/* claro/form/Common_rtl.css */
+/*claro should not have the icon on the container
+.claro .dijitTextBoxRtlError .dijitValidationIcon {
+       border-left-width: 0;
        border-right-width: 1px;
+}*/
+.claro .dijitTextBoxRtlError .dijitValidationContainer {
+  border-left-width: 0;
+  border-right-width: 1px;
 }
diff --git a/lib/dijit/themes/claro/form/Common_rtl.less b/lib/dijit/themes/claro/form/Common_rtl.less
new file mode 100644 (file)
index 0000000..fd4975a
--- /dev/null
@@ -0,0 +1,13 @@
+/* claro/form/Common_rtl.css */
+
+@import "../variables";
+
+/*claro should not have the icon on the container
+.claro .dijitTextBoxRtlError .dijitValidationIcon {
+       border-left-width: 0;
+       border-right-width: 1px;
+}*/
+.claro .dijitTextBoxRtlError .dijitValidationContainer {
+       border-left-width: 0;
+       border-right-width: 1px;
+}
index 66b97da62c33b748988d983bb52e55a8c45c11fd..bc6e1aeb68ead97475cf701d1f91220e9c23c614 100644 (file)
-
+/* NumberSpinner - namespace "dijitSpinner"
+ * 
+ * Styling NumberSpinner mainly includes:
+ * 
+ * 1. Arrows
+ *             Outer containers: .dijitSpinnerButtonContainer|.dijitSpinnerButtonInner  - for border, padding and position
+ *             Arrows: .dijitArrowButton|.dijitUpArrowButton.|dijitDownArrowButton
+ *             Inner container: .dijitArrowButtonInner - for border, padding, width|height and background image
+ * 
+ * 2. Hover state
+ *             .dijitUpArrowButtonHover|.dijitDownArrowButtonHover .*  - for background color|image
+ * 
+ * 3. Active state
+ *             .dijitUpArrowButtonActive|.dijitDownArrowButtonActive .*  - for border, padding, margin and background color|image
+ * 
+ * 4. Focused state
+ *             .dijitSpinnerFocused .* - for background color|image
+ * 
+ * 5. Disabled state
+ *             .dijitSpinnerDisabled .* - for background color|image
+ */
 .claro .dijitSpinnerButtonContainer {
-       overflow: hidden;
-       position: relative;
-       width: auto;
-       padding: 0 2px;
+  overflow: hidden;
+  position: relative;
+  width: auto;
+  padding: 0 2px;
 }
 .claro .dijitSpinnerButtonContainer .dijitSpinnerButtonInner {
-       border-width: 1px 0; 
-       border-style: solid none;
+  border-width: 1px 0;
+  /* reserve space to match the claro combobox button border with border and not padding to make IE happier */
+
+  border-style: solid none;
 }
+/* button */
 .claro .dijitSpinner .dijitArrowButton {
-       width:auto;
-       background-color: #ebeef4;
-       background-image: url("images/formHighlight.png");
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       overflow: hidden;
+  width: auto;
+  background-color: #efefef;
+  background-image: url("images/formHighlight.png");
+  background-position: 0 0;
+  background-repeat: repeat-x;
+  overflow: hidden;
 }
 .dj_iequirks .claro .dijitSpinner .dijitArrowButton {
-       overflow: visible; 
+  overflow: visible;
+  /* 0 height w/o this */
+
 }
 .claro .dijitSpinner .dijitSpinnerButtonInner {
-       width: 15px;
+  width: 15px;
 }
+/* up & down button icons */
 .claro .dijitSpinner .dijitArrowButtonInner {
-       border:solid 1px #fff;
-       border-bottom-width: 0; 
-       background-image: url("images/commonFormArrows.png");
-       background-repeat: no-repeat;
-       height: 100%;
-       width:15px;
-       padding-left: 1px;
-       padding-right: 1px;
-       
-       background-position:-139px center;
-       
-       display: block;
-       margin: -1px 0px -1px 0px;      
-       #margin-top: 0; 
+  border: solid 1px #ffffff;
+  border-bottom-width: 0;
+  /* 2 top borders = 1 top+bottom border in ComboBox */
+
+  background-image: url("images/commonFormArrows.png");
+  background-repeat: no-repeat;
+  height: 100%;
+  width: 15px;
+  padding-left: 1px;
+  padding-right: 1px;
+  /* for up arrow */
+
+  background-position: -139px center;
+  /* override button.css (TODO: move to Common.css since ComboBox needs this too) */
+
+  display: block;
+  margin: -1px 0 -1px 0;
+  /* compensate for inner border */
+
+}
+.dj_ie6 .claro .dijitSpinner .dijitArrowButtonInner, .dj_ie7 .claro .dijitSpinner .dijitArrowButtonInner {
+  margin-top: 0;
+  /* since its bottom aligned */
+
 }
 .dj_iequirks .claro .dijitSpinner .dijitArrowButtonInner {
-       width: 19px;
+  width: 19px;
 }
 .claro .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
-       background-position:-34px;
+  background-position: -34px;
 }
 .claro .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding: 0;
+  padding: 0;
 }
-.claro .dijitUpArrowButtonActive,
-.claro .dijitDownArrowButtonActive {
-       background-color:#abd6ff;
+/** hover & focused status **/
+.claro .dijitUpArrowButtonActive, .claro .dijitDownArrowButtonActive {
+  background-color: #abd6ff;
 }
-.claro .dijitSpinner .dijitUpArrowButtonHover,
-.claro .dijitSpinner .dijitDownArrowButtonHover,
-.claro .dijitSpinnerFocused .dijitArrowButton {
-       background-color: #a0d1ff;
+.claro .dijitSpinner .dijitUpArrowButtonHover, .claro .dijitSpinner .dijitDownArrowButtonHover, .claro .dijitSpinnerFocused .dijitArrowButton {
+  background-color: #abd6ff;
 }
 .claro .dijitSpinner .dijitUpArrowButtonHover .dijitArrowButtonInner {
-       background-position:-174px;
+  background-position: -174px;
 }
 .claro .dijitSpinner .dijitDownArrowButtonHover .dijitArrowButtonInner {
-       background-position:-69px;
+  background-position: -69px;
 }
 .claro .dijitSpinnerFocused {
-       background-color: #fff;
-       background-image: none;
+  background-color: #ffffff;
+  background-image: none;
 }
-.claro .dijitSpinner .dijitDownArrowButtonActive,
-.claro .dijitSpinner .dijitUpArrowButtonActive {
-       background-color: #3299f9;
-       background-position:0px -177px;
+/* mouse down status */
+.claro .dijitSpinner .dijitDownArrowButtonActive, .claro .dijitSpinner .dijitUpArrowButtonActive {
+  background-color: #7dbefa;
+  background-position: 0 -177px;
 }
-.claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner,
-.claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
-       
-       border: 0px;
-       padding: 1px;
-       margin-right:2px;
-       margin-bottom:1px;
+.claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner, .claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
+  /* hide inner border while button is depressed */
+
+  border: 0;
+  padding: 1px;
+  margin-right: 2px;
+  margin-bottom: 1px;
 }
 .claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner {
-       background-position:-173px;
+  background-position: -173px;
 }
 .claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
-       background-position:-68px;
+  background-position: -68px;
 }
+/* disabled */
 .claro .dijitSpinnerDisabled .dijitArrowButtonInner {
-       background-color: #f1f1f1;
+  background-color: #efefef;
 }
 .claro .dijitSpinnerDisabled .dijitUpArrowButton .dijitArrowButtonInner {
-       background-position:-104px;
+  background-position: -104px;
 }
 .claro .dijitSpinnerDisabled .dijitDownArrowButton .dijitArrowButtonInner {
-       background-position:1px;
+  background-position: 1px;
 }
+/** hacks for browsers **/
+/* for IE 7, when div is enlarged, 
+ * should be no empty space between dijitInputLayoutContainer and dijitSpinner*/
 .dj_ie7 .claro .dijitSpinner {
-       overflow:visible;
-} 
+  overflow: visible;
+}
diff --git a/lib/dijit/themes/claro/form/NumberSpinner.less b/lib/dijit/themes/claro/form/NumberSpinner.less
new file mode 100644 (file)
index 0000000..ca78afb
--- /dev/null
@@ -0,0 +1,150 @@
+/* NumberSpinner - namespace "dijitSpinner"
+ * 
+ * Styling NumberSpinner mainly includes:
+ * 
+ * 1. Arrows
+ *             Outer containers: .dijitSpinnerButtonContainer|.dijitSpinnerButtonInner  - for border, padding and position
+ *             Arrows: .dijitArrowButton|.dijitUpArrowButton.|dijitDownArrowButton
+ *             Inner container: .dijitArrowButtonInner - for border, padding, width|height and background image
+ * 
+ * 2. Hover state
+ *             .dijitUpArrowButtonHover|.dijitDownArrowButtonHover .*  - for background color|image
+ * 
+ * 3. Active state
+ *             .dijitUpArrowButtonActive|.dijitDownArrowButtonActive .*  - for border, padding, margin and background color|image
+ * 
+ * 4. Focused state
+ *             .dijitSpinnerFocused .* - for background color|image
+ * 
+ * 5. Disabled state
+ *             .dijitSpinnerDisabled .* - for background color|image
+ */
+
+@import "../variables";
+
+.claro .dijitSpinnerButtonContainer {
+       overflow: hidden;
+       position: relative;
+       width: auto;
+       padding: 0 2px;
+}
+.claro .dijitSpinnerButtonContainer .dijitSpinnerButtonInner {
+       border-width: 1px 0; /* reserve space to match the claro combobox button border with border and not padding to make IE happier */
+       border-style: solid none;
+}
+
+/* button */
+.claro .dijitSpinner .dijitArrowButton {
+       width:auto;
+       background-color: @arrowbutton-background-color;
+       background-image: url("images/formHighlight.png");
+       background-position:0 0;
+       background-repeat:repeat-x;
+       overflow: hidden;
+}
+.dj_iequirks .claro .dijitSpinner .dijitArrowButton {
+       overflow: visible; /* 0 height w/o this */
+}
+
+.claro .dijitSpinner .dijitSpinnerButtonInner {
+       width: 15px;
+}
+/* up & down button icons */
+.claro .dijitSpinner .dijitArrowButtonInner {
+       border:solid 1px @arrowbutton-inner-border-color;
+       border-bottom-width: 0; /* 2 top borders = 1 top+bottom border in ComboBox */
+       background-image: url("images/commonFormArrows.png");
+       background-repeat: no-repeat;
+       height: 100%;
+       width:15px;
+       padding-left: 1px;
+       padding-right: 1px;
+
+       /* for up arrow */
+       background-position:-139px center;
+
+       /* override button.css (TODO: move to Common.css since ComboBox needs this too) */
+       display: block;
+       margin: -1px 0 -1px 0;  /* compensate for inner border */
+}
+
+.dj_ie6 .claro .dijitSpinner .dijitArrowButtonInner,
+.dj_ie7 .claro .dijitSpinner .dijitArrowButtonInner {
+       margin-top: 0; /* since its bottom aligned */
+}
+
+.dj_iequirks .claro .dijitSpinner .dijitArrowButtonInner {
+       width: 19px;
+}
+.claro .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
+       background-position:-34px;
+}
+.claro .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+       padding: 0;
+}
+
+/** hover & focused status **/
+
+.claro .dijitUpArrowButtonActive,
+.claro .dijitDownArrowButtonActive {
+       background-color:@arrowbutton-pressed-background-color;
+}
+
+.claro .dijitSpinner .dijitUpArrowButtonHover,
+.claro .dijitSpinner .dijitDownArrowButtonHover,
+.claro .dijitSpinnerFocused .dijitArrowButton {
+       background-color: @arrowbutton-hovered-background-color;
+}
+
+.claro .dijitSpinner .dijitUpArrowButtonHover .dijitArrowButtonInner {
+       background-position:-174px;
+}
+.claro .dijitSpinner .dijitDownArrowButtonHover .dijitArrowButtonInner {
+       background-position:-69px;
+}
+
+.claro .dijitSpinnerFocused {
+       background-color: @textbox-focused-background-color;
+       background-image: none;
+}
+
+/* mouse down status */
+.claro .dijitSpinner .dijitDownArrowButtonActive,
+.claro .dijitSpinner .dijitUpArrowButtonActive {
+       background-color: #7dbefa;              // TODO.  Mailed Jason about inconsistent ComboBox/Spinner behavior.
+       background-position:0 -177px;
+}
+.claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner,
+.claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
+       /* hide inner border while button is depressed */
+       border: 0;
+       padding: 1px;
+       margin-right:2px;
+       margin-bottom:1px;
+}
+.claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner {
+       background-position:-173px;
+}
+.claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
+       background-position:-68px;
+}
+
+/* disabled */
+
+.claro .dijitSpinnerDisabled .dijitArrowButtonInner {
+       background-color: @disabled-background-color;
+}
+.claro .dijitSpinnerDisabled .dijitUpArrowButton .dijitArrowButtonInner {
+       background-position:-104px;
+}
+.claro .dijitSpinnerDisabled .dijitDownArrowButton .dijitArrowButtonInner {
+       background-position:1px;
+}
+
+/** hacks for browsers **/
+
+/* for IE 7, when div is enlarged, 
+ * should be no empty space between dijitInputLayoutContainer and dijitSpinner*/
+.dj_ie7 .claro .dijitSpinner {
+       overflow:visible;
+} 
\ No newline at end of file
index b9058d1b99de3057846d976a9170edda66379372..4dc3ad47deb9a5fa9485e0a2ff3d7278ee1beb79 100644 (file)
@@ -1,51 +1,79 @@
-
-.claro .dijitToggleButton .dijitRadio,
-.claro .dijitToggleButton .dijitRadioIcon {
-       background-image: url('images/checkboxRadioButtonStates.png');
+/* RadioButton
+ * 
+ * Styling RadioButton mainly includes:
+ * 
+ * 1. Containers
+ *             .dijitRadio|.dijitRadioIcon - for border, padding, width|height and background image
+ * 
+ * 2. RadioButton within ToggleButton
+ *             .dijitToggleButton|.dijitToggleButtonChecked .* - for background image
+ * 
+ * 3. Checked state
+ *             .dijitRadioChecked - for checked background-color|image
+ *             .dijitToggleButtonChecked - for border, background-color|image, display and width|height
+ * 
+ * 4. Hover state
+ *             .dijitRadioHover|.dijitRadioCheckedHover - for background image
+ * 
+ * 5. Disabled state
+ *             .dijitRadioDisabled|.dijitRadioCheckedDisabled - for background image
+ */
+.claro .dijitToggleButton .dijitRadio, .claro .dijitToggleButton .dijitRadioIcon {
+  background-image: url('images/checkboxRadioButtonStates.png');
 }
-.dj_ie6 .claro .dijitToggleButton .dijitRadio,
-.dj_ie6 .claro .dijitToggleButton .dijitRadioIcon {
-       background-image: url('images/checkboxAndRadioButtons_IE6.png');
+.dj_ie6 .claro .dijitToggleButton .dijitRadio, .dj_ie6 .claro .dijitToggleButton .dijitRadioIcon {
+  background-image: url('images/checkboxAndRadioButtons_IE6.png');
 }
-.claro .dijitRadio,
-.claro .dijitRadioIcon {               
-       background-image: url('images/checkboxRadioButtonStates.png'); 
-       background-repeat: no-repeat;
-       width: 15px;
-       height: 15px;
-       margin: 0px 2px 0px 0px;
-       padding: 0px;
+.claro .dijitRadio, .claro .dijitRadioIcon {
+  /* inside a toggle button */
+
+  background-image: url('images/checkboxRadioButtonStates.png');
+  /* checkbox sprite image */
+
+  background-repeat: no-repeat;
+  width: 15px;
+  height: 15px;
+  margin: 0 2px 0 0;
+  padding: 0;
 }
-.dj_ie6 .claro .dijitRadio,
-.dj_ie6 .claro .dijitRadioIcon {               
-       background-image: url('images/checkboxAndRadioButtons_IE6.png'); 
+.dj_ie6 .claro .dijitRadio, .dj_ie6 .claro .dijitRadioIcon {
+  /* inside a toggle button */
+
+  background-image: url('images/checkboxAndRadioButtons_IE6.png');
+  /* checkbox sprite image */
+
 }
-.claro .dijitRadio{
-       
-       background-position: -105px;
+.claro .dijitRadio {
+  /* unselected */
+
+  background-position: -105px;
 }
 .claro .dijitToggleButton .dijitRadioIcon {
-       
-       background-position: -107px;
+  /* unselected */
+
+  background-position: -107px;
 }
 .claro .dijitRadioDisabled {
-       
-       background-position: -165px;
+  /* unselected and disabled */
+
+  background-position: -165px;
 }
 .claro .dijitRadioHover {
-       
-       background-position: -135px;
+  /* hovering over an unselected enabled radio button */
+
+  background-position: -135px;
 }
-.claro .dijitRadioChecked{
-       background-position: -90px;
+.claro .dijitRadioChecked {
+  background-position: -90px;
 }
 .claro .dijitToggleButtonChecked .dijitRadioIcon {
-       background-position: -92px;
+  background-position: -92px;
 }
-.claro .dijitRadioCheckedHover{
-       background-position: -120px;
+.claro .dijitRadioCheckedHover {
+  background-position: -120px;
 }
 .claro .dijitRadioCheckedDisabled {
-       
-       background-position: -150px;
+  /* selected but disabled */
+
+  background-position: -150px;
 }
diff --git a/lib/dijit/themes/claro/form/RadioButton.less b/lib/dijit/themes/claro/form/RadioButton.less
new file mode 100644 (file)
index 0000000..18f1cc1
--- /dev/null
@@ -0,0 +1,84 @@
+/* RadioButton
+ * 
+ * Styling RadioButton mainly includes:
+ * 
+ * 1. Containers
+ *             .dijitRadio|.dijitRadioIcon - for border, padding, width|height and background image
+ * 
+ * 2. RadioButton within ToggleButton
+ *             .dijitToggleButton|.dijitToggleButtonChecked .* - for background image
+ * 
+ * 3. Checked state
+ *             .dijitRadioChecked - for checked background-color|image
+ *             .dijitToggleButtonChecked - for border, background-color|image, display and width|height
+ * 
+ * 4. Hover state
+ *             .dijitRadioHover|.dijitRadioCheckedHover - for background image
+ * 
+ * 5. Disabled state
+ *             .dijitRadioDisabled|.dijitRadioCheckedDisabled - for background image
+ */
+
+@import "../variables";
+
+.claro .dijitToggleButton .dijitRadio,
+.claro .dijitToggleButton .dijitRadioIcon {
+       background-image: url('images/checkboxRadioButtonStates.png');
+}
+
+.dj_ie6 .claro .dijitToggleButton .dijitRadio,
+.dj_ie6 .claro .dijitToggleButton .dijitRadioIcon {
+       background-image: url('images/checkboxAndRadioButtons_IE6.png');
+}
+
+.claro .dijitRadio,
+.claro .dijitRadioIcon {               /* inside a toggle button */
+       background-image: url('images/checkboxRadioButtonStates.png'); /* checkbox sprite image */
+       background-repeat: no-repeat;
+       width: 15px;
+       height: 15px;
+       margin: 0 2px 0 0;
+       padding: 0;
+}
+
+.dj_ie6 .claro .dijitRadio,
+.dj_ie6 .claro .dijitRadioIcon {               /* inside a toggle button */
+       background-image: url('images/checkboxAndRadioButtons_IE6.png'); /* checkbox sprite image */
+}
+
+.claro .dijitRadio{
+       /* unselected */
+       background-position: -105px;
+}
+
+.claro .dijitToggleButton .dijitRadioIcon {
+       /* unselected */
+       background-position: -107px;
+}
+
+.claro .dijitRadioDisabled {
+       /* unselected and disabled */
+       background-position: -165px;
+}
+
+.claro .dijitRadioHover {
+       /* hovering over an unselected enabled radio button */
+       background-position: -135px;
+}
+
+.claro .dijitRadioChecked{
+       background-position: -90px;
+}
+
+.claro .dijitToggleButtonChecked .dijitRadioIcon {
+       background-position: -92px;
+}
+
+.claro .dijitRadioCheckedHover{
+       background-position: -120px;
+}
+
+.claro .dijitRadioCheckedDisabled {
+       /* selected but disabled */
+       background-position: -150px;
+}
index c8f1d43fa1fa3c7b3c51b7b0c0a5636831f4fdbb..a30ede6406e391f9538db07a6da35793d8e0df03 100644 (file)
-
+/* Select
+ * 
+ * Styling Select mainly includes:
+ * 
+ * 1. Containers
+ *             .dijitSelect - for border, background-color
+ *             .dijitButtonContents - for border
+ *
+ * 2. Arrow
+ *             .dijitArrowButton - for border, padding and background-color|image
+ *             .dijitArrowButtonInner - for border, background-color|image, display and width|height
+ * 
+ * 3. Menu
+ *             .dijitSelectMenu .* - for border, padding
+ * 
+ * 4. Various states
+ *             .dijitSelectHover|.dijitSelectFocused|.dijitSelectDisabled .* - for border, padding and background-color|image 
+ */
 .claro .dijitSelect .dijitButtonText {
-       padding: 0px 5px 2px 5px;
+  padding: 2px;
 }
+/* normal status */
 .claro .dijitSelect {
-       border: 1px solid #b5bcc7;
-       background-color: #f7fcff;
-       border-collapse: separate;
+  border: 1px solid #b5bcc7;
+  background-color: #ffffff;
+  border-collapse: separate;
 }
-.dj_ie6 .claro .dijitSelect,
-.dj_ie6 .claro .dijitSelect .dijitButtonNode {
-       background-image:none;
+.dj_ie6 .claro .dijitSelect, .dj_ie6 .claro .dijitSelect .dijitButtonNode {
+  background-image: none;
 }
 .claro .dijitSelect .dijitButtonContents {
-       border: 0px solid #b5bcc7;
-       border-right-width: 1px;
+  border: 0 solid #b5bcc7;
+  border-right-width: 1px;
 }
 .claro .dijitSelect .dijitArrowButton {
-       padding: 0;
-       border: 1px solid #fff; 
-       border-top:none;
-       background-color:#ebeef4;
-       background-image: url("images/formHighlight.png");
-       background-repeat:repeat-x;
+  padding: 0;
+  border: 1px solid #ffffff;
+  border-top: none;
+  background-color: #efefef;
+  background-image: url("images/formHighlight.png");
+  background-repeat: repeat-x;
 }
 .claro .dijitSelect .dijitArrowButton .dijitArrowButtonInner {
-       background-image: url("images/commonFormArrows.png");
-       background-position:-35px 70%;
-       background-repeat: no-repeat;
-       width:16px;
-       height:16px;
-       display:block;
+  background-image: url("images/commonFormArrows.png");
+  background-position: -35px 70%;
+  background-repeat: no-repeat;
+  width: 16px;
+  height: 16px;
 }
+/* hover status */
 .claro .dijitSelectHover {
-       border: 1px solid #769dc0;
-       background-color: #e9f4fe;
-       background-image: url('images/textBox_back.png');
-       background-repeat: repeat-x;
+  border: 1px solid #769dc0;
+  background-color: #e9f4fe;
+  background-image: url('images/textBox_back.png');
+  background-repeat: repeat-x;
 }
 .claro .dijitSelectHover .dijitButtonContents {
-       border-color:#81a5c6;
+  border-color: #769dc0;
 }
 .claro .dijitSelectHover .dijitArrowButton {
-       background-color:#abd6ff;
+  background-color: #abd6ff;
 }
 .claro .dijitSelectHover .dijitArrowButton .dijitArrowButtonInner {
-       background-position:-70px 70%;
+  background-position: -70px 70%;
 }
+/* focused status */
 .claro .dijitSelectFocused {
-       border: 1px solid #769dc0;
+  border: 1px solid #769dc0;
 }
 .claro .dijitSelectFocused .dijitButtonContents {
-       border-color:#81a5c6;
+  border-color: #769dc0;
 }
 .claro .dijitSelectFocused .dijitArrowButton {
-       background-color:#7dbefa;
-       background-position:0px -177px;
-       border: none;
-       padding: 0px 1px;
+  background-color: #7dbefa;
+  background-position: 0 -177px;
+  border: none;
+  padding: 0 1px;
 }
 .claro .dijitSelectFocused .dijitArrowButton .dijitArrowButtonInner {
-       background-position:-70px 70%;
-       margin-bottom: 1px;
+  background-position: -70px 70%;
+  margin-bottom: 1px;
 }
+/* disable status */
 .claro .dijitSelectDisabled {
-       border: 1px solid #d3d3d3;
-       background-color: #efefef;
-       background-image: none;
-       color: #818181;
+  border: 1px solid #d3d3d3;
+  background-color: #efefef;
+  background-image: none;
+  color: #818181;
 }
-.claro .dijitSelectDisabled .dijitArrowButton { 
-       background-color: #efefef;
+.claro .dijitSelectDisabled .dijitArrowButton {
+  background-color: #efefef;
 }
 .claro .dijitSelectDisabled .dijitArrowButton .dijitArrowButtonInner {
-       background-position:0px 70%
+  background-position: 0 70%;
 }
-.claro .dijitSelectMenu td.dijitMenuItemIconCell,
-.claro .dijitSelectMenu td.dijitMenuArrowCell { 
-       
-       display: none;  
+/* Dropdown menu style for select */
+.claro .dijitSelectMenu td.dijitMenuItemIconCell, .claro .dijitSelectMenu td.dijitMenuArrowCell {
+  /* so that arrow and icon cells from MenuItem are not displayed */
+
+  display: none;
 }
 .claro .dijitSelectMenu td.dijitMenuItemLabel {
-       
-       padding-left: 5px;
-       padding-right: 5px;
+  /* line up menu text with text in select box (in LTR and RTL modes) */
+
+  padding: 2px;
 }
 .claro .dijitSelectMenu .dijitMenuSeparatorTop {
-       border-bottom:1px solid #769dc0;
+  border-bottom: 1px solid #769dc0;
 }
diff --git a/lib/dijit/themes/claro/form/Select.less b/lib/dijit/themes/claro/form/Select.less
new file mode 100644 (file)
index 0000000..c429b2e
--- /dev/null
@@ -0,0 +1,124 @@
+/* Select
+ * 
+ * Styling Select mainly includes:
+ * 
+ * 1. Containers
+ *             .dijitSelect - for border, background-color
+ *             .dijitButtonContents - for border
+ *
+ * 2. Arrow
+ *             .dijitArrowButton - for border, padding and background-color|image
+ *             .dijitArrowButtonInner - for border, background-color|image, display and width|height
+ * 
+ * 3. Menu
+ *             .dijitSelectMenu .* - for border, padding
+ * 
+ * 4. Various states
+ *             .dijitSelectHover|.dijitSelectFocused|.dijitSelectDisabled .* - for border, padding and background-color|image 
+ */
+
+@import "../variables";
+
+.claro .dijitSelect .dijitButtonText {
+       padding: @textbox-padding;
+}
+
+/* normal status */
+.claro .dijitSelect {
+       border: 1px solid @border-color;
+       background-color: @textbox-background-color;
+       border-collapse: separate;
+}
+.dj_ie6 .claro .dijitSelect,
+.dj_ie6 .claro .dijitSelect .dijitButtonNode {
+       background-image:none;
+}
+
+.claro .dijitSelect .dijitButtonContents {
+       border: 0 solid @border-color;
+       border-right-width: 1px;
+}
+
+.claro .dijitSelect .dijitArrowButton {
+       padding: 0;
+       border: 1px solid @arrowbutton-inner-border-color;
+       border-top:none;
+       background-color: @arrowbutton-background-color;
+       background-image: url("images/formHighlight.png");
+       background-repeat:repeat-x;
+}
+
+.claro .dijitSelect .dijitArrowButton .dijitArrowButtonInner {
+       background-image: url("images/commonFormArrows.png");
+       background-position:-35px 70%;
+       background-repeat: no-repeat;
+       width:16px;
+       height:16px;
+}
+
+/* hover status */
+.claro .dijitSelectHover {
+       border: 1px solid @hovered-border-color;
+       background-color: @textbox-hovered-background-color;
+       background-image: url('images/textBox_back.png');
+       background-repeat: repeat-x;
+}
+
+.claro .dijitSelectHover .dijitButtonContents {
+       border-color:@hovered-border-color;
+}
+
+.claro .dijitSelectHover .dijitArrowButton {
+       background-color:@arrowbutton-hovered-background-color;
+}
+.claro .dijitSelectHover .dijitArrowButton .dijitArrowButtonInner {
+       background-position:-70px 70%;
+}
+
+/* focused status */
+.claro .dijitSelectFocused {
+       border: 1px solid @focused-border-color;
+}
+.claro .dijitSelectFocused .dijitButtonContents {
+       border-color:@focused-border-color;
+}
+.claro .dijitSelectFocused .dijitArrowButton {
+       background-color:#7dbefa;               // TODO.  Mailed Jason about inconsistent ComboBox/Spinner behavior.
+       background-position:0 -177px;
+       border: none;
+       padding: 0 1px;
+}
+.claro .dijitSelectFocused .dijitArrowButton .dijitArrowButtonInner {
+       background-position:-70px 70%;
+       margin-bottom: 1px;
+}
+
+/* disable status */
+.claro .dijitSelectDisabled {
+       border: 1px solid @disabled-border-color;
+       background-color: @disabled-background-color;
+       background-image: none;
+       color: @disabled-text-color;
+}
+.claro .dijitSelectDisabled .dijitArrowButton { 
+       background-color: @disabled-background-color;
+}
+.claro .dijitSelectDisabled .dijitArrowButton .dijitArrowButtonInner {
+       background-position:0 70%
+}
+
+/* Dropdown menu style for select */
+
+.claro .dijitSelectMenu td.dijitMenuItemIconCell,
+.claro .dijitSelectMenu td.dijitMenuArrowCell { 
+       /* so that arrow and icon cells from MenuItem are not displayed */
+       display: none;  
+}
+.claro .dijitSelectMenu td.dijitMenuItemLabel {
+       /* line up menu text with text in select box (in LTR and RTL modes) */
+       padding: @textbox-padding;
+}
+
+.claro .dijitSelectMenu .dijitMenuSeparatorTop {
+       border-bottom:1px solid @focused-border-color;
+}
index 43797508f3f4dd5663ae98f1eb08104fecff73aa..a14d4ec42c91ef6e47ec80cddcf1e8725885efa9 100644 (file)
@@ -1,4 +1,4 @@
 .claro .dijitSelectRtl .dijitButtonContents {
-       border-right-width: 0px;
-       border-left-width: 1px;
+  border-right-width: 0;
+  border-left-width: 1px;
 }
diff --git a/lib/dijit/themes/claro/form/Select_rtl.less b/lib/dijit/themes/claro/form/Select_rtl.less
new file mode 100644 (file)
index 0000000..ffa40dc
--- /dev/null
@@ -0,0 +1,6 @@
+@import "../variables";
+
+.claro .dijitSelectRtl .dijitButtonContents {
+       border-right-width: 0;
+       border-left-width: 1px;
+}
index 51c2c231311ac29b2be0a485fff2bfed6dc7fc21..5694e8c76e477bc9c84285a526b33758ae875426 100644 (file)
-
+/* Slider 
+ * 
+ * Styling Slider mainly includes styling the Slider progress bar (dijitSliderProgressBar)
+ * 
+ * Slider progress bar:
+ * 1. Slider progress bar (default styling): 
+ *             .dijitSliderProgressBarH - progress bar at the middle of horizontal slider
+ *             .dijitSliderLeftBumper - bar at the left of horizontal slider
+ *             .dijitSliderRightBumper - bar at the right of horizontal slider
+ *             .dijitSliderProgressBarV - progress bar at the middle of vertical slider
+ *             .dijitSliderTopBumper - bar at the top of vertical slider
+ *             .dijitSliderBottomtBumper - bar at the bottom of vertical slider
+ * 
+ * 2. hovered Slider progress bar (ie, mouse hover on progress bar)
+ *             .dijitSliderHover .dijitSliderProgressBarH(horizontal) - hovered bar style: background, border
+ * 
+ * 3. focused Slider progress bar (ie, mouse focused on progress bar)
+ *             .dijitSliderFocused .dijitSliderProgressBarH(horizontal) - focus bar style: background, border
+ * 
+ * 4. disabled/read-only Slider progress bar 
+ *             .dijitSliderDisabled .dijitSliderProgressBarH(horizontal) - bar styles when slider is disabled
+ * 
+ * 
+ * Slider Thumbs:
+ * 1. Slider Thumbs (default styling): 
+ *             .dijitSliderImageHandleH / .dijitSliderImageHandleV - styles for the controller on the progress bar
+ * 
+ * 2. hovered Slider Thumbs (ie, mouse hover on slider thumbs)
+ *             .dijitSliderHover .dijitSliderImageHandleH - hovered controller style
+ * 
+ * 3. focused Slider progress bar (ie, mouse focused on slider thumbs)
+ *             .dijitSliderFocused .dijitSliderImageHandleV - focused controller style
+ * 
+ * 
+ * Slider Increment/Decrement Buttons:
+ * 1. Slider Increment/Decrement Buttons (default styling): 
+ *             .dijitSliderDecrementIconH - decrement icon which lies at the left of horizontal slider
+ *             .dijitSliderIncrementIconH - increment icon which lies at the right of horizontal slider
+ *             .dijitSliderDecrementIconV - decrement icon which lies at the bottom of vertical slider
+ *             .dijitSliderIncrementIconV - increment icon which lies at the top of vertical slider
+ * 
+ * 2. hovered Slider Increment/Decrement Buttons (mouse hover on the icons)
+ *             .dijitSliderHover .dijitSliderDecrementIconH - for background, border
+ * 
+ * 3. active Slider Increment/Decrement Buttons (mouse down on the icons)
+ *             .dijitSliderActive .dijitSliderIncrementIconV - for background, border
+ * 
+ * 4. disabled/read-only Slider Increment/Decrement Buttons
+ *             .dijitSliderDisabled .dijitSliderDecrementIconH - styles for the icons in disabled slider
+ *             .dijitSliderReadOnly .dijitSliderIncrementIconV - styles for the icons in read-only slider
+ */
 .claro .dijitSliderBar {
-       border-style: solid;
-       outline: 1px;
+  border-style: solid;
+  outline: 1px;
 }
 .claro .dijitSliderFocused .dijitSliderBar {
-       border-color: #769dc0;
+  border-color: #769dc0;
 }
 .claro .dijitSliderHover .dijitSliderBar {
-       border-color: #769dc0;
+  border-color: #769dc0;
 }
 .claro .dijitSliderDisabled .dijitSliderBar {
-       background-image: none;
-       border-color: #d3d3d3;
+  background-image: none;
+  border-color: #d3d3d3;
 }
+/* Horizontal Slider */
 .claro .dijitRuleLabelsContainerH {
-       padding: 2px 0px;
-}
-.claro .dijitSlider .dijitSliderProgressBarH,
-.claro .dijitSlider .dijitSliderLeftBumper{
-       background-image: url("images/sliderHorizontal.png");
-       background-repeat:repeat-x;
-       background-position:0 -20px;
-       border-color: #b5bcc7;
-       background-color: #cfe5fa;
-}
-.claro .dijitSlider .dijitSliderRemainingBarH,
-.claro .dijitSlider .dijitSliderRightBumper{
-       background-image: url("images/sliderHorizontal.png");
-       background-repeat:repeat-x;
-       background-position:0 -11px;
-       border-color: #b5bcc7;
-       background-color: #fff;
+  padding: 2px 0;
+}
+.claro .dijitSlider .dijitSliderProgressBarH, .claro .dijitSlider .dijitSliderLeftBumper {
+  background-image: url("images/sliderHorizontal.png");
+  background-repeat: repeat-x;
+  background-position: 0 -20px;
+  border-color: #b5bcc7;
+  background-color: #cfe5fa;
+}
+.claro .dijitSlider .dijitSliderRemainingBarH, .claro .dijitSlider .dijitSliderRightBumper {
+  background-image: url("images/sliderHorizontal.png");
+  background-repeat: repeat-x;
+  background-position: 0 -11px;
+  border-color: #b5bcc7;
+  background-color: #ffffff;
 }
 .claro .dijitSliderRightBumper {
-       border-right: solid 1px #b5bcc7;
+  border-right: solid 1px #b5bcc7;
 }
 .claro .dijitSliderLeftBumper {
-       border-left: solid 1px #b5bcc7;
-}
-.claro .dijitSliderHover .dijitSliderProgressBarH,
-.claro .dijitSliderHover .dijitSliderLeftBumper{
-       background-position:0 -20px;
-       background-color: #abd6ff;
-       border-color: #769dc0;
-}
-.claro .dijitSliderHover .dijitSliderRemainingBarH,
-.claro .dijitSliderHover .dijitSliderRightBumper{
-       background-position:0 0px;
-       background-color: #fff;
-       border-color: #769dc0;
-}
-.claro .dijitSliderFocused .dijitSliderProgressBarH,
-.claro .dijitSliderFocused .dijitSliderLeftBumper{
-       background-position:0 -30px;
-       background-color: #abd6ff;
-       border-color: #769dc0;
-}
-.claro .dijitSliderFocused .dijitSliderRemainingBarH,
-.claro .dijitSliderFocused .dijitSliderRightBumper{
-       background-position:0 -9px;
-       background-color: #fff;
-       border-color: #769dc0;
-}
-.claro .dijitSliderDisabled .dijitSliderProgressBarH,
-.claro .dijitSliderDisabled .dijitSliderLeftBumper{
-       background-color: #cdcdcd;
-       background-image:none;
-}
-.claro .dijitSliderDisabled .dijitSliderRemainingBarH,
-.claro .dijitSliderDisabled .dijitSliderRightBumper{
-       background-color: #efefef;
+  border-left: solid 1px #b5bcc7;
+}
+.claro .dijitSliderHover .dijitSliderProgressBarH, .claro .dijitSliderHover .dijitSliderLeftBumper {
+  background-position: 0 -20px;
+  background-color: #abd6ff;
+  border-color: #769dc0;
+}
+.claro .dijitSliderHover .dijitSliderRemainingBarH, .claro .dijitSliderHover .dijitSliderRightBumper {
+  background-position: 0 0;
+  background-color: #ffffff;
+  border-color: #769dc0;
+}
+.claro .dijitSliderFocused .dijitSliderProgressBarH, .claro .dijitSliderFocused .dijitSliderLeftBumper {
+  background-position: 0 -30px;
+  background-color: #abd6ff;
+  border-color: #769dc0;
+}
+.claro .dijitSliderFocused .dijitSliderRemainingBarH, .claro .dijitSliderFocused .dijitSliderRightBumper {
+  background-position: 0 -9px;
+  background-color: #ffffff;
+  border-color: #769dc0;
+}
+.claro .dijitSliderDisabled .dijitSliderProgressBarH, .claro .dijitSliderDisabled .dijitSliderLeftBumper {
+  background-color: #d3d3d3;
+  /* left side of slider, fill matches border */
+
+  background-image: none;
 }
+.claro .dijitSliderDisabled .dijitSliderRemainingBarH, .claro .dijitSliderDisabled .dijitSliderRightBumper {
+  background-color: #efefef;
+}
+/* Vertical Slider */
 .claro .dijitRuleLabelsContainerV {
-       padding: 0px 2px;
-}
-.claro .dijitSlider .dijitSliderProgressBarV,
-.claro .dijitSlider .dijitSliderBottomBumper{
-       background-image: url("images/sliderVertical.png");
-       background-repeat:repeat-y;
-       background-position:-36px 0;
-       border-color: #b5bcc7;
-       background-color: #cfe5fa;
-}
-.claro .dijitSlider .dijitSliderRemainingBarV,
-.claro .dijitSlider .dijitSliderTopBumper{
-       background-image: url("images/sliderVertical.png");
-       background-repeat:repeat-y;
-       background-position:-3px 0;
-       border-color: #b5bcc7;
-       background-color: #fff;
+  padding: 0 2px;
+}
+.claro .dijitSlider .dijitSliderProgressBarV, .claro .dijitSlider .dijitSliderBottomBumper {
+  background-image: url("images/sliderVertical.png");
+  background-repeat: repeat-y;
+  background-position: -36px 0;
+  border-color: #b5bcc7;
+  background-color: #cfe5fa;
+}
+.claro .dijitSlider .dijitSliderRemainingBarV, .claro .dijitSlider .dijitSliderTopBumper {
+  background-image: url("images/sliderVertical.png");
+  background-repeat: repeat-y;
+  background-position: -3px 0;
+  border-color: #b5bcc7;
+  background-color: #ffffff;
 }
 .claro .dijitSliderBottomBumper {
-       border-bottom: solid 1px #b5bcc7;
+  border-bottom: solid 1px #b5bcc7;
 }
 .claro .dijitSliderTopBumper {
-       border-top: solid 1px #b5bcc7;
+  border-top: solid 1px #b5bcc7;
 }
-.claro .dijitSliderHover .dijitSliderProgressBarV,
-.claro .dijitSliderHover .dijitSliderBottomBumper{
-       background-position:-36px 0;
-       background-color: #abd6ff;
+.claro .dijitSliderHover .dijitSliderProgressBarV, .claro .dijitSliderHover .dijitSliderBottomBumper {
+  background-position: -36px 0;
+  background-color: #abd6ff;
 }
-.claro .dijitSliderHover .dijitSliderRemainingBarV,
-.claro .dijitSliderHover .dijitSliderTopBumper{
-       background-position:0 0;
-       background-color: #fff;
+.claro .dijitSliderHover .dijitSliderRemainingBarV, .claro .dijitSliderHover .dijitSliderTopBumper {
+  background-position: 0 0;
+  background-color: #ffffff;
 }
-.claro .dijitSliderFocused .dijitSliderProgressBarV,
-.claro .dijitSliderFocused .dijitSliderBottomBumper{
-       background-position:-56px 0;
-       background-color: #abd6ff;
+.claro .dijitSliderFocused .dijitSliderProgressBarV, .claro .dijitSliderFocused .dijitSliderBottomBumper {
+  background-position: -56px 0;
+  background-color: #abd6ff;
 }
-.claro .dijitSliderFocused .dijitSliderRemainingBarV,
-.claro .dijitSliderFocused .dijitSliderTopBumper{
-       background-position:-18px 0;
-       background-color: #fff;
+.claro .dijitSliderFocused .dijitSliderRemainingBarV, .claro .dijitSliderFocused .dijitSliderTopBumper {
+  background-position: -18px 0;
+  background-color: #ffffff;
 }
-.claro .dijitSliderDisabled .dijitSliderProgressBarV,
-.claro .dijitSliderDisabled .dijitSliderBottomBumper{
-       background-color: #cdcdcd;
+.claro .dijitSliderDisabled .dijitSliderProgressBarV, .claro .dijitSliderDisabled .dijitSliderBottomBumper {
+  background-color: #d3d3d3;
+  /* bottom side of slider, fill matches border */
+
 }
-.claro .dijitSliderDisabled .dijitSliderRemainingBarV,
-.claro .dijitSliderDisabled .dijitSliderTopBumper{
-       background-color: #efefef;
+.claro .dijitSliderDisabled .dijitSliderRemainingBarV, .claro .dijitSliderDisabled .dijitSliderTopBumper {
+  background-color: #efefef;
 }
+/* ------- Thumbs ------- */
 .claro .dijitSliderImageHandleH {
-       border: 0px;
-       width: 18px;
-       height: 16px;
-       background-image: url("images/sliderThumbs.png");
-       background-repeat:no-repeat;
-       background-position:0 0;
+  border: 0;
+  width: 18px;
+  height: 16px;
+  background-image: url("images/sliderThumbs.png");
+  background-repeat: no-repeat;
+  background-position: 0 0;
 }
 .claro .dijitSliderHover .dijitSliderImageHandleH {
-       background-position:-18px 0;
+  background-position: -18px 0;
 }
 .claro .dijitSliderFocused .dijitSliderImageHandleH {
-       background-position:-36px 0;
+  background-position: -36px 0;
 }
-.claro .dijitSliderProgressBarH .dijitSliderThumbHover{
-       background-position:-36px 0;
+.claro .dijitSliderProgressBarH .dijitSliderThumbHover {
+  background-position: -36px 0;
 }
-.claro .dijitSliderProgressBarH .dijitSliderThumbActive{
-       background-position:-36px 0;
+.claro .dijitSliderProgressBarH .dijitSliderThumbActive {
+  background-position: -36px 0;
 }
-.claro .dijitSliderReadOnly .dijitSliderImageHandleH,
-.claro .dijitSliderDisabled .dijitSliderImageHandleH {
-       background-position:-54px 0;
+.claro .dijitSliderReadOnly .dijitSliderImageHandleH, .claro .dijitSliderDisabled .dijitSliderImageHandleH {
+  background-position: -54px 0;
 }
 .claro .dijitSliderImageHandleV {
-       border: 0px;
-       width: 18px;
-       height: 16px;
-       background-image: url("images/sliderThumbs.png");
-       background-repeat:no-repeat;
-       background-position:-289px 0;
+  border: 0;
+  width: 18px;
+  height: 16px;
+  background-image: url("images/sliderThumbs.png");
+  background-repeat: no-repeat;
+  background-position: -289px 0;
 }
 .claro .dijitSliderHover .dijitSliderImageHandleV {
-       background-position:-307px 0;
+  background-position: -307px 0;
 }
 .claro .dijitSliderFocused .dijitSliderImageHandleV {
-       background-position:-325px 0;
+  background-position: -325px 0;
 }
-.claro .dijitSliderProgressBarV .dijitSliderThumbHover{
-       background-position:-325px 0;
+.claro .dijitSliderProgressBarV .dijitSliderThumbHover {
+  background-position: -325px 0;
 }
-.claro .dijitSliderProgressBarV .dijitSliderThumbActive{
-       background-position:-325px 0;
+.claro .dijitSliderProgressBarV .dijitSliderThumbActive {
+  background-position: -325px 0;
 }
-.claro .dijitSliderReadOnly .dijitSliderImageHandleV,
-.claro .dijitSliderDisabled .dijitSliderImageHandleV {
-       background-position:-343px 0;
+.claro .dijitSliderReadOnly .dijitSliderImageHandleV, .claro .dijitSliderDisabled .dijitSliderImageHandleV {
+  background-position: -343px 0;
 }
-.claro .dijitSliderButtonContainerH{
-       padding: 1px 3px 1px 2px;
+/* ---- Increment/Decrement Buttons ---- */
+.claro .dijitSliderButtonContainerH {
+  padding: 1px 3px 1px 2px;
 }
-.claro .dijitSliderButtonContainerV{
-       padding: 3px 1px 2px 1px;
+.claro .dijitSliderButtonContainerV {
+  padding: 3px 1px 2px 1px;
 }
 .claro .dijitSliderDecrementIconH,
 .claro .dijitSliderIncrementIconH,
 .claro .dijitSliderDecrementIconV,
 .claro .dijitSliderIncrementIconV {
-       background-image: url('images/commonFormArrows.png');
-       background-repeat:no-repeat;
-       background-color: #e9ecf2;
-       -moz-border-radius: 2px;
-       -webkit-border-radius: 2px;
-       border: solid 1px #b5bcc7;
-       font-size: 1px;
-}
-.claro .dijitSliderDecrementIconH,
-.claro .dijitSliderIncrementIconH {
-       height: 12px;
-       width: 9px;
-}
-.claro .dijitSliderDecrementIconV,
-.claro .dijitSliderIncrementIconV {
-       height: 9px;
-       width: 12px;
+  background-image: url('images/commonFormArrows.png');
+  background-repeat: no-repeat;
+  background-color: #efefef;
+  -moz-border-radius: 2px;
+  border-radius: 2px;
+  border: solid 1px #b5bcc7;
+  font-size: 1px;
+}
+.claro .dijitSliderDecrementIconH, .claro .dijitSliderIncrementIconH {
+  height: 12px;
+  width: 9px;
+}
+.claro .dijitSliderDecrementIconV, .claro .dijitSliderIncrementIconV {
+  height: 9px;
+  width: 12px;
 }
 .claro .dijitSliderActive .dijitSliderDecrementIconH,
 .claro .dijitSliderActive .dijitSliderIncrementIconH,
 .claro .dijitSliderHover .dijitSliderIncrementIconH,
 .claro .dijitSliderHover .dijitSliderDecrementIconV,
 .claro .dijitSliderHover .dijitSliderIncrementIconV {
-       border: solid 1px #769dc0;
-       background-color:#fff;
+  /* dijitSliderActive should be treated as dijitSliderHover since "clicking the slider" has no meaning */
+
+  border: solid 1px #769dc0;
+  background-color: #ffffff;
 }
 .claro .dijitSliderDecrementIconH {
-       background-position:-357px 50%;
+  background-position: -357px 50%;
 }
-.claro .dijitSliderActive .dijitSliderDecrementIconH
-.claro .dijitSliderHover .dijitSliderDecrementIconH {
-       background-position:-393px 50%;
+.claro .dijitSliderActive .dijitSliderDecrementIconH.claro .dijitSliderHover .dijitSliderDecrementIconH {
+  background-position: -393px 50%;
 }
 .claro .dijitSliderIncrementIconH {
-       background-position:-251px 50%;
+  background-position: -251px 50%;
 }
-.claro .dijitSliderActive .dijitSliderIncrementIconH
-.claro .dijitSliderHover .dijitSliderIncrementIconH {
-       background-position:-283px 50%;
+.claro .dijitSliderActive .dijitSliderIncrementIconH.claro .dijitSliderHover .dijitSliderIncrementIconH {
+  background-position: -283px 50%;
 }
 .claro .dijitSliderDecrementIconV {
-       background-position:-38px 50%;
+  background-position: -38px 50%;
 }
-.claro .dijitSliderActive .dijitSliderDecrementIconV
-.claro .dijitSliderHover .dijitSliderDecrementIconV {
-       background-position:-73px 50%;
+.claro .dijitSliderActive .dijitSliderDecrementIconV.claro .dijitSliderHover .dijitSliderDecrementIconV {
+  background-position: -73px 50%;
 }
 .claro .dijitSliderIncrementIconV {
-       background-position:-143px 49%;
+  background-position: -143px 49%;
 }
-.claro .dijitSliderActive .dijitSliderIncrementIconV
-.claro .dijitSliderHover .dijitSliderIncrementIconV {
-       background-position:-178px 49%;
+.claro .dijitSliderActive .dijitSliderIncrementIconV.claro .dijitSliderHover .dijitSliderIncrementIconV {
+  background-position: -178px 49%;
 }
 .claro .dijitSliderButtonContainerV .dijitSliderDecrementButtonHover,
 .claro .dijitSliderButtonContainerH .dijitSliderDecrementButtonHover,
 .claro .dijitSliderButtonContainerV .dijitSliderIncrementButtonHover,
 .claro .dijitSliderButtonContainerH .dijitSliderIncrementButtonHover {
-       background-color: #cce3fc;
+  background-color: #cfe5fa;
 }
 .claro .dijitSliderButtonContainerV .dijitSliderDecrementButtonActive,
 .claro .dijitSliderButtonContainerH .dijitSliderDecrementButtonActive,
 .claro .dijitSliderButtonContainerV .dijitSliderIncrementButtonActive,
 .claro .dijitSliderButtonContainerH .dijitSliderIncrementButtonActive {
-       background-color: #a5d0fc;
-       border-color:#6591b9;
+  background-color: #abd6ff;
+  border-color: #769dc0;
 }
 .claro .dijitSliderButtonInner {
-       visibility: hidden;
+  visibility: hidden;
 }
-.claro .dijitSliderDisabled .dijitSliderBar{
-       border-color: #d3d3d3;
+.claro .dijitSliderDisabled .dijitSliderBar {
+  border-color: #d3d3d3;
 }
-.claro .dijitSliderReadOnly *,.claro .dijitSliderDisabled * {
-       border-color: #d3d3d3;
-       color: #bdbdbd;
+.claro .dijitSliderReadOnly *, .claro .dijitSliderDisabled * {
+  border-color: #d3d3d3;
+  color: #818181;
 }
-.claro .dijitSliderReadOnly .dijitSliderDecrementIconH,
-.claro .dijitSliderDisabled .dijitSliderDecrementIconH {
-       background-position:-321px 50%;
-       background-color:#e9e9e9;
+.claro .dijitSliderReadOnly .dijitSliderDecrementIconH, .claro .dijitSliderDisabled .dijitSliderDecrementIconH {
+  background-position: -321px 50%;
+  background-color: #efefef;
 }
-.claro .dijitSliderReadOnly .dijitSliderIncrementIconH,
-.claro .dijitSliderDisabled .dijitSliderIncrementIconH {
-       background-position:-215px 50%;
-       background-color:#e9e9e9;
+.claro .dijitSliderReadOnly .dijitSliderIncrementIconH, .claro .dijitSliderDisabled .dijitSliderIncrementIconH {
+  background-position: -215px 50%;
+  background-color: #efefef;
 }
-.claro .dijitSliderReadOnly .dijitSliderDecrementIconV,
-.claro .dijitSliderDisabled .dijitSliderDecrementIconV {
-       background-position:-3px 49%;
-       background-color:#e9e9e9;
+.claro .dijitSliderReadOnly .dijitSliderDecrementIconV, .claro .dijitSliderDisabled .dijitSliderDecrementIconV {
+  background-position: -3px 49%;
+  background-color: #efefef;
 }
-.claro .dijitSliderReadOnly .dijitSliderIncrementIconV,
-.claro .dijitSliderDisabled .dijitSliderIncrementIconV {
-       background-position:-107px 49%;
-       background-color:#e9e9e9;
+.claro .dijitSliderReadOnly .dijitSliderIncrementIconV, .claro .dijitSliderDisabled .dijitSliderIncrementIconV {
+  background-position: -107px 49%;
+  background-color: #efefef;
 }
 .dj_ie6 .claro .dijitSlider .dijitSliderProgressBarH,
 .dj_ie6 .claro .dijitSlider .dijitSliderLeftBumper,
 .dj_ie6 .claro .dijitSlider .dijitSliderTopBumper,
 .dj_ie6 .claro .dijitSlider .dijitSliderRemainingBarV,
 .dj_ie6 .claro .dijitSlider .dijitSliderBottomBumper {
-       background-image:none;
+  background-image: none;
 }
diff --git a/lib/dijit/themes/claro/form/Slider.less b/lib/dijit/themes/claro/form/Slider.less
new file mode 100644 (file)
index 0000000..82451b5
--- /dev/null
@@ -0,0 +1,362 @@
+/* Slider 
+ * 
+ * Styling Slider mainly includes styling the Slider progress bar (dijitSliderProgressBar)
+ * 
+ * Slider progress bar:
+ * 1. Slider progress bar (default styling): 
+ *             .dijitSliderProgressBarH - progress bar at the middle of horizontal slider
+ *             .dijitSliderLeftBumper - bar at the left of horizontal slider
+ *             .dijitSliderRightBumper - bar at the right of horizontal slider
+ *             .dijitSliderProgressBarV - progress bar at the middle of vertical slider
+ *             .dijitSliderTopBumper - bar at the top of vertical slider
+ *             .dijitSliderBottomtBumper - bar at the bottom of vertical slider
+ * 
+ * 2. hovered Slider progress bar (ie, mouse hover on progress bar)
+ *             .dijitSliderHover .dijitSliderProgressBarH(horizontal) - hovered bar style: background, border
+ * 
+ * 3. focused Slider progress bar (ie, mouse focused on progress bar)
+ *             .dijitSliderFocused .dijitSliderProgressBarH(horizontal) - focus bar style: background, border
+ * 
+ * 4. disabled/read-only Slider progress bar 
+ *             .dijitSliderDisabled .dijitSliderProgressBarH(horizontal) - bar styles when slider is disabled
+ * 
+ * 
+ * Slider Thumbs:
+ * 1. Slider Thumbs (default styling): 
+ *             .dijitSliderImageHandleH / .dijitSliderImageHandleV - styles for the controller on the progress bar
+ * 
+ * 2. hovered Slider Thumbs (ie, mouse hover on slider thumbs)
+ *             .dijitSliderHover .dijitSliderImageHandleH - hovered controller style
+ * 
+ * 3. focused Slider progress bar (ie, mouse focused on slider thumbs)
+ *             .dijitSliderFocused .dijitSliderImageHandleV - focused controller style
+ * 
+ * 
+ * Slider Increment/Decrement Buttons:
+ * 1. Slider Increment/Decrement Buttons (default styling): 
+ *             .dijitSliderDecrementIconH - decrement icon which lies at the left of horizontal slider
+ *             .dijitSliderIncrementIconH - increment icon which lies at the right of horizontal slider
+ *             .dijitSliderDecrementIconV - decrement icon which lies at the bottom of vertical slider
+ *             .dijitSliderIncrementIconV - increment icon which lies at the top of vertical slider
+ * 
+ * 2. hovered Slider Increment/Decrement Buttons (mouse hover on the icons)
+ *             .dijitSliderHover .dijitSliderDecrementIconH - for background, border
+ * 
+ * 3. active Slider Increment/Decrement Buttons (mouse down on the icons)
+ *             .dijitSliderActive .dijitSliderIncrementIconV - for background, border
+ * 
+ * 4. disabled/read-only Slider Increment/Decrement Buttons
+ *             .dijitSliderDisabled .dijitSliderDecrementIconH - styles for the icons in disabled slider
+ *             .dijitSliderReadOnly .dijitSliderIncrementIconV - styles for the icons in read-only slider
+ */
+
+@import "../variables";
+
+.claro .dijitSliderBar {
+       border-style: solid;
+       outline: 1px;
+}
+.claro .dijitSliderFocused .dijitSliderBar {
+       border-color: @focused-border-color;
+}
+.claro .dijitSliderHover .dijitSliderBar {
+       border-color: @hovered-border-color;
+}
+.claro .dijitSliderDisabled .dijitSliderBar {
+       background-image: none;
+       border-color: @disabled-border-color;
+}
+
+/* Horizontal Slider */
+
+.claro .dijitRuleLabelsContainerH {
+       padding: 2px 0;
+}
+.claro .dijitSlider .dijitSliderProgressBarH,
+.claro .dijitSlider .dijitSliderLeftBumper{
+       background-image: url("images/sliderHorizontal.png");
+       background-repeat:repeat-x;
+       background-position:0 -20px;
+       border-color: @border-color;
+       background-color: @slider-fullbar-background-color;
+}
+.claro .dijitSlider .dijitSliderRemainingBarH,
+.claro .dijitSlider .dijitSliderRightBumper{
+       background-image: url("images/sliderHorizontal.png");
+       background-repeat:repeat-x;
+       background-position:0 -11px;
+       border-color: @border-color;
+       background-color: @slider-remainingbar-background-color;
+}
+.claro .dijitSliderRightBumper {
+       border-right: solid 1px @border-color;
+}
+.claro .dijitSliderLeftBumper {
+       border-left: solid 1px @border-color;
+}
+.claro .dijitSliderHover .dijitSliderProgressBarH,
+.claro .dijitSliderHover .dijitSliderLeftBumper{
+       background-position:0 -20px;
+       background-color: @slider-hovered-fullbar-background-color;
+       border-color: @hovered-border-color;
+}
+.claro .dijitSliderHover .dijitSliderRemainingBarH,
+.claro .dijitSliderHover .dijitSliderRightBumper{
+       background-position:0 0;
+       background-color: @slider-hovered-remainingbar-background-color;
+       border-color: @hovered-border-color;
+}
+.claro .dijitSliderFocused .dijitSliderProgressBarH,
+.claro .dijitSliderFocused .dijitSliderLeftBumper{
+       background-position:0 -30px;
+       background-color: @slider-focused-fullbar-background-color;
+       border-color: @focused-border-color;
+}
+.claro .dijitSliderFocused .dijitSliderRemainingBarH,
+.claro .dijitSliderFocused .dijitSliderRightBumper{
+       background-position:0 -9px;
+       background-color: @slider-focused-remainingbar-background-color;
+       border-color: @focused-border-color;
+}
+.claro .dijitSliderDisabled .dijitSliderProgressBarH,
+.claro .dijitSliderDisabled .dijitSliderLeftBumper{
+       background-color: @disabled-border-color;               /* left side of slider, fill matches border */
+       background-image:none;
+}
+.claro .dijitSliderDisabled .dijitSliderRemainingBarH,
+.claro .dijitSliderDisabled .dijitSliderRightBumper{
+       background-color: @disabled-background-color;
+}
+
+/* Vertical Slider */
+
+.claro .dijitRuleLabelsContainerV {
+       padding: 0 2px;
+}
+.claro .dijitSlider .dijitSliderProgressBarV,
+.claro .dijitSlider .dijitSliderBottomBumper{
+       background-image: url("images/sliderVertical.png");
+       background-repeat:repeat-y;
+       background-position:-36px 0;
+       border-color: @border-color;
+       background-color: @slider-fullbar-background-color;
+}
+.claro .dijitSlider .dijitSliderRemainingBarV,
+.claro .dijitSlider .dijitSliderTopBumper{
+       background-image: url("images/sliderVertical.png");
+       background-repeat:repeat-y;
+       background-position:-3px 0;
+       border-color: @border-color;
+       background-color: @slider-remainingbar-background-color;
+}
+.claro .dijitSliderBottomBumper {
+       border-bottom: solid 1px @border-color;
+}
+.claro .dijitSliderTopBumper {
+       border-top: solid 1px @border-color;
+}
+.claro .dijitSliderHover .dijitSliderProgressBarV,
+.claro .dijitSliderHover .dijitSliderBottomBumper{
+       background-position:-36px 0;
+       background-color: @slider-hovered-fullbar-background-color;
+}
+.claro .dijitSliderHover .dijitSliderRemainingBarV,
+.claro .dijitSliderHover .dijitSliderTopBumper{
+       background-position:0 0;
+       background-color: @slider-hovered-remainingbar-background-color;
+}
+.claro .dijitSliderFocused .dijitSliderProgressBarV,
+.claro .dijitSliderFocused .dijitSliderBottomBumper{
+       background-position:-56px 0;
+       background-color: @slider-focused-fullbar-background-color;
+}
+.claro .dijitSliderFocused .dijitSliderRemainingBarV,
+.claro .dijitSliderFocused .dijitSliderTopBumper{
+       background-position:-18px 0;
+       background-color: @slider-focused-remainingbar-background-color;
+}
+.claro .dijitSliderDisabled .dijitSliderProgressBarV,
+.claro .dijitSliderDisabled .dijitSliderBottomBumper{
+       background-color: @disabled-border-color;       /* bottom side of slider, fill matches border */
+}
+.claro .dijitSliderDisabled .dijitSliderRemainingBarV,
+.claro .dijitSliderDisabled .dijitSliderTopBumper{
+       background-color: @disabled-background-color;
+}
+
+
+/* ------- Thumbs ------- */
+
+.claro .dijitSliderImageHandleH {
+       border: 0;
+       width: 18px;
+       height: 16px;
+       background-image: url("images/sliderThumbs.png");
+       background-repeat:no-repeat;
+       background-position:0 0;
+}
+.claro .dijitSliderHover .dijitSliderImageHandleH {
+       background-position:-18px 0;
+}
+.claro .dijitSliderFocused .dijitSliderImageHandleH {
+       background-position:-36px 0;
+}
+.claro .dijitSliderProgressBarH .dijitSliderThumbHover{
+       background-position:-36px 0;
+}
+.claro .dijitSliderProgressBarH .dijitSliderThumbActive{
+       background-position:-36px 0;
+}
+.claro .dijitSliderReadOnly .dijitSliderImageHandleH,
+.claro .dijitSliderDisabled .dijitSliderImageHandleH {
+       background-position:-54px 0;
+}
+.claro .dijitSliderImageHandleV {
+       border: 0;
+       width: 18px;
+       height: 16px;
+       background-image: url("images/sliderThumbs.png");
+       background-repeat:no-repeat;
+       background-position:-289px 0;
+}
+.claro .dijitSliderHover .dijitSliderImageHandleV {
+       background-position:-307px 0;
+}
+.claro .dijitSliderFocused .dijitSliderImageHandleV {
+       background-position:-325px 0;
+}
+.claro .dijitSliderProgressBarV .dijitSliderThumbHover{
+       background-position:-325px 0;
+}
+.claro .dijitSliderProgressBarV .dijitSliderThumbActive{
+       background-position:-325px 0;
+}
+.claro .dijitSliderReadOnly .dijitSliderImageHandleV,
+.claro .dijitSliderDisabled .dijitSliderImageHandleV {
+       background-position:-343px 0;
+}
+
+/* ---- Increment/Decrement Buttons ---- */
+
+.claro .dijitSliderButtonContainerH{
+       padding: 1px 3px 1px 2px;
+}
+.claro .dijitSliderButtonContainerV{
+       padding: 3px 1px 2px 1px;
+}
+.claro .dijitSliderDecrementIconH,
+.claro .dijitSliderIncrementIconH,
+.claro .dijitSliderDecrementIconV,
+.claro .dijitSliderIncrementIconV {
+       background-image: url('images/commonFormArrows.png');
+       background-repeat:no-repeat;
+       background-color: @arrowbutton-background-color;
+       .border-radius(2px);
+       border: solid 1px @border-color;
+       font-size: 1px;
+}
+.claro .dijitSliderDecrementIconH,
+.claro .dijitSliderIncrementIconH {
+       height: 12px;
+       width: 9px;
+}
+.claro .dijitSliderDecrementIconV,
+.claro .dijitSliderIncrementIconV {
+       height: 9px;
+       width: 12px;
+}
+.claro .dijitSliderActive .dijitSliderDecrementIconH,
+.claro .dijitSliderActive .dijitSliderIncrementIconH,
+.claro .dijitSliderActive .dijitSliderDecrementIconV,
+.claro .dijitSliderActive .dijitSliderIncrementIconV,
+.claro .dijitSliderHover .dijitSliderDecrementIconH,
+.claro .dijitSliderHover .dijitSliderIncrementIconH,
+.claro .dijitSliderHover .dijitSliderDecrementIconV,
+.claro .dijitSliderHover .dijitSliderIncrementIconV {
+       /* dijitSliderActive should be treated as dijitSliderHover since "clicking the slider" has no meaning */
+       border: solid 1px @hovered-border-color;
+       background-color: @slider-hoveredButton-background-color;
+}
+
+.claro .dijitSliderDecrementIconH {
+       background-position:-357px 50%;
+}
+.claro .dijitSliderActive .dijitSliderDecrementIconH
+.claro .dijitSliderHover .dijitSliderDecrementIconH {
+       background-position:-393px 50%;
+}
+.claro .dijitSliderIncrementIconH {
+       background-position:-251px 50%;
+}
+.claro .dijitSliderActive .dijitSliderIncrementIconH
+.claro .dijitSliderHover .dijitSliderIncrementIconH {
+       background-position:-283px 50%;
+}
+.claro .dijitSliderDecrementIconV {
+       background-position:-38px 50%;
+}
+.claro .dijitSliderActive .dijitSliderDecrementIconV
+.claro .dijitSliderHover .dijitSliderDecrementIconV {
+       background-position:-73px 50%;
+}
+.claro .dijitSliderIncrementIconV {
+       background-position:-143px 49%;
+}
+.claro .dijitSliderActive .dijitSliderIncrementIconV
+.claro .dijitSliderHover .dijitSliderIncrementIconV {
+       background-position:-178px 49%;
+}
+.claro .dijitSliderButtonContainerV .dijitSliderDecrementButtonHover,
+.claro .dijitSliderButtonContainerH .dijitSliderDecrementButtonHover,
+.claro .dijitSliderButtonContainerV .dijitSliderIncrementButtonHover,
+.claro .dijitSliderButtonContainerH .dijitSliderIncrementButtonHover {
+       background-color: @slider-button-hovered-background-color;
+}
+.claro .dijitSliderButtonContainerV .dijitSliderDecrementButtonActive,
+.claro .dijitSliderButtonContainerH .dijitSliderDecrementButtonActive,
+.claro .dijitSliderButtonContainerV .dijitSliderIncrementButtonActive,
+.claro .dijitSliderButtonContainerH .dijitSliderIncrementButtonActive {
+       background-color: @slider-button-pressed-background-color;
+       border-color:@pressed-border-color;
+}
+.claro .dijitSliderButtonInner {
+       visibility: hidden;
+}
+.claro .dijitSliderDisabled .dijitSliderBar{
+       border-color: @disabled-border-color;
+}
+.claro .dijitSliderReadOnly *,.claro .dijitSliderDisabled * {
+       border-color: @disabled-border-color;
+       color: @disabled-text-color;
+}
+.claro .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.claro .dijitSliderDisabled .dijitSliderDecrementIconH {
+       background-position:-321px 50%;
+       background-color:@disabled-background-color;
+}
+.claro .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.claro .dijitSliderDisabled .dijitSliderIncrementIconH {
+       background-position:-215px 50%;
+       background-color:@disabled-background-color;
+}
+.claro .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.claro .dijitSliderDisabled .dijitSliderDecrementIconV {
+       background-position:-3px 49%;
+       background-color:@disabled-background-color;
+}
+.claro .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.claro .dijitSliderDisabled .dijitSliderIncrementIconV {
+       background-position:-107px 49%;
+       background-color:@disabled-background-color;
+}
+
+.dj_ie6 .claro .dijitSlider .dijitSliderProgressBarH,
+.dj_ie6 .claro .dijitSlider .dijitSliderLeftBumper,
+.dj_ie6 .claro .dijitSlider .dijitSliderRemainingBarH,
+.dj_ie6 .claro .dijitSlider .dijitSliderRightBumper,
+.dj_ie6 .claro .dijitSlider .dijitSliderProgressBarV,
+.dj_ie6 .claro .dijitSlider .dijitSliderTopBumper,
+.dj_ie6 .claro .dijitSlider .dijitSliderRemainingBarV,
+.dj_ie6 .claro .dijitSlider .dijitSliderBottomBumper {
+       background-image:none;
+}
index ebff4268dd1dbea0622b8034a6d77b84881a6b66..97e078b9ff6ce33528a961450ebc96a79a8860aa 100644 (file)
@@ -3,24 +3,22 @@
 .claro .dijitSliderRtl .dijitSliderLeftBumper,
 .claro .dijitSliderRtl .dijitSliderRightBumper,
 .claro .dijitSliderRtl .dijitSliderTopBumper {
-       background-position: top right;
+  background-position: top right;
 }
-.claro .dijitSliderRtl .dijitSliderProgressBarV,
-.claro .dijitSliderRtl .dijitSliderRemainingBarV,
-.claro .dijitSliderRtl .dijitSliderBottomBumper {
-       background-position: bottom right;
+.claro .dijitSliderRtl .dijitSliderProgressBarV, .claro .dijitSliderRtl .dijitSliderRemainingBarV, .claro .dijitSliderRtl .dijitSliderBottomBumper {
+  background-position: bottom right;
 }
 .claro .dijitSliderRtl .dijitSliderLeftBumper {
-       border-left-width: 0px;
-       border-right-width: 1px;
+  border-left-width: 0;
+  border-right-width: 1px;
 }
 .claro .dijitSliderRtl .dijitSliderRightBumper {
-       border-left-width: 1px;
-       border-right-width: 0px;
+  border-left-width: 1px;
+  border-right-width: 0;
 }
 .claro .dijitSliderRtl .dijitSliderIncrementIconH {
-       background-position:-357px 50%;
+  background-position: -357px 50%;
 }
 .claro .dijitSliderRtl .dijitSliderDecrementIconH {
-       background-position:-251px 50%;
+  background-position: -251px 50%;
 }
diff --git a/lib/dijit/themes/claro/form/Slider_rtl.less b/lib/dijit/themes/claro/form/Slider_rtl.less
new file mode 100644 (file)
index 0000000..66a7116
--- /dev/null
@@ -0,0 +1,33 @@
+@import "../variables";
+
+.claro .dijitSliderRtl .dijitSliderProgressBarH,
+.claro .dijitSliderRtl .dijitSliderRemainingBarH,
+.claro .dijitSliderRtl .dijitSliderLeftBumper,
+.claro .dijitSliderRtl .dijitSliderRightBumper,
+.claro .dijitSliderRtl .dijitSliderTopBumper {
+       background-position: top right;
+}
+
+.claro .dijitSliderRtl .dijitSliderProgressBarV,
+.claro .dijitSliderRtl .dijitSliderRemainingBarV,
+.claro .dijitSliderRtl .dijitSliderBottomBumper {
+       background-position: bottom right;
+}
+
+.claro .dijitSliderRtl .dijitSliderLeftBumper {
+       border-left-width: 0;
+       border-right-width: 1px;
+}
+
+.claro .dijitSliderRtl .dijitSliderRightBumper {
+       border-left-width: 1px;
+       border-right-width: 0;
+}
+
+.claro .dijitSliderRtl .dijitSliderIncrementIconH {
+       background-position:-357px 50%;
+}
+
+.claro .dijitSliderRtl .dijitSliderDecrementIconH {
+       background-position:-251px 50%;
+}
diff --git a/lib/dijit/themes/claro/images/loading.gif b/lib/dijit/themes/claro/images/loading.gif
deleted file mode 100644 (file)
index 6e7c8e5..0000000
Binary files a/lib/dijit/themes/claro/images/loading.gif and /dev/null differ
index aca14988a8afcea2c64aa938b5a4baad724060db..2b222739c0a6fffca4be1e71eaaaa7a31859b5c9 100644 (file)
Binary files a/lib/dijit/themes/claro/images/tooltip.png and b/lib/dijit/themes/claro/images/tooltip.png differ
diff --git a/lib/dijit/themes/claro/images/tooltipGradient.png b/lib/dijit/themes/claro/images/tooltipGradient.png
new file mode 100644 (file)
index 0000000..ce4860e
Binary files /dev/null and b/lib/dijit/themes/claro/images/tooltipGradient.png differ
index 77b8bd9674c9ea44489beb05e6ad6aac87c04a56..f7694795953aa6bdf980afc4ab63321b94f11a6a 100644 (file)
-
+/* Accordion
+ * 
+ * Styling AccordionContainer basically means styling the accordion pane (dijitAccordionInnerContainer)
+ * and the title inside of it (dijitAccordionTitle).   There are 4 basic states to style:
+ * 
+ * 1. closed pane (and default styling): 
+ *             .dijitAccordionInnerContainer - container for each accordion child
+ *             .dijitAccordionTitle - title for each accordion child
+ *
+ * 2. active closed pane (ie, mouse down on a title bar)
+ *             .dijitAccordionInnerContainerActive - for background-color, border
+ *             .dijitAccordionInnerContainerActive dijitAccordionTitle - for text color
+ * 
+ * 3. open pane (expanded child)
+ *             .dijitAccordionChildWrapper - wraps around the child widget (typically ContentPane)
+ *                     setting a margin so that there's blue trim all the way around the child
+ *
+ *             These rules need to override the closed pane active:
+ *
+ *             .dijitAccordionInnerContainerSelected - for background-color, border
+ *             .dijitAccordionInnerContainerSelected .dijitAccordionTitle - for text color
+ * 
+ * 4. hovered pane, open or closed
+ *             The selectors below affect hovering over both a closed pane (ie, hovering a title bar),
+ *             and hovering over an open pane.   Also, treat mouse down on an open pane as a hover:
+ *
+ *             .dijitAccordionInnerContainerHover, .dijitAccordionInnerContainerSelectedActive - for background-color, border
+ *             .dijitAccordionInnerContainerHover .dijitAccordionTitle - for text color
+ */
 .claro .dijitAccordionContainer {
-       border:none;
+  border: none;
 }
 .claro .dijitAccordionInnerContainer {
-       background-color: #e6e6e7;      
-       border:solid 1px #b5bcc7;
-       margin-bottom:1px;
-       -webkit-transition-property:background-color,border;
-       -webkit-transition-duration:.3s;
-       -webkit-transition-timing-function:linear;
+  background-color: #efefef;
+  /* gray, for closed pane */
+
+  border: solid 1px #b5bcc7;
+  margin-bottom: 1px;
+  -webkit-transition-property: background-color, border;
+  -moz-transition-property: background-color, border;
+  transition-property: background-color, border;
+  -webkit-transition-duration: 0.3s;
+  -moz-transition-duration: 0.3s;
+  transition-duration: 0.3s;
+  -webkit-transition-timing-function: linear;
+  -moz-transition-timing-function: linear;
+  transition-timing-function: linear;
 }
 .claro .dijitAccordionTitle {
-       background-color: transparent;  
-       background-image: url("images/accordion.png");
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       padding: 5px 7px 2px 7px;
-       min-height:17px;
-       color:#4a4a4a;
+  background-color: transparent;
+  /* pick up color from dijitAccordionInnerContainer */
+
+  background-image: url("images/accordion.png");
+  background-position: 0 0;
+  background-repeat: repeat-x;
+  padding: 5px 7px 2px 7px;
+  min-height: 17px;
+  color: #4a4a4a;
+}
+.claro .dijitAccordionTitleHover {
+  color: #000000;
 }
 .dj_ie6 .claro .dijitAccordionTitle {
-       background-image: none;
+  background-image: none;
+}
+.claro .dijitAccordionContainer .dijitAccordionChildWrapper {
+  /* this extends the blue trim styling of the title bar to wrapping around the node.
+        * done by setting margin
+        */
+
+  background-color: #ffffff;
+  border: 1px solid #769dc0;
+  margin: 0 2px 2px;
 }
 .claro .dijitAccordionContainer .dijitAccordionContainer-child {
-       background-color:#fff;
-       
-       border:1px solid #92bce1 !important;
-       margin: 0px 2px 2px;
-       padding: 9px;
+  /* this is affecting the child widget itself */
+
+  padding: 9px;
 }
+/* Active state for closed pane */
 .claro .dijitAccordionInnerContainerActive {
-       border:1px solid #769DC0;
-       background-color:#7dbefa;
-       -webkit-transition-duration:.1s;
+  border: 1px solid #769dc0;
+  background-color: #7dbefa;
+  -webkit-transition-duration: 0.1s;
+  -moz-transition-duration: 0.1s;
+  transition-duration: 0.1s;
 }
 .claro .dijitAccordionInnerContainerActive .dijitAccordionTitle {
-       background-position:0px -136px;
-       color:#000;
+  background-position: 0 -136px;
+  color: #000000;
 }
+/* Open (a.k.a. selected) pane */
 .claro .dijitAccordionInnerContainerSelected {
-       border-color:#92bce1;
-       background-color: #cde8ff;
+  border-color: #769dc0;
+  background-color: #cfe5fa;
 }
 .claro .dijitAccordionInnerContainerSelected .dijitAccordionTitle {
-       color:#000;
-       background-position: 0 0;       
+  color: #000000;
+  background-position: 0 0;
+  /* avoid effect when clicking the title of the open pane */
+
 }
+/* Hovering open or closed pane */
 .claro .dijitAccordionInnerContainerHover dijitAccordionTitle {
-       
-       color:#000;
+  /* both open and closed */
+
+  color: #000000;
 }
-.claro .dijitAccordionInnerContainerHover,
-.claro .dijitAccordionInnerContainerSelectedActive {
-       border:1px solid #769DC0;
-       background-color:#9dcfff;
-       -webkit-transition-duration:.2s;
+.claro .dijitAccordionInnerContainerHover, .claro .dijitAccordionInnerContainerSelectedActive {
+  /* note: clicking the currently selected Accordion pane should have no effect, so treating same as hover. */
+
+  border: 1px solid #769dc0;
+  background-color: #abd6ff;
+  -webkit-transition-duration: 0.2s;
+  -moz-transition-duration: 0.2s;
+  transition-duration: 0.2s;
 }
-.claro .dijitAccordionInnerContainerSelectedHover .dijitAccordionContainer-child,
-.claro .dijitAccordionInnerContainerSelectedActive .dijitAccordionContainer-child {
-       background-color:#ffffff;
-       border:1px solid #769DC0 !important;
-       -webkit-box-shadow:inset 0px 0px 3px rgba(0, 0, 0, .25);
-       -moz-box-shadow:inset 0px 0px 3px rgba(0, 0, 0, .25);
+.claro .dijitAccordionInnerContainerSelectedHover .dijitAccordionChildWrapper, .claro .dijitAccordionInnerContainerSelectedActive .dijitAccordionChildWrapper {
+  background-color: #ffffff;
+  border: 1px solid #769dc0 !important;
+  -webkit-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.25);
+  -moz-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.25);
+  box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.25);
 }
diff --git a/lib/dijit/themes/claro/layout/AccordionContainer.less b/lib/dijit/themes/claro/layout/AccordionContainer.less
new file mode 100644 (file)
index 0000000..01f4427
--- /dev/null
@@ -0,0 +1,116 @@
+/* Accordion
+ * 
+ * Styling AccordionContainer basically means styling the accordion pane (dijitAccordionInnerContainer)
+ * and the title inside of it (dijitAccordionTitle).   There are 4 basic states to style:
+ * 
+ * 1. closed pane (and default styling): 
+ *             .dijitAccordionInnerContainer - container for each accordion child
+ *             .dijitAccordionTitle - title for each accordion child
+ *
+ * 2. active closed pane (ie, mouse down on a title bar)
+ *             .dijitAccordionInnerContainerActive - for background-color, border
+ *             .dijitAccordionInnerContainerActive dijitAccordionTitle - for text color
+ * 
+ * 3. open pane (expanded child)
+ *             .dijitAccordionChildWrapper - wraps around the child widget (typically ContentPane)
+ *                     setting a margin so that there's blue trim all the way around the child
+ *
+ *             These rules need to override the closed pane active:
+ *
+ *             .dijitAccordionInnerContainerSelected - for background-color, border
+ *             .dijitAccordionInnerContainerSelected .dijitAccordionTitle - for text color
+ * 
+ * 4. hovered pane, open or closed
+ *             The selectors below affect hovering over both a closed pane (ie, hovering a title bar),
+ *             and hovering over an open pane.   Also, treat mouse down on an open pane as a hover:
+ *
+ *             .dijitAccordionInnerContainerHover, .dijitAccordionInnerContainerSelectedActive - for background-color, border
+ *             .dijitAccordionInnerContainerHover .dijitAccordionTitle - for text color
+ */
+
+@import "../variables";
+
+.claro .dijitAccordionContainer {
+       border:none;
+}
+.claro .dijitAccordionInnerContainer {
+       background-color: @unselected-background-color; /* gray, for closed pane */
+       border:solid 1px @border-color;
+       margin-bottom:1px;
+       .transition-property(background-color,border);
+       .transition-duration(.3s);
+       .transition-timing-function(linear);
+}
+.claro .dijitAccordionTitle {
+       background-color: transparent;  /* pick up color from dijitAccordionInnerContainer */
+       background-image: url("images/accordion.png");
+       background-position:0 0;
+       background-repeat:repeat-x;
+       padding: 5px 7px 2px 7px;
+       min-height:17px;
+       color:@unselected-text-color;
+}
+.claro .dijitAccordionTitleHover {
+       color:@hovered-text-color;
+}
+.dj_ie6 .claro .dijitAccordionTitle {
+       background-image: none;
+}
+.claro .dijitAccordionContainer .dijitAccordionChildWrapper {
+       /* this extends the blue trim styling of the title bar to wrapping around the node.
+        * done by setting margin
+        */
+       background-color:@pane-background-color;
+       border:1px solid @selected-border-color;
+       margin: 0 2px 2px;
+}
+       
+.claro .dijitAccordionContainer .dijitAccordionContainer-child {
+       /* this is affecting the child widget itself */
+       padding: 9px;
+}
+
+/* Active state for closed pane */
+
+.claro .dijitAccordionInnerContainerActive {
+       border:1px solid @selected-border-color;
+       background-color:@pressed-background-color;
+       .transition-duration(.1s);
+}
+.claro .dijitAccordionInnerContainerActive .dijitAccordionTitle {
+       background-position:0 -136px;
+       color:@selected-text-color;
+}
+
+/* Open (a.k.a. selected) pane */
+
+.claro .dijitAccordionInnerContainerSelected {
+       border-color:@selected-border-color;
+       background-color: @selected-background-color;
+}
+.claro .dijitAccordionInnerContainerSelected .dijitAccordionTitle {
+       color:@selected-text-color;
+       background-position: 0 0;       /* avoid effect when clicking the title of the open pane */
+}
+
+/* Hovering open or closed pane */
+
+.claro .dijitAccordionInnerContainerHover dijitAccordionTitle {
+       /* both open and closed */
+       color:@hovered-text-color;
+}
+
+.claro .dijitAccordionInnerContainerHover,
+.claro .dijitAccordionInnerContainerSelectedActive {
+       /* note: clicking the currently selected Accordion pane should have no effect, so treating same as hover. */
+       border:1px solid @hovered-border-color;
+       background-color:@hovered-background-color;
+       .transition-duration(.2s);
+}
+
+.claro .dijitAccordionInnerContainerSelectedHover .dijitAccordionChildWrapper,
+.claro .dijitAccordionInnerContainerSelectedActive .dijitAccordionChildWrapper {
+       background-color:@pane-background-color;
+       border:1px solid @hovered-border-color !important;
+       .box-shadow(inset 0 0 3px rgba(0, 0, 0, .25));
+}
index 333a458900fc4bea663320acb6a3d6e9d49bae41..ede2a56c56dcd1b8303422504035d7ad9713cadb 100644 (file)
+/* BorderContainer 
 
+Splitters and gutters separate panes within a BorderContainer. Splitters can be moved up and down (horizonal splitters) or left and right (vertical splitters), while Gutters are static. A "thumb" is the slit on a Splitter that indicates it is movable. 
+
+Styling the BorderContainer widget consists of the following: 
+
+.dijitBorderContainer - for border and padding of the entire border container
+
+.dijitSplitContainer-child, .dijitBorderContainer-child - for border or child panes of the border container. By default borders are put on all children of BorderContainer.  
+
+.dijitBorderContainer-dijitTabContainerTop,
+.dijitBorderContainer-dijitTabContainerBottom,
+.dijitBorderContainer-dijitTabContainerLeft,
+.dijitBorderContainer-dijitTabContainerRight,
+.dijitBorderContainer-dijitAccordionContainer   -for border of the border containers within TabContainer or AccordionContainer widget
+
+.dijitBorderContainer-dijitBorderContainer - for border and padding of nested BorderContainers
+
+Splitters and gutters:  
+
+.dijitSplitterH, .dijitGutterH - for height, background, and border of a horizontal splitter and gutter 
+.dijitSplitterH .dijitSplitterThumb - for color, height/width of the thumb on a horizontal splitter
+.dijitSplitterV, .dijitGutterV - - for height, background, and border of a vertical splitter and gutter 
+.dijitSplitterV .dijitSplitterThumb - for color, height/width of the thumb on a vertical splitter
+.dijitSplitterHHover - for background-color of a hovered horizontal splitter
+.dijitSplitterHHover .dijitSplitterThumb - for background-color of a hovered thumb on a horizontal splitter
+.dijitSplitterVHover  - for background-color of a hovered vertical splitter
+.dijitSplitterVHover .dijitSplitterThumb - for background-color of a hovered thumb on a vertical splitter
+.dijitSplitterHActive - for background-color of an active horizontal splitter
+.dijitSplitterVActive - for background-color of an active horizontal splitter
+*/
 .claro .dijitBorderContainer {
-       border: 1px #b5bcc7 solid;
-       padding: 5px;
+  /* matches the width of the splitters between panes */
+
+  padding: 5px;
 }
-.claro .dijitSplitContainer-child,
-.claro .dijitBorderContainer-child {
-       
-       border: 1px #b5bcc7 solid;
+.claro .dijitSplitContainer-child, .claro .dijitBorderContainer-child {
+  /* By default put borders on all children of BorderContainer,
+        *  to give illusion of borders on the splitters themselves.
+        */
+
+  border: 1px #b5bcc7 solid;
 }
 .claro .dijitBorderContainer-dijitTabContainerTop,
 .claro .dijitBorderContainer-dijitTabContainerBottom,
 .claro .dijitBorderContainer-dijitTabContainerLeft,
 .claro .dijitBorderContainer-dijitTabContainerRight,
 .claro .dijitBorderContainer-dijitAccordionContainer {
-       
-        border: none;
+  /* except that TabContainer defines borders on it's sub-nodes (tablist and dijitTabPaneWrapper),
+        * so override rule setting border on domNode
+        */
+
+  border: none;
 }
 .claro .dijitBorderContainer-dijitBorderContainer {
-       
-       border: 1px #c0ccdf solid;
-       padding: 5px;
+  /* make nested BorderContainers look like a single big widget with lots of splitters */
+
+  border: 0;
+  padding: 0;
 }
-.claro .dijitSplitterH,
-.claro .dijitGutterH {
-       background:none;
-       border:0;
-       height:5px;
+/* Splitters and gutters */
+.claro .dijitSplitterH, .claro .dijitGutterH {
+  background: none;
+  border: 0;
+  height: 5px;
 }
 .claro .dijitSplitterH .dijitSplitterThumb {
-       background:#dde2e9 none;
-       height:1px;
-       top:2px;
-       width:19px;
+  background: #b5bcc7 none;
+  height: 1px;
+  top: 2px;
+  width: 19px;
 }
-.claro .dijitSplitterV,
-.claro .dijitGutterV {
-       background:none;
-       border:0;
-       width:5px;
-       margin: 0;
+.claro .dijitSplitterV, .claro .dijitGutterV {
+  background: none;
+  border: 0;
+  width: 5px;
+  margin: 0;
 }
 .claro .dijitSplitterV .dijitSplitterThumb {
-       background:#dde2e9 none;
-       height:19px;
-       left:2px;
-       width:1px;
-       margin: 0;
+  background: #b5bcc7 none;
+  height: 19px;
+  left: 2px;
+  width: 1px;
+  margin: 0;
 }
+/* hovered splitter */
 .claro .dijitSplitterHHover {
-       font-size: 1px;
-       background: url("images/splitterHorizontalHover.png") no-repeat center top;
+  font-size: 1px;
+  background: url("images/splitterHorizontalHover.png") no-repeat center top;
 }
 .claro .dijitSplitterHHover .dijitSplitterThumb {
-       background:#769dc0 none;
+  background: #769dc0 none;
 }
 .claro .dijitSplitterVHover {
-       font-size: 1px;
-       background: url("images/splitterVerticalHover.png") no-repeat center left;
+  font-size: 1px;
+  background: url("images/splitterVerticalHover.png") no-repeat center left;
 }
 .claro .dijitSplitterVHover .dijitSplitterThumb {
-       background:#769dc0 none;
-}
-.dj_ie6 .dijitSplitterHHover,
-.dj_ie6 .claro .dijitSplitterVHover {
-       background-color:#cfe9ff;
-       background-image:none;
+  background: #769dc0 none;
 }
-.claro .dijitSplitterHActive {
-       font-size: 1px;
-       background-color:#abd4fb;
-       border-top:blue;
+.dj_ie6 .dijitSplitterHHover, .dj_ie6 .claro .dijitSplitterVHover {
+  background-color: #cfe5fa;
+  background-image: none;
 }
-.claro .dijitSplitterVActive {
-       font-size: 1px;
-       background-color:#abd4fb;
+/* active splitter */
+.claro .dijitSplitterHActive, .claro .dijitSplitterVActive {
+  font-size: 1px;
+  background-color: #abd6ff;
 }
diff --git a/lib/dijit/themes/claro/layout/BorderContainer.less b/lib/dijit/themes/claro/layout/BorderContainer.less
new file mode 100644 (file)
index 0000000..17c4b63
--- /dev/null
@@ -0,0 +1,128 @@
+/* BorderContainer 
+
+Splitters and gutters separate panes within a BorderContainer. Splitters can be moved up and down (horizonal splitters) or left and right (vertical splitters), while Gutters are static. A "thumb" is the slit on a Splitter that indicates it is movable. 
+
+Styling the BorderContainer widget consists of the following: 
+
+.dijitBorderContainer - for border and padding of the entire border container
+
+.dijitSplitContainer-child, .dijitBorderContainer-child - for border or child panes of the border container. By default borders are put on all children of BorderContainer.  
+
+.dijitBorderContainer-dijitTabContainerTop,
+.dijitBorderContainer-dijitTabContainerBottom,
+.dijitBorderContainer-dijitTabContainerLeft,
+.dijitBorderContainer-dijitTabContainerRight,
+.dijitBorderContainer-dijitAccordionContainer   -for border of the border containers within TabContainer or AccordionContainer widget
+
+.dijitBorderContainer-dijitBorderContainer - for border and padding of nested BorderContainers
+
+Splitters and gutters:  
+
+.dijitSplitterH, .dijitGutterH - for height, background, and border of a horizontal splitter and gutter 
+.dijitSplitterH .dijitSplitterThumb - for color, height/width of the thumb on a horizontal splitter
+.dijitSplitterV, .dijitGutterV - - for height, background, and border of a vertical splitter and gutter 
+.dijitSplitterV .dijitSplitterThumb - for color, height/width of the thumb on a vertical splitter
+.dijitSplitterHHover - for background-color of a hovered horizontal splitter
+.dijitSplitterHHover .dijitSplitterThumb - for background-color of a hovered thumb on a horizontal splitter
+.dijitSplitterVHover  - for background-color of a hovered vertical splitter
+.dijitSplitterVHover .dijitSplitterThumb - for background-color of a hovered thumb on a vertical splitter
+.dijitSplitterHActive - for background-color of an active horizontal splitter
+.dijitSplitterVActive - for background-color of an active horizontal splitter
+*/
+
+@import "../variables";
+
+.claro .dijitBorderContainer {
+       /* matches the width of the splitters between panes */
+       padding: 5px;
+}
+
+.claro .dijitSplitContainer-child,
+.claro .dijitBorderContainer-child {
+       /* By default put borders on all children of BorderContainer,
+        *  to give illusion of borders on the splitters themselves.
+        */
+       border: 1px @border-color solid;
+}
+
+.claro .dijitBorderContainer-dijitTabContainerTop,
+.claro .dijitBorderContainer-dijitTabContainerBottom,
+.claro .dijitBorderContainer-dijitTabContainerLeft,
+.claro .dijitBorderContainer-dijitTabContainerRight,
+.claro .dijitBorderContainer-dijitAccordionContainer {
+       /* except that TabContainer defines borders on it's sub-nodes (tablist and dijitTabPaneWrapper),
+        * so override rule setting border on domNode
+        */
+        border: none;
+
+}
+.claro .dijitBorderContainer-dijitBorderContainer {
+       /* make nested BorderContainers look like a single big widget with lots of splitters */
+       border: 0;
+       padding: 0;
+}
+
+/* Splitters and gutters */
+
+.claro .dijitSplitterH,
+.claro .dijitGutterH {
+       background:none;
+       border:0;
+       height:5px;
+}
+
+.claro .dijitSplitterH .dijitSplitterThumb {
+       background:@border-color none;
+       height:1px;
+       top:2px;
+       width:19px;
+}
+
+.claro .dijitSplitterV,
+.claro .dijitGutterV {
+       background:none;
+       border:0;
+       width:5px;
+       margin: 0;
+}
+
+.claro .dijitSplitterV .dijitSplitterThumb {
+       background:@border-color none;
+       height:19px;
+       left:2px;
+       width:1px;
+       margin: 0;
+}
+
+/* hovered splitter */
+.claro .dijitSplitterHHover {
+       font-size: 1px;
+       background: url("images/splitterHorizontalHover.png") no-repeat center top;
+}
+
+
+.claro .dijitSplitterHHover .dijitSplitterThumb {
+       background:@hovered-border-color none;
+}
+
+.claro .dijitSplitterVHover {
+       font-size: 1px;
+       background: url("images/splitterVerticalHover.png") no-repeat center left;
+}
+
+.claro .dijitSplitterVHover .dijitSplitterThumb {
+       background:@hovered-border-color none;
+}
+
+.dj_ie6 .dijitSplitterHHover,
+.dj_ie6 .claro .dijitSplitterVHover {
+       background-color: @splitter-hovered-background-color;
+       background-image:none;
+}
+
+/* active splitter */
+.claro .dijitSplitterHActive,
+.claro .dijitSplitterVActive {
+       font-size: 1px;
+       background-color:@splitter-dragged-background-color;
+}
index f9f543cd1ef58f5f888d6f9e6f85cda4d5284bee..a7753de1dc0ab4b9a04f42539999691b6069dda5 100644 (file)
@@ -1,17 +1,38 @@
-
+/* ContentPane 
+ *     
+ * .dijitContentPane
+ *     set padding for basic content pane
+ *     
+ * Nested layouts:
+ * 
+ * .dijitTabContainerTop-dijitContentPane,
+ * .dijitTabContainerLeft-dijitContentPane,
+ * .dijitTabContainerBottom-dijitContentPane,
+ * .dijitTabContainerRight-dijitContentPane
+ *     set background-color and padding of ContentPanes nested within TabContainer (can do top, left, bottom, or right) or Accordion Container
+ *
+ * .dijitAccordionContainer-dijitContentPane
+ *     set background-color and padding of ContentPane nested within Accordion
+ *
+ * .dijitSplitContainer-dijitContentPane, 
+ *     set background-color and padding of ContentPane nested within a SplitContainer 
+ *
+ * .dijitBorderContainer-dijitContentPane
+ *     set background-color and padding of ContentPane nested within a BorderContainer 
+ */
 .claro .dijitContentPane {
-       padding: 8px;
-}              
+  padding: 8px;
+}
+/* nested layouts */
 .claro .dijitTabContainerTop-dijitContentPane,
 .claro .dijitTabContainerLeft-dijitContentPane,
 .claro .dijitTabContainerBottom-dijitContentPane,
 .claro .dijitTabContainerRight-dijitContentPane,
 .claro .dijitAccordionContainer-dijitContentPane {
-       background-color: #fff;
-       padding: 8px;           
+  background-color: #ffffff;
+  padding: 8px;
 }
-.claro .dijitSplitContainer-dijitContentPane,
-.claro .dijitBorderContainer-dijitContentPane {
-       background-color: #fff;         
-       padding: 8px;
+.claro .dijitSplitContainer-dijitContentPane, .claro .dijitBorderContainer-dijitContentPane {
+  background-color: #ffffff;
+  padding: 8px;
 }
diff --git a/lib/dijit/themes/claro/layout/ContentPane.less b/lib/dijit/themes/claro/layout/ContentPane.less
new file mode 100644 (file)
index 0000000..83329bd
--- /dev/null
@@ -0,0 +1,43 @@
+/* ContentPane 
+ *     
+ * .dijitContentPane
+ *     set padding for basic content pane
+ *     
+ * Nested layouts:
+ * 
+ * .dijitTabContainerTop-dijitContentPane,
+ * .dijitTabContainerLeft-dijitContentPane,
+ * .dijitTabContainerBottom-dijitContentPane,
+ * .dijitTabContainerRight-dijitContentPane
+ *     set background-color and padding of ContentPanes nested within TabContainer (can do top, left, bottom, or right) or Accordion Container
+ *
+ * .dijitAccordionContainer-dijitContentPane
+ *     set background-color and padding of ContentPane nested within Accordion
+ *
+ * .dijitSplitContainer-dijitContentPane, 
+ *     set background-color and padding of ContentPane nested within a SplitContainer 
+ *
+ * .dijitBorderContainer-dijitContentPane
+ *     set background-color and padding of ContentPane nested within a BorderContainer 
+ */
+
+@import "../variables";
+
+.claro .dijitContentPane {
+       padding: 8px;
+}              
+
+/* nested layouts */
+.claro .dijitTabContainerTop-dijitContentPane,
+.claro .dijitTabContainerLeft-dijitContentPane,
+.claro .dijitTabContainerBottom-dijitContentPane,
+.claro .dijitTabContainerRight-dijitContentPane,
+.claro .dijitAccordionContainer-dijitContentPane {
+       background-color: @pane-background-color;
+       padding: 8px;           
+}
+.claro .dijitSplitContainer-dijitContentPane,
+.claro .dijitBorderContainer-dijitContentPane {
+       background-color: @pane-background-color;               
+       padding: 8px;
+}
\ No newline at end of file
index 95fe2c26253e35cab22862ce7587face8567323a..030e4b7617ee35fbfa7b2fb8b5e9a48cd7825664 100644 (file)
-
+/* TabContainer 
+ * 
+ * Styling TabContainer means styling the TabList and Its content container  (dijitTitlePane)
+ * 
+ * Tab List: (including 4 kinds of tab location)
+ *             .dijitTabContainerTop-tabs     - tablist container at top
+ *             .dijitTabContainerBottom-tabs  - tablist container at bottom
+ *             .dijitTabContainerLeft-tabs    - tablist container at left
+ *             .dijitTabContainerRight-tabs   - tablist container at right
+ * 
+ * Tab Strip Button:
+ *             .dijitTabStripIcon - tab strip button icon
+ *             .dijitTabStripMenuIcon - down arrow icon position
+ *             .dijitTabStripSlideLeftIcon - left arrow icon position
+ *             .dijitTabStripSlideRightIcon - right arrow icon position
+ * 
+ *             .tabStripButtonDisabled - styles for disabled tab strip buttons
+ * 
+ * Tab Button:
+ *             .dijitTabContainerTop-tabs .dijitTabInnerDiv/.dijitTabContent     - styles for top tab button container
+ *             .dijitTabContainerBottom-tabs .dijitTabInnerDiv/.dijitTabContent  - styles for bottom tab button container
+ *             .dijitTabContainerLeft-tabs .dijitTabInnerDiv/.dijitTabContent    - styles for left tab button container
+ *             .dijitTabContainerRight-tabs .dijitTabInnerDiv/.dijitTabContent   - styles for right tab button container
+ * 
+ *             .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabInnerDiv/.dijitTabContent    
+ *                             - styles for selected status of top tab button
+ *             same to Bottom, Left, Right Tabs
+ * 
+ *             .dijitTabHover .dijitTabInnerDiv   - styles when mouse hover on tab buttons
+ *             .dijitTabActive .dijitTabInnerDiv  - styles when mouse down on tab buttons
+ *             .dijitTabChecked .dijitTabInnerDiv  - styles when on buttons of selected tab            
+ * 
+ *             .dijitTabCloseButton - the close action buttons lie at the right top of each tab button on closable tabs
+ *             .dijitTabCloseButtonHover - styles when mouse hover on close action button
+ *             .dijitTabCloseButtonActive - styles when mouse down on close action button
+ * 
+ * Tab Button: (checked status)
+ * 
+ * Tab Content Container:
+ *             .dijitTabContainerTop-dijitContentPane
+ *             .dijitTabContainerBottom-dijitContentPane
+ *             .dijitTabContainerLeft-dijitContentPane
+ *             .dijitTabContainerRight-dijitContentPane - for background and padding
+ * 
+ * Nested Tabs:
+ *             .dijitTabContainerNested - Container for nested tabs
+ *             .dijitTabContainerTabListNested - tab list container for nested tabs
+ */
+/*** some common features ***/
 .claro .dijitTabPaneWrapper {
-       background:#fff;
+  background: #ffffff;
 }
 .claro .dijitTabPaneWrapper,
 .claro .dijitTabContainerTop-tabs,
 .claro .dijitTabContainerBottom-tabs,
 .claro .dijitTabContainerLeft-tabs,
 .claro .dijitTabContainerRight-tabs {
-       
-       border-color: #b5bcc7;
+  /* todo: add common class name for this div */
+
+  border-color: #b5bcc7;
 }
 .claro .dijitTabCloseButton {
-       background: url("images/tabClose.png") no-repeat;
-       width: 14px;
-       height: 14px;
-       margin-left: 5px;
-       margin-right:-3px;
+  background: url("images/tabClose.png") no-repeat;
+  width: 14px;
+  height: 14px;
+  margin-left: 5px;
+  margin-right: -5px;
 }
 .claro .dijitTabCloseButtonHover {
-       background-position:-14px;
+  background-position: -14px;
 }
 .claro .dijitTabCloseButtonActive {
-       background-position:-28px;
+  background-position: -28px;
 }
 .claro .dijitTabSpacer {
-       
-       display: none;
+  /* set the spacer invisible.  note that height:0 doesn't work on IE/quirks, it's still 10px. */
+
+  display: none;
 }
 .claro .dijitTabInnerDiv {
-       background-color:#e6e6e7;
-       -webkit-transition-property:background-color, border;
-       -webkit-transition-duration:.35s;
-       color:#4a4a4a;
+  background-color: #efefef;
+  -webkit-transition-property: background-color, border;
+  -moz-transition-property: background-color, border;
+  transition-property: background-color, border;
+  -webkit-transition-duration: 0.35s;
+  -moz-transition-duration: 0.35s;
+  transition-duration: 0.35s;
+  color: #4a4a4a;
 }
 .claro .dijitTabHover .dijitTabInnerDiv {
-       background-color:#a9d6ff;
-       -webkit-transition-duration:.25s;
-       color:#000;
+  background-color: #abd6ff;
+  -webkit-transition-duration: 0.25s;
+  -moz-transition-duration: 0.25s;
+  transition-duration: 0.25s;
+  color: #000000;
 }
 .claro .dijitTabActive .dijitTabInnerDiv {
-       background-color:#8bc4f9;
-       color:#000;
-       -webkit-transition-duration:.1s;
+  background-color: #7dbefa;
+  color: #000000;
+  -webkit-transition-duration: 0.1s;
+  -moz-transition-duration: 0.1s;
+  transition-duration: 0.1s;
 }
 .claro .dijitTabChecked .dijitTabInnerDiv {
-       background-color:#b2d4f3;
-       color:#000;
+  background-color: #cfe5fa;
+  color: #000000;
 }
 .claro .dijitTabContent {
-       border: 1px solid #b5bcc7;
+  border: 1px solid #b5bcc7;
+}
+.claro .dijitTabHover .dijitTabContent {
+  border-color: #769dc0;
 }
-.claro .dijitTabHover .dijitTabContent,
 .claro .dijitTabActive .dijitTabContent {
-       border-color: #769dc0;
+  border-color: #769dc0;
 }
 .claro .dijitTabChecked .dijitTabContent {
-       color:#000;
-       border-color: #b5bcc7;  
+  color: #000000;
+  border-color: #b5bcc7;
 }
 .claro .tabStripButton .dijitTabInnerDiv {
-       background-color: transparent;
+  background-color: transparent;
 }
 .claro .tabStripButton .dijitTabContent {
-       border: none;
+  border: none;
 }
+/*** end common ***/
+/*************** top tab ***************/
 .claro .dijitTabContainerTop-tabs .dijitTab {
-       top: 1px;       
-       margin-right: 1px;
-       padding-top: 3px;
+  top: 1px;
+  /* used for overlap */
+
+  margin-right: 1px;
+  padding-top: 3px;
 }
 .dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTab {
-       top: 3px;
+  top: 3px;
 }
+/* for top tab padding. change height when status changes */
 .claro .dijitTabContainerTop-tabs .dijitTabContent {
-       padding:3px 8px 3px 4px;
-       border-bottom: 1px;
-       background-image:url("images/tabTop.png");
-       background-position:0px 0px;
-       background-repeat:repeat-x;
-       min-width: 60px;
-       text-align: center;
+  padding: 3px 6px;
+  border-bottom-width: 0;
+  background-image: url("images/tabTop.png");
+  background-position: 0 0;
+  background-repeat: repeat-x;
+  min-width: 60px;
+  text-align: center;
 }
 .claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
-       padding-bottom: 4px;
-       padding-top: 6px;
-}
-.dj_ie .claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
-       border-bottom: none;
+  padding-bottom: 4px;
+  padding-top: 6px;
 }
+/* normal status */
 .claro .dijitTabContainerTop-tabs .dijitTabInnerDiv {
-       background-image:url("images/tabTop.png");
-       background-position:0px -248px;
-       background-position:bottom;
-       background-repeat:repeat-x;
-       box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
-       -webkit-box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
-       -moz-box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
-}
+  background-image: url("images/tabTop.png");
+  background-position: 0 -248px;
+  background-position: bottom;
+  background-repeat: repeat-x;
+  -webkit-box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.04);
+  -moz-box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.04);
+  box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.04);
+}
+/* checked status */
 .claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabInnerDiv {
-       background-image:none;
-       box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
-       -webkit-box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
-       -moz-box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
+  background-image: none;
+  -webkit-box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.05);
+  -moz-box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.05);
+  box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.05);
 }
 .claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
-       background-position:0px -102px;
-       background-repeat:repeat-x;
+  background-position: 0 -102px;
+  background-repeat: repeat-x;
 }
+/** end top tab **/
+/*************** bottom tab ***************/
 .claro .dijitTabContainerBottom-tabs .dijitTab {
-       top: -1px;      
-       margin-right: 1px;
+  top: -1px;
+  /* used for overlap */
+
+  margin-right: 1px;
 }
+/* calculate the position and size */
 .claro .dijitTabContainerBottom-tabs .dijitTabContent {
-       padding:3px 8px 4px 4px;
-       border-top: none;
-       background-image: url("images/tabBottom.png");
-       background-position:0px -249px;
-       background-repeat: repeat-x;
-       background-position:bottom;
-       min-width: 60px;
-       text-align: center;
+  padding: 3px 6px;
+  border-top-width: 0;
+  background-image: url("images/tabBottom.png");
+  background-position: 0 -249px;
+  background-repeat: repeat-x;
+  background-position: bottom;
+  min-width: 60px;
+  text-align: center;
 }
 .claro .dijitTabContainerBottom-tabs .dijitTab {
-       padding-bottom: 3px;
+  padding-bottom: 3px;
 }
+/* normal status */
 .claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
-       background-image: url("images/tabBottom.png");
-       background-position: top;
-       background-repeat: repeat-x;
-       box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
-       -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
-       -moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
-       
-}
+  background-image: url("images/tabBottom.png");
+  background-position: top;
+  background-repeat: repeat-x;
+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+}
+/* checked status */
 .claro .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabContent {
-       padding-bottom: 7px;
-       padding-top: 4px;
-       background-position:0px -119px;
+  padding-bottom: 7px;
+  padding-top: 4px;
+  background-position: 0 -119px;
 }
 .claro .dijitTabContainerBottom-tabs .dijitTabChecked {
-       padding-bottom: 0;
+  padding-bottom: 0;
 }
 .claro .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
-       background-image:none;
-       box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
-       -webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
-       -moz-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
+  background-image: none;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
 }
+/** end bottom tab **/
+/*************** left tab ***************/
 .claro .dijitTabContainerLeft-tabs .dijitTab {
-       left: 1px;      
-       margin-bottom: 1px;
+  border-right-width: 0;
+  left: 1px;
+  /* used for overlap */
+
+  margin-bottom: 1px;
 }
+/* normal status */
 .claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
-       background-image: url("images/tabLeft.png");
-       background-position: -347px -340px;
-       background-repeat: repeat-y;
+  background-image: url("images/tabLeft.png");
+  background-position: -347px -340px;
+  background-repeat: repeat-y;
 }
 .claro .dijitTabContainerLeft-tabs .dijitTabContent {
-       padding:3px 8px 4px 4px;
-       background-image: url("images/tabLeft.png");
-       background-repeat: repeat-y;
-       background-position:0px 0px;
+  padding: 3px 8px 4px 4px;
+  background-image: url("images/tabLeft.png");
+  background-repeat: repeat-y;
+  background-position: 0 0;
 }
+/* checked status */
 .claro .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabContent {
-       padding-right: 9px;
-       border-right: none;
-       background-image: none;
+  padding-right: 9px;
+  border-right: none;
+  background-image: none;
 }
 .claro .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv {
-       background-position:0px -179px;
-       background-repeat:repeat-y;
-       box-shadow: -1px 0px 2px rgba(0, 0, 0, .05);
-       -webkit-box-shadow: -1px 0px 2px rgba(0, 0, 0, .05);
-       -moz-box-shadow: -1px 0px 2px rgba(0, 0, 0, 0.05);
-}
+  background-position: 0 -179px;
+  background-repeat: repeat-y;
+  -webkit-box-shadow: -1px 0 2px rgba(0, 0, 0, 0.05);
+  -moz-box-shadow: -1px 0 2px rgba(0, 0, 0, 0.05);
+  box-shadow: -1px 0 2px rgba(0, 0, 0, 0.05);
+}
+/** end left tab **/
+/*************** right tab ***************/
 .claro .dijitTabContainerRight-tabs .dijitTab {
-       left: -1px;     
-       margin-bottom: 1px;
+  border-left-width: 0;
+  left: -1px;
+  /* used for overlap */
+
+  margin-bottom: 1px;
 }
+/* normal status */
 .claro .dijitTabContainerRight-tabs .dijitTabInnerDiv {
-       background-image: url("images/tabRight.png");
-       background-repeat: repeat-y;
-       background-position: -1px -347px;
+  background-image: url("images/tabRight.png");
+  background-repeat: repeat-y;
+  background-position: -1px -347px;
 }
 .claro .dijitTabContainerRight-tabs .dijitTabContent {
-       padding:3px 8px 4px 4px;
-       background-image: url("images/tabRight.png");
-       background-position:right top;
-       background-repeat: repeat-y;
+  padding: 3px 8px 4px 4px;
+  background-image: url("images/tabRight.png");
+  background-position: right top;
+  background-repeat: repeat-y;
 }
+/* checked status */
 .claro .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabContent {
-       padding-left: 5px;
-       border-left: none;
-       background-image: none;
+  padding-left: 5px;
+  border-left: none;
+  background-image: none;
 }
 .claro .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv {
-       background-position:-348px -179px;
-       box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
-       -webkit-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
-       -moz-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
-}
-.claro .dijitTabContainerTop-tabs .dijitTabInnerDiv,
-.claro .dijitTabContainerTop-tabs .dijitTabContent {
-       border-radius: 2px 2px 0px 0px;
-       -moz-border-radius: 2px 2px 0px 0px;
-       -webkit-border-top-left-radius:2px;
-       -webkit-border-top-right-radius:2px;
-}
-.claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv,
-.claro .dijitTabContainerBottom-tabs .dijitTabContent{
-       border-radius: 0px 0px 2px 2px;
-       -moz-border-radius: 0px 0px 2px 2px;
-       -webkit-border-bottom-right-radius:2px;
-       -webkit-border-bottom-left-radius:2px;
-}
-.claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv,
-.claro .dijitTabContainerLeft-tabs .dijitTabContent{
-       border-radius: 2px 0px 0px 2px;
-       -moz-border-radius: 2px 0px 0px 2px;
-       -webkit-border-top-left-radius:2px;
-       -webkit-border-bottom-left-radius:2px;
-}
-.claro .dijitTabContainerRight-tabs .dijitTabInnerDiv,
-.claro .dijitTabContainerRight-tabs .dijitTabContent{
-       border-radius: 0px 2px 2px 0px;
-       -moz-border-radius: 0px 2px 2px 0px;
-       -webkit-border-top-right-radius:2px;
-       -webkit-border-bottom-right-radius:2px;
-}
+  background-position: -348px -179px;
+  -webkit-box-shadow: 1px 0 2px rgba(0, 0, 0, 0.07);
+  -moz-box-shadow: 1px 0 2px rgba(0, 0, 0, 0.07);
+  box-shadow: 1px 0 2px rgba(0, 0, 0, 0.07);
+}
+/** end right tab **/
+/** round corner **/
+.claro .dijitTabContainerTop-tabs .dijitTabInnerDiv, .claro .dijitTabContainerTop-tabs .dijitTabContent {
+  -moz-border-radius: 2px 2px 0 0;
+  border-radius: 2px 2px 0 0;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv, .claro .dijitTabContainerBottom-tabs .dijitTabContent {
+  -moz-border-radius: 0 0 2px 2px;
+  border-radius: 0 0 2px 2px;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv, .claro .dijitTabContainerLeft-tabs .dijitTabContent {
+  -moz-border-radius: 2px 0 0 2px;
+  border-radius: 2px 0 0 2px;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabInnerDiv, .claro .dijitTabContainerRight-tabs .dijitTabContent {
+  -moz-border-radius: 0 2px 2px 0;
+  border-radius: 0 2px 2px 0;
+}
+/************ left/right scroll buttons + menu button ************/
 .claro .tabStripButton {
-       background-color:#deecf9;
-       border: 1px solid #b5bcc7;
+  background-color: #e9f4fe;
+  border: 1px solid #b5bcc7;
 }
 .claro .dijitTabListContainer-top .tabStripButton {
-       padding: 4px 3px;
-       margin-top:7px;
-       background-image: url("images/tabTop.png");
-       background-position:0px 0px;
+  padding: 4px 3px;
+  margin-top: 7px;
+  background-image: url("images/tabTop.png");
+  background-position: 0 0;
 }
 .claro .dijitTabListContainer-bottom .tabStripButton {
-       padding:5px 3px;
-       margin-bottom:4px;
-       background-image: url("images/tabTop.png");
-       background-position:0px -248px;
-       background-position:bottom;
+  padding: 5px 3px;
+  margin-bottom: 4px;
+  background-image: url("images/tabTop.png");
+  background-position: 0 -248px;
+  background-position: bottom;
 }
 .claro .tabStripButtonHover {
-       background-color:#a6d2fb;
+  background-color: #abd6ff;
 }
 .claro .tabStripButtonActive {
-       background-color:#7dbefa;
+  background-color: #7dbefa;
 }
 .claro .dijitTabStripIcon {
-       height:15px;
-       width:15px;
-       margin: 0 auto;
-       background:url("../form/images/buttonArrows.png") no-repeat -75px 50%;
-       background-color: transparent;
+  height: 15px;
+  width: 15px;
+  margin: 0 auto;
+  background: url("../form/images/buttonArrows.png") no-repeat -75px 50%;
+  background-color: transparent;
 }
-.claro .dijitTabStripSlideRightIcon{
-       background-position: -24px 50%;
+.claro .dijitTabStripSlideRightIcon {
+  background-position: -24px 50%;
 }
 .claro .dijitTabStripMenuIcon {
-       background-position: -51px 50%;
+  background-position: -51px 50%;
 }
-.claro .dijitTabListContainer-top .tabStripButtonDisabled,
-.claro .dijitTabListContainer-bottom .tabStripButtonDisabled {
-       background-color:#dddddd;
-       border:1px solid #c9c9c9;
+/*disabled styles for tab strip buttons*/
+.claro .dijitTabListContainer-top .tabStripButtonDisabled, .claro .dijitTabListContainer-bottom .tabStripButtonDisabled {
+  background-color: #d3d3d3;
+  border: 1px solid #b5bcc7;
+  /* to match border of TabContainer itself */
+
 }
 .claro .tabStripButtonDisabled .dijitTabStripSlideLeftIcon {
-       background-position:-175px 50%;
+  background-position: -175px 50%;
 }
 .claro .tabStripButtonDisabled .dijitTabStripSlideRightIcon {
-       background-position: -124px 50%;
+  background-position: -124px 50%;
 }
 .claro .tabStripButtonDisabled .dijitTabStripMenuIcon {
-       background-position: -151px 50%;
-} 
+  background-position: -151px 50%;
+}
+/* Nested Tabs */
 .claro .dijitTabContainerNested .dijitTabListWrapper {
-       height: auto;
+  height: auto;
 }
 .claro .dijitTabContainerNested .dijitTabContainerTop-tabs {
-       border-bottom:solid 1px #b5bcc7;
-       padding:1px 2px 4px;
-       margin-top:-2px;
+  border-bottom: solid 1px #b5bcc7;
+  padding: 1px 2px 4px;
+  margin-top: -2px;
 }
 .claro .dijitTabContainerTabListNested .dijitTabContent {
-       background:rgba(255, 255, 255, 0) none repeat scroll 0 0;
-       border: none;
-       padding: 4px;
-       border-color: rgba(118,157,192,0);
-       -webkit-transition-property:background-color, border-color;
-       -webkit-transition-duration:.3s;
+  background: rgba(255, 255, 255, 0) none repeat scroll 0 0;
+  border: none;
+  padding: 4px;
+  border-color: rgba(118, 157, 192, 0);
+  -webkit-transition-property: background-color, border-color;
+  -moz-transition-property: background-color, border-color;
+  transition-property: background-color, border-color;
+  -webkit-transition-duration: 0.3s;
+  -moz-transition-duration: 0.3s;
+  transition-duration: 0.3s;
+  -moz-border-radius: 2px;
+  border-radius: 2px;
 }
 .claro .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv {
-       
-       background: none;
-       border: none;
-       top: 0px;
-       box-shadow: none;
-       -webkit-box-shadow: none;
-       -moz-box-shadow: none;
+  /* 4 element selector to override box-shadow setting from above rule:
+        *              .claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabInnerDiv { ... }
+        */
+
+  background: none;
+  border: none;
+  top: 0;
+  /* to override top: 1px/-1px for normal tabs */
+
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
 }
 .claro .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent {
-       background-color:#eaf4fc;
-       border-radius: 2px 2px 2px 2px;
-       -moz-border-radius: 2px 2px 2px 2px;
-       -webkit-border-radius:2px;
-       border:solid 1px #c8dff3;
-       padding: 3px;
-       webkit-transition-duration:.2s;
+  background-color: #e9f4fe;
+  border: solid 1px #cfe5fa;
+  padding: 3px;
+  -webkit-transition-duration: 0.2s;
+  -moz-transition-duration: 0.2s;
+  transition-duration: 0.2s;
 }
 .claro .dijitTabContainerTabListNested .dijitTabHover .tabLabel {
-       text-decoration: none;
+  text-decoration: none;
 }
 .claro .dijitTabContainerTabListNested .dijitTabActive .dijitTabContent {
-       border-radius: 2px 2px 2px 2px;
-       -moz-border-radius: 2px 2px 2px 2px;
-       -webkit-border-radius:2px;
-       border:solid 1px #a8c7e2;
-       padding: 3px;
-       background:#b9d9f5 url("images/tabNested.png") repeat-x;
-       -webkit-transition-duration:.1s;
+  border: solid 1px #769dc0;
+  padding: 3px;
+  background: #abd6ff url("images/tabNested.png") repeat-x;
+  -webkit-transition-duration: 0.1s;
+  -moz-transition-duration: 0.1s;
+  transition-duration: 0.1s;
 }
 .claro .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent {
-       border-radius: 2px 2px 2px 2px;
-       -moz-border-radius: 2px 2px 2px 2px;
-       -webkit-border-radius:2px;
-       padding: 3px;
-       border:solid 1px #a8c7e2;
-       background-position: 0px 105px;
-       background-color:#d4e8f9;
+  padding: 3px;
+  border: solid 1px #769dc0;
+  background-position: 0 105px;
+  background-color: #cfe5fa;
 }
 .claro .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
-       text-decoration: none;
-       background-image:none;
+  text-decoration: none;
+  background-image: none;
 }
 .claro .dijitTabPaneWrapperNested {
-       border: none;
+  border: none;
+  /* prevent double border */
+
 }
 .dj_ie6 .claro .dijitTabContent,
 .dj_ie6 .claro .dijitTabInnerDiv,
 .dj_ie6 .dijitTabListContainer-top .tabStripButton,
-.dj_ie6 .dijitTabListContainer-bottom .tabStripButton{
-       background-image: none;
+.dj_ie6 .dijitTabListContainer-bottom .tabStripButton {
+  background-image: none;
 }
diff --git a/lib/dijit/themes/claro/layout/TabContainer.less b/lib/dijit/themes/claro/layout/TabContainer.less
new file mode 100644 (file)
index 0000000..691900e
--- /dev/null
@@ -0,0 +1,408 @@
+/* TabContainer 
+ * 
+ * Styling TabContainer means styling the TabList and Its content container  (dijitTitlePane)
+ * 
+ * Tab List: (including 4 kinds of tab location)
+ *             .dijitTabContainerTop-tabs     - tablist container at top
+ *             .dijitTabContainerBottom-tabs  - tablist container at bottom
+ *             .dijitTabContainerLeft-tabs    - tablist container at left
+ *             .dijitTabContainerRight-tabs   - tablist container at right
+ * 
+ * Tab Strip Button:
+ *             .dijitTabStripIcon - tab strip button icon
+ *             .dijitTabStripMenuIcon - down arrow icon position
+ *             .dijitTabStripSlideLeftIcon - left arrow icon position
+ *             .dijitTabStripSlideRightIcon - right arrow icon position
+ * 
+ *             .tabStripButtonDisabled - styles for disabled tab strip buttons
+ * 
+ * Tab Button:
+ *             .dijitTabContainerTop-tabs .dijitTabInnerDiv/.dijitTabContent     - styles for top tab button container
+ *             .dijitTabContainerBottom-tabs .dijitTabInnerDiv/.dijitTabContent  - styles for bottom tab button container
+ *             .dijitTabContainerLeft-tabs .dijitTabInnerDiv/.dijitTabContent    - styles for left tab button container
+ *             .dijitTabContainerRight-tabs .dijitTabInnerDiv/.dijitTabContent   - styles for right tab button container
+ * 
+ *             .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabInnerDiv/.dijitTabContent    
+ *                             - styles for selected status of top tab button
+ *             same to Bottom, Left, Right Tabs
+ * 
+ *             .dijitTabHover .dijitTabInnerDiv   - styles when mouse hover on tab buttons
+ *             .dijitTabActive .dijitTabInnerDiv  - styles when mouse down on tab buttons
+ *             .dijitTabChecked .dijitTabInnerDiv  - styles when on buttons of selected tab            
+ * 
+ *             .dijitTabCloseButton - the close action buttons lie at the right top of each tab button on closable tabs
+ *             .dijitTabCloseButtonHover - styles when mouse hover on close action button
+ *             .dijitTabCloseButtonActive - styles when mouse down on close action button
+ * 
+ * Tab Button: (checked status)
+ * 
+ * Tab Content Container:
+ *             .dijitTabContainerTop-dijitContentPane
+ *             .dijitTabContainerBottom-dijitContentPane
+ *             .dijitTabContainerLeft-dijitContentPane
+ *             .dijitTabContainerRight-dijitContentPane - for background and padding
+ * 
+ * Nested Tabs:
+ *             .dijitTabContainerNested - Container for nested tabs
+ *             .dijitTabContainerTabListNested - tab list container for nested tabs
+ */
+
+@import "../variables";
+
+/*** some common features ***/
+.claro .dijitTabPaneWrapper {
+       background:@pane-background-color;
+}
+.claro .dijitTabPaneWrapper,
+.claro .dijitTabContainerTop-tabs,
+.claro .dijitTabContainerBottom-tabs,
+.claro .dijitTabContainerLeft-tabs,
+.claro .dijitTabContainerRight-tabs {
+       /* todo: add common class name for this div */
+       border-color: @border-color;
+}
+.claro .dijitTabCloseButton {
+       background: url("images/tabClose.png") no-repeat;
+       width: 14px;
+       height: 14px;
+       margin-left: 5px;
+       margin-right:-5px;
+}
+.claro .dijitTabCloseButtonHover {
+       background-position:-14px;
+}
+.claro .dijitTabCloseButtonActive {
+       background-position:-28px;
+}
+.claro .dijitTabSpacer {
+       /* set the spacer invisible.  note that height:0 doesn't work on IE/quirks, it's still 10px. */
+       display: none;
+}
+.claro .dijitTabInnerDiv {
+       background-color:@unselected-background-color;
+       .transition-property(background-color, border);
+       .transition-duration(.35s);
+       color:@unselected-text-color;
+}
+.claro .dijitTabHover .dijitTabInnerDiv {
+       background-color:@hovered-background-color;
+       .transition-duration(.25s);
+       color:@hovered-text-color;
+}
+.claro .dijitTabActive .dijitTabInnerDiv {
+       background-color:@pressed-background-color;
+       color:@selected-text-color;
+       .transition-duration(.1s);
+}
+.claro .dijitTabChecked .dijitTabInnerDiv {
+       background-color:@selected-background-color;
+       color:@selected-text-color;
+}
+
+.claro .dijitTabContent {
+       border: 1px solid @border-color;
+}
+.claro .dijitTabHover .dijitTabContent {
+       border-color: @hovered-border-color;
+}
+.claro .dijitTabActive .dijitTabContent {
+       border-color: @pressed-border-color;
+}
+.claro .dijitTabChecked .dijitTabContent {
+       color:@selected-text-color;                     // todo: redundant with .claro .dijitTabChecked .dijitTabInnerDiv above?
+       border-color: @border-color;                    // don't use @selected-border-color because need to match border of TabContainer
+}
+
+.claro .tabStripButton .dijitTabInnerDiv {
+       background-color: transparent;
+}
+.claro .tabStripButton .dijitTabContent {
+       border: none;
+}
+/*** end common ***/
+
+
+/*************** top tab ***************/
+.claro .dijitTabContainerTop-tabs .dijitTab {
+       top: 1px;       /* used for overlap */
+       margin-right: 1px;
+       padding-top: 3px;
+}
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTab {
+       top: 3px;
+}
+/* for top tab padding. change height when status changes */
+.claro .dijitTabContainerTop-tabs .dijitTabContent {
+       padding:3px 6px;
+       border-bottom-width: 0;
+       background-image:url("images/tabTop.png");
+       background-position:0 0;
+       background-repeat:repeat-x;
+       min-width: 60px;
+       text-align: center;
+}
+.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
+       padding-bottom: 4px;
+       padding-top: 6px;
+}
+
+/* normal status */
+.claro .dijitTabContainerTop-tabs .dijitTabInnerDiv {
+       background-image:url("images/tabTop.png");
+       background-position:0 -248px;
+       background-position:bottom;
+       background-repeat:repeat-x;
+       .box-shadow(0 -1px 1px rgba(0, 0, 0, 0.04));
+}
+
+/* checked status */
+.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabInnerDiv {
+       background-image:none;
+       .box-shadow(0 -1px 2px rgba(0, 0, 0, 0.05));
+}
+.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
+       background-position:0 -102px;
+       background-repeat:repeat-x;
+}
+/** end top tab **/
+
+
+/*************** bottom tab ***************/
+.claro .dijitTabContainerBottom-tabs .dijitTab {
+       top: -1px;      /* used for overlap */
+       margin-right: 1px;
+}
+/* calculate the position and size */
+.claro .dijitTabContainerBottom-tabs .dijitTabContent {
+       padding:3px 6px;
+       border-top-width: 0;
+       background-image: url("images/tabBottom.png");
+       background-position:0 -249px;
+       background-repeat: repeat-x;
+       background-position:bottom;
+       min-width: 60px;
+       text-align: center;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTab {
+       padding-bottom: 3px;
+}
+/* normal status */
+.claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
+       background-image: url("images/tabBottom.png");
+       background-position: top;
+       background-repeat: repeat-x;
+       .box-shadow(0 1px 1px rgba(0, 0, 0, 0.04));
+       
+}
+
+/* checked status */
+.claro .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabContent {
+       padding-bottom: 7px;
+       padding-top: 4px;
+       background-position:0 -119px;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabChecked {
+       padding-bottom: 0;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
+       background-image:none;
+       .box-shadow(0 1px 2px rgba(0, 0, 0, 0.05));
+}
+/** end bottom tab **/
+
+/*************** left tab ***************/
+.claro .dijitTabContainerLeft-tabs .dijitTab {
+       border-right-width: 0;
+       left: 1px;      /* used for overlap */
+       margin-bottom: 1px;
+}
+/* normal status */
+.claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+       background-image: url("images/tabLeft.png");
+       background-position: -347px -340px;
+       background-repeat: repeat-y;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabContent {
+       padding:3px 8px 4px 4px;
+       background-image: url("images/tabLeft.png");
+       background-repeat: repeat-y;
+       background-position:0 0;
+}
+/* checked status */
+.claro .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabContent {
+       padding-right: 9px;
+       border-right: none;
+       background-image: none;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv {
+       background-position:0 -179px;
+       background-repeat:repeat-y;
+       .box-shadow(-1px 0 2px rgba(0, 0, 0, .05));
+}
+/** end left tab **/
+
+/*************** right tab ***************/
+.claro .dijitTabContainerRight-tabs .dijitTab {
+       border-left-width: 0;
+       left: -1px;     /* used for overlap */
+       margin-bottom: 1px;
+}
+/* normal status */
+.claro .dijitTabContainerRight-tabs .dijitTabInnerDiv {
+       background-image: url("images/tabRight.png");
+       background-repeat: repeat-y;
+       background-position: -1px -347px;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabContent {
+       padding:3px 8px 4px 4px;
+       background-image: url("images/tabRight.png");
+       background-position:right top;
+       background-repeat: repeat-y;
+}
+/* checked status */
+.claro .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabContent {
+       padding-left: 5px;
+       border-left: none;
+       background-image: none;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv {
+       background-position:-348px -179px;
+       .box-shadow(1px 0 2px rgba(0, 0, 0, 0.07));
+}
+/** end right tab **/
+
+/** round corner **/
+.claro .dijitTabContainerTop-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerTop-tabs .dijitTabContent {
+       .border-radius(2px 2px 0 0);
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerBottom-tabs .dijitTabContent{
+       .border-radius(0 0 2px 2px);
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerLeft-tabs .dijitTabContent{
+       .border-radius(2px 0 0 2px);
+}
+
+.claro .dijitTabContainerRight-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerRight-tabs .dijitTabContent{
+       .border-radius(0 2px 2px 0);
+}
+
+/************ left/right scroll buttons + menu button ************/
+.claro .tabStripButton {
+       background-color:@button-background-color;
+       border: 1px solid @border-color;
+}
+.claro .dijitTabListContainer-top .tabStripButton {
+       padding: 4px 3px;
+       margin-top:7px;
+       background-image: url("images/tabTop.png");
+       background-position:0 0;
+}
+.claro .dijitTabListContainer-bottom .tabStripButton {
+       padding:5px 3px;
+       margin-bottom:4px;
+       background-image: url("images/tabTop.png");
+       background-position:0 -248px;
+       background-position:bottom;
+}
+.claro .tabStripButtonHover {
+       background-color:@hovered-background-color;
+}
+.claro .tabStripButtonActive {
+       background-color:@pressed-background-color;
+}
+.claro .dijitTabStripIcon {
+       height:15px;
+       width:15px;
+       margin: 0 auto;
+       background:url("../form/images/buttonArrows.png") no-repeat -75px 50%;
+       background-color: transparent;
+}
+.claro .dijitTabStripSlideRightIcon{
+       background-position: -24px 50%;
+}
+.claro .dijitTabStripMenuIcon {
+       background-position: -51px 50%;
+}
+
+/*disabled styles for tab strip buttons*/
+.claro .dijitTabListContainer-top .tabStripButtonDisabled,
+.claro .dijitTabListContainer-bottom .tabStripButtonDisabled {
+       background-color:@tab-disabled-background-color;
+       border:1px solid @border-color; /* to match border of TabContainer itself */
+}
+.claro .tabStripButtonDisabled .dijitTabStripSlideLeftIcon {
+       background-position:-175px 50%;
+}
+.claro .tabStripButtonDisabled .dijitTabStripSlideRightIcon {
+       background-position: -124px 50%;
+}
+.claro .tabStripButtonDisabled .dijitTabStripMenuIcon {
+       background-position: -151px 50%;
+} 
+/* Nested Tabs */
+.claro .dijitTabContainerNested .dijitTabListWrapper {
+       height: auto;
+}
+.claro .dijitTabContainerNested .dijitTabContainerTop-tabs {
+       border-bottom:solid 1px @border-color;
+       padding:1px 2px 4px;
+       margin-top:-2px;
+}
+.claro .dijitTabContainerTabListNested .dijitTabContent {
+       background:rgba(255, 255, 255, 0) none repeat scroll 0 0;
+       border: none;
+       padding: 4px;
+       border-color: rgba(118,157,192,0);
+       .transition-property(background-color, border-color);
+       .transition-duration(.3s);
+       .border-radius(2px);
+}
+.claro .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv {
+       /* 4 element selector to override box-shadow setting from above rule:
+        *              .claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabInnerDiv { ... }
+        */
+       background: none;
+       border: none;
+       top: 0;/* to override top: 1px/-1px for normal tabs */
+       .box-shadow(none);
+}
+.claro .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent {
+       background-color: @nestedtab-hovered-background-color;
+       border:solid 1px @nestedtab-hovered-border-color;
+       padding: 3px;
+       .transition-duration(.2s);
+}
+.claro .dijitTabContainerTabListNested .dijitTabHover .tabLabel {
+       text-decoration: none;
+}
+.claro .dijitTabContainerTabListNested .dijitTabActive .dijitTabContent {
+       border:solid 1px @nestedtab-selected-border-color;
+       padding: 3px;
+       background: @nestedtab-selected-background-color url("images/tabNested.png") repeat-x;
+       .transition-duration(.1s);
+}
+.claro .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent {
+       padding: 3px;
+       border:solid 1px @selected-border-color;
+       background-position: 0 105px;
+       background-color:@selected-background-color;
+}
+.claro .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
+       text-decoration: none;
+       background-image:none;
+}
+.claro .dijitTabPaneWrapperNested {
+       border: none;/* prevent double border */
+}
+
+
+.dj_ie6 .claro .dijitTabContent,
+.dj_ie6 .claro .dijitTabInnerDiv,
+.dj_ie6 .dijitTabListContainer-top .tabStripButton,
+.dj_ie6 .dijitTabListContainer-bottom .tabStripButton{
+       background-image: none;
+}
index 156cea977af64b2bb79da09937a29963aa604406..89fdff09733984d1b5a02fb024acf84c7f7c66d6 100644 (file)
@@ -1,67 +1,67 @@
-.claro .dijitTabContainerTop-tabs .dijitTabRtl,
-.claro .dijitTabContainerBottom-tabs .dijitTabRtl {
-       margin-right: 0;
-       margin-left: 1px;
+.claro .dijitTabContainerTop-tabs .dijitTabRtl, .claro .dijitTabContainerBottom-tabs .dijitTabRtl {
+  margin-right: 0;
+  margin-left: 1px;
 }
 .claro .dijitTabRtl {
-       -moz-box-orient:horizontal;
-       text-align: right;
+  -moz-box-orient: horizontal;
+  text-align: right;
 }
 .dj_ie7 .claro .dijitTabRtl .dijitTabContent {
-       display: block;
-       left: 0;
+  display: block;
+  left: 0;
 }
-.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl,
-.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabCheckedRtl {
-       top: 1px;
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl, .dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabCheckedRtl {
+  top: 1px;
 }
 .dj_ie7 .claro .tabStripButtonRtl .dijitButtonContents,
-.dj_ie8 .claro .tabStripButtonRtl .dijitButtonContents,        
+.dj_ie8 .claro .tabStripButtonRtl .dijitButtonContents,
 .dj_ie6 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
 .dj_ie6 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
 .dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
 .dj_ie7 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
 .dj_iequirks .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
 .dj_iequirks .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv {
-       float:left;
+  float: left;
 }
 .dj_ie6 .claro .dijitTabRtl .tabLabel,
 .dj_ie6 .claro .dijitTabContainerRight-tabs .dijitTabRtl,
 .dj_ie6 .claro .dijitTabContainerLeft-tabs .dijitTabRtl,
 .dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtl .dijitTabInnerDiv,
 .dj_ie7 .claro .dijitTabContainerLeft-tabs .dijitTabRtl .dijitTabInnerDiv {
-       
-       zoom:1;
+  /*Make the .tablabel have width in ie6 with haslayout property, fix Close icon position bug*/
+
+  zoom: 1;
 }
-.dj_ie6 .claro .dijitTabRtl .dijitTabCloseButton,
-.dj_ie7 .claro .dijitTabRtl .dijitTabCloseButton,
-.dj_iequirks .claro .dijitTabRtl .dijitTabCloseButton {
-       margin-right:5px;
+.dj_ie6 .claro .dijitTabRtl .dijitTabCloseButton, .dj_ie7 .claro .dijitTabRtl .dijitTabCloseButton, .dj_iequirks .claro .dijitTabRtl .dijitTabCloseButton {
+  margin-right: 5px;
 }
-.dj_ie6 .claro .dijitTabContainerRightRtl .dijitTabContainerRight-tabs,
-.dj_ie6 .claro .dijitTabContainerLeftRtl .dijitTabContainerLeft-tabs {
-       width:1%;
+.dj_ie6 .claro .dijitTabContainerRightRtl .dijitTabContainerRight-tabs, .dj_ie6 .claro .dijitTabContainerLeftRtl .dijitTabContainerLeft-tabs {
+  width: 1%;
 }
-.dj_ie6 .dijitTabContainerTopStrip,
-.dj_ie6 .dijitTabContainerBottomStrip {
-       position:absolute;
+.dj_ie6 .dijitTabContainerTopStrip, .dj_ie6 .dijitTabContainerBottomStrip {
+  position: absolute;
 }
 .dj_iequirks .claro .dijitTabContainerTopRtl .dijitTabContainerTopStrip {
-       padding-top: 10px;
+  padding-top: 10px;
 }
 .dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtlChecked .dijitTabInnerDiv {
-       background-position:-341px -179px;
+  background-position: -341px -179px;
 }
-.dj_ie6 .dijitTabContainerTopRtl .dijitTabStripIcon,
-.dj_ie6 .dijitTabContainerBottomRtl .dijitTabStripIcon {
-   position: relative;
+.dj_ie6 .dijitTabContainerTopRtl .dijitTabStripIcon, .dj_ie6 .dijitTabContainerBottomRtl .dijitTabStripIcon {
+  position: relative;
 }
-.dj_ie6-rtl .claro .dijitTabContainerTop-tabs {        
-       
-       padding-left: 3px;
+.dj_ie6-rtl .claro .dijitTabContainerTop-tabs {
+  /* this strange rule prevents IE6 bug in themeTester.html?dir=rtl upon closing
+        * "Closable" tab, where the other tabs disappear
+        */
+
+  padding-left: 3px;
 }
 .dj_iequirks-rtl .claro .dijitTabListWrapper {
-       
-       border-left: 1px solid #fff;
-       border-right: 1px solid #fff;
+  /* this strange rule prevents IE6 bug in themeTesterQuirk.html?dir=rtl upon closing
+        * "Closable" tab, where the other tabs disappear
+        */
+
+  border-left: 1px solid #ffffff;
+  border-right: 1px solid #ffffff;
 }
diff --git a/lib/dijit/themes/claro/layout/TabContainer_rtl.less b/lib/dijit/themes/claro/layout/TabContainer_rtl.less
new file mode 100644 (file)
index 0000000..eaada0d
--- /dev/null
@@ -0,0 +1,81 @@
+@import "../variables";
+
+.claro .dijitTabContainerTop-tabs .dijitTabRtl,
+.claro .dijitTabContainerBottom-tabs .dijitTabRtl {
+       margin-right: 0;
+       margin-left: 1px;
+}
+.claro .dijitTabRtl {
+       -moz-box-orient:horizontal;
+       text-align: right;
+}
+.dj_ie7 .claro .dijitTabRtl .dijitTabContent {
+       display: block;
+       left: 0;
+}
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl,
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabCheckedRtl {
+       top: 1px;
+}
+
+// Note that .tabStripButtonRtl .dijitButtonContents needed for IE8 quirks but breaks IE6 quirks
+.dj_ie7 .claro .tabStripButtonRtl .dijitButtonContents,
+.dj_ie8 .claro .tabStripButtonRtl .dijitButtonContents,
+.dj_ie6 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie6 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_iequirks .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_iequirks .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv {
+       float:left;
+}
+.dj_ie6 .claro .dijitTabRtl .tabLabel,
+.dj_ie6 .claro .dijitTabContainerRight-tabs .dijitTabRtl,
+.dj_ie6 .claro .dijitTabContainerLeft-tabs .dijitTabRtl,
+.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerLeft-tabs .dijitTabRtl .dijitTabInnerDiv {
+       /*Make the .tablabel have width in ie6 with haslayout property, fix Close icon position bug*/
+       zoom:1;
+}
+.dj_ie6 .claro .dijitTabRtl .dijitTabCloseButton,
+.dj_ie7 .claro .dijitTabRtl .dijitTabCloseButton,
+.dj_iequirks .claro .dijitTabRtl .dijitTabCloseButton {
+       margin-right:5px;
+}
+
+.dj_ie6 .claro .dijitTabContainerRightRtl .dijitTabContainerRight-tabs,
+.dj_ie6 .claro .dijitTabContainerLeftRtl .dijitTabContainerLeft-tabs {
+       width:1%;
+}
+
+.dj_ie6 .dijitTabContainerTopStrip,
+.dj_ie6 .dijitTabContainerBottomStrip {
+       position:absolute;
+}
+.dj_iequirks .claro .dijitTabContainerTopRtl .dijitTabContainerTopStrip {
+       padding-top: 10px;
+}
+.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtlChecked .dijitTabInnerDiv {
+       background-position:-341px -179px;
+}
+
+.dj_ie6 .dijitTabContainerTopRtl .dijitTabStripIcon,
+.dj_ie6 .dijitTabContainerBottomRtl .dijitTabStripIcon {
+   position: relative;
+}
+
+
+.dj_ie6-rtl .claro .dijitTabContainerTop-tabs {        
+       /* this strange rule prevents IE6 bug in themeTester.html?dir=rtl upon closing
+        * "Closable" tab, where the other tabs disappear
+        */
+       padding-left: 3px;
+}
+
+.dj_iequirks-rtl .claro .dijitTabListWrapper {
+       /* this strange rule prevents IE6 bug in themeTesterQuirk.html?dir=rtl upon closing
+        * "Closable" tab, where the other tabs disappear
+        */
+       border-left: 1px solid @pane-background-color;
+       border-right: 1px solid @pane-background-color;
+}
index bf232406fe230aee24256395c219f2b7f723153e..dbcfc851b0df962269644ce679bcff10f84cee2c 100644 (file)
Binary files a/lib/dijit/themes/claro/layout/images/tabBottom.png and b/lib/dijit/themes/claro/layout/images/tabBottom.png differ
index db7626ea8fb6260bba7a72eb6c1a445f8139339a..2822487ed7f0ca9b16066e12f20cf90137b7ef06 100644 (file)
Binary files a/lib/dijit/themes/claro/layout/images/tabTop.png and b/lib/dijit/themes/claro/layout/images/tabTop.png differ
diff --git a/lib/dijit/themes/claro/variables.less b/lib/dijit/themes/claro/variables.less
new file mode 100644 (file)
index 0000000..8d09c25
--- /dev/null
@@ -0,0 +1,189 @@
+// General
+@text-color: #000000;                          // Text color for enabled widgets
+
+@border-color: #b5bcc7;                                // Border color for (enabled, unhovered) TextBox, Slider, Accordion, BorderContainer, TabContainer
+@popup-border-color: #769dc0;          // Border for Dialog, Menu, Tooltip.   Must also update tooltip.png (the arrow image file) to match
+@minor-border-color: #d3d3d3;          // Color of borders inside widgets: horizontal line in Calendar between weeks, around color swatches in ColorPalette, above Dialog action bar
+
+@disabled-border-color: #d3d3d3;       // Border color for disabled/readonly Button, TextBox etc. widgets
+@disabled-background-color: #efefef;// Disabled button, textbox, etc.
+@disabled-text-color: #818181;         // Text color for disabled/readonly widgets
+
+@unselected-background-color: #efefef;// Background color for unselected/unopened tab button, accordion pane, TitlePane, Menu items
+@unselected-text-color: #4a4a4a;       // Text color for unselected/unopened tab button, accordion pane, TitlePane, Menu items
+
+@hovered-border-color: #769dc0;                // Hover of textbox, tab label, BorderContainer splitter, Calendar, etc.
+@hovered-background-color: #abd6ff;    // Background color for hover of Button, MenuBar, Accordion pane, Calendar... anything that has a (non-white) color to start with and gets darker on hover
+@hovered-text-color: @text-color;      // Used for title of select Accordion pane, label of select tab, hovered Menu item, etc.
+
+@pressed-border-color: #769dc0;                // During click on Calendar day, Slider up/down buttons, tab button, etc.
+@pressed-background-color: #7dbefa;    // Background color while clicking on Accordion/TitlePane title bar, tab button, Calendar day, Toolbar button, Tree row.
+
+@selected-border-color: #769dc0;       // Selected AccordionPane, tab of nested TabContainer (but plain TabContainer is special)
+@selected-background-color: #cfe5fa;// Selected Accordion pane, nested tab label, Tree row
+@selected-text-color: @text-color;     // title of selected Accordion pane, label of selected tab, hovered Menu item, etc.
+
+@bar-background-color: #efefef;                // MenuBar, Toolbar, action bar at bottom of dialog
+@pane-background-color: #fff;          // Background color of Accordion panes, Dialogs, etc.
+@popup-background-color: #fff;         // Background for Dialog.   TODO: currently use for ColorPalette, maybe should change.
+
+
+
+// Buttons
+@button-border-color: #769dc0;                         // Border for (stand-alone) buttons in normal, hovered, or active state
+@button-background-color: #e9f4fe;                     // Background color for (unhovered) buttons
+@button-hovered-background-color: #abd6ff;     // Background color for hovered buttons
+@button-pressed-background-color: #abd6ff;     // Background color for active buttons
+@button-border-radius: 4px;                                    // Rounded corner radius for buttons (except in toolbar)
+
+// Input widgets
+@focused-border-color: #769dc0;                                // Focused textbox, editor, select, etc.
+@error-border-color: #d46464;                          // Border for textbox in error state
+@error-focused-border-color: #ce4f4f;          // Border of textbox in error state, and focused
+@erroricon-background-color: #d46464;          // Background color for exclamation point validation icon (for TextBox in error state)
+@textbox-background-color: #fff;                       // Default background color of TextBox based widgets
+@textbox-hovered-background-color: #e9f4fe;    // Background color when hovering a unfocused TextBox, Select, Editor, or other input widget
+@textbox-focused-background-color: @textbox-background-color;
+@textbox-error-background-color: @textbox-background-color;
+@textbox-disabled-background-color: @disabled-background-color;
+
+@textbox-padding: 2px;                                         // Padding for Textbox, Textarea, etc.
+
+// CheckBox, RadioButton
+@focus-outline-color: #4a4a4a;                         // Color for artificial focus outline around labels of checkboxes
+
+// TabContainer
+@nestedtab-hovered-background-color: @textbox-hovered-background-color;
+@nestedtab-hovered-border-color: #cfe5fa;
+@nestedtab-selected-border-color: @selected-border-color;
+@nestedtab-selected-background-color: #abd6ff;
+@tab-disabled-background-color: #d3d3d3;               // For disabled tabs of a TabContainer (not officially supported)
+
+// Arrow buttons (stand alone, or inside ComboBox / ComboButton / Spinner / etc.
+@arrowbutton-background-color: #efefef;
+@arrowbutton-hovered-background-color: #abd6ff;        // Color of arrow when hovering ComboBox.   But hovering Spinner doesn't change arrow color (TODO)
+@arrowbutton-pressed-background-color: #abd6ff;
+@arrowbutton-inner-border-color: #fff;                 // Typically the arrows have an inner white border (a.k.a. padding) and then an outer black-ish border
+
+// Slider
+// Note: any changes here require corresponding changes in form/images/sliderThumbs.png
+@slider-fullbar-background-color: #cfe5fa;                     // Background color for part of slider bar before (to the left or below) the handle
+@slider-remainingbar-background-color: #fff;           // Background color for part of slider bar after (to the right or above) the handle
+@slider-hovered-fullbar-background-color: #abd6ff;     // Background color for part of bar of hovered slider before (to the left or below) the handle
+@slider-hovered-remainingbar-background-color: #fff;// Background color for part of bar of hovered slider after (to the right or above) the handle
+@slider-hoveredButton-background-color: #fff;          // Background color of slider increment/decrement buttons when mouse is over slider but not over the buttons
+@slider-focused-fullbar-background-color: #abd6ff;     // Background color for part of bar of focused slider before (to the left or below) the handle
+@slider-focused-remainingbar-background-color: #fff;// Background color for part of bar of focused slider after (to the right or above) the handle
+@slider-button-hovered-background-color: #cfe5fa;      // Background color of slider increment/decrement buttons when mouse is over the buttons
+@slider-button-pressed-background-color: #abd6ff;      // Background color of slider increment/decrement buttons while button is depressed
+
+// Select, ComboBox
+@select-dropdownitem-background-color: #fff;                   // Background color for items in the drop down list of a ComboBox/Select
+@select-dropdownitem-hovered-background-color: #7dbefa;        // Background color for the hovered item in the drop down list of a ComboBox/Select
+@select-matchedtext-background-color: #abd6ff;                 // Background color of text in ComboBox drop down that matches typed in phrase
+
+// Menus
+@menu-background-color: @popup-background-color;
+
+// Calendar
+@calendar-background-color: #cfe5fa;
+@calendar-currentmonth-background-color: #fff;         // Background color for days of the current month
+@calendar-adjacentmonth-background-color: #e9f4fe;     // Background color used for days from previous or next month
+@calendar-adjacentmonth-text-color: #769dc0;           // Text color used for days from previous or next month
+@calendar-date-pressed-border-color: #fff;                     // For some reason pressing a day of the month (as opposed to hovering it) makes the border go away, is this intentional?
+@calendar-date-pressed-background-color: @pressed-background-color;
+@calendar-date-selected-border-color: @selected-border-color;
+@calendar-date-selected-background-color: #abd6ff;
+@calendar-button-hovered-background-color: #e9f4fe;    // for hover or next/previous year, and month drop down (TODO: border and background are built in to calendarArrows.png, can't control from here)
+@calendar-button-hovered-border-color: #fff;           // for hover or next/previous year, and month drop down
+@calendar-button-pressed-background-color: #cfe5fa;
+@calendar-button-pressed-border-color: @pressed-border-color;
+
+
+// ProgressBar
+@progressbar-border-color: @popup-border-color;        // Border color of progress bar
+@progressbar-full-background-color:#abd6ff;            // Background color for part of progress bar indicating amount completed
+@progressbar-empty-background-color: #fff;             // Background color for part of progress bar indicating amount remaining
+@progressbar-text-color: @text-color;                  // Color of progress bar text (ex: "35%").  Must contrast with both empty and full background colors.
+
+// TimePicker
+@timepicker-minorvalue-background-color: #efefef;      // For 3:15, 3:30, 3:45 but not 3:00 or 4:00
+@timepicker-minorvalue-text-color: #818181;
+@timepicker-majorvalue-background-color: #e9f4fe;      // For 3:00, 4:00, 5:00, etc.
+@timepicker-value-hovered-background-color: #7dbefa;
+@timepicker-value-hovered-text-color: @hovered-text-color;
+@timepicker-arrow-hovered-background-color: #abd6ff;
+
+// ColorPalette
+@colorpalette-background-color: #fff;
+@swatch-border-color: @minor-border-color;
+@swatch-hovered-border-color: #000;
+@swatch-selected-border-color: #000;
+
+// Dialog
+@dialog-underlay-color: #fff;                  // the thing that grays out the screen when a dialog is shown
+@dialog-titlebar-border-color: #fff;   // Inner border around the title sectionof a Dialog, inside the main border of the Dialog and the border between title and content
+@dialog-titlebar-background-color: #abd6ff;
+
+// BorderContainer
+@splitter-hovered-background-color: #cfe5fa;   // Color of splitter when user hovers it, before mouse down
+@splitter-dragged-background-color: #abd6ff;   // Color of splitter while it's being dragged
+
+// Toolbar
+@toolbar-button-checked-background-color: #fff;                                                                // a toggled-on button in the toolbar
+@toolbar-combobutton-hovered-unhoveredsection-background-color: #f4ffff;       // when user hovers a ComboButton in a Toolbar, the other half of the button turns this color
+@toolbar-button-border-radius: 2px;                    // Rounded corner radius for buttons for buttons in toolbar
+
+// DnD
+@dnd-avatar-background-color: #fff;                                    // Background color of little Dialog-type box indicating dragged items
+@dnd-avatar-header-background-color: #f58383;          // Title bar for dragged items
+@dnd-avatar-candrop-header-background-color: #97e68d;// Title bar for dragged items when they can be dropped
+@dnd-dropseparator-color: #769dc0;                                     // Color of line indicating that user is about to drop between items A & B
+
+// Document level
+@document-text-color: #131313;                                                                 // Text color for document itself (text outside of widgets)
+@document-shadedsection-background-color: @bar-background-color;// background color used for <pre>, <code>, and table header rows
+@document-border-color: #d3d3d3;                                                               // Border for <pre>, <code>, tables, etc.
+
+// Mixins
+
+.border-radius (@radius) {
+       -moz-border-radius: @radius;
+       border-radius: @radius;
+}
+
+.box-shadow (@value) {
+       -webkit-box-shadow: @value;
+       -moz-box-shadow: @value;
+       box-shadow: @value;
+}
+
+.transition-property (@value) {
+       -webkit-transition-property: @value;
+       -moz-transition-property: @value;
+       transition-property: @value;
+}
+
+.transition-property (@value1, @value2) {
+       -webkit-transition-property: @value1, @value2;
+       -moz-transition-property: @value1, @value2;
+       transition-property: @value1, @value2;
+}
+
+.transition-duration (@value) {
+       -webkit-transition-duration: @value;
+       -moz-transition-duration: @value;
+       transition-duration: @value;
+}
+
+.transition-duration (@value1, @value2) {
+       -webkit-transition-duration: @value1, @value2;
+       -moz-transition-duration: @value1, @value2;
+       transition-duration: @value1, @value2;
+}
+
+.transition-timing-function (@value) {
+       -webkit-transition-timing-function: @value;
+       -moz-transition-timing-function: @value;
+       transition-timing-function: @value;
+}
index 0d8302344ee870919e3972498e8f561ebdb7db3c..b6d57dca16aae304e69c2f920122b09489866e8f 100644 (file)
@@ -1,6 +1,19 @@
+/*
+       Essential styles that themes can inherit.
+       In other words, works but doesn't look great.
+*/
+
+
+
+/****
+               GENERIC PIECES
+ ****/
 
 .dijitReset {
-       
+       /* Use this style to null out padding, margin, border in your template elements
+               so that page specific styles don't break them.
+               - Use in all TABLE, TR and TD tags.
+       */
        margin:0;
        border:0;
        padding:0;
        color: inherit;
 }
 .dijit_a11y .dijitReset {
-       -moz-appearance: none; 
+       -moz-appearance: none; /* remove predefined high-contrast styling in Firefox */
 }
+
 .dijitInline {
-       
-       display:inline-block;                   
-       #zoom: 1; 
-       #display:inline; 
+       /*  To inline block elements.
+               Similar to InlineBox below, but this has fewer side-effects in Moz.
+               Also, apparently works on a DIV as well as a FIELDSET.
+       */
+       display:inline-block;                   /* webkit and FF3 */
+       #zoom: 1; /* set hasLayout:true to mimic inline-block */
+       #display:inline; /* don't use .dj_ie since that increases the priority */
        border:0;
        padding:0;
        vertical-align:middle;
-       #vertical-align: auto;  
+       #vertical-align: auto;  /* makes TextBox,Button line up w/native counterparts on IE6 */
 }
+
 .dijitHidden {
-       
+       /* To hide unselected panes in StackContainer etc. */
        display: none !important;
 }
+
 .dijitVisible {
-       
-       display: block !important;      
-       position: relative;                     
+       /* To show selected pane in StackContainer etc. */
+       display: block !important;      /* override user's display:none setting via style setting or indirectly via class */
+       position: relative;                     /* to support setting width/height, see #2033 */
 }
+
 .dijitInputContainer {
-       
+       /* for positioning of placeHolder */
        #zoom: 1;
        overflow: hidden;
-       float: none !important; 
-       position:relative;
+       float: none !important; /* needed by FF to squeeze the INPUT in */
+       position: relative;
+       vertical-align: middle;
+       #display: inline;
 }
+
 .dj_ie INPUT.dijitTextBox,
 .dj_ie .dijitTextBox INPUT {
        font-size: 100%;
@@ -48,7 +71,7 @@
        text-align: center;
 }
 .dijitTextBox INPUT.dijitInputField {
-       
+       /* override unreasonable user styling of buttons and icons */
        padding-left: 0 !important;
        padding-right: 0 !important;
 }
        display: none;
 }
 .dijitInlineTable {
-       
+       /* To inline tables with a given width set (otherwise, use dijitInline above) */
        display:inline-table;
-       display:inline-block;           
-       #zoom: 1; 
-       #display:inline; 
+       display:inline-block;           /* webkit and FF3 */
+       #zoom: 1; /* set hasLayout:true to mimic inline-block */
+       #display:inline; /* don't use .dj_ie since that increases the priority */
        box-sizing: content-box; -moz-box-sizing: content-box;
        border:0;
        padding:0;
 }
+
 .dijitTeeny {
        font-size:1px;
        line-height:1px;
 }
+
 .dijitOffScreen {
        position: absolute;
-       visibility: hidden;
        left: 50%;
        top: -10000px;
 }
+
+/*
+ * Popup items have a wrapper div (dijitPopup)
+ * with the real popup inside, and maybe an iframe too
+ */
 .dijitPopup {
        position: absolute;
        background-color: transparent;
        border: 0;
        padding: 0;
 }
-.dijit_a11y .dijitPopup,
-.dijit_ally .dijitPopup DIV,
-.dijit_a11y .dijitPopup TABLE,
-.dijit_a11y .dijitTooltipContainer {
-       background-color: white !important;
-}
+
 .dijitPositionOnly {
-       
+       /* Null out all position-related properties */
        padding: 0 !important;
        border: 0 !important;
        background-color: transparent !important;
        height: auto !important;
        width: auto !important;
 }
+
 .dijitNonPositionOnly {
-       
+       /* Null position-related properties */
        float: none !important;
        position: static !important;
        margin: 0 0 0 0 !important;
        vertical-align: middle !important;
 }
+
 .dijitBackgroundIframe {
-       
+       /* iframe used to prevent problems with PDF or other applets overlaying menus etc */
        position: absolute;
        left: 0;
        top: 0;
        padding: 0;
        margin: 0;
 }
+
 .dijitDisplayNone {
-       
+       /* hide something.  Use this as a class rather than element.style so another class can override */
        display:none !important;
 }
+
 .dijitContainer {
-       
-       overflow: hidden;       
-}
-.dijit_a11y * {
-       background-image:none !important;
+       /* for all layout containers */
+       overflow: hidden;       /* need on IE so something can be reduced in size, and so scrollbars aren't temporarily displayed when resizing */
 }
+
+/****
+               A11Y
+ ****/
 .dijit_a11y .dijitIcon,
-.dijit_a11y DIV.dijitArrowButtonInner, 
+.dijit_a11y DIV.dijitArrowButtonInner, /* is this only for Spinner?  if so, it should be deleted */
 .dijit_a11y SPAN.dijitArrowButtonInner,
 .dijit_a11y IMG.dijitArrowButtonInner,
-.dijit_a11y .dijitCalendarIncrementControl {
-       
+.dijit_a11y .dijitCalendarIncrementControl,
+.dijit_a11y .dijitTreeExpando {
+       /* hide icon nodes in high contrast mode; when necessary they will be replaced by character equivalents
+        * exception for INPUT.dijitArrowButtonInner, because the icon and character are controlled by the same node */
        display: none;
 }
 .dijitSpinner DIV.dijitArrowButtonInner {
-       display: block; 
+       display: block; /* override previous rule */
 }
+
 .dijit_a11y .dijitA11ySideArrow {
-       display: inline !important; 
+       display: inline !important; /* display text instead */
        cursor: pointer;
 }
+
+/*
+ * Since we can't use shading in a11y mode, and since the underline indicates today's date,
+ * use a border to show the selected date.
+ * Avoid screen jitter when switching selected date by compensating for the selected node's
+ * border w/padding on other nodes.
+ */
 .dijit_a11y .dijitCalendarDateLabel {
        padding: 1px;
 }
 .dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
        border-style: dotted !important;
        border-width: 1px;
-       padding: 0px;
+       padding: 0;
 }
 .dijit_a11y .dijitCalendarDateTemplate {
-       padding-bottom: 0.1em !important;       
-}
-.dijit_a11y .dijit * {
-       background:white !important;
-       color:black !important;
+       padding-bottom: 0.1em !important;       /* otherwise bottom border doesn't appear on IE */
 }
 .dijit_a11y .dijitButtonNode {
-       border-color: black!important;
-       border-style: outset!important;
-       border-width: medium!important;
+       border: black outset medium !important;
+
+       /* In claro, hovering a toolbar button reduces padding and adds a border.
+        * Not needed in a11y mode since Toolbar buttons always have a border.
+        */
+       padding: 0 !important;
 }
+
 .dijit_a11y .dijitTextBoxReadOnly .dijitInputField,
 .dijit_a11y .dijitTextBoxReadOnly .dijitButtonNode {
        border-style: outset!important;
        border-color: #999 !important;
        color:#999 !important;
 }
+
+/* button inner contents - labels, icons etc. */
 .dijitButtonNode * {
        vertical-align: middle;
 }
 .dijitButtonNode .dijitArrowButtonInner {
-       
+       /* the arrow icon node */
        background: no-repeat center;
        width: 12px;
        height: 12px;
-       direction: ltr; 
+       direction: ltr; /* needed by IE/RTL */
 }
+
+/****
+       3-element borders:  ( dijitLeft + dijitStretch + dijitRight )
+       These were added for rounded corners on dijit.form.*Button but never actually used.
+ ****/
+
 .dijitLeft {
-       
+       /* Left part of a 3-element border */
        background-position:left top;
        background-repeat:no-repeat;
 }
+
 .dijitStretch {
-       
-       white-space:nowrap;                     
+       /* Middle (stretchy) part of a 3-element border */
+       white-space:nowrap;                     /* MOW: move somewhere else */
        background-repeat:repeat-x;
 }
+
 .dijitRight {
-       
-       #display:inline;                                
+       /* Right part of a 3-element border */
+       #display:inline;                                /* IE7 sizes to outer size w/o this */
        background-position:right top;
        background-repeat:no-repeat;
 }
+
+/* Buttons */
+
 .dijitToggleButton,
 .dijitButton,
 .dijitDropDownButton,
 .dijitComboButton {
-       
+       /* outside of button */
        margin: 0.2em;
+       vertical-align: middle;
 }
+
 .dijitButtonContents {
-       display: block;         
+       display: block;         /* to make focus border rectangular */
 }
 td.dijitButtonContents {
-       display: table-cell;    
+       display: table-cell;    /* but don't affect Select, ComboButton */
 }
+
 .dijitButtonNode IMG {
-       
+       /* make text and images line up cleanly */
        vertical-align:middle;
-       
-}
-TABLE.dijitComboButton { 
-       
-       border-collapse: collapse;
-       border:0;
-       padding:0;
-       margin:0;
+       /*margin-bottom:.2em;*/
 }
+
 .dijitToolbar .dijitComboButton {
-       
+       /* because Toolbar only draws a border around the hovered thing */
        border-collapse: separate;
 }
+
 .dijitToolbar .dijitToggleButton,
 .dijitToolbar .dijitButton,
 .dijitToolbar .dijitDropDownButton,
 .dijitToolbar .dijitComboButton {
        margin: 0;
 }
+
 .dijitToolbar .dijitButtonContents {
-       
+       /* just because it used to be this way */
        padding: 1px 2px;
 }
-.dj_ie .dijitComboButton {
-       
-       margin-bottom: -3px;
-}
+
+
 .dj_webkit .dijitToolbar .dijitDropDownButton {
        padding-left: 0.3em;
 }
 .dj_gecko .dijitToolbar .dijitButtonNode::-moz-focus-inner {
        padding:0;
 }
+
 .dijitButtonNode {
-       
+       /* Node that is acting as a button -- may or may not be a BUTTON element */
        border:1px solid gray;
        margin:0;
        line-height:normal;
@@ -255,76 +305,95 @@ TABLE.dijitComboButton {
        white-space: nowrap;
 }
 .dj_webkit .dijitSpinner .dijitSpinnerButtonContainer {
-       
+       /* apparent WebKit bug where messing with the font coupled with line-height:normal X 2 (dijitReset & dijitButtonNode)
+       can be different than just a single line-height:normal, visible in InlineEditBox/Spinner */
        line-height:inherit;
 }
 .dijitTextBox .dijitButtonNode {
        border-width: 0;
 }
+
 .dijitButtonNode,
 .dijitButtonNode * {
        cursor: pointer;
 }
+
 .dj_ie .dijitButtonNode {
-       
+       /* ensure hasLayout */
        zoom: 1;
 }
+
 .dj_ie .dijitButtonNode button {
-       
+       /*
+               disgusting hack to get rid of spurious padding around button elements
+               on IE. MSIE is truly the web's boat anchor.
+       */
        overflow: visible;
 }
+
 DIV.dijitArrowButton {
        float: right;
 }
+
+/******
+       TextBox related.
+       Everything that has an <input>
+*******/
+
 .dijitTextBox {
        border: solid black 1px;
-       #overflow: hidden; 
-       width: 15em;    
+       #overflow: hidden; /* #6027, #6067 */
+       width: 15em;    /* need to set default size on outer node since inner nodes say <input style="width:100%"> and <td width=100%>.  user can override */
        vertical-align: middle;
-       #vertical-align: auto;
 }
+
 .dijitTextBoxReadOnly,
 .dijitTextBoxDisabled {
        color: gray;
 }
 .dj_webkit .dijitTextBoxDisabled INPUT {
-       color: #eee; 
+       color: #eee; /* because WebKit lightens disabled input/textarea no matter what color you specify */
 }
 .dj_webkit TEXTAREA.dijitTextAreaDisabled {
-       color: #333; 
+       color: #333; /* because WebKit lightens disabled input/textarea no matter what color you specify */
 }
-.dj_gecko .dijitTextBoxReadOnly INPUT,
+.dj_gecko .dijitTextBoxReadOnly INPUT.dijitInputField, /* disable arrow and validation presentation INPUTs but allow real INPUT for text selection */
 .dj_gecko .dijitTextBoxDisabled INPUT {
-       -moz-user-input: none; 
+       -moz-user-input: none; /* prevent focus of disabled textbox buttons */
 }
+
 .dijitPlaceHolder {
-       
+       /* hint text that appears in a textbox until user starts typing */
        color: #AAAAAA;
        font-style: italic;
        position: absolute;
        top: 0;
        left: 0;
-       #filter: ""; 
+       #filter: ""; /* make this showup in IE6 after the rendering of the widget */
 }
+
 .dijitTimeTextBox {
        width: 8em;
 }
+
+/* rules for webkit to deal with fuzzy blue focus border */
 .dijitTextBox INPUT:focus {
-       outline: none;  
+       outline: none;  /* blue fuzzy line looks wrong on combobox or something w/validation icon showing */
 }
 .dijitTextBoxFocused {
        outline: auto 5px -webkit-focus-ring-color;
 }
+
 .dijitTextBox INPUT {
-       float: left; 
+       float: left; /* needed by IE to remove secret margin */
 }
 .dijitInputInner {
-       
+       /* for when an <input> is embedded inside an inline-block <div> with a size and border */
        border:0 !important;
        vertical-align:middle !important;
        background-color:transparent !important;
        width:100% !important;
-       
+       /* IE dislikes horizontal tweaking combined with width:100% so punish everyone for consistency */
        padding-left: 0 !important;
        padding-right: 0 !important;
        margin-left: 0 !important;
@@ -335,7 +404,9 @@ DIV.dijitArrowButton {
 }
 .dijitTextBoxError INPUT.dijitValidationInner,
 .dijitTextBox INPUT.dijitArrowButtonInner {
-       
+       /* <input> used to display arrow icon/validation icon, or in arrow character in high contrast mode.
+        * The css below is a trick to hide the character in non-high-contrast mode
+        */
        text-indent: -1em !important;
        direction: ltr !important;
        text-align: left !important;
@@ -346,12 +417,12 @@ DIV.dijitArrowButton {
 }
 .dj_ie .dijitTextBox INPUT,
 .dj_ie INPUT.dijitTextBox {
-       overflow-y: visible; 
-       line-height: normal; 
+       overflow-y: visible; /* INPUTs need help expanding when padding is added or line-height is adjusted */
+       line-height: normal; /* strict mode */
 }
 .dj_ie7 .dijitTextBox INPUT.dijitValidationInner,
 .dj_ie7 .dijitTextBox INPUT.dijitArrowButtonInner {
-       line-height: 86%; 
+       line-height: 86%; /* IE7 problem where the icon is vertically too low w/o this - real input stays at normal */
 }
 .dj_ie6 .dijitTextBox INPUT,
 .dj_ie6 INPUT.dijitTextBox,
@@ -360,11 +431,11 @@ DIV.dijitArrowButton {
 .dj_iequirks .dijitTextBox INPUT.dijitSpinnerButtonInner,
 .dj_iequirks .dijitTextBox INPUT.dijitInputInner,
 .dj_iequirks INPUT.dijitTextBox {
-       line-height: 100%; 
+       line-height: 100%; /* IE7 problem where the icon is vertically way too low w/o this */
 }
 .dijit_a11y INPUT.dijitValidationInner,
 .dijit_a11y INPUT.dijitArrowButtonInner {
-       
+       /* (in high contrast mode) revert rules from above so character displays */
        text-indent: 0 !important;
        width: 1em !important;
        #text-align: left !important;
@@ -373,29 +444,38 @@ DIV.dijitArrowButton {
        display: inline;
        cursor: default;
 }
+
+/* ComboBox & Spinner */
+
 .dijitSpinner .dijitSpinnerButtonContainer,
 .dijitComboBox .dijitArrowButtonContainer {
-       
-       border-width: 0 0 0 1px !important; 
+       /* dividing line between input area and up/down button(s) for ComboBox and Spinner */
+       border-width: 0 0 0 1px !important; /* !important needed due to wayward ".theme .dijitButtonNode" rules */
+}
+.dijitToolbar .dijitComboBox .dijitArrowButtonContainer {
+       /* overrides above rule plus mirror-image rule in dijit_rtl.css to have no divider when ComboBox in Toolbar */
+       border-width: 0 !important;
+}
+
+.dijitComboBoxMenu {
+       /* Drop down menu is implemented as <ul> <li/> <li/> ... but we don't want circles before each item */
+       list-style-type: none;
 }
 .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
-       
+       /* dividing line between input area and up/down button(s) for ComboBox and Spinner */
        border-width: 0;
 }
 .dj_ie .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
-       clear: both; 
-}
-.dijit_a11y .dijitTextBox .dijitValidationContainer,
-.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBox .dijitArrowButtonContainer {
-       
-       border: solid black !important;
-       border-width: 0 0 0 1px !important;
+       clear: both; /* IE workaround */
 }
+
 .dj_ie .dijitToolbar .dijitComboBox {
-       
+       /* make combobox buttons align properly with other buttons in a toolbar */
        vertical-align: middle;
 }
+
+/* Spinner */
+
 .dijitTextBox .dijitSpinnerButtonContainer {
        width: 1em;
        position: relative !important;
@@ -403,7 +483,7 @@ DIV.dijitArrowButton {
 }
 .dijitSpinner .dijitSpinnerButtonInner {
        width:1em;
-       visibility:hidden !important; 
+       visibility:hidden !important; /* just a sizing element */
        overflow-x:hidden;
 }
 .dijitComboBox .dijitButtonNode,
@@ -419,7 +499,7 @@ DIV.dijitArrowButton {
        width: 1em !important;
 }
 .dijit_a11y .dijitSpinner .dijitArrowButtonInner {
-       margin: 0 auto !important; 
+       margin: 0 auto !important; /* should auto-center */
 }
 .dj_ie .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
        padding-left: 0.3em !important;
@@ -429,8 +509,8 @@ DIV.dijitArrowButton {
        width: 1.4em !important;
 }
 .dj_ie7 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding-left: 0.0em !important; 
-       padding-right: 0.0em !important;
+       padding-left: 0 !important; /* manually center INPUT: character is .5em and total width = 1em */
+       padding-right: 0 !important;
        width: 1em !important;
 }
 .dj_ie6 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
@@ -444,7 +524,9 @@ DIV.dijitArrowButton {
        width: 2em !important;
 }
 .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       
+       /* note: .dijitInputLayoutContainer makes this rule override .dijitArrowButton settings
+        * for dijit.form.Button
+        */
        padding: 0;
        position: absolute !important;
        right: 0;
@@ -466,7 +548,7 @@ DIV.dijitArrowButton {
        border-top-width: 1px !important;
 }
 .dijitSpinner .dijitSpinnerButtonContainer .dijitUpArrowButton {
-       #bottom: 50%;   
+       #bottom: 50%;   /* otherwise (on some machines) top arrow icon too close to splitter border (IE6/7) */
        top: 0;
 }
 .dijitSpinner .dijitArrowButtonInner {
@@ -493,16 +575,17 @@ DIV.dijitArrowButton {
        width: 100%;
 }
 .dj_ie .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       zoom: 50%; 
+       zoom: 50%; /* emulate transform: scale(0.5) */
 }
 .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButtonInner {
        overflow: hidden;
 }
+
 .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
        width: 100%;
 }
 .dj_iequirks .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: 1em; 
+       width: 1em; /* matches .dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer rule - 100% is the whole screen width in quirks */
 }
 .dijitSpinner .dijitArrowButtonInner .dijitInputField {
        visibility: hidden;
@@ -515,9 +598,16 @@ DIV.dijitArrowButton {
        width: 1em;
 }
 .dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
-       border-width: 1px 0px 0px 0px;
+       border-width: 1px 0 0 0;
        border-style: solid !important;
 }
+
+/****
+               dijit.form.CheckBox
+        &
+               dijit.form.RadioButton
+ ****/
+
 .dijitCheckBox,
 .dijitRadio,
 .dijitCheckBoxInput {
@@ -529,22 +619,26 @@ DIV.dijitArrowButton {
        background-repeat:no-repeat;
        overflow: hidden;
 }
+
 .dijitCheckBox INPUT,
 .dijitRadio INPUT {
        margin: 0;
        padding: 0;
        display: block;
 }
+
 .dijitCheckBoxInput {
-       
+       /* place the actual input on top, but all-but-invisible */
        opacity: 0.01;
 }
+
 .dj_ie .dijitCheckBoxInput {
        filter: alpha(opacity=0);
 }
+
 .dijit_a11y .dijitCheckBox,
 .dijit_a11y .dijitRadio {
-       
+       /* in a11y mode we display the native checkbox (not the icon), so don't restrict the size */
        width: auto !important;
        height: auto !important;
 }
@@ -554,14 +648,21 @@ DIV.dijitArrowButton {
        width: auto;
        height: auto;
 }
+
+
+/****
+               dijit.ProgressBar
+ ****/
+
 .dijitProgressBarEmpty {
-       
+       /* outer container and background of the bar that's not finished yet*/
        position:relative;overflow:hidden;
-       border:1px solid black;         
-       z-index:0;                      
+       border:1px solid black;         /* a11y: border necessary for high-contrast mode */
+       z-index:0;                      /* establish a stacking context for this progress bar */
 }
+
 .dijitProgressBarFull {
-       
+       /* outer container for background of bar that is finished */
        position:absolute;
        overflow:hidden;
        z-index:-1;
@@ -571,8 +672,9 @@ DIV.dijitArrowButton {
 .dj_ie6 .dijitProgressBarFull {
        height:1.6em;
 }
+
 .dijitProgressBarTile {
-       
+       /* inner container for finished portion */
        position:absolute;
        overflow:hidden;
        top:0;
@@ -586,27 +688,29 @@ DIV.dijitArrowButton {
        background-color:#aaa;
        background-attachment: fixed;
 }
+
 .dijit_a11y .dijitProgressBarTile {
-       
+       /* a11y:  The border provides visibility in high-contrast mode */
        border-width:2px;
        border-style:solid;
        background-color:transparent !important;
 }
+
 .dj_ie6 .dijitProgressBarTile {
-       
+       /* width:auto works in IE6 with position:static but not position:absolute */
        position:static;
-       
+       /* height:auto or 100% does not work in IE6 */
        height:1.6em;
 }
-.dijitProgressBarIndeterminate .dijitProgressBarLabel {
-       visibility:hidden;
-}
+
 .dijitProgressBarIndeterminate .dijitProgressBarTile {
-       
+       /* animated gif for 'indeterminate' mode */
 }
+
 .dijitProgressBarIndeterminateHighContrastImage {
        display:none;
 }
+
 .dijit_a11y .dijitProgressBarIndeterminate .dijitProgressBarIndeterminateHighContrastImage {
        display:block;
        position:absolute;
@@ -617,6 +721,7 @@ DIV.dijitArrowButton {
        width:100%;
        height:auto;
 }
+
 .dijitProgressBarLabel {
        display:block;
        position:static;
@@ -624,38 +729,52 @@ DIV.dijitArrowButton {
        text-align:center;
        background-color:transparent !important;
 }
+
+/****
+               dijit.Tooltip
+ ****/
+
 .dijitTooltip {
        position: absolute;
        z-index: 2000;
        display: block;
-       
-       left: 50%;
+       /* make visible but off screen */
+       left: 0;
        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;
 }
 .dijit_a11y .dijitTooltipConnector {
-       display: none;  
+       display: none;  /* won't show b/c it's background-image; hide to avoid border gap */
 }
+
 .dijitTooltipData {
        display:none;
 }
+
+/* Layout widgets. This is essential CSS to make layout work (it isn't "styling" CSS)
+   make sure that the position:absolute in dijitAlign* overrides other classes */
+
 .dijitLayoutContainer {
        position: relative;
        display: block;
        overflow: hidden;
 }
+
 body .dijitAlignTop,
 body .dijitAlignBottom,
 body .dijitAlignLeft,
@@ -663,40 +782,61 @@ body .dijitAlignRight {
        position: absolute;
        overflow: hidden;
 }
+
 body .dijitAlignClient { position: absolute; }
+
+/*
+ * BorderContaienr
+ *
+ * .dijitBorderContainer is a stylized layout where panes have border and margin.
+ * .dijitBorderContainerNoGutter is a raw layout.
+ */
 .dijitBorderContainer, .dijitBorderContainerNoGutter {
        position:relative;
        overflow: hidden;
 }
+
 .dijitBorderContainerPane,
 .dijitBorderContainerNoGutterPane {
-       position: absolute !important;  
-       z-index: 2;             
+       position: absolute !important;  /* !important to override position:relative in dijitTabContainer etc. */
+       z-index: 2;             /* above the splitters so that off-by-one browser errors don't cover up border of pane */
 }
+
 .dijitBorderContainer > .dijitTextArea {
-       
+       /* On Safari, for SimpleTextArea inside a BorderContainer,
+               don't want to display the grip to resize */
        resize: none;
 }
+
 .dijitGutter {
-       
+       /* gutter is just a place holder for empty space between panes in BorderContainer */
        position: absolute;
-       font-size: 1px;         
+       font-size: 1px;         /* needed by IE6 even though div is empty, otherwise goes to 15px */
 }
+
+/* SplitContainer
+
+       'V' == container that splits vertically (up/down)
+       'H' = horizontal (left/right)
+*/
+
 .dijitSplitter {
        position: absolute;
        overflow: hidden;
-       z-index: 10;            
+       z-index: 10;            /* above the panes so that splitter focus is visible on FF, see #7583*/
        background-color: #fff;
        border-color: gray;
        border-style: solid;
        border-width: 0;
 }
 .dj_ie .dijitSplitter {
-       z-index: 1;     
+       z-index: 1;     /* behind the panes so that pane borders aren't obscured see test_Gui.html/[14392] */
 }
+
 .dijitSplitterActive {
        z-index: 11 !important;
 }
+
 .dijitSplitterCover {
        position:absolute;
        z-index:-1;
@@ -705,13 +845,17 @@ body .dijitAlignClient { position: absolute; }
        width:100%;
        height:100%;
 }
+
 .dijitSplitterCoverActive {
        z-index:3 !important;
 }
+
+/* #6945: stop mouse events */
 .dj_ie .dijitSplitterCover {
        background: white;
        filter: alpha(opacity=0);
 }
+
 .dijitSplitterH {
        height: 7px;
        border-top:1px;
@@ -733,9 +877,11 @@ body .dijitAlignClient { position: absolute; }
        outline-style:dotted;
        outline-width: 2px;
 }
+
 .dijitSplitPane {
        position: absolute;
 }
+
 .dijitSplitContainerSizerH,
 .dijitSplitContainerSizerV {
        position:absolute;
@@ -747,15 +893,18 @@ body .dijitAlignClient { position: absolute; }
        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 {
@@ -766,12 +915,14 @@ body .dijitAlignClient { position: absolute; }
        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;
@@ -780,14 +931,24 @@ body .dijitAlignClient { position: absolute; }
        border-left:1px solid #d3d3d3 !important;
        border-right:1px solid #d3d3d3 !important;
 }
+
+/* ContentPane */
+
 .dijitContentPane {
        display: block;
-       overflow: auto; 
+       overflow: auto; /* if we don't have this (or overflow:hidden), then Widget.resizeTo() doesn't make sense for ContentPane */
 }
+
 .dijitContentPaneSingleChild {
-       
+       /*
+        * if the ContentPane holds a single layout widget child which is being sized to match the content pane,
+        * then the ContentPane should never get a scrollbar (but it does due to browser bugs, see #9449
+        */
        overflow: hidden;
 }
+
+/* TitlePane */
+
 .dijitTitlePane {
        display: block;
        overflow: hidden;
@@ -795,45 +956,48 @@ body .dijitAlignClient { position: absolute; }
 .dijitTitlePaneTitle {
        cursor: pointer;
 }
-.dijitFixedOpen {
-       
+.dijitFixedOpen, .dijitFixedClosed {
+       /* TitlePane that cannot be toggled */
        cursor: default;
 }
 .dijitTitlePaneTitle * {
        vertical-align: middle;
 }
 .dijitTitlePane .dijitArrowNodeInner {
-       
+       /* normally, hide arrow text in favor of icon */
        display: none;
 }
 .dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
-       
+       /* ... except in a11y mode, then show text arrow */
        display:inline !important;
-       font-family: monospace;         
+       font-family: monospace;         /* because - and + are different widths */
 }
 .dijit_a11y .dijitTitlePane .dijitArrowNode {
-       
+       /* ... and hide icon */
        display:none;
 }
+
 .dj_ie6 .dijitTitlePaneContentOuter,
 .dj_ie6 .dijitTitlePane .dijitTitlePaneTitle {
-       
+       /* force hasLayout to ensure borders etc, show up */
        zoom: 1;
 }
+
+/* Color Palette
+ * Sizes designed so that table cell positions match icons in underlying image,
+ * which appear at 20x20 intervals.
+ */
+
 .dijitColorPalette {
        border: 1px solid #999;
        background: #fff;
        position: relative;
 }
-img.dijitColorPaletteUnder {
-       
-       border-style: none;
-       position: absolute;
-       left: 0;
-       top: 0;
-}
+
 .dijitColorPalette .dijitPaletteTable {
-       
+       /* Table that holds the palette cells, and overlays image file with color swatches.
+        * padding/margin to align table with image.
+        */
        padding: 2px 3px 3px 3px;
        position: relative;
        overflow: hidden;
@@ -843,52 +1007,59 @@ img.dijitColorPaletteUnder {
 .dj_ie6 .dijitColorPalette .dijitPaletteTable,
 .dj_ie7 .dijitColorPalette .dijitPaletteTable,
 .dj_iequirks .dijitColorPalette .dijitPaletteTable {
-       
+       /* using padding above so that focus border isn't cutoff on moz/webkit,
+        * but using margin on IE because padding doesn't seem to work
+        */
        padding: 0;
        margin: 2px 3px 3px 3px;
 }
+
 .dijitColorPalette .dijitPaletteCell {
-       
-       height: 20px;
-       width: 20px;
+       /* <td> in the <table> */
        font-size: 1px;
        vertical-align: middle;
        text-align: center;
+       background: none;
 }
 .dijitColorPalette .dijitPaletteImg {
-       
-       width: 16px;
-       height: 14px;
+       /* Called dijitPaletteImg for back-compat, this actually wraps the color swatch with a border and padding */
+       padding: 1px;           /* white area between gray border and color swatch */
        border: 1px solid #999;
+       margin: 2px 1px;
        cursor: default;
-       vertical-align: middle;
+       font-size: 1px;         /* prevent <span> from getting bigger just to hold a character */
 }
-.dj_iequirks .dijitColorPalette .dijitPaletteImg {
-       margin: 1px;    
+.dj_gecko .dijitColorPalette .dijitPaletteImg {
+       padding-bottom: 0;      /* workaround rendering glitch on FF, it adds an extra pixel at the bottom */
+}
+.dijitColorPalette .dijitColorPaletteSwatch {
+       /* the actual part where the color is */
+       width: 14px;
+       height: 12px;
 }
 .dijitPaletteTable td {
-               padding: 0px;
+               padding: 0;
 }
 .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       
+       /* hovered color swatch */
        border: 1px solid #000;
 }
+
 .dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
 .dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
        border: 2px solid #000;
+       margin: 1px 0;  /* reduce margin to compensate for increased border */
 }
+
+
 .dijit_a11y .dijitColorPalette .dijitPaletteTable,
 .dijit_a11y .dijitColorPalette .dijitPaletteTable * {
-       
+       /* table cells are to catch events, but the swatches are in the PaletteImg behind the table */
        background-color: transparent !important;
 }
-.dj_gecko .dijit_a11y .dijitColorPalette .dijitPaletteCellFocused .dijitPaletteImg {
-       border: 3px dotted #000;        
-       margin: -1px;
-}
-.dijit_a11y  .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       border: 2px solid #000 !important;
-}
+
+/* AccordionContainer */
+
 .dijitAccordionContainer {
        border:1px solid #b7b7b7;
        border-top:0 !important;
@@ -899,39 +1070,51 @@ img.dijitColorPaletteUnder {
 .dijitAccordionTitleSelected {
        cursor: default;
 }
+
+/* images off, high-contrast mode styles */
 .dijitAccordionTitle .arrowTextUp,
 .dijitAccordionTitle .arrowTextDown {
        display: none;
        font-size: 0.65em;
        font-weight: normal !important;
 }
+
 .dijit_a11y .dijitAccordionTitle .arrowTextUp,
 .dijit_a11y .dijitAccordionTitleSelected .arrowTextDown {
        display: inline;
 }
+
 .dijit_a11y .dijitAccordionTitleSelected .arrowTextUp {
        display: none;
 }
-.dj_ie6 .dijitAccordionTitle,
-.dj_iequirks .dijitAccordionTitle {
-       
-       zoom: 1;
+
+.dijitAccordionChildWrapper {
+       /* this is the node whose height is adjusted */
+       overflow: hidden;
 }
+
+/* Calendar */
+
 .dijitCalendarContainer {
-       width: auto;    
+       width: auto;    /* in case user has specified a width for the TABLE nodes, see #10553 */
 }
 .dijitCalendarContainer th, .dijitCalendarContainer td {
        padding: 0;
+       vertical-align: middle;
 }
+
 .dijitCalendarNextYear {
        margin:0 0 0 0.55em;
 }
+
 .dijitCalendarPreviousYear {
        margin:0 0.55em 0 0;
 }
+
 .dijitCalendarIncrementControl {
        vertical-align: middle;
 }
+
 .dijitCalendarIncrementControl,
 .dijitCalendarDateTemplate,
 .dijitCalendarMonthLabel,
@@ -939,18 +1122,29 @@ img.dijitColorPaletteUnder {
 .dijitCalendarNextYear {
        cursor: pointer;
 }
+
 .dijitCalendarDisabledDate {
        color: gray;
        text-decoration: line-through;
        cursor: default;
 }
+
 .dijitSpacer {
-       
+       /* don't display it, but make it affect the width */
        position: relative;
        height: 1px;
        overflow: hidden;
        visibility: hidden;
 }
+
+/* Styling for month drop down list */
+
+.dijitCalendarMonthMenu .dijitCalendarMonthLabel {
+       text-align:center;
+}
+
+/* Menu */
+
 .dijitMenu {
        border:1px solid black;
        background-color:white;
@@ -960,26 +1154,38 @@ img.dijitColorPaletteUnder {
        border-width:0;
        background-color:white;
 }
+
+/* workaround for webkit bug #8427, remove this when it is fixed upstream */
 .dj_webkit .dijitMenuTable td[colspan="2"]{
        border-right:hidden;
 }
+
 .dijitMenuItem {
        text-align: left;
        white-space: nowrap;
        padding:.1em .2em;
        cursor:pointer;
 }
+
 .dijitMenuPassive .dijitMenuItemHover,
 .dijitMenuItemSelected {
-       
+       /*
+        * dijitMenuItemHover refers to actual mouse over
+        * dijitMenuItemSelected is used after a menu has been "activated" by
+        * clicking it, tabbing into it, or being opened from a parent menu,
+        * and denotes that the menu item has focus or that focus is on a child
+        * menu
+        */
        background-color:black;
        color:white;
 }
+
 .dijitMenuItemIcon, .dijitMenuExpand {
        background-repeat: no-repeat;
 }
+
 .dijitMenuItemDisabled * {
-       
+       /* for a disabled menu item, just set it to mostly transparent */
        opacity:0.5;
        cursor:default;
 }
@@ -990,10 +1196,12 @@ img.dijitColorPaletteUnder {
        color:gray !important;
        filter: alpha(opacity=35);
 }
+
 .dijitMenuItemLabel {
        position: relative;
        vertical-align: middle;
 }
+
 .dijit_a11y .dijitMenuItemSelected {
        border: 1px dotted black !important;
 }
@@ -1008,28 +1216,35 @@ img.dijitColorPaletteUnder {
 .dj_ie8 .dijit_a11y .dijitMenuItemLabel {
        position:static;
 }
+
 .dijitMenuExpandA11y {
        display: none;
 }
 .dijit_a11y .dijitMenuExpandA11y {
        display: inline;
 }
+
 .dijitMenuSeparator td {
        border: 0;
        padding: 0;
 }
+
+/* separator can be two pixels -- set border of either one to 0 to have only one */
 .dijitMenuSeparatorTop {
        height: 50%;
        margin: 0;
        margin-top:3px;
        font-size: 1px;
 }
+
 .dijitMenuSeparatorBottom {
        height: 50%;
        margin: 0;
        margin-bottom:3px;
        font-size: 1px;
 }
+
+/* the checked menu item */
 .dijitCheckedMenuItemIconChar {
        vertical-align: middle;
        visibility:hidden;
@@ -1044,21 +1259,29 @@ img.dijitColorPaletteUnder {
        display: none;
 }
 .dj_ie .dijit_a11y .dijitMenuBar .dijitMenuItem {
-       
-       margin: 0px;
+       /* so bottom border of MenuBar appears on IE7 in high-contrast mode */
+       margin: 0;
 }
+
+/* StackContainer */
+
 .dijitStackController .dijitToggleButtonChecked * {
-       cursor: default;        
+       cursor: default;        /* because pressing it has no effect */
 }
+
+/* TabContainer */
+
 .dijitTabContainerNoLayout {
-       width: 100%;    
+       width: 100%;    /* otherwise ScrollingTabController goes to 50K pixels wide */
 }
+
 .dijitTabContainerBottom-tabs,
 .dijitTabContainerTop-tabs,
 .dijitTabContainerLeft-tabs,
 .dijitTabContainerRight-tabs {
-       overflow: visible !important;  
+       overflow: visible !important;  /* so tabs can cover up border adjacent to container */
 }
+
 .dijitTabContainerBottom-container,
 .dijitTabContainerTop-container,
 .dijitTabContainerLeft-container,
@@ -1075,39 +1298,46 @@ img.dijitColorPaletteUnder {
 .dijitTabListWrapper {
        overflow: hidden;
 }
+
 .dijit_a11y .tabStripButton img {
-       
+       /* hide the icons (or rather the empty space where they normally appear) because text will appear instead */
        display: none;
 }
+
 .dijitTabContainerTop-tabs {
        border-bottom: 1px solid black;
 }
 .dijitTabContainerTop-container {
-       border-top: 0px;
+       border-top: 0;
 }
+
 .dijitTabContainerLeft-tabs {
        border-right: 1px solid black;
        float: left;
 }
 .dijitTabContainerLeft-container {
-       border-left: 0px;
+       border-left: 0;
 }
+
 .dijitTabContainerBottom-tabs {
        border-top: 1px solid black;
 }
 .dijitTabContainerBottom-container {
-       border-bottom: 0px;
+       border-bottom: 0;
 }
+
 .dijitTabContainerRight-tabs {
        border-left: 1px solid black;
        float: left;
 }
 .dijitTabContainerRight-container {
-       border-right: 0px;
+       border-right: 0;
 }
+
 DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
        cursor: auto;
 }
+
 .dijitTab {
        position:relative;
        cursor:pointer;
@@ -1115,107 +1345,147 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
        z-index:3;
 }
 .dijitTab * {
-       
+       /* make tab icons and close icon line up w/text */
        vertical-align: middle;
 }
 .dijitTabChecked {
-       cursor: default;        
+       cursor: default;        /* because clicking will have no effect */
 }
+
 .dijitTabContainerTop-tabs .dijitTab {
-       top: 1px;       
+       top: 1px;       /* to overlap border on .dijitTabContainerTop-tabs */
 }
 .dijitTabContainerBottom-tabs .dijitTab {
-       top: -1px;      
+       top: -1px;      /* to overlap border on .dijitTabContainerBottom-tabs */
 }
 .dijitTabContainerLeft-tabs .dijitTab {
-       left: 1px;      
+       left: 1px;      /* to overlap border on .dijitTabContainerLeft-tabs */
 }
 .dijitTabContainerRight-tabs .dijitTab {
-       left: -1px;     
+       left: -1px;     /* to overlap border on .dijitTabContainerRight-tabs */
 }
+
+
 .dijitTabContainerTop-tabs .dijitTab,
 .dijitTabContainerBottom-tabs .dijitTab {
-       
-       display:inline-block;                   
-       #zoom: 1; 
-       #display:inline; 
+       /* Inline-block */
+       display:inline-block;                   /* webkit and FF3 */
+       #zoom: 1; /* set hasLayout:true to mimic inline-block */
+       #display:inline; /* don't use .dj_ie since that increases the priority */
 }
+
 .dijitTabInnerDiv {
        position:relative;
 }
+
+
 .tabStripButton {
        z-index: 12;
 }
+
 .dijitTabButtonDisabled .tabStripButton {
        display: none;
 }
+
+
 .dijitTabCloseButton {
        margin-left: 1em;
 }
+
 .dijitTabCloseText {
        display:none;
 }
+
+.dijitTab .tabLabel {
+       /* make sure tabs w/close button and w/out close button are same height, even w/small (<15px) font.
+        * assumes <=15px height for close button icon.
+        */
+       min-height: 15px;
+       display: inline-block;
+}
+.dijitNoIcon {
+       /* applied to <img>/<span> node when there is no icon specified */
+       display: none;
+}
+.dj_ie6 .dijitTab .dijitNoIcon {
+       /* because min-height (on .tabLabel, above) doesn't work on IE6 */
+       display: inline;
+       height: 15px;
+       width: 1px;
+}
+
+/* images off, high-contrast mode styles */
+
 .dijit_a11y .dijitTabCloseButton {
        background-image: none !important;
        width: auto !important;
        height: auto !important;
-       border: thin dotted;    
-}
-.dijit_a11y .dijitTabCloseButtonHover {
-       border:thin solid;      
 }
+
 .dijit_a11y .dijitTabCloseText {
        display: inline;
 }
-.dijit_a11y .dijitTabChecked {
-       
-       border-style:dashed !important;
-}
-.dijit_a11y .dijitTabInnerDiv {
-       border-left:none !important;
- }
+
 .dijitTabPane,
 .dijitStackContainer-child,
 .dijitAccordionContainer-child {
-       
+       /* children of TabContainer, StackContainer, and AccordionContainer shouldn't have borders
+        * b/c a border is already there from the TabContainer/StackContainer/AccordionContainer itself.
+        */
     border: none !important;
 }
+
+/* InlineEditBox */
 .dijitInlineEditBoxDisplayMode {
-       border: 1px solid transparent;  
+       border: 1px solid transparent;  /* so keyline (border) on hover can appear without screen jump */
        cursor: text;
 }
+
 .dijit_a11y .dijitInlineEditBoxDisplayMode,
 .dj_ie6 .dijitInlineEditBoxDisplayMode {
-       
+       /* except that IE6 doesn't support transparent borders, nor does high contrast mode */
        border: none;
 }
+
 .dijitInlineEditBoxDisplayModeHover,
 .dijit_a11y .dijitInlineEditBoxDisplayModeHover,
 .dj_ie6 .dijitInlineEditBoxDisplayModeHover {
-       
+       /* An InlineEditBox in view mode (click this to edit the text) */
        background-color: #e2ebf2;
        border: solid 1px black;
 }
+
 .dijitInlineEditBoxDisplayModeDisabled {
        cursor: default;
 }
+
+/* Tree */
+.dijitTree {
+       overflow: auto; /* for scrollbars when Tree has a height setting, and to prevent wrapping around float elements, see #11491 */
+}
+
 .dijitTreeIndent {
-       
+       /* amount to indent each tree node (relative to parent node) */
        width: 19px;
 }
+
 .dijitTreeRow, .dijitTreeContent {
        white-space: nowrap;
 }
+
 .dijitTreeRow img {
-       
+       /* make the expando and folder icons line up with the label */
        vertical-align: middle;
 }
+
 .dijitTreeContent {
     cursor: default;
 }
+
 .dijitExpandoText {
        display: none;
 }
+
 .dijit_a11y .dijitExpandoText {
        display: inline;
        padding-left: 10px;
@@ -1225,14 +1495,19 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
        border-width: thin;
        cursor: pointer;
 }
+
 .dijitTreeLabel {
-       margin: 0px 4px;
+       margin: 0 4px;
 }
+
+/* Dialog */
+
 .dijitDialog {
        position: absolute;
        z-index: 999;
-       overflow: hidden;       
+       overflow: hidden;       /* override overflow: auto; from ContentPane to make dragging smoother */
 }
+
 .dijitDialogTitleBar {
        cursor: move;
 }
@@ -1250,38 +1525,49 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
        display: none;
        background: transparent !important;
 }
+
 .dijitDialogUnderlay {
        background: #eee;
        opacity: 0.5;
 }
+
 .dj_ie .dijitDialogUnderlay {
        filter: alpha(opacity=50);
 }
+
+/* images off, high-contrast mode styles */
 .dijit_a11y .dijitSpinnerButtonContainer,
 .dijit_a11y .dijitDialog {
        opacity: 1 !important;
        background-color: white !important;
 }
+
 .dijitDialog .closeText {
        display:none;
-       
+       /* for the onhover border in high contrast on IE: */
        position:absolute;
 }
+
 .dijit_a11y .dijitDialog .closeText {
        display:inline;
 }
+
+/* Slider */
+
 .dijitSliderMoveable {
        z-index:99;
        position:absolute !important;
        display:block;
        vertical-align:middle;
 }
+
 .dijitSliderMoveableH {
        right:0;
 }
 .dijitSliderMoveableV {
        right:50%;
 }
+
 .dijit_a11y DIV.dijitSliderImageHandle,
 .dijitSliderImageHandle {
        margin:0;
@@ -1296,177 +1582,217 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
        font-size: 0;
 }
 .dj_ie7 .dijitSliderImageHandle {
-       overflow: hidden; 
+       overflow: hidden; /* IE7 workaround to make slider handle VISIBLE in non-a11y mode */
 }
 .dj_ie7 .dijit_a11y .dijitSliderImageHandle {
-       overflow: visible; 
+       overflow: visible; /* IE7 workaround to make slider handle VISIBLE in a11y mode */
 }
 .dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
        border:4px solid #000;
        height:8px;
        width:8px;
 }
+
 .dijitSliderImageHandleV {
        top:-8px;
        right: -50%;
 }
+
 .dijitSliderImageHandleH {
        left:50%;
        top:-5px;
        vertical-align:top;
 }
+
 .dijitSliderBar {
        border-style:solid;
        border-color:black;
        cursor: pointer;
 }
+
 .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%;
+       height:0;
        vertical-align:top;
        text-align:left;
 }
+
 .dijitSliderProgressBarH {
        position:absolute !important;
-       width:0%;
+       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;
 }
+
+/* the slider bumper is the space consumed by the slider handle when it hangs over an edge */
 .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;
 }
+
 .dijitSliderDecoration {
        text-align:center;
 }
-.dijitSliderV TD {
-       position: relative; 
+
+.dijitSliderDecorationC,
+.dijitSliderDecorationV {
+       position: relative; /* needed for IE+quirks+RTL+vertical (rendering bug) but add everywhere for custom styling consistency but this messes up IE horizontal sliders */
 }
+
 .dijitSliderDecorationH {
        width: 100%;
 }
+
 .dijitSliderDecorationV {
        height: 100%;
 }
+
 .dijitSliderButton {
        font-family:monospace;
        margin:0;
        padding:0;
        display:block;
 }
+
 .dijit_a11y .dijitSliderButtonInner {
        visibility:visible !important;
 }
+
 .dijitSliderButtonContainer {
        text-align:center;
-       height:0;       
+       height:0;       /* ??? */
 }
 .dijitSliderButtonContainer * {
        cursor: pointer;
 }
+
 .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; 
+       margin:0 0 1px 0; /* mozilla bug workaround for float:left,height:100% block elements */
 }
+
 .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%;
 }
+
 .dijitRuleLabelV {
-       
+       /* so that long labels don't overflow to multiple rows, or overwrite slider itself */
        text-overflow: ellipsis;
        white-space: nowrap;
        overflow: hidden;
 }
+
 .dijitRuleMarkV {
        height:0;
        border-right-width:0 !important;
@@ -1475,9 +1801,11 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
        width:100%;
        left:0;
 }
+
 .dj_ie .dijitRuleLabelContainerV {
        margin-top:-.55em;
 }
+
 .dijit_a11y .dijitSliderReadOnly,
 .dijit_a11y .dijitSliderDisabled {
        opacity:0.6;
@@ -1486,70 +1814,100 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
 .dj_ie .dijit_a11y .dijitSliderDisabled .dijitSliderBar {
        filter: alpha(opacity=40);
 }
+
+/* + and - Slider buttons: override theme settings to display icons */
 .dijit_a11y .dijitSlider .dijitSliderButtonContainer DIV {
-       font-family: monospace; 
+       font-family: monospace; /* otherwise hyphen is larger and more vertically centered */
        font-size: 1em;
        line-height: 1em;
        height: auto;
        width: auto;
-       margin: 0px 4px;
+       margin: 0 4px;
 }
+
+/* Icon-only buttons (often in toolbars) still display the text in high-contrast mode */
 .dijit_a11y .dijitButtonContents .dijitButtonText,
 .dijit_a11y .dijitTab .tabLabel {
        display: inline !important;
 }
+
+/* TextArea, SimpleTextArea */
 .dijitTextArea {
        width:100%;
-       overflow-y: auto;       
+       overflow-y: auto;       /* w/out this IE's SimpleTextArea goes to overflow: scroll */
 }
 .dijitTextArea[cols] {
-       width:auto; 
+       width:auto; /* SimpleTextArea cols */
 }
 .dj_ie .dijitTextAreaCols {
        width:auto;
 }
+
+.dijitExpandingTextArea {
+       /* for auto exanding textarea (called Textarea currently, rename for 2.0) don't want to display the grip to resize */
+       resize: none;
+}
+
+
+/* Toolbar
+ * Note that other toolbar rules (for objects in toolbars) are scattered throughout this file.
+ */
+
 .dijitToolbarSeparator {
        height: 18px;
        width: 5px;
        padding: 0 1px;
        margin: 0;
 }
+
+/* Editor */
 .dijitIEFixedToolbar {
        position:absolute;
-       
+       /* top:0; */
        top: expression(eval((document.documentElement||document.body).scrollTop));
 }
+
 .dijitEditor {
-       display: block; 
+       display: block; /* prevents glitch on FF with InlineEditBox, see #8404 */
 }
+
 .dijitEditorDisabled,
 .dijitEditorReadOnly {
        color: gray;
 }
+
+/* TimePicker */
+
 .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;
@@ -1561,8 +1919,10 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
 .dijit_a11y .dijitTimePickerItemHover .dijitTimePickerItemInner {
        border: dashed 4px black;
 }
+
+
 .dijitToggleButtonIconChar {
-       
+       /* character (instead of icon) to show that ToggleButton is checked */
        display:none !important;
 }
 .dijit_a11y .dijitToggleButton .dijitToggleButtonIconChar {
@@ -1570,22 +1930,26 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
        visibility:hidden;
 }
 .dj_ie6 .dijitToggleButtonIconChar, .dj_ie6 .tabStripButton .dijitButtonText {
-       font-family: "Arial Unicode MS";        
+       font-family: "Arial Unicode MS";        /* otherwise the a11y character (checkmark, arrow, etc.) appears as a box */
 }
 .dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
-       display: inline !important; 
+       display: inline !important; /* In high contrast mode, display the check symbol */
        visibility:visible !important;
 }
+
 .dijitArrowButtonChar {
         display:none !important;
 }
 .dijit_a11y .dijitArrowButtonChar {
         display:inline !important;
 }
+
 .dijit_a11y .dijitDropDownButton .dijitArrowButtonInner,
 .dijit_a11y .dijitComboButton .dijitArrowButtonInner {
        display:none !important;
 }
+
+/* Select */
 .dijitSelect {
        margin: 0.2em;
        border-collapse: collapse;
@@ -1593,7 +1957,7 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
 .dj_ie .dijitSelect,
 .dj_ie7 .dijitSelect,
 .dj_iequirks .dijitSelect {
-       vertical-align: middle; 
+       vertical-align: middle; /* Set this back for what we hack in dijit inline */
 }
 .dj_ie8 .dijitSelect .dijitButtonText {
        vertical-align: top;
@@ -1611,7 +1975,7 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
        color:#999 !important;
 }
 .dijitSelect .dijitButtonContents {
-       padding: 0px;
+       padding: 0;
        background: transparent none;
        white-space: nowrap;
        text-align: left;
@@ -1619,36 +1983,50 @@ DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
 .dijitSelectFixedWidth .dijitButtonContents {
        width: 100%;
 }
+
 .dijitSelectMenu .dijitMenuItemIcon {
-       
+       /* avoid blank area in left side of menu (since we have no icons) */
        display:none;
 }
 .dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
 .dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
-       
+       /* Set back to static due to bug in ie6/ie7 - See Bug #9651 */
        position: static;
 }
+
+/* Fix the baseline of our label (for multi-size font elements) */
 .dijitSelectLabel *
 {
        vertical-align: baseline;
 }
+
+/* Styling for the currently-selected option (rich text can mess this up) */
 .dijitSelectSelectedOption * {
        font-weight: bold;
 }
+
+/* Fix the styling of the dropdown menu to be more combobox-like */
 .dijitSelectMenu {
        border-width: 1px;
 }
+
+/* Style the different areas of the button to look like a "real" dropdown */
+/* Remove margins on the sub-table */
 .dijitSelectMenu .dijitMenuTable {
-       margin: 0px;
+       margin: 0;
        background-color: transparent;
 }
+
+/* Used in cases, such as FullScreen plugin, when we need to force stuff to static positioning. */
 .dijitForceStatic {
        position: static !important;
 }
+
+/**** Disabled cursor *****/
 .dijitReadOnly *,
 .dijitDisabled *,
 .dijitReadOnly,
 .dijitDisabled {
-       
+       /* a region the user would be able to click on, but it's disabled */
        cursor: default;
 }
index d1dc4fe151146c93fda53140018c9991f0be86ee..8ef3a285dcebaaff3ffcecf16f35e575a4b133ea 100644 (file)
        left: auto;
        right: 0;
 }
+
+/* Menu */
+
 .dijitMenuItemRtl {
        text-align: right;
 }
+
+/* Button */
+
 .dj_iequirks .dijitComboButtonRtl BUTTON {
-       
+       /* workaround bug where label invisible (themeTesterQuirk.html?dir=rtl) */
        float:left;
 }
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+
+/* TextBox, ComboBox, Spinner */
+
+.dijitTextBoxRtl .dijitValidationContainer,
 .dijitTextBoxRtl .dijitSpinnerButtonContainer,
 .dijitComboBoxRtl .dijitArrowButtonContainer {
-       
+       /* combobox and spinner: line between the input area and the drop down button */
        border-right-width: 1px !important;
-       border-right-style: solid !important;
-       border-left-width: 0px !important;
-       border-left-style: none !important;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
-       border-right: 1px solid black !important;
-       border-left: 0px none black !important;
+       border-left-width: 0 !important;
 }
+
 .dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
        right: 0;
        left: auto;
 }
+
 .dijitTextBoxRtl .dijitSpinnerButtonContainer,
 .dijitTextBoxRtl .dijitValidationContainer,
 .dijitTextBoxRtl .dijitArrowButtonContainer {
        float: left;
 }
+
+/* Calendar */
+
 .dijitCalendarRtl .dijitCalendarNextYear {
        margin:0 0.55em 0 0;
 }
+
 .dijitCalendarRtl .dijitCalendarPreviousYear {
        margin:0 0 0 0.55em;
 }
+
+
+/* Slider */
+
 .dijitSliderRtl .dijitSliderImageHandleV {
        left:auto;
 }
+
 .dijitSliderRtl .dijitSliderImageHandleH {
        left:-50%;
 }
+
 .dijitSliderRtl .dijitSliderMoveableH {
        right:auto;
        left:0;
 }
+
 .dijitSliderRtl .dijitRuleContainerV {
        float:right;
 }
+
 .dj_ie .dijitSliderRtl .dijitRuleContainerV {
        text-align:right;
 }
+
 .dj_ie .dijitSliderRtl .dijitRuleLabelV {
        text-align:left;
 }
+
 .dj_ie .dijitSliderRtl .dijitRuleLabelH {
        zoom:1;
 }
+
 .dijitSliderRtl .dijitSliderProgressBarH {
-       
+       /* workarounds for IE and FF */
        float:right;
        right:0;
        left:auto;
 }
+
+/* ContentPane*/
 .dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
        background-position:right;
        padding-right:25px;
 }
+
+/* TabContainer */
+
 .dijitTabRtl .dijitTabCloseButton {
-       margin-left: 0px;
+       margin-left: 0;
        margin-right: 1em;
 }
+
+/* TimePicker */
 .dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
        width:100%;
 }
+
+
+/* ColorPalette */
 .dijitColorPaletteRtl .dijitColorPaletteUnder {
-       
+       /* needed in RTL mode when DropDownButton expands the ColorPalette beyond it's natural width */
        left: auto;
        right: 0;
 }
+
+/* Select */
 .dijitSelectRtl .dijitButtonContents {
        text-align: right;
-}
+}
\ No newline at end of file
index a193f8ddfe6e558400129b0e7f18e252844d96d6..2c9248b083790473f30217c598b22810faca2716 100644 (file)
@@ -1,6 +1,7 @@
+/* Calendar*/
 
 .nihilo .dijitCalendarIncrementControl {
-       
+       /* next/prev month buttons */
        width:15px;
        height:15px;
        background-image: url("images/spriteRoundedIconsSmall.png");
        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;
@@ -26,8 +30,9 @@
        border: 1px solid #ccc;
        margin: 0;
 }
+
 .nihilo .dijitCalendarMonthContainer th {
-       
+       /* month header cell */
        background:#d3d3d3 url("images/titleBar.png") repeat-x top;
        padding-top:.3em;
        padding-bottom:.2em;
@@ -37,8 +42,9 @@
        padding-top:.2em;
        padding-bottom:.1em;
 }
+
 .nihilo .dijitCalendarDayLabelTemplate {
-       
+       /* day of week labels */
        background:#fefefe;
        font-weight:normal;
        padding-top:.15em;
        color:#293a4b;
        text-align:center;
 }
+
 .nihilo .dijitCalendarBodyContainer {
        border-bottom: 1px solid #eeeeee;
 }
+
 .nihilo .dijitCalendarMonthLabel {
        color:#293a4b;
        font-weight: bold;
+       padding: 0 4px;
 }
+
 .nihilo .dijitCalendarDateTemplate {
-       
+       /* style for each day cell */
        font-size: 0.9em;
        font-weight: bold;
        text-align: center;
        background-color: #fdfdfd;
        border:#fdfdfd solid 1px !important;
 }
+
 .dj_ie .nihilo .dijitCalendarDateTemplate {
        padding: 0.1em .33em 0.02em .33em;
 }
+
 .nihilo .dijitCalendarPreviousMonth,
 .nihilo .dijitCalendarNextMonth                {
-       
+       /* days that are part of the previous or next month */
        color:#999999;
        background-color:#f5f5f5 !important;
        border:#f5f5f5 solid 1px !important;
 }
+
 .nihilo .dijitCalendarCurrentMonth {
-       
+       /* days that are part of this month */
 }
+
 .nihilo .dijitCalendarDisabledDate {
        text-decoration:line-through !important;
 }
+
 .nihilo .dijitCalendarCurrentDate {
-       
+       /* cell for today's date */
        text-decoration:underline;
        font-weight:bold;
 }
+
 .nihilo .dijitCalendarSelectedDate {
-       
+       /* cell for the selected date */
        background-color:#ffe284 !important;
        color:black !important;
        border:#f7c95c solid 1px !important;
 }
+
+
 .nihilo .dijitCalendarYearContainer {
-       
+       /* footer of the table that contains the year display/selector */
        background:white url("images/titleBar.png") repeat-x top;
 }
+
 .nihilo .dijitCalendarYearLabel {
-       
+       /* container for all of 3 year labels */
        margin:0;
        padding:0.4em 0 0.25em 0;
        text-align:center;
 }
+
 .nihilo .dijitCalendarSelectedYear {
-       
+       /* label for selected year */
        color:black;
        padding:0.2em;
        padding-bottom:0.1em;
        background-color:#ffe284 !important;
        border:#f7c95c solid 1px !important;
 }
+
 .nihilo .dijitCalendarNextYear,
 .nihilo .dijitCalendarPreviousYear {
-       
+       /* label for next/prev years */
        color:black !important;
        font-weight:normal;
 }
+
+/* Styling for month DropDownButton */
+
+.nihilo .dijitCalendar .dijitDropDownButton {
+       margin: 0;
+}
+.nihilo .dijitCalendar .dijitButtonText {
+       padding: 0;
+}
+.nihilo .dijitCalendar .dijitDropDownButton .dijitButtonNode {
+       background-color: transparent;
+       background-image: none;
+       padding: 0;
+}
+
+/* Styling for month drop down list */
+
+.nihilo .dijitCalendarMonthMenu .dijitCalendarMonthLabelHover {
+       background-color: #ffe284;
+       color: #243C5F;
+}
\ No newline at end of file
index 245d93fef5d39133f143c82c8321c1a209ef5da2..6fc06f4e3088b0911f49b29d92836113b9cfcafa 100644 (file)
@@ -1,7 +1,9 @@
+/* Calendar */
 
 .dijitRtl .nihilo .dijitCalendarDecrease {
        background-position: -30px top;
 }
+
 .dijitRtl .nihilo .dijitCalendarIncrease {
-       background-position: 0px top;
+       background-position: 0 top;
 }
index 328bc84a48bad202746b4b7060fa11a889596e0d..8fbe9d7ef7f4283aa4faa485349a0d309d9ebe93 100644 (file)
@@ -1,5 +1,5 @@
 .dijitColorPalette {
        border:1px solid #d3d3d3;
        background:#fff;
-       -moz-border-radius: 0px !important;
-}
+       -moz-border-radius: 0 !important;
+}
\ No newline at end of file
index c894deadf005ab1b4d67d97490070878c4244805..498699083fc04438d6bd8077bd78962ec1284d7a 100644 (file)
@@ -1,13 +1,17 @@
-
+/* DnD avatar-specific settings */
+/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */
 .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; }
index 1c2ff2e3d2d50ba6860da34ae9513afd6d8423fc..4affeb866e4c9541f1e74c6adb23fba58f5fc10f 100644 (file)
@@ -1,33 +1,39 @@
+/* Dialog */
 
 .nihilo .dijitDialog {
        background: #eee;
        border: 1px solid #d3d3d3;
-       -webkit-box-shadow: 0px 5px 10px #adadad;
-       padding: 0px;
+       -webkit-box-shadow: 0 5px 10px #adadad;
+       padding: 0;
 }
+
 .nihilo .dijitDialog .dijitDialogTitle {
-       
+       /* typography and styling of the dialog title */
        font-size: 0.9em;
-       color: #3243C5F;
+       color: #243C5F;
        font-weight: bold;
-       padding: 0px 4px;
+       padding: 0 4px;
 }
+
 .nihilo .dijitDialog .dijitDialogPaneContent {
        background: #ffffff;
        border-top: 1px solid #d3d3d3;
        padding:10px;
+
 }
+
 .nihilo .dijitDialogTitleBar {
-       
+       /* outer container for the titlebar of the dialog */
        background: #fafafa url("images/titleBar.png") repeat-x top left;
        padding: 5px 6px 3px 6px;
-       outline:0; 
+       outline:0; /* remove this line if keyboard focus on dialog startup is an issue. tab still takes you to first focusable element */
 }
+
 .nihilo .dijitDialogCloseIcon {
-       
+       /* the default close icon for the dialog */
        background-image: url("images/spriteRoundedIconsSmall.png");
        background-repeat: no-repeat;
-       background-position: -60px 0px;
+       background-position: -60px 0;
        position: absolute;
        vertical-align: middle;
        right: 6px;
 .nihilo .dijitDialogCloseIconHover {
        background-position: -60px -15px;
 }
+
+/* Tooltip and TooltipDialog */
+
 .nihilo .dijitTooltip,
 .nihilo .dijitTooltipDialog {
-       
-       background: transparent;        
+       /* the outermost dom node, holding the connector and container */
+       background: transparent;        /* make the area on the sides of the arrow transparent */
 }
+
 .dijitTooltipBelow {
-       
+       /* leave room for arrow above content */
        padding-top: 10px;
 }
+
 .dijitTooltipAbove {
-       
+       /* leave room for arrow below content */
        padding-bottom: 10px;
 }
+
 .nihilo .dijitTooltipContainer {
-       
+       /*
+               The part with the text.
+
+               NOTE:
+                       FF doesn't clip images used as CSS bgs if you specify a border
+                       radius. If you use a solid color, it does. Webkit gets it right.
+                       Sigh.
+               background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left;
+       */
        background-color: #fff;
        border:1px solid #d3d3d3;
        padding:0.45em;
 }
+
 .nihilo .dijitTooltipConnector {
-       
-       border:0px;
+       /* the arrow piece */
+       border:0;
        z-index: 2;
 }
+
 .nihilo .dijitTooltipABRight .dijitTooltipConnector {
-       
+       /* above or below tooltip, but the arrow appears on the right,
+               and the right edges of target and tooltip are aligned rather than the left */
        left: auto !important;
        right: 6px;
 }
+
 .nihilo .dijitTooltipBelow .dijitTooltipConnector {
-       
-       top: 0px;
+       /* the arrow piece for tooltips below an element */
+       top: 0;
        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;
+       /* the arrow piece for tooltips above an element */
+       bottom: 0;
        left: 6px;
        background:url("images/tooltipConnectorDown.png") no-repeat top left;
        width:17px;
 .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;
+       /* the arrow piece for tooltips to the left of an element, bottom borders aligned */
+       right: 0;
        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;
+       /* the arrow piece for tooltips to the right of an element, bottom borders aligned */
+       left: 0;
        background:url("images/tooltipConnectorLeft.png") no-repeat top left;
        width:11px;
        height:17px;
 .dj_ie .nihilo .dijitTooltipRight .dijitTooltipConnector {
        background-image: url("images/tooltipConnectorLeft.gif");
 }
+
index 105d5040c0dd4d77f431a2736847bb045fcaee5c..5e0cffc3d4a5059939665ff2a7078212b32863e6 100644 (file)
@@ -1,3 +1,4 @@
+/* Dialog */
 
 .dijitRtl .nihilo .dijitDialogTitleBar .dijitDialogCloseIcon {
        right: auto;
index 77280d9af666dd0f7c2f5ad91c6aeb77b58a7d9e..108aae78cf33840f4a1345e9770bdae825813053 100644 (file)
@@ -1,13 +1,16 @@
 .nihilo .dijitToolbar .dijitToolbarSeparator {
-       background: url('../../icons/images/editorIconsEnabled.png'); 
+       background: url('../../icons/images/editorIconsEnabled.png'); /* separator in editor icons sprite image - enabled state */
 }
+
+/**** ICONS *****/
+
 .nihilo .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsEnabled.png'); 
+       background-image: url('../../icons/images/editorIconsEnabled.png'); /* editor icons sprite image - enabled state */
        background-repeat: no-repeat;
        width: 18px;
        height: 18px;
        text-align: center;
 }
 .nihilo .dijitDisabled .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsDisabled.png'); 
+       background-image: url('../../icons/images/editorIconsDisabled.png'); /* editor icons sprite image - disabled state */
 }
index 37849a5bd8c30eb73fc09ebec1a5a828f2beee41..ca1cc0c86938b46e72fdf85e589f1c2163644164 100644 (file)
@@ -1,7 +1,9 @@
-
+/* Editor */
 .dijitRtl .nihilo .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsEnabled_rtl.png'); 
+       background-image: url('../../icons/images/editorIconsEnabled_rtl.png'); /* editor icons sprite image - enabled state */
 }
 .dijitRtl .nihilo .dijitDisabled .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsDisabled_rtl.png'); 
+       background-image: url('../../icons/images/editorIconsDisabled_rtl.png'); /* editor icons sprite image - disabled state */
 }
+
+
index b530a90b1d6ba17f63c89a152481b15a9255c325..cad469863007945adec6dfb1c5d2bca92b74da60 100644 (file)
@@ -1,37 +1,44 @@
 
+/* Menu */
 .nihilo .dijitMenu,
 .nihilo .dijitMenuBar {
        border: 1px solid #d3d3d3;
-       margin: 0px;
-       padding: 0px;
+       margin: 0;
+       padding: 0;
        background-color: #fff;
 }
+
 .nihilo .dijitBorderContainer .dijitMenuBar {
        border: 1px #ccc solid;
 }
+
 .nihilo .dijitMenuItem {
        font-family: sans-serif;
-       margin: 0px;
+       margin: 0;
        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; 
+       background-color: #ffe284; /* #95a0b0; #555555; #aaaaaa; #646464;  #60a1ea; #848484; */
        color: #243C5F;
 }
+
 .nihilo .dijitMenuItemIcon {
        width: 15px;
        height: 15px;
 }
+
 .nihilo .dijitMenuExpand {
        width:15px;
        height:15px;
 .dj_ie6 .nihilo .dijitMenuExpand {
        background-image:url('images/spriteRoundedIconsSmall.gif');
 }
+
 .nihilo .dijitMenuSeparator {
        height: 1px;
 }
+
+/* separator can be two pixels -- set border of either one to 0 to have only one */
 .nihilo .dijitMenuSeparatorTop {
-       border-bottom: 1px solid #fff; 
+       border-bottom: 1px solid #fff; /*97adcb; */
 }
+
 .nihilo .dijitMenuSeparatorBottom {
        border-top: 1px solid #d3d3d3;
 }
+
+/* the checked menu item */
 .nihilo .dijitCheckedMenuItemIconChar {
        display: none;
 }
+
 .nihilo .dijitCheckedMenuItemIcon {
        background-image: url('images/spriteCheckbox.gif');
        background-position: -80px;
 }
+
 .nihilo .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
        background-position: -64px;
-}
+}
\ No newline at end of file
index 06fccbf8123a31a80e2ac2a5cd0d5847911be917..40b3b4124a95935b7f0daf01ed4260d834928fc2 100644 (file)
@@ -1,8 +1,10 @@
+/* Menu */
 
 .dijitRtl .nihilo .dijitMenuItem .dijitMenuItemIcon {
        padding-left: 3px;
-       padding-right: 0px;
+       padding-right: 0;
 }
+
 .dijitRtl .nihilo .dijitMenuItem .dijitMenuExpand {
-       background-position: 0px top;
-}
+       background-position: 0 top;
+}
\ No newline at end of file
index 7713aeb7c1af6ef90d27373f754250c3c3a3906f..6c50a7ef6f6939e336f931159da3c110dad4b040 100644 (file)
@@ -1,24 +1,33 @@
 
+/****
+               dijit.ProgressBar
+ ****/
+
 .nihilo .dijitProgressBar {
-       margin:2px 0px 2px 0px;
+       margin:2px 0 2px 0;
 }
+
 .nihilo .dijitProgressBarEmpty{
-       
+       /* outer container and background of the bar that's not finished yet*/
        background:#fff url("images/progressBarEmpty.png") repeat-x center center;
        border-color: #f8d582 #f8d582 #f8d582 #f8d582;
 }
+
 .nihilo .dijitProgressBarTile{
-       
+       /* inner container for finished portion when in 'tile' (image) mode */
        background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
 }
+
 .nihilo .dijitProgressBarFull {
        border-right:1px solid #f8d582;
 }
+
 .nihilo .dijitProgressBarLabel {
-       
+       /* Set to a color that contrasts with both the "Empty" and "Full" parts. */
        color:#293a4b;
 }
+
 .nihilo .dijitProgressBarIndeterminate .dijitProgressBarTile {
-       
+       /* use an animated gif for the progress bar in 'indeterminate' mode */
        background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
-}
+}
\ No newline at end of file
index 63157f29cb845d851964bc971cf8cdbd116a099d..cffdbf55f54523ecf96b3ea67d5a99b3077379a6 100644 (file)
@@ -1,42 +1,51 @@
-
+/* Time Picker */
 .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;
-}
+}
\ No newline at end of file
index a6c0a68e7e635fc8a594ee26fec01f8715e8beb1..50848c3fb70c537fe2c20a1435d956e359e50b87 100644 (file)
@@ -1,4 +1,4 @@
 .dj_ie6-rtl .nihilo .dijitTimePickerMarkerHover,
 .dj_ie7-rtl .nihilo .dijitTimePickerMarkerHover {
-        border-top: 0px; 
+        border-top: 0; /* IE6/7 bug causes mouseover/out event storm */
 }
index 58ca8e56cd9f266517310aa1d48aca3c1e485de1..6d16ff940a0544cc7c707a0a749cde9dbdd1425e 100644 (file)
@@ -1,3 +1,7 @@
+/**
+ * dijit.TitlePane
+ *
+ */
 
 .nihilo .dijitTitlePaneTitle {
        background: #cccccc;
 .nihilo .dijitTitlePaneTitleHover  {
        background: #f9f9f9 url("images/accordionItemActive.png") top repeat-x;
 }
+
 .nihilo .dijitTitlePane .dijitOpen .dijitArrowNode,
 .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
        width:15px;
        height:15px;
 }
+
 .nihilo .dijitTitlePaneTextNode {
        color: #243C5F;
 }
+
 .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
        background: url('images/spriteRoundedIconsSmall.png') no-repeat -30px top;
 }
 .dj_ie6 .nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
        background:url('images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
 }
+
 .nihilo .dijitTitlePaneContentOuter {
        background: #ffffff;
        border:1px solid #bfbfbf;
-       border-top: 0px;
+       border-top: 0;
 }
 .nihilo .dijitTitlePaneContentInner {
        padding:10px;
 }
+
 .nihilo .dijitTitlePaneTextNode {
        margin-left: 4px;
        margin-right: 4px;
-}
+}
\ No newline at end of file
index a8aef8334090149cde68c24c2aa9124df1c852a7..7b3ba21f228aa958b3413e33a9cb4ee68d6a9b7d 100644 (file)
@@ -1,6 +1,6 @@
 .dijitRtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
-       background-position: 0px top;
+       background-position: 0 top;
 }
 .dj_ie6-rtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
-       background-position: 0px top;
-}
+       background-position: 0 top;
+}
\ No newline at end of file
index aeee9e4edd7214061f81af9fbc3c67e055dfd88b..1c3e32702c83af082077431022278b831921786a 100644 (file)
@@ -2,32 +2,38 @@
        border-bottom: 1px solid #ccc;
        background:#eaeaea url("images/titleBar.png") repeat-x top left;
 }
+
+/* setting a min-height on ditor toolbar */
 .dj_ie6 .nihilo .dijitToolbar {
        height: 10px;
 }
+
 .nihilo .dijitToolbar .dijitButtonNode,
 .nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
 .nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
        background: none;
-       margin: 0px;
-       padding: 0px;
+       margin: 0;
+       padding: 0;
        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;   
+       padding: 1px;   /* on hover etc., margin replaced w/border */
 }
+
 .nihilo .dijitToolbar .dijitButtonChecked,
 .nihilo .dijitToolbar .dijitToggleButtonChecked {
        background-color:#ffeeb9;
        border:1px solid #f7c95c;
        padding: 0;
 }
+
 .nihilo .dijitToolbar .dijitButtonCheckedHover,
 .nihilo .dijitToolbar .dijitToggleButtonCheckedHover
  {
        border:1px solid #f7c95c;
        padding: 0;
 }
+
 .nihilo .dijitToolbar .dijitButtonHover,
 .nihilo .dijitToolbar .dijitToggleButtonHover,
 .nihilo .dijitToolbar .dijitDropDownButtonHover,
 .nihilo .dijitToolbar .dijitComboButton .dijitButtonContentsHover,
 .nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
-       
+       /* TODO: change this from Hover to Selected so that button is still highlighted while drop down is being used */
        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 {
-       
+       /* focus border doesn't appear on <td> for IE, so need to add it manually */
        border: 1px #555 dotted !important;
-       padding: 0px;
-}
+       padding: 0;
+}
\ No newline at end of file
index b0012be1ec286c442c082e5b64f94271f670d8e4..a33b9696e3feced8e50608c0b7745ad5afc3b3c8 100644 (file)
+/* Tree */
 
 .nihilo .dijitTreeNode {
     background : url('images/treeI.gif') no-repeat;
     background-position : top left;
     background-repeat : repeat-y;
-    zoom: 1;   
+    zoom: 1;
 }
+
+/* left vertical line (grid) for all nodes */
 .nihilo .dijitTreeIsLast {
     background: url('images/treeI_half.gif') no-repeat;
 }
+
 .nihilo .dijitTreeRowHover {
-       
+       /* using a transparent png so that we can still see grid lines, which are (unfortunately) behind the dijitRowNode that we are hovering over */
        background-image: url(images/treeHover.png);
        background-repeat: repeat;
        background-color: transparent !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 {
-       
+       /* so insert line shows up on IE when dropping after a target element */
        padding-bottom: 2px;
 }
+
 .nihilo .dijitTreeContent {
     min-height: 18px;
     min-width: 18px;
     padding-left:1px;
 }
+
 .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;
 }
+
+/* Drag and Drop on TreeNodes
+ * Put insert line on dijitTreeContent node so it's aligned w/
+ * (ie, indented equally with) target element, even
+ * though dijitTreeRowNode is the actual "drag object"
+ */
 .nihilo .dijitTreeNode .dojoDndItemBefore,
 .nihilo .dijitTreeNode .dojoDndItemAfter {
        border-bottom: none;
        border-top: none;
 }
+
 .nihilo .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
-       
+       /* copied from Common.css */
        border-top: 2px solid #369;
 }
+
 .nihilo .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
-       
+       /* copied from Common.css */
        border-bottom: 2px solid #369;
-}
+}
\ No newline at end of file
index 6a7a889baa1a500966c3ec932c4bdf236e0e7c06..4462ed1bf0a7ff66c9dfd07db8ec1488c1212aa0 100644 (file)
@@ -1,18 +1,22 @@
+/* Tree */
 
 .dijitRtl .nihilo .dijitTreeNode,
 .dijitRtl .nihilo .dijitTreeExpandoLeaf {
-       
+       /* disable grid lines for Tree in RTL mode, too hard to support */
     background-image: none;
 }
+
 .dijitRtl .nihilo .dijitTreeContent {
-    padding-left: 0px;
+    padding-left: 0;
     padding-right: 1px;
 }
+
 .dijitRtl .nihilo .dijitTreeExpandoOpened {
-       
+       /* todo: icon contains grid line but grid lines disabled above */
        background: url('images/spriteTree_rtl.gif') no-repeat -18px top;
 }
+
 .dijitRtl .nihilo .dijitTreeExpandoClosed {
-       
+       /* todo: icon contains grid line but grid lines disabled above */
        background-image: url('images/spriteTree_rtl.gif');
 }
index b1ea84e96d38fb02e5e57e8b80e607163d3b3727..0be9ea4a328df29022b5323c925c5c3b45d90b81 100644 (file)
@@ -1,28 +1,42 @@
 
+/*****
+               dijit.form.Button
+               dijit.form.DropDownButton
+               dijit.form.ComboButton
+               dijit.form.ComboBox (partial)
+               dijit.form.Spinner (partial) (TODO: create NumberSpinner.css file like claro has)
+ *****/
+
 .nihilo .dijitButtonNode {
-       
-       
+       /* enabled state - inner */
+       /* border:1px outset #a0a0a0; */
        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 .dijitButtonText {
        text-align: center;
        padding: 0 0.3em;
 }
+
 .nihilo .dijitComboBox .dijitButtonNode {
-       border-width: 0px 0px 0px 1px;
+       border-width: 0 0 0 1px;
 }
+
 .nihilo .dijitArrowButton {
        color: #111;
 }
+
 .nihilo .dijitComboButton .dijitDownArrowButton {
        padding-right:4px;
 }
+
 .nihilo .dijitComboBoxReadOnly,
 .nihilo .dijitSpinnerReadOnly,
 .nihilo .dijitSpinnerReadOnly .dijitButtonNode,
@@ -33,7 +47,7 @@
 .nihilo .dijitComboBoxDisabled,
 .nihilo .dijitSpinnerDisabled,
 .nihilo .dijitSpinnerDisabled .dijitButtonNode {
-       
+       /* disabled state - inner */
        border-color: #dedede;
        background:#fafafa url("../images/buttonDisabled.png") top repeat-x;
        opacity: 0.60;
 .dj_ie7 .nihilo .dijitReadOnly INPUT,
 .dj_ie6 .nihilo .dijitComboButtonDisabled .dijitButtonText,
 .dj_ie7 .nihilo .dijitComboButtonDisabled .dijitButtonText {
-       
+       /* opacity doesn't work on table node in IE, work around here */
        color: #aaa;
 }
+
+
 .nihilo .dijitButtonHover .dijitButtonNode,
 .nihilo .dijitButtonNodeHover,
 .nihilo .dijitToggleButtonHover .dijitButtonNode,
 .nihilo .dijitButtonContentsHover,
 .nihilo .dijitDownArrowButtonHover,
 .nihilo .dijitUpArrowButtonHover {
-       
-       
+       /* hover state - inner */
+       /* TODO: change from Hover to Selected so that button is still highlighted while drop down is being used */
        color:#243C5F;
        background:#fcfcfc url("../images/buttonHover.png") repeat-x top left;
 }
+
 .nihilo .dijitUpArrowButtonActive,
 .nihilo .dijitDownArrowButtonActive,
 .nihilo .dijitButtonActive .dijitButtonNode,
 .nihilo .dijitDropDownButtonActive .dijitButtonNode,
 .nihilo .dijitComboButton .dijitButtonContentsActive,
 .nihilo .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
-       
+       /* active state - inner (for when you are pressing a normal button, or
+        * when a radio-type button is in a depressed state
+        */
        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 center;
+       background-position: 0 center;
        width: 11px;
        height: 11px;
 }
        background-image: url("../images/spriteArrows.gif");
 }
 .dj_webkit .nihilo .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
-       margin-top: -1px; 
+       margin-top: -1px; /* image has too many blank pixels on top */
 }
 .dj_ie .nihilo .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
-       margin-top: 1px; 
+       margin-top: 1px; /* image has too many blank pixels on top */
 }
 .nihilo .dijitSpinnerButtonContainer {
        width: auto;
index 3a7acc04c6226e4248cd5d195824711b7a0ccd10..60d4c4da4e6ae2a5e13b7e8c66a7bce941536b85 100644 (file)
@@ -1,7 +1,8 @@
 .dijitRtl .nihilo .dijitComboBox .dijitButtonNode {
-       border-width: 0px 0px 0px 1px;
+       border-width: 0 0 0 1px;
 }
 .dijitRtl .nihilo .dijitSelect .dijitButtonContents {
        border-left: none;
        border-right-width: 1px;
 }
+
index ceee44ffe1fbf309a29bcc4ef5e8844cbddd4258..260666f996a89f6bb26d36201cdb1882acedfa9c 100644 (file)
@@ -1,40 +1,67 @@
 
+/*
+ *  CheckBox and Radio Widgets,
+ *     and the CSS to embed a checkbox or radio icon inside a ToggleButton.
+ *
+ *     Order of images in the default sprite (from L to R, checkbox and radio in same image):
+ *             checkbox        normal   - checked
+ *                                                      - unchecked
+ *                                     disabled - checked
+ *                                                      - unchecked
+ *                                     hover    - checked
+ *                                                      - unchecked
+ *
+ *             radio           normal   - checked
+ *                                                      - unchecked
+ *                                     disabled - checked
+ *                                                      - unchecked
+ *                                     hover    - checked
+ *                                                      - unchecked
+*/
+
 .nihilo .dijitToggleButton .dijitCheckBox,
 .nihilo .dijitToggleButton .dijitCheckBoxIcon {
        background-image: url('../images/spriteCheckbox.gif');
 }
+
 .nihilo .dijitCheckBox,
-.nihilo .dijitCheckBoxIcon {           
-       background-image: url('../images/spriteCheckbox.gif'); 
+.nihilo .dijitCheckBoxIcon {           /* inside a toggle button */
+       background-image: url('../images/spriteCheckbox.gif'); /* checkbox sprite image */
        background-repeat: no-repeat;
        width: 16px;
        height: 16px;
        margin: 0;
        padding: 0;
 }
+
 .nihilo .dijitCheckBox,
 .nihilo .dijitToggleButton .dijitCheckBoxIcon {
-       
+       /* unchecked */
        background-position: -16px;
 }
+
 .nihilo .dijitCheckBoxChecked,
 .nihilo .dijitToggleButtonChecked .dijitCheckBoxIcon {
-       
-       background-position: 0px;
+       /* checked */
+       background-position: 0;
 }
+
 .nihilo .dijitCheckBoxDisabled {
-       
+       /* disabled */
        background-position: -48px;
 }
+
 .nihilo .dijitCheckBoxCheckedDisabled {
-       
+       /* disabled but checked */
        background-position: -32px;
 }
+
 .nihilo .dijitCheckBoxHover {
-       
+       /* hovering over an unchecked enabled checkbox */
        background-position: -80px;
 }
+
 .nihilo .dijitCheckBoxCheckedHover {
-       
+       /* hovering over a checked enabled checkbox */
        background-position: -64px;
-}
+}
\ No newline at end of file
index fab63eba86bc946f931336ace5d61c3213b4ae9a..65dddc637f3e7787a41cf60d140faa972577e689 100644 (file)
@@ -1,25 +1,42 @@
 
+/****
+               dijit.form.TextBox
+               dijit.form.ValidationTextBox
+               dijit.form.SerializableTextBox
+               dijit.form.RangeBoundTextBox
+               dijit.form.NumberTextBox
+               dijit.form.CurrencyTextBox
+               dijit.form.NumberSpinner
+               dijit.form.ComboBox (partial)
+ ****/
+
 .nihilo .dijitInputContainer INPUT,
 .nihilo .dijitTextBox {
-       margin: 0em 0.1em;
+       margin: 0 0.1em;
 }
+
 .nihilo .dijitTextBox,
 .nihilo .dijitTextArea {
-       
+       /*      For all except dijit.form.NumberSpinner:  the actual input element.
+               For TextBox, ComboBox, Spinner: the table that contains the input.
+               Otherwise the actual input element.
+       */
        background:#fff url("../images/validationInputBg.png") repeat-x top left;
        #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
        border:1px solid #d3d3d3;
 }
+
 .nihilo .dijitComboBox .dijitButtonNode {
        padding: 0 0.2em !important;
 }
 .nihilo .dijitTextBox .dijitButtonNode {
-       
+       /* line between the input area and the drop down button */
        border-color: #d3d3d3;
 }
+
 .nihilo .dijitTextBoxFocused,
 .nihilo .dijitTextAreaFocused {
-       
+       /* input field when focused (ie: typing affects it) */
        border-color:#b3b3b3;
 }
 .nihilo .dijitTextBoxFocused .dijitButtonNode,
 .nihilo .dijitSpinner .dijitDownArrowButtonActive {
        border-top-color:#d3d3d3;
 }
+
 .nihilo .dijitError {
        border-color:#b3b3b3;
        background-color:#f9f7ba;
        background-image:none;
 }
+
 .nihilo .dijitErrorFocused {
        background-color:#ff6;
        background-image:none;
 }
+
+/* Validation errors  */
 .nihilo .dijitValidationIcon {
-       
+       /* prevent height change when widget goes from valid to invalid state */
        width: 16px;
        background: transparent url('../images/warning.png') no-repeat center center;
 }
+
+/* The highlight is shown in the ComboBox menu. */
 .nihilo .dijitComboBoxHighlightMatch {
        background-color:#d3d3d3;
 }
index c876f590e84510e26984ebd5d4a6c4a7ab726d0d..d0dba30200436f0e5cafe3bbe034074f05a3096d 100644 (file)
@@ -1,40 +1,66 @@
+/*
+ *  CheckBox and Radio Widgets,
+ *     and the CSS to embed a checkbox or radio icon inside a ToggleButton.
+ *
+ *     Order of images in the default sprite (from L to R, checkbox and radio in same image):
+ *             checkbox        normal   - checked
+ *                                                      - unchecked
+ *                                     disabled - checked
+ *                                                      - unchecked
+ *                                     hover    - checked
+ *                                                      - unchecked
+ *
+ *             radio           normal   - checked
+ *                                                      - unchecked
+ *                                     disabled - checked
+ *                                                      - unchecked
+ *                                     hover    - checked
+ *                                                      - unchecked
+*/
 
 .nihilo .dijitToggleButton .dijitRadio,
 .nihilo .dijitToggleButton .dijitRadioIcon {
        background-image: url('../images/spriteRadio.gif');
 }
+
 .nihilo .dijitRadio,
-.nihilo .dijitRadioIcon        {               
-       background-image: url('../images/spriteRadio.gif'); 
+.nihilo .dijitRadioIcon        {               /* inside a toggle button */
+       background-image: url('../images/spriteRadio.gif'); /* checkbox sprite image */
        background-repeat: no-repeat;
        width: 16px;
        height: 16px;
        margin: 0;
        padding: 0;
 }
+
 .nihilo .dijitRadio,
 .nihilo .dijitToggleButton .dijitRadioIcon {
-       
+       /* unselected */
        background-position: -16px;
 }
+
 .nihilo .dijitRadioChecked,
 .nihilo .dijitToggleButtonChecked .dijitRadioIcon {
-       
-       background-position: 0px;
+       /* selected */
+       background-position: 0;
 }
+
 .nihilo .dijitRadioDisabled {
-       
+       /* unselected and disabled */
        background-position: -48px;
 }
+
 .nihilo .dijitRadioCheckedDisabled {
-       
+       /* selected but disabled */
        background-position: -32px;
 }
+
 .nihilo .dijitRadioHover {
-       
+       /* hovering over an unselected enabled radio button */
        background-position: -80px;
 }
+
 .nihilo .dijitRadioCheckedHover {
-       
+       /* hovering over a selected enabled radio button */
        background-position: -64px;
-}
+}
\ No newline at end of file
index af811f50e1b433fcf7ae60624aa6224a14a680b3..61967e5507f092a5970f8c2d5b0693dd4d5b91dd 100644 (file)
@@ -1,6 +1,8 @@
 .nihilo .dijitSelect .dijitButtonNode {
-       padding: 0px;
+       padding: 0;
 }
+
+/* Make unselected "look" more like a text box and less like a button */
 .nihilo .dijitSelect .dijitButtonContents {
        padding-top: 1px;
     background:#fff url("../images/validationInputBg.png") repeat-x top left;
        background: transparent none;
 }
 .dj_ie .nihilo .dijitSelect .dijitButtonContents {
-       padding-top: 0px;
+       padding-top: 0;
 }
+
 .nihilo .dijitSelect .dijitArrowButton {
-       padding: 0px 2px;
+       padding: 0 2px;
 }
+
+/* Mirror DropDownButton */
 .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;
 }
+
+/* Make the menu look more combobox-like */
 .nihilo .dijitSelectMenu td {
-       padding: 0em;
+       padding: 0;
 }
 .nihilo .dijitSelectMenu .dijitMenuItemLabel,
 .nihilo .dijitSelectMenu .dijitMenuArrowCell {
        padding: 0.1em 0.2em;
 }
+
index 6458e89f05dbae515267df68d821d04ab8685b0e..16bcd09800ba94b68710d3d4907b7bba3f32510e 100644 (file)
@@ -1,38 +1,49 @@
 
+/****
+       SLIDER
+****/
+
 .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;
-       
+       /* border-color: #b4b4b4; */
 }
 .nihilo .dijitSliderFocused .dijitSliderBar {
        border-color:#727272;
 }
+
 .nihilo .dijitSliderImageHandleH {
-       border:0px;
+       border:0;
        width:15px;
        height:18px;
        background:url("../images/preciseSliderThumb.png") no-repeat center top;
        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;
+       border:0;
        width:20px;
        height:15px;
        background:url("../images/sliderThumb.png") no-repeat center center;
        #background:url("../images/sliderThumb.gif") no-repeat center center;
 }
+
 .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.png') no-repeat -30px top;
        #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
 }
+
 .nihilo .dijitSliderDecrementIconH,
 .nihilo .dijitSliderDecrementIconV {
        width:15px;
        #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;
+       background:url('../images/spriteRoundedIconsSmall.png') no-repeat 0 top;
+       #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat 0 top;
 }
+
 .nihilo .dijitSliderButtonInner {
        visibility:hidden;
 }
+
 .nihilo .dijitSliderReadOnly *,
 .nihilo .dijitSliderDisabled * {
        border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
 }
 .nihilo .dijitSliderReadOnly .dijitSliderDecrementIconH,
 .nihilo .dijitSliderDisabled .dijitSliderDecrementIconH {
-       background-position: 0px -15px;
+       background-position: 0 -15px;
 }
 .nihilo .dijitSliderReadOnly .dijitSliderIncrementIconH,
 .nihilo .dijitSliderDisabled .dijitSliderIncrementIconH {
 .nihilo .dijitSliderReadOnly .dijitSliderIncrementIconV,
 .nihilo .dijitSliderDisabled .dijitSliderIncrementIconV {
        background-position: -45px -15px;
-}
+}
\ No newline at end of file
index fc40452deb915f0fae673af7b7108480b3933154..1523d4a9689db1bf766050cf4faa14965ae97e28 100644 (file)
@@ -1,4 +1,6 @@
 
+/* Slider */
+
 .dijitRtl .nihilo .dijitSliderProgressBarH,
 .dijitRtl .nihilo .dijitSliderRemainingBarH,
 .dijitRtl .nihilo .dijitSliderLeftBumper,
@@ -6,23 +8,28 @@
 .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-left-width: 0;
        border-right-width: 1px;
 }
+
 .dijitRtl .nihilo .dijitSliderRightBumper {
        border-left-width: 1px;
-       border-right-width: 0px;
+       border-right-width: 0;
 }
+
 .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;
index d450925b415601abdf28857e4cd3fdccd145d96e..bf67b66d07cfa85b0628cb720c2fa7be1a85b66b 100644 (file)
@@ -1 +1 @@
-@CHARSET "UTF-8";
+@CHARSET "UTF-8";
\ No newline at end of file
index a74b01a2efe20403ebafb2082d1b156234c2fe78..f42db806c97ded9e79cafe7126b13920a2d6f0bb 100644 (file)
@@ -1,8 +1,15 @@
+/**
+ * dijit.layout.Accordioncontainer
+ *
+ */
 
 .nihilo .dijitAccordionContainer {
        border-color: #ccc;
        background-color: #fff;
 }
+
+/* common */
+
 .nihilo .dijitAccordionTitle {
        background:#fafafa url("../images/titleBar.png") repeat-x top left;
        border-top: 1px solid #dedede;
@@ -11,6 +18,7 @@
        font-weight: bold;
        color: #6d6d6d;
 }
+
 .nihilo .dijitAccordionTitleSelected  {
        background: #f9f9f9 url("../images/accordionItemActive.png") top repeat-x;
        font-weight: bold;
        padding: 5px 4px 5px 8px;
        color: #243C5F;
 }
+
 .nihilo .dijitAccordionArrow {
        background:url("../images/spriteRoundedIconsSmall.gif") no-repeat -30px top;
        width:15px;
        height:15px;
        margin-top:-1px;
 }
+
 .nihilo .dijitAccordionTitleSelected .dijitAccordionArrow {
        background:url("../images/spriteRoundedIconsSmall.gif") no-repeat -15px top;
        margin-top:-1px;
 }
+
 .nihilo .dijitAccordionText {
        margin-left: 4px;
        margin-right: 4px;
index b71afbacf2a0ff9779e02e30a86a94d8b1537ef8..f669a4753a34a51d4854aa81beb7b730f4b57dd0 100644 (file)
@@ -1,7 +1,8 @@
 .dijitRtl .nihilo .dijitAccordionArrow {
-       background-position: 0px top;
+       background-position: 0 top;
 }
+
 .dijitRtl .nihilo .dijitAccordionTitleSelected .dijitAccordionArrow {
-       
+       /* same rule as LTR mode, just listed to override previous rule in this file */
        background-position: -15px top;
 }
index 29fcc39da705cac3286b5fb81a1600c0eae2e7da..493da54e17cbc9067a63a772b1eb0bcb0447b5fb 100644 (file)
@@ -1,53 +1,70 @@
+/**
+ * dijit.layout.BorderContainer
+ *
+ */
 
 .nihilo .dijitBorderContainer {
        background-color: #fcfcfc;
        padding: 5px;
 }
+
 .nihilo .dijitSplitContainer-child,
 .nihilo .dijitBorderContainer-child {
-       
+       /* By default, put borders on all children of BorderContainer,
+        *  to give illusion of borders on the splitters themselves.
+        */
     border: 1px #ccc solid;
 }
+
 .nihilo .dijitBorderContainer-dijitTabContainerTop,
 .nihilo .dijitBorderContainer-dijitTabContainerBottom,
 .nihilo .dijitBorderContainer-dijitTabContainerLeft,
 .nihilo .dijitBorderContainer-dijitTabContainerRight {
-       
+       /* except that TabContainer defines borders on it's sub-nodes (tablist and dijitTabPaneWrapper),
+        * so override rule setting border on domNode
+        */
         border: none;
 }
+
 .nihilo .dijitBorderContainer-dijitBorderContainer {
-       
+       /* also, make nested BorderContainers look like a single big widget with lots of splitters */
        border: none;
-       padding: 0px;
+       padding: 0;
 }
+
 .nihilo .dijitSplitterH,
 .nihilo .dijitGutterH {
        background:#FCFCFC;
        border:0;
-       border-left:0px solid #d3d3d3;
-       border-right:0px solid #d3d3d3;
+       border-left:0 solid #d3d3d3;
+       border-right:0 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;
+       border-top:0 solid #d3d3d3;
+       border-bottom:0 solid #d3d3d3;
        width:5px;
 }
+
 .nihilo .dijitSplitterV .dijitSplitterThumb {
        background:#8BA0BD none;
        height:19px;
        left:2px;
        width:1px;
 }
+
+/* active splitter */
 .nihilo .dijitSplitterActive {
        font-size: 1px;
        background-image: none;
@@ -56,4 +73,4 @@
        opacity: 0.6;
        filter: Alpha(Opacity=60);
        margin: 0;
-}
+}
\ No newline at end of file
index 2bd0a191b2e448f6e7e477c97df9b41cb5c6405a..75272db5ac7c5c973fec51aafc59b6d9c2273d5d 100644 (file)
@@ -1,7 +1,10 @@
+/* ContentPane */
 
 .nihilo .dijitContentPane {
-    padding: 0px;
+    padding: 0;
 }
+
+/* nested layouts */
 .nihilo .dijitTabContainerTop-dijitContentPane,
 .nihilo .dijitTabContainerLeft-dijitContentPane,
 .nihilo .dijitTabContainerRight-dijitContentPane,
@@ -10,8 +13,9 @@
     background-color: #fff;
     padding: 5px;
 }
+
 .nihilo .dijitSplitContainer-dijitContentPane,
 .nihilo .dijitBorderContainer-dijitContentPane {
-    background-color: #fff;            
+    background-color: #fff;            /* override background-color setting on parent .dijitBorderContainer */
     padding: 5px;
-}
+}
\ No newline at end of file
index 79d8fbddefe267a20438eb9557298c8a95b7e68f..9f4defadd0965661e857d096b45d97dcc336f03a 100644 (file)
@@ -1,27 +1,34 @@
+/**
+ * dijit.layout.SplitContainer
+ *
+ */
 
 .nihilo .dijitSplitContainerSizerH {
        background:url("../images/splitContainerSizerV.png") repeat-y #fff;
        border:0;
-       border-left:0px solid #d3d3d3;
-       border-right:0px solid #d3d3d3;
+       border-left:0 solid #d3d3d3;
+       border-right:0 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;
+       border-top:0 solid #d3d3d3;
+       border-bottom:0 solid #d3d3d3;
        height:2px;
 }
+
 .nihilo .dijitSplitContainerSizerV .thumb {
        background:url("../images/splitContainerSizerH-thumb.png") no-repeat;
        top:1px;
        width:19px;
        height:5px;
-}
+}
\ No newline at end of file
index 3652f229bd4199599defdeee24288190c098359e..21266577e0f675940e4dfbf2d429325de00e2fc5 100644 (file)
+/**
+ * dijit.layout.TabContainer
+ *
+ * To style TabContainer with rounded corners
+ * you can use these classes: .dijitTab (left), .dijitTabContent (center), dijitTabInnerDiv (right)
+ * For tabs aligned to top you can style a stripe div right underneath the tabs using .dijitTabStripe
+ */
+@import url("../Menu.css");
+
+/* Classes for all types of tabs (top/bottom/left/right) */
 
-.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;
+       top: 0;
 }
+
+/* Tabs, shared classes */
 .nihilo .dijitTabPaneWrapper {
        background:#fff;
        border:1px solid #ccc;
        margin: 0;
        padding: 0;
 }
+
 .nihilo .dijitTabInnerDiv {
-       padding:0px 3px 0px 0px;
+       padding:0 3px 0 0;
        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;
+       margin:0 2px 0 0;       /* space between one tab and the next in top/bottom mode */
+       padding:0;
        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;
 }
+
+/* hovered tab */
 .nihilo .dijitTabHover {
        color: #243C5F;
-       background: url("../images/tabContainerSprite.gif") no-repeat 0px -150px;
+       background: url("../images/tabContainerSprite.gif") no-repeat 0 -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;
 }
+
+/* checked tab*/
 .nihilo .dijitTabChecked
 {
-       
-       background: url("../images/tabContainerSprite.gif") no-repeat 0px -0px;
+       /* the selected tab (with or without hover) */
+       background: url("../images/tabContainerSprite.gif") no-repeat 0 -0;
 }
+
 .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;
 }
+
+/* Nested Tabs */
 .nihilo .dijitTabContainerNested .dijitTabListWrapper {
        height: auto;
 }
+
 .nihilo .dijitTabContainerTabListNested {
        background: #FDFDFD;
        border: none;
-       margin-bottom: 0px;             
+       margin-bottom: 0;               /* override margin: -1px; */
 }
 .nihilo .dijitTabContainerTabListNested .dijitTab {
        background: none;
        border: none;
-       top: 0px;       
+       top: 0; /* override top:1px setting of top-level tabs */
 }
 .nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
 .nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
        font-weight: bold;
 }
 .nihilo .dijitTabContainerSpacerNested {
-       
-       height: 0px;
-       border-bottom: 0px;
+       /* thinner line between tab (labels) and content */
+       height: 0;
+       border-bottom: 0;
 }
 .nihilo .dijitTabPaneWrapperNested {
-       border: none;   
+       border: none;   /* prevent double border */
 }
+
+
+/* Close button */
 .nihilo .dijitTabCloseButton {
        background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px top;
        width: 15px;
        height: 15px;
        margin-top: -1px;
 }
+
 .dj_ie6 .nihilo .dijitTabCloseButton {
        background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px top;
 }
 .dj_ie6 .nihilo .dijitTabCloseButtonHover {
        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;
-}
+
+/* ================================ */
+/* top tabs */
 .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;
+       padding-bottom: 0;
 }
+
 .nihilo .dijitTabContainerTopNoStrip {
        padding-top: 3px;
 }
+
+/* top container */
 .nihilo .dijitTabContainerTop-container {
        border-top: none;
 }
+
+/* checked tabs */
 .nihilo .dijitTabContainerTop-tabs .dijitTabChecked {
        border-bottom-color: #f8f8f8;
 }
+
+/* strip */
 .nihilo .dijitTabContainer .dijitTabContainerTopStrip {
        border-bottom: none;
        padding-top: 1px;
        border-right: 1px solid #CCC;
        border-left: 1px solid #CCC;
 }
+
+
+/* ================================ */
+/* bottom tabs */
 .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;
 }
+
+/* bottom container */
 .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;
 }
+
+/* checked tabs */
 .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 {
-       
+       /* the selected tab (with or without hover) */
        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;
 }
+
+/* strip */
 .nihilo .dijitTabContainer .dijitTabContainerBottomStrip {
        border: 1px solid #ccc;
        background: #f2f2f2;
        border-top: none;
        padding-bottom: 2px;
 }
+
+/* top/bottom strip */
 .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;
 }
+
+
+/* ================================ */
+/* right tabs */
 .nihilo .dijitTabContainerRight-tabs {
        border-color: #ccc;
        padding-top: 3px;
 .nihilo .dijitTabContainerRight .dijitTabListWrapper {
        padding-right: 3px;
 }
+
+/* right container */
 .nihilo .dijitTabContainerRight-container {
        border-right: none;
 }
+
 .nihilo .dijitTabContainerRight-tabs .dijitTab {
        border-bottom: none;
        border-left: 1px solid #ccc;
        border-bottom: 1px solid #dedede !important;
 }
+
+
+/* some odd ie bug when borders dissapear when setting a bottom margin, this sortof helps */
 .dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabInnerDiv {
        border-bottom: solid #fff 1px;
 }
+
+/* checked tabs */
 .nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
        border-left-color: #f8f8f8;
 }
+
 .nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
        background: url("../images/tabRightChecked.gif") no-repeat left top !important;
 }
+
+/* some odd ie bug when borders dissapear when setting a bottom margin, this sortof helps */
 .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;
 }
+
+/* strip */
 .nihilo .dijitTabContainerRightStrip {
        padding-right: 2px;
        border: 1px solid #ccc;
        border-left: none;
        background: #f2f2f2;
 }
+
+/* ================================ */
+/* left tabs */
 .nihilo .dijitTabContainerLeft-tabs {
        border-color: #ccc;
        padding-top: 3px;
 }
+
+/* left conatiner */
 .nihilo .dijitTabContainerLeft-container {
        border-left: none;
 }
+
 .nihilo .dijitTabContainerLeft-tabs .dijitTab {
        border-right: 1px solid #ccc;
        border-bottom: 1px solid #dedede;
 }
+
+/* checked tabs */
 .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 .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;
 }
+
+/* strip */
 .nihilo .dijitTabContainerLeftStrip {
        padding-left: 2px;
        border: 1px solid #ccc;
        border-right: none;
 }
+
 .nihilo .dijitTabContainerLeftStrip {
        background: #f2f2f2;
 }
+
+/* ================================ */
+/* left/right tabs */
 .nihilo .dijitTabContainerLeft-tabs .dijitTab,
 .nihilo .dijitTabContainerRight-tabs .dijitTab {
        margin-right:auto;
-       margin-bottom:2px;      
+       margin-bottom:2px;      /* space between one tab and the next in left/right mode */
 }
+
+/* left/right tabstrip */
 .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;
 }
+
+/* ================================ */
+
+/* this resets the tabcontainer stripe when within a contentpane */
 .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;
+       border-left: 0 solid #ccc;
+       border-top: 0 solid #ccc;
+       border-right: 0 solid #ccc;
+       padding-top: 0;
+       padding-left: 0;
 }
+
+/* ================================ */
+
+/* Menu and slider control styles */
 .nihilo .dijitTabContainer .tabStripButton {
-       margin-right: 0px;
+       margin-right: 0;
 }
+
 .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 .dijitTabStripIcon {
        height: 14px;
        width: 14px;
        background: url(../images/spriteRoundedIconsSmall.png) no-repeat left top;
 }
+
 .dj_ie6 .nihilo .dijitTabStripIcon {
        background-image: url(../images/spriteRoundedIconsSmall.gif);
 }
+
 .nihilo .dijitTabStripSlideRightIcon {
        background-position: -30px top;
 }
+
 .nihilo .dijitTabStripMenuIcon {
        background-position: -15px top;
 }
+
 .nihilo .dijitTabContainerTopNone {
-       padding-top: 0px;
+       padding-top: 0;
 }
+
 .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;
-}
+}
\ No newline at end of file
index 8a55f5026d137162e01f5d821828ab9a7277eaef..225fc3eba90b87f325b0cdca21c743fcb6ab8d19 100644 (file)
@@ -1,10 +1,13 @@
 .dijitRtl .nihilo .dijitTab {
        margin-right:0;
-       margin-left:2px;                
+       margin-left:2px;                /* space between one tab and the next in top/bottom mode */
 }
+
+/* tab strips */
 .dijitRtl .nihilo .dijitTabContainer .tabStripButton {
        margin-left: 0;
 }
+
 .dijitRtl .nihilo .dijitTabContainerTopStrip,
 .dijitRtl .nihilo .dijitTabContainerBottomStrip,
 .dijitRtl .nihilo .dijitTabContainerTop-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;
+       margin-left: 0 !important;
 }
+
 .dj_ie-rtl .nihilo .dijitTabContainerRight-tabs {
-       margin-right: 0px !important;
+       margin-right: 0 !important;
 }
+
 .dijitRtl .nihilo .dijitTabContainerLeft-tabs .dijitTab,
 .dijitRtl .nihilo .dijitTabContainerRight-tabs .dijitTab {
-       margin-left:0px;
+       margin-left:0;
 }
+
 .dj_ie-rtl .nihilo .dijitTab .dijitTabInnerDiv{
        width : 1%;
-}
+}
\ No newline at end of file
index 5a0bc3e3dc06782861c48d0c1fb1b72ea6cf8b02..97ba8f6ebe44ff74bfeb9106b3efecfa25baaea1 100644 (file)
+/*
+       Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
 
-.dijitReset {
-       
-       margin:0;
-       border:0;
-       padding:0;
-       line-height:normal;
-       font: inherit;
-       color: inherit;
-}
-.dijit_a11y .dijitReset {
-       -moz-appearance: none; 
-}
-.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;                     
-}
-.dijitInputContainer {
-       
-       #zoom: 1;
-       overflow: hidden;
-       float: none !important; 
-       position:relative;
-}
-.dj_ie INPUT.dijitTextBox,
-.dj_ie .dijitTextBox INPUT {
-       font-size: 100%;
-}
-.dijitTextBox .dijitSpinnerButtonContainer,
-.dijitTextBox .dijitArrowButtonContainer,
-.dijitTextBox .dijitValidationContainer {
-       float: right;
-       text-align: center;
-}
-.dijitTextBox INPUT.dijitInputField {
-       
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-}
-.dijitTextBox .dijitValidationContainer {
-       display: none;
-}
-.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;
-}
-.dijitOffScreen {
-       position: absolute;
-       visibility: hidden;
-       left: 50%;
-       top: -10000px;
-}
-.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;
-}
-.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;
-}
-.dijitDisplayNone {
-       
-       display:none !important;
-}
-.dijitContainer {
-       
-       overflow: hidden;       
-}
-.dijit_a11y * {
-       background-image:none !important;
-}
-.dijit_a11y .dijitIcon,
-.dijit_a11y DIV.dijitArrowButtonInner, 
-.dijit_a11y SPAN.dijitArrowButtonInner,
-.dijit_a11y IMG.dijitArrowButtonInner,
-.dijit_a11y .dijitCalendarIncrementControl {
-       
-       display: none;
-}
-.dijitSpinner DIV.dijitArrowButtonInner {
-       display: block; 
-}
-.dijit_a11y .dijitA11ySideArrow {
-       display: inline !important; 
-       cursor: pointer;
-}
-.dijit_a11y .dijitCalendarDateLabel {
-       padding: 1px;
-}
-.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
-       border-style: dotted !important;
-       border-width: 1px;
-       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 .dijitTextBoxReadOnly .dijitInputField,
-.dijit_a11y .dijitTextBoxReadOnly .dijitButtonNode {
-       border-style: outset!important;
-       border-width: medium!important;
-       border-color: #999 !important;
-       color:#999 !important;
-}
-.dijitButtonNode * {
-       vertical-align: middle;
-}
-.dijitButtonNode .dijitArrowButtonInner {
-       
-       background: no-repeat center;
-       width: 12px;
-       height: 12px;
-       direction: ltr; 
-}
-.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;
-}
-.dijitButtonContents {
-       display: block;         
-}
-td.dijitButtonContents {
-       display: table-cell;    
-}
-.dijitButtonNode IMG {
-       
-       vertical-align:middle;
-       
-}
-TABLE.dijitComboButton { 
-       
-       border-collapse: collapse;
-       border:0;
-       padding:0;
-       margin:0;
-}
-.dijitToolbar .dijitComboButton {
-       
-       border-collapse: separate;
-}
-.dijitToolbar .dijitToggleButton,
-.dijitToolbar .dijitButton,
-.dijitToolbar .dijitDropDownButton,
-.dijitToolbar .dijitComboButton {
-       margin: 0;
-}
-.dijitToolbar .dijitButtonContents {
-       
-       padding: 1px 2px;
-}
-.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;
-}
-.dj_webkit .dijitSpinner .dijitSpinnerButtonContainer {
-       
-       line-height:inherit;
-}
-.dijitTextBox .dijitButtonNode {
-       border-width: 0;
-}
-.dijitButtonNode,
-.dijitButtonNode * {
-       cursor: pointer;
-}
-.dj_ie .dijitButtonNode {
-       
-       zoom: 1;
-}
-.dj_ie .dijitButtonNode button {
-       
-       overflow: visible;
-}
-DIV.dijitArrowButton {
-       float: right;
-}
-.dijitTextBox {
-       border: solid black 1px;
-       #overflow: hidden; 
-       width: 15em;    
-       vertical-align: middle;
-       #vertical-align: auto;
-}
-.dijitTextBoxReadOnly,
-.dijitTextBoxDisabled {
-       color: gray;
-}
-.dj_webkit .dijitTextBoxDisabled INPUT {
-       color: #eee; 
-}
-.dj_webkit TEXTAREA.dijitTextAreaDisabled {
-       color: #333; 
-}
-.dj_gecko .dijitTextBoxReadOnly INPUT,
-.dj_gecko .dijitTextBoxDisabled INPUT {
-       -moz-user-input: none; 
-}
-.dijitPlaceHolder {
-       
-       color: #AAAAAA;
-       font-style: italic;
-       position: absolute;
-       top: 0;
-       left: 0;
-       #filter: ""; 
-}
-.dijitTimeTextBox {
-       width: 8em;
-}
-.dijitTextBox INPUT:focus {
-       outline: none;  
-}
-.dijitTextBoxFocused {
-       outline: auto 5px -webkit-focus-ring-color;
-}
-.dijitTextBox INPUT {
-       float: left; 
-}
-.dijitInputInner {
-       
-       border:0 !important;
-       vertical-align:middle !important;
-       background-color:transparent !important;
-       width:100% !important;
-       
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-       margin-left: 0 !important;
-       margin-right: 0 !important;
-}
-.dijit_a11y .dijitTextBox INPUT {
-       margin: 0 !important;
-}
-.dijitTextBoxError INPUT.dijitValidationInner,
-.dijitTextBox INPUT.dijitArrowButtonInner {
-       
-       text-indent: -1em !important;
-       direction: ltr !important;
-       text-align: left !important;
-       height: auto !important;
-       #text-indent: 0 !important;
-       #letter-spacing: -5em !important;
-       #text-align: right !important;
-}
-.dj_ie .dijitTextBox INPUT,
-.dj_ie INPUT.dijitTextBox {
-       overflow-y: visible; 
-       line-height: normal; 
-}
-.dj_ie7 .dijitTextBox INPUT.dijitValidationInner,
-.dj_ie7 .dijitTextBox INPUT.dijitArrowButtonInner {
-       line-height: 86%; 
-}
-.dj_ie6 .dijitTextBox INPUT,
-.dj_ie6 INPUT.dijitTextBox,
-.dj_iequirks .dijitTextBox INPUT.dijitValidationInner,
-.dj_iequirks .dijitTextBox INPUT.dijitArrowButtonInner,
-.dj_iequirks .dijitTextBox INPUT.dijitSpinnerButtonInner,
-.dj_iequirks .dijitTextBox INPUT.dijitInputInner,
-.dj_iequirks INPUT.dijitTextBox {
-       line-height: 100%; 
-}
-.dijit_a11y INPUT.dijitValidationInner,
-.dijit_a11y INPUT.dijitArrowButtonInner {
-       
-       text-indent: 0 !important;
-       width: 1em !important;
-       #text-align: left !important;
-}
-.dijitTextBoxError .dijitValidationContainer {
-       display: inline;
-       cursor: default;
-}
-.dijitSpinner .dijitSpinnerButtonContainer,
-.dijitComboBox .dijitArrowButtonContainer {
-       
-       border-width: 0 0 0 1px !important; 
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
-       
-       border-width: 0;
-}
-.dj_ie .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
-       clear: both; 
-}
-.dijit_a11y .dijitTextBox .dijitValidationContainer,
-.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBox .dijitArrowButtonContainer {
-       
-       border: solid black !important;
-       border-width: 0 0 0 1px !important;
-}
-.dj_ie .dijitToolbar .dijitComboBox {
-       
-       vertical-align: middle;
-}
-.dijitTextBox .dijitSpinnerButtonContainer {
-       width: 1em;
-       position: relative !important;
-       overflow: hidden;
-}
-.dijitSpinner .dijitSpinnerButtonInner {
-       width:1em;
-       visibility:hidden !important; 
-       overflow-x:hidden;
-}
-.dijitComboBox .dijitButtonNode,
-.dijitSpinnerButtonContainer .dijitButtonNode {
-       border-width: 0;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
-       border: 0 none !important;
-}
-.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner,
-.dijit_a11y .dijitSpinnerButtonContainer INPUT {
-       width: 1em !important;
-}
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner {
-       margin: 0 auto !important; 
-}
-.dj_ie .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding-left: 0.3em !important;
-       padding-right: 0.3em !important;
-       margin-left: 0.3em !important;
-       margin-right: 0.3em !important;
-       width: 1.4em !important;
-}
-.dj_ie7 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding-left: 0.0em !important; 
-       padding-right: 0.0em !important;
-       width: 1em !important;
-}
-.dj_ie6 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       margin-left: 0.1em !important;
-       margin-right: 0.1em !important;
-       width: 1em !important;
-}
-.dj_iequirks .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       margin-left: 0 !important;
-       margin-right: 0 !important;
-       width: 2em !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       
-       padding: 0;
-       position: absolute !important;
-       right: 0;
-       float: none;
-       height: 50%;
-       width: 100%;
-       bottom: auto;
-       left: 0;
-       right: auto;
-}
-.dj_iequirks .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: auto;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitArrowButton {
-       overflow: visible !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitDownArrowButton {
-       top: 50%;
-       border-top-width: 1px !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitUpArrowButton {
-       #bottom: 50%;   
-       top: 0;
-}
-.dijitSpinner .dijitArrowButtonInner {
-       margin: auto;
-       overflow-x: hidden;
-       height: 100% !important;
-}
-.dj_iequirks .dijitSpinner .dijitArrowButtonInner {
-       height: auto !important;
-}
-.dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       -moz-transform: scale(0.5);
-       -moz-transform-origin: center top;
-       -webkit-transform: scale(0.5);
-       -webkit-transform-origin: center top;
-       -o-transform: scale(0.5);
-       -o-transform-origin: center top;
-       transform: scale(0.5);
-       transform-origin: left top;
-       padding-top: 0;
-       padding-bottom: 0;
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-       width: 100%;
-}
-.dj_ie .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       zoom: 50%; 
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButtonInner {
-       overflow: hidden;
-}
-.dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: 100%;
-}
-.dj_iequirks .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: 1em; 
-}
-.dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       visibility: hidden;
-}
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       vertical-align:top;
-       visibility: visible;
-}
-.dijit_a11y .dijitSpinnerButtonContainer {
-       width: 1em;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
-       border-width: 1px 0px 0px 0px;
-       border-style: solid !important;
-}
-.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 !important;
-       height: auto !important;
-}
-.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:2px;
-       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;
-}
-.dijit_a11y .dijitTooltipConnector {
-       display: none;  
-}
-.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;
-}
-.dj_ff3 .dijit_a11y div.dijitSplitter:focus {
-       outline-style:dotted;
-       outline-width: 2px;
-}
-.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;
-}
-.dijitTitlePaneTitle {
-       cursor: pointer;
-}
-.dijitFixedOpen {
-       
-       cursor: default;
-}
-.dijitTitlePaneTitle * {
-       vertical-align: middle;
-}
-.dijitTitlePane .dijitArrowNodeInner {
-       
-       display: none;
-}
-.dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
-       
-       display:inline !important;
-       font-family: monospace;         
-}
-.dijit_a11y .dijitTitlePane .dijitArrowNode {
-       
-       display:none;
-}
-.dj_ie6 .dijitTitlePaneContentOuter,
-.dj_ie6 .dijitTitlePane .dijitTitlePaneTitle {
-       
-       zoom: 1;
-}
-.dijitColorPalette {
-       border: 1px solid #999;
-       background: #fff;
-       position: relative;
-}
-img.dijitColorPaletteUnder {
-       
-       border-style: none;
-       position: absolute;
-       left: 0;
-       top: 0;
-}
-.dijitColorPalette .dijitPaletteTable {
-       
-       padding: 2px 3px 3px 3px;
-       position: relative;
-       overflow: hidden;
-       outline: 0;
-       border-collapse: separate;
-}
-.dj_ie6 .dijitColorPalette .dijitPaletteTable,
-.dj_ie7 .dijitColorPalette .dijitPaletteTable,
-.dj_iequirks .dijitColorPalette .dijitPaletteTable {
-       
-       padding: 0;
-       margin: 2px 3px 3px 3px;
-}
-.dijitColorPalette .dijitPaletteCell {
-       
-       height: 20px;
-       width: 20px;
-       font-size: 1px;
-       vertical-align: middle;
-       text-align: center;
-}
-.dijitColorPalette .dijitPaletteImg {
-       
-       width: 16px;
-       height: 14px;
-       border: 1px solid #999;
-       cursor: default;
-       vertical-align: middle;
-}
-.dj_iequirks .dijitColorPalette .dijitPaletteImg {
-       margin: 1px;    
-}
-.dijitPaletteTable td {
-               padding: 0px;
-}
-.dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       
-       border: 1px solid #000;
-}
-.dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
-.dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
-       border: 2px solid #000;
-}
-.dijit_a11y .dijitColorPalette .dijitPaletteTable,
-.dijit_a11y .dijitColorPalette .dijitPaletteTable * {
-       
-       background-color: transparent !important;
-}
-.dj_gecko .dijit_a11y .dijitColorPalette .dijitPaletteCellFocused .dijitPaletteImg {
-       border: 3px dotted #000;        
-       margin: -1px;
-}
-.dijit_a11y  .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       border: 2px solid #000 !important;
-}
-.dijitAccordionContainer {
-       border:1px solid #b7b7b7;
-       border-top:0 !important;
-}
-.dijitAccordionTitle {
-       cursor: pointer;
-}
-.dijitAccordionTitleSelected {
-       cursor: default;
-}
-.dijitAccordionTitle .arrowTextUp,
-.dijitAccordionTitle .arrowTextDown {
-       display: none;
-       font-size: 0.65em;
-       font-weight: normal !important;
-}
-.dijit_a11y .dijitAccordionTitle .arrowTextUp,
-.dijit_a11y .dijitAccordionTitleSelected .arrowTextDown {
-       display: inline;
-}
-.dijit_a11y .dijitAccordionTitleSelected .arrowTextUp {
-       display: none;
-}
-.dj_ie6 .dijitAccordionTitle,
-.dj_iequirks .dijitAccordionTitle {
-       
-       zoom: 1;
-}
-.dijitCalendarContainer {
-       width: auto;    
-}
-.dijitCalendarContainer th, .dijitCalendarContainer td {
-       padding: 0;
-}
-.dijitCalendarNextYear {
-       margin:0 0 0 0.55em;
-}
-.dijitCalendarPreviousYear {
-       margin:0 0.55em 0 0;
-}
-.dijitCalendarIncrementControl {
-       vertical-align: middle;
-}
-.dijitCalendarIncrementControl,
-.dijitCalendarDateTemplate,
-.dijitCalendarMonthLabel,
-.dijitCalendarPreviousYear,
-.dijitCalendarNextYear {
-       cursor: pointer;
-}
-.dijitCalendarDisabledDate {
-       color: gray;
-       text-decoration: line-through;
-       cursor: default;
-}
-.dijitSpacer {
-       
-       position: relative;
-       height: 1px;
-       overflow: hidden;
-       visibility: hidden;
-}
-.dijitMenu {
-       border:1px solid black;
-       background-color:white;
-}
-.dijitMenuTable {
-       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.5;
-       cursor:default;
-}
-.dj_ie .dijit_a11y .dijitMenuItemDisabled,
-.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 dotted black !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;
-}
-.dj_ie .dijit_a11y .dijitMenuBar .dijitMenuItem {
-       
-       margin: 0px;
-}
-.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;
-}
-.nowrapTabStrip {
-       width: 50000px;
-       display: block;
-       position: relative;
-}
-.dijitTabListWrapper {
-       overflow: hidden;
-}
-.dijit_a11y .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.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
-       cursor: auto;
-}
-.dijitTab {
-       position:relative;
-       cursor:pointer;
-       white-space:nowrap;
-       z-index:3;
-}
-.dijitTab * {
-       
-       vertical-align: middle;
-}
-.dijitTabChecked {
-       cursor: default;        
-}
-.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;
-}
-.dijitTabCloseButton {
-       margin-left: 1em;
-}
-.dijitTabCloseText {
-       display:none;
-}
-.dijit_a11y .dijitTabCloseButton {
-       background-image: none !important;
-       width: auto !important;
-       height: auto !important;
-       border: thin dotted;    
-}
-.dijit_a11y .dijitTabCloseButtonHover {
-       border:thin solid;      
-}
-.dijit_a11y .dijitTabCloseText {
-       display: inline;
-}
-.dijit_a11y .dijitTabChecked {
-       
-       border-style:dashed !important;
-}
-.dijit_a11y .dijitTabInnerDiv {
-       border-left:none !important;
- }
-.dijitTabPane,
-.dijitStackContainer-child,
-.dijitAccordionContainer-child {
-       
-    border: none !important;
-}
-.dijitInlineEditBoxDisplayMode {
-       border: 1px solid transparent;  
-       cursor: text;
-}
-.dijit_a11y .dijitInlineEditBoxDisplayMode,
-.dj_ie6 .dijitInlineEditBoxDisplayMode {
-       
-       border: none;
-}
-.dijitInlineEditBoxDisplayModeHover,
-.dijit_a11y .dijitInlineEditBoxDisplayModeHover,
-.dj_ie6 .dijitInlineEditBoxDisplayModeHover {
-       
-       background-color: #e2ebf2;
-       border: solid 1px black;
-}
-.dijitInlineEditBoxDisplayModeDisabled {
-       cursor: default;
-}
-.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;
-       overflow: hidden;       
-}
-.dijitDialogTitleBar {
-       cursor: move;
-}
-.dijitDialogFixed .dijitDialogTitleBar {
-       cursor:default;
-}
-.dijitDialogCloseIcon {
-       cursor: pointer;
-}
-.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 .dijitSpinnerButtonContainer,
-.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;
-}
-.dijitSliderMoveableV {
-       right:50%;
-}
-.dijit_a11y DIV.dijitSliderImageHandle,
-.dijitSliderImageHandle {
-       margin:0;
-       padding:0;
-       position:relative !important;
-       border:8px solid gray;
-       width:0;
-       height:0;
-       cursor: pointer;
-}
-.dj_iequirks .dijit_a11y .dijitSliderImageHandle {
-       font-size: 0;
-}
-.dj_ie7 .dijitSliderImageHandle {
-       overflow: hidden; 
-}
-.dj_ie7 .dijit_a11y .dijitSliderImageHandle {
-       overflow: visible; 
-}
-.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
-       border:4px solid #000;
-       height:8px;
-       width:8px;
-}
-.dijitSliderImageHandleV {
-       top:-8px;
-       right: -50%;
-}
-.dijitSliderImageHandleH {
-       left:50%;
-       top:-5px;
-       vertical-align:top;
-}
-.dijitSliderBar {
-       border-style:solid;
-       border-color:black;
-       cursor: pointer;
-}
-.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;
-}
-.dijitSliderDecoration {
-       text-align:center;
-}
-.dijitSliderV TD {
-       position: relative; 
-}
-.dijitSliderDecorationH {
-       width: 100%;
-}
-.dijitSliderDecorationV {
-       height: 100%;
-}
-.dijitSliderButton {
-       font-family:monospace;
-       margin:0;
-       padding:0;
-       display:block;
-}
-.dijit_a11y .dijitSliderButtonInner {
-       visibility:visible !important;
-}
-.dijitSliderButtonContainer {
-       text-align:center;
-       height:0;       
-}
-.dijitSliderButtonContainer * {
-       cursor: pointer;
-}
-.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%;
-}
-.dijitRuleLabelV {
-       
-       text-overflow: ellipsis;
-       white-space: nowrap;
-       overflow: hidden;
-}
-.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 .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;
-}
-.dijit_a11y .dijitButtonContents .dijitButtonText,
-.dijit_a11y .dijitTab .tabLabel {
-       display: inline !important;
-}
-.dijitTextArea {
-       width:100%;
-       overflow-y: auto;       
-}
-.dijitTextArea[cols] {
-       width:auto; 
-}
-.dj_ie .dijitTextAreaCols {
-       width:auto;
-}
-.dijitToolbarSeparator {
-       height: 18px;
-       width: 5px;
-       padding: 0 1px;
-       margin: 0;
-}
-.dijitIEFixedToolbar {
-       position:absolute;
-       
-       top: expression(eval((document.documentElement||document.body).scrollTop));
-}
-.dijitEditor {
-       display: block; 
-}
-.dijitEditorDisabled,
-.dijitEditorReadOnly {
-       color: gray;
-}
-.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 .dijitTimePickerItemSelected .dijitTimePickerItemInner {
-       border: solid 4px black;
-}
-.dijit_a11y .dijitTimePickerItemHover .dijitTimePickerItemInner {
-       border: dashed 4px black;
-}
-.dijitToggleButtonIconChar {
-       
-       display:none !important;
-}
-.dijit_a11y .dijitToggleButton .dijitToggleButtonIconChar {
-       display:inline !important;
-       visibility:hidden;
-}
-.dj_ie6 .dijitToggleButtonIconChar, .dj_ie6 .tabStripButton .dijitButtonText {
-       font-family: "Arial Unicode MS";        
-}
-.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
-       display: inline !important; 
-       visibility:visible !important;
-}
-.dijitArrowButtonChar {
-        display:none !important;
-}
-.dijit_a11y .dijitArrowButtonChar {
-        display:inline !important;
-}
-.dijit_a11y .dijitDropDownButton .dijitArrowButtonInner,
-.dijit_a11y .dijitComboButton .dijitArrowButtonInner {
-       display:none !important;
-}
-.dijitSelect {
-       margin: 0.2em;
-       border-collapse: collapse;
-}
-.dj_ie .dijitSelect,
-.dj_ie7 .dijitSelect,
-.dj_iequirks .dijitSelect {
-       vertical-align: middle; 
-}
-.dj_ie8 .dijitSelect .dijitButtonText {
-       vertical-align: top;
-}
-.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;
-       white-space: nowrap;
-       text-align: left;
-}
-.dijitSelectFixedWidth .dijitButtonContents {
-       width: 100%;
-}
-.dijitSelectMenu .dijitMenuItemIcon {
-       
-       display:none;
-}
-.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
-.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
-       
-       position: static;
-}
-.dijitSelectLabel *
-{
-       vertical-align: baseline;
-}
-.dijitSelectSelectedOption * {
-       font-weight: bold;
-}
-.dijitSelectMenu {
-       border-width: 1px;
-}
-.dijitSelectMenu .dijitMenuTable {
-       margin: 0px;
-       background-color: transparent;
-}
-.dijitForceStatic {
-       position: static !important;
-}
-.dijitReadOnly *,
-.dijitDisabled *,
-.dijitReadOnly,
-.dijitDisabled {
-       
-       cursor: default;
-}
-.dijitIconSave,
-.dijitIconPrint,
-.dijitIconCut,
-.dijitIconCopy,
-.dijitIconClear,
-.dijitIconDelete,
-.dijitIconUndo,
-.dijitIconEdit,
-.dijitIconNewTask,
-.dijitIconEditTask,
-.dijitIconEditProperty,
-.dijitIconTask,
-.dijitIconFilter,
-.dijitIconConfigure,
-.dijitIconSearch,
-.dijitIconApplication,
-.dijitIconBookmark,
-.dijitIconChart,
-.dijitIconConnector,
-.dijitIconDatabase,
-.dijitIconDocuments,
-.dijitIconMail,
-.dijitLeaf,
-.dijitIconFile,
-.dijitIconFunction,
-.dijitIconKey,
-.dijitIconPackage,
-.dijitIconSample,
-.dijitIconTable,
-.dijitIconUsers,
-.dijitFolderClosed,
-.dijitIconFolderClosed,
-.dijitFolderOpened,
-.dijitIconFolderOpen,
-.dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActEnabled.png); 
-       width: 16px;
-       height: 16px;
-}
-.dj_ie6 .dijitIconSave,
-.dj_ie6 .dijitIconPrint,
-.dj_ie6 .dijitIconCut,
-.dj_ie6 .dijitIconCopy,
-.dj_ie6 .dijitIconClear,
-.dj_ie6 .dijitIconDelete,
-.dj_ie6 .dijitIconUndo,
-.dj_ie6 .dijitIconEdit,
-.dj_ie6 .dijitIconNewTask,
-.dj_ie6 .dijitIconEditTask,
-.dj_ie6 .dijitIconEditProperty,
-.dj_ie6 .dijitIconTask,
-.dj_ie6 .dijitIconFilter,
-.dj_ie6 .dijitIconConfigure,
-.dj_ie6 .dijitIconSearch,
-.dj_ie6 .dijitIconApplication,
-.dj_ie6 .dijitIconBookmark,
-.dj_ie6 .dijitIconChart,
-.dj_ie6 .dijitIconConnector,
-.dj_ie6 .dijitIconDatabase,
-.dj_ie6 .dijitIconDocuments,
-.dj_ie6 .dijitIconMail,
-.dj_ie6 .dijitLeaf,
-.dj_ie6 .dijitIconFile,
-.dj_ie6 .dijitIconFunction,
-.dj_ie6 .dijitIconKey,
-.dj_ie6 .dijitIconPackage,
-.dj_ie6 .dijitIconSample,
-.dj_ie6 .dijitIconTable,
-.dj_ie6 .dijitIconUsers,
-.dj_ie6 .dijitFolderClosed,
-.dj_ie6 .dijitIconFolderClosed,
-.dj_ie6 .dijitFolderOpened,
-.dj_ie6 .dijitIconFolderOpen,
-.dj_ie6 .dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActEnabled8bit.png);
-}
-.dijitDisabled .dijitIconSave,
-.dijitDisabled .dijitIconPrint,
-.dijitDisabled .dijitIconCut,
-.dijitDisabled .dijitIconCopy,
-.dijitDisabled .dijitIconClear,
-.dijitDisabled .dijitIconDelete,
-.dijitDisabled .dijitIconUndo,
-.dijitDisabled .dijitIconEdit,
-.dijitDisabled .dijitIconNewTask,
-.dijitDisabled .dijitIconEditTask,
-.dijitDisabled .dijitIconEditProperty,
-.dijitDisabled .dijitIconTask,
-.dijitDisabled .dijitIconFilter,
-.dijitDisabled .dijitIconConfigure,
-.dijitDisabled .dijitIconSearch,
-.dijitDisabled .dijitIconApplication,
-.dijitDisabled .dijitIconBookmark,
-.dijitDisabled .dijitIconChart,
-.dijitDisabled .dijitIconConnector,
-.dijitDisabled .dijitIconDatabase,
-.dijitDisabled .dijitIconDocuments,
-.dijitDisabled .dijitIconMail,
-.dijitDisabled .dijitLeaf,
-.dijitDisabled .dijitIconFile,
-.dijitDisabled .dijitIconFunction,
-.dijitDisabled .dijitIconKey,
-.dijitDisabled .dijitIconPackage,
-.dijitDisabled .dijitIconSample,
-.dijitDisabled .dijitIconTable,
-.dijitDisabled .dijitIconUsers,
-.dijitDisabled .dijitFolderClosed,
-.dijitDisabled .dijitIconFolderClosed,
-.dijitDisabled .dijitFolderOpened,
-.dijitDisabled .dijitIconFolderOpen,
-.dijitDisabled .dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActDisabled.png); 
-}
-.dijitIconSave { background-position: 0px; }
-.dijitIconPrint { background-position: -16px; }
-.dijitIconCut { background-position: -32px; }
-.dijitIconCopy { background-position: -48px; }
-.dijitIconClear { background-position: -64px; }
-.dijitIconDelete { background-position: -80px; }
-.dijitIconUndo { background-position: -96px; }
-.dijitIconEdit { background-position: -112px; }
-.dijitIconNewTask { background-position: -128px; }
-.dijitIconEditTask { background-position: -144px; }
-.dijitIconEditProperty { background-position: -166px; }
-.dijitIconTask { background-position: -176px; }
-.dijitIconFilter { background-position: -192px; }
-.dijitIconConfigure { background-position: -208px; }
-.dijitIconSearch { background-position: -224px; }
-.dijitIconError { background-position: -496px; } 
-.dijitIconApplication { background-position: -240px; }
-.dijitIconBookmark { background-position: -256px; }
-.dijitIconChart { background-position: -272px; }
-.dijitIconConnector { background-position: -288px; }
-.dijitIconDatabase { background-position: -304px; }
-.dijitIconDocuments { background-position: -320px; }
-.dijitIconMail { background-position: -336px; }
-.dijitIconFile, .dijitLeaf { background-position: -352px; }
-.dijitIconFunction { background-position: -368px; }
-.dijitIconKey { background-position: -384px; }
-.dijitIconPackage{ background-position: -400px; }
-.dijitIconSample { background-position: -416px; }
-.dijitIconTable { background-position: -432px; }
-.dijitIconUsers { background-position: -448px; }
-.dijitIconFolderClosed, .dijitFolderClosed { background-position: -464px; }
-.dijitIconFolderOpen, .dijitFolderOpened { background-position: -480px; }
-.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 .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
-{
-       
-       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 .dijitTabCloseButton {
-       background: url(images/spriteRoundedIconsSmall.png) no-repeat -60px top;
-       width: 15px;
-       height: 15px;
-       margin-top: -1px;
-}
-.dj_ie6 .nihilo .dijitTabCloseButton {
-       background: url(images/spriteRoundedIconsSmall.gif) no-repeat -60px top;
-}
-.nihilo .dijitTabCloseButtonHover {
-       background: url(images/spriteRoundedIconsSmall.png) no-repeat -60px -15px;
-}
-.dj_ie6 .nihilo .dijitTabCloseButtonHover {
-       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 {
-       
-       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 .dijitTabStripIcon {
-       height: 14px;
-       width: 14px;
-       background: url(images/spriteRoundedIconsSmall.png) no-repeat left top;
-}
-.dj_ie6 .nihilo .dijitTabStripIcon {
-       background-image: url(images/spriteRoundedIconsSmall.gif);
-}
-.nihilo .dijitTabStripSlideRightIcon {
-       background-position: -30px top;
-}
-.nihilo .dijitTabStripMenuIcon {
-       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;
-       font-size: 0.9em;
-       font-weight: bold;
-       color: #6d6d6d;
-}
-.nihilo .dijitAccordionTitleSelected  {
-       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;
-       color: #243C5F;
-}
-.nihilo .dijitAccordionArrow {
-       background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
-       width:15px;
-       height:15px;
-       margin-top:-1px;
-}
-.nihilo .dijitAccordionTitleSelected .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 .dijitInputContainer INPUT,
-.nihilo .dijitTextBox {
-       margin: 0em 0.1em;
-}
-.nihilo .dijitTextBox,
-.nihilo .dijitTextArea {
-       
-       background:#fff url(images/validationInputBg.png) repeat-x top left;
-       #background:#fff url(images/validationInputBg.gif) repeat-x top left;
-       border:1px solid #d3d3d3;
-}
-.nihilo .dijitComboBox .dijitButtonNode {
-       padding: 0 0.2em !important;
-}
-.nihilo .dijitTextBox .dijitButtonNode {
-       
-       border-color: #d3d3d3;
-}
-.nihilo .dijitTextBoxFocused,
-.nihilo .dijitTextAreaFocused {
-       
-       border-color:#b3b3b3;
-}
-.nihilo .dijitTextBoxFocused .dijitButtonNode,
-.nihilo .dijitSpinner .dijitUpArrowButtonActive,
-.nihilo .dijitSpinner .dijitDownArrowButtonActive {
-       border-left-color:#d3d3d3;
-}
-.nihilo .dijitSpinnerFocused .dijitDownArrowButton,
-.nihilo .dijitSpinner .dijitUpArrowButtonActive,
-.nihilo .dijitSpinner .dijitDownArrowButtonActive {
-       border-top-color:#d3d3d3;
-}
-.nihilo .dijitError {
-       border-color:#b3b3b3;
-       background-color:#f9f7ba;
-       background-image:none;
-}
-.nihilo .dijitErrorFocused {
-       background-color:#ff6;
-       background-image:none;
-}
-.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 .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 .dijitReadOnly INPUT,
-.dj_ie7 .nihilo .dijitReadOnly INPUT,
-.dj_ie6 .nihilo .dijitComboButtonDisabled .dijitButtonText,
-.dj_ie7 .nihilo .dijitComboButtonDisabled .dijitButtonText {
-       
-       color: #aaa;
-}
-.nihilo .dijitButtonHover .dijitButtonNode,
-.nihilo .dijitButtonNodeHover,
-.nihilo .dijitToggleButtonHover .dijitButtonNode,
-.nihilo .dijitDropDownButtonHover .dijitButtonNode,
-.nihilo .dijitButtonContentsHover,
-.nihilo .dijitDownArrowButtonHover,
-.nihilo .dijitUpArrowButtonHover {
-       
-       
-       color:#243C5F;
-       background:#fcfcfc url(images/buttonHover.png) repeat-x top left;
-}
-.nihilo .dijitUpArrowButtonActive,
-.nihilo .dijitDownArrowButtonActive,
-.nihilo .dijitButtonActive .dijitButtonNode,
-.nihilo .dijitToggleButtonActive .dijitButtonNode,
-.nihilo .dijitDropDownButtonActive .dijitButtonNode,
-.nihilo .dijitComboButton .dijitButtonContentsActive,
-.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 center;
-       width: 11px;
-       height: 11px;
-}
-.nihilo .dijitLeftArrowButton .dijitArrowButtonInner {
-       background-position: -11px center;
-}
-.nihilo .dijitUpArrowButton .dijitArrowButtonInner {
-       background-position: -22px center;
-}
-.nihilo .dijitRightArrowButton .dijitArrowButtonInner {
-       background-position: -33px center;
-}
-.dj_ie6 .nihilo .dijitArrowButtonInner {
-       background-image: url(images/spriteArrows.gif);
-}
-.dj_webkit .nihilo .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
-       margin-top: -1px; 
-}
-.dj_ie .nihilo .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
-       margin-top: 1px; 
-}
-.nihilo .dijitSpinnerButtonContainer {
-       width: auto;
-       padding: 0;
-}
-.nihilo .dijitSpinner .dijitArrowButton {
-       width: 15px;
-}
-.nihilo .dijitSpinner .dijitSpinnerButtonInner {
-       width: 15px;
-}
-.nihilo .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding: 0;
-}
-.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;
-}
-.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;
-}
-.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;
-}
-.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;
-}
-.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;
-       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 .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 .dijitSelect .dijitArrowButton {
-       padding: 0px 2px;
-}
-.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 .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 .dijitTreeRowHover {
-       
-       background-image: url(images/treeHover.png);
-       background-repeat: repeat;
-       background-color: transparent !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 .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 .dijitTitlePaneTitleHover  {
-       background: #f9f9f9 url(images/accordionItemActive.png) top repeat-x;
-}
-.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode,
-.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
-       width:15px;
-       height:15px;
-}
-.nihilo .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 .dijitTitlePaneContentOuter {
-       background: #ffffff;
-       border:1px solid #bfbfbf;
-       border-top: 0px;
-}
-.nihilo .dijitTitlePaneContentInner {
-       padding:10px;
-}
-.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 .dijitCalendarCurrentMonth {
-       
-}
-.nihilo .dijitCalendarDisabledDate {
-       text-decoration:line-through !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;
-}
-.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 .dijitComboButton .dijitButtonContentsHover,
-.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
-       
-       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-top: 1px solid #d3d3d3;
-       padding:10px;
-}
-.nihilo .dijitDialogTitleBar {
-       
-       background: #fafafa url(images/titleBar.png) repeat-x top left;
-       padding: 5px 6px 3px 6px;
-       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;
-}
-.dj_ie6 .nihilo .dijitDialogCloseIcon {
-       background-image: url(images/spriteRoundedIconsSmall.gif);
-}
-.nihilo .dijitDialogCloseIconHover {
-       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;
-}
-.nihilo .dijitToolbar .dijitToolbarSeparator {
-       background: url(../../icons/images/editorIconsEnabled.png); 
-}
-.nihilo .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled.png); 
-       background-repeat: no-repeat;
-       width: 18px;
-       height: 18px;
-       text-align: center;
-}
-.nihilo .dijitDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled.png); 
-}
-.dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled.png); 
-       background-repeat: no-repeat;
-       width: 18px;
-       height: 18px;
-       text-align: center;
-}
-.dijitDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled.png); 
-}
-.dijitEditorIconSep { background-position: 0px; }
-.dijitEditorIconSave { background-position: -18px; }
-.dijitEditorIconPrint { background-position: -36px; }
-.dijitEditorIconCut { background-position: -54px; }
-.dijitEditorIconCopy { background-position: -72px; }
-.dijitEditorIconPaste { background-position: -90px; }
-.dijitEditorIconDelete { background-position: -108px; }
-.dijitEditorIconCancel { background-position: -126px; }
-.dijitEditorIconUndo { background-position: -144px; }
-.dijitEditorIconRedo { background-position: -162px; }
-.dijitEditorIconSelectAll { background-position: -180px; }
-.dijitEditorIconBold { background-position: -198px; }
-.dijitEditorIconItalic { background-position: -216px; }
-.dijitEditorIconUnderline { background-position: -234px; }
-.dijitEditorIconStrikethrough { background-position: -252px; }
-.dijitEditorIconSuperscript { background-position: -270px; }
-.dijitEditorIconSubscript { background-position: -288px; }
-.dijitEditorIconJustifyCenter { background-position: -306px; }
-.dijitEditorIconJustifyFull { background-position: -324px; }
-.dijitEditorIconJustifyLeft { background-position: -342px; }
-.dijitEditorIconJustifyRight { background-position: -360px; }
-.dijitEditorIconIndent { background-position: -378px; }
-.dijitEditorIconOutdent { background-position: -396px; }
-.dijitEditorIconListBulletIndent { background-position: -414px; }
-.dijitEditorIconListBulletOutdent { background-position: -432px; }
-.dijitEditorIconListNumIndent { background-position: -450px; }
-.dijitEditorIconListNumOutdent { background-position: -468px; }
-.dijitEditorIconTabIndent { background-position: -486px; }
-.dijitEditorIconLeftToRight { background-position: -504px; }
-.dijitEditorIconRightToLeft, .dijitEditorIconToggleDir { background-position: -522px; }
-.dijitEditorIconBackColor { background-position: -540px; }
-.dijitEditorIconForeColor { background-position: -558px; }
-.dijitEditorIconHiliteColor { background-position: -576px; }
-.dijitEditorIconNewPage { background-position: -594px; }
-.dijitEditorIconInsertImage { background-position: -612px; }
-.dijitEditorIconInsertTable { background-position: -630px; }
-.dijitEditorIconSpace { background-position: -648px; }
-.dijitEditorIconInsertHorizontalRule { background-position: -666px; }
-.dijitEditorIconInsertOrderedList { background-position: -684px; }
-.dijitEditorIconInsertUnorderedList { background-position: -702px; }
-.dijitEditorIconCreateLink { background-position: -720px; }
-.dijitEditorIconUnlink { background-position: -738px; }
-.dijitEditorIconViewSource { background-position: -756px; }
-.dijitEditorIconRemoveFormat { background-position: -774px; }
-.dijitEditorIconFullScreen { background-position: -792px; }
-.dijitEditorIconWikiword { background-position: -810px; }
-.dijitColorPalette {
-       border:1px solid #d3d3d3;
-       background:#fff;
-       -moz-border-radius: 0px !important;
-}
+       NOTES:
+       ---
+       Dialog.css contains css classes for both Dialog and Tooltip!
+       This because currently a dijit.TooltipDialog exist. Until this is resolved
+       you need to include Dialog.css for both dijits
+       ---
+       Toolbar.css contains classes also used in Editor. Until this is resolved
+       you need to include Toolbar.css for both Toolbar and Editor
+       ---
+       Button.css contains classes for combobox,
+
+*/
+
+@import url("../dijit.css");
+@import url("../../icons/commonIcons.css");/*sprite containing common icons to be used by all themes*/
+@import url("Common.css");
+
+@import url("layout/ContentPane.css");
+@import url("layout/TabContainer.css");
+@import url("layout/AccordionContainer.css");
+@import url("layout/SplitContainer.css");
+@import url("layout/BorderContainer.css");
+@import url("form/Common.css");
+@import url("form/Button.css");
+@import url("form/Checkbox.css");
+@import url("form/RadioButton.css");
+@import url("form/Slider.css");
+@import url("form/Select.css");
+@import url("Tree.css");
+@import url("ProgressBar.css");
+@import url("TitlePane.css");
+@import url("Calendar.css");
+@import url("TimePicker.css");
+@import url("Toolbar.css");
+@import url("Dialog.css");
+@import url("Menu.css");
+@import url("Editor.css");
+@import url("../../icons/editorIcons.css"); /* sprite for editor icons to be used by all themes */
+@import url("ColorPalette.css");
\ No newline at end of file
index b47f8431bb8cefeb87d0b8df63dcc1c9ccdc8d67..1e9a6af8596847d07b6dfc6f0a7303767def5897 100644 (file)
+/*
+       Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
 
-.dijitRtl .dijitPlaceHolder {
-       left: auto;
-       right: 0;
-}
-.dijitMenuItemRtl {
-       text-align: right;
-}
-.dj_iequirks .dijitComboButtonRtl BUTTON {
-       
-       float:left;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitComboBoxRtl .dijitArrowButtonContainer {
-       
-       border-right-width: 1px !important;
-       border-right-style: solid !important;
-       border-left-width: 0px !important;
-       border-left-style: none !important;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
-       border-right: 1px solid black !important;
-       border-left: 0px none black !important;
-}
-.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
-       right: 0;
-       left: auto;
-}
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitArrowButtonContainer {
-       float: left;
-}
-.dijitCalendarRtl .dijitCalendarNextYear {
-       margin:0 0.55em 0 0;
-}
-.dijitCalendarRtl .dijitCalendarPreviousYear {
-       margin:0 0 0 0.55em;
-}
-.dijitSliderRtl .dijitSliderImageHandleV {
-       left:auto;
-}
-.dijitSliderRtl .dijitSliderImageHandleH {
-       left:-50%;
-}
-.dijitSliderRtl .dijitSliderMoveableH {
-       right:auto;
-       left:0;
-}
-.dijitSliderRtl .dijitRuleContainerV {
-       float:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleContainerV {
-       text-align:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelV {
-       text-align:left;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelH {
-       zoom:1;
-}
-.dijitSliderRtl .dijitSliderProgressBarH {
-       
-       float:right;
-       right:0;
-       left:auto;
-}
-.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
-       background-position:right;
-       padding-right:25px;
-}
-.dijitTabRtl .dijitTabCloseButton {
-       margin-left: 0px;
-       margin-right: 1em;
-}
-.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
-       width:100%;
-}
-.dijitColorPaletteRtl .dijitColorPaletteUnder {
-       
-       left: auto;
-       right: 0;
-}
-.dijitSelectRtl .dijitButtonContents {
-       text-align: right;
-}
-.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 .dijitAccordionTitleSelected .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 .dijitTreeNode,
-.dijitRtl .nihilo .dijitTreeExpandoLeaf {
-       
-    background-image: none;
-}
-.dijitRtl .nihilo .dijitTreeContent {
-    padding-left: 0px;
-    padding-right: 1px;
-}
-.dijitRtl .nihilo .dijitTreeExpandoOpened {
-       
-       background: url(images/spriteTree_rtl.gif) no-repeat -18px top;
-}
-.dijitRtl .nihilo .dijitTreeExpandoClosed {
-       
-       background-image: url(images/spriteTree_rtl.gif);
-}
-.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;
-}
-.dj_ie6-rtl .nihilo .dijitTimePickerMarkerHover,
-.dj_ie7-rtl .nihilo .dijitTimePickerMarkerHover {
-        border-top: 0px; 
-}
-.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(../../icons/images/editorIconsEnabled_rtl.png); 
-}
-.dijitRtl .nihilo .dijitDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
-}
-.dijitEditorRtl .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
-}
-.dijitEditorRtlDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
-}
-.dijitToolbarRtl .dijitToolbarSeparator {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
-}
+       NOTES:
+       ---
+       Dialog.css contains css classes for both Dialog and Tooltip!
+       This because currently a dijit.TooltipDialog exist. Until this is resolved
+       you need to include Dialog.css for both dijits
+       ---
+       Toolbar.css contains classes also used in Editor. Until this is resolved
+       you need to include Toolbar.css for both Toolbar and Editor
+       ---
+       Button.css contains classes for combobox,
+
+*/
+
+@import url("../dijit_rtl.css");
+@import url("layout/TabContainer_rtl.css");
+@import url("layout/AccordionContainer_rtl.css");
+@import url("form/Slider_rtl.css");
+@import url("form/Button_rtl.css");
+@import url("Tree_rtl.css");
+@import url("TitlePane_rtl.css");
+@import url("Calendar_rtl.css");
+@import url("TimePicker_rtl.css");
+@import url("Dialog_rtl.css");
+@import url("Menu_rtl.css");
+@import url("Editor_rtl.css");
+@import url("../../icons/editorIcons_rtl.css");/* RTL sprite for editor icons to be used by all themes*/
\ No newline at end of file
index b2576c0e040a9bffc7bd270e735eb939402f859a..78572dab0e47eaefa3248fcf0fe748017e638bb0 100644 (file)
@@ -1,6 +1,7 @@
+/* Calendar*/
 
 .soria .dijitCalendarIncrementControl {
-       
+       /* next/prev month buttons */
        width:15px;
        height:15px;
        background-image: url("images/spriteRoundedIconsSmall.png");
        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;
@@ -26,8 +30,9 @@
        border: 1px solid #b1badf;
        margin: 0;
 }
+
 .soria .dijitCalendarMonthContainer th {
-       
+       /* month header cell */
        background:#bed7f0 url("images/titleBar.png") repeat-x top;
        padding-top:.3em;
        padding-bottom:.2em;
@@ -37,8 +42,9 @@
        padding-top:.2em;
        padding-bottom:.1em;
 }
+
 .soria .dijitCalendarDayLabelTemplate {
-       
+       /* day of week labels */
        background:#bed7f0;
        font-weight:normal;
        padding-top:.15em;
        color:#293a4b;
        text-align:center;
 }
+
 .soria .dijitCalendarBodyContainer {
        border-bottom: 1px solid #eeeeee;
 }
+
 .soria .dijitCalendarMonthLabel {
        color:#293a4b;
        font-weight: bold;
+       padding: 0 4px;
 }
+
 .soria .dijitCalendarDateTemplate {
-       
+       /* style for each day cell */
        font-size: 0.9em;
        font-weight: bold;
        text-align: center;
        background-color: #fff;
        border:#fff solid 1px !important;
 }
+
 .dj_ie .soria .dijitCalendarDateTemplate {
        padding: 0.1em .33em 0.02em .33em;
 }
+
 .soria .dijitCalendarPreviousMonth,
 .soria .dijitCalendarNextMonth                 {
-       
+       /* days that are part of the previous or next month */
        color:#999999;
        background-color:#fdfdfd !important;
        border:#fdfdfd solid 1px !important;
 }
+
 .soria .dijitCalendarCurrentMonth {
-       
+       /* days that are part of this month */
 }
+
 .soria .dijitCalendarDisabledDate {
        text-decoration:line-through !important;
 }
+
 .soria .dijitCalendarCurrentDate {
-       
+       /* cell for today's date */
        text-decoration:underline;
        font-weight:bold;
 }
+
 .soria .dijitCalendarSelectedDate {
-       
+       /* cell for the selected date */
        background-color:#b9cbf1 !important;
        color:black !important;
        border:#4b5aaa solid 1px !important;
 }
+
+
 .soria .dijitCalendarYearContainer {
-       
+       /* footer of the table that contains the year display/selector */
        background:white url("images/titleBar.png") repeat-x top;
 }
+
 .soria .dijitCalendarYearLabel {
-       
+       /* container for all of 3 year labels */
        margin:0;
        padding:0.4em 0 0.25em 0;
        text-align:center;
 }
+
 .soria .dijitCalendarSelectedYear {
-       
+       /* label for selected year */
        color:black;
        padding:0.2em;
        padding-bottom:0.1em;
        background-color:#b9cbf1 !important;
        border:#4b5aaa solid 1px !important;
 }
+
 .soria .dijitCalendarNextYear,
 .soria .dijitCalendarPreviousYear {
-       
+       /* label for next/prev years */
        color:black !important;
        font-weight:normal;
 }
+
+/* Styling for month DropDownButton */
+
+.soria .dijitCalendar .dijitDropDownButton {
+       margin: 0;
+}
+.soria .dijitCalendar .dijitButtonText {
+       padding: 0;
+}
+.soria .dijitCalendar .dijitDropDownButton .dijitButtonNode {
+       background-color: transparent;
+       background-image: none;
+       padding: 0;
+}
+
+/* Styling for month drop down list */
+
+.soria .dijitCalendarMonthMenu .dijitCalendarMonthLabelHover {
+       background-color: #d9e6f9;
+       color: #243C5F;
+}
\ No newline at end of file
index bcfa495d8f42906013f2cb714da232092ecd2546..c2350b4ed400c87eb078a16d851f02ee00b43f76 100644 (file)
@@ -1,7 +1,9 @@
+/* Calendar */
 
 .dijitRtl .soria .dijitCalendarDecrease {
        background-position: -30px top;
 }
+
 .dijitRtl .soria .dijitCalendarIncrease {
-       background-position: 0px top;
+       background-position: 0 top;
 }
index 5a51275d93b40ab4534b9afa4cfed3275c936395..85d6dd819800491ee4569f3539d247dfa1e664be 100644 (file)
@@ -1,5 +1,5 @@
 .dijitColorPalette {
        border:1px solid #cbcbcb;
        background:#fff;
-       -moz-border-radius: 0px !important;
-}
+       -moz-border-radius: 0 !important;
+}
\ No newline at end of file
index 362a867f18438f04c00c6006b9fed59b75378cd6..d5a7c9df6ba078c1007e7c6623d775f5c8050e4f 100644 (file)
@@ -1,13 +1,17 @@
-
+/* DnD avatar-specific settings */
+/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */
 .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; }
index b4a185115b7c504b1cbd730fe8efdb28ffd55285..1e0503a0b6eafa86068b704b39bf17927331246d 100644 (file)
@@ -1,33 +1,39 @@
+/* Dialog */
 
 .soria .dijitDialog {
        background: #eee;
        border: 1px solid #cbcbcb;
-       -webkit-box-shadow: 0px 5px 10px #adadad;
-       padding: 0px;
+       -webkit-box-shadow: 0 5px 10px #adadad;
+       padding: 0;
 }
+
 .soria .dijitDialog .dijitDialogTitle {
-       
+       /* typography and styling of the dialog title */
        font-weight: bold;
-       padding: 0px 4px;
+       padding: 0 4px;
        font-size: 0.9em;
-       color: #3243C5F;
+       color: #243C5F;
 }
+
 .soria .dijitDialog .dijitDialogPaneContent {
        background: #ffffff;
        border-top: 1px solid #b1badf;
        padding:10px;
+
 }
+
 .soria .dijitDialogTitleBar {
-       
+       /* outer container for the titlebar of the dialog */
        background: #fafafa url("images/titleBar.png") repeat-x top left;
        padding: 5px 6px 3px 6px;
-       outline:0; 
+       outline:0; /* remove this line if keyboard focus on dialog startup is an issue. tab still takes you to first focusable element */
 }
+
 .soria .dijitDialogCloseIcon {
-       
+       /* the default close icon for the dialog */
        background-image: url("images/spriteRoundedIconsSmallBl.png");
        background-repeat: no-repeat;
-       background-position: -60px 0px;
+       background-position: -60px 0;
        position: absolute;
        vertical-align: middle;
        right: 6px;
 .soria .dijitDialogCloseIconHover {
        background-position: -60px -15px;
 }
+
+/* Tooltip and TooltipDialog */
+
 .soria .dijitTooltip,
 .soria .dijitTooltipDialog {
-       
-       background: transparent;        
+       /* the outermost dom node, holding the connector and container */
+       background: transparent;        /* make the area on the sides of the arrow transparent */
 }
+
 .dijitTooltipBelow {
-       
+       /* leave room for arrow above content */
        padding-top: 10px;
 }
+
 .dijitTooltipAbove {
-       
+       /* leave room for arrow below content */
        padding-bottom: 10px;
 }
+
 .soria .dijitTooltipContainer {
-       
+       /*
+               The part with the text.
+
+               NOTE:
+                       FF doesn't clip images used as CSS bgs if you specify a border
+                       radius. If you use a solid color, it does. Webkit gets it right.
+                       Sigh.
+               background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left;
+       */
        background-color: #fff;
        border:1px solid #cbcbcb;
        padding:0.45em;
 }
+
 .soria .dijitTooltipConnector {
-       
-       border:0px;
+       /* the arrow piece */
+       border:0;
        z-index: 2;
 }
+
 .soria .dijitTooltipABRight .dijitTooltipConnector {
-       
+       /* above or below tooltip, but the arrow appears on the right,
+               and the right edges of target and tooltip are aligned rather than the left */
        left: auto !important;
        right: 6px;
 }
+
 .soria .dijitTooltipBelow .dijitTooltipConnector {
-       
-       top: 0px;
+       /* the arrow piece for tooltips below an element */
+       top: 0;
        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;
+       /* the arrow piece for tooltips above an element */
+       bottom: 0;
        left: 6px;
        background:url("images/tooltipConnectorDown.png") no-repeat top left;
        width:17px;
 .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;
+       /* the arrow piece for tooltips to the left of an element, bottom borders aligned */
+       right: 0;
        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;
+       /* the arrow piece for tooltips to the right of an element, bottom borders aligned */
+       left: 0;
        background:url("images/tooltipConnectorLeft.png") no-repeat top left;
        width:11px;
        height:17px;
 .dj_ie .soria .dijitTooltipRight .dijitTooltipConnector {
        background-image: url("images/tooltipConnectorLeft.gif");
 }
+
index 41db9ce0207e22824ec6e978aeb9840be9bf7616..838700af5766d6ca3c8c8fe5b30825fb59c83da2 100644 (file)
@@ -1,4 +1,4 @@
-
+/* Dialog */
 .dijitRtl .soria .dijitDialogTitleBar .dijitDialogCloseIcon {
        right: auto;
        left: 5px;
index c3066598696a072c9fc1bf9eee0948b6e7a8a368..d2dd2930362b7d5e1fb2fe770f909e892d4221a3 100644 (file)
@@ -1,13 +1,17 @@
 .soria .dijitToolbar .dijitToolbarSeparator {
-       background: url('../../icons/images/editorIconsEnabled.png'); 
+       background: url('../../icons/images/editorIconsEnabled.png'); /* separator in editor icons sprite image - enabled state */
 }
+
+/**** ICONS *****/
+
 .soria .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsEnabled.png'); 
+       background-image: url('../../icons/images/editorIconsEnabled.png'); /* editor icons sprite image - enabled state */
        background-repeat: no-repeat;
        width: 18px;
        height: 18px;
        text-align: center;
 }
 .soria .dijitDisabled .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsDisabled.png'); 
+       background-image: url('../../icons/images/editorIconsDisabled.png'); /* editor icons sprite image - disabled state */
 }
+
index 4499e52329864d03af765022335a8e14536c6480..a1f76e8c453e2efe4170baf70dd266d288233853 100644 (file)
@@ -1,7 +1,7 @@
-
+/* Editor */
 .dijitRtl .soria .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsEnabled_rtl.png'); 
+       background-image: url('../../icons/images/editorIconsEnabled_rtl.png'); /* editor icons sprite image - enabled state */
 }
 .dijitRtl .soria .dijitDisabled .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsDisabled_rtl.png'); 
+       background-image: url('../../icons/images/editorIconsDisabled_rtl.png'); /* editor icons sprite image - disabled state */
 }
index 9d6b97a0e74000a3b781386034d25b71a73df0cd..4d9d06811aa2bc18139f79272e62174321704f9d 100644 (file)
@@ -1,37 +1,44 @@
 
+/* Menu */
 .soria .dijitMenu,
 .soria .dijitMenuBar {
        border: 1px solid #cbcbcb;
-       margin: 0px;
-       padding: 0px;
+       margin: 0;
+       padding: 0;
        background-color: #fff;
 }
+
 .soria .dijitBorderContainer .dijitMenuBar {
        border:1px solid #B1BADF;
 }
+
 .soria .dijitMenuItem {
        font-family: sans-serif;
-       margin: 0px;
+       margin: 0;
        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; 
+       background-color: #d9e6f9; /* #95a0b0; #555555; #aaaaaa; #646464;  #60a1ea; #848484; */
        color: #243C5F;
 }
+
 .soria .dijitMenuItemIcon {
        width: 15px;
        height: 15px;
 }
+
 .soria .dijitMenuExpand {
        width:15px;
        height:15px;
 .dj_ie6 .soria .dijitMenuExpand {
        background-image: url('images/spriteRoundedIconsSmall.gif');
 }
+
 .soria .dijitMenuSeparator {
        height: 1px;
 }
+
+/* separator can be two pixels -- set border of either one to 0 to have only one */
 .soria .dijitMenuSeparatorTop {
-       border-bottom: 1px solid #fff; 
+       border-bottom: 1px solid #fff; /*97adcb; */
 }
+
 .soria .dijitMenuSeparatorBottom {
        border-top: 1px solid #8ba0bd;
 }
+
+/* the checked menu item */
 .soria .dijitCheckedMenuItemIconChar {
        display: none;
 }
+
 .soria .dijitCheckedMenuItemIcon {
        background-image: url('images/spriteCheckbox.gif');
        background-position: -80px;
 }
+
 .soria .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
        background-position: -64px;
-}
+}
\ No newline at end of file
index 6fa9a6a6aec70b5b012e67d7ff2a99ab74c695ca..0e01483947d89ec2cb7c81b47b19905eea0323d5 100644 (file)
@@ -1,8 +1,10 @@
+/* Menu */
 
 .dijitRtl .soria .dijitMenuItem .dijitMenuItemIcon {
        padding-left: 3px;
-       padding-right: 0px;
+       padding-right: 0;
 }
+
 .dijitRtl .soria .dijitMenuItem .dijitMenuExpand {
        background-position: left top;
 }
index 566d0488cec225a3e56679dfc7e0ce8b7004809d..b2f6d1fbe73f823e1dffb398591add656718e3be 100644 (file)
@@ -1,24 +1,33 @@
 
+/****
+               dijit.ProgressBar
+ ****/
+
 .soria .dijitProgressBar {
-       margin:2px 0px 2px 0px;
+       margin:2px 0 2px 0;
 }
+
 .soria .dijitProgressBarEmpty{
-       
+       /* outer container and background of the bar that's not finished yet*/
        background:#fff url("images/progressBarEmpty.png") repeat-x center center;
        border-color: #8ba0bd;
 }
+
 .soria .dijitProgressBarTile{
-       
+       /* inner container for finished portion when in 'tile' (image) mode */
        background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
 }
+
 .soria .dijitProgressBarFull {
        border-right:1px solid #8ba0bd;
 }
+
 .soria .dijitProgressBarLabel {
-       
+       /* Set to a color that contrasts with both the "Empty" and "Full" parts. */
        color:#293a4b;
 }
+
 .soria .dijitProgressBarIndeterminate .dijitProgressBarTile {
-       
+       /* use an animated gif for the progress bar in 'indeterminate' mode */
        background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
-}
+}
\ No newline at end of file
index 761aac94447efebf41ff620538cdd9e5a21a68ae..757d746d8460169a56d8c2b0c19216a654170fe6 100644 (file)
@@ -1,39 +1,48 @@
-
+/* Time Picker */
 .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;
index 39835b00f704c6795653b430a9e11bdd8d610471..a802ba6b6a4243b63984783946ac03ca361222be 100644 (file)
@@ -1,4 +1,4 @@
 .dj_ie6-rtl .soria .dijitTimePickerMarkerHover,
 .dj_ie7-rtl .soria .dijitTimePickerMarkerHover {
-        border-top: 0px; 
+        border-top: 0; /* IE6/7 bug causes mouseover/out event storm */
 }
index a1676796a1c8c3053a1188adf8cb96c482a20821..7e1042e2a2d6fe04e7fb90e0f42bf09f8a300456 100644 (file)
@@ -1,3 +1,7 @@
+/**
+ * dijit.TitlePane
+ *
+ */
 
 .soria .dijitTitlePaneTitle {
        background: #cccccc;
 .soria .dijitTitlePaneTitleHover {
        background: #f9f9f9 url("images/accordionItemActive.png") top repeat-x;
 }
+
 .soria .dijitTitlePaneTitle * {
        vertical-align: middle;
 }
+
 .soria .dijitTitlePane .dijitOpen .dijitArrowNode,
 .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
        width:15px;
        height:15px;
 }
+
 .soria .dijitTitlePaneTextNode {
        color: #243C5F;
 }
+
 .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
        background: url('images/spriteRoundedIconsSmall.png') no-repeat -30px top;
 }
 .dj_ie6 .soria .dijitTitlePane .dijitOpen .dijitArrowNode {
        background:url('images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
 }
+
 .soria .dijitTitlePaneContentOuter {
        background: #ffffff;
        border: 1px solid #bfbfbf;
-       border-top: 0px;
+       border-top: 0;
 }
 .soria .dijitTitlePaneContentInner {
        padding:10px;
 }
+
 .soria .dijitTitlePaneTextNode {
        margin-left: 4px;
        margin-right: 4px;
-}
+}
\ No newline at end of file
index 1ac12452fbb890ec5a78cf33b620e3355128891b..8a1b73d4ef846fb8572ea607704ed781eed0ff30 100644 (file)
@@ -1,6 +1,6 @@
 .dijitRtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
-       background-position: 0px top;
+       background-position: 0 top;
 }
 .dj_ie6-rtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
-       background-position: 0px top;
-}
+       background-position: 0 top;
+}
\ No newline at end of file
index 4eb55a4e1978f5eea35dbe919c8a4e074dd14786..8af426a11b0cd1fb5f1b7703ce0ec4d2e9590f1f 100644 (file)
@@ -2,55 +2,64 @@
        border-bottom: 1px solid #ccc;
        background:#eaeaea url("images/titleBar.png") repeat-x top left;
 }
+
+/* setting a min-height on ditor toolbar */
 .dj_ie6 .soria .dijitToolbar {
        height: 10px;
 }
+
 .soria .dijitToolbar .dijitButtonNode,
 .soria .dijitToolbar .dijitComboButton .dijitButtonContents,
 .soria .dijitToolbar .dijitComboButton .dijitDownArrowButton {
        background: none;
-       margin: 0px;
-       padding: 0px;
+       margin: 0;
+       padding: 0;
        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;   
+       padding: 1px;   /* on hover etc., margin replaced w/border */
 }
+
 .soria .dijitToolbar .dijitButtonChecked,
 .soria .dijitToolbar .dijitToggleButtonChecked {
        background-color:#d8e5f8;
        border:1px solid #316ac5;
-       padding: 0px;
+       padding: 0;
 }
+
 .soria .dijitToolbar .dijitButtonCheckedHover,
 .soria .dijitToolbar .dijitToggleButtonCheckedHover
  {
        background-color:#9abbea;
        border:1px solid #316ac5;
-       padding: 0px;
+       padding: 0;
 }
+
 .soria .dijitToolbar .dijitButtonHover,
 .soria .dijitToolbar .dijitToggleButtonHover,
 .soria .dijitToolbar .dijitDropDownButtonHover,
 .soria .dijitToolbar .dijitComboButton .dijitButtonContentsHover,
 .soria .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
-       
+       /* TODO: change this from Hover to Selected so that button is still highlighted while drop down is being used */
        border: 1px solid #316ac5;
-       padding: 0px;
+       padding: 0;
        background-color:#9abbea;
 }
+
 .soria .dijitToolbar label {
        padding: 3px 3px 0 6px;
 }
+
 .dj_ie .soria .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
 .dj_ie .soria .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
-       
+       /* focus border doesn't appear on <td> for IE, so need to add it manually */
        border: 1px #777 dotted !important;
-       padding: 0px;
+       padding: 0;
 }
index 60934d4147444e458581ca576d2fdcebd06d5521..d8edb67dfb1ec0f0c9c8ede06e0be03e7fc62e4f 100644 (file)
+/* Tree */
 
 .soria .dijitTreeNode {
     background : url('images/treeI.gif') no-repeat;
     background-position : top left;
     background-repeat : repeat-y;
-    zoom: 1;   
+    zoom: 1;
 }
+
 .soria .dijitTreeRowHover {
-       
+       /* using a transparent png so that we can still see grid lines, which are (unfortunately) behind the dijitRowNode that we are hovering over */
        background-image: url(images/treeHover.png);
        background-repeat: repeat;
        background-color: transparent !important;
 }
+
+
+/* left vertical line (grid) for all nodes */
 .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 {
-       
+       /* so insert line shows up on IE when dropping after a target element */
        padding-bottom: 2px;
 }
+
 .soria .dijitTreeContent {
     min-height: 18px;
     min-width: 18px;
     padding-left:1px;
 }
+
 .soria .dijitTreeRowSelected .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;
 }
+
+/* Drag and Drop on TreeNodes
+ * Put insert line on dijitTreeContent node so it's aligned w/
+ * (ie, indented equally with) target element, even
+ * though dijitTreeRowNode is the actual "drag object"
+ */
 .soria .dijitTreeNode .dojoDndItemBefore,
 .soria .dijitTreeNode .dojoDndItemAfter {
        border-bottom: none;
        border-top: none;
 }
+
 .soria .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
-       
+       /* copied from Common.css */
        border-top: 2px solid #369;
 }
+
 .soria .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
-       
+       /* copied from Common.css */
        border-bottom: 2px solid #369;
 }
index 41dd308b4076434a89b7cf8991722732b1518868..44daf3aa8f760a37036e0d2bc3d4eb777d0e2a76 100644 (file)
@@ -1,18 +1,22 @@
+/* Tree */
 
 .dijitRtl .soria .dijitTreeNode,
 .dijitRtl .soria .dijitTreeExpandoLeaf {
-       
+       /* disable grid lines for Tree in RTL mode, too hard to support */
     background-image: none;
 }
+
 .dijitRtl .soria .dijitTreeContent {
-    padding-left: 0px;
+    padding-left: 0;
     padding-right: 1px;
 }
+
 .dijitRtl .soria .dijitTreeExpandoOpened {
-       
+       /* todo: icon contains grid line but grid lines disabled above */
        background: url('images/spriteTree_rtl.gif') no-repeat -18px top;
 }
+
 .dijitRtl .soria .dijitTreeExpandoClosed {
-       
+       /* todo: icon contains grid line but grid lines disabled above */
        background-image: url('images/spriteTree_rtl.gif');
 }
index 9bf643709e93de8199b678ae4d1bf5ccdc2a477c..6b813a6dd87b378a277448112e97182091f50ff5 100644 (file)
@@ -1,6 +1,14 @@
 
+/*****
+               dijit.form.Button
+               dijit.form.DropDownButton
+               dijit.form.ComboButton
+               dijit.form.ComboBox (partial)
+               dijit.form.Spinner (partial) (TODO: create NumberSpinner.css file like claro has)
+ *****/
+
 .soria .dijitButtonNode {
-       
+       /* enabled state - inner */
        border: 1px solid #8ba0bd;
        border-bottom:1px solid #657c9c;
        padding: 0.1em 0.2em 0.2em 0.2em;
 .soria .dijitSelect .dijitButtonContents {
        border-right: none;
 }
+
 .soria .dijitButtonText {
        text-align: center;
        padding: 0 0.3em;
 }
+
 .soria .dijitArrowButton {
        color: #111;
 }
+
 .soria .dijitComboButton .dijitDownArrowButton {
        padding-right:4px;
 }
+
 .soria .dijitTextBoxReadOnly,
 .soria .dijitTextBoxReadOnly .dijitButtonNode,
 .soria .dijitButtonDisabled .dijitButtonNode,
@@ -27,7 +39,7 @@
 .soria .dijitComboButtonDisabled .dijitButtonNode,
 .soria .dijitTextBoxDisabled,
 .soria .dijitTextBoxDisabled .dijitButtonNode {
-       
+       /* disabled state - inner */
        border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
        background:#c3d3e5 url("../images/buttonDisabled.png") top repeat-x;
        opacity: 0.60;
@@ -36,7 +48,7 @@
 .dj_ie7 .soria .dijitReadOnly INPUT,
 .dj_ie6 .soria .dijitComboButtonDisabled .dijitButtonText,
 .dj_ie7 .soria .dijitComboButtonDisabled .dijitButtonText {
-       
+       /* opacity doesn't work on table node in IE, work around here */
        color: #aaa;
 }
 .soria .dijitButtonHover .dijitButtonNode,
 .soria .dijitButtonContentsHover,
 .soria .dijitUpArrowButtonHover,
 .soria .dijitDownArrowButtonHover {
-       
-       
+       /* hover state - inner */
+       /* TODO: change from Hover to Selected so that button is still highlighted while drop down is being used */
        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 {
-       
+       /* active state - inner (for when you are pressing a normal button, or
+        * when a radio-type button is in a depressed state
+        */
        border-color:#657c9c;
        background: #91b4e5 url("../images/buttonActive.png") top left repeat-x;
 }
 .soria .dijitUpArrowButtonActive,
 .soria .dijitDownArrowButtonActive {
-       
+       /* same as above except don't adjust border color (it's controlled by the containing Spinner/ComboBox) */
        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 center;
+       background-position: 0 center;
        width: 11px;
        height: 11px;
 }
        background-image: url("../images/spriteArrows.gif");
 }
 .dj_ie .soria .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
-       margin-top: 1px; 
+       margin-top: 1px; /* image has too many blank pixels on top */
 }
 .soria .dijitSpinnerButtonContainer {
        width: auto;
index 50a5c5e0bae3b15b4c4db5a31f4e1551bb675667..e2f3728f3844c8830a0734bdddf4907fe8f66acd 100644 (file)
@@ -1,5 +1,5 @@
 .dijitRtl .soria .dijitComboBox .dijitButtonNode {
-       border-width: 0px 0px 0px 1px;
+       border-width: 0 0 0 1px;
 }
 .dijitRtl .soria .dijitSelect .dijitButtonContents {
        border-left: none;
index 8227dcb7409fc27b16198b061275045550d8e62a..5a72bfc06ec6f9cafdd7be9e6885c90825b84bfe 100644 (file)
@@ -1,40 +1,67 @@
 
+/*
+ *  CheckBox and Radio Widgets,
+ *     and the CSS to embed a checkbox or radio icon inside a ToggleButton.
+ *
+ *     Order of images in the default sprite (from L to R, checkbox and radio in same image):
+ *             checkbox        normal   - checked
+ *                                                      - unchecked
+ *                                     disabled - checked
+ *                                                      - unchecked
+ *                                     hover    - checked
+ *                                                      - unchecked
+ *
+ *             radio           normal   - checked
+ *                                                      - unchecked
+ *                                     disabled - checked
+ *                                                      - unchecked
+ *                                     hover    - checked
+ *                                                      - unchecked
+*/
+
 .soria .dijitToggleButton .dijitCheckBox,
 .soria .dijitToggleButton .dijitCheckBoxIcon {
        background-image: url('../images/spriteCheckbox.gif');
 }
+
 .soria .dijitCheckBox,
-.soria .dijitCheckBoxIcon {            
-       background-image: url('../images/spriteCheckbox.gif'); 
+.soria .dijitCheckBoxIcon {            /* inside a toggle button */
+       background-image: url('../images/spriteCheckbox.gif'); /* checkbox sprite image */
        background-repeat: no-repeat;
        width: 16px;
        height: 16px;
        margin: 0;
        padding: 0;
 }
+
 .soria .dijitCheckBox,
 .soria .dijitToggleButton .dijitCheckBoxIcon {
-       
+       /* unchecked */
        background-position: -16px;
 }
+
 .soria .dijitCheckBoxChecked,
 .soria .dijitToggleButtonChecked .dijitCheckBoxIcon {
-       
-       background-position: 0px;
+       /* checked */
+       background-position: 0;
 }
+
 .soria .dijitCheckBoxDisabled {
-       
+       /* disabled */
        background-position: -48px;
 }
+
 .soria .dijitCheckBoxCheckedDisabled {
-       
+       /* disabled but checked */
        background-position: -32px;
 }
+
 .soria .dijitCheckBoxHover {
-       
+       /* hovering over an unchecked enabled checkbox */
        background-position: -80px;
 }
+
 .soria .dijitCheckBoxCheckedHover {
-       
+       /* hovering over a checked enabled checkbox */
        background-position: -64px;
-}
+}
\ No newline at end of file
index 0fe92d2a14482be5edc76ce02ed1361ef6a0f4c5..8e3688e82cb02cb639d7a78e128c83e27eff96be 100644 (file)
@@ -1,25 +1,42 @@
 
+/****
+               dijit.form.TextBox
+               dijit.form.ValidationTextBox
+               dijit.form.SerializableTextBox
+               dijit.form.RangeBoundTextBox
+               dijit.form.NumberTextBox
+               dijit.form.CurrencyTextBox
+               dijit.form.NumberSpinner
+               dijit.form.ComboBox (partial)
+ ****/
+
 .soria .dijitInputContainer INPUT,
 .soria .dijitTextBox {
-       margin: 0em 0.1em;
+       margin: 0 0.1em;
 }
+
 .soria .dijitTextBox,
 .soria .dijitTextArea {
-       
+       /*      For all except dijit.form.NumberSpinner:  the actual input element.
+               For TextBox, ComboBox, Spinner: the table that contains the input.
+               Otherwise the actual input element.
+       */
        background:#fff url("../images/validationInputBg.png") repeat-x top left;
        #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
        border:1px solid #8ba0bd;
 }
+
 .soria .dijitComboBox .dijitButtonNode {
        padding: 0 0.2em;
 }
 .soria .dijitTextBox .dijitButtonNode {
-       
+       /* line between the input area and the drop down button */
        border-color: #8ba0bd;
 }
+
 .soria .dijitTextBoxFocused,
 .soria .dijitTextAreaFocused {
-       
+       /* input field when focused (ie: typing affects it) */
        border-color:#406b9b;
 }
 .soria .dijitTextBoxFocused .dijitButtonNode,
 .soria .dijitSpinner .dijitDownArrowButtonActive {
        border-top-color:#8ba0bd;
 }
+
 .soria .dijitError {
        border-color:#f3d118;
        background-color:#f9f7ba;
        background-image:none;
 }
+
 .soria .dijitErrorFocused {
        background-color:#ff6;
        background-image:none;
 }
+
+/* Validation errors  */
 .soria .dijitValidationIcon {
-       
+       /* prevent height change when widget goes from valid to invalid state */
        width: 16px;
        background: transparent url('../images/warning.png') no-repeat center center;
 }
+
+/* The highlight is shown in the ComboBox menu. */
 .soria .dijitComboBoxHighlightMatch {
        background-color:#f9f7ba;
 }
index 543694e2883adfc5902bff1447304b310fbae54b..1ea27bf65f72c44c8799fde1f1dfc2f4bb133242 100644 (file)
@@ -1,40 +1,66 @@
+/*
+ *  CheckBox and Radio Widgets,
+ *     and the CSS to embed a checkbox or radio icon inside a ToggleButton.
+ *
+ *     Order of images in the default sprite (from L to R, checkbox and radio in same image):
+ *             checkbox        normal   - checked
+ *                                                      - unchecked
+ *                                     disabled - checked
+ *                                                      - unchecked
+ *                                     hover    - checked
+ *                                                      - unchecked
+ *
+ *             radio           normal   - checked
+ *                                                      - unchecked
+ *                                     disabled - checked
+ *                                                      - unchecked
+ *                                     hover    - checked
+ *                                                      - unchecked
+*/
 
 .soria .dijitToggleButton .dijitRadio,
 .soria .dijitToggleButton .dijitRadioIcon {
        background-image: url('../images/spriteRadio.gif');
 }
+
 .soria .dijitRadio,
-.soria .dijitRadioIcon {               
-       background-image: url('../images/spriteRadio.gif'); 
+.soria .dijitRadioIcon {               /* inside a toggle button */
+       background-image: url('../images/spriteRadio.gif'); /* checkbox sprite image */
        background-repeat: no-repeat;
        width: 16px;
        height: 16px;
        margin: 0;
        padding: 0;
 }
+
 .soria .dijitRadio,
 .soria .dijitToggleButton .dijitRadioIcon {
-       
+       /* unselected */
        background-position: -16px;
 }
+
 .soria .dijitRadioChecked,
 .soria .dijitToggleButtonChecked .dijitRadioIcon {
-       
-       background-position: 0px;
+       /* selected */
+       background-position: 0;
 }
+
 .soria .dijitRadioDisabled {
-       
+       /* unselected and disabled */
        background-position: -48px;
 }
+
 .soria .dijitRadioCheckedDisabled {
-       
+       /* selected but disabled */
        background-position: -32px;
 }
+
 .soria .dijitRadioHover {
-       
+       /* hovering over an unselected enabled radio button */
        background-position: -80px;
 }
+
 .soria .dijitRadioCheckedHover {
-       
+       /* hovering over a selected enabled radio button */
        background-position: -64px;
-}
+}
\ No newline at end of file
index eb85ceaeb74f143094e842ab0ee5ffdd32d36ec3..18567720edcbb5cf6a54d86e2a291b54717353a1 100644 (file)
@@ -1,6 +1,8 @@
 .soria .dijitSelect .dijitButtonNode {
-       padding: 0px;
+       padding: 0;
 }
+
+/* Make unselected "look" more like a text box and less like a button */
 .soria .dijitSelect .dijitButtonContents {
        padding-top: 1px;
     background:#fff url("../images/validationInputBg.png") repeat-x top left;
        background: transparent none;
 }
 .dj_ie .soria .dijitSelect .dijitButtonContents {
-       padding-top: 0px;
+       padding-top: 0;
 }
+
 .soria .dijitSelect .dijitArrowButton {
-       padding: 0px 2px;
+       padding: 0 2px;
 }
+
+/* Mirror DropDownButton */
 .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;
 }
+
+/* Make the menu look more combobox-like */
 .soria .dijitSelectMenu td {
-       padding: 0em;
+       padding: 0;
 }
 .soria .dijitSelectMenu .dijitMenuItemLabel,
 .soria .dijitSelectMenu .dijitMenuArrowCell {
        padding: 0.1em 0.2em;
 }
+
index 72e48b678eda6e15486061adc4dcf19e384fd099..3a68f4631749c836f0d4863caedaa62dff529844 100644 (file)
@@ -1,38 +1,49 @@
 
+/****
+       SLIDER
+****/
+
 .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;
-       
+       /* border-color: #b4b4b4; */
 }
 .soria .dijitSliderFocused .dijitSliderBar {
        border-color:#8ba0bd;
 }
+
 .soria .dijitSliderImageHandleH {
-       border:0px;
+       border:0;
        width:15px;
        height:18px;
        background:url("../images/preciseSliderThumb.png") no-repeat center top;
        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;
+       border:0;
        width:20px;
        height:15px;
        background:url("../images/sliderThumb.png") no-repeat center center;
        #background:url("../images/sliderThumb.gif") no-repeat center center;
 }
+
 .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.png') no-repeat -30px top;
        #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
 }
+
 .soria .dijitSliderDecrementIconH,
 .soria .dijitSliderDecrementIconV {
        width:15px;
        #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;
+       background:url('../images/spriteRoundedIconsSmall.png') no-repeat 0 top;
+       #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat 0 top;
 }
+
 .soria .dijitSliderButtonInner {
        visibility:hidden;
 }
+
 .soria .dijitSliderReadOnly *,
 .soria .dijitSliderDisabled * {
        border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
 }
 .soria .dijitSliderReadOnly .dijitSliderDecrementIconH,
 .soria .dijitSliderDisabled .dijitSliderDecrementIconH {
-       background-position: 0px -15px;
+       background-position: 0 -15px;
 }
 .soria .dijitSliderReadOnly .dijitSliderIncrementIconH,
 .soria .dijitSliderDisabled .dijitSliderIncrementIconH {
 .soria .dijitSliderReadOnly .dijitSliderIncrementIconV,
 .soria .dijitSliderDisabled .dijitSliderIncrementIconV {
        background-position: -45px -15px;
-}
+}
\ No newline at end of file
index c1d8de3224bcfe6634a2d678302a8d93cdc6fe97..d9b67c5040847a8a43daeb033120ee41d7ce6cf1 100644 (file)
@@ -1,4 +1,6 @@
 
+/* Slider */
+
 .dijitRtl .soria .dijitSliderProgressBarH,
 .dijitRtl .soria .dijitSliderRemainingBarH,
 .dijitRtl .soria .dijitSliderLeftBumper,
@@ -6,23 +8,28 @@
 .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-left-width: 0;
        border-right-width: 1px;
 }
+
 .dijitRtl .soria .dijitSliderRightBumper {
        border-left-width: 1px;
-       border-right-width: 0px;
+       border-right-width: 0;
 }
+
 .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;
index d450925b415601abdf28857e4cd3fdccd145d96e..bf67b66d07cfa85b0628cb720c2fa7be1a85b66b 100644 (file)
@@ -1 +1 @@
-@CHARSET "UTF-8";
+@CHARSET "UTF-8";
\ No newline at end of file
index b65187f6b4ee10b624307190bf66ad932539186c..3e2d22d575aff6d5f3b5bbda26aa2b6a6ff37faf 100644 (file)
@@ -1,8 +1,15 @@
+/**
+ * dijit.layout.Accordioncontainer
+ *
+ */
 
 .soria .dijitAccordionContainer {
        border-color: #b1badf;
        background-color: #fff;
 }
+
+/* common */
+
 .soria .dijitAccordionTitle {
        background:#fafafa url("../images/titleBar.png") repeat-x top left;
        border-top: 1px solid #b9bbdd;
@@ -11,6 +18,7 @@
        font-weight: bold;
        color: #373941;
 }
+
 .soria .dijitAccordionTitleSelected  {
        background: #f9f9f9 url("../images/accordionItemActive.png") top repeat-x;
        font-weight: bold;
        padding: 5px 4px 5px 8px;
        color: #243C5F;
 }
+
 .soria .dijitAccordionArrow {
        background:url("../images/spriteRoundedIconsSmallBl.gif") no-repeat -30px top;
        width:15px;
        height:15px;
        margin-top:-1px;
 }
+
 .soria .dijitAccordionTitleSelected .dijitAccordionArrow {
        background:url("../images/spriteRoundedIconsSmallBl.gif") no-repeat -15px top;
        margin-top:-1px;
 }
+
 .soria .dijitAccordionText {
        margin-left: 4px;
        margin-right: 4px;
-}
+}
\ No newline at end of file
index c9f07e06710cd90b6392524a6ee4db54cf38a4d7..c6bb820f3a01ff6b84940fa32fbf7373d2f1bb91 100644 (file)
@@ -1,7 +1,8 @@
 .dijitRtl .soria .dijitAccordionArrow {
-       background-position: 0px top;
+       background-position: 0 top;
 }
+
 .dijitRtl .soria .dijitAccordionTitleSelected .dijitAccordionArrow {
-       
+       /* same rule as LTR mode, just listed to override previous rule in this file */
        background-position: -15px top;
 }
index aec147ae66c1dc1adfc4d39c671784d1a6ae2ef7..63f2bf36583694718c64fe531145750d47a66873 100644 (file)
@@ -1,53 +1,71 @@
+/**
+ * dijit.layout.BorderContainer
+ *
+ */
 
 .soria .dijitBorderContainer {
        background-color: #e1ebfb;
        padding: 5px;
 }
+
 .soria .dijitSplitContainer-child,
 .soria .dijitBorderContainer-child {
-       
+       /* By default put borders on all children of BorderContainer,
+        *  to give illusion of borders on the splitters themselves.
+        */
        border: 1px #b1badf solid;
 }
+
 .soria .dijitBorderContainer-dijitTabContainerTop,
 .soria .dijitBorderContainer-dijitTabContainerBottom,
 .soria .dijitBorderContainer-dijitTabContainerLeft,
 .soria .dijitBorderContainer-dijitTabContainerRight {
-       
+       /* except that TabContainer defines borders on it's sub-nodes (tablist and dijitTabPaneWrapper),
+        * so no border on domNode
+        */
         border: none;
 }
+
 .soria .dijitBorderContainer-dijitBorderContainer {
-       
+       /* also, make nested BorderContainers look like a single big widget with lots of splitters */
        border: none;
-       padding: 0px;
+       padding: 0;
 }
+
+
 .soria .dijitSplitterH,
 .soria .dijitGutterH {
        background: #E1EBFB;
        border:0;
-       border-left:0px solid #d3d3d3;
-       border-right:0px solid #d3d3d3;
+       border-left:0 solid #d3d3d3;
+       border-right:0 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;
+       border-top:0 solid #d3d3d3;
+       border-bottom:0 solid #d3d3d3;
        width:5px;
 }
+
 .soria .dijitSplitterV .dijitSplitterThumb {
        background:#B0B0B0 none;
        height:19px;
        left:2px;
        width:1px;
 }
+
+/* active splitter */
 .soria .dijitSplitterActive {
        font-size: 1px;
        background-image: none;
@@ -56,4 +74,4 @@
        opacity: 0.6;
        filter: Alpha(Opacity=60);
        margin: 0;
-}
+}
\ No newline at end of file
index 9308d50ee8b5134fbcd2d527ac3b62941ded94df..32398dc08c65e1e45e6d5c2b501efdfba48dab96 100644 (file)
@@ -1,7 +1,10 @@
+/* ContentPane */
 
 .soria .dijitContentPane {
-    padding: 0px;
+    padding: 0;
 }
+
+/* nested layouts */
 .soria .dijitTabContainerTop-dijitContentPane,
 .soria .dijitTabContainerLeft-dijitContentPane,
 .soria .dijitTabContainerBottom-dijitContentPane,
@@ -10,8 +13,9 @@
     background-color: #fff;
     padding: 5px;
 }
+
 .soria .dijitSplitContainer-dijitContentPane,
 .soria .dijitBorderContainer-dijitContentPane {
-    background-color: #fff;            
+    background-color: #fff;            /* override background-color setting on parent .dijitBorderContainer */
     padding: 5px;
-}
+}
\ No newline at end of file
index 87f065752ac3477408b7d364c5377a53acbc0218..bf7ca16258850475cfed70450821cc6bcb7c121e 100644 (file)
@@ -1,27 +1,34 @@
+/**
+ * dijit.layout.SplitContainer
+ *
+ */
 
 .soria .dijitSplitContainerSizerH {
        background:url("../images/splitContainerSizerV.png") repeat-y #cddef4;
        border:0;
-       border-left:0px solid #436496;
-       border-right:0px solid #436496;
+       border-left:0 solid #436496;
+       border-right:0 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;
+       border-top:0 solid #436496;
+       border-bottom:0 solid #436496;
        height:2px;
 }
+
 .soria .dijitSplitContainerSizerV .thumb {
        background:url("../images/splitContainerSizerH-thumb.png") no-repeat #ccc;
        top:1px;
        width:19px;
        height:5px;
-}
+}
\ No newline at end of file
index 0cf156decbcf08f3029567e532168fd0a8fdcfea..b96d169551852a9e97871f49a4e96d8231ec65cb 100644 (file)
@@ -1,3 +1,12 @@
+/**
+ * dijit.layout.TabContainer
+ *
+ * To style TabContainer with rounded corners
+ * you can use these classes: .dijitTab (left), .dijitTabContent (center), dijitTabInnerDiv (right)
+ * For tabs aligned to top you can style a stripe div right underneath the tabs using .dijitTabStripe
+ */
+
+/* Classes for all types of tabs (top/bottom/left/right) */
 
  .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;
 }
+
+/* Tabs, shared classes */
 .soria .dijitTabPaneWrapper {
        background:#fff;
        border:1px solid #B1BADF;
        margin: 0;
-       padding-left: 0px;
+       padding-left: 0;
 }
+
 .soria .dijitTabInnerDiv {
-       padding:0px 3px 0px 0px;
+       padding:0 3px 0 0;
        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;
+       margin:0 2px 0 0;       /* space between one tab and the next in top/bottom mode */
+       padding:0;
        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;
 }
+
+/* hovered tab */
 .soria .dijitTabHover {
        color: #243C5F;
-       background: url("../images/tabContainerSprite.gif") no-repeat 0px -150px;
+       background: url("../images/tabContainerSprite.gif") no-repeat 0 -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;
 }
+
+/* checked tab*/
 .soria .dijitTabChecked
 {
-       
-       background: url("../images/tabContainerSprite.gif") no-repeat 0px -0px;
+       /* the selected tab (with or without hover) */
+       background: url("../images/tabContainerSprite.gif") no-repeat 0 -0;
 }
+
 .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;
 }
+
+/* Nested Tabs */
+
 .soria .dijitTabContainerTabListNested {
        background: #F0F4FC;
        background: #D9E9F9;
 .soria .dijitTabContainerTabListNested .dijitTab {
        background: none;
        border: none;
-       top: 0px;       
+       top: 0; /* override top:1px setting of top-level tabs */
 }
 .soria .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
 .soria .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
        font-weight: bold;
 }
 .soria .dijitTabContainerSpacerNested .dijitTabSpacer {
-       
-       height: 0px;
+       /* thinner line between tab (labels) and content */
+       height: 0;
 }
 .soria .dijitTabPaneWrapperNested {
-       border: none;   
+       border: none;   /* prevent double border */
 }
+
+
+/* Close Button */
 .soria .dijitTabCloseButton {
        width: 15px;
        height: 15px;
 .dj_ie6 .soria .dijitTabCloseButton {
        background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px top;
 }
+
 .soria .dijitTabCloseButtonHover {
        background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px -15px;
 }
 .dj_ie6 .soria .dijitTabCloseButtonHover {
        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;
-}
+
+/* ================================ */
+/* top tabs */
 .soria .dijitTabContainerTop-tabs {
        border-color: #B1BADF;
        padding-left: 3px;
 }
+
 .soria .dijitTabContainerTopNoStrip {
        padding-top: 3px;
 }
+
+/* top container */
 .soria .dijitTabContainerTop-container {
        border-top: none;
 }
+
 .soria .dijitTabContainerTop .dijitTabListWrapper {
        border-bottom: none;
 }
+
+/*non-checked tabs */
 .soria .dijitTabContainerTop-tabs .dijitTab {
        top: 1px;
 }
+
+/* checked tabs */
 .soria .dijitTabContainerTop-tabs .dijitTabChecked {
        border-bottom-color: #94b4e6;
 }
+
+/* strip */
 .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;
 }
+
+/* ================================ */
+/* bottom tabs */
 .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;
 }
+
+/* bottom container */
 .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;
 }
+
+/* checked tabs */
 .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 {
-       
+       /* the selected tab (with or without hover) */
        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;
 }
+
+/* strip */
 .soria .dijitTabContainerBottomStrip {
        padding-bottom: 2px;
        border: 1px solid #B1BADF;
 }
+
 .soria .dijitTabContainerBottomStrip {
        background: #F0F4FC;
 }
+
+/* top/bottom strip */
 .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;
 }
+
+/* ================================ */
+/* right tabs */
 .soria .dijitTabContainerRight-tabs {
        height: 100%;
        border-color: #ccc;
        padding-top: 3px;
 }
+
+/* right container */
 .soria .dijitTabContainerRight-container {
        border-right: none;
 }
+
 .soria .dijitTabContainerRight-tabs .dijitTab {
        border-bottom: none;
        border-left: 1px solid #B1BADF;
        border-bottom: 1px solid #B1BADF !important;
 }
+
+
+/* some odd ie bug when borders dissapear when setting a bottom margin, this sortof helps */
 .dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabInnerDiv,
 .dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabInnerDiv {
        border-bottom: solid #B1BADF 1px;
        margin-bottom: -1px;
 }
+
+/* checked tabs */
 .soria .dijitTabContainerRight-tabs .dijitTabChecked {
        border-left-color: #94b4e6;
 }
+
 .soria .dijitTabContainerRight-tabs .dijitTabChecked {
        background: url("../images/tabRightChecked.gif") no-repeat left top !important;
 }
+
+/* some odd ie bug when borders dissapear when setting a bottom margin, this sortof helps */
 .dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
 .dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
 .dj_ie6 .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;
 }
+
+/* strip */
 .soria .dijitTabContainerRightStrip {
        padding-right: 2px;
        border: 1px solid #B1BADF;
        background: #F0F4FC;
        border-left: none;
 }
+
+/* ================================ */
+/* left tabs */
 .soria .dijitTabContainerLeft-tabs {
        border-color: #ccc;
        padding-top: 3px;
        height: 100%;
 }
+
+/* left conatiner */
 .soria .dijitTabContainerLeft-container {
        border-left: none;
 }
+
 .soria .dijitTabContainerLeft-tabs .dijitTab {
        border-right: 1px solid #B1BADF;
        border-bottom: 1px solid #B1BADF;
 }
+
+/* checked tabs */
 .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 .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,
        border-bottom: solid #94b4e6 1px;
        margin-bottom: -1px;
 }
+
+/* strip */
 .soria .dijitTabContainerLeftStrip {
        padding-left: 2px;
        border: 1px solid #B1BADF;
        background: #F0F4FC;
        border-right: none;
 }
+
+/* ================================ */
+/* left/right tabs */
 .soria .dijitTabContainerLeft-tabs .dijitTab,
 .soria .dijitTabContainerRight-tabs .dijitTab {
        margin-right:auto;
-       margin-bottom:2px;      
+       margin-bottom:2px;      /* space between one tab and the next in left/right mode */
 }
+
+/* left/right tabstrip */
 .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;
 }
+/* ================================ */
+
+/* this resets the tabcontainer stripe when within a contentpane */
 .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;
+       border-left: 0 solid #ccc;
+       border-top: 0 solid #ccc;
+       border-right: 0 solid #ccc;
+       padding-top: 0;
+       padding-left: 0;
 }
+
+
+/* ================================ */
+
+/* Menu and slider control styles */
 .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 .dijitTabStripIcon {
        height: 14px;
        width: 14px;
        background: url(../images/spriteRoundedIconsSmall.png) no-repeat left top ;
 }
+
 .dj_ie6 .soria .dijitTabStripIcon {
        background-image: url(../images/spriteRoundedIconsSmall.gif);
 }
+
 .soria .dijitTabStripSlideRightIcon {
        background-position: -30px top;
 }
+
 .soria .dijitTabStripMenuIcon {
        background-position: -15px top;
-}
+}
\ No newline at end of file
index 863849813f79ba43ef3d40bdbb0ce4c6da92beaf..eba3963b9afed56ff0cf1000af1cadfdbd4d6676 100644 (file)
@@ -1,10 +1,13 @@
 .dijitRtl .soria .dijitTab {
        margin-right:0;
-       margin-left:2px;                
+       margin-left:2px;                /* space between one tab and the next in top/bottom mode */
 }
+
+/* tab strips */
 .dijitRtl .soria .dijitTabContainer .tabStripButton {
        margin-left: 0;
 }
+
 .dijitRtl .soria .dijitTabContainerTopStrip,
 .dijitRtl .soria .dijitTabContainerBottomStrip,
 .dijitRtl .soria .dijitTabContainerTop-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;
+       margin-left: 0 !important;
 }
+
 .dj_ie-rtl .soria .dijitTabContainerRight-tabs {
-       margin-right: 0px !important;
+       margin-right: 0 !important;
 }
+
 .dijitRtl .soria .dijitTabContainerLeft-tabs .dijitTab,
 .dijitRtl .soria .dijitTabContainerRight-tabs .dijitTab {
-       margin-left:0px;
+       margin-left:0;
 }
+
 .dj_ie-rtl .soria .dijitTab .dijitTabInnerDiv{
        width : 1%;
-}
+}
\ No newline at end of file
index e7f4ac6ab760c47b3fb76ef0d37f3d1cb6181a3f..36471d03a13ae565fd373fd605d85d7ed6f633d7 100644 (file)
+/*
+       Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
 
-.dijitReset {
-       
-       margin:0;
-       border:0;
-       padding:0;
-       line-height:normal;
-       font: inherit;
-       color: inherit;
-}
-.dijit_a11y .dijitReset {
-       -moz-appearance: none; 
-}
-.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;                     
-}
-.dijitInputContainer {
-       
-       #zoom: 1;
-       overflow: hidden;
-       float: none !important; 
-       position:relative;
-}
-.dj_ie INPUT.dijitTextBox,
-.dj_ie .dijitTextBox INPUT {
-       font-size: 100%;
-}
-.dijitTextBox .dijitSpinnerButtonContainer,
-.dijitTextBox .dijitArrowButtonContainer,
-.dijitTextBox .dijitValidationContainer {
-       float: right;
-       text-align: center;
-}
-.dijitTextBox INPUT.dijitInputField {
-       
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-}
-.dijitTextBox .dijitValidationContainer {
-       display: none;
-}
-.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;
-}
-.dijitOffScreen {
-       position: absolute;
-       visibility: hidden;
-       left: 50%;
-       top: -10000px;
-}
-.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;
-}
-.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;
-}
-.dijitDisplayNone {
-       
-       display:none !important;
-}
-.dijitContainer {
-       
-       overflow: hidden;       
-}
-.dijit_a11y * {
-       background-image:none !important;
-}
-.dijit_a11y .dijitIcon,
-.dijit_a11y DIV.dijitArrowButtonInner, 
-.dijit_a11y SPAN.dijitArrowButtonInner,
-.dijit_a11y IMG.dijitArrowButtonInner,
-.dijit_a11y .dijitCalendarIncrementControl {
-       
-       display: none;
-}
-.dijitSpinner DIV.dijitArrowButtonInner {
-       display: block; 
-}
-.dijit_a11y .dijitA11ySideArrow {
-       display: inline !important; 
-       cursor: pointer;
-}
-.dijit_a11y .dijitCalendarDateLabel {
-       padding: 1px;
-}
-.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
-       border-style: dotted !important;
-       border-width: 1px;
-       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 .dijitTextBoxReadOnly .dijitInputField,
-.dijit_a11y .dijitTextBoxReadOnly .dijitButtonNode {
-       border-style: outset!important;
-       border-width: medium!important;
-       border-color: #999 !important;
-       color:#999 !important;
-}
-.dijitButtonNode * {
-       vertical-align: middle;
-}
-.dijitButtonNode .dijitArrowButtonInner {
-       
-       background: no-repeat center;
-       width: 12px;
-       height: 12px;
-       direction: ltr; 
-}
-.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;
-}
-.dijitButtonContents {
-       display: block;         
-}
-td.dijitButtonContents {
-       display: table-cell;    
-}
-.dijitButtonNode IMG {
-       
-       vertical-align:middle;
-       
-}
-TABLE.dijitComboButton { 
-       
-       border-collapse: collapse;
-       border:0;
-       padding:0;
-       margin:0;
-}
-.dijitToolbar .dijitComboButton {
-       
-       border-collapse: separate;
-}
-.dijitToolbar .dijitToggleButton,
-.dijitToolbar .dijitButton,
-.dijitToolbar .dijitDropDownButton,
-.dijitToolbar .dijitComboButton {
-       margin: 0;
-}
-.dijitToolbar .dijitButtonContents {
-       
-       padding: 1px 2px;
-}
-.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;
-}
-.dj_webkit .dijitSpinner .dijitSpinnerButtonContainer {
-       
-       line-height:inherit;
-}
-.dijitTextBox .dijitButtonNode {
-       border-width: 0;
-}
-.dijitButtonNode,
-.dijitButtonNode * {
-       cursor: pointer;
-}
-.dj_ie .dijitButtonNode {
-       
-       zoom: 1;
-}
-.dj_ie .dijitButtonNode button {
-       
-       overflow: visible;
-}
-DIV.dijitArrowButton {
-       float: right;
-}
-.dijitTextBox {
-       border: solid black 1px;
-       #overflow: hidden; 
-       width: 15em;    
-       vertical-align: middle;
-       #vertical-align: auto;
-}
-.dijitTextBoxReadOnly,
-.dijitTextBoxDisabled {
-       color: gray;
-}
-.dj_webkit .dijitTextBoxDisabled INPUT {
-       color: #eee; 
-}
-.dj_webkit TEXTAREA.dijitTextAreaDisabled {
-       color: #333; 
-}
-.dj_gecko .dijitTextBoxReadOnly INPUT,
-.dj_gecko .dijitTextBoxDisabled INPUT {
-       -moz-user-input: none; 
-}
-.dijitPlaceHolder {
-       
-       color: #AAAAAA;
-       font-style: italic;
-       position: absolute;
-       top: 0;
-       left: 0;
-       #filter: ""; 
-}
-.dijitTimeTextBox {
-       width: 8em;
-}
-.dijitTextBox INPUT:focus {
-       outline: none;  
-}
-.dijitTextBoxFocused {
-       outline: auto 5px -webkit-focus-ring-color;
-}
-.dijitTextBox INPUT {
-       float: left; 
-}
-.dijitInputInner {
-       
-       border:0 !important;
-       vertical-align:middle !important;
-       background-color:transparent !important;
-       width:100% !important;
-       
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-       margin-left: 0 !important;
-       margin-right: 0 !important;
-}
-.dijit_a11y .dijitTextBox INPUT {
-       margin: 0 !important;
-}
-.dijitTextBoxError INPUT.dijitValidationInner,
-.dijitTextBox INPUT.dijitArrowButtonInner {
-       
-       text-indent: -1em !important;
-       direction: ltr !important;
-       text-align: left !important;
-       height: auto !important;
-       #text-indent: 0 !important;
-       #letter-spacing: -5em !important;
-       #text-align: right !important;
-}
-.dj_ie .dijitTextBox INPUT,
-.dj_ie INPUT.dijitTextBox {
-       overflow-y: visible; 
-       line-height: normal; 
-}
-.dj_ie7 .dijitTextBox INPUT.dijitValidationInner,
-.dj_ie7 .dijitTextBox INPUT.dijitArrowButtonInner {
-       line-height: 86%; 
-}
-.dj_ie6 .dijitTextBox INPUT,
-.dj_ie6 INPUT.dijitTextBox,
-.dj_iequirks .dijitTextBox INPUT.dijitValidationInner,
-.dj_iequirks .dijitTextBox INPUT.dijitArrowButtonInner,
-.dj_iequirks .dijitTextBox INPUT.dijitSpinnerButtonInner,
-.dj_iequirks .dijitTextBox INPUT.dijitInputInner,
-.dj_iequirks INPUT.dijitTextBox {
-       line-height: 100%; 
-}
-.dijit_a11y INPUT.dijitValidationInner,
-.dijit_a11y INPUT.dijitArrowButtonInner {
-       
-       text-indent: 0 !important;
-       width: 1em !important;
-       #text-align: left !important;
-}
-.dijitTextBoxError .dijitValidationContainer {
-       display: inline;
-       cursor: default;
-}
-.dijitSpinner .dijitSpinnerButtonContainer,
-.dijitComboBox .dijitArrowButtonContainer {
-       
-       border-width: 0 0 0 1px !important; 
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
-       
-       border-width: 0;
-}
-.dj_ie .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
-       clear: both; 
-}
-.dijit_a11y .dijitTextBox .dijitValidationContainer,
-.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBox .dijitArrowButtonContainer {
-       
-       border: solid black !important;
-       border-width: 0 0 0 1px !important;
-}
-.dj_ie .dijitToolbar .dijitComboBox {
-       
-       vertical-align: middle;
-}
-.dijitTextBox .dijitSpinnerButtonContainer {
-       width: 1em;
-       position: relative !important;
-       overflow: hidden;
-}
-.dijitSpinner .dijitSpinnerButtonInner {
-       width:1em;
-       visibility:hidden !important; 
-       overflow-x:hidden;
-}
-.dijitComboBox .dijitButtonNode,
-.dijitSpinnerButtonContainer .dijitButtonNode {
-       border-width: 0;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
-       border: 0 none !important;
-}
-.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner,
-.dijit_a11y .dijitSpinnerButtonContainer INPUT {
-       width: 1em !important;
-}
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner {
-       margin: 0 auto !important; 
-}
-.dj_ie .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding-left: 0.3em !important;
-       padding-right: 0.3em !important;
-       margin-left: 0.3em !important;
-       margin-right: 0.3em !important;
-       width: 1.4em !important;
-}
-.dj_ie7 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding-left: 0.0em !important; 
-       padding-right: 0.0em !important;
-       width: 1em !important;
-}
-.dj_ie6 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       margin-left: 0.1em !important;
-       margin-right: 0.1em !important;
-       width: 1em !important;
-}
-.dj_iequirks .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       margin-left: 0 !important;
-       margin-right: 0 !important;
-       width: 2em !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       
-       padding: 0;
-       position: absolute !important;
-       right: 0;
-       float: none;
-       height: 50%;
-       width: 100%;
-       bottom: auto;
-       left: 0;
-       right: auto;
-}
-.dj_iequirks .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: auto;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitArrowButton {
-       overflow: visible !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitDownArrowButton {
-       top: 50%;
-       border-top-width: 1px !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitUpArrowButton {
-       #bottom: 50%;   
-       top: 0;
-}
-.dijitSpinner .dijitArrowButtonInner {
-       margin: auto;
-       overflow-x: hidden;
-       height: 100% !important;
-}
-.dj_iequirks .dijitSpinner .dijitArrowButtonInner {
-       height: auto !important;
-}
-.dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       -moz-transform: scale(0.5);
-       -moz-transform-origin: center top;
-       -webkit-transform: scale(0.5);
-       -webkit-transform-origin: center top;
-       -o-transform: scale(0.5);
-       -o-transform-origin: center top;
-       transform: scale(0.5);
-       transform-origin: left top;
-       padding-top: 0;
-       padding-bottom: 0;
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-       width: 100%;
-}
-.dj_ie .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       zoom: 50%; 
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButtonInner {
-       overflow: hidden;
-}
-.dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: 100%;
-}
-.dj_iequirks .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: 1em; 
-}
-.dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       visibility: hidden;
-}
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       vertical-align:top;
-       visibility: visible;
-}
-.dijit_a11y .dijitSpinnerButtonContainer {
-       width: 1em;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
-       border-width: 1px 0px 0px 0px;
-       border-style: solid !important;
-}
-.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 !important;
-       height: auto !important;
-}
-.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:2px;
-       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;
-}
-.dijit_a11y .dijitTooltipConnector {
-       display: none;  
-}
-.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;
-}
-.dj_ff3 .dijit_a11y div.dijitSplitter:focus {
-       outline-style:dotted;
-       outline-width: 2px;
-}
-.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;
-}
-.dijitTitlePaneTitle {
-       cursor: pointer;
-}
-.dijitFixedOpen {
-       
-       cursor: default;
-}
-.dijitTitlePaneTitle * {
-       vertical-align: middle;
-}
-.dijitTitlePane .dijitArrowNodeInner {
-       
-       display: none;
-}
-.dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
-       
-       display:inline !important;
-       font-family: monospace;         
-}
-.dijit_a11y .dijitTitlePane .dijitArrowNode {
-       
-       display:none;
-}
-.dj_ie6 .dijitTitlePaneContentOuter,
-.dj_ie6 .dijitTitlePane .dijitTitlePaneTitle {
-       
-       zoom: 1;
-}
-.dijitColorPalette {
-       border: 1px solid #999;
-       background: #fff;
-       position: relative;
-}
-img.dijitColorPaletteUnder {
-       
-       border-style: none;
-       position: absolute;
-       left: 0;
-       top: 0;
-}
-.dijitColorPalette .dijitPaletteTable {
-       
-       padding: 2px 3px 3px 3px;
-       position: relative;
-       overflow: hidden;
-       outline: 0;
-       border-collapse: separate;
-}
-.dj_ie6 .dijitColorPalette .dijitPaletteTable,
-.dj_ie7 .dijitColorPalette .dijitPaletteTable,
-.dj_iequirks .dijitColorPalette .dijitPaletteTable {
-       
-       padding: 0;
-       margin: 2px 3px 3px 3px;
-}
-.dijitColorPalette .dijitPaletteCell {
-       
-       height: 20px;
-       width: 20px;
-       font-size: 1px;
-       vertical-align: middle;
-       text-align: center;
-}
-.dijitColorPalette .dijitPaletteImg {
-       
-       width: 16px;
-       height: 14px;
-       border: 1px solid #999;
-       cursor: default;
-       vertical-align: middle;
-}
-.dj_iequirks .dijitColorPalette .dijitPaletteImg {
-       margin: 1px;    
-}
-.dijitPaletteTable td {
-               padding: 0px;
-}
-.dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       
-       border: 1px solid #000;
-}
-.dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
-.dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
-       border: 2px solid #000;
-}
-.dijit_a11y .dijitColorPalette .dijitPaletteTable,
-.dijit_a11y .dijitColorPalette .dijitPaletteTable * {
-       
-       background-color: transparent !important;
-}
-.dj_gecko .dijit_a11y .dijitColorPalette .dijitPaletteCellFocused .dijitPaletteImg {
-       border: 3px dotted #000;        
-       margin: -1px;
-}
-.dijit_a11y  .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       border: 2px solid #000 !important;
-}
-.dijitAccordionContainer {
-       border:1px solid #b7b7b7;
-       border-top:0 !important;
-}
-.dijitAccordionTitle {
-       cursor: pointer;
-}
-.dijitAccordionTitleSelected {
-       cursor: default;
-}
-.dijitAccordionTitle .arrowTextUp,
-.dijitAccordionTitle .arrowTextDown {
-       display: none;
-       font-size: 0.65em;
-       font-weight: normal !important;
-}
-.dijit_a11y .dijitAccordionTitle .arrowTextUp,
-.dijit_a11y .dijitAccordionTitleSelected .arrowTextDown {
-       display: inline;
-}
-.dijit_a11y .dijitAccordionTitleSelected .arrowTextUp {
-       display: none;
-}
-.dj_ie6 .dijitAccordionTitle,
-.dj_iequirks .dijitAccordionTitle {
-       
-       zoom: 1;
-}
-.dijitCalendarContainer {
-       width: auto;    
-}
-.dijitCalendarContainer th, .dijitCalendarContainer td {
-       padding: 0;
-}
-.dijitCalendarNextYear {
-       margin:0 0 0 0.55em;
-}
-.dijitCalendarPreviousYear {
-       margin:0 0.55em 0 0;
-}
-.dijitCalendarIncrementControl {
-       vertical-align: middle;
-}
-.dijitCalendarIncrementControl,
-.dijitCalendarDateTemplate,
-.dijitCalendarMonthLabel,
-.dijitCalendarPreviousYear,
-.dijitCalendarNextYear {
-       cursor: pointer;
-}
-.dijitCalendarDisabledDate {
-       color: gray;
-       text-decoration: line-through;
-       cursor: default;
-}
-.dijitSpacer {
-       
-       position: relative;
-       height: 1px;
-       overflow: hidden;
-       visibility: hidden;
-}
-.dijitMenu {
-       border:1px solid black;
-       background-color:white;
-}
-.dijitMenuTable {
-       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.5;
-       cursor:default;
-}
-.dj_ie .dijit_a11y .dijitMenuItemDisabled,
-.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 dotted black !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;
-}
-.dj_ie .dijit_a11y .dijitMenuBar .dijitMenuItem {
-       
-       margin: 0px;
-}
-.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;
-}
-.nowrapTabStrip {
-       width: 50000px;
-       display: block;
-       position: relative;
-}
-.dijitTabListWrapper {
-       overflow: hidden;
-}
-.dijit_a11y .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.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
-       cursor: auto;
-}
-.dijitTab {
-       position:relative;
-       cursor:pointer;
-       white-space:nowrap;
-       z-index:3;
-}
-.dijitTab * {
-       
-       vertical-align: middle;
-}
-.dijitTabChecked {
-       cursor: default;        
-}
-.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;
-}
-.dijitTabCloseButton {
-       margin-left: 1em;
-}
-.dijitTabCloseText {
-       display:none;
-}
-.dijit_a11y .dijitTabCloseButton {
-       background-image: none !important;
-       width: auto !important;
-       height: auto !important;
-       border: thin dotted;    
-}
-.dijit_a11y .dijitTabCloseButtonHover {
-       border:thin solid;      
-}
-.dijit_a11y .dijitTabCloseText {
-       display: inline;
-}
-.dijit_a11y .dijitTabChecked {
-       
-       border-style:dashed !important;
-}
-.dijit_a11y .dijitTabInnerDiv {
-       border-left:none !important;
- }
-.dijitTabPane,
-.dijitStackContainer-child,
-.dijitAccordionContainer-child {
-       
-    border: none !important;
-}
-.dijitInlineEditBoxDisplayMode {
-       border: 1px solid transparent;  
-       cursor: text;
-}
-.dijit_a11y .dijitInlineEditBoxDisplayMode,
-.dj_ie6 .dijitInlineEditBoxDisplayMode {
-       
-       border: none;
-}
-.dijitInlineEditBoxDisplayModeHover,
-.dijit_a11y .dijitInlineEditBoxDisplayModeHover,
-.dj_ie6 .dijitInlineEditBoxDisplayModeHover {
-       
-       background-color: #e2ebf2;
-       border: solid 1px black;
-}
-.dijitInlineEditBoxDisplayModeDisabled {
-       cursor: default;
-}
-.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;
-       overflow: hidden;       
-}
-.dijitDialogTitleBar {
-       cursor: move;
-}
-.dijitDialogFixed .dijitDialogTitleBar {
-       cursor:default;
-}
-.dijitDialogCloseIcon {
-       cursor: pointer;
-}
-.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 .dijitSpinnerButtonContainer,
-.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;
-}
-.dijitSliderMoveableV {
-       right:50%;
-}
-.dijit_a11y DIV.dijitSliderImageHandle,
-.dijitSliderImageHandle {
-       margin:0;
-       padding:0;
-       position:relative !important;
-       border:8px solid gray;
-       width:0;
-       height:0;
-       cursor: pointer;
-}
-.dj_iequirks .dijit_a11y .dijitSliderImageHandle {
-       font-size: 0;
-}
-.dj_ie7 .dijitSliderImageHandle {
-       overflow: hidden; 
-}
-.dj_ie7 .dijit_a11y .dijitSliderImageHandle {
-       overflow: visible; 
-}
-.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
-       border:4px solid #000;
-       height:8px;
-       width:8px;
-}
-.dijitSliderImageHandleV {
-       top:-8px;
-       right: -50%;
-}
-.dijitSliderImageHandleH {
-       left:50%;
-       top:-5px;
-       vertical-align:top;
-}
-.dijitSliderBar {
-       border-style:solid;
-       border-color:black;
-       cursor: pointer;
-}
-.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;
-}
-.dijitSliderDecoration {
-       text-align:center;
-}
-.dijitSliderV TD {
-       position: relative; 
-}
-.dijitSliderDecorationH {
-       width: 100%;
-}
-.dijitSliderDecorationV {
-       height: 100%;
-}
-.dijitSliderButton {
-       font-family:monospace;
-       margin:0;
-       padding:0;
-       display:block;
-}
-.dijit_a11y .dijitSliderButtonInner {
-       visibility:visible !important;
-}
-.dijitSliderButtonContainer {
-       text-align:center;
-       height:0;       
-}
-.dijitSliderButtonContainer * {
-       cursor: pointer;
-}
-.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%;
-}
-.dijitRuleLabelV {
-       
-       text-overflow: ellipsis;
-       white-space: nowrap;
-       overflow: hidden;
-}
-.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 .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;
-}
-.dijit_a11y .dijitButtonContents .dijitButtonText,
-.dijit_a11y .dijitTab .tabLabel {
-       display: inline !important;
-}
-.dijitTextArea {
-       width:100%;
-       overflow-y: auto;       
-}
-.dijitTextArea[cols] {
-       width:auto; 
-}
-.dj_ie .dijitTextAreaCols {
-       width:auto;
-}
-.dijitToolbarSeparator {
-       height: 18px;
-       width: 5px;
-       padding: 0 1px;
-       margin: 0;
-}
-.dijitIEFixedToolbar {
-       position:absolute;
-       
-       top: expression(eval((document.documentElement||document.body).scrollTop));
-}
-.dijitEditor {
-       display: block; 
-}
-.dijitEditorDisabled,
-.dijitEditorReadOnly {
-       color: gray;
-}
-.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 .dijitTimePickerItemSelected .dijitTimePickerItemInner {
-       border: solid 4px black;
-}
-.dijit_a11y .dijitTimePickerItemHover .dijitTimePickerItemInner {
-       border: dashed 4px black;
-}
-.dijitToggleButtonIconChar {
-       
-       display:none !important;
-}
-.dijit_a11y .dijitToggleButton .dijitToggleButtonIconChar {
-       display:inline !important;
-       visibility:hidden;
-}
-.dj_ie6 .dijitToggleButtonIconChar, .dj_ie6 .tabStripButton .dijitButtonText {
-       font-family: "Arial Unicode MS";        
-}
-.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
-       display: inline !important; 
-       visibility:visible !important;
-}
-.dijitArrowButtonChar {
-        display:none !important;
-}
-.dijit_a11y .dijitArrowButtonChar {
-        display:inline !important;
-}
-.dijit_a11y .dijitDropDownButton .dijitArrowButtonInner,
-.dijit_a11y .dijitComboButton .dijitArrowButtonInner {
-       display:none !important;
-}
-.dijitSelect {
-       margin: 0.2em;
-       border-collapse: collapse;
-}
-.dj_ie .dijitSelect,
-.dj_ie7 .dijitSelect,
-.dj_iequirks .dijitSelect {
-       vertical-align: middle; 
-}
-.dj_ie8 .dijitSelect .dijitButtonText {
-       vertical-align: top;
-}
-.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;
-       white-space: nowrap;
-       text-align: left;
-}
-.dijitSelectFixedWidth .dijitButtonContents {
-       width: 100%;
-}
-.dijitSelectMenu .dijitMenuItemIcon {
-       
-       display:none;
-}
-.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
-.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
-       
-       position: static;
-}
-.dijitSelectLabel *
-{
-       vertical-align: baseline;
-}
-.dijitSelectSelectedOption * {
-       font-weight: bold;
-}
-.dijitSelectMenu {
-       border-width: 1px;
-}
-.dijitSelectMenu .dijitMenuTable {
-       margin: 0px;
-       background-color: transparent;
-}
-.dijitForceStatic {
-       position: static !important;
-}
-.dijitReadOnly *,
-.dijitDisabled *,
-.dijitReadOnly,
-.dijitDisabled {
-       
-       cursor: default;
-}
-.dijitIconSave,
-.dijitIconPrint,
-.dijitIconCut,
-.dijitIconCopy,
-.dijitIconClear,
-.dijitIconDelete,
-.dijitIconUndo,
-.dijitIconEdit,
-.dijitIconNewTask,
-.dijitIconEditTask,
-.dijitIconEditProperty,
-.dijitIconTask,
-.dijitIconFilter,
-.dijitIconConfigure,
-.dijitIconSearch,
-.dijitIconApplication,
-.dijitIconBookmark,
-.dijitIconChart,
-.dijitIconConnector,
-.dijitIconDatabase,
-.dijitIconDocuments,
-.dijitIconMail,
-.dijitLeaf,
-.dijitIconFile,
-.dijitIconFunction,
-.dijitIconKey,
-.dijitIconPackage,
-.dijitIconSample,
-.dijitIconTable,
-.dijitIconUsers,
-.dijitFolderClosed,
-.dijitIconFolderClosed,
-.dijitFolderOpened,
-.dijitIconFolderOpen,
-.dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActEnabled.png); 
-       width: 16px;
-       height: 16px;
-}
-.dj_ie6 .dijitIconSave,
-.dj_ie6 .dijitIconPrint,
-.dj_ie6 .dijitIconCut,
-.dj_ie6 .dijitIconCopy,
-.dj_ie6 .dijitIconClear,
-.dj_ie6 .dijitIconDelete,
-.dj_ie6 .dijitIconUndo,
-.dj_ie6 .dijitIconEdit,
-.dj_ie6 .dijitIconNewTask,
-.dj_ie6 .dijitIconEditTask,
-.dj_ie6 .dijitIconEditProperty,
-.dj_ie6 .dijitIconTask,
-.dj_ie6 .dijitIconFilter,
-.dj_ie6 .dijitIconConfigure,
-.dj_ie6 .dijitIconSearch,
-.dj_ie6 .dijitIconApplication,
-.dj_ie6 .dijitIconBookmark,
-.dj_ie6 .dijitIconChart,
-.dj_ie6 .dijitIconConnector,
-.dj_ie6 .dijitIconDatabase,
-.dj_ie6 .dijitIconDocuments,
-.dj_ie6 .dijitIconMail,
-.dj_ie6 .dijitLeaf,
-.dj_ie6 .dijitIconFile,
-.dj_ie6 .dijitIconFunction,
-.dj_ie6 .dijitIconKey,
-.dj_ie6 .dijitIconPackage,
-.dj_ie6 .dijitIconSample,
-.dj_ie6 .dijitIconTable,
-.dj_ie6 .dijitIconUsers,
-.dj_ie6 .dijitFolderClosed,
-.dj_ie6 .dijitIconFolderClosed,
-.dj_ie6 .dijitFolderOpened,
-.dj_ie6 .dijitIconFolderOpen,
-.dj_ie6 .dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActEnabled8bit.png);
-}
-.dijitDisabled .dijitIconSave,
-.dijitDisabled .dijitIconPrint,
-.dijitDisabled .dijitIconCut,
-.dijitDisabled .dijitIconCopy,
-.dijitDisabled .dijitIconClear,
-.dijitDisabled .dijitIconDelete,
-.dijitDisabled .dijitIconUndo,
-.dijitDisabled .dijitIconEdit,
-.dijitDisabled .dijitIconNewTask,
-.dijitDisabled .dijitIconEditTask,
-.dijitDisabled .dijitIconEditProperty,
-.dijitDisabled .dijitIconTask,
-.dijitDisabled .dijitIconFilter,
-.dijitDisabled .dijitIconConfigure,
-.dijitDisabled .dijitIconSearch,
-.dijitDisabled .dijitIconApplication,
-.dijitDisabled .dijitIconBookmark,
-.dijitDisabled .dijitIconChart,
-.dijitDisabled .dijitIconConnector,
-.dijitDisabled .dijitIconDatabase,
-.dijitDisabled .dijitIconDocuments,
-.dijitDisabled .dijitIconMail,
-.dijitDisabled .dijitLeaf,
-.dijitDisabled .dijitIconFile,
-.dijitDisabled .dijitIconFunction,
-.dijitDisabled .dijitIconKey,
-.dijitDisabled .dijitIconPackage,
-.dijitDisabled .dijitIconSample,
-.dijitDisabled .dijitIconTable,
-.dijitDisabled .dijitIconUsers,
-.dijitDisabled .dijitFolderClosed,
-.dijitDisabled .dijitIconFolderClosed,
-.dijitDisabled .dijitFolderOpened,
-.dijitDisabled .dijitIconFolderOpen,
-.dijitDisabled .dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActDisabled.png); 
-}
-.dijitIconSave { background-position: 0px; }
-.dijitIconPrint { background-position: -16px; }
-.dijitIconCut { background-position: -32px; }
-.dijitIconCopy { background-position: -48px; }
-.dijitIconClear { background-position: -64px; }
-.dijitIconDelete { background-position: -80px; }
-.dijitIconUndo { background-position: -96px; }
-.dijitIconEdit { background-position: -112px; }
-.dijitIconNewTask { background-position: -128px; }
-.dijitIconEditTask { background-position: -144px; }
-.dijitIconEditProperty { background-position: -166px; }
-.dijitIconTask { background-position: -176px; }
-.dijitIconFilter { background-position: -192px; }
-.dijitIconConfigure { background-position: -208px; }
-.dijitIconSearch { background-position: -224px; }
-.dijitIconError { background-position: -496px; } 
-.dijitIconApplication { background-position: -240px; }
-.dijitIconBookmark { background-position: -256px; }
-.dijitIconChart { background-position: -272px; }
-.dijitIconConnector { background-position: -288px; }
-.dijitIconDatabase { background-position: -304px; }
-.dijitIconDocuments { background-position: -320px; }
-.dijitIconMail { background-position: -336px; }
-.dijitIconFile, .dijitLeaf { background-position: -352px; }
-.dijitIconFunction { background-position: -368px; }
-.dijitIconKey { background-position: -384px; }
-.dijitIconPackage{ background-position: -400px; }
-.dijitIconSample { background-position: -416px; }
-.dijitIconTable { background-position: -432px; }
-.dijitIconUsers { background-position: -448px; }
-.dijitIconFolderClosed, .dijitFolderClosed { background-position: -464px; }
-.dijitIconFolderOpen, .dijitFolderOpened { background-position: -480px; }
-.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;}
-.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;
-}
- .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 .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
-{
-       
-       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 .dijitTabCloseButton {
-       width: 15px;
-       height: 15px;
-       background: url(images/spriteRoundedIconsSmall.png) no-repeat -60px top;
-       margin-top: -1px;
-}
-.dj_ie6 .soria .dijitTabCloseButton {
-       background: url(images/spriteRoundedIconsSmall.gif) no-repeat -60px top;
-}
-.soria .dijitTabCloseButtonHover {
-       background: url(images/spriteRoundedIconsSmall.png) no-repeat -60px -15px;
-}
-.dj_ie6 .soria .dijitTabCloseButtonHover {
-       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 {
-       
-       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 .dijitTabStripIcon {
-       height: 14px;
-       width: 14px;
-       background: url(images/spriteRoundedIconsSmall.png) no-repeat left top ;
-}
-.dj_ie6 .soria .dijitTabStripIcon {
-       background-image: url(images/spriteRoundedIconsSmall.gif);
-}
-.soria .dijitTabStripSlideRightIcon {
-       background-position: -30px top;
-}
-.soria .dijitTabStripMenuIcon {
-       background-position: -15px top;
-}
-.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;
-       font-size: 0.9em;
-       font-weight: bold;
-       color: #373941;
-}
-.soria .dijitAccordionTitleSelected  {
-       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;
-       color: #243C5F;
-}
-.soria .dijitAccordionArrow {
-       background:url(images/spriteRoundedIconsSmallBl.gif) no-repeat -30px top;
-       width:15px;
-       height:15px;
-       margin-top:-1px;
-}
-.soria .dijitAccordionTitleSelected .dijitAccordionArrow {
-       background:url(images/spriteRoundedIconsSmallBl.gif) no-repeat -15px top;
-       margin-top:-1px;
-}
-.soria .dijitAccordionText {
-       margin-left: 4px;
-       margin-right: 4px;
-}
-.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;
-}
-.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;
-}
-.soria .dijitInputContainer INPUT,
-.soria .dijitTextBox {
-       margin: 0em 0.1em;
-}
-.soria .dijitTextBox,
-.soria .dijitTextArea {
-       
-       background:#fff url(images/validationInputBg.png) repeat-x top left;
-       #background:#fff url(images/validationInputBg.gif) repeat-x top left;
-       border:1px solid #8ba0bd;
-}
-.soria .dijitComboBox .dijitButtonNode {
-       padding: 0 0.2em;
-}
-.soria .dijitTextBox .dijitButtonNode {
-       
-       border-color: #8ba0bd;
-}
-.soria .dijitTextBoxFocused,
-.soria .dijitTextAreaFocused {
-       
-       border-color:#406b9b;
-}
-.soria .dijitTextBoxFocused .dijitButtonNode,
-.soria .dijitSpinner .dijitUpArrowButtonActive,
-.soria .dijitSpinner .dijitDownArrowButtonActive {
-       border-left-color:#8ba0bd;
-}
-.soria .dijitSpinnerFocused .dijitDownArrowButton,
-.soria .dijitSpinner .dijitUpArrowButtonActive,
-.soria .dijitSpinner .dijitDownArrowButtonActive {
-       border-top-color:#8ba0bd;
-}
-.soria .dijitError {
-       border-color:#f3d118;
-       background-color:#f9f7ba;
-       background-image:none;
-}
-.soria .dijitErrorFocused {
-       background-color:#ff6;
-       background-image:none;
-}
-.soria .dijitValidationIcon {
-       
-       width: 16px;
-       background: transparent url(images/warning.png) no-repeat center center;
-}
-.soria .dijitComboBoxHighlightMatch {
-       background-color:#f9f7ba;
-}
-.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 .dijitButtonText {
-       text-align: center;
-       padding: 0 0.3em;
-}
-.soria .dijitArrowButton {
-       color: #111;
-}
-.soria .dijitComboButton .dijitDownArrowButton {
-       padding-right:4px;
-}
-.soria .dijitTextBoxReadOnly,
-.soria .dijitTextBoxReadOnly .dijitButtonNode,
-.soria .dijitButtonDisabled .dijitButtonNode,
-.soria .dijitToggleButtonDisabled .dijitButtonNode,
-.soria .dijitDropDownButtonDisabled .dijitButtonNode,
-.soria .dijitComboButtonDisabled .dijitButtonNode,
-.soria .dijitTextBoxDisabled,
-.soria .dijitTextBoxDisabled .dijitButtonNode {
-       
-       border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
-       background:#c3d3e5 url(images/buttonDisabled.png) top repeat-x;
-       opacity: 0.60;
-}
-.dj_ie6 .soria .dijitReadOnly INPUT,
-.dj_ie7 .soria .dijitReadOnly INPUT,
-.dj_ie6 .soria .dijitComboButtonDisabled .dijitButtonText,
-.dj_ie7 .soria .dijitComboButtonDisabled .dijitButtonText {
-       
-       color: #aaa;
-}
-.soria .dijitButtonHover .dijitButtonNode,
-.soria .dijitButtonNodeHover,
-.soria .dijitToggleButtonHover .dijitButtonNode,
-.soria .dijitDropDownButtonHover .dijitButtonNode,
-.soria .dijitButtonContentsHover,
-.soria .dijitUpArrowButtonHover,
-.soria .dijitDownArrowButtonHover {
-       
-       
-       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 .dijitUpArrowButtonActive,
-.soria .dijitDownArrowButtonActive {
-       
-       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 center;
-       width: 11px;
-       height: 11px;
-}
-.soria .dijitComboBox .dijitArrowButtonInner {
-        background-position: 0 center;
-}
-.soria .dijitLeftArrowButton .dijitArrowButtonInner {
-       background-position: -11px center;
-}
-.soria .dijitUpArrowButton .dijitArrowButtonInner {
-       background-position: -22px center;
-}
-.soria .dijitRightArrowButton .dijitArrowButtonInner {
-       background-position: -33px center;
-}
-.dj_ie6 .soria .dijitArrowButtonInner {
-       background-image: url(images/spriteArrows.gif);
-}
-.dj_ie .soria .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
-       margin-top: 1px; 
-}
-.soria .dijitSpinnerButtonContainer {
-       width: auto;
-       padding: 0;
-}
-.soria .dijitSpinner .dijitArrowButton {
-       width: 15px;
-}
-.soria .dijitSpinner .dijitSpinnerButtonInner {
-       width: 15px;
-}
-.soria .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding: 0;
-}
-.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;
-}
-.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;
-}
-.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;
-}
-.soria .dijitSliderImageHandleH {
-       border:0px;
-       width:15px;
-       height:18px;
-       background:url(images/preciseSliderThumb.png) no-repeat center top;
-}
-.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;
-}
-.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;
-}
-.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;
-       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;
-}
-.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 .dijitSelect .dijitArrowButton {
-       padding: 0px 2px;
-}
-.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 .dijitMenuItemLabel,
-.soria .dijitSelectMenu .dijitMenuArrowCell {
-       padding: 0.1em 0.2em;
-}
-.soria .dijitTreeNode {
-    background : url(images/treeI.gif) no-repeat;
-    background-position : top left;
-    background-repeat : repeat-y;
-    zoom: 1;   
-}
-.soria .dijitTreeRowHover {
-       
-       background-image: url(images/treeHover.png);
-       background-repeat: repeat;
-       background-color: transparent !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 .dijitTreeRowSelected .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;
-}
-.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;
-}
-.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 .dijitTitlePaneTitleHover {
-       background: #f9f9f9 url(images/accordionItemActive.png) top repeat-x;
-}
-.soria .dijitTitlePaneTitle * {
-       vertical-align: middle;
-}
-.soria .dijitTitlePane .dijitOpen .dijitArrowNode,
-.soria .dijitTitlePane .dijitClosed .dijitArrowNode {
-       width:15px;
-       height:15px;
-}
-.soria .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 .dijitTitlePaneContentOuter {
-       background: #ffffff;
-       border: 1px solid #bfbfbf;
-       border-top: 0px;
-}
-.soria .dijitTitlePaneContentInner {
-       padding:10px;
-}
-.soria .dijitTitlePaneTextNode {
-       margin-left: 4px;
-       margin-right: 4px;
-}
-.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 .dijitCalendarCurrentMonth {
-       
-}
-.soria .dijitCalendarDisabledDate {
-       text-decoration:line-through !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;
-}
-.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;
-}
-.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 .dijitComboButton .dijitButtonContentsHover,
-.soria .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
-       
-       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;
-}
-.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-top: 1px solid #b1badf;
-       padding:10px;
-}
-.soria .dijitDialogTitleBar {
-       
-       background: #fafafa url(images/titleBar.png) repeat-x top left;
-       padding: 5px 6px 3px 6px;
-       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;
-}
-.dj_ie6 .soria .dijitDialogCloseIcon {
-       background-image: url(images/spriteRoundedIconsSmallBl.gif);
-}
-.soria .dijitDialogCloseIconHover {
-       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);
-}
-.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;
-}
-.soria .dijitToolbar .dijitToolbarSeparator {
-       background: url(../../icons/images/editorIconsEnabled.png); 
-}
-.soria .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled.png); 
-       background-repeat: no-repeat;
-       width: 18px;
-       height: 18px;
-       text-align: center;
-}
-.soria .dijitDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled.png); 
-}
-.dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled.png); 
-       background-repeat: no-repeat;
-       width: 18px;
-       height: 18px;
-       text-align: center;
-}
-.dijitDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled.png); 
-}
-.dijitEditorIconSep { background-position: 0px; }
-.dijitEditorIconSave { background-position: -18px; }
-.dijitEditorIconPrint { background-position: -36px; }
-.dijitEditorIconCut { background-position: -54px; }
-.dijitEditorIconCopy { background-position: -72px; }
-.dijitEditorIconPaste { background-position: -90px; }
-.dijitEditorIconDelete { background-position: -108px; }
-.dijitEditorIconCancel { background-position: -126px; }
-.dijitEditorIconUndo { background-position: -144px; }
-.dijitEditorIconRedo { background-position: -162px; }
-.dijitEditorIconSelectAll { background-position: -180px; }
-.dijitEditorIconBold { background-position: -198px; }
-.dijitEditorIconItalic { background-position: -216px; }
-.dijitEditorIconUnderline { background-position: -234px; }
-.dijitEditorIconStrikethrough { background-position: -252px; }
-.dijitEditorIconSuperscript { background-position: -270px; }
-.dijitEditorIconSubscript { background-position: -288px; }
-.dijitEditorIconJustifyCenter { background-position: -306px; }
-.dijitEditorIconJustifyFull { background-position: -324px; }
-.dijitEditorIconJustifyLeft { background-position: -342px; }
-.dijitEditorIconJustifyRight { background-position: -360px; }
-.dijitEditorIconIndent { background-position: -378px; }
-.dijitEditorIconOutdent { background-position: -396px; }
-.dijitEditorIconListBulletIndent { background-position: -414px; }
-.dijitEditorIconListBulletOutdent { background-position: -432px; }
-.dijitEditorIconListNumIndent { background-position: -450px; }
-.dijitEditorIconListNumOutdent { background-position: -468px; }
-.dijitEditorIconTabIndent { background-position: -486px; }
-.dijitEditorIconLeftToRight { background-position: -504px; }
-.dijitEditorIconRightToLeft, .dijitEditorIconToggleDir { background-position: -522px; }
-.dijitEditorIconBackColor { background-position: -540px; }
-.dijitEditorIconForeColor { background-position: -558px; }
-.dijitEditorIconHiliteColor { background-position: -576px; }
-.dijitEditorIconNewPage { background-position: -594px; }
-.dijitEditorIconInsertImage { background-position: -612px; }
-.dijitEditorIconInsertTable { background-position: -630px; }
-.dijitEditorIconSpace { background-position: -648px; }
-.dijitEditorIconInsertHorizontalRule { background-position: -666px; }
-.dijitEditorIconInsertOrderedList { background-position: -684px; }
-.dijitEditorIconInsertUnorderedList { background-position: -702px; }
-.dijitEditorIconCreateLink { background-position: -720px; }
-.dijitEditorIconUnlink { background-position: -738px; }
-.dijitEditorIconViewSource { background-position: -756px; }
-.dijitEditorIconRemoveFormat { background-position: -774px; }
-.dijitEditorIconFullScreen { background-position: -792px; }
-.dijitEditorIconWikiword { background-position: -810px; }
-.dijitColorPalette {
-       border:1px solid #cbcbcb;
-       background:#fff;
-       -moz-border-radius: 0px !important;
-}
+       NOTES:
+       ---
+       Dialog.css contains css classes for both Dialog and Tooltip!
+       This because currently a dijit.TooltipDialog exist. Until this is resolved
+       you need to include Dialog.css for both dijits
+       ---
+       Toolbar.css contains classes also used in Editor. Until this is resolved
+       you need to include Toolbar.css for both Toolbar and Editor
+       ---
+       Button.css contains classes for combobox,
+
+*/
+
+@import url("../dijit.css");
+@import url("../../icons/commonIcons.css");/*sprite containing common icons to be used by all themes*/
+@import url("Common.css");
+@import url("layout/ContentPane.css");
+@import url("layout/TabContainer.css");
+@import url("layout/AccordionContainer.css");
+@import url("layout/SplitContainer.css");
+@import url("layout/BorderContainer.css");
+@import url("form/Common.css");
+@import url("form/Button.css");
+@import url("form/Checkbox.css");
+@import url("form/RadioButton.css");
+@import url("form/Slider.css");
+@import url("form/Select.css");
+@import url("Tree.css");
+@import url("ProgressBar.css");
+@import url("TitlePane.css");
+@import url("Calendar.css");
+@import url("TimePicker.css");
+@import url("Toolbar.css");
+@import url("Dialog.css");
+@import url("Menu.css");
+@import url("Editor.css");
+@import url("../../icons/editorIcons.css"); /* sprite for editor icons to be used by all themes */
+@import url("ColorPalette.css");
\ No newline at end of file
index 97246a28f1ce2ae67751beab82fc43c8c6fabecc..b804011a4186cb6c1226c7873b98e96a6e2ccfb0 100644 (file)
+/*
+       Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
 
-.dijitRtl .dijitPlaceHolder {
-       left: auto;
-       right: 0;
-}
-.dijitMenuItemRtl {
-       text-align: right;
-}
-.dj_iequirks .dijitComboButtonRtl BUTTON {
-       
-       float:left;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitComboBoxRtl .dijitArrowButtonContainer {
-       
-       border-right-width: 1px !important;
-       border-right-style: solid !important;
-       border-left-width: 0px !important;
-       border-left-style: none !important;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
-       border-right: 1px solid black !important;
-       border-left: 0px none black !important;
-}
-.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
-       right: 0;
-       left: auto;
-}
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitArrowButtonContainer {
-       float: left;
-}
-.dijitCalendarRtl .dijitCalendarNextYear {
-       margin:0 0.55em 0 0;
-}
-.dijitCalendarRtl .dijitCalendarPreviousYear {
-       margin:0 0 0 0.55em;
-}
-.dijitSliderRtl .dijitSliderImageHandleV {
-       left:auto;
-}
-.dijitSliderRtl .dijitSliderImageHandleH {
-       left:-50%;
-}
-.dijitSliderRtl .dijitSliderMoveableH {
-       right:auto;
-       left:0;
-}
-.dijitSliderRtl .dijitRuleContainerV {
-       float:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleContainerV {
-       text-align:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelV {
-       text-align:left;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelH {
-       zoom:1;
-}
-.dijitSliderRtl .dijitSliderProgressBarH {
-       
-       float:right;
-       right:0;
-       left:auto;
-}
-.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
-       background-position:right;
-       padding-right:25px;
-}
-.dijitTabRtl .dijitTabCloseButton {
-       margin-left: 0px;
-       margin-right: 1em;
-}
-.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
-       width:100%;
-}
-.dijitColorPaletteRtl .dijitColorPaletteUnder {
-       
-       left: auto;
-       right: 0;
-}
-.dijitSelectRtl .dijitButtonContents {
-       text-align: right;
-}
-.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%;
-}
-.dijitRtl .soria .dijitAccordionArrow {
-       background-position: 0px top;
-}
-.dijitRtl .soria .dijitAccordionTitleSelected .dijitAccordionArrow {
-       
-       background-position: -15px top;
-}
-.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;
-}
-.dijitRtl .soria .dijitComboBox .dijitButtonNode {
-       border-width: 0px 0px 0px 1px;
-}
-.dijitRtl .soria .dijitSelect .dijitButtonContents {
-       border-left: none;
-       border-right-width: 1px;
-}
-.dijitRtl .soria .dijitTreeNode,
-.dijitRtl .soria .dijitTreeExpandoLeaf {
-       
-    background-image: none;
-}
-.dijitRtl .soria .dijitTreeContent {
-    padding-left: 0px;
-    padding-right: 1px;
-}
-.dijitRtl .soria .dijitTreeExpandoOpened {
-       
-       background: url(images/spriteTree_rtl.gif) no-repeat -18px top;
-}
-.dijitRtl .soria .dijitTreeExpandoClosed {
-       
-       background-image: url(images/spriteTree_rtl.gif);
-}
-.dijitRtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
-       background-position: 0px top;
-}
-.dj_ie6-rtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
-       background-position: 0px top;
-}
-.dijitRtl .soria .dijitCalendarDecrease {
-       background-position: -30px top;
-}
-.dijitRtl .soria .dijitCalendarIncrease {
-       background-position: 0px top;
-}
-.dj_ie6-rtl .soria .dijitTimePickerMarkerHover,
-.dj_ie7-rtl .soria .dijitTimePickerMarkerHover {
-        border-top: 0px; 
-}
-.dijitRtl .soria .dijitDialogTitleBar .dijitDialogCloseIcon {
-       right: auto;
-       left: 5px;
-}
-.dijitRtl .soria .dijitMenuItem .dijitMenuItemIcon {
-       padding-left: 3px;
-       padding-right: 0px;
-}
-.dijitRtl .soria .dijitMenuItem .dijitMenuExpand {
-       background-position: left top;
-}
-.dijitRtl .soria .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
-}
-.dijitRtl .soria .dijitDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
-}
-.dijitEditorRtl .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
-}
-.dijitEditorRtlDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
-}
-.dijitToolbarRtl .dijitToolbarSeparator {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
-}
+       NOTES:
+       ---
+       Dialog.css contains css classes for both Dialog and Tooltip!
+       This because currently a dijit.TooltipDialog exist. Until this is resolved
+       you need to include Dialog.css for both dijits
+       ---
+       Toolbar.css contains classes also used in Editor. Until this is resolved
+       you need to include Toolbar.css for both Toolbar and Editor
+       ---
+       Button.css contains classes for combobox,
+
+*/
+
+@import url("../dijit_rtl.css");
+@import url("layout/TabContainer_rtl.css");
+@import url("layout/AccordionContainer_rtl.css");
+@import url("form/Slider_rtl.css");
+@import url("form/Button_rtl.css");
+@import url("Tree_rtl.css");
+@import url("TitlePane_rtl.css");
+@import url("Calendar_rtl.css");
+@import url("TimePicker_rtl.css");
+@import url("Dialog_rtl.css");
+@import url("Menu_rtl.css");
+@import url("Editor_rtl.css");
+@import url("../../icons/editorIcons_rtl.css"); /*sprite for editor icons to be used by all themes*/
\ No newline at end of file
index 19d8bf76ae7326751af2e0f42b028fb262121c2c..5fef68ee1ac8ea4dfd5810ee7bacbfca5dfbf835 100644 (file)
@@ -1,6 +1,7 @@
+/* Calendar*/
 
 .tundra .dijitCalendarIncrementControl {
-       
+       /* next/prev month buttons */
        width:15px;
        height:15px;
        background-image: url("images/spriteRoundedIconsSmall.png");
        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 .dijitCalendarContainer {
        font-size: 100%;
        border-spacing: 0;
@@ -26,8 +30,9 @@
        border: 1px solid #ccc;
        margin: 0;
 }
+
 .tundra .dijitCalendarMonthContainer th {
-       
+       /* month header cell */
        background:#d3d3d3 url("images/titleBar.png") repeat-x top;
        padding-top:.3em;
        padding-bottom:.2em;
        padding-top:.2em;
        padding-bottom:.1em;
 }
+
 .tundra .dijitCalendarDayLabelTemplate {
-       
+       /* day of week labels */
        background:white url("images/calendarDayLabel.png") repeat-x bottom;
        font-weight:normal;
        padding-top:.15em;
-       padding-bottom:0em;
+       padding-bottom:0;
        border-top: 1px solid #eeeeee;
        color:#293a4b;
        text-align:center;
 }
+
 .tundra .dijitCalendarBodyContainer {
        border-bottom: 1px solid #eeeeee;
 }
+
 .tundra .dijitCalendarMonthLabel {
        color:#293a4b;
        font-weight: bold;
+       padding: 0 4px;
 }
+
 .tundra .dijitCalendarDateTemplate {
-       
+       /* style for each day cell */
        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                {
-       
+       /* days that are part of the previous or next month */
        color:#999999;
        background-color:#f8f8f8;
 }
+
 .tundra .dijitCalendarCurrentMonth {
-       
+       /* days that are part of this month */
        background-color: white;
 }
+
 .tundra .dijitCalendarCurrentDate {
-       
+       /* cell for today's date */
        text-decoration:underline;
        font-weight:bold;
 }
+
 .tundra .dijitCalendarHoveredDate {
        background-color: #e2ebf2;
 }
+
 .tundra .dijitCalendarDisabledDate {
        text-decoration: line-through;
-       background-color: white;        
+       background-color: white;        /* override hover effects above, hover and click on disabled date should have no effect */
 }
+
 .tundra .dijitCalendarSelectedDate {
-       
+       /* cell for the selected date */
        background-color:#bbc4d0 !important;
        color:black !important;
 }
 .tundra .dijitCalendarYearContainer {
-       
+       /* footer of the table that contains the year display/selector */
        background:white url("images/calendarYearLabel.png") repeat-x bottom;
        border-top:1px solid #ccc;
 }
+
 .tundra .dijitCalendarYearLabel {
-       
+       /* container for all of 3 year labels */
        margin:0;
        padding:0.4em 0 0.25em 0;
        text-align:center;
 }
+
 .tundra .dijitCalendarSelectedYear {
-       
+       /* label for selected year */
        color:black;
        padding:0.2em;
        padding-bottom:0.1em;
        background-color:#bbc4d0 !important;
 }
+
 .tundra .dijitCalendarNextYear,
 .tundra .dijitCalendarPreviousYear {
-       
+       /* label for next/prev years */
        color:black !important;
        font-weight:normal;
 }
+
+/* Styling for month DropDownButton */
+
+.tundra .dijitCalendar .dijitDropDownButton {
+       margin: 0;
+}
+.tundra .dijitCalendar .dijitButtonText {
+       padding: 0;
+}
+.tundra .dijitCalendar .dijitDropDownButton .dijitButtonNode {
+       background-color: transparent;
+       background-image: none;
+       padding: 0;
+}
+
+/* Styling for month drop down list */
+
+.tundra .dijitCalendarMonthMenu .dijitCalendarMonthLabelHover {
+       background-color: #3559ac;
+       color:#fff;
+}
\ No newline at end of file
index 9144dcfeb9fde4f86bf760f5e93dd7b487a5d729..fbfe27b5d84c8202fcb41b2df33260412c2a0ff1 100644 (file)
@@ -1,7 +1,9 @@
+/* Calendar */
 
 .tundra .dijitCalendarRtl .dijitCalendarDecrease {
        background-position: -30px top;
 }
+
 .tundra .dijitCalendarRtl .dijitCalendarIncrease {
-       background-position: 0px top;
+       background-position: 0 top;
 }
index 56fa5585a29f8eb2142185049934fd42a19b6f51..38088b84516eb28ca0ce388d360c1afb03e6c928 100644 (file)
@@ -1,5 +1,5 @@
 .dijitColorPalette {
        border:1px solid #7eabcd;
        background:#fff;
-       -moz-border-radius: 0px !important;
-}
+       -moz-border-radius: 0 !important;
+}
\ No newline at end of file
index b7f8ace858d94cb2b5fd6abceb55865c8819ef58..c339263e18ffc052e7f249750a6718f81fc0cb86 100644 (file)
@@ -1,13 +1,17 @@
-
+/* DnD avatar-specific settings */
+/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */
 .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.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;
index 74d3d36ef2f5c80f84a4b61e602be0f2274d1752..b346f62672f9cdba1617f2babfa3ed3060533f23 100644 (file)
@@ -1,29 +1,35 @@
+/* Dialog and Tooltip/TooltipDialog */
 
 .tundra .dijitDialog {
        background: #fff;
        border: 1px solid #7eabcd;
-       padding: 0px;
-       -webkit-box-shadow: 0px 5px 10px #adadad;
+       padding: 0;
+       -webkit-box-shadow: 0 5px 10px #adadad;
 }
+
 .tundra .dijitDialogPaneContent {
        background: #fff;
        border-top: 1px solid #d3d3d3;
        padding:10px;
+
 }
+
 .tundra .dijitDialogTitleBar {
-       
+       /* outer container for the titlebar of the dialog */
        background: #fafafa url("images/titleBar.png") repeat-x top left;
        padding: 5px 6px 3px 6px;
-       outline:0; 
+       outline:0; /* remove this line if keyboard focus on dialog startup is an issue. tab still takes you to first focusable element */
 }
+
 .tundra .dijitDialogTitle {
-       
+       /* typography and styling of the dialog title */
        font-weight: bold;
-       padding: 0px 4px;
+       padding: 0 4px;
 }
+
 .tundra .dijitDialogCloseIcon {
-       
-       
+       /* the default close icon for the dialog */
+       /* background : url("images/spriteRoundedIconsSmall.png") no-repeat right top; */
        background: url("images/tabClose.png") no-repeat right top;
        position: absolute;
        vertical-align: middle;
 .dj_ie6 .tundra .dijitDialogCloseIcon {
        background : url("images/tabClose.gif") no-repeat right top;
 }
+
 .tundra .dijitDialogCloseIconHover {
        background: url("images/tabCloseHover.png") no-repeat right top;
 }
 .dj_ie6 .tundra .dijitDialogCloseIconHover {
        background : url("images/tabCloseHover.gif") no-repeat right top;
 }
+
+/* Tooltip and TooltipDialog */
+
 .tundra .dijitTooltip,
 .tundra .dijitTooltipDialog {
-       
-       background: transparent;        
+       /* the outermost dom node, holding the connector and container */
+       background: transparent;        /* make the area on the sides of the arrow transparent */
 }
+
 .dijitTooltipBelow {
-       
+       /* leave room for arrow above content */
        padding-top: 13px;
 }
+
 .dijitTooltipAbove {
-       
+       /* leave room for arrow below content */
        padding-bottom: 13px;
 }
+
 .tundra .dijitTooltipContainer {
-       
+       /*
+               The part with the text.
+       */
        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;
+       /* the arrow piece */
+       border:0;
        z-index: 2;
 }
 .tundra .dijitTooltipABRight .dijitTooltipConnector {
-       
+       /* above or below tooltip, but the arrow appears on the right,
+               and the right edges of target and tooltip are aligned rather than the left */
        left: auto !important;
        right: 3px;
 }
+
 .tundra .dijitTooltipBelow .dijitTooltipConnector {
-       
-       top: 0px;
+       /* the arrow piece for tooltips below an element */
+       top: 0;
        left: 3px;
        background:url("images/tooltipConnectorUp.png") no-repeat top left;
        width:16px;
        height:14px;
 }
+
 .dj_ie .tundra .dijitTooltipBelow .dijitTooltipConnector {
-       
+       /* use gif for IE7 too, due to png rendering problems on fade-in (see http://trac.dojotoolkit.org/ticket/6555) */
        background-image: url("images/tooltipConnectorUp.gif");
 }
+
 .tundra .dijitTooltipAbove .dijitTooltipConnector {
-       
-       bottom: 0px;
+       /* the arrow piece for tooltips above an element */
+       bottom: 0;
        left: 3px;
        background:url("images/tooltipConnectorDown.png") no-repeat top left;
        width:16px;
 .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;
+       /* the arrow piece for tooltips to the left of an element, bottom borders aligned */
+       right: 0;
        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;
+       /* the arrow piece for tooltips to the right of an element, bottom borders aligned */
+       left: 0;
        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 .dijitTooltipContainer {
-       -webkit-box-shadow: 0px 5px 10px #adadad;
+       -webkit-box-shadow: 0 5px 10px #adadad;
 }
index faeaa4139566cf3d52a2228e796b225a7cd588cc..9337680aa5a84ecfb22774d81ee95883bd51a046 100644 (file)
@@ -1,4 +1,4 @@
-
+/* Dialog */
 .tundra .dijitDialogRtl .dijitDialogCloseIcon {
        right: auto;
        left: 5px;
index d24de9557fcaa1481ce34df47a6447ff190cc9e0..b6f07a1f79a90df783c8efc3c6a0d7f7958098bd 100644 (file)
@@ -2,13 +2,15 @@
        border:1px solid #bfbfbf;
        border-top:0;
 }
+
 .tundra .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsEnabled.png'); 
+       background-image: url('../../icons/images/editorIconsEnabled.png'); /* editor icons sprite image - enabled state */
        background-repeat: no-repeat;
        width: 18px;
        height: 18px;
        text-align: center;
 }
 .tundra .dijitDisabled .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsDisabled.png'); 
+       background-image: url('../../icons/images/editorIconsDisabled.png'); /* editor icons sprite image - disabled state */
 }
+
index 888c0335a0956fb965108b7cb11e8d3e68837507..cd4849e7f85db651126e291a503863066eab277c 100644 (file)
@@ -1,7 +1,7 @@
-
+/* Editor */
 .tundra .dijitEditorRtl .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsEnabled_rtl.png'); 
+       background-image: url('../../icons/images/editorIconsEnabled_rtl.png'); /* editor icons sprite image - enabled state */
 }
 .tundra .dijitEditorRtlDisabled .dijitEditorIcon {
-       background-image: url('../../icons/images/editorIconsDisabled_rtl.png'); 
+       background-image: url('../../icons/images/editorIconsDisabled_rtl.png'); /* editor icons sprite image - disabled state  */
 }
index ca11988648862bc7008a99e624a5c093648e0d5c..6229b1773d2fe5bd4966eadbb98cc15467d88472 100644 (file)
@@ -1,61 +1,76 @@
 .tundra .dijitMenu,
 .tundra .dijitMenuBar {
        border: 1px solid #7eabcd;
-       margin: 0px;
-       padding: 0px;
+       margin: 0;
+       padding: 0;
        background-color: #f7f7f7;
 }
+
 .tundra .dijitBorderContainer .dijitMenuBar {
        border:1px solid #ccc;
 }
+
 .tundra .dijitMenuItem {
        font-family: sans-serif;
        margin: 0;
 }
+
 .tundra .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 {
-       
+       /* arrow to indicate this MenuItem opens a sub-menu */
        width: 7px;
        height: 7px;
        background-image: url('images/spriteArrows.png');
-       background-position: -14px 0px;
+       background-position: -14px 0;
 }
 .dj_ie6 .tundra .dijitMenuExpand {
        background-image: url('images/spriteArrows.gif');
 }
+
+/* separator can be two pixels -- set border of either one to 0 to have only one */
 .tundra .dijitMenuSeparatorTop {
        border-bottom: 1px solid #9b9b9b;
 }
+
 .tundra .dijitMenuSeparatorBottom {
        border-top: 1px solid #e8e8e8;
 }
+
+/* the checked menu item */
 .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;
-}
+}
\ No newline at end of file
index 7f0a58ae3041a0192ebe10d95eef0f79630e77ce..f14859297faab8c54e0f0dc1d85f6b14c9202d1b 100644 (file)
@@ -1,3 +1,3 @@
 .tundra .dijitMenuItemRtl .dijitMenuExpand {
-       background-position: -7px 0px;
-}
+       background-position: -7px 0;
+}
\ No newline at end of file
index 3f555c42bac97c3e369304c17d94f5d021740c36..2d70e28d496889bbc332bd4603ef23968bf0967f 100644 (file)
@@ -1,23 +1,28 @@
 .tundra .dijitProgressBar {
-       margin:2px 0px 2px 0px;
+       margin:2px 0 2px 0;
 }
+
 .tundra .dijitProgressBarEmpty {
-       
+       /* outer container and background of the bar that's not finished yet*/
        background:#fff url("images/progressBarEmpty.png") repeat-x center center;
        border-color: #a2a2a2 #b8b8b8 #b8b8b8 #a2a2a2;
 }
+
 .tundra .dijitProgressBarTile {
-       
+       /* inner container for finished portion when in 'tile' (image) mode */
        background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
 }
+
 .tundra .dijitProgressBarFull {
        border-right:1px solid #b8b8b8;
 }
+
 .tundra .dijitProgressBarLabel {
-       
+       /* Set to a color that contrasts with both the "Empty" and "Full" parts. */
        color:#293a4b;
 }
+
 .tundra .dijitProgressBarIndeterminate .dijitProgressBarTile {
-       
+       /* use an animated gif for the progress bar in 'indeterminate' mode */
        background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
 }
index 5811ad66571b009a286601c79370b06e1e1cb158..13dc7f80c815a72e65d1fab1754a5d22c6eb429e 100644 (file)
@@ -1,42 +1,52 @@
-
+/* Time Picker */
 .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;
 }
+
index 9856007782420772ffd7697c1641b67947085e1b..7a4d5e58ca1a8f074489b2e8d6e71a767aa52d7c 100644 (file)
@@ -1,4 +1,4 @@
  .dj_ie6 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover,
 .dj_ie7 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover {
-        border-top: 0px; 
+        border-top: 0; /* IE6/7 bug causes mouseover/out event storm */
 }
index 265de718c83c2d579d39dabcd83eacc389225ad5..e964bf8a83b29b9ea7e0af879807a89697766b53 100644 (file)
@@ -7,28 +7,32 @@
 .tundra .dijitTitlePaneTitleHover  {
        background: #f8fafd url("images/accordionItemHover.gif") bottom repeat-x;
 }
+
 .tundra .dijitTitlePane .dijitArrowNode {
        background-image: url('images/spriteArrows.png');
        background-repeat: no-repeat;
-       background-position: 0px 0px;
+       background-position: 0 0;
        height: 7px;
        width: 7px;
 }
 .dj_ie6 .tundra .dijitTitlePane .dijitArrowNode {
        background-image: url('images/spriteArrows.gif');
 }
+
 .tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
-       background-position: -14px 0px;
+       background-position: -14px 0;
 }
+
 .tundra .dijitTitlePaneContentOuter {
        background: #ffffff;
        border:1px solid #bfbfbf;
-       border-top: 0px;
+       border-top: 0;
 }
 .tundra .dijitTitlePaneContentInner {
        padding:10px;
 }
+
 .tundra .dijitTitlePaneTextNode {
        margin-left: 4px;
        margin-right: 4px;
-}
+}
\ No newline at end of file
index f3d2b91a3212a97f9a5530332f37bd0f2cf18b96..5f63a03d935ffbc23a4166e6cfc622674b1ec807 100644 (file)
@@ -1,3 +1,3 @@
 .tundra .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
-       background-position: -7px 0px;
-}
+       background-position: -7px 0;
+}
\ No newline at end of file
index 0f489fa85f654f5ca116e4d77d5cc0865f0c6ed6..ebe9cdae4b1bcadcebf9e1d4c1e17b438ae50f85 100644 (file)
@@ -2,18 +2,22 @@
        border-bottom: 1px solid #ccc;
        background:#eaeaea url("images/titleBar.png") repeat-x top left;
 }
+
+/* setting a min-height on ditor toolbar */
 .dj_ie6 .tundra .dijitToolbar {
        height: 10px;
 }
+
 .tundra .dijitToolbar .dijitButtonNode,
 .tundra .dijitToolbar .dijitComboButton .dijitButtonContents,
 .tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton {
        background: none;
-       margin: 0px;
-       padding: 0px;
+       margin: 0;
+       padding: 0;
        border: none;
        font-size: 12px;
 }
+
 .tundra .dijitToolbar .dijitButton,
 .tundra .dijitToolbar .dijitToggleButton,
 .tundra .dijitToolbar .dijitDropDownButton,
        background: none;
        padding: 1px;
 }
+
 .tundra .dijitToolbar .dijitButtonChecked,
 .tundra .dijitToolbar .dijitToggleButtonChecked {
        background-color:#d4dff2;
        border:1px solid #316ac5;
-       padding: 0px;   
+       padding: 0;     /* reduce padding to compensate for space taken by border */
 }
+
 .tundra .dijitToolbar .dijitButtonCheckedHover,
 .tundra .dijitToolbar .dijitToggleButtonCheckedHover
  {
        background-color:#abc1e5;
        border:1px solid #316ac5;
-       padding: 0px;   
+       padding: 0;     /* reduce padding to compensate for space taken by border */
 }
+
 .tundra .dijitToolbar .dijitButtonHover,
 .tundra .dijitToolbar .dijitToggleButtonHover,
 .tundra .dijitToolbar .dijitDropDownButtonHover,
 .tundra .dijitToolbar .dijitComboButton .dijitButtonContentsHover,
 .tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
-       
+       /* TODO: change this from Hover to Selected so that button is still highlighted while drop down is being used */
        border: 1px solid #869cbf;
-       padding: 0px;   
+       padding: 0;     /* reduce padding to compensate for space taken by border */
        background-color:#e1e5f0;
 }
+
 .tundra .dijitToolbar label {
        padding: 3px 3px 0 6px;
 }
+
 .dj_ie .tundra .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
 .dj_ie .tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
-       
+       /* focus border doesn't appear on <td> for IE, so need to add it manually */
        border: 1px #555 dotted !important;
-       padding: 0px;
+       padding: 0;
 }
+
 .tundra .dijitToolbarSeparator {
-       
+       /* separator icon in the editor sprite */
        background: url('../../icons/images/editorIconsEnabled.png');
 }
+
 .tundra .dijitToolbarRtl .dijitToolbarSeparator {
-       
+       /* separator icon in the editor sprite */
        background-image: url('../../icons/images/editorIconsDisabled.png');
 }
index 5ba1c8804b791c925a6e1e9cc1456cf36ba255b3..76c81e0b1a5a742f952aea729623b08ee866c06d 100644 (file)
@@ -1,72 +1,96 @@
+/* Tree */
 
 .tundra .dijitTreeNode {
     background-image : url('images/i.gif');
     background-repeat : repeat-y;
-    zoom: 1;   
+    zoom: 1;   /* force layout on IE (TODO: may not be needed anymore) */
 }
+
+/* left vertical line (grid) for all nodes */
 .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 {
-       
+       /* so insert line shows up on IE when dropping after a target element */
        padding-bottom: 2px;
 }
+
 .tundra .dijitTreeContent {
     min-height: 18px;
     min-width: 18px;
 }
+
 .tundra .dijitTreeRowSelected .dijitTreeLabel {
        background:#e2ebfe;
 }
 .tundra .dijitTreeRowHover {
-       
+       /* using a transparent png so that we can still see grid lines, which are (unfortunately) behind the dijitRowNode that we are hovering over */
        background-image: url(images/treeHover.png);
        background-repeat: repeat;
        background-color: transparent !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;
 }
+
+/* Drag and Drop on TreeNodes
+ * Put insert line on dijitTreeContent node so it's aligned w/
+ * (ie, indented equally with) target element, even
+ * though dijitTreeRowNode is the actual "drag object"
+ */
 .tundra .dijitTreeNode .dojoDndItemBefore,
 .tundra .dijitTreeNode .dojoDndItemAfter {
        border-bottom: none;
        border-top: none;
 }
+
 .tundra .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
-       
+       /* copied from Common.css */
        border-top: 2px solid #369;
 }
+
 .tundra .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
-       
+       /* copied from Common.css */
        border-bottom: 2px solid #369;
 }
index 6a9d93186b641efbbe72b5f3f2957bf31976b723..607b71ce8b35e0ab9b9a7c50f778f8787ec4a894 100644 (file)
@@ -1,13 +1,17 @@
+/* Tree */
 
 .tundra .dijitTreeNodeRtl,
 .tundra .dijitTreeNodeRtl .dijitTreeExpandoLeaf {
-       
+       /* disable grid lines in RTL mode; too hard to support */
     background-image: none;
 }
+
 .tundra .dijitTreeNodeRtl .dijitTreeExpandoOpened {
-       
+       /* todo: get rid of transparent space in icon files,
+               and just use background-placement (or margin maybe) to get desired alignment */
        background-image: url('images/treeExpand_minus_rtl.gif');
 }
+
 .tundra .dijitTreeNodeRtl .dijitTreeExpandoClosed {
        background-image: url('images/treeExpand_plus_rtl.gif');
 }
index d9d103fc146ddb1b47264e24f946209663401d30..2c68aef04009877276fcbb986d7c981ecaddef76 100644 (file)
@@ -1,6 +1,14 @@
 
+/*****
+               dijit.form.Button
+               dijit.form.DropDownButton
+               dijit.form.ComboButton
+               dijit.form.ComboBox (partial)
+               dijit.form.Spinner (partial) (TODO: create NumberSpinner.css file like claro has)
+ *****/
+
 .tundra .dijitButtonNode {
-       
+       /* enabled state - inner */
        border: 1px solid #c0c0c0;
        border-bottom: 1px solid #9b9b9b;
        padding: 0.1em 0.2em 0.2em 0.2em;
        text-align: center;
        padding: 0 0.3em;
 }
+
 .tundra .dijitDisabled .dijitButtonText {
        color: #7F7F7F;
 }
+
 .tundra .dijitArrowButton {
        color: #111;
 }
+
 .tundra .dijitComboButton .dijitDownArrowButton {
        padding-right:4px;
 }
+
 .tundra .dijitTextBoxReadOnly,
 .tundra .dijitTextBoxReadOnly .dijitButtonNode,
 .tundra .dijitButtonDisabled .dijitButtonNode,
 .tundra .dijitComboButtonDisabled .dijitButtonNode,
 .tundra .dijitTextBoxDisabled,
 .tundra .dijitTextBoxDisabled .dijitButtonNode {
-       
+       /* disabled state - inner */
        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 .dijitComboButton .dijitButtonContentsHover,
 .tundra .dijitComboButton .dijitDownArrowButtonHover {
-       
-       
+       /* hover state - inner */
+       /* TODO: change from Hover to Selected so that button is still highlighted while drop down is being used */
        border-color: #a5beda;
        border-bottom-color:#5c7590;
        color:#243C5F;
 }
 .tundra .dijitDownArrowButtonHover,
 .tundra .dijitUpArrowButtonHover {
-       
+       /* same as above except don't adjust border color (it's controlled by the containing Spinner/ComboBox) */
        color:#243C5F;
        background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;
 }
+
 .tundra .dijitUpArrowButtonActive,
 .tundra .dijitDownArrowButtonActive,
 .tundra .dijitButtonActive .dijitButtonNode,
 .tundra .dijitDropDownButtonActive .dijitButtonNode,
 .tundra .dijitButtonContentsActive,
 .tundra .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
-       
+       /* active state - inner (for when you are pressing a normal button, or
+        * when a radio-type button is in a depressed state
+        */
        border-color:#366dba;
        background: #ededed url("../images/buttonActive.png") bottom repeat-x;
 }
+
 .tundra .dijitArrowButtonInner {
-       background:url("../images/spriteArrows.png") no-repeat scroll 0px center;
+       background:url("../images/spriteArrows.png") no-repeat scroll 0 center;
        width: 7px;
        height: 7px;
-       margin: 0px 4px 0px 4px;
+       margin: 0 4px 0 4px;
 }
 .tundra .dijitTextBox .dijitArrowButtonInner {
        background-position: 0 center;
@@ -82,6 +99,7 @@
 .tundra .dijitUpArrowButton .dijitArrowButtonInner {
        background-position: -21px center;
 }
+
 .tundra .dijitDisabled .dijitArrowButtonInner {
        background-position: -28px center;
 }
        background-position: -49px center;
 }
 .dj_webkit .tundra .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
-       margin-top: -1px; 
+       margin-top: -1px; /* image has too many blank pixels on top */
 }
 .dj_ie .tundra .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
-       margin-top: -2px; 
+       margin-top: -2px; /* image has too many blank pixels on top */
 }
 .dj_ie8 .tundra .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
-       margin-top: -1px; 
+       margin-top: -1px; /* image has too many blank pixels on top */
 }
 .tundra .dijitSpinnerButtonContainer {
        width: auto;
index e7ff2f945d091c649b0aba5b4462c78e331928be..28a7d79c9314475e26cf7d44339cd66797bdce13 100644 (file)
@@ -1,45 +1,54 @@
 .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'); 
+.tundra .dijitCheckBoxIcon             /* inside a toggle button */    {
+       background-image: url('../images/checkmark.png'); /* checkbox sprite image */
        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'); 
+.dj_ie6 .tundra .dijitCheckBoxIcon             /* inside a toggle button */    {
+       background-image: url('../images/checkmark.gif'); /* checkbox sprite image */
 }
+
 .tundra .dijitCheckBox,
 .tundra .dijitToggleButton .dijitCheckBoxIcon {
-       
+       /* unchecked */
        background-position: -16px;
 }
+
 .tundra .dijitCheckBoxChecked,
 .tundra .dijitToggleButtonChecked .dijitCheckBoxIcon {
-       
-       background-position: 0px;
+       /* checked */
+       background-position: 0;
 }
+
 .tundra .dijitCheckBoxDisabled {
-       
+       /* disabled */
        background-position: -48px;
 }
+
 .tundra .dijitCheckBoxCheckedDisabled {
-       
+       /* disabled but checked */
        background-position: -32px;
 }
+
 .tundra .dijitCheckBoxHover {
-       
+       /* hovering over an unchecked enabled checkbox */
        background-position: -80px;
 }
+
 .tundra .dijitCheckBoxCheckedHover {
-       
+       /* hovering over a checked enabled checkbox */
        background-position: -64px;
 }
index 999eb22eebecc3f7e621e53a1499fe467be1ad7e..20136863973a86fc658336a297e9647c35a7fb92 100644 (file)
@@ -1,48 +1,76 @@
 
+/****
+               dijit.form.TextBox
+               dijit.form.ValidationTextBox
+               dijit.form.SerializableTextBox
+               dijit.form.RangeBoundTextBox
+               dijit.form.NumberTextBox
+               dijit.form.CurrencyTextBox
+               dijit.form.NumberSpinner
+               dijit.form.ComboBox (partial)
+ ****/
+
 .tundra .dijitInputContainer INPUT,
 .tundra .dijitTextBox {
-       margin: 0em 0.1em;
+       margin: 0 0.1em;
 }
+
 .tundra .dijitTextArea {
        padding: 3px;
 }
+
 .tundra .dijitTextBox {
-       
+       /*      For all except dijit.form.NumberSpinner:  the actual input element.
+               For TextBox, ComboBox, Spinner: the div that contains the input.
+               Otherwise the actual input element.
+       */
        background:#fff url("../images/validationInputBg.png") repeat-x top left;
        #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
        border:1px solid #b3b3b3;
 }
+
+/* ComboBox specific rules*/
 .tundra .dijitComboBox .dijitButtonNode {
        padding: 0 0.2em;
 }
 .tundra .dijitTextBox .dijitButtonNode {
-       
+       /* line between the input area and the drop down button, and also between
+        * the up and down buttons of a spinner
+        */
        border-color: #9b9b9b;
 }
+
 .tundra .dijitTextBoxFocused {
-       
+       /* input field when focused (ie: typing affects it) */
        border-color:#406b9b;
 }
 .tundra .dijitTextBoxFocused .dijitButtonNode {
        border-color:#366dba;
 }
+
 .tundra .dijitError {
        background-color:#f9f7ba;
        background-image:none;
 }
+
 .tundra .dijitErrorFocused {
        background-color:#f9f999;
        background-image:none;
 }
+
+/* Validation errors  */
 .tundra .dijitValidationIcon {
-       
+       /* prevent height change when widget goes from valid to invalid state */
        width: 16px;
        background: transparent url('../images/warning.png') no-repeat center center;
 }
+
+/* The highlight is shown in the ComboBox menu. */
 .tundra .dijitComboBoxHighlightMatch {
        background-color:#a5beda;
 }
+
 .tundra .dijitFocusedLabel {
-       
+       /* for checkboxes or radio buttons, hatch border around the corresponding label, to indicate focus */
        outline: 1px dotted #666666;
 }
index 3044d0edb25f03ade82851c159c6b1847d487dfc..4dfc0fa6d0815b4c22c345381773c7090ed7faff 100644 (file)
@@ -1,7 +1,7 @@
 
-.tundra .dijitRadio,                   
-.tundra .dijitRadioIcon        {               
-       background-image: url('../images/checkmark.png'); 
+.tundra .dijitRadio,                   /* stand alone */
+.tundra .dijitRadioIcon        {               /* inside a toggle button */
+       background-image: url('../images/checkmark.png'); /* checkbox sprite image */
        background-repeat: no-repeat;
        width: 16px;
        height: 16px;
 }
 .dj_ie6 .tundra .dijitRadio,
 .dj_ie6 .tundra .dijitRadioIcon        {
-       background-image: url('../images/checkmark.gif'); 
+       background-image: url('../images/checkmark.gif'); /* checkbox sprite image */
 }
+
 .tundra .dijitToggleButton .dijitRadioIcon {
-       
+       /* for checkbox in a toggle button, override above setting to have no border */
        background-image: url('../images/checkmarkNoBorder.png');
 }
 .dj_ie6 .tundra .dijitToggleButton .dijitRadioIcon {
        background-image: url('../images/checkmarkNoBorder.gif');
 }
+
 .tundra .dijitRadio,
 .tundra .dijitRadioIcon {
-       
+       /* unselected */
        background-position: -112px;
 }
+
 .tundra .dijitRadioDisabled {
-       
+       /* unselected and disabled */
        background-position: -144px;
 }
+
 .tundra .dijitRadioHover {
-       
+       /* hovering over an unselected enabled radio button */
        background-position: -176px;
 }
+
 .tundra .dijitRadioChecked,
 .tundra .dijitRadioCheckedHover,
 .tundra .dijitToggleButtonChecked .dijitRadioIcon {
-       
+       /* selected.  Since clicking a selected radio button doesn't change anything, there's
+        * no hover effect on selected radio buttons.
+        */
        background-position: -96px;
 }
+
 .tundra .dijitRadioCheckedDisabled {
-       
+       /* selected but disabled */
        background-position: -128px;
 }
index 072b1204ac4ba236dac3e420ce33c581c13c5900..b0290167a27b464919d2af6d90656d4b3b9b10c9 100644 (file)
@@ -1,9 +1,11 @@
 .tundra .dijitSelect .dijitButtonNode {
-       padding: 0px;
+       padding: 0;
 }
 .tundra .dijitSelect .dijitButtonNode .dijitArrowButtonInner {
-       margin: 0px 4px 0px 5px;
+       margin: 0 4px 0 5px;
 }
+
+/* Make unselected content portion "look" more like a text box and less like a button */
 .tundra .dijitSelect .dijitButtonContents {
        padding-top: 1px;
        background:#fff url("../images/validationInputBg.png") repeat-x top left;
        background: transparent none;
 }
 .dj_ie .tundra .dijitSelect .dijitButtonContents {
-       padding-top: 0px;
+       padding-top: 0;
 }
+
+/* Mirror DropDownButton */
 .tundra .dijitSelectDisabled .dijitButtonNode {
        border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
        background:#e4e4e4 url("../images/buttonDisabled.png") top repeat-x;
@@ -26,6 +30,7 @@
 .dj_ie .tundra .dijitSelectDisabled  .dijitButtonNode * {
        filter: gray() alpha(opacity=50);
 }
+
 .tundra .dijitSelectHover .dijitButtonNode {
        border-color:#a5beda;
        border-bottom-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;
 }
+
+/* Make the menu look more combobox-like */
 .tundra .dijitSelectMenu td {
-       padding: 0em;
+       padding: 0;
 }
 .tundra .dijitSelectMenu .dijitMenuItemLabel,
 .tundra .dijitSelectMenu .dijitMenuArrowCell {
        padding: 0.1em 0.2em;
 }
+
+
index b2c2b69f85cc3181a1f9ab7c9cde4fe77805a682..7465e8377172b6fd9b202cad0590ccfe6874a57c 100644 (file)
@@ -2,26 +2,32 @@
        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;
@@ -29,8 +35,9 @@
 .tundra .dijitSliderFocused .dijitSliderBar {
        border-color:#888;
 }
+
 .tundra .dijitSliderImageHandleH {
-       border:0px;
+       border:0;
        width:16px;
        height:16px;
        background:url("../images/preciseSliderThumb.png") no-repeat center top;
        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;
+       border:0;
        width:16px;
        height:16px;
        background:url("../images/sliderThumb.png") no-repeat center center;
 }
+
 .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,
 .dj_ie6 .tundra .dijitSliderIncrementIconV {
        background-image: url('../images/spriteArrows.gif');
 }
+
 .tundra .dijitSliderDecrementIconH {
-       background-position: -7px 0px;
+       background-position: -7px 0;
 }
 .tundra .dijitSliderIncrementIconH {
-       background-position: -14px 0px;
+       background-position: -14px 0;
 }
 .tundra .dijitSliderDecrementIconV {
-       background-position: 0px 0px;
+       background-position: 0 0;
 }
 .tundra .dijitSliderIncrementIconV {
-       background-position: -21px 0px;
+       background-position: -21px 0;
 }
+
 .tundra .dijitSliderButtonInner {
        visibility:hidden;
 }
+
 .tundra .dijitSliderReadOnly *,
 .tundra .dijitSliderDisabled * {
        border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
 }
 .tundra .dijitSliderReadOnly .dijitSliderDecrementIconH,
 .tundra .dijitSliderDisabled .dijitSliderDecrementIconH {
-       background-position: -35px 0px;
+       background-position: -35px 0;
 }
 .tundra .dijitSliderReadOnly .dijitSliderIncrementIconH,
 .tundra .dijitSliderDisabled .dijitSliderIncrementIconH {
-       background-position: -42px 0px;
+       background-position: -42px 0;
 }
 .tundra .dijitSliderReadOnly .dijitSliderDecrementIconV,
 .tundra .dijitSliderDisabled .dijitSliderDecrementIconV {
-       background-position: -28px 0px;
+       background-position: -28px 0;
 }
 .tundra .dijitSliderReadOnly .dijitSliderIncrementIconV,
 .tundra .dijitSliderDisabled .dijitSliderIncrementIconV {
-       background-position: -49px 0px;
-}
+       background-position: -49px 0;
+}
\ No newline at end of file
index 979eed651c0a934c6d2945a9d68558e3d59ed21c..9375c4ecb3e0d7838585fd574a69740c3f0520c1 100644 (file)
@@ -5,22 +5,27 @@
 .tundra .dijitSliderRtl .dijitSliderTopBumper {
        background-position: top right;
 }
+
 .tundra .dijitSliderRtl .dijitSliderProgressBarV,
 .tundra .dijitSliderRtl .dijitSliderRemainingBarV,
 .tundra .dijitSliderRtl .dijitSliderBottomBumper {
        background-position: bottom right;
 }
+
 .tundra .dijitSliderRtl .dijitSliderLeftBumper {
-       border-left-width: 0px;
+       border-left-width: 0;
        border-right-width: 1px;
 }
+
 .tundra .dijitSliderRtl .dijitSliderRightBumper {
        border-left-width: 1px;
-       border-right-width: 0px;
+       border-right-width: 0;
 }
+
 .tundra .dijitSliderRtl .dijitSliderIncrementIconH {
-       background-position: -7px 0px;
+       background-position: -7px 0;
 }
+
 .tundra .dijitSliderRtl .dijitSliderDecrementIconH {
-       background-position: -14px 0px;
+       background-position: -14px 0;
 }
index 6479956e663db9e59839c656489fee39090beb48..c5621efab25a40f0e6e832734da24b283a1e1528 100644 (file)
@@ -1,20 +1,26 @@
+/* Accordion */
 
 .tundra .dijitAccordionContainer {
        border-color: #ccc;
        background-color: #fff;
 }
+
+/* common */
+
 .tundra .dijitAccordionTitle {
        background:#fafafa url("../images/titleBar.png") repeat-x bottom left;
        border-top: 1px solid #bfbfbf;
        padding: 4px 4px 4px 8px;
 }
+
 .tundra .dijitAccordionTitleHover  {
        background: #f8fafd url("../images/accordionItemHover.gif") bottom repeat-x;
 }
+
 .tundra .dijitAccordionTitleSelected  {
        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;
-}
+}
\ No newline at end of file
index 076460f151475510e860600c31dbbc79b841a732..0dd1b1b5131cc0732cedb04aaf75a6d0b6995c41 100644 (file)
@@ -1,49 +1,63 @@
+/* BorderContainer */
 
 .tundra .dijitBorderContainer {
        background-color: #fcfcfc;
        padding: 5px;
 }
+
 .tundra .dijitSplitContainer-child,
 .tundra .dijitBorderContainer-child {
-       
+       /* By default put borders on all children of BorderContainer,
+        *  to give illusion of borders on the splitters themselves.
+        */
        border: 1px #ccc solid;
 }
+
 .tundra .dijitBorderContainer-dijitTabContainerTop,
 .tundra .dijitBorderContainer-dijitTabContainerBottom,
 .tundra .dijitBorderContainer-dijitTabContainerLeft,
 .tundra .dijitBorderContainer-dijitTabContainerRight {
-       
+       /* except that TabContainer defines borders on it's sub-nodes (tablist and dijitTabPaneWrapper),
+        * so override rule setting border on domNode
+        */
         border: none;
 }
+
 .tundra .dijitBorderContainer-dijitBorderContainer {
-       
+       /* also, make nested BorderContainers look like a single big widget with lots of splitters */
        border: none;
-       padding: 0px;
+       padding: 0;
 }
+
 .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;
 }
+
+/* active splitter */
 .tundra .dijitSplitterActive {
        font-size: 1px;
        background-image: none;
index 8b470b938956fc64f2daa3d23110f1d9ad0a0370..21d25d524814b0eaf63dd0ff41aae51513e17206 100644 (file)
@@ -1,7 +1,10 @@
+/* ContentPane */
 
 .tundra .dijitContentPane {
-       padding: 0px;
+       padding: 0;
 }
+
+/* nested layouts */
 .tundra .dijitTabContainerTop-dijitContentPane,
 .tundra .dijitTabContainerLeft-dijitContentPane,
 .tundra .dijitTabContainerBottom-dijitContentPane,
@@ -10,8 +13,9 @@
        background-color: #fff;
        padding: 5px;
 }
+
 .tundra .dijitSplitContainer-dijitContentPane,
 .tundra .dijitBorderContainer-dijitContentPane {
-       background-color: #fff;         
+       background-color: #fff;         /* override background-color setting on parent .dijitBorderContainer */
        padding: 5px;
-}
+}
\ No newline at end of file
index 278503116e8ee9805161d51b23daa6bf0276dc3a..5a3eed6c98f7a3eb5930cf7b352d8d92464b37ed 100644 (file)
@@ -5,6 +5,7 @@
        border-right:1px solid #bfbfbf;
        width:7px;
 }
+
 .tundra .dijitSplitContainerSizerH .thumb {
        background:url("../images/splitContainerSizerV-thumb.png") no-repeat #ccc;
        left:1px;
@@ -12,6 +13,7 @@
        height:19px;
        overflow: hidden;
 }
+
 .tundra .dijitSplitContainerSizerV {
        background:url("../images/splitContainerSizerH.png") repeat-x #fff;
        border:0;
@@ -19,6 +21,7 @@
        border-bottom:1px solid #bfbfbf;
        height:7px;
 }
+
 .tundra .dijitSplitContainerSizerV .thumb {
        background:url("../images/splitContainerSizerH-thumb.png") no-repeat #ccc;
        top:1px;
index 8e859b9b42c676d8e08fe241eab02efbe7709d83..667da4ad9fb12e8b1bb5a1f13c416b7553075756 100644 (file)
@@ -1,42 +1,51 @@
-
+/* Tabs, shared classes */
 .tundra .dijitTabPaneWrapper {
        background:#fff;
        border:1px solid #ccc;
        margin: 0;
        padding: 0;
 }
+
 .tundra .dijitTab {
        line-height:normal;
-       margin-right:4px;       
-       padding:0px;
+       margin-right:4px;       /* space between one tab and the next in top/bottom mode */
+       padding:0;
        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;
+       top: 0;
        bottom: 2px;
 }
+
+/* checked tab*/
 .tundra .dijitTabChecked {
-       
+       /* the selected tab (with or without hover) */
        background-color:#fff;
        border-color: #ccc;
        background-image:none;
 }
+
+/* hovered tab */
 .tundra .dijitTabHover {
        color: #243C5F;
        border-top-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 .tabLabel {
-       
+       /* make sure tabs w/close button and w/out close button are same height, even w/small (<12px) font */
        min-height: 12px;
        display: inline-block;
 }
+
+/* Nested Tabs */
+
 .tundra .dijitTabContainerNested .dijitTabListWrapper {
        height: auto;
 }
+
 .tundra .dijitTabContainerNested .dijitTabContainerTop-tabs {
        border-bottom: 1px solid #CCC;
 }
+
 .tundra .dijitTabContainerTabListNested .dijitTab {
        background: none;
        border: none;
-       top: 0px;               
+       top: 0;         /* to override top: 1px/-1px for normal tabs */
 }
 .tundra .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
 }
 .tundra .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent .tabLabel {
        text-decoration: underline;
        font-weight: bold;
-       
+       /*background:#f3f3f3;*/
 }
 .tundra .dijitTabContainer .dijitTabPaneWrapperNested {
-       border: none;   
+       border: none;   /* prevent double border */
 }
+
+/* Close button */
+
 .tundra .dijitTabCloseButton {
        background: url("../images/tabClose.png") no-repeat right top;
        width: 12px;
 .dj_ie6 .tundra .dijitTabCloseButton {
        background-image : url("../images/tabClose.gif");
 }
+
 .tundra .dijitTabCloseButtonHover {
        background-image : url("../images/tabCloseHover.png");
 }
 .dj_ie6 .tundra .dijitTabCloseButtonHover {
        background-image : url("../images/tabCloseHover.gif");
 }
+
+/* ================================ */
+/* top tabs */
+
 .tundra .dijitTabContainerTop-tabs {
-       margin-bottom: 0px;
+       margin-bottom: 0;
        border-color: #cccccc;
        padding-left: 3px;
        background-position: bottom;
 }
 .tundra .dijitTabContainerTop-tabs .dijitTab {
-       top: 0px;
+       top: 0;
        margin-bottom: -1px;
 }
+
+/* top container */
 .tundra .dijitTabContainerTop-container {
        border-top: none;
 }
+
+/* checked tabs */
 .tundra .dijitTabContainerTop-tabs .dijitTabChecked {
        border-bottom-color:white;
 }
+
 .tundra .dijitTabContainerTop-tabs,
 .tundra .dijitTabContainerBottom-tabs {
        padding-left: 3px;
        padding-right: 3px;
 }
+
+/* strip */
 .tundra .dijitTabContainerTopStrip {
        border-top: 1px solid #CCC;
        border-right: 1px solid #CCC;
        padding-top: 2px;
        background: #f2f2f2;
 }
+
 .tundra .dijitTabContainerTopNone {
-       padding-top: 0px;
+       padding-top: 0;
 }
+
+
+/* ================================ */
+/* bottom tabs */
 .tundra .dijitTabContainerBottom-tabs {
-       margin-top: 0px;
+       margin-top: 0;
        border-color: #cccccc;
        background-position: top;
        padding-left: 3px;
 }
 .tundra .dijitTabContainerBottom-tabs .dijitTab {
-       bottom: 0px;
+       bottom: 0;
        margin-top: -1px;
 }
+
+/* bottom container */
 .tundra .dijitTabContainerBottom-container {
        border-bottom: none;
 }
+
+/* checked tabs */
 .tundra .dijitTabContainerBottom-tabs .dijitTabChecked {
        border-top-color:white;
 }
+
+/* strip */
 .tundra .dijitTabContainerBottomStrip {
        padding-bottom: 2px;
        border: 1px solid #ccc;
        background: #f2f2f2;
        border-top: none;
 }
+
+/* ================================ */
+/* right tabs */
 .tundra .dijitTabContainerRight-tabs {
        border-color: #ccc;
        height: 100%;
        padding-top: 3px;
 }
+
 .tundra .dijitTabContainerRightStrip {
        margin-left: -1px;
 }
+
+/* right container */
 .tundra .dijitTabContainerRight-container {
        border-right: none;
 }
+
+/* checked tabs */
 .tundra .dijitTabContainerRight-tabs .dijitTabChecked {
        border-left-color:white;
 }
+
+/* strip */
 .tundra .dijitTabContainerRightStrip {
        padding-right: 2px;
        border: 1px solid #ccc;
 }
+
 .tundra .dijitTabContainerRightStrip {
        background: #f2f2f2;
 }
+
+/* ================================ */
+/* left tabs */
 .tundra .dijitTabContainerLeft-tabs {
        border-color: #ccc;
        padding-top: 3px;
        height: 100%;
 }
+
+/* left conatiner */
 .tundra .dijitTabContainerLeft-container {
        border-left: none;
 }
+
+/* checked tabs */
 .tundra .dijitTabContainerLeft-tabs .dijitTabChecked {
        border-right-color:white;
 }
+
+/* strip */
 .tundra .dijitTabContainerLeftStrip {
        padding-left: 2px;
        border: 1px solid #ccc;
        background: #f2f2f2;
        border-right: none;
 }
+
+/* ================================ */
+/* left/right tabs */
 .tundra .dijitTabContainerLeft-tabs .dijitTab,
 .tundra .dijitTabContainerRight-tabs .dijitTab {
-       margin-right:0px;
-       margin-bottom:4px;      
+       margin-right:0;
+       margin-bottom:4px;      /* space between one tab and the next in left/right mode */
 }
+
+/* ================================ */
+
+/* this resets the tabcontainer stripe when within a contentpane */
 .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;
+       border-left: 0 solid #ccc;
+       border-top: 0 solid #ccc;
+       border-right: 0 solid #ccc;
+       padding-top: 0;
+       padding-left: 0;
 }
+
+/* ================================ */
+
+/* Menu and slider control styles */
 .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 {
 .dj_opera .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
        padding-bottom: 4px;
 }
+
 .tundra .dijitTabStripIcon {
        height: 14px;
        width: 14px;
        background: url(../images/spriteRoundedIconsSmall.png) no-repeat left top ;
 }
+
 .dj_ie6 .tundra .dijitTabStripIcon {
        background-image: url(../images/spriteRoundedIconsSmall.gif);
 }
+
 .tundra .dijitTabStripSlideRightIcon {
        background-position: -30px top;
 }
+
 .tundra .dijitTabStripMenuIcon {
        background-position: -15px top;
 }
+
index 1811a5b6c364033d4641296f345b839eeb2e7d72..fb8e28e9b49a9203938193bb3a4b9c8f93d06f58 100644 (file)
@@ -2,37 +2,50 @@
        -moz-box-orient:horizontal;
        text-align: right;
 }
+
 .tundra .dijitTabRtl .dijitTabInnerDiv {
        padding:2px 9px 2px 8px;
 }
+
 .tundra .tabStrip-disabled .tabStripButtonRtl .dijitTabInnerDiv {
-       
+       /* this is not special for RTL mode, but just here to override rule above (for enabled tabstrip) */
        padding-bottom: 3px;
        padding-top: 1px;
 }
+
 .tundra .tabStripButtonRtl .dijitTabInnerDiv {
        padding: 3px 2px 4px 2px;
 }
+
 .tundra .dijitTabPaneWrapper {
        #zoom: 1;
 }
+
 .dj_ie-rtl .tundra .dijitTabContainerLeft-tabs {
        margin-left: 1px !important;
 }
+
 .dj_ie-rtl .tundra .dijitTabContainerRight-tabs {
        margin-right: 1px !important;
 }
+
 .tundra .dijitTabContainerLeft-tabs .dijitTabRtl,
 .tundra .dijitTabContainerRight-tabs .dijitTabRtl {
-       margin-left:0px;
+       margin-left:0;
 }
+
 .dj_ie .tundra .dijitTabRtl .dijitTabInnerDiv {
-       
+       /* without this the tab label and icon become invisible, as though they were set to visibility:hidden */
        width : 0.1% !important;
 }
+
+
+
 .dj_iequirks-rtl .tundra .dijitTabContainerTopNone,
 .dj_iequirks-rtl .tundra .dijitTabContainerBottomNone {
-       
+       /* this strange rule prevents IE6 bug in themeTesterQuirk.html?dir=rtl upon closing
+        * "Closable" tab, where the other tabs disappear
+        */
        border-left: 1px solid #fff;
        border-right: 1px solid #fff;
 }
index ee23609b6a599c88a76f9c902a605e21c90cf2e2..f1d239c88078a51d137a1713620e312a1ec34625 100644 (file)
+/*
+       Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
 
-.dijitReset {
-       
-       margin:0;
-       border:0;
-       padding:0;
-       line-height:normal;
-       font: inherit;
-       color: inherit;
-}
-.dijit_a11y .dijitReset {
-       -moz-appearance: none; 
-}
-.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;                     
-}
-.dijitInputContainer {
-       
-       #zoom: 1;
-       overflow: hidden;
-       float: none !important; 
-       position:relative;
-}
-.dj_ie INPUT.dijitTextBox,
-.dj_ie .dijitTextBox INPUT {
-       font-size: 100%;
-}
-.dijitTextBox .dijitSpinnerButtonContainer,
-.dijitTextBox .dijitArrowButtonContainer,
-.dijitTextBox .dijitValidationContainer {
-       float: right;
-       text-align: center;
-}
-.dijitTextBox INPUT.dijitInputField {
-       
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-}
-.dijitTextBox .dijitValidationContainer {
-       display: none;
-}
-.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;
-}
-.dijitOffScreen {
-       position: absolute;
-       visibility: hidden;
-       left: 50%;
-       top: -10000px;
-}
-.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;
-}
-.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;
-}
-.dijitDisplayNone {
-       
-       display:none !important;
-}
-.dijitContainer {
-       
-       overflow: hidden;       
-}
-.dijit_a11y * {
-       background-image:none !important;
-}
-.dijit_a11y .dijitIcon,
-.dijit_a11y DIV.dijitArrowButtonInner, 
-.dijit_a11y SPAN.dijitArrowButtonInner,
-.dijit_a11y IMG.dijitArrowButtonInner,
-.dijit_a11y .dijitCalendarIncrementControl {
-       
-       display: none;
-}
-.dijitSpinner DIV.dijitArrowButtonInner {
-       display: block; 
-}
-.dijit_a11y .dijitA11ySideArrow {
-       display: inline !important; 
-       cursor: pointer;
-}
-.dijit_a11y .dijitCalendarDateLabel {
-       padding: 1px;
-}
-.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
-       border-style: dotted !important;
-       border-width: 1px;
-       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 .dijitTextBoxReadOnly .dijitInputField,
-.dijit_a11y .dijitTextBoxReadOnly .dijitButtonNode {
-       border-style: outset!important;
-       border-width: medium!important;
-       border-color: #999 !important;
-       color:#999 !important;
-}
-.dijitButtonNode * {
-       vertical-align: middle;
-}
-.dijitButtonNode .dijitArrowButtonInner {
-       
-       background: no-repeat center;
-       width: 12px;
-       height: 12px;
-       direction: ltr; 
-}
-.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;
-}
-.dijitButtonContents {
-       display: block;         
-}
-td.dijitButtonContents {
-       display: table-cell;    
-}
-.dijitButtonNode IMG {
-       
-       vertical-align:middle;
-       
-}
-TABLE.dijitComboButton { 
-       
-       border-collapse: collapse;
-       border:0;
-       padding:0;
-       margin:0;
-}
-.dijitToolbar .dijitComboButton {
-       
-       border-collapse: separate;
-}
-.dijitToolbar .dijitToggleButton,
-.dijitToolbar .dijitButton,
-.dijitToolbar .dijitDropDownButton,
-.dijitToolbar .dijitComboButton {
-       margin: 0;
-}
-.dijitToolbar .dijitButtonContents {
-       
-       padding: 1px 2px;
-}
-.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;
-}
-.dj_webkit .dijitSpinner .dijitSpinnerButtonContainer {
-       
-       line-height:inherit;
-}
-.dijitTextBox .dijitButtonNode {
-       border-width: 0;
-}
-.dijitButtonNode,
-.dijitButtonNode * {
-       cursor: pointer;
-}
-.dj_ie .dijitButtonNode {
-       
-       zoom: 1;
-}
-.dj_ie .dijitButtonNode button {
-       
-       overflow: visible;
-}
-DIV.dijitArrowButton {
-       float: right;
-}
-.dijitTextBox {
-       border: solid black 1px;
-       #overflow: hidden; 
-       width: 15em;    
-       vertical-align: middle;
-       #vertical-align: auto;
-}
-.dijitTextBoxReadOnly,
-.dijitTextBoxDisabled {
-       color: gray;
-}
-.dj_webkit .dijitTextBoxDisabled INPUT {
-       color: #eee; 
-}
-.dj_webkit TEXTAREA.dijitTextAreaDisabled {
-       color: #333; 
-}
-.dj_gecko .dijitTextBoxReadOnly INPUT,
-.dj_gecko .dijitTextBoxDisabled INPUT {
-       -moz-user-input: none; 
-}
-.dijitPlaceHolder {
-       
-       color: #AAAAAA;
-       font-style: italic;
-       position: absolute;
-       top: 0;
-       left: 0;
-       #filter: ""; 
-}
-.dijitTimeTextBox {
-       width: 8em;
-}
-.dijitTextBox INPUT:focus {
-       outline: none;  
-}
-.dijitTextBoxFocused {
-       outline: auto 5px -webkit-focus-ring-color;
-}
-.dijitTextBox INPUT {
-       float: left; 
-}
-.dijitInputInner {
-       
-       border:0 !important;
-       vertical-align:middle !important;
-       background-color:transparent !important;
-       width:100% !important;
-       
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-       margin-left: 0 !important;
-       margin-right: 0 !important;
-}
-.dijit_a11y .dijitTextBox INPUT {
-       margin: 0 !important;
-}
-.dijitTextBoxError INPUT.dijitValidationInner,
-.dijitTextBox INPUT.dijitArrowButtonInner {
-       
-       text-indent: -1em !important;
-       direction: ltr !important;
-       text-align: left !important;
-       height: auto !important;
-       #text-indent: 0 !important;
-       #letter-spacing: -5em !important;
-       #text-align: right !important;
-}
-.dj_ie .dijitTextBox INPUT,
-.dj_ie INPUT.dijitTextBox {
-       overflow-y: visible; 
-       line-height: normal; 
-}
-.dj_ie7 .dijitTextBox INPUT.dijitValidationInner,
-.dj_ie7 .dijitTextBox INPUT.dijitArrowButtonInner {
-       line-height: 86%; 
-}
-.dj_ie6 .dijitTextBox INPUT,
-.dj_ie6 INPUT.dijitTextBox,
-.dj_iequirks .dijitTextBox INPUT.dijitValidationInner,
-.dj_iequirks .dijitTextBox INPUT.dijitArrowButtonInner,
-.dj_iequirks .dijitTextBox INPUT.dijitSpinnerButtonInner,
-.dj_iequirks .dijitTextBox INPUT.dijitInputInner,
-.dj_iequirks INPUT.dijitTextBox {
-       line-height: 100%; 
-}
-.dijit_a11y INPUT.dijitValidationInner,
-.dijit_a11y INPUT.dijitArrowButtonInner {
-       
-       text-indent: 0 !important;
-       width: 1em !important;
-       #text-align: left !important;
-}
-.dijitTextBoxError .dijitValidationContainer {
-       display: inline;
-       cursor: default;
-}
-.dijitSpinner .dijitSpinnerButtonContainer,
-.dijitComboBox .dijitArrowButtonContainer {
-       
-       border-width: 0 0 0 1px !important; 
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
-       
-       border-width: 0;
-}
-.dj_ie .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
-       clear: both; 
-}
-.dijit_a11y .dijitTextBox .dijitValidationContainer,
-.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBox .dijitArrowButtonContainer {
-       
-       border: solid black !important;
-       border-width: 0 0 0 1px !important;
-}
-.dj_ie .dijitToolbar .dijitComboBox {
-       
-       vertical-align: middle;
-}
-.dijitTextBox .dijitSpinnerButtonContainer {
-       width: 1em;
-       position: relative !important;
-       overflow: hidden;
-}
-.dijitSpinner .dijitSpinnerButtonInner {
-       width:1em;
-       visibility:hidden !important; 
-       overflow-x:hidden;
-}
-.dijitComboBox .dijitButtonNode,
-.dijitSpinnerButtonContainer .dijitButtonNode {
-       border-width: 0;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
-       border: 0 none !important;
-}
-.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner,
-.dijit_a11y .dijitSpinnerButtonContainer INPUT {
-       width: 1em !important;
-}
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner {
-       margin: 0 auto !important; 
-}
-.dj_ie .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding-left: 0.3em !important;
-       padding-right: 0.3em !important;
-       margin-left: 0.3em !important;
-       margin-right: 0.3em !important;
-       width: 1.4em !important;
-}
-.dj_ie7 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding-left: 0.0em !important; 
-       padding-right: 0.0em !important;
-       width: 1em !important;
-}
-.dj_ie6 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       margin-left: 0.1em !important;
-       margin-right: 0.1em !important;
-       width: 1em !important;
-}
-.dj_iequirks .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       margin-left: 0 !important;
-       margin-right: 0 !important;
-       width: 2em !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       
-       padding: 0;
-       position: absolute !important;
-       right: 0;
-       float: none;
-       height: 50%;
-       width: 100%;
-       bottom: auto;
-       left: 0;
-       right: auto;
-}
-.dj_iequirks .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: auto;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitArrowButton {
-       overflow: visible !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitDownArrowButton {
-       top: 50%;
-       border-top-width: 1px !important;
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitUpArrowButton {
-       #bottom: 50%;   
-       top: 0;
-}
-.dijitSpinner .dijitArrowButtonInner {
-       margin: auto;
-       overflow-x: hidden;
-       height: 100% !important;
-}
-.dj_iequirks .dijitSpinner .dijitArrowButtonInner {
-       height: auto !important;
-}
-.dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       -moz-transform: scale(0.5);
-       -moz-transform-origin: center top;
-       -webkit-transform: scale(0.5);
-       -webkit-transform-origin: center top;
-       -o-transform: scale(0.5);
-       -o-transform-origin: center top;
-       transform: scale(0.5);
-       transform-origin: left top;
-       padding-top: 0;
-       padding-bottom: 0;
-       padding-left: 0 !important;
-       padding-right: 0 !important;
-       width: 100%;
-}
-.dj_ie .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       zoom: 50%; 
-}
-.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButtonInner {
-       overflow: hidden;
-}
-.dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: 100%;
-}
-.dj_iequirks .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
-       width: 1em; 
-}
-.dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       visibility: hidden;
-}
-.dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       vertical-align:top;
-       visibility: visible;
-}
-.dijit_a11y .dijitSpinnerButtonContainer {
-       width: 1em;
-}
-.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
-       border-width: 1px 0px 0px 0px;
-       border-style: solid !important;
-}
-.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 !important;
-       height: auto !important;
-}
-.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:2px;
-       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;
-}
-.dijit_a11y .dijitTooltipConnector {
-       display: none;  
-}
-.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;
-}
-.dj_ff3 .dijit_a11y div.dijitSplitter:focus {
-       outline-style:dotted;
-       outline-width: 2px;
-}
-.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;
-}
-.dijitTitlePaneTitle {
-       cursor: pointer;
-}
-.dijitFixedOpen {
-       
-       cursor: default;
-}
-.dijitTitlePaneTitle * {
-       vertical-align: middle;
-}
-.dijitTitlePane .dijitArrowNodeInner {
-       
-       display: none;
-}
-.dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
-       
-       display:inline !important;
-       font-family: monospace;         
-}
-.dijit_a11y .dijitTitlePane .dijitArrowNode {
-       
-       display:none;
-}
-.dj_ie6 .dijitTitlePaneContentOuter,
-.dj_ie6 .dijitTitlePane .dijitTitlePaneTitle {
-       
-       zoom: 1;
-}
-.dijitColorPalette {
-       border: 1px solid #999;
-       background: #fff;
-       position: relative;
-}
-img.dijitColorPaletteUnder {
-       
-       border-style: none;
-       position: absolute;
-       left: 0;
-       top: 0;
-}
-.dijitColorPalette .dijitPaletteTable {
-       
-       padding: 2px 3px 3px 3px;
-       position: relative;
-       overflow: hidden;
-       outline: 0;
-       border-collapse: separate;
-}
-.dj_ie6 .dijitColorPalette .dijitPaletteTable,
-.dj_ie7 .dijitColorPalette .dijitPaletteTable,
-.dj_iequirks .dijitColorPalette .dijitPaletteTable {
-       
-       padding: 0;
-       margin: 2px 3px 3px 3px;
-}
-.dijitColorPalette .dijitPaletteCell {
-       
-       height: 20px;
-       width: 20px;
-       font-size: 1px;
-       vertical-align: middle;
-       text-align: center;
-}
-.dijitColorPalette .dijitPaletteImg {
-       
-       width: 16px;
-       height: 14px;
-       border: 1px solid #999;
-       cursor: default;
-       vertical-align: middle;
-}
-.dj_iequirks .dijitColorPalette .dijitPaletteImg {
-       margin: 1px;    
-}
-.dijitPaletteTable td {
-               padding: 0px;
-}
-.dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       
-       border: 1px solid #000;
-}
-.dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
-.dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
-       border: 2px solid #000;
-}
-.dijit_a11y .dijitColorPalette .dijitPaletteTable,
-.dijit_a11y .dijitColorPalette .dijitPaletteTable * {
-       
-       background-color: transparent !important;
-}
-.dj_gecko .dijit_a11y .dijitColorPalette .dijitPaletteCellFocused .dijitPaletteImg {
-       border: 3px dotted #000;        
-       margin: -1px;
-}
-.dijit_a11y  .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
-       border: 2px solid #000 !important;
-}
-.dijitAccordionContainer {
-       border:1px solid #b7b7b7;
-       border-top:0 !important;
-}
-.dijitAccordionTitle {
-       cursor: pointer;
-}
-.dijitAccordionTitleSelected {
-       cursor: default;
-}
-.dijitAccordionTitle .arrowTextUp,
-.dijitAccordionTitle .arrowTextDown {
-       display: none;
-       font-size: 0.65em;
-       font-weight: normal !important;
-}
-.dijit_a11y .dijitAccordionTitle .arrowTextUp,
-.dijit_a11y .dijitAccordionTitleSelected .arrowTextDown {
-       display: inline;
-}
-.dijit_a11y .dijitAccordionTitleSelected .arrowTextUp {
-       display: none;
-}
-.dj_ie6 .dijitAccordionTitle,
-.dj_iequirks .dijitAccordionTitle {
-       
-       zoom: 1;
-}
-.dijitCalendarContainer {
-       width: auto;    
-}
-.dijitCalendarContainer th, .dijitCalendarContainer td {
-       padding: 0;
-}
-.dijitCalendarNextYear {
-       margin:0 0 0 0.55em;
-}
-.dijitCalendarPreviousYear {
-       margin:0 0.55em 0 0;
-}
-.dijitCalendarIncrementControl {
-       vertical-align: middle;
-}
-.dijitCalendarIncrementControl,
-.dijitCalendarDateTemplate,
-.dijitCalendarMonthLabel,
-.dijitCalendarPreviousYear,
-.dijitCalendarNextYear {
-       cursor: pointer;
-}
-.dijitCalendarDisabledDate {
-       color: gray;
-       text-decoration: line-through;
-       cursor: default;
-}
-.dijitSpacer {
-       
-       position: relative;
-       height: 1px;
-       overflow: hidden;
-       visibility: hidden;
-}
-.dijitMenu {
-       border:1px solid black;
-       background-color:white;
-}
-.dijitMenuTable {
-       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.5;
-       cursor:default;
-}
-.dj_ie .dijit_a11y .dijitMenuItemDisabled,
-.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 dotted black !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;
-}
-.dj_ie .dijit_a11y .dijitMenuBar .dijitMenuItem {
-       
-       margin: 0px;
-}
-.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;
-}
-.nowrapTabStrip {
-       width: 50000px;
-       display: block;
-       position: relative;
-}
-.dijitTabListWrapper {
-       overflow: hidden;
-}
-.dijit_a11y .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.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
-       cursor: auto;
-}
-.dijitTab {
-       position:relative;
-       cursor:pointer;
-       white-space:nowrap;
-       z-index:3;
-}
-.dijitTab * {
-       
-       vertical-align: middle;
-}
-.dijitTabChecked {
-       cursor: default;        
-}
-.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;
-}
-.dijitTabCloseButton {
-       margin-left: 1em;
-}
-.dijitTabCloseText {
-       display:none;
-}
-.dijit_a11y .dijitTabCloseButton {
-       background-image: none !important;
-       width: auto !important;
-       height: auto !important;
-       border: thin dotted;    
-}
-.dijit_a11y .dijitTabCloseButtonHover {
-       border:thin solid;      
-}
-.dijit_a11y .dijitTabCloseText {
-       display: inline;
-}
-.dijit_a11y .dijitTabChecked {
-       
-       border-style:dashed !important;
-}
-.dijit_a11y .dijitTabInnerDiv {
-       border-left:none !important;
- }
-.dijitTabPane,
-.dijitStackContainer-child,
-.dijitAccordionContainer-child {
-       
-    border: none !important;
-}
-.dijitInlineEditBoxDisplayMode {
-       border: 1px solid transparent;  
-       cursor: text;
-}
-.dijit_a11y .dijitInlineEditBoxDisplayMode,
-.dj_ie6 .dijitInlineEditBoxDisplayMode {
-       
-       border: none;
-}
-.dijitInlineEditBoxDisplayModeHover,
-.dijit_a11y .dijitInlineEditBoxDisplayModeHover,
-.dj_ie6 .dijitInlineEditBoxDisplayModeHover {
-       
-       background-color: #e2ebf2;
-       border: solid 1px black;
-}
-.dijitInlineEditBoxDisplayModeDisabled {
-       cursor: default;
-}
-.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;
-       overflow: hidden;       
-}
-.dijitDialogTitleBar {
-       cursor: move;
-}
-.dijitDialogFixed .dijitDialogTitleBar {
-       cursor:default;
-}
-.dijitDialogCloseIcon {
-       cursor: pointer;
-}
-.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 .dijitSpinnerButtonContainer,
-.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;
-}
-.dijitSliderMoveableV {
-       right:50%;
-}
-.dijit_a11y DIV.dijitSliderImageHandle,
-.dijitSliderImageHandle {
-       margin:0;
-       padding:0;
-       position:relative !important;
-       border:8px solid gray;
-       width:0;
-       height:0;
-       cursor: pointer;
-}
-.dj_iequirks .dijit_a11y .dijitSliderImageHandle {
-       font-size: 0;
-}
-.dj_ie7 .dijitSliderImageHandle {
-       overflow: hidden; 
-}
-.dj_ie7 .dijit_a11y .dijitSliderImageHandle {
-       overflow: visible; 
-}
-.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
-       border:4px solid #000;
-       height:8px;
-       width:8px;
-}
-.dijitSliderImageHandleV {
-       top:-8px;
-       right: -50%;
-}
-.dijitSliderImageHandleH {
-       left:50%;
-       top:-5px;
-       vertical-align:top;
-}
-.dijitSliderBar {
-       border-style:solid;
-       border-color:black;
-       cursor: pointer;
-}
-.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;
-}
-.dijitSliderDecoration {
-       text-align:center;
-}
-.dijitSliderV TD {
-       position: relative; 
-}
-.dijitSliderDecorationH {
-       width: 100%;
-}
-.dijitSliderDecorationV {
-       height: 100%;
-}
-.dijitSliderButton {
-       font-family:monospace;
-       margin:0;
-       padding:0;
-       display:block;
-}
-.dijit_a11y .dijitSliderButtonInner {
-       visibility:visible !important;
-}
-.dijitSliderButtonContainer {
-       text-align:center;
-       height:0;       
-}
-.dijitSliderButtonContainer * {
-       cursor: pointer;
-}
-.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%;
-}
-.dijitRuleLabelV {
-       
-       text-overflow: ellipsis;
-       white-space: nowrap;
-       overflow: hidden;
-}
-.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 .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;
-}
-.dijit_a11y .dijitButtonContents .dijitButtonText,
-.dijit_a11y .dijitTab .tabLabel {
-       display: inline !important;
-}
-.dijitTextArea {
-       width:100%;
-       overflow-y: auto;       
-}
-.dijitTextArea[cols] {
-       width:auto; 
-}
-.dj_ie .dijitTextAreaCols {
-       width:auto;
-}
-.dijitToolbarSeparator {
-       height: 18px;
-       width: 5px;
-       padding: 0 1px;
-       margin: 0;
-}
-.dijitIEFixedToolbar {
-       position:absolute;
-       
-       top: expression(eval((document.documentElement||document.body).scrollTop));
-}
-.dijitEditor {
-       display: block; 
-}
-.dijitEditorDisabled,
-.dijitEditorReadOnly {
-       color: gray;
-}
-.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 .dijitTimePickerItemSelected .dijitTimePickerItemInner {
-       border: solid 4px black;
-}
-.dijit_a11y .dijitTimePickerItemHover .dijitTimePickerItemInner {
-       border: dashed 4px black;
-}
-.dijitToggleButtonIconChar {
-       
-       display:none !important;
-}
-.dijit_a11y .dijitToggleButton .dijitToggleButtonIconChar {
-       display:inline !important;
-       visibility:hidden;
-}
-.dj_ie6 .dijitToggleButtonIconChar, .dj_ie6 .tabStripButton .dijitButtonText {
-       font-family: "Arial Unicode MS";        
-}
-.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
-       display: inline !important; 
-       visibility:visible !important;
-}
-.dijitArrowButtonChar {
-        display:none !important;
-}
-.dijit_a11y .dijitArrowButtonChar {
-        display:inline !important;
-}
-.dijit_a11y .dijitDropDownButton .dijitArrowButtonInner,
-.dijit_a11y .dijitComboButton .dijitArrowButtonInner {
-       display:none !important;
-}
-.dijitSelect {
-       margin: 0.2em;
-       border-collapse: collapse;
-}
-.dj_ie .dijitSelect,
-.dj_ie7 .dijitSelect,
-.dj_iequirks .dijitSelect {
-       vertical-align: middle; 
-}
-.dj_ie8 .dijitSelect .dijitButtonText {
-       vertical-align: top;
-}
-.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;
-       white-space: nowrap;
-       text-align: left;
-}
-.dijitSelectFixedWidth .dijitButtonContents {
-       width: 100%;
-}
-.dijitSelectMenu .dijitMenuItemIcon {
-       
-       display:none;
-}
-.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
-.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
-       
-       position: static;
-}
-.dijitSelectLabel *
-{
-       vertical-align: baseline;
-}
-.dijitSelectSelectedOption * {
-       font-weight: bold;
-}
-.dijitSelectMenu {
-       border-width: 1px;
-}
-.dijitSelectMenu .dijitMenuTable {
-       margin: 0px;
-       background-color: transparent;
-}
-.dijitForceStatic {
-       position: static !important;
-}
-.dijitReadOnly *,
-.dijitDisabled *,
-.dijitReadOnly,
-.dijitDisabled {
-       
-       cursor: default;
-}
-.dijitIconSave,
-.dijitIconPrint,
-.dijitIconCut,
-.dijitIconCopy,
-.dijitIconClear,
-.dijitIconDelete,
-.dijitIconUndo,
-.dijitIconEdit,
-.dijitIconNewTask,
-.dijitIconEditTask,
-.dijitIconEditProperty,
-.dijitIconTask,
-.dijitIconFilter,
-.dijitIconConfigure,
-.dijitIconSearch,
-.dijitIconApplication,
-.dijitIconBookmark,
-.dijitIconChart,
-.dijitIconConnector,
-.dijitIconDatabase,
-.dijitIconDocuments,
-.dijitIconMail,
-.dijitLeaf,
-.dijitIconFile,
-.dijitIconFunction,
-.dijitIconKey,
-.dijitIconPackage,
-.dijitIconSample,
-.dijitIconTable,
-.dijitIconUsers,
-.dijitFolderClosed,
-.dijitIconFolderClosed,
-.dijitFolderOpened,
-.dijitIconFolderOpen,
-.dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActEnabled.png); 
-       width: 16px;
-       height: 16px;
-}
-.dj_ie6 .dijitIconSave,
-.dj_ie6 .dijitIconPrint,
-.dj_ie6 .dijitIconCut,
-.dj_ie6 .dijitIconCopy,
-.dj_ie6 .dijitIconClear,
-.dj_ie6 .dijitIconDelete,
-.dj_ie6 .dijitIconUndo,
-.dj_ie6 .dijitIconEdit,
-.dj_ie6 .dijitIconNewTask,
-.dj_ie6 .dijitIconEditTask,
-.dj_ie6 .dijitIconEditProperty,
-.dj_ie6 .dijitIconTask,
-.dj_ie6 .dijitIconFilter,
-.dj_ie6 .dijitIconConfigure,
-.dj_ie6 .dijitIconSearch,
-.dj_ie6 .dijitIconApplication,
-.dj_ie6 .dijitIconBookmark,
-.dj_ie6 .dijitIconChart,
-.dj_ie6 .dijitIconConnector,
-.dj_ie6 .dijitIconDatabase,
-.dj_ie6 .dijitIconDocuments,
-.dj_ie6 .dijitIconMail,
-.dj_ie6 .dijitLeaf,
-.dj_ie6 .dijitIconFile,
-.dj_ie6 .dijitIconFunction,
-.dj_ie6 .dijitIconKey,
-.dj_ie6 .dijitIconPackage,
-.dj_ie6 .dijitIconSample,
-.dj_ie6 .dijitIconTable,
-.dj_ie6 .dijitIconUsers,
-.dj_ie6 .dijitFolderClosed,
-.dj_ie6 .dijitIconFolderClosed,
-.dj_ie6 .dijitFolderOpened,
-.dj_ie6 .dijitIconFolderOpen,
-.dj_ie6 .dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActEnabled8bit.png);
-}
-.dijitDisabled .dijitIconSave,
-.dijitDisabled .dijitIconPrint,
-.dijitDisabled .dijitIconCut,
-.dijitDisabled .dijitIconCopy,
-.dijitDisabled .dijitIconClear,
-.dijitDisabled .dijitIconDelete,
-.dijitDisabled .dijitIconUndo,
-.dijitDisabled .dijitIconEdit,
-.dijitDisabled .dijitIconNewTask,
-.dijitDisabled .dijitIconEditTask,
-.dijitDisabled .dijitIconEditProperty,
-.dijitDisabled .dijitIconTask,
-.dijitDisabled .dijitIconFilter,
-.dijitDisabled .dijitIconConfigure,
-.dijitDisabled .dijitIconSearch,
-.dijitDisabled .dijitIconApplication,
-.dijitDisabled .dijitIconBookmark,
-.dijitDisabled .dijitIconChart,
-.dijitDisabled .dijitIconConnector,
-.dijitDisabled .dijitIconDatabase,
-.dijitDisabled .dijitIconDocuments,
-.dijitDisabled .dijitIconMail,
-.dijitDisabled .dijitLeaf,
-.dijitDisabled .dijitIconFile,
-.dijitDisabled .dijitIconFunction,
-.dijitDisabled .dijitIconKey,
-.dijitDisabled .dijitIconPackage,
-.dijitDisabled .dijitIconSample,
-.dijitDisabled .dijitIconTable,
-.dijitDisabled .dijitIconUsers,
-.dijitDisabled .dijitFolderClosed,
-.dijitDisabled .dijitIconFolderClosed,
-.dijitDisabled .dijitFolderOpened,
-.dijitDisabled .dijitIconFolderOpen,
-.dijitDisabled .dijitIconError {
-       background-image: url(../../icons/images/commonIconsObjActDisabled.png); 
-}
-.dijitIconSave { background-position: 0px; }
-.dijitIconPrint { background-position: -16px; }
-.dijitIconCut { background-position: -32px; }
-.dijitIconCopy { background-position: -48px; }
-.dijitIconClear { background-position: -64px; }
-.dijitIconDelete { background-position: -80px; }
-.dijitIconUndo { background-position: -96px; }
-.dijitIconEdit { background-position: -112px; }
-.dijitIconNewTask { background-position: -128px; }
-.dijitIconEditTask { background-position: -144px; }
-.dijitIconEditProperty { background-position: -166px; }
-.dijitIconTask { background-position: -176px; }
-.dijitIconFilter { background-position: -192px; }
-.dijitIconConfigure { background-position: -208px; }
-.dijitIconSearch { background-position: -224px; }
-.dijitIconError { background-position: -496px; } 
-.dijitIconApplication { background-position: -240px; }
-.dijitIconBookmark { background-position: -256px; }
-.dijitIconChart { background-position: -272px; }
-.dijitIconConnector { background-position: -288px; }
-.dijitIconDatabase { background-position: -304px; }
-.dijitIconDocuments { background-position: -320px; }
-.dijitIconMail { background-position: -336px; }
-.dijitIconFile, .dijitLeaf { background-position: -352px; }
-.dijitIconFunction { background-position: -368px; }
-.dijitIconKey { background-position: -384px; }
-.dijitIconPackage{ background-position: -400px; }
-.dijitIconSample { background-position: -416px; }
-.dijitIconTable { background-position: -432px; }
-.dijitIconUsers { background-position: -448px; }
-.dijitIconFolderClosed, .dijitFolderClosed { background-position: -464px; }
-.dijitIconFolderOpen, .dijitFolderOpened { background-position: -480px; }
-.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;
-}
-.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;
-}
-.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 .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 .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 .dijitTabCloseButton {
-       background: url(images/tabClose.png) no-repeat right top;
-       width: 12px;
-       height: 12px;
-}
-.dj_ie6 .tundra .dijitTabCloseButton {
-       background-image : url(images/tabClose.gif);
-}
-.tundra .dijitTabCloseButtonHover {
-       background-image : url(images/tabCloseHover.png);
-}
-.dj_ie6 .tundra .dijitTabCloseButtonHover {
-       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-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 .dijitTabStripIcon {
-       height: 14px;
-       width: 14px;
-       background: url(images/spriteRoundedIconsSmall.png) no-repeat left top ;
-}
-.dj_ie6 .tundra .dijitTabStripIcon {
-       background-image: url(images/spriteRoundedIconsSmall.gif);
-}
-.tundra .dijitTabStripSlideRightIcon {
-       background-position: -30px top;
-}
-.tundra .dijitTabStripMenuIcon {
-       background-position: -15px top;
-}
-.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;
-}
-.tundra .dijitAccordionTitleHover  {
-       background: #f8fafd url(images/accordionItemHover.gif) bottom repeat-x;
-}
-.tundra .dijitAccordionTitleSelected  {
-       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;
-}
-.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 .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;
-}
-.tundra .dijitInputContainer INPUT,
-.tundra .dijitTextBox {
-       margin: 0em 0.1em;
-}
-.tundra .dijitTextArea {
-       padding: 3px;
-}
-.tundra .dijitTextBox {
-       
-       background:#fff url(images/validationInputBg.png) repeat-x top left;
-       #background:#fff url(images/validationInputBg.gif) repeat-x top left;
-       border:1px solid #b3b3b3;
-}
-.tundra .dijitComboBox .dijitButtonNode {
-       padding: 0 0.2em;
-}
-.tundra .dijitTextBox .dijitButtonNode {
-       
-       border-color: #9b9b9b;
-}
-.tundra .dijitTextBoxFocused {
-       
-       border-color:#406b9b;
-}
-.tundra .dijitTextBoxFocused .dijitButtonNode {
-       border-color:#366dba;
-}
-.tundra .dijitError {
-       background-color:#f9f7ba;
-       background-image:none;
-}
-.tundra .dijitErrorFocused {
-       background-color:#f9f999;
-       background-image:none;
-}
-.tundra .dijitValidationIcon {
-       
-       width: 16px;
-       background: transparent url(images/warning.png) no-repeat center center;
-}
-.tundra .dijitComboBoxHighlightMatch {
-       background-color:#a5beda;
-}
-.tundra .dijitFocusedLabel {
-       
-       outline: 1px dotted #666666;
-}
-.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 .dijitButtonText {
-       text-align: center;
-       padding: 0 0.3em;
-}
-.tundra .dijitDisabled .dijitButtonText {
-       color: #7F7F7F;
-}
-.tundra .dijitArrowButton {
-       color: #111;
-}
-.tundra .dijitComboButton .dijitDownArrowButton {
-       padding-right:4px;
-}
-.tundra .dijitTextBoxReadOnly,
-.tundra .dijitTextBoxReadOnly .dijitButtonNode,
-.tundra .dijitButtonDisabled .dijitButtonNode,
-.tundra .dijitToggleButtonDisabled .dijitButtonNode,
-.tundra .dijitDropDownButtonDisabled .dijitButtonNode,
-.tundra .dijitComboButtonDisabled .dijitButtonNode,
-.tundra .dijitTextBoxDisabled,
-.tundra .dijitTextBoxDisabled .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 .dijitComboButton .dijitButtonContentsHover,
-.tundra .dijitComboButton .dijitDownArrowButtonHover {
-       
-       
-       border-color: #a5beda;
-       border-bottom-color:#5c7590;
-       color:#243C5F;
-       background:#fcfdff url(images/buttonHover.png) repeat-x bottom;
-}
-.tundra .dijitDownArrowButtonHover,
-.tundra .dijitUpArrowButtonHover {
-       
-       color:#243C5F;
-       background:#fcfdff url(images/buttonHover.png) repeat-x bottom;
-}
-.tundra .dijitUpArrowButtonActive,
-.tundra .dijitDownArrowButtonActive,
-.tundra .dijitButtonActive .dijitButtonNode,
-.tundra .dijitToggleButtonActive .dijitButtonNode,
-.tundra .dijitDropDownButtonActive .dijitButtonNode,
-.tundra .dijitButtonContentsActive,
-.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;
-       margin: 0px 4px 0px 4px;
-}
-.tundra .dijitTextBox .dijitArrowButtonInner {
-       background-position: 0 center;
-}
-.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;
-}
-.dj_webkit .tundra .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
-       margin-top: -1px; 
-}
-.dj_ie .tundra .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
-       margin-top: -2px; 
-}
-.dj_ie8 .tundra .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
-       margin-top: -1px; 
-}
-.tundra .dijitSpinnerButtonContainer {
-       width: auto;
-       padding: 0;
-}
-.tundra .dijitSpinner .dijitArrowButton {
-       width: 15px;
-}
-.tundra .dijitSpinner .dijitSpinnerButtonInner {
-       width: 15px;
-}
-.tundra .dijitSpinner .dijitArrowButtonInner .dijitInputField {
-       padding: 0;
-}
-.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;
-}
-.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 .dijitToggleButton .dijitRadioIcon {
-       
-       background-image: url(images/checkmarkNoBorder.png);
-}
-.dj_ie6 .tundra .dijitToggleButton .dijitRadioIcon {
-       background-image: url(images/checkmarkNoBorder.gif);
-}
-.tundra .dijitRadio,
-.tundra .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;
-}
-.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;
-}
-.tundra .dijitSliderImageHandleH {
-       border:0px;
-       width:16px;
-       height:16px;
-       background:url(images/preciseSliderThumb.png) no-repeat center top;
-}
-.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;
-}
-.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 {
-       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;
-}
-.tundra .dijitSelect .dijitButtonNode {
-       padding: 0px;
-}
-.tundra .dijitSelect .dijitButtonNode .dijitArrowButtonInner {
-       margin: 0px 4px 0px 5px;
-}
-.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 .dijitMenuItemLabel,
-.tundra .dijitSelectMenu .dijitMenuArrowCell {
-       padding: 0.1em 0.2em;
-}
-.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 .dijitTreeRowSelected .dijitTreeLabel {
-       background:#e2ebfe;
-}
-.tundra .dijitTreeRowHover {
-       
-       background-image: url(images/treeHover.png);
-       background-repeat: repeat;
-       background-color: transparent !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;
-}
-.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;
-}
-.tundra .dijitTitlePaneTitle {
-       background: #cccccc;
-       background:#fff url(images/titleBar.png) repeat-x bottom left;
-       border:1px solid #bfbfbf;
-       padding:3px 4px;
-}
-.tundra .dijitTitlePaneTitleHover  {
-       background: #f8fafd url(images/accordionItemHover.gif) bottom repeat-x;
-}
-.tundra .dijitTitlePane .dijitArrowNode {
-       background-image: url(images/spriteArrows.png);
-       background-repeat: no-repeat;
-       background-position: 0px 0px;
-       height: 7px;
-       width: 7px;
-}
-.dj_ie6 .tundra .dijitTitlePane .dijitArrowNode {
-       background-image: url(images/spriteArrows.gif);
-}
-.tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
-       background-position: -14px 0px;
-}
-.tundra .dijitTitlePaneContentOuter {
-       background: #ffffff;
-       border:1px solid #bfbfbf;
-       border-top: 0px;
-}
-.tundra .dijitTitlePaneContentInner {
-       padding:10px;
-}
-.tundra .dijitTitlePaneTextNode {
-       margin-left: 4px;
-       margin-right: 4px;
-}
-.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 .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;
-}
-.tundra .dijitCalendarCurrentMonth {
-       
-       background-color: white;
-}
-.tundra .dijitCalendarCurrentDate {
-       
-       text-decoration:underline;
-       font-weight:bold;
-}
-.tundra .dijitCalendarHoveredDate {
-       background-color: #e2ebf2;
-}
-.tundra .dijitCalendarDisabledDate {
-       text-decoration: line-through;
-       background-color: white;        
-}
-.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;
-}
-.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;
-}
-.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 .dijitComboButton .dijitButtonContentsHover,
-.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
-       
-       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;
-}
-.tundra .dijitToolbarSeparator {
-       
-       background: url(../../icons/images/editorIconsEnabled.png);
-}
-.tundra .dijitToolbarRtl .dijitToolbarSeparator {
-       
-       background-image: url(../../icons/images/editorIconsDisabled.png);
-}
-.tundra .dijitDialog {
-       background: #fff;
-       border: 1px solid #7eabcd;
-       padding: 0px;
-       -webkit-box-shadow: 0px 5px 10px #adadad;
-}
-.tundra .dijitDialogPaneContent {
-       background: #fff;
-       border-top: 1px solid #d3d3d3;
-       padding:10px;
-}
-.tundra .dijitDialogTitleBar {
-       
-       background: #fafafa url(images/titleBar.png) repeat-x top left;
-       padding: 5px 6px 3px 6px;
-       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;
-}
-.dj_ie6 .tundra .dijitDialogCloseIcon {
-       background : url(images/tabClose.gif) no-repeat right top;
-}
-.tundra .dijitDialogCloseIconHover {
-       background: url(images/tabCloseHover.png) no-repeat right top;
-}
-.dj_ie6 .tundra .dijitDialogCloseIconHover {
-       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 .dijitTooltipContainer {
-       -webkit-box-shadow: 0px 5px 10px #adadad;
-}
-.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 .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;
-}
-.dijitEditor {
-       border:1px solid #bfbfbf;
-       border-top:0;
-}
-.tundra .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled.png); 
-       background-repeat: no-repeat;
-       width: 18px;
-       height: 18px;
-       text-align: center;
-}
-.tundra .dijitDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled.png); 
-}
-.dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled.png); 
-       background-repeat: no-repeat;
-       width: 18px;
-       height: 18px;
-       text-align: center;
-}
-.dijitDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled.png); 
-}
-.dijitEditorIconSep { background-position: 0px; }
-.dijitEditorIconSave { background-position: -18px; }
-.dijitEditorIconPrint { background-position: -36px; }
-.dijitEditorIconCut { background-position: -54px; }
-.dijitEditorIconCopy { background-position: -72px; }
-.dijitEditorIconPaste { background-position: -90px; }
-.dijitEditorIconDelete { background-position: -108px; }
-.dijitEditorIconCancel { background-position: -126px; }
-.dijitEditorIconUndo { background-position: -144px; }
-.dijitEditorIconRedo { background-position: -162px; }
-.dijitEditorIconSelectAll { background-position: -180px; }
-.dijitEditorIconBold { background-position: -198px; }
-.dijitEditorIconItalic { background-position: -216px; }
-.dijitEditorIconUnderline { background-position: -234px; }
-.dijitEditorIconStrikethrough { background-position: -252px; }
-.dijitEditorIconSuperscript { background-position: -270px; }
-.dijitEditorIconSubscript { background-position: -288px; }
-.dijitEditorIconJustifyCenter { background-position: -306px; }
-.dijitEditorIconJustifyFull { background-position: -324px; }
-.dijitEditorIconJustifyLeft { background-position: -342px; }
-.dijitEditorIconJustifyRight { background-position: -360px; }
-.dijitEditorIconIndent { background-position: -378px; }
-.dijitEditorIconOutdent { background-position: -396px; }
-.dijitEditorIconListBulletIndent { background-position: -414px; }
-.dijitEditorIconListBulletOutdent { background-position: -432px; }
-.dijitEditorIconListNumIndent { background-position: -450px; }
-.dijitEditorIconListNumOutdent { background-position: -468px; }
-.dijitEditorIconTabIndent { background-position: -486px; }
-.dijitEditorIconLeftToRight { background-position: -504px; }
-.dijitEditorIconRightToLeft, .dijitEditorIconToggleDir { background-position: -522px; }
-.dijitEditorIconBackColor { background-position: -540px; }
-.dijitEditorIconForeColor { background-position: -558px; }
-.dijitEditorIconHiliteColor { background-position: -576px; }
-.dijitEditorIconNewPage { background-position: -594px; }
-.dijitEditorIconInsertImage { background-position: -612px; }
-.dijitEditorIconInsertTable { background-position: -630px; }
-.dijitEditorIconSpace { background-position: -648px; }
-.dijitEditorIconInsertHorizontalRule { background-position: -666px; }
-.dijitEditorIconInsertOrderedList { background-position: -684px; }
-.dijitEditorIconInsertUnorderedList { background-position: -702px; }
-.dijitEditorIconCreateLink { background-position: -720px; }
-.dijitEditorIconUnlink { background-position: -738px; }
-.dijitEditorIconViewSource { background-position: -756px; }
-.dijitEditorIconRemoveFormat { background-position: -774px; }
-.dijitEditorIconFullScreen { background-position: -792px; }
-.dijitEditorIconWikiword { background-position: -810px; }
-.dijitColorPalette {
-       border:1px solid #7eabcd;
-       background:#fff;
-       -moz-border-radius: 0px !important;
-}
-.dijitRtl .dijitPlaceHolder {
-       left: auto;
-       right: 0;
-}
-.dijitMenuItemRtl {
-       text-align: right;
-}
-.dj_iequirks .dijitComboButtonRtl BUTTON {
-       
-       float:left;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitComboBoxRtl .dijitArrowButtonContainer {
-       
-       border-right-width: 1px !important;
-       border-right-style: solid !important;
-       border-left-width: 0px !important;
-       border-left-style: none !important;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
-       border-right: 1px solid black !important;
-       border-left: 0px none black !important;
-}
-.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
-       right: 0;
-       left: auto;
-}
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitArrowButtonContainer {
-       float: left;
-}
-.dijitCalendarRtl .dijitCalendarNextYear {
-       margin:0 0.55em 0 0;
-}
-.dijitCalendarRtl .dijitCalendarPreviousYear {
-       margin:0 0 0 0.55em;
-}
-.dijitSliderRtl .dijitSliderImageHandleV {
-       left:auto;
-}
-.dijitSliderRtl .dijitSliderImageHandleH {
-       left:-50%;
-}
-.dijitSliderRtl .dijitSliderMoveableH {
-       right:auto;
-       left:0;
-}
-.dijitSliderRtl .dijitRuleContainerV {
-       float:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleContainerV {
-       text-align:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelV {
-       text-align:left;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelH {
-       zoom:1;
-}
-.dijitSliderRtl .dijitSliderProgressBarH {
-       
-       float:right;
-       right:0;
-       left:auto;
-}
-.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
-       background-position:right;
-       padding-right:25px;
-}
-.dijitTabRtl .dijitTabCloseButton {
-       margin-left: 0px;
-       margin-right: 1em;
-}
-.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
-       width:100%;
-}
-.dijitColorPaletteRtl .dijitColorPaletteUnder {
-       
-       left: auto;
-       right: 0;
-}
-.dijitSelectRtl .dijitButtonContents {
-       text-align: right;
-}
-.tundra .dijitCalendarRtl .dijitCalendarDecrease {
-       background-position: -30px top;
-}
-.tundra .dijitCalendarRtl .dijitCalendarIncrease {
-       background-position: 0px top;
-}
- .dj_ie6 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover,
-.dj_ie7 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover {
-        border-top: 0px; 
-}
-.tundra .dijitDialogRtl .dijitDialogCloseIcon {
-       right: auto;
-       left: 5px;
-}
-.tundra .dijitEditorRtl .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
-}
-.tundra .dijitEditorRtlDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
-}
-.dijitEditorRtl .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
-}
-.dijitEditorRtlDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
-}
-.dijitToolbarRtl .dijitToolbarSeparator {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
-}
-.tundra .dijitMenuItemRtl .dijitMenuExpand {
-       background-position: -7px 0px;
-}
-.tundra .dijitTreeNodeRtl,
-.tundra .dijitTreeNodeRtl .dijitTreeExpandoLeaf {
-       
-    background-image: none;
-}
-.tundra .dijitTreeNodeRtl .dijitTreeExpandoOpened {
-       
-       background-image: url(images/treeExpand_minus_rtl.gif);
-}
-.tundra .dijitTreeNodeRtl .dijitTreeExpandoClosed {
-       background-image: url(images/treeExpand_plus_rtl.gif);
-}
-.tundra .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
-       background-position: -7px 0px;
-}
-.tundra .dijitTabRtl {
-       -moz-box-orient:horizontal;
-       text-align: right;
-}
-.tundra .dijitTabRtl .dijitTabInnerDiv {
-       padding:2px 9px 2px 8px;
-}
-.tundra .tabStrip-disabled .tabStripButtonRtl .dijitTabInnerDiv {
-       
-       padding-bottom: 3px;
-       padding-top: 1px;
-}
-.tundra .tabStripButtonRtl .dijitTabInnerDiv {
-       padding: 3px 2px 4px 2px;
-}
-.tundra .dijitTabPaneWrapper {
-       #zoom: 1;
-}
-.dj_ie-rtl .tundra .dijitTabContainerLeft-tabs {
-       margin-left: 1px !important;
-}
-.dj_ie-rtl .tundra .dijitTabContainerRight-tabs {
-       margin-right: 1px !important;
-}
-.tundra .dijitTabContainerLeft-tabs .dijitTabRtl,
-.tundra .dijitTabContainerRight-tabs .dijitTabRtl {
-       margin-left:0px;
-}
-.dj_ie .tundra .dijitTabRtl .dijitTabInnerDiv {
-       
-       width : 0.1% !important;
-}
-.dj_iequirks-rtl .tundra .dijitTabContainerTopNone,
-.dj_iequirks-rtl .tundra .dijitTabContainerBottomNone {
-       
-       border-left: 1px solid #fff;
-       border-right: 1px solid #fff;
-}
-.tundra .dijitSliderRtl .dijitSliderProgressBarH,
-.tundra .dijitSliderRtl .dijitSliderRemainingBarH,
-.tundra .dijitSliderRtl .dijitSliderLeftBumper,
-.tundra .dijitSliderRtl .dijitSliderRightBumper,
-.tundra .dijitSliderRtl .dijitSliderTopBumper {
-       background-position: top right;
-}
-.tundra .dijitSliderRtl .dijitSliderProgressBarV,
-.tundra .dijitSliderRtl .dijitSliderRemainingBarV,
-.tundra .dijitSliderRtl .dijitSliderBottomBumper {
-       background-position: bottom right;
-}
-.tundra .dijitSliderRtl .dijitSliderLeftBumper {
-       border-left-width: 0px;
-       border-right-width: 1px;
-}
-.tundra .dijitSliderRtl .dijitSliderRightBumper {
-       border-left-width: 1px;
-       border-right-width: 0px;
-}
-.tundra .dijitSliderRtl .dijitSliderIncrementIconH {
-       background-position: -7px 0px;
-}
-.tundra .dijitSliderRtl .dijitSliderDecrementIconH {
-       background-position: -14px 0px;
-}
+       NOTES:
+       ---
+       Dialog.css contains css classes for both Dialog and Tooltip!
+       This because currently a dijit.TooltipDialog exist. Until this is resolved
+       you need to include Dialog.css for both dijits
+       ---
+       Toolbar.css contains classes also used in Editor. Until this is resolved
+       you need to include Toolbar.css for both Toolbar and Editor
+       ---
+       Button.css contains classes for combobox,
+
+*/
+@import url("../dijit.css");
+@import url("../../icons/commonIcons.css");/*sprite containing common icons to be used by all themes*/
+@import url("Common.css");
+@import url("layout/ContentPane.css");
+@import url("layout/TabContainer.css");
+@import url("layout/AccordionContainer.css");
+@import url("layout/SplitContainer.css");
+@import url("layout/BorderContainer.css");
+@import url("form/Common.css");
+@import url("form/Button.css");
+@import url("form/Checkbox.css");
+@import url("form/RadioButton.css");
+@import url("form/Slider.css");
+@import url("form/Select.css");
+@import url("Tree.css");
+@import url("ProgressBar.css");
+@import url("TitlePane.css");
+@import url("Calendar.css");
+@import url("TimePicker.css");
+@import url("Toolbar.css");
+@import url("Dialog.css");
+@import url("Menu.css");
+@import url("Editor.css");
+@import url("../../icons/editorIcons.css"); /* sprite for editor icons to be used by all themes */
+@import url("ColorPalette.css");
+@import url("tundra_rtl.css");
index 0ec76debc5bf21d608f2877dbb902855db05c33c..58b7541fb9aa4b412383a78b331360720592d099 100644 (file)
+/*
+       Adds cosmetic styling to Dijit.  Users may swap with a custom theme CSS file.
 
-.dijitRtl .dijitPlaceHolder {
-       left: auto;
-       right: 0;
-}
-.dijitMenuItemRtl {
-       text-align: right;
-}
-.dj_iequirks .dijitComboButtonRtl BUTTON {
-       
-       float:left;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitComboBoxRtl .dijitArrowButtonContainer {
-       
-       border-right-width: 1px !important;
-       border-right-style: solid !important;
-       border-left-width: 0px !important;
-       border-left-style: none !important;
-}
-.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
-.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
-       border-right: 1px solid black !important;
-       border-left: 0px none black !important;
-}
-.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
-       right: 0;
-       left: auto;
-}
-.dijitTextBoxRtl .dijitSpinnerButtonContainer,
-.dijitTextBoxRtl .dijitValidationContainer,
-.dijitTextBoxRtl .dijitArrowButtonContainer {
-       float: left;
-}
-.dijitCalendarRtl .dijitCalendarNextYear {
-       margin:0 0.55em 0 0;
-}
-.dijitCalendarRtl .dijitCalendarPreviousYear {
-       margin:0 0 0 0.55em;
-}
-.dijitSliderRtl .dijitSliderImageHandleV {
-       left:auto;
-}
-.dijitSliderRtl .dijitSliderImageHandleH {
-       left:-50%;
-}
-.dijitSliderRtl .dijitSliderMoveableH {
-       right:auto;
-       left:0;
-}
-.dijitSliderRtl .dijitRuleContainerV {
-       float:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleContainerV {
-       text-align:right;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelV {
-       text-align:left;
-}
-.dj_ie .dijitSliderRtl .dijitRuleLabelH {
-       zoom:1;
-}
-.dijitSliderRtl .dijitSliderProgressBarH {
-       
-       float:right;
-       right:0;
-       left:auto;
-}
-.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
-       background-position:right;
-       padding-right:25px;
-}
-.dijitTabRtl .dijitTabCloseButton {
-       margin-left: 0px;
-       margin-right: 1em;
-}
-.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
-       width:100%;
-}
-.dijitColorPaletteRtl .dijitColorPaletteUnder {
-       
-       left: auto;
-       right: 0;
-}
-.dijitSelectRtl .dijitButtonContents {
-       text-align: right;
-}
-.tundra .dijitCalendarRtl .dijitCalendarDecrease {
-       background-position: -30px top;
-}
-.tundra .dijitCalendarRtl .dijitCalendarIncrease {
-       background-position: 0px top;
-}
- .dj_ie6 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover,
-.dj_ie7 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover {
-        border-top: 0px; 
-}
-.tundra .dijitDialogRtl .dijitDialogCloseIcon {
-       right: auto;
-       left: 5px;
-}
-.tundra .dijitEditorRtl .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
-}
-.tundra .dijitEditorRtlDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
-}
-.dijitEditorRtl .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
-}
-.dijitEditorRtlDisabled .dijitEditorIcon {
-       background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
-}
-.dijitToolbarRtl .dijitToolbarSeparator {
-       background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
-}
-.tundra .dijitMenuItemRtl .dijitMenuExpand {
-       background-position: -7px 0px;
-}
-.tundra .dijitTreeNodeRtl,
-.tundra .dijitTreeNodeRtl .dijitTreeExpandoLeaf {
-       
-    background-image: none;
-}
-.tundra .dijitTreeNodeRtl .dijitTreeExpandoOpened {
-       
-       background-image: url(images/treeExpand_minus_rtl.gif);
-}
-.tundra .dijitTreeNodeRtl .dijitTreeExpandoClosed {
-       background-image: url(images/treeExpand_plus_rtl.gif);
-}
-.tundra .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
-       background-position: -7px 0px;
-}
-.tundra .dijitTabRtl {
-       -moz-box-orient:horizontal;
-       text-align: right;
-}
-.tundra .dijitTabRtl .dijitTabInnerDiv {
-       padding:2px 9px 2px 8px;
-}
-.tundra .tabStrip-disabled .tabStripButtonRtl .dijitTabInnerDiv {
-       
-       padding-bottom: 3px;
-       padding-top: 1px;
-}
-.tundra .tabStripButtonRtl .dijitTabInnerDiv {
-       padding: 3px 2px 4px 2px;
-}
-.tundra .dijitTabPaneWrapper {
-       #zoom: 1;
-}
-.dj_ie-rtl .tundra .dijitTabContainerLeft-tabs {
-       margin-left: 1px !important;
-}
-.dj_ie-rtl .tundra .dijitTabContainerRight-tabs {
-       margin-right: 1px !important;
-}
-.tundra .dijitTabContainerLeft-tabs .dijitTabRtl,
-.tundra .dijitTabContainerRight-tabs .dijitTabRtl {
-       margin-left:0px;
-}
-.dj_ie .tundra .dijitTabRtl .dijitTabInnerDiv {
-       
-       width : 0.1% !important;
-}
-.dj_iequirks-rtl .tundra .dijitTabContainerTopNone,
-.dj_iequirks-rtl .tundra .dijitTabContainerBottomNone {
-       
-       border-left: 1px solid #fff;
-       border-right: 1px solid #fff;
-}
-.tundra .dijitSliderRtl .dijitSliderProgressBarH,
-.tundra .dijitSliderRtl .dijitSliderRemainingBarH,
-.tundra .dijitSliderRtl .dijitSliderLeftBumper,
-.tundra .dijitSliderRtl .dijitSliderRightBumper,
-.tundra .dijitSliderRtl .dijitSliderTopBumper {
-       background-position: top right;
-}
-.tundra .dijitSliderRtl .dijitSliderProgressBarV,
-.tundra .dijitSliderRtl .dijitSliderRemainingBarV,
-.tundra .dijitSliderRtl .dijitSliderBottomBumper {
-       background-position: bottom right;
-}
-.tundra .dijitSliderRtl .dijitSliderLeftBumper {
-       border-left-width: 0px;
-       border-right-width: 1px;
-}
-.tundra .dijitSliderRtl .dijitSliderRightBumper {
-       border-left-width: 1px;
-       border-right-width: 0px;
-}
-.tundra .dijitSliderRtl .dijitSliderIncrementIconH {
-       background-position: -7px 0px;
-}
-.tundra .dijitSliderRtl .dijitSliderDecrementIconH {
-       background-position: -14px 0px;
-}
+       NOTES:
+       ---
+       Dialog.css contains css classes for both Dialog and Tooltip!
+       This because currently a dijit.TooltipDialog exist. Until this is resolved
+       you need to include Dialog.css for both dijits
+       ---
+       Toolbar.css contains classes also used in Editor. Until this is resolved
+       you need to include Toolbar.css for both Toolbar and Editor
+       ---
+       Button.css contains classes for combobox,
+
+*/
+/* RTL files */
+@import url("../dijit_rtl.css");
+@import url("Calendar_rtl.css");
+@import url("TimePicker_rtl.css");
+@import url("Dialog_rtl.css");
+@import url("Editor_rtl.css");
+@import url("../../icons/editorIcons_rtl.css");/* RTL sprite for editor icons to be used by all themes*/
+@import url("Menu_rtl.css");
+@import url("Tree_rtl.css");
+@import url("TitlePane_rtl.css");
+@import url("layout/TabContainer_rtl.css");
+@import url("form/Slider_rtl.css");
index aa51b0023464f44800951bbdb5d563d1258b8b82..5e1b25efb55608bed895f7d595fdd9983c56b67d 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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);
-}});
+
+
+dojo.declare("dijit.tree.ForestStoreModel", dijit.tree.TreeStoreModel, {
+       // summary:
+       //              Interface between a dijit.Tree and a dojo.data store that doesn't have a root item,
+       //              a.k.a. a store that has multiple "top level" items.
+       //
+       // description
+       //              Use this class to wrap a dojo.data store, making all the items matching the specified query
+       //              appear as children of a fabricated "root item".  If no query is specified then all the
+       //              items returned by fetch() on the underlying store become children of the root item.
+       //              This class allows dijit.Tree to assume a single root item, even if the store doesn't have one.
+       //
+       //              When using this class the developer must override a number of methods according to their app and
+       //              data, including:
+       //                      - onNewRootItem
+       //                      - onAddToRoot
+       //                      - onLeaveRoot
+       //                      - onNewItem
+       //                      - onSetItem
+
+       // Parameters to constructor
+
+       // rootId: String
+       //              ID of fabricated root item
+       rootId: "$root$",
+
+       // rootLabel: String
+       //              Label of fabricated root item
+       rootLabel: "ROOT",
+
+       // query: String
+       //              Specifies the set of children of the root item.
+       // example:
+       //      |       {type:'continent'}
+       query: null,
+
+       // End of parameters to constructor
+
+       constructor: function(params){
+               // summary:
+               //              Sets up variables, etc.
+               // tags:
+               //              private
+
+               // Make dummy root item
+               this.root = {
+                       store: this,
+                       root: true,
+                       id: params.rootId,
+                       label: params.rootLabel,
+                       children: params.rootChildren   // optional param
+               };
+       },
+
+       // =======================================================================
+       // Methods for traversing hierarchy
+
+       mayHaveChildren: function(/*dojo.data.Item*/ item){
+               // summary:
+               //              Tells if an item has or may have children.  Implementing logic here
+               //              avoids showing +/- expando icon for nodes that we know don't have children.
+               //              (For efficiency reasons we may not want to check if an element actually
+               //              has children until user clicks the expando node)
+               // tags:
+               //              extension
+               return item === this.root || this.inherited(arguments);
+       },
+
+       getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ callback, /*function*/ onError){
+               // summary:
+               //              Calls onComplete() with array of child items of given parent item, all loaded.
+               if(parentItem === this.root){
+                       if(this.root.children){
+                               // already loaded, just return
+                               callback(this.root.children);
+                       }else{
+                               this.store.fetch({
+                                       query: this.query,
+                                       onComplete: dojo.hitch(this, function(items){
+                                               this.root.children = items;
+                                               callback(items);
+                                       }),
+                                       onError: onError
+                               });
+                       }
+               }else{
+                       this.inherited(arguments);
+               }
+       },
+
+       // =======================================================================
+       // Inspecting items
+
+       isItem: function(/* anything */ something){
+               return (something === this.root) ? true : this.inherited(arguments);
+       },
+
+       fetchItemByIdentity: function(/* object */ keywordArgs){
+               if(keywordArgs.identity == this.root.id){
+                       var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
+                       if(keywordArgs.onItem){
+                               keywordArgs.onItem.call(scope, this.root);
+                       }
+               }else{
+                       this.inherited(arguments);
+               }
+       },
+
+       getIdentity: function(/* item */ item){
+               return (item === this.root) ? this.root.id : this.inherited(arguments);
+       },
+
+       getLabel: function(/* item */ item){
+               return  (item === this.root) ? this.root.label : this.inherited(arguments);
+       },
+
+       // =======================================================================
+       // Write interface
+
+       newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
+               // summary:
+               //              Creates a new item.   See dojo.data.api.Write for details on args.
+               //              Used in drag & drop when item from external source dropped onto tree.
+               if(parent === this.root){
+                       this.onNewRootItem(args);
+                       return this.store.newItem(args);
+               }else{
+                       return this.inherited(arguments);
+               }
+       },
+
+       onNewRootItem: function(args){
+               // summary:
+               //              User can override this method to modify a new element that's being
+               //              added to the root of the tree, for example to add a flag like root=true
+       },
+
+       pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
+               // summary:
+               //              Move or copy an item from one parent item to another.
+               //              Used in drag & drop
+               if(oldParentItem === this.root){
+                       if(!bCopy){
+                               // It's onLeaveRoot()'s responsibility to modify the item so it no longer matches
+                               // this.query... thus triggering an onChildrenChange() event to notify the Tree
+                               // that this element is no longer a child of the root node
+                               this.onLeaveRoot(childItem);
+                       }
+               }
+               dijit.tree.TreeStoreModel.prototype.pasteItem.call(this, childItem,
+                       oldParentItem === this.root ? null : oldParentItem,
+                       newParentItem === this.root ? null : newParentItem,
+                       bCopy,
+                       insertIndex
+               );
+               if(newParentItem === this.root){
+                       // It's onAddToRoot()'s responsibility to modify the item so it matches
+                       // this.query... thus triggering an onChildrenChange() event to notify the Tree
+                       // that this element is now a child of the root node
+                       this.onAddToRoot(childItem);
+               }
+       },
+
+       // =======================================================================
+       // Handling for top level children
+
+       onAddToRoot: function(/* item */ item){
+               // summary:
+               //              Called when item added to root of tree; user must override this method
+               //              to modify the item so that it matches the query for top level items
+               // example:
+               //      |       store.setValue(item, "root", true);
+               // tags:
+               //              extension
+               console.log(this, ": item ", item, " added to root");
+       },
+
+       onLeaveRoot: function(/* item */ item){
+               // summary:
+               //              Called when item removed from root of tree; user must override this method
+               //              to modify the item so it doesn't match the query for top level items
+               // example:
+               //      |       store.unsetAttribute(item, "root");
+               // tags:
+               //              extension
+               console.log(this, ": item ", item, " removed from root");
+       },
+
+       // =======================================================================
+       // Events from data store
+
+       _requeryTop: function(){
+               // reruns the query for the children of the root node,
+               // sending out an onSet notification if those children have changed
+               var oldChildren = this.root.children || [];
+               this.store.fetch({
+                       query: this.query,
+                       onComplete: dojo.hitch(this, function(newChildren){
+                               this.root.children = newChildren;
+
+                               // If the list of children or the order of children has changed...
+                               if(oldChildren.length != newChildren.length ||
+                                       dojo.some(oldChildren, function(item, idx){ return newChildren[idx] != item;})){
+                                       this.onChildrenChange(this.root, newChildren);
+                               }
+                       })
+               });
+       },
+
+       onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
+               // summary:
+               //              Handler for when new items appear in the store.  Developers should override this
+               //              method to be more efficient based on their app/data.
+               // description:
+               //              Note that the default implementation requeries the top level items every time
+               //              a new item is created, since any new item could be a top level item (even in
+               //              addition to being a child of another item, since items can have multiple parents).
+               //
+               //              If developers can detect which items are possible top level items (based on the item and the
+               //              parentInfo parameters), they should override this method to only call _requeryTop() for top
+               //              level items.  Often all top level items have parentInfo==null, but
+               //              that will depend on which store you use and what your data is like.
+               // tags:
+               //              extension
+               this._requeryTop();
+
+               this.inherited(arguments);
+       },
+
+       onDeleteItem: function(/*Object*/ item){
+               // summary:
+               //              Handler for delete notifications from underlying store
+
+               // check if this was a child of root, and if so send notification that root's children
+               // have changed
+               if(dojo.indexOf(this.root.children, item) != -1){
+                       this._requeryTop();
+               }
+
+               this.inherited(arguments);
+       },
+
+       onSetItem: function(/* item */ item,
+                                       /* attribute-name-string */ attribute,
+                                       /* object | array */ oldValue,
+                                       /* object | array */ newValue){
+               // summary:
+               //              Updates the tree view according to changes to an item in the data store.
+               //              Developers should override this method to be more efficient based on their app/data.
+               // description:
+               //              Handles updates to an item's children by calling onChildrenChange(), and
+               //              other updates to an item by calling onChange().
+               //
+               //              Also, any change to any item re-executes the query for the tree's top-level items,
+               //              since this modified item may have started/stopped matching the query for top level items.
+               //
+               //              If possible, developers should override this function to only call _requeryTop() when
+               //              the change to the item has caused it to stop/start being a top level item in the tree.
+               // tags:
+               //              extension
+
+               this._requeryTop();
+               this.inherited(arguments);
+       }
+
+});
+
 }
index c03bef526ebb71baccd031b85037584676d4ec8e..5164176b7df7aa87aca748b8bdef9b6217204843 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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{
-dojo.forEach(_e,function(_12,idx){
-if(!_b.isItemLoaded(_12)){
-_b.loadItem({item:_12,onItem:function(_13){
-_e[idx]=_13;
-if(--_10==0){
-_9(_e);
-}
-},onError:_a});
-}
-});
-}
-},isItem:function(_14){
-return this.store.isItem(_14);
-},fetchItemByIdentity:function(_15){
-this.store.fetchItemByIdentity(_15);
-},getIdentity:function(_16){
-return this.store.getIdentity(_16);
-},getLabel:function(_17){
-if(this.labelAttr){
-return this.store.getValue(_17,this.labelAttr);
-}else{
-return this.store.getLabel(_17);
-}
-},newItem:function(_18,_19,_1a){
-var _1b={parent:_19,attribute:this.childrenAttrs[0],insertIndex:_1a};
-if(this.newItemIdAttr&&_18[this.newItemIdAttr]){
-this.fetchItemByIdentity({identity:_18[this.newItemIdAttr],scope:this,onItem:function(_1c){
-if(_1c){
-this.pasteItem(_1c,null,_19,true,_1a);
-}else{
-this.store.newItem(_18,_1b);
-}
-}});
-}else{
-this.store.newItem(_18,_1b);
-}
-},pasteItem:function(_1d,_1e,_1f,_20,_21){
-var _22=this.store,_23=this.childrenAttrs[0];
-if(_1e){
-dojo.forEach(this.childrenAttrs,function(_24){
-if(_22.containsValue(_1e,_24,_1d)){
-if(!_20){
-var _25=dojo.filter(_22.getValues(_1e,_24),function(x){
-return x!=_1d;
-});
-_22.setValues(_1e,_24,_25);
-}
-_23=_24;
-}
-});
-}
-if(_1f){
-if(typeof _21=="number"){
-var _26=_22.getValues(_1f,_23).slice();
-_26.splice(_21,0,_1d);
-_22.setValues(_1f,_23,_26);
-}else{
-_22.setValues(_1f,_23,_22.getValues(_1f,_23).concat(_1d));
-}
-}
-},onChange:function(_27){
-},onChildrenChange:function(_28,_29){
-},onDelete:function(_2a,_2b){
-},onNewItem:function(_2c,_2d){
-if(!_2d){
-return;
-}
-this.getChildren(_2d.item,dojo.hitch(this,function(_2e){
-this.onChildrenChange(_2d.item,_2e);
-}));
-},onDeleteItem:function(_2f){
-this.onDelete(_2f);
-},onSetItem:function(_30,_31,_32,_33){
-if(dojo.indexOf(this.childrenAttrs,_31)!=-1){
-this.getChildren(_30,dojo.hitch(this,function(_34){
-this.onChildrenChange(_30,_34);
-}));
-}else{
-this.onChange(_30);
-}
-}});
+
+
+dojo.declare(
+               "dijit.tree.TreeStoreModel",
+               null,
+       {
+               // summary:
+               //              Implements dijit.Tree.model connecting to a store with a single
+               //              root item.  Any methods passed into the constructor will override
+               //              the ones defined here.
+
+               // store: dojo.data.Store
+               //              Underlying store
+               store: null,
+
+               // childrenAttrs: String[]
+               //              One or more attribute names (attributes in the dojo.data item) that specify that item's children
+               childrenAttrs: ["children"],
+
+               // newItemIdAttr: String
+               //              Name of attribute in the Object passed to newItem() that specifies the id.
+               //
+               //              If newItemIdAttr is set then it's used when newItem() is called to see if an
+               //              item with the same id already exists, and if so just links to the old item
+               //              (so that the old item ends up with two parents).
+               //
+               //              Setting this to null or "" will make every drop create a new item.
+               newItemIdAttr: "id",
+
+               // labelAttr: String
+               //              If specified, get label for tree node from this attribute, rather
+               //              than by calling store.getLabel()
+               labelAttr: "",
+
+               // root: [readonly] dojo.data.Item
+               //              Pointer to the root item (read only, not a parameter)
+               root: null,
+
+               // query: anything
+               //              Specifies datastore query to return the root item for the tree.
+               //              Must only return a single item.   Alternately can just pass in pointer
+               //              to root item.
+               // example:
+               //      |       {id:'ROOT'}
+               query: null,
+
+               // deferItemLoadingUntilExpand: Boolean
+               //              Setting this to true will cause the TreeStoreModel to defer calling loadItem on nodes
+               //              until they are expanded. This allows for lazying loading where only one
+               //              loadItem (and generally one network call, consequently) per expansion
+               //              (rather than one for each child).
+               //              This relies on partial loading of the children items; each children item of a
+               //              fully loaded item should contain the label and info about having children.
+               deferItemLoadingUntilExpand: false,
+
+               constructor: function(/* Object */ args){
+                       // summary:
+                       //              Passed the arguments listed above (store, etc)
+                       // tags:
+                       //              private
+
+                       dojo.mixin(this, args);
+
+                       this.connects = [];
+
+                       var store = this.store;
+                       if(!store.getFeatures()['dojo.data.api.Identity']){
+                               throw new Error("dijit.Tree: store must support dojo.data.Identity");
+                       }
+
+                       // if the store supports Notification, subscribe to the notification events
+                       if(store.getFeatures()['dojo.data.api.Notification']){
+                               this.connects = this.connects.concat([
+                                       dojo.connect(store, "onNew", this, "onNewItem"),
+                                       dojo.connect(store, "onDelete", this, "onDeleteItem"),
+                                       dojo.connect(store, "onSet", this, "onSetItem")
+                               ]);
+                       }
+               },
+
+               destroy: function(){
+                       dojo.forEach(this.connects, dojo.disconnect);
+                       // TODO: should cancel any in-progress processing of getRoot(), getChildren()
+               },
+
+               // =======================================================================
+               // Methods for traversing hierarchy
+
+               getRoot: function(onItem, onError){
+                       // summary:
+                       //              Calls onItem with the root item for the tree, possibly a fabricated item.
+                       //              Calls onError on error.
+                       if(this.root){
+                               onItem(this.root);
+                       }else{
+                               this.store.fetch({
+                                       query: this.query,
+                                       onComplete: dojo.hitch(this, function(items){
+                                               if(items.length != 1){
+                                                       throw new Error(this.declaredClass + ": query " + dojo.toJson(this.query) + " returned " + items.length +
+                                                               " items, but must return exactly one item");
+                                               }
+                                               this.root = items[0];
+                                               onItem(this.root);
+                                       }),
+                                       onError: onError
+                               });
+                       }
+               },
+
+               mayHaveChildren: function(/*dojo.data.Item*/ item){
+                       // summary:
+                       //              Tells if an item has or may have children.  Implementing logic here
+                       //              avoids showing +/- expando icon for nodes that we know don't have children.
+                       //              (For efficiency reasons we may not want to check if an element actually
+                       //              has children until user clicks the expando node)
+                       return dojo.some(this.childrenAttrs, function(attr){
+                               return this.store.hasAttribute(item, attr);
+                       }, this);
+               },
+
+               getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete, /*function*/ onError){
+                       // summary:
+                       //              Calls onComplete() with array of child items of given parent item, all loaded.
+
+                       var store = this.store;
+                       if(!store.isItemLoaded(parentItem)){
+                               // The parent is not loaded yet, we must be in deferItemLoadingUntilExpand
+                               // mode, so we will load it and just return the children (without loading each
+                               // child item)
+                               var getChildren = dojo.hitch(this, arguments.callee);
+                               store.loadItem({
+                                       item: parentItem,
+                                       onItem: function(parentItem){
+                                               getChildren(parentItem, onComplete, onError);
+                                       },
+                                       onError: onError
+                               });
+                               return;
+                       }
+                       // get children of specified item
+                       var childItems = [];
+                       for(var i=0; i<this.childrenAttrs.length; i++){
+                               var vals = store.getValues(parentItem, this.childrenAttrs[i]);
+                               childItems = childItems.concat(vals);
+                       }
+
+                       // count how many items need to be loaded
+                       var _waitCount = 0;
+                       if(!this.deferItemLoadingUntilExpand){
+                               dojo.forEach(childItems, function(item){ if(!store.isItemLoaded(item)){ _waitCount++; } });
+                       }
+
+                       if(_waitCount == 0){
+                               // all items are already loaded (or we aren't loading them).  proceed...
+                               onComplete(childItems);
+                       }else{
+                               // still waiting for some or all of the items to load
+                               dojo.forEach(childItems, function(item, idx){
+                                       if(!store.isItemLoaded(item)){
+                                               store.loadItem({
+                                                       item: item,
+                                                       onItem: function(item){
+                                                               childItems[idx] = item;
+                                                               if(--_waitCount == 0){
+                                                                       // all nodes have been loaded, send them to the tree
+                                                                       onComplete(childItems);
+                                                               }
+                                                       },
+                                                       onError: onError
+                                               });
+                                       }
+                               });
+                       }
+               },
+
+               // =======================================================================
+               // Inspecting items
+
+               isItem: function(/* anything */ something){
+                       return this.store.isItem(something);    // Boolean
+               },
+
+               fetchItemByIdentity: function(/* object */ keywordArgs){
+                       this.store.fetchItemByIdentity(keywordArgs);
+               },
+
+               getIdentity: function(/* item */ item){
+                       return this.store.getIdentity(item);    // Object
+               },
+
+               getLabel: function(/*dojo.data.Item*/ item){
+                       // summary:
+                       //              Get the label for an item
+                       if(this.labelAttr){
+                               return this.store.getValue(item,this.labelAttr);        // String
+                       }else{
+                               return this.store.getLabel(item);       // String
+                       }
+               },
+
+               // =======================================================================
+               // Write interface
+
+               newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
+                       // summary:
+                       //              Creates a new item.   See `dojo.data.api.Write` for details on args.
+                       //              Used in drag & drop when item from external source dropped onto tree.
+                       // description:
+                       //              Developers will need to override this method if new items get added
+                       //              to parents with multiple children attributes, in order to define which
+                       //              children attribute points to the new item.
+
+                       var pInfo = {parent: parent, attribute: this.childrenAttrs[0]}, LnewItem;
+
+                       if(this.newItemIdAttr && args[this.newItemIdAttr]){
+                               // Maybe there's already a corresponding item in the store; if so, reuse it.
+                               this.fetchItemByIdentity({identity: args[this.newItemIdAttr], scope: this, onItem: function(item){
+                                       if(item){
+                                               // There's already a matching item in store, use it
+                                               this.pasteItem(item, null, parent, true, insertIndex);
+                                       }else{
+                                               // Create new item in the tree, based on the drag source.
+                                               LnewItem=this.store.newItem(args, pInfo);
+                                               if (LnewItem && (insertIndex!=undefined)){
+                                                       // Move new item to desired position
+                                                       this.pasteItem(LnewItem, parent, parent, false, insertIndex);
+                                               }
+                                       }
+                               }});
+                       }else{
+                               // [as far as we know] there is no id so we must assume this is a new item
+                               LnewItem=this.store.newItem(args, pInfo);
+                               if (LnewItem && (insertIndex!=undefined)){
+                                       // Move new item to desired position
+                                       this.pasteItem(LnewItem, parent, parent, false, insertIndex);
+                               }
+                       }
+               },
+
+               pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
+                       // summary:
+                       //              Move or copy an item from one parent item to another.
+                       //              Used in drag & drop
+                       var store = this.store,
+                               parentAttr = this.childrenAttrs[0];     // name of "children" attr in parent item
+
+                       // remove child from source item, and record the attribute that child occurred in
+                       if(oldParentItem){
+                               dojo.forEach(this.childrenAttrs, function(attr){
+                                       if(store.containsValue(oldParentItem, attr, childItem)){
+                                               if(!bCopy){
+                                                       var values = dojo.filter(store.getValues(oldParentItem, attr), function(x){
+                                                               return x != childItem;
+                                                       });
+                                                       store.setValues(oldParentItem, attr, values);
+                                               }
+                                               parentAttr = attr;
+                                       }
+                               });
+                       }
+
+                       // modify target item's children attribute to include this item
+                       if(newParentItem){
+                               if(typeof insertIndex == "number"){
+                                       // call slice() to avoid modifying the original array, confusing the data store
+                                       var childItems = store.getValues(newParentItem, parentAttr).slice();
+                                       childItems.splice(insertIndex, 0, childItem);
+                                       store.setValues(newParentItem, parentAttr, childItems);
+                               }else{
+                                       store.setValues(newParentItem, parentAttr,
+                                               store.getValues(newParentItem, parentAttr).concat(childItem));
+                               }
+                       }
+               },
+
+               // =======================================================================
+               // Callbacks
+
+               onChange: function(/*dojo.data.Item*/ item){
+                       // summary:
+                       //              Callback whenever an item has changed, so that Tree
+                       //              can update the label, icon, etc.   Note that changes
+                       //              to an item's children or parent(s) will trigger an
+                       //              onChildrenChange() so you can ignore those changes here.
+                       // tags:
+                       //              callback
+               },
+
+               onChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
+                       // summary:
+                       //              Callback to do notifications about new, updated, or deleted items.
+                       // tags:
+                       //              callback
+               },
+
+               onDelete: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
+                       // summary:
+                       //              Callback when an item has been deleted.
+                       // description:
+                       //              Note that there will also be an onChildrenChange() callback for the parent
+                       //              of this item.
+                       // tags:
+                       //              callback
+               },
+
+               // =======================================================================
+               // Events from data store
+
+               onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
+                       // summary:
+                       //              Handler for when new items appear in the store, either from a drop operation
+                       //              or some other way.   Updates the tree view (if necessary).
+                       // description:
+                       //              If the new item is a child of an existing item,
+                       //              calls onChildrenChange() with the new list of children
+                       //              for that existing item.
+                       //
+                       // tags:
+                       //              extension
+
+                       // We only care about the new item if it has a parent that corresponds to a TreeNode
+                       // we are currently displaying
+                       if(!parentInfo){
+                               return;
+                       }
+
+                       // Call onChildrenChange() on parent (ie, existing) item with new list of children
+                       // In the common case, the new list of children is simply parentInfo.newValue or
+                       // [ parentInfo.newValue ], although if items in the store has multiple
+                       // child attributes (see `childrenAttr`), then it's a superset of parentInfo.newValue,
+                       // so call getChildren() to be sure to get right answer.
+                       this.getChildren(parentInfo.item, dojo.hitch(this, function(children){
+                               this.onChildrenChange(parentInfo.item, children);
+                       }));
+               },
+
+               onDeleteItem: function(/*Object*/ item){
+                       // summary:
+                       //              Handler for delete notifications from underlying store
+                       this.onDelete(item);
+               },
+
+               onSetItem: function(/* item */ item,
+                                               /* attribute-name-string */ attribute,
+                                               /* object | array */ oldValue,
+                                               /* object | array */ newValue){
+                       // summary:
+                       //              Updates the tree view according to changes in the data store.
+                       // description:
+                       //              Handles updates to an item's children by calling onChildrenChange(), and
+                       //              other updates to an item by calling onChange().
+                       //
+                       //              See `onNewItem` for more details on handling updates to an item's children.
+                       // tags:
+                       //              extension
+
+                       if(dojo.indexOf(this.childrenAttrs, attribute) != -1){
+                               // item's children list changed
+                               this.getChildren(item, dojo.hitch(this, function(children){
+                                       // See comments in onNewItem() about calling getChildren()
+                                       this.onChildrenChange(item, children);
+                               }));
+                       }else{
+                               // item's label/icon/etc. changed.
+                               this.onChange(item);
+                       }
+               }
+       });
+
 }
index e925283df8c71e12d04b43d61871241bf57796b4..9ee8e32ba188e7162baf2735457a590bc3c66277 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.tree._dndContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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","");
-}});
+
+
+dojo.getObject("tree", true, dojo);
+
+dijit.tree._compareNodes = function(n1, n2){
+       if(n1 === n2){
+               return 0;
+       }
+       
+       if('sourceIndex' in document.documentElement){ //IE
+               //TODO: does not yet work if n1 and/or n2 is a text node
+               return n1.sourceIndex - n2.sourceIndex;
+       }else if('compareDocumentPosition' in document.documentElement){ //FF, Opera
+               return n1.compareDocumentPosition(n2) & 2 ? 1: -1;
+       }else if(document.createRange){ //Webkit
+               var r1 = doc.createRange();
+               r1.setStartBefore(n1);
+
+               var r2 = doc.createRange();
+               r2.setStartBefore(n2);
+
+               return r1.compareBoundaryPoints(r1.END_TO_END, r2);
+       }else{
+               throw Error("dijit.tree._compareNodes don't know how to compare two different nodes in this browser");
+       }
+};
+
+dojo.declare("dijit.tree._dndContainer",
+       null,
+       {
+
+               // summary:
+               //              This is a base class for `dijit.tree._dndSelector`, and isn't meant to be used directly.
+               //              It's modeled after `dojo.dnd.Container`.
+               // tags:
+               //              protected
+
+               /*=====
+               // current: DomNode
+               //              The currently hovered TreeNode.rowNode (which is the DOM node
+               //              associated w/a given node in the tree, excluding it's descendants)
+               current: null,
+               =====*/
+
+               constructor: function(tree, params){
+                       // summary:
+                       //              A constructor of the Container
+                       // tree: Node
+                       //              Node or node's id to build the container on
+                       // params: dijit.tree.__SourceArgs
+                       //              A dict of parameters, which gets mixed into the object
+                       // tags:
+                       //              private
+                       this.tree = tree;
+                       this.node = tree.domNode;       // TODO: rename; it's not a TreeNode but the whole Tree
+                       dojo.mixin(this, params);
+
+                       // class-specific variables
+                       this.map = {};
+                       this.current = null;    // current TreeNode's DOM node
+
+                       // states
+                       this.containerState = "";
+                       dojo.addClass(this.node, "dojoDndContainer");
+
+                       // set up events
+                       this.events = [
+                               // container level events
+                               dojo.connect(this.node, "onmouseenter", this, "onOverEvent"),
+                               dojo.connect(this.node, "onmouseleave", this, "onOutEvent"),
+
+                               // switching between TreeNodes
+                               dojo.connect(this.tree, "_onNodeMouseEnter", this, "onMouseOver"),
+                               dojo.connect(this.tree, "_onNodeMouseLeave", this, "onMouseOut"),
+
+                               // cancel text selection and text dragging
+                               dojo.connect(this.node, "ondragstart", dojo, "stopEvent"),
+                               dojo.connect(this.node, "onselectstart", dojo, "stopEvent")
+                       ];
+               },
+
+               getItem: function(/*String*/ key){
+                       // summary:
+                       //              Returns the dojo.dnd.Item (representing a dragged node) by it's key (id).
+                       //              Called by dojo.dnd.Source.checkAcceptance().
+                       // tags:
+                       //              protected
+
+                       var widget = this.selection[key],
+                               ret = {
+                                       data: widget,
+                                       type: ["treeNode"]
+                               };
+
+                       return ret;     // dojo.dnd.Item
+               },
+
+               destroy: function(){
+                       // summary:
+                       //              Prepares this object to be garbage-collected
+
+                       dojo.forEach(this.events, dojo.disconnect);
+                       // this.clearItems();
+                       this.node = this.parent = null;
+               },
+
+               // mouse events
+               onMouseOver: function(/*TreeNode*/ widget, /*Event*/ evt){
+                       // summary:
+                       //              Called when mouse is moved over a TreeNode
+                       // tags:
+                       //              protected
+                       this.current = widget;
+               },
+
+               onMouseOut: function(/*TreeNode*/ widget, /*Event*/ evt){
+                       // summary:
+                       //              Called when mouse is moved away from a TreeNode
+                       // tags:
+                       //              protected
+                       this.current = null;
+               },
+
+               _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.replaceClass(this.node, prefix + newState, prefix + this[state]);
+                       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);
+               },
+
+               onOverEvent: function(){
+                       // summary:
+                       //              This function is called once, when mouse is over our container
+                       // tags:
+                       //              protected
+                       this._changeState("Container", "Over");
+               },
+
+               onOutEvent: function(){
+                       // summary:
+                       //              This function is called once, when mouse is out of our container
+                       // tags:
+                       //              protected
+                       this._changeState("Container", "");
+               }
+});
+
 }
index 3d77955986ff9c761509e252c1692f9bd269e005..5f9310e7138b2bbff43a66317a1ce7a649b404e5 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.tree._dndSelector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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);
-}
-}});
+
+
+dojo.declare("dijit.tree._dndSelector",
+       dijit.tree._dndContainer,
+       {
+               // summary:
+               //              This is a base class for `dijit.tree.dndSource` , and isn't meant to be used directly.
+               //              It's based on `dojo.dnd.Selector`.
+               // tags:
+               //              protected
+
+               /*=====
+               // selection: Hash<String, DomNode>
+               //              (id, DomNode) map for every TreeNode that's currently selected.
+               //              The DOMNode is the TreeNode.rowNode.
+               selection: {},
+               =====*/
+
+               constructor: function(tree, params){
+                       // summary:
+                       //              Initialization
+                       // tags:
+                       //              private
+
+                       this.selection={};
+                       this.anchor = null;
+
+                       dijit.setWaiState(this.tree.domNode, "multiselect", !this.singular);
+
+                       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: Boolean
+               //              Allows selection of only one element, if true.
+               //              Tree hasn't been tested in singular=true mode, unclear if it works.
+               singular: false,
+
+               // methods
+               getSelectedTreeNodes: function(){
+                       // summary:
+                       //              Returns a list of selected node(s).
+                       //              Used by dndSource on the start of a drag.
+                       // tags:
+                       //              protected
+                       var nodes=[], sel = this.selection;
+                       for(var i in sel){
+                               nodes.push(sel[i]);
+                       }
+                       return nodes;
+               },
+
+               selectNone: function(){
+                       // summary:
+                       //              Unselects all items
+                       // tags:
+                       //              private
+
+                       this.setSelection([]);
+                       return this;    // self
+               },
+
+               destroy: function(){
+                       // summary:
+                       //              Prepares the object to be garbage-collected
+                       this.inherited(arguments);
+                       this.selection = this.anchor = null;
+               },
+               addTreeNode: function(/*dijit._TreeNode*/node, /*Boolean?*/isAnchor){
+                       // summary
+                       //              add node to current selection
+                       // node: Node
+                       //              node to add
+                       // isAnchor: Boolean
+                       //              Whether the node should become anchor.
+
+                       this.setSelection(this.getSelectedTreeNodes().concat( [node] ));
+                       if(isAnchor){ this.anchor = node; }
+                       return node;
+               },
+               removeTreeNode: function(/*dijit._TreeNode*/node){
+                       // summary
+                       //              remove node from current selection
+                       // node: Node
+                       //              node to remove
+                       this.setSelection(this._setDifference(this.getSelectedTreeNodes(), [node]))
+                       return node;
+               },
+               isTreeNodeSelected: function(/*dijit._TreeNode*/node){
+                       // summary
+                       //              return true if node is currently selected
+                       // node: Node
+                       //              the node to check whether it's in the current selection
+
+                       return node.id && !!this.selection[node.id];
+               },
+               setSelection: function(/*dijit._treeNode[]*/ newSelection){
+                       // summary
+                       //      set the list of selected nodes to be exactly newSelection. All changes to the
+                       //      selection should be passed through this function, which ensures that derived
+                       //      attributes are kept up to date. Anchor will be deleted if it has been removed
+                       //      from the selection, but no new anchor will be added by this function.
+                       // newSelection: Node[]
+                       //      list of tree nodes to make selected
+                       var oldSelection = this.getSelectedTreeNodes();
+                       dojo.forEach(this._setDifference(oldSelection, newSelection), dojo.hitch(this, function(node){
+                               node.setSelected(false);
+                               if(this.anchor == node){
+                                       delete this.anchor;
+                               }
+                               delete this.selection[node.id];
+                       }));
+                       dojo.forEach(this._setDifference(newSelection, oldSelection), dojo.hitch(this, function(node){
+                               node.setSelected(true);
+                               this.selection[node.id] = node;
+                       }));
+                       this._updateSelectionProperties();
+               },
+               _setDifference: function(xs,ys){
+                       // summary
+                       //      Returns a copy of xs which lacks any objects
+                       //      occurring in ys. Checks for membership by
+                       //      modifying and then reading the object, so it will
+                       //      not properly handle sets of numbers or strings.
+                       
+                       dojo.forEach(ys, function(y){ y.__exclude__ = true; });
+                       var ret = dojo.filter(xs, function(x){ return !x.__exclude__; });
+
+                       // clean up after ourselves.
+                       dojo.forEach(ys, function(y){ delete y['__exclude__'] });
+                       return ret;
+               },
+               _updateSelectionProperties: function() {
+                       // summary
+                       //      Update the following tree properties from the current selection:
+                       //      path[s], selectedItem[s], selectedNode[s]
+                       
+                       var selected = this.getSelectedTreeNodes();
+                       var paths = [], nodes = [];
+                       dojo.forEach(selected, function(node) {
+                               nodes.push(node);
+                               paths.push(node.getTreePath());
+                       });
+                       var items = dojo.map(nodes,function(node) { return node.item; });
+                       this.tree._set("paths", paths);
+                       this.tree._set("path", paths[0] || []);
+                       this.tree._set("selectedNodes", nodes);
+                       this.tree._set("selectedNode", nodes[0] || null);
+                       this.tree._set("selectedItems", items);
+                       this.tree._set("selectedItem", items[0] || null);
+               },
+               // mouse events
+               onMouseDown: function(e){
+                       // summary:
+                       //              Event processor for onmousedown
+                       // e: Event
+                       //              mouse event
+                       // tags:
+                       //              protected
+
+                       // ignore click on expando node
+                       if(!this.current || this.tree.isExpandoNode( e.target, this.current)){ return; }
+
+                       if(e.button == dojo.mouseButtons.RIGHT){ return; }      // ignore right-click
+
+                       dojo.stopEvent(e);
+
+                       var treeNode = this.current,
+                         copy = dojo.isCopyKey(e), id = treeNode.id;
+
+                       // if shift key is not pressed, and the node is already in the selection,
+                       // delay deselection until onmouseup so in the case of DND, deselection
+                       // will be canceled by onmousemove.
+                       if(!this.singular && !e.shiftKey && this.selection[id]){
+                               this._doDeselect = true;
+                               return;
+                       }else{
+                               this._doDeselect = false;
+                       }
+                       this.userSelect(treeNode, copy, e.shiftKey);
+               },
+
+               onMouseUp: function(e){
+                       // summary:
+                       //              Event processor for onmouseup
+                       // e: Event
+                       //              mouse event
+                       // tags:
+                       //              protected
+
+                       // _doDeselect is the flag to indicate that the user wants to either ctrl+click on
+                       // a already selected item (to deselect the item), or click on a not-yet selected item
+                       // (which should remove all current selection, and add the clicked item). This can not
+                       // be done in onMouseDown, because the user may start a drag after mousedown. By moving
+                       // the deselection logic here, the user can drags an already selected item.
+                       if(!this._doDeselect){ return; }
+                       this._doDeselect = false;
+                       this.userSelect(this.current, dojo.isCopyKey( e ), e.shiftKey);
+               },
+               onMouseMove: function(e){
+                       // summary
+                       //              event processor for onmousemove
+                       // e: Event
+                       //              mouse event
+                       this._doDeselect = false;
+               },
+
+               userSelect: function(node, multi, range){
+                       // summary:
+                       //              Add or remove the given node from selection, responding
+                       //      to a user action such as a click or keypress.
+                       // multi: Boolean
+                       //              Indicates whether this is meant to be a multi-select action (e.g. ctrl-click)
+                       // range: Boolean
+                       //              Indicates whether this is meant to be a ranged action (e.g. shift-click)
+                       // tags:
+                       //              protected
+
+                       if(this.singular){
+                               if(this.anchor == node && multi){
+                                       this.selectNone();
+                               }else{
+                                       this.setSelection([node]);
+                                       this.anchor = node;
+                               }
+                       }else{
+                               if(range && this.anchor){
+                                       var cr = dijit.tree._compareNodes(this.anchor.rowNode, node.rowNode),
+                                       begin, end, anchor = this.anchor;
+                                       
+                                       if(cr < 0){ //current is after anchor
+                                               begin = anchor;
+                                               end = node;
+                                       }else{ //current is before anchor
+                                               begin = node;
+                                               end = anchor;
+                                       }
+                                       nodes = [];
+                                       //add everything betweeen begin and end inclusively
+                                       while(begin != end) {
+                                               nodes.push(begin)
+                                               begin = this.tree._getNextNode(begin);
+                                       }
+                                       nodes.push(end)
+
+                                       this.setSelection(nodes);
+                               }else{
+                                   if( this.selection[ node.id ] && multi ) {
+                                               this.removeTreeNode( node );
+                                   } else if(multi) {
+                                               this.addTreeNode(node, true);
+                                       } else {
+                                               this.setSelection([node]);
+                                               this.anchor = node;
+                                   }
+                               }
+                       }
+               },
+
+               forInSelectedItems: function(/*Function*/ f, /*Object?*/ o){
+                       // summary:
+                       //              Iterates over selected items;
+                       //              see `dojo.dnd.Container.forInItems()` for details
+                       o = o || dojo.global;
+                       for(var id in this.selection){
+                               // console.log("selected item id: " + id);
+                               f.call(o, this.getItem(id), id, this);
+                       }
+               }
+});
+
 }
index ef129d9cb38be84c88faef5e6698ea03442cf367..4fc4660cc7fff718d7e55541567e7a2d2eb41b1c 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All 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;
+if(!dojo._hasResource["dijit.tree.dndSource"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+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||""};
+
+
+/*=====
+dijit.tree.__SourceArgs = function(){
+       // summary:
+       //              A dict of parameters for Tree source configuration.
+       // isSource: Boolean?
+       //              Can be used as a DnD source. Defaults to true.
+       // accept: String[]
+       //              List of accepted types (text strings) for a target; defaults to
+       //              ["text", "treeNode"]
+       // copyOnly: Boolean?
+       //              Copy items, if true, use a state of Ctrl key otherwise,
+       // dragThreshold: Number
+       //              The move delay in pixels before detecting a drag; 0 by default
+       // betweenThreshold: Integer
+       //              Distance from upper/lower edge of node to allow drop to reorder nodes
+       this.isSource = isSource;
+       this.accept = accept;
+       this.autoSync = autoSync;
+       this.copyOnly = copyOnly;
+       this.dragThreshold = dragThreshold;
+       this.betweenThreshold = betweenThreshold;
+}
+=====*/
+
+dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
+       // summary:
+       //              Handles drag and drop operations (as a source or a target) for `dijit.Tree`
+
+       // isSource: [private] Boolean
+       //              Can be used as a DnD source.
+       isSource: true,
+
+       // accept: String[]
+       //              List of accepted types (text strings) for the Tree; defaults to
+       //              ["text"]
+       accept: ["text", "treeNode"],
+
+       // copyOnly: [private] Boolean
+       //              Copy items, if true, use a state of Ctrl key otherwise
+       copyOnly: false,
+
+       // dragThreshold: Number
+       //              The move delay in pixels before detecting a drag; 5 by default
+       dragThreshold: 5,
+
+       // betweenThreshold: Integer
+       //              Distance from upper/lower edge of node to allow drop to reorder nodes
+       betweenThreshold: 0,
+
+       constructor: function(/*dijit.Tree*/ tree, /*dijit.tree.__SourceArgs*/ params){
+               // summary:
+               //              a constructor of the Tree DnD Source
+               // tags:
+               //              private
+               if(!params){ params = {}; }
+               dojo.mixin(this, params);
+               this.isSource = typeof params.isSource == "undefined" ? true : params.isSource;
+               var type = params.accept instanceof Array ? params.accept : ["text", "treeNode"];
+               this.accept = null;
+               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;       // DOMNode corresponding to the currently moused over TreeNode
+               this.targetBox = null;  // coordinates of this.targetAnchor
+               this.dropPosition = ""; // whether mouse is over/after/before this.targetAnchor
+               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");
+               }
+
+               // 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: dijit.tree.dndSource
+               //              The source which provides items
+               // nodes: DOMNode[]
+               //              Array of DOM nodes corresponding to nodes being dropped, dijitTreeRow nodes if
+               //              source is a dijit.Tree.
+               // tags:
+               //              extension
+               return true;    // Boolean
+       },
+
+       copyState: function(keyPressed){
+               // 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" control key was pressed
+               // tags:
+               //              protected
+               return this.copyOnly || keyPressed;     // Boolean
+       },
+       destroy: function(){
+               // summary:
+               //              Prepares the object to be garbage-collected.
+               this.inherited("destroy",arguments);
+               dojo.forEach(this.topics, dojo.unsubscribe);
+               this.targetAnchor = null;
+       },
+
+       _onDragMouse: function(e){
+               // summary:
+               //              Helper method for processing onmousemove/onmouseover events while drag is in progress.
+               //              Keeps track of current drop target.
+
+               var m = dojo.dnd.manager(),
+                       oldTarget = this.targetAnchor,                  // the TreeNode corresponding to TreeNode mouse was previously over
+                       newTarget = this.current,                               // TreeNode corresponding to TreeNode mouse is currently over
+                       oldDropPosition = this.dropPosition;    // the previous drop position (over/before/after)
+
+               // calculate if user is indicating to drop the dragged node before, after, or over
+               // (i.e., to become a child of) the target node
+               var newDropPosition = "Over";
+               if(newTarget && this.betweenThreshold > 0){
+                       // If mouse is over a new TreeNode, then get new TreeNode's position and size
+                       if(!this.targetBox || oldTarget != newTarget){
+                               this.targetBox = dojo.position(newTarget.rowNode, true);
+                       }
+                       if((e.pageY - this.targetBox.y) <= this.betweenThreshold){
+                               newDropPosition = "Before";
+                       }else if((e.pageY - this.targetBox.y) >= (this.targetBox.h - this.betweenThreshold)){
+                               newDropPosition = "After";
+                       }
+               }
+
+               if(newTarget != oldTarget || newDropPosition != oldDropPosition){
+                       if(oldTarget){
+                               this._removeItemClass(oldTarget.rowNode, oldDropPosition);
+                       }
+                       if(newTarget){
+                               this._addItemClass(newTarget.rowNode, newDropPosition);
+                       }
+
+                       // Check if it's ok to drop the dragged node on/before/after the target node.
+                       if(!newTarget){
+                               m.canDrop(false);
+                       }else if(newTarget == this.tree.rootNode && newDropPosition != "Over"){
+                               // Can't drop before or after tree's root node; the dropped node would just disappear (at least visually)
+                               m.canDrop(false);
+                       }else if(m.source == this && (newTarget.id in this.selection)){
+                               // Guard against dropping onto yourself (TODO: guard against dropping onto your descendant, #7140)
+                               m.canDrop(false);
+                       }else if(this.checkItemAcceptance(newTarget.rowNode, m.source, newDropPosition.toLowerCase())
+                                       && !this._isParentChildDrop(m.source, newTarget.rowNode)){
+                               m.canDrop(true);
+                       }else{
+                               m.canDrop(false);
+                       }
+
+                       this.targetAnchor = newTarget;
+                       this.dropPosition = newDropPosition;
+               }
+       },
+
+       onMouseMove: function(e){
+               // summary:
+               //              Called for any onmousemove events over the Tree
+               // e: Event
+               //              onmousemouse event
+               // tags:
+               //              private
+               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 nodes = this.getSelectedTreeNodes();
+                               if(nodes.length){
+                                       if(nodes.length > 1){
+                                               //filter out all selected items which has one of their ancestor selected as well
+                                               var seen = this.selection, i = 0, r = [], n, p;
+                                               nextitem: while((n = nodes[i++])){
+                                                       for(p = n.getParent(); p && p !== this.tree; p = p.getParent()){
+                                                               if(seen[p.id]){ //parent is already selected, skip this node
+                                                                       continue nextitem;
+                                                               }
+                                                       }
+                                                       //this node does not have any ancestors selected, add it
+                                                       r.push(n);
+                                               }
+                                               nodes = r;
+                                       }
+                                       nodes = dojo.map(nodes, function(n){return n.domNode});
+                                       m.startDrag(this, nodes, this.copyState(dojo.isCopyKey(e)));
+                               }
+                       }
+               }
+       },
+
+       onMouseDown: function(e){
+               // summary:
+               //              Event processor for onmousedown
+               // e: Event
+               //              onmousedown event
+               // tags:
+               //              private
+               this.mouseDown = true;
+               this.mouseButton = e.button;
+               this._lastX = e.pageX;
+               this._lastY = e.pageY;
+               this.inherited(arguments);
+       },
+
+       onMouseUp: function(e){
+               // summary:
+               //              Event processor for onmouseup
+               // e: Event
+               //              onmouseup event
+               // tags:
+               //              private
+               if(this.mouseDown){
+                       this.mouseDown = false;
+                       this.inherited(arguments);
+               }
+       },
+
+       onMouseOut: function(){
+               // summary:
+               //              Event processor for when mouse is moved away from a TreeNode
+               // tags:
+               //              private
+               this.inherited(arguments);
+               this._unmarkTargetAnchor();
+       },
+
+       checkItemAcceptance: function(target, source, position){
+               // summary:
+               //              Stub function to be overridden if one wants to check for the ability to drop at the node/item level
+               // description:
+               //              In the base case, this is called to check if target can become a child of source.
+               //              When betweenThreshold is set, position="before" or "after" means that we
+               //              are asking if the source node can be dropped before/after the target node.
+               // target: DOMNode
+               //              The dijitTreeRoot DOM node inside of the TreeNode that we are dropping on to
+               //              Use dijit.getEnclosingWidget(target) to get the TreeNode.
+               // source: dijit.tree.dndSource
+               //              The (set of) nodes we are dropping
+               // position: String
+               //              "over", "before", or "after"
+               // tags:
+               //              extension
+               return true;
+       },
+
+       // topic event processors
+       onDndSourceOver: function(source){
+               // summary:
+               //              Topic event processor for /dnd/source/over, called when detected a current source.
+               // source: Object
+               //              The dijit.tree.dndSource / dojo.dnd.Source which has the mouse over it
+               // tags:
+               //              private
+               if(this != source){
+                       this.mouseDown = false;
+                       this._unmarkTargetAnchor();
+               }else if(this.isDragging){
+                       var m = dojo.dnd.manager();
+                       m.canDrop(false);
+               }
+       },
+       onDndStart: function(source, nodes, copy){
+               // summary:
+               //              Topic event processor for /dnd/start, called to initiate the DnD operation
+               // source: Object
+               //              The dijit.tree.dndSource / dojo.dnd.Source which is providing the items
+               // nodes: DomNode[]
+               //              The list of transferred items, dndTreeNode nodes if dragging from a Tree
+               // copy: Boolean
+               //              Copy items, if true, move items otherwise
+               // tags:
+               //              private
+
+               if(this.isSource){
+                       this._changeState("Source", this == source ? (copy ? "Copied" : "Moved") : "");
+               }
+               var accepted = this.checkAcceptance(source, nodes);
+
+               this._changeState("Target", accepted ? "" : "Disabled");
+
+               if(this == source){
+                       dojo.dnd.manager().overSource(this);
+               }
+
+               this.isDragging = true;
+       },
+
+       itemCreator: function(/*DomNode[]*/ nodes, target, /*dojo.dnd.Source*/ source){
+               // summary:
+               //              Returns objects passed to `Tree.model.newItem()` based on DnD nodes
+               //              dropped onto the tree.   Developer must override this method to enable
+               //              dropping from external sources onto this Tree, unless the Tree.model's items
+               //              happen to look like {id: 123, name: "Apple" } with no other attributes.
+               // description:
+               //              For each node in nodes[], which came from source, create a hash of name/value
+               //              pairs to be passed to Tree.model.newItem().  Returns array of those hashes.
+               // returns: Object[]
+               //              Array of name/value hashes for each new item to be added to the Tree, like:
+               // |    [
+               // |            { id: 123, label: "apple", foo: "bar" },
+               // |            { id: 456, label: "pear", zaz: "bam" }
+               // |    ]
+               // tags:
+               //              extension
+
+               // TODO: for 2.0 refactor so itemCreator() is called once per drag node, and
+               // make signature itemCreator(sourceItem, node, target) (or similar).
+
+               return dojo.map(nodes, function(node){
+                       return {
+                               "id": node.id,
+                               "name": node.textContent || node.innerText || ""
+                       };
+               }); // Object[]
+       },
+
+       onDndDrop: function(source, nodes, copy){
+               // summary:
+               //              Topic event processor for /dnd/drop, called to finish the DnD operation.
+               // description:
+               //              Updates data store items according to where node was dragged from and dropped
+               //              to.   The tree will then respond to those data store updates and redraw itself.
+               // source: Object
+               //              The dijit.tree.dndSource / dojo.dnd.Source which is providing the items
+               // nodes: DomNode[]
+               //              The list of transferred items, dndTreeNode nodes if dragging from a Tree
+               // copy: Boolean
+               //              Copy items, if true, move items otherwise
+               // tags:
+               //              protected
+               if(this.containerState == "Over"){
+                       var tree = this.tree,
+                               model = tree.model,
+                               target = this.targetAnchor,
+                               requeryRoot = false;    // set to true iff top level items change
+
+                       this.isDragging = false;
+
+                       // Compute the new parent item
+                       var targetWidget = target;
+                       var newParentItem;
+                       var insertIndex;
+                       newParentItem = (targetWidget && targetWidget.item) || tree.item;
+                       if(this.dropPosition == "Before" || this.dropPosition == "After"){
+                               // TODO: if there is no parent item then disallow the drop.
+                               // Actually this should be checked during onMouseMove too, to make the drag icon red.
+                               newParentItem = (targetWidget.getParent() && targetWidget.getParent().item) || tree.item;
+                               // Compute the insert index for reordering
+                               insertIndex = targetWidget.getIndexInParent();
+                               if(this.dropPosition == "After"){
+                                       insertIndex = targetWidget.getIndexInParent() + 1;
+                               }
+                       }else{
+                               newParentItem = (targetWidget && targetWidget.item) || tree.item;
+                       }
+
+                       // If necessary, use this variable to hold array of hashes to pass to model.newItem()
+                       // (one entry in the array for each dragged node).
+                       var newItemsParams;
+
+                       dojo.forEach(nodes, function(node, idx){
+                               // dojo.dnd.Item representing the thing being dropped.
+                               // Don't confuse the use of item here (meaning a DnD item) with the
+                               // uses below where item means dojo.data item.
+                               var sourceItem = source.getItem(node.id);
+
+                               // Information that's available if the source is another Tree
+                               // (possibly but not necessarily this tree, possibly but not
+                               // necessarily the same model as this Tree)
+                               if(dojo.indexOf(sourceItem.type, "treeNode") != -1){
+                                       var childTreeNode = sourceItem.data,
+                                               childItem = childTreeNode.item,
+                                               oldParentItem = childTreeNode.getParent().item;
+                               }
+
+                               if(source == this){
+                                       // This is a node from my own tree, and we are moving it, not copying.
+                                       // Remove item from old parent's children attribute.
+                                       // TODO: dijit.tree.dndSelector should implement deleteSelectedNodes()
+                                       // and this code should go there.
+
+                                       if(typeof insertIndex == "number"){
+                                               if(newParentItem == oldParentItem && childTreeNode.getIndexInParent() < insertIndex){
+                                                       insertIndex -= 1;
+                                               }
+                                       }
+                                       model.pasteItem(childItem, oldParentItem, newParentItem, copy, insertIndex);
+                               }else if(model.isItem(childItem)){
+                                       // Item from same model
+                                       // (maybe we should only do this branch if the source is a tree?)
+                                       model.pasteItem(childItem, oldParentItem, newParentItem, copy, insertIndex);
+                               }else{
+                                       // Get the hash to pass to model.newItem().  A single call to
+                                       // itemCreator() returns an array of hashes, one for each drag source node.
+                                       if(!newItemsParams){
+                                               newItemsParams = this.itemCreator(nodes, target.rowNode, source);
+                                       }
+
+                                       // Create new item in the tree, based on the drag source.
+                                       model.newItem(newItemsParams[idx], newParentItem, insertIndex);
+                               }
+                       }, this);
+
+                       // Expand the target node (if it's currently collapsed) so the user can see
+                       // where their node was dropped.   In particular since that node is still selected.
+                       this.tree._expandNode(targetWidget);
+               }
+               this.onDndCancel();
+       },
+
+       onDndCancel: function(){
+               // summary:
+               //              Topic event processor for /dnd/cancel, called to cancel the DnD operation
+               // tags:
+               //              private
+               this._unmarkTargetAnchor();
+               this.isDragging = false;
+               this.mouseDown = false;
+               delete this.mouseButton;
+               this._changeState("Source", "");
+               this._changeState("Target", "");
+       },
+
+       // When focus moves in/out of the entire Tree
+       onOverEvent: function(){
+               // summary:
+               //              This method is called when mouse is moved over our container (like onmouseenter)
+               // tags:
+               //              private
+               this.inherited(arguments);
+               dojo.dnd.manager().overSource(this);
+       },
+       onOutEvent: function(){
+               // summary:
+               //              This method is called when mouse is moved out of our container (like onmouseleave)
+               // tags:
+               //              private
+               this._unmarkTargetAnchor();
+               var m = dojo.dnd.manager();
+               if(this.isDragging){
+                       m.canDrop(false);
+               }
+               m.outSource(this);
+
+               this.inherited(arguments);
+       },
+
+       _isParentChildDrop: function(source, targetRow){
+               // summary:
+               //              Checks whether the dragged items are parent rows in the tree which are being
+               //              dragged into their own children.
+               //
+               // source:
+               //              The DragSource object.
+               //
+               // targetRow:
+               //              The tree row onto which the dragged nodes are being dropped.
+               //
+               // tags:
+               //              private
+
+               // If the dragged object is not coming from the tree this widget belongs to,
+               // it cannot be invalid.
+               if(!source.tree || source.tree != this.tree){
+                       return false;
+               }
+
+
+               var root = source.tree.domNode;
+               var ids = source.selection;
+
+               var node = targetRow.parentNode;
+
+               // Iterate up the DOM hierarchy from the target drop row,
+               // checking of any of the dragged nodes have the same ID.
+               while(node != root && !ids[node.id]){
+                       node = node.parentNode;
+               }
+
+               return node.id && ids[node.id];
+       },
+
+       _unmarkTargetAnchor: function(){
+               // summary:
+               //              Removes hover class of the current target anchor
+               // tags:
+               //              private
+               if(!this.targetAnchor){ return; }
+               this._removeItemClass(this.targetAnchor.rowNode, this.dropPosition);
+               this.targetAnchor = null;
+               this.targetBox = null;
+               this.dropPosition = null;
+       },
+
+       _markDndStatus: function(copy){
+               // summary:
+               //              Changes source's state based on "copy" status
+               this._changeState("Source", copy ? "Copied" : "Moved");
+       }
 });
-},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");
-}});
+
 }
index 091d72fca00fb69e12b655da5f99200b3c607667..46b27c6761640ccb9cb40540f294a56583b409f0 100644 (file)
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The 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){
-}});
+
+dojo.declare(
+       "dijit.tree.model",
+       null,
+{
+       // summary:
+       //              Contract for any data provider object for the tree.
+       // description:
+       //              Tree passes in values to the constructor to specify the callbacks.
+       //              "item" is typically a dojo.data.Item but it's just a black box so
+       //              it could be anything.
+       //
+       //              This (like `dojo.data.api.Read`) is just documentation, and not meant to be used.
+
+       destroy: function(){
+               // summary:
+               //              Destroys this object, releasing connections to the store
+               // tags:
+               //              extension
+       },
+
+       // =======================================================================
+       // Methods for traversing hierarchy
+
+       getRoot: function(onItem){
+               // summary:
+               //              Calls onItem with the root item for the tree, possibly a fabricated item.
+               //              Throws exception on error.
+               // tags:
+               //              extension
+       },
+
+       mayHaveChildren: function(/*dojo.data.Item*/ item){
+               // summary:
+               //              Tells if an item has or may have children.  Implementing logic here
+               //              avoids showing +/- expando icon for nodes that we know don't have children.
+               //              (For efficiency reasons we may not want to check if an element actually
+               //              has children until user clicks the expando node)
+               // tags:
+               //              extension
+       },
+
+       getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){
+               // summary:
+               //              Calls onComplete() with array of child items of given parent item, all loaded.
+               //              Throws exception on error.
+               // tags:
+               //              extension
+       },
+
+       // =======================================================================
+       // Inspecting items
+
+       isItem: function(/* anything */ something){
+               // summary:
+               //              Returns true if *something* is an item and came from this model instance.
+               //              Returns false if *something* is a literal, an item from another model instance,
+               //              or is any object other than an item.
+               // tags:
+               //              extension
+       },
+
+       fetchItemByIdentity: function(/* object */ keywordArgs){
+               // summary:
+               //              Given the identity of an item, this method returns the item that has
+               //              that identity through the onItem callback.  Conforming implementations
+               //              should return null if there is no item with the given identity.
+               //              Implementations of fetchItemByIdentity() may sometimes return an item
+               //              from a local cache and may sometimes fetch an item from a remote server.
+               // tags:
+               //              extension
+       },
+
+       getIdentity: function(/* item */ item){
+               // summary:
+               //              Returns identity for an item
+               // tags:
+               //              extension
+       },
+
+       getLabel: function(/*dojo.data.Item*/ item){
+               // summary:
+               //              Get the label for an item
+               // tags:
+               //              extension
+       },
+
+       // =======================================================================
+       // Write interface
+
+       newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
+               // summary:
+               //              Creates a new item.   See `dojo.data.api.Write` for details on args.
+               // tags:
+               //              extension
+       },
+
+       pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy){
+               // summary:
+               //              Move or copy an item from one parent item to another.
+               //              Used in drag & drop.
+               //              If oldParentItem is specified and bCopy is false, childItem is removed from oldParentItem.
+               //              If newParentItem is specified, childItem is attached to newParentItem.
+               // tags:
+               //              extension
+       },
+
+       // =======================================================================
+       // Callbacks
+
+       onChange: function(/*dojo.data.Item*/ item){
+               // summary:
+               //              Callback whenever an item has changed, so that Tree
+               //              can update the label, icon, etc.   Note that changes
+               //              to an item's children or parent(s) will trigger an
+               //              onChildrenChange() so you can ignore those changes here.
+               // tags:
+               //              callback
+       },
+
+       onChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
+               // summary:
+               //              Callback to do notifications about new, updated, or deleted items.
+               // tags:
+               //              callback
+       }
+});
+
index 7086275373bee5cf689baadeb7a34786fcf287c8..8ed5baba2cafa6fb63d7296c86a8d041a6bbf73e 100755 (executable)
@@ -9,12 +9,13 @@
 
 if [ -d util/buildscripts/ ]; then
        pushd util/buildscripts
-       ./build.sh profileFile=../../profile.js action=clean,release version=1.5.0 releaseName=
+       ./build.sh profileFile=../../profile.js action=clean,release version=1.6.1 releaseName=
        popd
 
        if [ -d release/dojo ]; then
-               rm -rf ../dojo
+               rm -rf ../dojo ../dijit
                cp -r release/dojo ..
+               cp -r release/dijit ..
        else
                echo $0: ERROR: Dojo build seems to have failed.
        fi
index bb6a60f4103cb8de83a811d20ea3cad16a9cb7ae..1d688a3b10ad4a35becefdc2d3a5a5d1c048358d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by b
 dojo._hasResource["dojo.AdapterRegistry"] = true;
 dojo.provide("dojo.AdapterRegistry");
 
+
 dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
        //      summary:
        //              A registry to make contextual calling/searching easier.
@@ -40,11 +41,11 @@ dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
 
        this.pairs = [];
        this.returnWrappers = returnWrappers || false; // Boolean
-}
+};
 
 dojo.extend(dojo.AdapterRegistry, {
        register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){
-               //      summary: 
+               //      summary:
                //              register a check function to determine if the wrap function or
                //              object gets selected
                //      name:
index a8156aba298f31ef2e91f8be31c60557563f4d99..afe6638a128e2ffb0665198f547f5afcacb0dfa3 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,6 +8,8 @@
 if(!dojo._hasResource["dojo.DeferredList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.DeferredList"] = true;
 dojo.provide("dojo.DeferredList");
+
+
 dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){
        // summary:
        //              Provides event handling for a group of Deferred objects.
@@ -65,7 +67,7 @@ dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*B
 dojo.DeferredList.prototype = new dojo.Deferred();
 
 dojo.DeferredList.prototype.gatherResults= function(deferredList){
-       // summary:     
+       // summary:
        //      Gathers the results of the deferreds for packaging
        //      as the parameters to the Deferred Lists' callback
 
index 4c93ded6b2cb409701f0eea674cd740d626ca439..aa6b39f8c967a50f3253bde3ca0e4bfd1566b1ae 100644 (file)
@@ -13,7 +13,7 @@ The text of the AFL and BSD licenses is reproduced below.
 The "New" BSD License:
 **********************
 
-Copyright (c) 2005-2010, The Dojo Foundation
+Copyright (c) 2005-2011, The Dojo Foundation
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/lib/dojo/NodeList-data.js b/lib/dojo/NodeList-data.js
new file mode 100644 (file)
index 0000000..0126448
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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-data"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.NodeList-data"] = true;
+dojo.provide("dojo.NodeList-data");
+
+(function(d){
+
+/*=====
+       dojo.NodeList.prototype.data = function(key, value){
+               // summary: stash or get some arbitrary data on/from these nodes.
+               //
+               // description:
+               //              Stash or get some arbirtrary data on/from these nodes. This private _data function is
+               //              exposed publicly on `dojo.NodeList`, eg: as the result of a `dojo.query` call.
+               //              DIFFERS from jQuery.data in that when used as a getter, the entire list is ALWAYS
+               //              returned. EVEN WHEN THE LIST IS length == 1.
+               //
+               //              A single-node version of this function is provided as `dojo._nodeData`, which follows
+               //              the same signature, though expects a String ID or DomNode reference in the first
+               //              position, before key/value arguments.
+               //
+               // node: String|DomNode
+               //              The node to associate data with
+               //
+               // key: Object?|String?
+               //              If an object, act as a setter and iterate over said object setting data items as defined.
+               //              If a string, and `value` present, set the data for defined `key` to `value`
+               //              If a string, and `value` absent, act as a getter, returning the data associated with said `key`
+               //
+               // value: Anything?
+               //              The value to set for said `key`, provided `key` is a string (and not an object)
+               //
+               // example:
+               //              Set a key `bar` to some data, then retrieve it.
+               //      |       dojo.query(".foo").data("bar", "touched");
+               //      |       var touched = dojo.query(".foo").data("bar");
+               //      |       if(touched[0] == "touched"){ alert('win'); }
+               //
+               // example:
+               //              Get all the data items for a given node.
+               //      |       var list = dojo.query(".foo").data();
+               //      |       var first = list[0];
+               //
+               // example:
+               //              Set the data to a complex hash. Overwrites existing keys with new value
+               //      |       dojo.query(".foo").data({ bar:"baz", foo:"bar" });
+               //              Then get some random key:
+               //      |       dojo.query(".foo").data("foo"); // returns [`bar`]
+               //
+               //      returns: Object|Anything|Nothing
+               //              When used as a setter via `dojo.NodeList`, a NodeList instance is returned
+               //              for further chaning. When used as a getter via `dojo.NodeList` an ARRAY
+               //              of items is returned. The items in the array correspond to the elements
+               //              in the original list. This is true even when the list length is 1, eg:
+               //              when looking up a node by ID (#foo)
+       };
+
+       dojo.NodeList.prototype.removeData = function(key){
+               // summary: Remove the data associated with these nodes.
+               // key: String?
+               //              If ommitted, clean all data for this node.
+               //              If passed, remove the data item found at `key`
+       };
+
+       dojo._nodeDataCache = {
+               // summary: An alias to the private dataCache for NodeList-data. NEVER USE THIS!
+               //              This private is only exposed for the benefit of unit testing, and is
+               //              removed during the build process.
+       };
+
+=====*/
+
+       var dataCache = {}, x = 0, dataattr = "data-dojo-dataid", nl = d.NodeList,
+               dopid = function(node){
+                       // summary: Return a uniqueish ID for the passed node reference
+                       var pid = d.attr(node, dataattr);
+                       if(!pid){
+                               pid = "pid" + (x++);
+                               d.attr(node, dataattr, pid);
+                       }
+                       return pid;
+               }
+       ;
+
+       
+       var dodata = d._nodeData = function(node, key, value){
+
+               var pid = dopid(node), r;
+               if(!dataCache[pid]){ dataCache[pid] = {}; }
+
+               // API discrepency: calling with only a node returns the whole object. $.data throws
+               if(arguments.length == 1){ r = dataCache[pid]; }
+               if(typeof key == "string"){
+                       // either getter or setter, based on `value` presence
+                       if(arguments.length > 2){
+                               dataCache[pid][key] = value;
+                       }else{
+                               r = dataCache[pid][key];
+                       }
+               }else{
+                       // must be a setter, mix `value` into data hash
+                       // API discrepency: using object as setter works here
+                       r = d._mixin(dataCache[pid], key);
+               }
+
+               return r; // Object|Anything|Nothing
+       };
+
+       var removeData = d._removeNodeData = function(node, key){
+               // summary: Remove some data from this node
+               // node: String|DomNode
+               //              The node reference to remove data from
+               // key: String?
+               //              If omitted, remove all data in this dataset.
+               //              If passed, remove only the passed `key` in the associated dataset
+               var pid = dopid(node);
+               if(dataCache[pid]){
+                       if(key){
+                               delete dataCache[pid][key];
+                       }else{
+                               delete dataCache[pid];
+                       }
+               }
+       };
+
+       d._gcNodeData = function(){
+               // summary: super expensive: GC all data in the data for nodes that no longer exist in the dom.
+               // description:
+               //              super expensive: GC all data in the data for nodes that no longer exist in the dom.
+               //              MUCH safer to do this yourself, manually, on a per-node basis (via `NodeList.removeData()`)
+               //              provided as a stop-gap for exceptionally large/complex applications with constantly changing
+               //              content regions (eg: a dijit.layout.ContentPane with replacing data)
+               //              There is NO automatic GC going on. If you dojo.destroy() a node, you should _removeNodeData
+               //              prior to destruction.
+               var livePids = dojo.query("[" + dataattr + "]").map(dopid);
+               for(var i in dataCache){
+                       if(dojo.indexOf(livePids, i) < 0){ delete dataCache[i]; }
+               }
+       };
+
+       // make nodeData and removeNodeData public on dojo.NodeList:
+       d.extend(nl, {
+               data: nl._adaptWithCondition(dodata, function(a){
+                       return a.length === 0 || a.length == 1 && (typeof a[0] == "string");
+               }),
+               removeData: nl._adaptAsForEach(removeData)
+       });
+
+// TODO: this is the basic implemetation of adaptWithCondtionAndWhenMappedConsiderLength, for lack of a better API name
+// it conflicts with the the `dojo.NodeList` way: always always return an arrayLike thinger. Consider for 2.0:
+//
+//     nl.prototype.data = function(key, value){
+//             var a = arguments, r;
+//             if(a.length === 0 || a.length == 1 && (typeof a[0] == "string")){
+//                     r = this.map(function(node){
+//                             return d._data(node, key);
+//                     });
+//                     if(r.length == 1){ r = r[0]; } // the offending line, and the diff on adaptWithCondition
+//             }else{
+//                     r = this.forEach(function(node){
+//                             d._data(node, key, value);
+//                     });
+//             }
+//             return r; // dojo.NodeList|Array|SingleItem
+//     };
+
+})(dojo);
+
+}
index de2cc3255d5509440e26f21d366a227566479fef..b9ec766475f76b57f1190cb351b7ac07e08c4917 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,6 +10,7 @@ dojo._hasResource["dojo.NodeList-fx"] = true;
 dojo.provide("dojo.NodeList-fx");
 dojo.require("dojo.fx");
 
+
 /*=====
 dojo["NodeList-fx"] = {
        // summary: Adds dojo.fx animation support to dojo.query()
@@ -25,7 +26,7 @@ dojo.extend(dojo.NodeList, {
                                dojo.mixin(tmpArgs, args);
                                return obj[method](tmpArgs);
                        })
-               ); 
+               );
                return args.auto ? a.play() && this : a; // dojo.Animation|dojo.NodeList
        },
 
@@ -34,7 +35,7 @@ dojo.extend(dojo.NodeList, {
                //              wipe in all elements of this NodeList via `dojo.fx.wipeIn`
                //
                //      args: Object?
-               //              Additional dojo.Animation arguments to mix into this set with the addition of 
+               //              Additional dojo.Animation arguments to mix into this set with the addition of
                //              an `auto` parameter.
                //
                //      returns: dojo.Animation|dojo.NodeList
@@ -58,7 +59,7 @@ dojo.extend(dojo.NodeList, {
                //              wipe out all elements of this NodeList via `dojo.fx.wipeOut`
                //
                //      args: Object?
-               //              Additional dojo.Animation arguments to mix into this set with the addition of 
+               //              Additional dojo.Animation arguments to mix into this set with the addition of
                //              an `auto` parameter.
                //
                //      returns: dojo.Animation|dojo.NodeList
@@ -77,7 +78,7 @@ dojo.extend(dojo.NodeList, {
                //              slide all elements of the node list to the specified place via `dojo.fx.slideTo`
                //
                //      args: Object?
-               //              Additional dojo.Animation arguments to mix into this set with the addition of 
+               //              Additional dojo.Animation arguments to mix into this set with the addition of
                //              an `auto` parameter.
                //
                //      returns: dojo.Animation|dojo.NodeList
@@ -100,7 +101,7 @@ dojo.extend(dojo.NodeList, {
                //              fade in all elements of this NodeList via `dojo.fadeIn`
                //
                //      args: Object?
-               //              Additional dojo.Animation arguments to mix into this set with the addition of 
+               //              Additional dojo.Animation arguments to mix into this set with the addition of
                //              an `auto` parameter.
                //
                //      returns: dojo.Animation|dojo.NodeList
@@ -119,7 +120,7 @@ dojo.extend(dojo.NodeList, {
                //              fade out all elements of this NodeList via `dojo.fadeOut`
                //
                //      args: Object?
-               //              Additional dojo.Animation arguments to mix into this set with the addition of 
+               //              Additional dojo.Animation arguments to mix into this set with the addition of
                //              an `auto` parameter.
                //
                //      returns: dojo.Animation|dojo.NodeList
@@ -155,14 +156,14 @@ dojo.extend(dojo.NodeList, {
                //      example:
                //      |       dojo.query(".zork").animateProperty({
                //      |               duration: 500,
-               //      |               properties: { 
+               //      |               properties: {
                //      |                       color:          { start: "black", end: "white" },
-               //      |                       left:           { end: 300 } 
-               //      |               } 
+               //      |                       left:           { end: 300 }
+               //      |               }
                //      |       }).play();
                //
                //      example:
-               //      |       dojo.query(".grue").animateProperty({ 
+               //      |       dojo.query(".grue").animateProperty({
                //      |               auto:true,
                //      |               properties: {
                //      |                       height:240
@@ -171,9 +172,9 @@ dojo.extend(dojo.NodeList, {
                return this._anim(dojo, "animateProperty", args); // dojo.Animation|dojo.NodeList
        },
 
-       anim: function( /*Object*/                      properties, 
-                                       /*Integer?*/            duration, 
-                                       /*Function?*/           easing, 
+       anim: function( /*Object*/                      properties,
+                                       /*Integer?*/            duration,
+                                       /*Function?*/           easing,
                                        /*Function?*/           onEnd,
                                        /*Integer?*/            delay){
                //      summary:
@@ -181,8 +182,8 @@ dojo.extend(dojo.NodeList, {
                //              The returned animation object will already be playing when it
                //              is returned. See the docs for `dojo.anim` for full details.
                //      properties: Object
-               //              the properties to animate. does NOT support the `auto` parameter like other 
-               //              NodeList-fx methods. 
+               //              the properties to animate. does NOT support the `auto` parameter like other
+               //              NodeList-fx methods.
                //      duration: Integer?
                //              Optional. The time to run the animations for
                //      easing: Function?
@@ -207,7 +208,7 @@ dojo.extend(dojo.NodeList, {
                                        easing: easing
                                });
                        })
-               ); 
+               );
                if(onEnd){
                        dojo.connect(canim, "onEnd", onEnd);
                }
index e8e0ac2208527b0f2aab3a7ceb2d4b3efa520e3a..bc8da9d863d860781adce590ce1f63e71ba3deab 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,6 +10,7 @@ dojo._hasResource["dojo.NodeList-html"] = true;
 dojo.provide("dojo.NodeList-html");
 dojo.require("dojo.html");
 
+
 /*=====
 dojo["NodeList-html"] = {
        // summary: Adds a chainable html method to dojo.query() / Nodelist instances for setting/replacing node content
@@ -21,15 +22,15 @@ dojo.extend(dojo.NodeList, {
                //      summary:
                //              see `dojo.html.set()`. Set the content of all elements of this NodeList
                //
-               // description: 
-               //              Based around `dojo.html.set()`, set the content of the Elements in a 
+               // description:
+               //              Based around `dojo.html.set()`, set the content of the Elements in a
                //              NodeList to the given content (string/node/nodelist), with optional arguments
                //              to further tune the set content behavior.
                //
                //      example:
                //      | dojo.query(".thingList").html("<li dojoType='dojo.dnd.Moveable'>1</li><li dojoType='dojo.dnd.Moveable'>2</li><li dojoType='dojo.dnd.Moveable'>3</li>",
-               //      | { 
-               //      |       parseContent: true, 
+               //      | {
+               //      |       parseContent: true,
                //      |       onBegin: function(){
                //      |               this.content = this.content.replace(/([0-9])/g, this.id + ": $1");
                //      |               this.inherited("onBegin", arguments);
@@ -38,7 +39,7 @@ dojo.extend(dojo.NodeList, {
 
                var dhs = new dojo.html._ContentSetter(params || {});
                this.forEach(function(elm){
-                       dhs.node = elm; 
+                       dhs.node = elm;
                        dhs.set(content);
                        dhs.tearDown();
                });
index 171540faf8a3348f12211059d25d4312ca60e94e..8a460384338480de8aa7f8ee92cc65240775aa9c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.NodeList-manipulate"]){ //_hasResource checks added
 dojo._hasResource["dojo.NodeList-manipulate"] = true;
 dojo.provide("dojo.NodeList-manipulate");
 
+
 /*=====
 dojo["NodeList-manipulate"] = {
        // summary: Adds a chainable methods to dojo.query() / Nodelist instances for manipulating HTML
@@ -51,7 +52,7 @@ dojo["NodeList-manipulate"] = {
        }
 
        function makeWrapNode(/*DOMNode||String*/html, /*DOMNode*/refNode){
-               // summary: 
+               // summary:
                //              convert HTML into nodes if it is not already a node.
                if(typeof html == "string"){
                        html = dojo._toDom(html, (refNode && refNode.ownerDocument));
@@ -655,25 +656,25 @@ dojo["NodeList-manipulate"] = {
                        //      example:
                        //              assume a DOM created by this markup:
                        //      |       <div class="container">
-                       //      |               <div class="spacer">___</div>                   
+                       //      |               <div class="spacer">___</div>
                        //      |               <div class="red">Red One</div>
-                       //      |               <div class="spacer">___</div>                   
+                       //      |               <div class="spacer">___</div>
                        //      |               <div class="blue">Blue One</div>
-                       //      |               <div class="spacer">___</div>                   
+                       //      |               <div class="spacer">___</div>
                        //      |               <div class="red">Red Two</div>
-                       //      |               <div class="spacer">___</div>                   
+                       //      |               <div class="spacer">___</div>
                        //      |               <div class="blue">Blue Two</div>
                        //      |       </div>
                        //              Running this code:
                        //      |       dojo.query(".red").replaceAll(".blue");
                        //              Results in this DOM structure:
                        //      |       <div class="container">
-                       //      |               <div class="spacer">___</div>                   
-                       //      |               <div class="spacer">___</div>                   
+                       //      |               <div class="spacer">___</div>
+                       //      |               <div class="spacer">___</div>
                        //      |               <div class="red">Red One</div>
                        //      |               <div class="red">Red Two</div>
-                       //      |               <div class="spacer">___</div>                   
-                       //      |               <div class="spacer">___</div>                   
+                       //      |               <div class="spacer">___</div>
+                       //      |               <div class="spacer">___</div>
                        //      |               <div class="red">Red One</div>
                        //      |               <div class="red">Red Two</div>
                        //      |       </div>
index b5314eed67baa270a307cd3ad646d236844418f8..b6167ad0e880a586512009cf8d33b8be1ac3f5c0 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.NodeList-traverse"]){ //_hasResource checks added by
 dojo._hasResource["dojo.NodeList-traverse"] = true;
 dojo.provide("dojo.NodeList-traverse");
 
+
 /*=====
 dojo["NodeList-traverse"] = {
        // summary: Adds a chainable methods to dojo.query() / Nodelist instances for traversing the DOM
@@ -28,18 +29,7 @@ dojo.extend(dojo.NodeList, {
                                ary = ary.concat(items);
                        }
                }
-               return ary;     
-       },
-
-       _filterQueryResult: function(nodeList, query){
-               // summmary: 
-               //              Replacement for dojo._filterQueryResult that does a full
-               //              query. Slower, but allows for more types of queries.
-               var filter = dojo.filter(nodeList, function(node){
-                       return dojo.query(query, node.parentNode).indexOf(node) != -1;
-               });
-               var result = this._wrap(filter);
-               return result;
+               return ary;
        },
 
        _getUniqueAsNodeList: function(nodes){
@@ -65,7 +55,7 @@ dojo.extend(dojo.NodeList, {
                //              gets unique element nodes, filters them further
                //              with an optional query and then calls _stash to track parent NodeList.
                var ary = this._getUniqueAsNodeList(nodes);
-               ary = (query ? this._filterQueryResult(ary, query) : ary);
+               ary = (query ? dojo._filterQueryResult(ary, query) : ary);
                return ary._stash(this);  //dojo.NodeList
        },
 
@@ -73,7 +63,7 @@ dojo.extend(dojo.NodeList, {
                // summary:
                //              cycles over all the nodes and calls a callback
                //              to collect nodes for a possible inclusion in a result.
-               //              The callback will get two args: callback(node, ary), 
+               //              The callback will get two args: callback(node, ary),
                //              where ary is the array being used to collect the nodes.
                return this._getUniqueNodeListWithParent(this._buildArrayFromCallback(callback), query);  //dojo.NodeList
        },
@@ -109,7 +99,7 @@ dojo.extend(dojo.NodeList, {
                }); //dojo.NodeList
        },
 
-       closest: function(/*String*/query){
+       closest: function(/*String*/query, /*String|DOMNode?*/ root){
                // summary:
                //              Returns closest parent that matches query, including current node in this
                //              dojo.NodeList if it matches the query.
@@ -118,6 +108,8 @@ dojo.extend(dojo.NodeList, {
                //              original dojo.NodeList.
                //      query:
                //              a CSS selector.
+               // root:
+               //              If specified, query is relative to "root" rather than document body.
                // returns:
                //              dojo.NodeList, the closest parent that matches the query, including the current
                //              node in this dojo.NodeList if it matches the query.
@@ -133,13 +125,12 @@ dojo.extend(dojo.NodeList, {
                //              Running this code:
                //      |       dojo.query(".red").closest(".container");
                //              returns the div with class "container".
-               var self = this;
-               return this._getRelatedUniqueNodes(query, function(node, ary){
+               return this._getRelatedUniqueNodes(null, function(node, ary){
                        do{
-                               if(self._filterQueryResult([node], query).length){
+                               if(dojo._filterQueryResult([node], query, root).length){
                                        return node;
                                }
-                       }while((node = node.parentNode) && node.nodeType == 1);
+                       }while(node != root && (node = node.parentNode) && node.nodeType == 1);
                        return null; //To make rhino strict checking happy.
                }); //dojo.NodeList
        },
@@ -461,7 +452,7 @@ dojo.extend(dojo.NodeList, {
                //      |       </div>
                //              Running this code:
                //      |       dojo.query(".blue").last();
-               //              returns the last div with class "blue", 
+               //              returns the last div with class "blue",
                return this._wrap((this.length ? [this[this.length - 1]] : []), this); //dojo.NodeList
        },
 
index c777f3ea85db24f493961f7508920c1c32fc786d..f99af1a13abfa5759b0964235a056d600cd3908e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,18 +9,18 @@
  * OpenAjax.js
  *
  * Reference implementation of the OpenAjax Hub, as specified by OpenAjax Alliance.
- * Specification is under development at: 
+ * Specification is under development at:
  *
  *   http://www.openajax.org/member/wiki/OpenAjax_Hub_Specification
  *
  * Copyright 2006-2007 OpenAjax Alliance
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
- * use this file except in compliance with the License. You may obtain a copy 
- * of the License at http://www.apache.org/licenses/LICENSE-2.0 . Unless 
- * required by applicable law or agreed to in writing, software distributed 
- * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
- * CONDITIONS OF ANY KIND, either express or implied. See the License for the 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0 . Unless
+ * required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  *
  ******************************************************************************/
@@ -51,7 +51,7 @@ if(!window["OpenAjax"]){
                                prefix: prefix,
                                namespaceURI: nsURL,
                                version: version,
-                               extraData: extra 
+                               extraData: extra
                        };
                        this.publish(ooh+"registerLibrary", libs[prefix]);
                }
@@ -82,7 +82,7 @@ if(!window["OpenAjax"]){
                        this._publish(this._subscriptions, path, 0, name, message);
                        this._pubDepth--;
                        if((this._cleanup.length > 0) && (this._pubDepth == 0)){
-                               for(var i = 0; i < this._cleanup.length; i++){ 
+                               for(var i = 0; i < this._cleanup.length; i++){
                                        this.unsubscribe(this._cleanup[i].hdl);
                                }
                                delete(this._cleanup);
@@ -100,12 +100,12 @@ if(!window["OpenAjax"]){
                        var token = path[index];
                        if(index == path.length){
                                tree.s.push(sub);
-                       }else{ 
+                       }else{
                                if(typeof tree.c == "undefined"){
                                         tree.c = {};
                                }
                                if(typeof tree.c[token] == "undefined"){
-                                       tree.c[token] = { c: {}, s: [] }; 
+                                       tree.c[token] = { c: {}, s: [] };
                                        this._subscribe(tree.c[token], path, index + 1, sub);
                                }else{
                                        this._subscribe( tree.c[token], path, index + 1, sub);
@@ -120,7 +120,7 @@ if(!window["OpenAjax"]){
                                        node = tree;
                                }else{
                                        this._publish(tree.c[path[index]], path, index + 1, name, msg);
-                                       this._publish(tree.c["*"], path, index + 1, name, msg);                 
+                                       this._publish(tree.c["*"], path, index + 1, name, msg);
                                        node = tree.c["**"];
                                }
                                if(typeof node != "undefined"){
@@ -140,7 +140,7 @@ if(!window["OpenAjax"]){
                                                                // get a function object
                                                                fcb = sc[fcb];
                                                        }
-                                                       if((!fcb) || 
+                                                       if((!fcb) ||
                                                           (fcb.call(sc, name, msg, d))) {
                                                                cb.call(sc, name, msg, d);
                                                        }
@@ -156,24 +156,24 @@ if(!window["OpenAjax"]){
                                        var childNode = tree.c[path[index]];
                                        this._unsubscribe(childNode, path, index + 1, sid);
                                        if(childNode.s.length == 0) {
-                                               for(var x in childNode.c) 
-                                                       return;         
-                                               delete tree.c[path[index]];     
+                                               for(var x in childNode.c)
+                                                       return;
+                                               delete tree.c[path[index]];
                                        }
                                        return;
                                }
                                else {
                                        var callbacks = tree.s;
                                        var max = callbacks.length;
-                                       for(var i = 0; i < max; i++) 
+                                       for(var i = 0; i < max; i++)
                                                if(sid == callbacks[i].sid) {
                                                        if(this._pubDepth > 0) {
-                                                               callbacks[i].cb = null; 
-                                                               this._cleanup.push(callbacks[i]);                                               
+                                                               callbacks[i].cb = null;
+                                                               this._cleanup.push(callbacks[i]);
                                                        }
                                                        else
                                                                callbacks.splice(i, 1);
-                                                       return;         
+                                                       return;
                                                }
                                }
                        }
index e4f406309683ba88999fc1d33cfe2f6764726df2..14700196234775396c7e6603a33decc67b1d5b2f 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.Stateful"]){ //_hasResource checks added by build. D
 dojo._hasResource["dojo.Stateful"] = true;
 dojo.provide("dojo.Stateful");
 
+
 dojo.declare("dojo.Stateful", null, {
        // summary:
        //              Base class for objects that provide named properties with optional getter/setter
@@ -33,7 +34,7 @@ dojo.declare("dojo.Stateful", null, {
                // description:
                //              Get a named property on a Stateful object. The property may
                //              potentially be retrieved via a getter method in subclasses. In the base class
-               //              this just retrieves the object's property. 
+               //              this just retrieves the object's property.
                //              For example:
                //      |       stateful = new dojo.Stateful({foo: 3});
                //      |       stateful.get("foo") // returns 3
@@ -45,11 +46,11 @@ dojo.declare("dojo.Stateful", null, {
                // summary:
                //              Set a property on a Stateful instance
                //      name:
-               //              The property to set. 
+               //              The property to set.
                //      value:
                //              The value to set in the property.
                // description:
-               //              Sets named properties on a stateful object and notifies any watchers of 
+               //              Sets named properties on a stateful object and notifies any watchers of
                //              the property. A programmatic setter may be defined in subclasses.
                //              For example:
                //      |       stateful = new dojo.Stateful();
@@ -66,7 +67,7 @@ dojo.declare("dojo.Stateful", null, {
                //      This is equivalent to calling set(foo, "Howdy") and set(bar, 3)
                if(typeof name === "object"){
                        for(var x in name){
-                               this.set(x, name[x]); 
+                               this.set(x, name[x]);
                        }
                        return this;
                }
@@ -81,17 +82,17 @@ dojo.declare("dojo.Stateful", null, {
                // summary:
                //              Watches a property for changes
                //      name:
-               //              Indicates the property to watch. This is optional (the callback may be the 
+               //              Indicates the property to watch. This is optional (the callback may be the
                //              only parameter), and if omitted, all the properties will be watched
                // returns:
-               //              An object handle for the watch. The unwatch method of this object 
+               //              An object handle for the watch. The unwatch method of this object
                //              can be used to discontinue watching this property:
                //              |       var watchHandle = obj.watch("foo", callback);
                //              |       watchHandle.unwatch(); // callback won't be called now
                //      callback:
                //              The function to execute when the property changes. This will be called after
                //              the property has been changed. The callback will be called with the |this|
-               //              set to the instance, the first argument as the name of the property, the 
+               //              set to the instance, the first argument as the name of the property, the
                //              second argument as the old value and the third argument as the new value.
                
                var callbacks = this._watchCallbacks;
@@ -99,15 +100,18 @@ dojo.declare("dojo.Stateful", null, {
                        var self = this;
                        callbacks = this._watchCallbacks = function(name, oldValue, value, ignoreCatchall){
                                var notify = function(propertyCallbacks){
-                                       for(var i = 0, l = propertyCallbacks && propertyCallbacks.length; i < l; i++){
-                                               try{
-                                                       propertyCallbacks[i].call(self, name, oldValue, value);
-                                               }catch(e){
-                                                       console.error(e);
+                                       if(propertyCallbacks){
+                        propertyCallbacks = propertyCallbacks.slice();
+                                               for(var i = 0, l = propertyCallbacks.length; i < l; i++){
+                                                       try{
+                                                               propertyCallbacks[i].call(self, name, oldValue, value);
+                                                       }catch(e){
+                                                               console.error(e);
+                                                       }
                                                }
                                        }
                                };
-                               notify(callbacks[name]);
+                               notify(callbacks['_' + name]);
                                if(!ignoreCatchall){
                                        notify(callbacks["*"]); // the catch-all
                                }
@@ -116,6 +120,9 @@ dojo.declare("dojo.Stateful", null, {
                if(!callback && typeof name === "function"){
                        callback = name;
                        name = "*";
+               }else{
+                       // prepend with dash to prevent name conflicts with function (like "name" property)
+                       name = '_' + name;
                }
                var propertyCallbacks = callbacks[name];
                if(typeof propertyCallbacks !== "object"){
index c7726678824d2cab6066e9a02c3b9f8799cec2e1..78fc6064a6f806bcaf65e1a891661b02f36b1741 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -15,6 +15,8 @@ dojo.require("dojo._base.connect");
 dojo.require("dojo._base.Deferred");
 dojo.require("dojo._base.json");
 dojo.require("dojo._base.Color");
-dojo.requireIf(dojo.isBrowser, "dojo._base.browser");
+dojo.require("dojo._base.browser");
+
+
 
 }
index 5f5c5af9baf4aef672507b1c8912ec55f2f9c5ad..4707fa582c8b63c6e39f79eadf7ff1e24c4bf049 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -11,6 +11,7 @@ dojo.provide("dojo._base.Color");
 dojo.require("dojo._base.array");
 dojo.require("dojo._base.lang");
 
+
 (function(){
 
        var d = dojo;
@@ -199,7 +200,7 @@ dojo.require("dojo._base.lang");
                //              Builds a `dojo.Color` from a 3 or 4 element array, mapping each
                //              element in sequence to the rgb(a) values of the color.
                // example:
-               //              | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha 
+               //              | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha
                // returns:
                //              A dojo.Color object. If obj is passed, it will be the return value.
                var t = obj || new d.Color();
index 3193024aba1b4dfa31b7ebfcc9f7983d4bd4347a..c5992c9663b520ff97b7cbe748d1b0c31289c7c9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,42 +10,43 @@ dojo._hasResource["dojo._base.Deferred"] = true;
 dojo.provide("dojo._base.Deferred");
 dojo.require("dojo._base.lang");
 
+
 (function(){
-       var mutator = function(){};             
+       var mutator = function(){};
        var freeze = Object.freeze || function(){};
        // A deferred provides an API for creating and resolving a promise.
        dojo.Deferred = function(/*Function?*/canceller){
        // summary:
        //              Deferreds provide a generic means for encapsulating an asynchronous
-       //              operation and notifying users of the completion and result of the operation. 
+       //              operation and notifying users of the completion and result of the operation.
        // description:
        //              The dojo.Deferred API is based on the concept of promises that provide a
        //              generic interface into the eventual completion of an asynchronous action.
-       //              The motivation for promises fundamentally is about creating a 
-       //              separation of concerns that allows one to achieve the same type of 
-       //              call patterns and logical data flow in asynchronous code as can be 
-       //              achieved in synchronous code. Promises allows one 
-       //              to be able to call a function purely with arguments needed for 
-       //              execution, without conflating the call with concerns of whether it is 
-       //              sync or async. One shouldn't need to alter a call's arguments if the 
-       //              implementation switches from sync to async (or vice versa). By having 
-       //              async functions return promises, the concerns of making the call are 
-       //              separated from the concerns of asynchronous interaction (which are 
+       //              The motivation for promises fundamentally is about creating a
+       //              separation of concerns that allows one to achieve the same type of
+       //              call patterns and logical data flow in asynchronous code as can be
+       //              achieved in synchronous code. Promises allows one
+       //              to be able to call a function purely with arguments needed for
+       //              execution, without conflating the call with concerns of whether it is
+       //              sync or async. One shouldn't need to alter a call's arguments if the
+       //              implementation switches from sync to async (or vice versa). By having
+       //              async functions return promises, the concerns of making the call are
+       //              separated from the concerns of asynchronous interaction (which are
        //              handled by the promise).
-       // 
-       //      The dojo.Deferred is a type of promise that provides methods for fulfilling the 
-       //              promise with a successful result or an error. The most important method for 
-       //              working with Dojo's promises is the then() method, which follows the 
+       //
+       //      The dojo.Deferred is a type of promise that provides methods for fulfilling the
+       //              promise with a successful result or an error. The most important method for
+       //              working with Dojo's promises is the then() method, which follows the
        //              CommonJS proposed promise API. An example of using a Dojo promise:
-       //              
+       //
        //              |       var resultingPromise = someAsyncOperation.then(function(result){
        //              |               ... handle result ...
        //              |       },
        //              |       function(error){
        //              |               ... handle error ...
        //              |       });
-       //      
-       //              The .then() call returns a new promise that represents the result of the 
+       //
+       //              The .then() call returns a new promise that represents the result of the
        //              execution of the callback. The callbacks will never affect the original promises value.
        //
        //              The dojo.Deferred instances also provide the following functions for backwards compatibility:
@@ -55,7 +56,7 @@ dojo.require("dojo._base.lang");
        //                      * callback(result)
        //                      * errback(result)
        //
-       //              Callbacks are allowed to return promisesthemselves, so
+       //              Callbacks are allowed to return promises themselves, so
        //              you can build complicated sequences of events with ease.
        //
        //              The creator of the Deferred may specify a canceller.  The canceller
@@ -115,7 +116,7 @@ dojo.require("dojo._base.lang");
        //              |                               renderDataitem(data[x]);
        //              |                       }
        //              |                       d.callback(true);
-       //              |               }catch(e){ 
+       //              |               }catch(e){
        //              |                       d.errback(new Error("rendering failed"));
        //              |               }
        //              |               return d;
@@ -129,7 +130,7 @@ dojo.require("dojo._base.lang");
        //              |       // again, so we could chain adding callbacks or save the
        //              |       // deferred for later should we need to be notified again.
        // example:
-       //              In this example, renderLotsOfData is syncrhonous and so both
+       //              In this example, renderLotsOfData is synchronous and so both
        //              versions are pretty artificial. Putting the data display on a
        //              timeout helps show why Deferreds rock:
        //
@@ -142,7 +143,7 @@ dojo.require("dojo._base.lang");
        //              |                                       renderDataitem(data[x]);
        //              |                               }
        //              |                               d.callback(true);
-       //              |                       }catch(e){ 
+       //              |                       }catch(e){
        //              |                               d.errback(new Error("rendering failed"));
        //              |                       }
        //              |               }, 100);
@@ -157,11 +158,11 @@ dojo.require("dojo._base.lang");
        //              Note that the caller doesn't have to change his code at all to
        //              handle the asynchronous case.
                var result, finished, isError, head, nextListener;
-               var promise = this.promise = {};
+               var promise = (this.promise = {});
                
                function complete(value){
                        if(finished){
-                               throw new Error("This deferred has already been resolved");                             
+                               throw new Error("This deferred has already been resolved");
                        }
                        result = value;
                        finished = true;
@@ -172,7 +173,7 @@ dojo.require("dojo._base.lang");
                        while(!mutated && nextListener){
                                var listener = nextListener;
                                nextListener = nextListener.next;
-                               if(mutated = (listener.progress == mutator)){ // assignment and check
+                               if((mutated = (listener.progress == mutator))){ // assignment and check
                                        finished = false;
                                }
                                var func = (isError ? listener.error : listener.resolved);
@@ -184,6 +185,9 @@ dojo.require("dojo._base.lang");
                                                        continue;
                                                }
                                                var unchanged = mutated && newResult === undefined;
+                                               if(mutated && !unchanged){
+                                                       isError = newResult instanceof Error;
+                                               }
                                                listener.deferred[unchanged && isError ? "reject" : "resolve"](unchanged ? result : newResult);
                                        }
                                        catch (e) {
@@ -196,7 +200,7 @@ dojo.require("dojo._base.lang");
                                                listener.deferred.resolve(result);
                                        }
                                }
-                       }       
+                       }
                }
                // calling resolve will resolve the promise
                this.resolve = this.callback = function(value){
@@ -211,7 +215,7 @@ dojo.require("dojo._base.lang");
                // calling error will indicate that the promise failed
                this.reject = this.errback = function(error){
                        // summary:
-                       //              Fulfills the Deferred instance as an error with the provided error 
+                       //              Fulfills the Deferred instance as an error with the provided error
                        isError = true;
                        this.fired = 1;
                        complete(error);
@@ -228,7 +232,7 @@ dojo.require("dojo._base.lang");
                        while(listener){
                                var progress = listener.progress;
                                progress && progress(update);
-                               listener = listener.next;       
+                               listener = listener.next;
                        }
                };
                this.addCallbacks = function(/*Function?*/callback, /*Function?*/errback){
@@ -237,35 +241,35 @@ dojo.require("dojo._base.lang");
                };
                // provide the implementation of the promise
                this.then = promise.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){
-                       // summary
-                       //              Adds a fulfilledHandler, errorHandler, and progressHandler to be called for 
-                       //              completion of a promise. The fulfilledHandler is called when the promise 
-                       //              is fulfilled. The errorHandler is called when a promise fails. The 
-                       //              progressHandler is called for progress events. All arguments are optional 
-                       //              and non-function values are ignored. The progressHandler is not only an 
-                       //              optional argument, but progress events are purely optional. Promise 
+                       // summary:
+                       //              Adds a fulfilledHandler, errorHandler, and progressHandler to be called for
+                       //              completion of a promise. The fulfilledHandler is called when the promise
+                       //              is fulfilled. The errorHandler is called when a promise fails. The
+                       //              progressHandler is called for progress events. All arguments are optional
+                       //              and non-function values are ignored. The progressHandler is not only an
+                       //              optional argument, but progress events are purely optional. Promise
                        //              providers are not required to ever create progress events.
-                       // 
-                       //              This function will return a new promise that is fulfilled when the given 
-                       //              fulfilledHandler or errorHandler callback is finished. This allows promise 
-                       //              operations to be chained together. The value returned from the callback 
-                       //              handler is the fulfillment value for the returned promise. If the callback 
+                       //
+                       //              This function will return a new promise that is fulfilled when the given
+                       //              fulfilledHandler or errorHandler callback is finished. This allows promise
+                       //              operations to be chained together. The value returned from the callback
+                       //              handler is the fulfillment value for the returned promise. If the callback
                        //              throws an error, the returned promise will be moved to failed state.
-                       //      
+                       //
                        // example:
                        //              An example of using a CommonJS compliant promise:
                        //              |       asyncComputeTheAnswerToEverything().
                        //              |               then(addTwo).
                        //              |               then(printResult, onError);
-                       //              |       >44 
-                       //              
+                       //              |       >44
+                       //
                        var returnDeferred = progressCallback == mutator ? this : new dojo.Deferred(promise.cancel);
                        var listener = {
-                               resolved: resolvedCallback, 
-                               error: errorCallback, 
-                               progress: progressCallback, 
+                               resolved: resolvedCallback,
+                               error: errorCallback,
+                               progress: progressCallback,
                                deferred: returnDeferred
-                       }; 
+                       };
                        if(nextListener){
                                head = head.next = listener;
                        }
@@ -291,7 +295,7 @@ dojo.require("dojo._base.lang");
                                        deferred.reject(error);
                                }
                        }
-               }
+               };
                freeze(promise);
        };
        dojo.extend(dojo.Deferred, {
@@ -312,7 +316,7 @@ dojo.require("dojo._base.lang");
 })();
 dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback, /*Function?*/progressHandler){
        // summary:
-       //              This provides normalization between normal synchronous values and 
+       //              This provides normalization between normal synchronous values and
        //              asynchronous promises, so you can interact with them in a common way
        //      example:
        //              |       function printFirstAndList(items){
index 12b631a4b439eef34930b6eeec1b1d4fcbbb7832..8cdc1c0f7780e0180a1e8cc33f4b619fafcfd225 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,6 +10,9 @@ dojo._hasResource["dojo._base.NodeList"] = true;
 dojo.provide("dojo._base.NodeList");
 dojo.require("dojo._base.lang");
 dojo.require("dojo._base.array");
+dojo.require("dojo._base.connect");
+dojo.require("dojo._base.html");
+
 
 (function(){
 
@@ -248,7 +251,7 @@ dojo.require("dojo._base.array");
        });
 
        // add forEach actions
-       d.forEach(["connect", "addClass", "removeClass", "toggleClass", "empty", "removeAttr"], function(name){
+       d.forEach(["connect", "addClass", "removeClass", "replaceClass", "toggleClass", "empty", "removeAttr"], function(name){
                nlp[name] = adaptAsForEach(d[name]);
        });
 
@@ -306,7 +309,7 @@ dojo.require("dojo._base.array");
 
                _cloneNode: function(/*DOMNode*/ node){
                        // summary:
-                       //              private utiltity to clone a node. Not very interesting in the vanilla
+                       //              private utility to clone a node. Not very interesting in the vanilla
                        //              dojo.NodeList case, but delegates could do interesting things like
                        //              clone event handlers if that is derivable from the node.
                        return node.cloneNode(true);
@@ -400,7 +403,7 @@ dojo.require("dojo._base.array");
                        if(this._parent){
                                return this._parent;
                        }else{
-                               //Just return empy list.
+                               //Just return empty list.
                                return new this._NodeListCtor();
                        }
                },
@@ -468,12 +471,12 @@ dojo.require("dojo._base.array");
 
                indexOf: function(value, fromIndex){
                        //      summary:
-                       //              see dojo.indexOf(). The primary difference is that the acted-on 
+                       //              see dojo.indexOf(). The primary difference is that the acted-on
                        //              array is implicitly this NodeList
                        // value: Object:
                        //              The value to search for.
                        // fromIndex: Integer?:
-                       //              The loction to start searching from. Optional. Defaults to 0.
+                       //              The location to start searching from. Optional. Defaults to 0.
                        //      description:
                        //              For more details on the behavior of indexOf, see Mozilla's
                        //              (indexOf
@@ -494,7 +497,7 @@ dojo.require("dojo._base.array");
                        // value: Object
                        //              The value to search for.
                        // fromIndex: Integer?
-                       //              The loction to start searching from. Optional. Defaults to 0.
+                       //              The location to start searching from. Optional. Defaults to 0.
                        // returns:
                        //              Positive Integer or 0 for a match, -1 of not found.
                        return d.lastIndexOf(this, value, fromIndex); // Integer
@@ -572,12 +575,12 @@ dojo.require("dojo._base.array");
 
                forEach: function(callback, thisObj){
                        //      summary:
-                       //              see `dojo.forEach()`. The primary difference is that the acted-on 
+                       //              see `dojo.forEach()`. The primary difference is that the acted-on
                        //              array is implicitly this NodeList. If you want the option to break out
                        //              of the forEach loop, use every() or some() instead.
                        d.forEach(this, callback, thisObj);
                        // non-standard return to allow easier chaining
-                       return this; // dojo.NodeList 
+                       return this; // dojo.NodeList
                },
 
                /*=====
@@ -594,7 +597,7 @@ dojo.require("dojo._base.array");
                        //      summary:
                        //              Returns border-box objects (x/y/w/h) of all elements in a node list
                        //              as an Array (*not* a NodeList). Acts like `dojo.position`, though
-                       //              assumes the node passed is each node in this list. 
+                       //              assumes the node passed is each node in this list.
 
                        return d.map(this, d.position); // Array
                },
@@ -617,7 +620,7 @@ dojo.require("dojo._base.array");
                        //              Disable a group of buttons:
                        //      |       dojo.query("button.group").attr("disabled", true);
                        //      example:
-                       //              innerHTML can be assigned or retreived as well:
+                       //              innerHTML can be assigned or retrieved as well:
                        //      |       // get the innerHTML (as an array) for each list item
                        //      |       var ih = dojo.query("li.replaceable").attr("innerHTML");
                        return; // dojo.NodeList
@@ -682,7 +685,7 @@ dojo.require("dojo._base.array");
                        //              if 2 arguments are passed (methodName, objOrFunc), objOrFunc should
                        //              reference a function or be the name of the function in the global
                        //              namespace to attach. If 3 arguments are provided
-                       //              (methodName, objOrFunc, funcName), objOrFunc must be the scope to 
+                       //              (methodName, objOrFunc, funcName), objOrFunc must be the scope to
                        //              locate the bound function in
                        //      funcName: String?
                        //              optional. A string naming the function in objOrFunc to bind to the
@@ -728,7 +731,7 @@ dojo.require("dojo._base.array");
                        //              by queryOrNode. Returns the original NodeList. See: `dojo.place`
                        //      queryOrNode:
                        //              may be a string representing any valid CSS3 selector or a DOM node.
-                       //              In the selector case, only the first matching element will be used 
+                       //              In the selector case, only the first matching element will be used
                        //              for relative positioning.
                        //      position:
                        //              can be one of:
@@ -743,18 +746,15 @@ dojo.require("dojo._base.array");
                        return this.forEach(function(node){ d.place(node, item, position); }); // dojo.NodeList
                },
 
-               orphan: function(/*String?*/ simpleFilter){
+               orphan: function(/*String?*/ filter){
                        //      summary:
-                       //              removes elements in this list that match the simple filter
+                       //              removes elements in this list that match the filter
                        //              from their parents and returns them as a new NodeList.
-                       //      simpleFilter:
-                       //              single-expression CSS rule. For example, ".thinger" or
-                       //              "#someId[attrName='value']" but not "div > span". In short,
-                       //              anything which does not invoke a descent to evaluate but
-                       //              can instead be used to test a single node is acceptable.
+                       //      filter:
+                       //              CSS selector like ".foo" or "div > span"
                        //      returns:
-                       //              `dojo.NodeList` containing the orpahned elements 
-                       return (simpleFilter ? d._filterQueryResult(this, simpleFilter) : this).forEach(orphan); // dojo.NodeList
+                       //              `dojo.NodeList` containing the orphaned elements
+                       return (filter ? d._filterQueryResult(this, filter) : this).forEach(orphan); // dojo.NodeList
                },
 
                adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){
@@ -781,7 +781,7 @@ dojo.require("dojo._base.array");
                // FIXME: do we need this?
                query: function(/*String*/ queryStr){
                        //      summary:
-                       //              Returns a new list whose memebers match the passed query,
+                       //              Returns a new list whose members match the passed query,
                        //              assuming elements of the current NodeList as the root for
                        //              each search.
                        //      example:
@@ -792,9 +792,9 @@ dojo.require("dojo._base.array");
                        //      |               </p>
                        //      |       </div>
                        //      |       <div id="bar">
-                       //      |               <p>great commedians may not be funny <span>in person</span></p>
+                       //      |               <p>great comedians may not be funny <span>in person</span></p>
                        //      |       </div>
-                       //              If we are presented with the following defintion for a NodeList:
+                       //              If we are presented with the following definition for a NodeList:
                        //      |       var l = new dojo.NodeList(dojo.byId("foo"), dojo.byId("bar"));
                        //              it's possible to find all span elements under paragraphs
                        //              contained by these elements with this sub-query:
@@ -809,18 +809,14 @@ dojo.require("dojo._base.array");
                        return this._wrap(apc.apply([], ret), this);    // dojo.NodeList
                },
 
-               filter: function(/*String|Function*/ simpleFilter){
+               filter: function(/*String|Function*/ filter){
                        //      summary:
                        //              "masks" the built-in javascript filter() method (supported
                        //              in Dojo via `dojo.filter`) to support passing a simple
                        //              string filter in addition to supporting filtering function
                        //              objects.
-                       //      simpleFilter:
-                       //              If a string, a single-expression CSS rule. For example,
-                       //              ".thinger" or "#someId[attrName='value']" but not "div >
-                       //              span". In short, anything which does not invoke a descent
-                       //              to evaluate but can instead be used to test a single node
-                       //              is acceptable.
+                       //      filter:
+                       //              If a string, a CSS rule like ".thinger" or "div > span".
                        //      example:
                        //              "regular" JS filter syntax as exposed in dojo.filter:
                        //              |       dojo.query("*").filter(function(item){
@@ -832,7 +828,7 @@ dojo.require("dojo._base.array");
                        //              |       dojo.query("*").filter("p").styles("backgroundColor", "yellow");
 
                        var a = arguments, items = this, start = 0;
-                       if(typeof simpleFilter == "string"){ // inline'd type check
+                       if(typeof filter == "string"){ // inline'd type check
                                items = d._filterQueryResult(this, a[0]);
                                if(a.length == 1){
                                        // if we only got a string query, pass back the filtered results
@@ -880,10 +876,10 @@ dojo.require("dojo._base.array");
                        //              |       "before"
                        //              |       "after"
                        //              |       "replace" (replaces nodes in this NodeList with new content)
-                       //              |       "only" (removes other children of the nodes so new content is hte only child)
+                       //              |       "only" (removes other children of the nodes so new content is the only child)
                        //              or an offset in the childNodes property
                        //      example:
-                       //              appends content to the end if the position is ommitted
+                       //              appends content to the end if the position is omitted
                        //      |       dojo.query("h3 > p").addContent("hey there!");
                        //      example:
                        //              add something to the front of each element that has a
@@ -914,7 +910,7 @@ dojo.require("dojo._base.array");
                        //              text: "Send"
                        //      });
                        content = this._normalize(content, this[0]);
-                       for(var i = 0, node; node = this[i]; i++){
+                       for(var i = 0, node; (node = this[i]); i++){
                                this._place(content, node, position, i > 0);
                        }
                        return this; //dojo.NodeList
@@ -943,11 +939,11 @@ dojo.require("dojo._base.array");
                        //      index: Integer...
                        //              One or more 0-based indices of items in the current
                        //              NodeList. A negative index will start at the end of the
-                       //              list and go backwards. 
+                       //              list and go backwards.
                        //
                        //      example:
                        //      Shorten the list to the first, second, and third elements
-                       //      |       dojo.query("a").at(0, 1, 2).forEach(fn); 
+                       //      |       dojo.query("a").at(0, 1, 2).forEach(fn);
                        //
                        //      example:
                        //      Retrieve the first and last elements of a unordered list:
@@ -957,13 +953,13 @@ dojo.require("dojo._base.array");
                        //      Do something for the first element only, but end() out back to
                        //      the original list and continue chaining:
                        //      |       dojo.query("a").at(0).onclick(fn).end().forEach(function(n){
-                       //      |               console.log(n); // all anchors on the page. 
-                       //      |       })      
+                       //      |               console.log(n); // all anchors on the page.
+                       //      |       })
                        //
                        //      returns:
                        //              dojo.NodeList
                        var t = new this._NodeListCtor();
-                       d.forEach(arguments, function(i){ 
+                       d.forEach(arguments, function(i){
                                if(i < 0){ i = this.length + i }
                                if(this[i]){ t.push(this[i]); }
                        }, this);
@@ -973,7 +969,8 @@ dojo.require("dojo._base.array");
        });
 
        nl.events = [
-               // summary: list of all DOM events used in NodeList
+               // summary:
+               //              list of all DOM events used in NodeList
                "blur", "focus", "change", "click", "error", "keydown", "keypress",
                "keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove",
                "mouseout", "mouseover", "mouseup", "submit"
@@ -986,7 +983,7 @@ dojo.require("dojo._base.array");
                        var _oe = "on" + evt;
                        nlp[_oe] = function(a, b){
                                return this.connect(_oe, a, b);
-                       }
+                       };
                                // FIXME: should these events trigger publishes?
                                /*
                                return (a ? this.connect(_oe, a, b) :
index 3ef3012a2a4eb8206a5d8b64f5ddbc371c99a461..a1f99276a881bd6ce8f77427b50d1ba80ff61baf 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -76,7 +76,7 @@ djConfig = {
        //              of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple
        //              modules may be configured via `djConfig.modulePaths`.
        modulePaths: {},
-       // afterOnLoad: Boolean 
+       // afterOnLoad: Boolean
        //              Indicates Dojo was added to the page after the page load. In this case
        //              Dojo will not wait for the page DOMContentLoad/load events and fire
        //              its dojo.addOnLoad callbacks after making sure all outstanding
@@ -103,7 +103,7 @@ djConfig = {
        // dojoBlankHtmlUrl: String
        //              Used by some modules to configure an empty iframe. Used by dojo.io.iframe and
        //              dojo.back, and dijit popup support in IE where an iframe is needed to make sure native
-       //              controls do not bleed through the popups. Normally this configuration variable 
+       //              controls do not bleed through the popups. Normally this configuration variable
        //              does not need to be set, except when using cross-domain/CDN Dojo builds.
        //              Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl`
        //              to the path on your domain your copy of blank.html.
@@ -149,7 +149,7 @@ djConfig = {
                        "groupEnd", "info", "profile", "profileEnd", "time", "timeEnd",
                        "trace", "warn", "log"
                ];
-               var i=0, tn;
+               var i = 0, tn;
                while((tn=cn[i++])){
                        if(!console[tn]){
                                (function(){
@@ -209,9 +209,13 @@ dojo.global = {
                debugAtAllCosts: false
        };
 
-       if(typeof djConfig != "undefined"){
-               for(var opt in djConfig){
-                       d.config[opt] = djConfig[opt];
+       // FIXME: 2.0, drop djConfig support. Use dojoConfig exclusively for global config.
+       var cfg = typeof djConfig != "undefined" ? djConfig :
+               typeof dojoConfig != "undefined" ? dojoConfig : null;
+               
+       if(cfg){
+               for(var c in cfg){
+                       d.config[c] = cfg[c];
                }
        }
 
@@ -223,7 +227,7 @@ dojo.global = {
 =====*/
        dojo.locale = d.config.locale;
 
-       var rev = "$Rev: 22487 $".match(/\d+/);
+       var rev = "$Rev: 24595 $".match(/\d+/);
 
 /*=====
        dojo.version = function(){
@@ -247,7 +251,7 @@ dojo.global = {
        }
 =====*/
        dojo.version = {
-               major: 1, minor: 5, patch: 0, flag: "",
+               major: 1, minor: 6, patch: 1, flag: "",
                revision: rev ? +rev[0] : NaN,
                toString: function(){
                        with(d.version){
@@ -323,7 +327,7 @@ dojo.global = {
                //      |               constructor: function(properties){
                //      |                       // property configuration:
                //      |                       dojo.mixin(this, properties);
-               //      |       
+               //      |
                //      |                       console.log(this.quip);
                //      |                       //  ...
                //      |               },
@@ -344,7 +348,7 @@ dojo.global = {
                //      |                       name: "Carl Brutanananadilewski"
                //      |               }
                //      |       );
-               //      |       
+               //      |
                //      |       // will print "Carl Brutanananadilewski"
                //      |       console.log(flattened.name);
                //      |       // will print "true"
@@ -419,10 +423,7 @@ dojo.global = {
                //              determine if an object supports a given method
                //      description:
                //              useful for longer api chains where you have to test each object in
-               //              the chain. Useful only for object and method detection.
-               //              Not useful for testing generic properties on an object.
-               //              In particular, dojo.exists("foo.bar") when foo.bar = ""
-               //              will return false. Use ("bar" in foo) to test for those cases.
+               //              the chain. Useful for object and method detection.
                //      name:
                //              Path to an object, in the form "A.B.C".
                //      obj:
@@ -441,7 +442,7 @@ dojo.global = {
                //      |       // search from a particular scope
                //      |       dojo.exists("bar", foo); // true
                //      |       dojo.exists("bar.baz", foo); // false
-               return !!d.getObject(name, false, obj); // Boolean
+               return d.getObject(name, false, obj) !== undefined; // Boolean
        }
 
        dojo["eval"] = function(/*String*/ scriptFragment){
index 7d92d70e350fcd61896b75d606263ef9e92ef573..b31bd77dc4a6e71edc1caf7c3e8251f17f3347bc 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -26,9 +26,9 @@ dojo.isIE = {
 dojo.isSafari = {
        //      example:
        //      |       if(dojo.isSafari){ ... }
-       //      example: 
+       //      example:
        //              Detect iPhone:
-       //      |       if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ 
+       //      |       if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){
        //      |               // we are iPhone. Note, iPod touch reports "iPod" above and fails this test.
        //      |       }
 };
@@ -71,7 +71,6 @@ dojo = {
        //              True if the client runs on Mac
 }
 =====*/
-
 if(typeof window != 'undefined'){
        dojo.isBrowser = true;
        dojo._name = "browser";
@@ -98,7 +97,7 @@ if(typeof window != 'undefined'){
                                                d.config.baseUrl = src.substring(0, m.index);
                                        }
                                        // and find out if we need to modify our behavior
-                                       var cfg = scripts[i].getAttribute("djConfig");
+                                       var cfg = (scripts[i].getAttribute("djConfig") || scripts[i].getAttribute("data-dojo-config"));
                                        if(cfg){
                                                var cfgo = eval("({ "+cfg+" })");
                                                for(var x in cfgo){
@@ -172,7 +171,7 @@ if(typeof window != 'undefined'){
                                d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
                
                d._xhrObj = function(){
-                       // summary: 
+                       // summary:
                        //              does the work of portably generating a new XMLHTTPRequest object.
                        var http, last_e;
                                                if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){
@@ -205,10 +204,11 @@ if(typeof window != 'undefined'){
                        var stat = http.status || 0,
                                lp = location.protocol;
                        return (stat >= 200 && stat < 300) ||   // Boolean
-                               stat == 304 ||                                          // allow any 2XX response code
-                               stat == 1223 ||                                                 // get it out of the cache
+                               stat == 304 ||                  // allow any 2XX response code
+                               stat == 1223 ||                 // get it out of the cache
+                                                               // Internet Explorer mangled the status code
                                // Internet Explorer mangled the status code OR we're Titanium/browser chrome/chrome extension requesting a local file
-                               (!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:") );
+                               (!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:"));
                }
 
                //See if base tag is in use.
@@ -303,7 +303,7 @@ if(typeof window != 'undefined'){
                d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){
                        // summary:
                        //              registers a function to be triggered when window.onunload
-                       //              fires. 
+                       //              fires.
                        //      description:
                        //              The first time that addOnWindowUnload is called Dojo
                        //              will register a page listener to trigger your unload
@@ -334,7 +334,7 @@ if(typeof window != 'undefined'){
                        //      description:
                        //              The first time that addOnUnload is called Dojo will
                        //              register a page listener to trigger your unload handler
-                       //              with. 
+                       //              with.
                        //
                        //              In a browser enviroment, the functions will be triggered
                        //              during the window.onbeforeunload event. Be careful of doing
@@ -347,7 +347,7 @@ if(typeof window != 'undefined'){
                        //
                        //              Further note that calling dojo.addOnUnload will prevent
                        //              browsers from using a "fast back" cache to make page
-                       //              loading via back button instantaneous. 
+                       //              loading via back button instantaneous.
                        // example:
                        //      |       dojo.addOnUnload(functionPointer)
                        //      |       dojo.addOnUnload(object, "functionName")
@@ -384,7 +384,7 @@ if(typeof window != 'undefined'){
                }
        }
 
-       if(!dojo.config.afterOnLoad){           
+       if(!dojo.config.afterOnLoad){
                if(document.addEventListener){
                        //Standards. Hooray! Assumption here that if standards based,
                        //it knows about DOMContentLoaded. It is OK if it does not, the fall through
@@ -401,10 +401,10 @@ if(typeof window != 'undefined'){
                        if(!dojo.config.skipIeDomLoaded && self === self.top){
                                dojo._scrollIntervalId = setInterval(function (){
                                        try{
-                                               //When dojo is loaded into an iframe in an IE HTML Application 
+                                               //When dojo is loaded into an iframe in an IE HTML Application
                                                //(HTA), such as in a selenium test, javascript in the iframe
                                                //can't see anything outside of it, so self===self.top is true,
-                                               //but the iframe is not the top window and doScroll will be 
+                                               //but the iframe is not the top window and doScroll will be
                                                //available before document.body is set. Test document.body
                                                //before trying the doScroll trick
                                                if(document.body){
@@ -467,8 +467,11 @@ if(dojo.config.isDebug){
 }
 
 if(dojo.config.debugAtAllCosts){
-       dojo.config.useXDomain = true;
-       dojo.require("dojo._base._loader.loader_xd");
+       // this breaks the new AMD based module loader. The XDomain won't be necessary
+       // anyway if you switch to the asynchronous loader
+       //dojo.config.useXDomain = true;
+       //dojo.require("dojo._base._loader.loader_xd");
        dojo.require("dojo._base._loader.loader_debug");
        dojo.require("dojo.i18n");
 }
+
index 94a0a804699db20131951a2ec8c02a50bc52f4ce..ca47a4c1c1967dc87e8442a09a1b6e1ffd1bcc5c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -241,7 +241,7 @@ if(typeof window != 'undefined'){
                        return oc;
                };
 
-               // FIXME: 
+               // FIXME:
                //              don't really like the current arguments and order to
                //              _inContext, so don't make it public until it's right!
                dojo._inContext = function(g, d, f){
@@ -302,7 +302,7 @@ if(typeof window != 'undefined'){
        //              Dojo's to fire once..but we might care if pages navigate. We'll
        //              probably need an extension-specific API
        if(!dojo.config.afterOnLoad){
-               window.addEventListener("DOMContentLoaded",function(e){ 
+               window.addEventListener("DOMContentLoaded",function(e){
                        dojo._loadInit(e);
                        // console.log("DOM content loaded", e);
                }, false);
index ee9ad8b4339ee77982a31ce85648774c861b705f..e3aa78524118133d9da88817907fb01025d8af07 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -58,6 +58,9 @@ dojo._isLocalUrl = function(/*String*/ uri) {
 
 // see comments in spidermonkey loadUri
 dojo._loadUri = function(uri, cb){
+       if(dojo._loadedUrls[uri]){
+               return true; // Boolean
+       }
        try{
                var local;
                try{
@@ -67,29 +70,32 @@ dojo._loadUri = function(uri, cb){
                        return false;
                }
 
+               dojo._loadedUrls[uri] = true;
                //FIXME: Use Rhino 1.6 native readFile/readUrl if available?
                if(cb){
                        var contents = (local ? readText : readUri)(uri, "UTF-8");
 
                        // patch up the input to eval until https://bugzilla.mozilla.org/show_bug.cgi?id=471005 is fixed.
                        if(!eval("'\u200f'").length){
-                               contents = String(contents).replace(/[\u200E\u200F\u202A-\u202E]/g, function(match){ 
-                                       return "\\u" + match.charCodeAt(0).toString(16); 
+                               contents = String(contents).replace(/[\u200E\u200F\u202A-\u202E]/g, function(match){
+                                       return "\\u" + match.charCodeAt(0).toString(16);
                                })
                        }
-
-                       cb(eval('('+contents+')'));
+                       contents = /^define\(/.test(contents) ? contents : '('+contents+')';
+                       cb(eval(contents));
                }else{
                        load(uri);
                }
+               dojo._loadedUrls.push(uri);
                return true;
        }catch(e){
+               dojo._loadedUrls[uri] = false;
                console.debug("rhino load('" + uri + "') failed. Exception: " + e);
                return false;
        }
 }
 
-dojo.exit = function(exitcode){ 
+dojo.exit = function(exitcode){
        quit(exitcode);
 }
 
@@ -157,7 +163,7 @@ dojo._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){
 dojo.doc = typeof document != "undefined" ? document : null;
 
 dojo.body = function(){
-       return document.body;   
+       return document.body;
 }
 
 // Supply setTimeout/clearTimeout implementations if they aren't already there
index 17b21f5f0fca93cf3a477af80e747fcdf4cc03ed..a3d2dfc6fe37f0d3b4cd275a9bf7c0e4f72055ae 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -19,13 +19,13 @@ dojo._name = 'spidermonkey';
 
 /*=====
 dojo.isSpidermonkey = {
-       // summary: Detect spidermonkey 
+       // summary: Detect spidermonkey
 };
 =====*/
 
 dojo.isSpidermonkey = true;
-dojo.exit = function(exitcode){ 
-       quit(exitcode); 
+dojo.exit = function(exitcode){
+       quit(exitcode);
 }
 
 if(typeof print == "function"){
@@ -37,15 +37,15 @@ if(typeof line2pc == 'undefined'){
 }
 
 dojo._spidermonkeyCurrentFile = function(depth){
-       //      
+       //
        //      This is a hack that determines the current script file by parsing a
        //      generated stack trace (relying on the non-standard "stack" member variable
        //      of the SpiderMonkey Error object).
-       //      
+       //
        //      If param depth is passed in, it'll return the script file which is that far down
        //      the stack, but that does require that you know how deep your stack is when you are
        //      calling.
-       //      
+       //
     var s = '';
     try{
                throw Error("whatever");
@@ -54,23 +54,23 @@ dojo._spidermonkeyCurrentFile = function(depth){
        }
     // lines are like: bu_getCurrentScriptURI_spidermonkey("ScriptLoader.js")@burst/Runtime.js:101
     var matches = s.match(/[^@]*\.js/gi);
-    if(!matches){ 
+    if(!matches){
                throw Error("could not parse stack string: '" + s + "'");
        }
     var fname = (typeof depth != 'undefined' && depth) ? matches[depth + 1] : matches[matches.length - 1];
-    if(!fname){ 
+    if(!fname){
                throw Error("could not find file name in stack string '" + s + "'");
        }
     //print("SpiderMonkeyRuntime got fname '" + fname + "' from stack string '" + s + "'");
     return fname;
 }
 
-// print(dojo._spidermonkeyCurrentFile(0)); 
+// print(dojo._spidermonkeyCurrentFile(0));
 
 dojo._loadUri = function(uri){
        // spidermonkey load() evaluates the contents into the global scope (which
        // is what we want).
-       // TODO: sigh, load() does not return a useful value. 
+       // TODO: sigh, load() does not return a useful value.
        // Perhaps it is returning the value of the last thing evaluated?
        var ok = load(uri);
        // console.log("spidermonkey load(", uri, ") returned ", ok);
index 9206de888f4adc20188440ef7ee7e5752256036f..73df544fa53497b760bece43c0850ca44570c643 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -11,9 +11,8 @@ dojo._hasResource["dojo.foo"] = true;
  * loader.js - A bootstrap module.  Runs before the hostenv_*.js file. Contains
  * all of the package loading methods.
  */
-
 (function(){
-       var d = dojo;
+       var d = dojo, currentModule;
 
        d.mixin(d, {
                _loadedModules: {},
@@ -45,11 +44,11 @@ dojo._hasResource["dojo.foo"] = true;
 
                _loadedUrls: [],
 
-               //WARNING: 
+               //WARNING:
                //              This variable is referenced by packages outside of bootstrap:
                //              FloatingPane.js and undo/browser.js
                _postLoad: false,
-               
+
                //Egad! Lots of test files push on this directly instead of using dojo.addOnLoad.
                _loaders: [],
                _unloaders: [],
@@ -68,21 +67,24 @@ dojo._hasResource["dojo.foo"] = true;
                //              not caught by us, so the caller will see it.  We return a true
                //              value if and only if the script is found.
                //
-               // relpath: 
+               // relpath:
                //              A relative path to a script (no leading '/', and typically ending
                //              in '.js').
-               // module: 
+               // module:
                //              A module whose existance to check for after loading a path.  Can be
                //              used to determine success or failure of the load.
-               // cb: 
+               // cb:
                //              a callback function to pass the result of evaluating the script
 
                var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : d.baseUrl) + relpath;
                try{
+                       currentModule = module;
                        return !module ? d._loadUri(uri, cb) : d._loadUriAndCheck(uri, module, cb); // Boolean
                }catch(e){
                        console.error(e);
                        return false; // Boolean
+               }finally{
+                       currentModule = null;
                }
        }
 
@@ -95,7 +97,7 @@ dojo._hasResource["dojo.foo"] = true;
                //              it succeeded. Returns false if the URI reading failed.  Throws if
                //              the evaluation throws.
                //      uri: a uri which points at the script to be loaded
-               //      cb: 
+               //      cb:
                //              a callback function to process the result of evaluating the script
                //              as an expression, typically used by the resource bundle loader to
                //              load JSON-style resources
@@ -109,7 +111,8 @@ dojo._hasResource["dojo.foo"] = true;
                        d._loadedUrls[uri] = true;
                        d._loadedUrls.push(uri);
                        if(cb){
-                               contents = '('+contents+')';
+                               //conditional to support script-inject i18n bundle format
+                               contents = /^define\(/.test(contents) ? contents : '('+contents+')';
                        }else{
                                //Only do the scoping if no callback. If a callback is specified,
                                //it is most likely the i18n bundle stuff.
@@ -121,16 +124,16 @@ dojo._hasResource["dojo.foo"] = true;
                }
                // Check to see if we need to call _callLoaded() due to an addOnLoad() that arrived while we were busy downloading
                if(--d._inFlightCount == 0 && d._postLoad && d._loaders.length){
-                       // We shouldn't be allowed to get here but Firefox allows an event 
-                       // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. 
+                       // We shouldn't be allowed to get here but Firefox allows an event
+                       // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet.
                        // If the current script block contains multiple require() statements, then after each
                        // require() returns, inFlightCount == 0, but we want to hold the _callLoaded() until
                        // all require()s are done since the out-of-sequence addOnLoad() presumably needs them all.
                        // setTimeout allows the next require() to start (if needed), and then we check this again.
-                       setTimeout(function(){ 
-                               // If inFlightCount > 0, then multiple require()s are running sequentially and 
+                       setTimeout(function(){
+                               // If inFlightCount > 0, then multiple require()s are running sequentially and
                                // the next require() started after setTimeout() was executed but before we got here.
-                               if(d._inFlightCount == 0){ 
+                               if(d._inFlightCount == 0){
                                        d._callLoaded();
                                }
                        }, 0);
@@ -153,10 +156,10 @@ dojo._hasResource["dojo.foo"] = true;
        dojo.loaded = function(){
                // summary:
                //              signal fired when initial environment and package loading is
-               //              complete. You should use dojo.addOnLoad() instead of doing a 
+               //              complete. You should use dojo.addOnLoad() instead of doing a
                //              direct dojo.connect() to this method in order to handle
                //              initialization tasks that require the environment to be
-               //              initialized. In a browser host, declarative widgets will 
+               //              initialized. In a browser host, declarative widgets will
                //              be constructed when this function finishes runing.
                d._loadNotifying = true;
                d._postLoad = true;
@@ -183,8 +186,8 @@ dojo._hasResource["dojo.foo"] = true;
        dojo.unloaded = function(){
                // summary:
                //              signal fired by impending environment destruction. You should use
-               //              dojo.addOnUnload() instead of doing a direct dojo.connect() to this 
-               //              method to perform page/application cleanup methods. See 
+               //              dojo.addOnUnload() instead of doing a direct dojo.connect() to this
+               //              method to perform page/application cleanup methods. See
                //              dojo.addOnUnload for more info.
                var mll = d._unloaders;
                while(mll.length){
@@ -203,13 +206,13 @@ dojo._hasResource["dojo.foo"] = true;
 
        dojo.ready = dojo.addOnLoad = function(/*Object*/obj, /*String|Function?*/functionName){
                // summary:
-               //              Registers a function to be triggered after the DOM and dojo.require() calls 
+               //              Registers a function to be triggered after the DOM and dojo.require() calls
                //              have finished loading.
                //
                // description:
                //              Registers a function to be triggered after the DOM has finished
-               //              loading and `dojo.require` modules have loaded. Widgets declared in markup 
-               //              have been instantiated if `djConfig.parseOnLoad` is true when this fires. 
+               //              loading and `dojo.require` modules have loaded. Widgets declared in markup
+               //              have been instantiated if `djConfig.parseOnLoad` is true when this fires.
                //
                //              Images and CSS files may or may not have finished downloading when
                //              the specified function is called.  (Note that widgets' CSS and HTML
@@ -252,7 +255,7 @@ dojo._hasResource["dojo.foo"] = true;
 
        dojo._modulesLoaded = function(){
                if(d._postLoad){ return; }
-               if(d._inFlightCount > 0){ 
+               if(d._inFlightCount > 0){
                        console.warn("files still in flight!");
                        return;
                }
@@ -284,8 +287,8 @@ dojo._hasResource["dojo.foo"] = true;
                var syms = modulename.split(".");
                for(var i = syms.length; i>0; i--){
                        var parentModule = syms.slice(0, i).join(".");
-                       if(i == 1 && !d._moduleHasPrefix(parentModule)){                
-                               // Support default module directory (sibling of dojo) for top-level modules 
+                       if(i == 1 && !d._moduleHasPrefix(parentModule)){
+                               // Support default module directory (sibling of dojo) for top-level modules
                                syms[0] = "../" + syms[0];
                        }else{
                                var parentModulePath = d._getModulePrefix(parentModule);
@@ -320,87 +323,95 @@ dojo._hasResource["dojo.foo"] = true;
        dojo._loadModule = dojo.require = function(/*String*/moduleName, /*Boolean?*/omitModuleCheck){
                //      summary:
                //              loads a Javascript module from the appropriate URI
-               //      moduleName:
+               //
+               //      moduleName: String
                //              module name to load, using periods for separators,
                //               e.g. "dojo.date.locale".  Module paths are de-referenced by dojo's
                //              internal mapping of locations to names and are disambiguated by
                //              longest prefix. See `dojo.registerModulePath()` for details on
                //              registering new modules.
-               //      omitModuleCheck:
+               //
+               //      omitModuleCheck: Boolean?
                //              if `true`, omitModuleCheck skips the step of ensuring that the
                //              loaded file actually defines the symbol it is referenced by.
                //              For example if it called as `dojo.require("a.b.c")` and the
                //              file located at `a/b/c.js` does not define an object `a.b.c`,
                //              and exception will be throws whereas no exception is raised
                //              when called as `dojo.require("a.b.c", true)`
+               //
                //      description:
                //              Modules are loaded via dojo.require by using one of two loaders: the normal loader
                //              and the xdomain loader. The xdomain loader is used when dojo was built with a
                //              custom build that specified loader=xdomain and the module lives on a modulePath
                //              that is a whole URL, with protocol and a domain. The versions of Dojo that are on
                //              the Google and AOL CDNs use the xdomain loader.
-               // 
+               //
                //              If the module is loaded via the xdomain loader, it is an asynchronous load, since
                //              the module is added via a dynamically created script tag. This
-               //              means that dojo.require() can return before the module has loaded. However, this 
+               //              means that dojo.require() can return before the module has loaded. However, this
                //              should only happen in the case where you do dojo.require calls in the top-level
                //              HTML page, or if you purposely avoid the loader checking for dojo.require
                //              dependencies in your module by using a syntax like dojo["require"] to load the module.
-               // 
+               //
                //              Sometimes it is useful to not have the loader detect the dojo.require calls in the
                //              module so that you can dynamically load the modules as a result of an action on the
                //              page, instead of right at module load time.
-               // 
+               //
                //              Also, for script blocks in an HTML page, the loader does not pre-process them, so
                //              it does not know to download the modules before the dojo.require calls occur.
-               // 
+               //
                //              So, in those two cases, when you want on-the-fly module loading or for script blocks
                //              in the HTML page, special care must be taken if the dojo.required code is loaded
                //              asynchronously. To make sure you can execute code that depends on the dojo.required
                //              modules, be sure to add the code that depends on the modules in a dojo.addOnLoad()
                //              callback. dojo.addOnLoad waits for all outstanding modules to finish loading before
-               //              executing. Example:
-               // 
-               //              |       <script type="text/javascript">
-               //              |       dojo.require("foo");
-               //              |       dojo.require("bar");
-               //              |       dojo.addOnLoad(function(){
-               //              |               //you can now safely do something with foo and bar
-               //              |       });
-               //              |       </script>
-               // 
+               //              executing.
+               //
                //              This type of syntax works with both xdomain and normal loaders, so it is good
                //              practice to always use this idiom for on-the-fly code loading and in HTML script
                //              blocks. If at some point you change loaders and where the code is loaded from,
                //              it will all still work.
-               // 
+               //
                //              More on how dojo.require
                //              `dojo.require("A.B")` first checks to see if symbol A.B is
                //              defined. If it is, it is simply returned (nothing to do).
-               //      
+               //
                //              If it is not defined, it will look for `A/B.js` in the script root
                //              directory.
-               //      
-               //              `dojo.require` throws an excpetion if it cannot find a file
+               //
+               //              `dojo.require` throws an exception if it cannot find a file
                //              to load, or if the symbol `A.B` is not defined after loading.
-               //      
+               //
                //              It returns the object `A.B`, but note the caveats above about on-the-fly loading and
                //              HTML script blocks when the xdomain loader is loading a module.
-               //      
+               //
                //              `dojo.require()` does nothing about importing symbols into
                //              the current namespace.  It is presumed that the caller will
-               //              take care of that. For example, to import all symbols into a
-               //              local block, you might write:
-               //      
+               //              take care of that.
+               //
+               //      example:
+               //              To use dojo.require in conjunction with dojo.ready:
+               //
+               //              |       dojo.require("foo");
+               //              |       dojo.require("bar");
+               //              |       dojo.addOnLoad(function(){
+               //              |               //you can now safely do something with foo and bar
+               //              |       });
+               //
+               //      example:
+               //              For example, to import all symbols into a local block, you might write:
+               //
                //              |       with (dojo.require("A.B")) {
                //              |               ...
                //              |       }
-               //      
+               //
                //              And to import just the leaf symbol to a local variable:
-               //      
+               //
                //              |       var B = dojo.require("A.B");
                //              |       ...
-               //      returns: the required namespace object
+               //
+               //      returns:
+               //              the required namespace object
                omitModuleCheck = d._global_omit_module_check || omitModuleCheck;
 
                //Check if it is already loaded.
@@ -411,10 +422,8 @@ dojo._hasResource["dojo.foo"] = true;
 
                // convert periods to slashes
                var relpath = d._getModuleSymbols(moduleName).join("/") + '.js';
-
                var modArg = !omitModuleCheck ? moduleName : null;
                var ok = d._loadPath(relpath, modArg);
-
                if(!ok && !omitModuleCheck){
                        throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'");
                }
@@ -425,7 +434,7 @@ dojo._hasResource["dojo.foo"] = true;
                        // pass in false so we can give better error
                        module = d._loadedModules[moduleName];
                        if(!module){
-                               throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); 
+                               throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'");
                        }
                }
 
@@ -446,14 +455,14 @@ dojo._hasResource["dojo.foo"] = true;
                //              the file name.  For example, `js/dojo/foo.js` must have
                //              `dojo.provide("dojo.foo");` before any calls to
                //              `dojo.require()` are made.
-               //      
+               //
                //              For backwards compatibility reasons, in addition to registering
                //              the resource, `dojo.provide()` also ensures that the javascript
                //              object for the module exists.  For example,
                //              `dojo.provide("dojox.data.FlickrStore")`, in addition to
                //              registering that `FlickrStore.js` is a resource for the
                //              `dojox.data` module, will ensure that the `dojox.data`
-               //              javascript object exists, so that calls like 
+               //              javascript object exists, so that calls like
                //              `dojo.data.foo = function(){ ... }` don't fail.
                //
                //              In the case of a build where multiple javascript source files
@@ -462,11 +471,11 @@ dojo._hasResource["dojo.foo"] = true;
                //              note that it includes multiple resources.
                //
                // resourceName: String
-               //              A dot-sperated string identifying a resource. 
+               //              A dot-sperated string identifying a resource.
                //
                // example:
                //      Safely create a `my` object, and make dojo.require("my.CustomModule") work
-               //      |       dojo.provide("my.CustomModule"); 
+               //      |       dojo.provide("my.CustomModule");
 
                //Make sure we have a string.
                resourceName = resourceName + "";
@@ -523,7 +532,7 @@ dojo._hasResource["dojo.foo"] = true;
                if(condition === true){
                        // FIXME: why do we support chained require()'s here? does the build system?
                        var args = [];
-                       for(var i = 1; i < arguments.length; i++){ 
+                       for(var i = 1; i < arguments.length; i++){
                                args.push(arguments[i]);
                        }
                        d.require.apply(d, args);
@@ -533,13 +542,13 @@ dojo._hasResource["dojo.foo"] = true;
        dojo.requireAfterIf = d.requireIf;
 
        dojo.registerModulePath = function(/*String*/module, /*String*/prefix){
-               //      summary: 
+               //      summary:
                //              Maps a module name to a path
-               //      description: 
+               //      description:
                //              An unregistered module is given the default path of ../[module],
                //              relative to Dojo root. For example, module acme is mapped to
                //              ../acme.  If you want to use a different module name, use
-               //              dojo.registerModulePath. 
+               //              dojo.registerModulePath.
                //      example:
                //              If your dojo.js is located at this location in the web root:
                //      |       /myapp/js/dojo/dojo/dojo.js
@@ -552,7 +561,7 @@ dojo._hasResource["dojo.foo"] = true;
                //              At which point you can then use dojo.require() to load the
                //              modules (assuming they provide() the same things which are
                //              required). The full code might be:
-               //      |       <script type="text/javascript" 
+               //      |       <script type="text/javascript"
                //      |               src="/myapp/js/dojo/dojo/dojo.js"></script>
                //      |       <script type="text/javascript">
                //      |               dojo.registerModulePath("foo", "../../foo");
@@ -561,8 +570,8 @@ dojo._hasResource["dojo.foo"] = true;
                //      |               dojo.require("foo.thud.xyzzy");
                //      |       </script>
                d._modulePrefixes[module] = { name: module, value: prefix };
-       }
-
+       };
+       
        dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
                // summary:
                //              Declares translated resources and loads them if necessary, in the
@@ -573,7 +582,7 @@ dojo._hasResource["dojo.foo"] = true;
                // description:
                //              Load translated resource bundles provided underneath the "nls"
                //              directory within a package.  Translated resources may be located in
-               //              different packages throughout the source tree.  
+               //              different packages throughout the source tree.
                //
                //              Each directory is named for a locale as specified by RFC 3066,
                //              (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase.
@@ -588,21 +597,21 @@ dojo._hasResource["dojo.foo"] = true;
                //              preload the bundles to avoid data redundancy and the multiple
                //              network hits normally required to load these resources.
                //
-               // moduleName: 
+               // moduleName:
                //              name of the package containing the "nls" directory in which the
                //              bundle is found
                //
-               // bundleName: 
+               // bundleName:
                //              bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a
                //              a bundle name is not supported, since "nls" is the name of the folder
                //              that holds bundles. Using "nls" as the bundle name will cause problems
                //              with the custom build.
                //
-               // locale: 
+               // locale:
                //              the locale to load (optional)  By default, the browser's user
                //              locale as defined by dojo.locale
                //
-               // availableFlatLocales: 
+               // availableFlatLocales:
                //              A comma-separated list of the available, flattened locales for this
                //              bundle. This argument should only be set by the build process.
                //
@@ -644,11 +653,11 @@ dojo._hasResource["dojo.foo"] = true;
                ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$");
 
        dojo._Url = function(/*dojo._Url|String...*/){
-               // summary: 
+               // summary:
                //              Constructor to create an object representing a URL.
                //              It is marked as private, since we might consider removing
                //              or simplifying it.
-               // description: 
+               // description:
                //              Each argument is evaluated in order relative to the next until
                //              a canonical uri is produced. To get an absolute Uri relative to
                //              the current document use:
@@ -715,7 +724,7 @@ dojo._hasResource["dojo.foo"] = true;
                        }
 
                        uri = [];
-                       if(relobj.scheme){ 
+                       if(relobj.scheme){
                                uri.push(relobj.scheme, ":");
                        }
                        if(relobj.authority){
@@ -755,7 +764,7 @@ dojo._hasResource["dojo.foo"] = true;
        dojo._Url.prototype.toString = function(){ return this.uri; };
 
        dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){
-               //      summary: 
+               //      summary:
                //              Returns a `dojo._Url` object relative to a module.
                //      example:
                //      |       var pngPath = dojo.moduleUrl("acme","images/small.png");
@@ -763,10 +772,10 @@ dojo._hasResource["dojo.foo"] = true;
                //      |       // create an image and set it's source to pngPath's value:
                //      |       var img = document.createElement("img");
                //      |       // NOTE: we assign the string representation of the url object
-               //      |       img.src = pngPath.toString(); 
+               //      |       img.src = pngPath.toString();
                //      |       // add our image to the document
                //      |       dojo.body().appendChild(img);
-               //      example: 
+               //      example:
                //              you may de-reference as far as you like down the package
                //              hierarchy.  This is sometimes handy to avoid lenghty relative
                //              urls or for building portable sub-packages. In this example,
@@ -777,9 +786,9 @@ dojo._hasResource["dojo.foo"] = true;
                //      |       // somewhere in a configuration block
                //      |       dojo.registerModulePath("acme.widget", "../../acme/widget");
                //      |       dojo.registerModulePath("acme.util", "../../util");
-               //      |       
+               //      |
                //      |       // ...
-               //      |       
+               //      |
                //      |       // code in a module using acme resources
                //      |       var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html");
                //      |       var dataPath = dojo.moduleUrl("acme.util","resources/data.json");
@@ -798,7 +807,10 @@ dojo._hasResource["dojo.foo"] = true;
                }
 
                return new d._Url(loc, url); // dojo._Url
-       }
+       };
+
+
+
 })();
 
 }
index fa26d8efb9434c9c6812579a834d0ef600ab7337..f2043e4de63ac23d6814a4c99f1edddcc3f4c4a6 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
index c60b86b05ad33608f3d19f30f50f1b4c0f4d971c..e59f814c06bddd94c8556700f299caf8eb5a3b8c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -170,23 +170,27 @@ dojo._xdIsXDomainPath = function(/*string*/relpath) {
        var colonIndex = relpath.indexOf(":");
        var slashIndex = relpath.indexOf("/");
 
-       if(colonIndex > 0 && colonIndex < slashIndex){
+       if(colonIndex > 0 && colonIndex < slashIndex || relpath.indexOf("//") === 0){
                return true;
        }else{
                //Is the base script URI-based URL a cross domain URL?
                //If so, then the relpath will be evaluated relative to
                //baseUrl, and therefore qualify as xdomain.
                //Only treat it as xdomain if the page does not have a
-               //host (file:// url) or if the baseUrl does not match the
-               //current window's domain.
+               //host (file:// url), if the baseUrl does not match the
+               //current window's domain, or if the baseUrl starts with //.
+               //If baseUrl starts with // then it probably means that xdomain
+               //is wanted since it is such a specific path request. This is not completely robust,
+               //but something more robust would require normalizing the protocol on baseUrl and on the location
+               //to see if they differ. However, that requires more code, and // as a start path is unusual.
                var url = dojo.baseUrl;
                colonIndex = url.indexOf(":");
                slashIndex = url.indexOf("/");
-               if(colonIndex > 0 && colonIndex < slashIndex && (!location.host || url.indexOf("http://" + location.host) != 0)){
+               if(url.indexOf("//") === 0 || (colonIndex > 0 && colonIndex < slashIndex && (!location.host || url.indexOf("http://" + location.host) != 0))){
                        return true;
                }
        }
-    return false;     
+    return false;
 }
 
 dojo._loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){
@@ -218,8 +222,8 @@ dojo._loadUri = function(/*String*/uri, /*Function?*/cb, /*boolean*/currentIsXDo
        }
 
        //Add the module (resource) to the list of modules.
-       //Only do this work if we have a modlue name. Otherwise, 
-       //it is a non-xd i18n bundle, which can load immediately and does not 
+       //Only do this work if we have a modlue name. Otherwise,
+       //it is a non-xd i18n bundle, which can load immediately and does not
        //need to be tracked. Also, don't track dojo.i18n, since it is a prerequisite
        //and will be loaded correctly if we load it right away: it has no dependencies.
        if(dojo._isXDomain && module && module != "dojo.i18n"){
@@ -386,7 +390,7 @@ dojo._xdResourceLoaded = function(/*Object*/res){
                }
 
                //Now update the inflight status for any provided resources in this loaded resource.
-               //Do this at the very end (in a *separate* for loop) to avoid shutting down the 
+               //Do this at the very end (in a *separate* for loop) to avoid shutting down the
                //inflight timer check too soon.
                for(i = 0; i < provideList.length; i++){
                        dojo._xdInFlight[provideList[i]] = false;
@@ -490,7 +494,7 @@ dojo.xdRequireLocalization = function(/*String*/moduleName, /*String*/bundleName
 // Replace dojo.requireLocalization with a wrapper
 dojo._xdRealRequireLocalization = dojo.requireLocalization;
 dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String*/availableFlatLocales){
-    // summary: loads a bundle intelligently based on whether the module is 
+    // summary: loads a bundle intelligently based on whether the module is
     // local or xd. Overrides the local-case implementation.
     
     var modulePath = dojo.moduleUrl(moduleName).toString();
@@ -525,7 +529,7 @@ dojo._xdUnpackDependency = function(/*Array*/dep){
                case "platformRequire":
                        var modMap = dep[1];
                        var common = modMap["common"]||[];
-                       newDeps = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]);  
+                       newDeps = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]);
                        //Flatten the array of arrays into a one-level deep array.
                        //Each result could be an array of 3 elements  (the 3 arguments to dojo.require).
                        //We only need the first one.
@@ -562,7 +566,7 @@ dojo._xdUnpackDependency = function(/*Array*/dep){
 }
 
 dojo._xdWalkReqs = function(){
-       //summary: Internal xd loader function. 
+       //summary: Internal xd loader function.
        //Walks the requires and evaluates module resource contents in
        //the right order.
        var reqChain = null;
@@ -578,7 +582,7 @@ dojo._xdWalkReqs = function(){
 }
 
 dojo._xdEvalReqs = function(/*Array*/reqChain){
-       //summary: Internal xd loader function. 
+       //summary: Internal xd loader function.
        //Does a depth first, breadth second search and eval of required modules.
        while(reqChain.length > 0){
                var req = reqChain[reqChain.length - 1];
@@ -673,7 +677,7 @@ dojo._xdWatchInFlight = function(){
                        dojo._xdDebugQueue.push({resourceName: content.resourceName, resourcePath: content.resourcePath});
                }else{
                        //Evaluate the resource to bring it into being.
-                       //Pass in scope args to allow multiple versions of modules in a page.   
+                       //Pass in scope args to allow multiple versions of modules in a page.
                        content.apply(dojo.global, dojo._scopeArgs);
                }
        }
@@ -685,7 +689,7 @@ dojo._xdWatchInFlight = function(){
        for(i = 0; i < dojo._xdContents.length; i++){
                var current = dojo._xdContents[i];
                if(current.content && !current.isDefined){
-                       //Pass in scope args to allow multiple versions of modules in a page.   
+                       //Pass in scope args to allow multiple versions of modules in a page.
                        current.content.apply(dojo.global, dojo._scopeArgs);
                }
        }
@@ -712,10 +716,10 @@ dojo._xdNotifyLoaded = function(){
                }
        }
 
-       dojo._inFlightCount = 0; 
+       dojo._inFlightCount = 0;
 
-       //Only trigger call loaded if dj_load_init has run. 
-       if(dojo._initFired && !dojo._loadNotifying){ 
+       //Only trigger call loaded if dj_load_init has run.
+       if(dojo._initFired && !dojo._loadNotifying){
                dojo._callLoaded();
        }
 }
index 26fa1900d320855686a6de7523e36081f3b2c925..57cea4229aeee0fb8d05c66144e5d4ff1b1435f4 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -7,13 +7,14 @@
 
 if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo._base.array"] = true;
-dojo.require("dojo._base.lang");
 dojo.provide("dojo._base.array");
+dojo.require("dojo._base.lang");
+
 
 (function(){
        var _getParts = function(arr, obj, cb){
-               return [ 
-                       (typeof arr == "string") ? arr.split("") : arr, 
+               return [
+                       (typeof arr == "string") ? arr.split("") : arr,
                        obj || dojo.global,
                        // FIXME: cache the anonymous functions we create here?
                        (typeof cb == "string") ? new Function("item", "index", "array", cb) : cb
@@ -32,7 +33,7 @@ dojo.provide("dojo._base.array");
        };
 
        dojo.mixin(dojo, {
-               indexOf: function(      /*Array*/               array, 
+               indexOf: function(      /*Array*/               array,
                                                        /*Object*/              value,
                                                        /*Integer?*/    fromIndex,
                                                        /*Boolean?*/    findLast){
@@ -41,7 +42,7 @@ dojo.provide("dojo._base.array");
                        //              passed array. If the value is not found, -1 is returned.
                        // description:
                        //              This method corresponds to the JavaScript 1.6 Array.indexOf method, with one difference: when
-                       //              run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript 
+                       //              run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript
                        //              1.6's indexOf skips the holes in the sparse array.
                        //              For details on this method, see:
                        //                      https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf
@@ -66,7 +67,7 @@ dojo.provide("dojo._base.array");
                        //              array. If the value is not found, -1 is returned.
                        // description:
                        //              This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when
-                       //              run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript 
+                       //              run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript
                        //              1.6's lastIndexOf skips the holes in the sparse array.
                        //              For details on this method, see:
                        //                      https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf
@@ -85,7 +86,7 @@ dojo.provide("dojo._base.array");
                        //      thisObject:
                        //              may be used to scope the call to callback
                        //      description:
-                       //              This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when 
+                       //              This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when
                        //              run over sparse arrays, this implemenation passes the "holes" in the sparse array to
                        //              the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array.
                        //              For more details, see:
@@ -108,21 +109,21 @@ dojo.provide("dojo._base.array");
                        //      |       );
                        //      example:
                        //      |       // use a scoped object member as the callback
-                       //      |       
+                       //      |
                        //      |       var obj = {
-                       //      |               prefix: "logged via obj.callback:", 
+                       //      |               prefix: "logged via obj.callback:",
                        //      |               callback: function(item){
                        //      |                       console.log(this.prefix, item);
                        //      |               }
                        //      |       };
-                       //      |       
+                       //      |
                        //      |       // specifying the scope function executes the callback in that scope
                        //      |       dojo.forEach(
                        //      |               [ "thinger", "blah", "howdy", 10 ],
                        //      |               obj.callback,
                        //      |               obj
                        //      |       );
-                       //      |       
+                       //      |
                        //      |       // alternately, we can accomplish the same thing with dojo.hitch()
                        //      |       dojo.forEach(
                        //      |               [ "thinger", "blah", "howdy", 10 ],
@@ -135,7 +136,7 @@ dojo.provide("dojo._base.array");
                        // FIXME: there are several ways of handilng thisObject. Is
                        // dojo.global always the default context?
                        var _p = _getParts(arr, thisObject, callback); arr = _p[0];
-                       for(var i=0,l=arr.length; i<l; ++i){ 
+                       for(var i=0,l=arr.length; i<l; ++i){
                                _p[2].call(_p[1], arr[i], i, arr);
                        }
                },
@@ -152,7 +153,7 @@ dojo.provide("dojo._base.array");
                        // thisObject:
                        //              may be used to scope the call to callback
                        // description:
-                       //              This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when 
+                       //              This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when
                        //              run over sparse arrays, this implemenation passes the "holes" in the sparse array to
                        //              the callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array.
                        //              For more details, see:
@@ -161,7 +162,7 @@ dojo.provide("dojo._base.array");
                        //      |       // returns false
                        //      |       dojo.every([1, 2, 3, 4], function(item){ return item>1; });
                        // example:
-                       //      |       // returns true 
+                       //      |       // returns true
                        //      |       dojo.every([1, 2, 3, 4], function(item){ return item>0; });
                        return everyOrSome(true, arr, callback, thisObject); // Boolean
                },
@@ -178,7 +179,7 @@ dojo.provide("dojo._base.array");
                        // thisObject:
                        //              may be used to scope the call to callback
                        // description:
-                       //              This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when 
+                       //              This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when
                        //              run over sparse arrays, this implemenation passes the "holes" in the sparse array to
                        //              the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array.
                        //              For more details, see:
@@ -205,7 +206,7 @@ dojo.provide("dojo._base.array");
                        // thisObject:
                        //              may be used to scope the call to callback
                        // description:
-                       //              This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when 
+                       //              This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when
                        //              run over sparse arrays, this implemenation passes the "holes" in the sparse array to
                        //              the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array.
                        //              For more details, see:
@@ -236,9 +237,9 @@ dojo.provide("dojo._base.array");
                        // thisObject:
                        //              may be used to scope the call to callback
                        // description:
-                       //              This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when 
+                       //              This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when
                        //              run over sparse arrays, this implemenation passes the "holes" in the sparse array to
-                       //              the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. 
+                       //              the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array.
                        //              For more details, see:
                        //                      https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
                        // example:
index 496fe46b3244eaf1832186a70fd5e51f009f3335..209330f0d6b4f1798364870c5437173676a35e74 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,7 +8,6 @@
 if(!dojo._hasResource["dojo._base.browser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 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");
@@ -18,12 +17,12 @@ dojo.require("dojo._base.query");
 dojo.require("dojo._base.xhr");
 dojo.require("dojo._base.fx");
 
-//Need this to be the last code segment in base, so do not place any
-//dojo.requireIf calls in this file. Otherwise, due to how the build system
-//puts all requireIf dependencies after the current file, the require calls
-//could be called before all of base is defined.
-dojo.forEach(dojo.config.require, function(i){
-       dojo["require"](i);
-});
+       //Need this to be the last code segment in base, so do not place any
+       //dojo/requireIf calls in this file/ Otherwise, due to how the build system
+       //puts all requireIf dependencies after the current file, the require calls
+       //could be called before all of base is defined/
+       dojo.forEach(dojo.config.require, function(i){
+               dojo["require"](i);
+       });
 
 }
index f37af65b20c41c80619b83a7e02ea52fd8f260ab..7e8006221f810cf0c2d7b90379c040a88b8f83e7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,27 +10,28 @@ dojo._hasResource["dojo._base.connect"] = true;
 dojo.provide("dojo._base.connect");
 dojo.require("dojo._base.lang");
 
+
 // this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
 
 // low-level delegation machinery
 dojo._listener = {
        // create a dispatcher function
        getDispatcher: function(){
-               // following comments pulled out-of-line to prevent cloning them 
+               // following comments pulled out-of-line to prevent cloning them
                // in the returned function.
-               // - indices (i) that are really in the array of listeners (ls) will 
+               // - indices (i) that are really in the array of listeners (ls) will
                //   not be in Array.prototype. This is the 'sparse array' trick
-               //   that keeps us safe from libs that take liberties with built-in 
+               //   that keeps us safe from libs that take liberties with built-in
                //   objects
                // - listener is invoked with current scope (this)
                return function(){
-                       var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target;
+                       var ap = Array.prototype, c = arguments.callee, ls = c._listeners, t = c.target,
                        // return value comes from original target function
-                       var r = t && t.apply(this, arguments);
+                               r = t && t.apply(this, arguments),
                        // make local copy of listener array so it is immutable during processing
-                       var i, lls;
-                                                                                       lls = [].concat(ls);
-                                                       
+                               i, lls = [].concat(ls)
+                       ;
+
                        // invoke listeners after target function
                        for(i in lls){
                                if(!(i in ap)){
@@ -44,12 +45,12 @@ dojo._listener = {
        // add a listener to an object
        add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){
                // Whenever 'method' is invoked, 'listener' will have the same scope.
-               // Trying to supporting a context object for the listener led to 
-               // complexity. 
+               // Trying to supporting a context object for the listener led to
+               // complexity.
                // Non trivial to provide 'once' functionality here
                // because listener could be the result of a dojo.hitch call,
                // in which case two references to the same hitch target would not
-               // be equivalent. 
+               // be equivalent.
                source = source || dojo.global;
                // The source method is either null, a dispatcher, or some other function
                var f = source[method];
@@ -59,15 +60,15 @@ dojo._listener = {
                        // original target function is special
                        d.target = f;
                        // dispatcher holds a list of listeners
-                       d._listeners = []; 
+                       d._listeners = [];
                        // redirect source to dispatcher
                        f = source[method] = d;
                }
-               // The contract is that a handle is returned that can 
-               // identify this listener for disconnect. 
+               // The contract is that a handle is returned that can
+               // identify this listener for disconnect.
                //
-               // The type of the handle is private. Here is it implemented as Integer. 
-               // DOM event code has this same contract but handle is Function 
+               // The type of the handle is private. Here is it implemented as Integer.
+               // DOM event code has this same contract but handle is Function
                // in non-IE browsers.
                //
                // We could have separate lists of before and after listeners.
@@ -89,9 +90,9 @@ dojo._listener = {
 // and dontFix argument here to help the autodocs. Actual DOM aware code is in
 // event.js.
 
-dojo.connect = function(/*Object|null*/ obj, 
-                                               /*String*/ event, 
-                                               /*Object|null*/ context, 
+dojo.connect = function(/*Object|null*/ obj,
+                                               /*String*/ event,
+                                               /*Object|null*/ context,
                                                /*String|Function*/ method,
                                                /*Boolean?*/ dontFix){
        // summary:
@@ -126,37 +127,37 @@ dojo.connect = function(/*Object|null*/ obj,
        //              arguments may simply be omitted such that fewer than 4 arguments
        //              may be required to set up a connection See the examples for details.
        //
-       //              The return value is a handle that is needed to 
+       //              The return value is a handle that is needed to
        //              remove this connection with `dojo.disconnect`.
        //
-       // obj: 
-       //              The source object for the event function. 
+       // obj:
+       //              The source object for the event function.
        //              Defaults to `dojo.global` if null.
-       //              If obj is a DOM node, the connection is delegated 
+       //              If obj is a DOM node, the connection is delegated
        //              to the DOM event manager (unless dontFix is true).
        //
        // event:
-       //              String name of the event function in obj. 
+       //              String name of the event function in obj.
        //              I.e. identifies a property `obj[event]`.
        //
-       // context: 
+       // context:
        //              The object that method will receive as "this".
        //
        //              If context is null and method is a function, then method
        //              inherits the context of event.
-       //      
-       //              If method is a string then context must be the source 
+       //
+       //              If method is a string then context must be the source
        //              object object for method (context[method]). If context is null,
        //              dojo.global is used.
        //
        // method:
-       //              A function reference, or name of a function in context. 
-       //              The function identified by method fires after event does. 
+       //              A function reference, or name of a function in context.
+       //              The function identified by method fires after event does.
        //              method receives the same arguments as the event.
        //              See context argument comments for information on method's scope.
        //
        // dontFix:
-       //              If obj is a DOM node, set dontFix to true to prevent delegation 
+       //              If obj is a DOM node, set dontFix to true to prevent delegation
        //              of this connection to the DOM event manager.
        //
        // example:
@@ -206,9 +207,9 @@ dojo.connect = function(/*Object|null*/ obj,
 
 // used by non-browser hostenvs. always overriden by event.js
 dojo._connect = function(obj, event, context, method){
-       var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); 
+       var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method));
        return [obj, event, h, l]; // Handle
-}
+};
 
 dojo.disconnect = function(/*Handle*/ handle){
        // summary:
@@ -222,11 +223,11 @@ dojo.disconnect = function(/*Handle*/ handle){
                // let's not keep this reference
                delete handle[0];
        }
-}
+};
 
 dojo._disconnect = function(obj, event, handle, listener){
        listener.remove(obj, event, handle);
-}
+};
 
 // topic publish/subscribe
 
@@ -244,15 +245,15 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu
        //              is invoked when topic is published.
        //      example:
        //      |       dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); });
-       //      |       dojo.publish("alerts", [ "read this", "hello world" ]);                                                                                                                                 
+       //      |       dojo.publish("alerts", [ "read this", "hello world" ]);
 
        // support for 2 argument invocation (omitting context) depends on hitch
        return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/
-}
+};
 
 dojo.unsubscribe = function(/*Handle*/ handle){
        //      summary:
-       //              Remove a topic listener. 
+       //              Remove a topic listener.
        //      handle:
        //              The handle returned from a call to subscribe.
        //      example:
@@ -262,7 +263,7 @@ dojo.unsubscribe = function(/*Handle*/ handle){
        if(handle){
                dojo._listener.remove(dojo._topics, handle[0], handle[1]);
        }
-}
+};
 
 dojo.publish = function(/*String*/ topic, /*Array*/ args){
        //      summary:
@@ -270,11 +271,11 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){
        //      topic:
        //              The name of the topic to publish.
        //      args:
-       //              An array of arguments. The arguments will be applied 
+       //              An array of arguments. The arguments will be applied
        //              to each topic subscriber (as first class parameters, via apply).
        //      example:
        //      |       dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
-       //      |       dojo.publish("alerts", [ "read this", "hello world" ]); 
+       //      |       dojo.publish("alerts", [ "read this", "hello world" ]);
 
        // Note that args is an array, which is more efficient vs variable length
        // argument list.  Ideally, var args would be implemented via Array
@@ -283,10 +284,10 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){
        if(f){
                f.apply(this, args||[]);
        }
-}
+};
 
-dojo.connectPublisher = function(      /*String*/ topic, 
-                                                                       /*Object|null*/ obj, 
+dojo.connectPublisher = function(      /*String*/ topic,
+                                                                       /*Object|null*/ obj,
                                                                        /*String*/ event){
        //      summary:
        //              Ensure that every time obj.event() is called, a message is published
@@ -295,11 +296,11 @@ dojo.connectPublisher = function( /*String*/ topic,
        //              the topic.
        //      topic:
        //              The name of the topic to publish.
-       //      obj: 
+       //      obj:
        //              The source object for the event function. Defaults to dojo.global
        //              if null.
        //      event:
-       //              The name of the event function in obj. 
+       //              The name of the event function in obj.
        //              I.e. identifies a property obj[event].
        //      example:
        //      |       dojo.connectPublisher("/ajax/start", dojo, "xhrGet");
index 8e46b12c0eefd99db3dc896a2bcb6e65534e75e3..4379148702df0a24515c0ac0eaeb8c8af7283928 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,18 +8,18 @@
 if(!dojo._hasResource["dojo._base.declare"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo._base.declare"] = true;
 dojo.provide("dojo._base.declare");
-
 dojo.require("dojo._base.lang");
 dojo.require("dojo._base.array");
 
+
 (function(){
        var d = dojo, mix = d._mixin, op = Object.prototype, opts = op.toString,
                xtor = new Function, counter = 0, cname = "constructor";
 
-       function err(msg){ throw new Error("declare: " + msg); }
+       function err(msg, cls){ throw new Error("declare" + (cls ? " " + cls : "") + ": " + msg); }
 
        // C3 Method Resolution Order (see http://www.python.org/download/releases/2.3/mro/)
-       function c3mro(bases){
+       function c3mro(bases, className){
                var result = [], roots = [{cls: 0, refs: []}], nameMap = {}, clsCount = 1,
                        l = bases.length, i = 0, j, lin, base, top, proto, rec, name, refs;
 
@@ -27,9 +27,9 @@ dojo.require("dojo._base.array");
                for(; i < l; ++i){
                        base = bases[i];
                        if(!base){
-                               err("mixin #" + i + " is unknown. Did you use dojo.require to pull it in?");
+                               err("mixin #" + i + " is unknown. Did you use dojo.require to pull it in?", className);
                        }else if(opts.call(base) != "[object Function]"){
-                               err("mixin #" + i + " is not a callable constructor.");
+                               err("mixin #" + i + " is not a callable constructor.", className);
                        }
                        lin = base._meta ? base._meta.bases : [base];
                        top = 0;
@@ -82,7 +82,7 @@ dojo.require("dojo._base.array");
                        }
                }
                if(clsCount){
-                       err("can't build consistent linearization");
+                       err("can't build consistent linearization", className);
                }
 
                // calculate the superclass offset
@@ -109,7 +109,7 @@ dojo.require("dojo._base.array");
                caller = args.callee;
                name = name || caller.nom;
                if(!name){
-                       err("can't deduce a name to call inherited()");
+                       err("can't deduce a name to call inherited()", this.declaredClass);
                }
 
                meta = this.constructor._meta;
@@ -127,7 +127,7 @@ dojo.require("dojo._base.array");
                                        // error detection
                                        chains = meta.chains;
                                        if(chains && typeof chains[name] == "string"){
-                                               err("calling chained method with inherited: " + name);
+                                               err("calling chained method with inherited: " + name, this.declaredClass);
                                        }
                                        // find caller
                                        do{
@@ -168,7 +168,7 @@ dojo.require("dojo._base.array");
                                        // error detection
                                        chains = meta.chains;
                                        if(!chains || chains.constructor !== "manual"){
-                                               err("calling chained constructor with inherited");
+                                               err("calling chained constructor with inherited", this.declaredClass);
                                        }
                                        // find caller
                                        while(base = bases[++pos]){ // intentional assignment
@@ -464,7 +464,7 @@ dojo.require("dojo._base.array");
                // build a prototype
                if(opts.call(superclass) == "[object Array]"){
                        // C3 MRO
-                       bases = c3mro(superclass);
+                       bases = c3mro(superclass, className);
                        t = bases[0];
                        mixins = bases.length - t;
                        superclass = bases[mixins];
@@ -475,10 +475,10 @@ dojo.require("dojo._base.array");
                                        t = superclass._meta;
                                        bases = bases.concat(t ? t.bases : superclass);
                                }else{
-                                       err("base class is not a callable constructor.");
+                                       err("base class is not a callable constructor.", className);
                                }
                        }else if(superclass !== null){
-                               err("unknown base class. Did you use dojo.require to pull it in?")
+                               err("unknown base class. Did you use dojo.require to pull it in?", className);
                        }
                }
                if(superclass){
index 5268c6cffb6bbbc9aa4ed03f82149dea215dd2cb..65239bf5084aebdaf86d2acc47ff19bec692c067 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,27 +10,26 @@ dojo._hasResource["dojo._base.event"] = true;
 dojo.provide("dojo._base.event");
 dojo.require("dojo._base.connect");
 
+
 // this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
 
 (function(){
        // DOM event listener machinery
        var del = (dojo._event_listener = {
                add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){
-                       if(!node){return;} 
+                       if(!node){return;}
                        name = del._normalizeEventName(name);
                        fp = del._fixCallback(name, fp);
-                       var oname = name;
                        if(
-                                                               !dojo.isIE && 
+                                                               !dojo.isIE &&
                                                                (name == "mouseenter" || name == "mouseleave")
                        ){
                                var ofp = fp;
-                               //oname = name;
                                name = (name == "mouseenter") ? "mouseover" : "mouseout";
                                fp = function(e){
                                        if(!dojo.isDescendant(e.relatedTarget, node)){
                                                // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable.
-                                               return ofp.call(this, e); 
+                                               return ofp.call(this, e);
                                        }
                                }
                        }
@@ -71,7 +70,7 @@ dojo.require("dojo._base.connect");
                },
                _fixEvent: function(evt, sender){
                        // _fixCallback only attaches us to keypress.
-                       // Switch on evt.type anyway because we might 
+                       // Switch on evt.type anyway because we might
                        // be called directly from dojo.fixEvent.
                        switch(evt.type){
                                case "keypress":
@@ -81,26 +80,26 @@ dojo.require("dojo._base.connect");
                        return evt;
                },
                _setKeyChar: function(evt){
-                       evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : '';
+                       evt.keyChar = evt.charCode >= 32 ? String.fromCharCode(evt.charCode) : '';
                        evt.charOrCode = evt.keyChar || evt.keyCode;
                },
                // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE
                // we map those virtual key codes to ascii here
                // not valid for all (non-US) keyboards, so maybe we shouldn't bother
-               _punctMap: { 
-                       106:42, 
-                       111:47, 
-                       186:59, 
-                       187:43, 
-                       188:44, 
-                       189:45, 
-                       190:46, 
-                       191:47, 
-                       192:96, 
-                       219:91, 
-                       220:92, 
-                       221:93, 
-                       222:39 
+               _punctMap: {
+                       106:42,
+                       111:47,
+                       186:59,
+                       187:43,
+                       188:44,
+                       189:45,
+                       190:46,
+                       191:47,
+                       192:96,
+                       219:91,
+                       220:92,
+                       221:93,
+                       222:39
                }
        });
 
@@ -115,7 +114,7 @@ dojo.require("dojo._base.connect");
                // sender: DOMNode
                //              node to treat as "currentTarget"
                return del._fixEvent(evt, sender);
-       }
+       };
 
        dojo.stopEvent = function(/*Event*/ evt){
                // summary:
@@ -126,7 +125,7 @@ dojo.require("dojo._base.connect");
                evt.preventDefault();
                evt.stopPropagation();
                // NOTE: below, this method is overridden for IE
-       }
+       };
 
        // the default listener to use on dontFix nodes, overriden for IE
        var node_listener = dojo._listener;
@@ -141,16 +140,16 @@ dojo.require("dojo._base.connect");
                // create a listener
                var h = l.add(obj, event, dojo.hitch(context, method));
                // formerly, the disconnect package contained "l" directly, but if client code
-               // leaks the disconnect package (by connecting it to a node), referencing "l" 
+               // leaks the disconnect package (by connecting it to a node), referencing "l"
                // compounds the problem.
                // instead we return a listener id, which requires custom _disconnect below.
                // return disconnect package
                return [ obj, event, h, lid ];
-       }
+       };
 
        dojo._disconnect = function(obj, event, handle, listener){
                ([dojo._listener, del, node_listener][listener]).remove(obj, event, handle);
-       }
+       };
 
        // Constants
 
@@ -280,7 +279,7 @@ dojo.require("dojo._base.connect");
        };
 =====*/
 
-               if(dojo.isIE){
+               if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){
                dojo.mouseButtons = {
                        LEFT:   1,
                        MIDDLE: 4,
@@ -305,7 +304,7 @@ dojo.require("dojo._base.connect");
                }
        
                // IE event normalization
-       if(dojo.isIE){ 
+       if(dojo.isIE){
                var _trySetKeyCode = function(e, code){
                        try{
                                // squelch errors when keyCode is read-only
@@ -314,7 +313,7 @@ dojo.require("dojo._base.connect");
                        }catch(e){
                                return 0;
                        }
-               }
+               };
 
                // by default, use the standard listener
                var iel = dojo._listener;
@@ -323,7 +322,7 @@ dojo.require("dojo._base.connect");
                if(!dojo.config._allow_leaks){
                        // custom listener that handles leak protection for DOM events
                        node_listener = iel = dojo._ie_listener = {
-                               // support handler indirection: event handler functions are 
+                               // support handler indirection: event handler functions are
                                // referenced here. Event dispatchers hold only indices.
                                handlers: [],
                                // add a listener to an object
@@ -376,7 +375,7 @@ dojo.require("dojo._base.connect");
                        },
                        remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){
                                event = del._normalizeEventName(event);
-                               iel.remove(node, event, handle); 
+                               iel.remove(node, event, handle);
                                if(event=="onkeypress"){
                                        var kd = node.onkeydown;
                                        if(--kd._stealthKeydownRefs <= 0){
@@ -402,11 +401,11 @@ dojo.require("dojo._base.connect");
                                //              node to treat as "currentTarget"
                                if(!evt){
                                        var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window;
-                                       evt = w.event; 
+                                       evt = w.event;
                                }
                                if(!evt){return(evt);}
-                               evt.target = evt.srcElement; 
-                               evt.currentTarget = (sender || evt.srcElement); 
+                               evt.target = evt.srcElement;
+                               evt.currentTarget = (sender || evt.srcElement);
                                evt.layerX = evt.offsetX;
                                evt.layerY = evt.offsetY;
                                // FIXME: scroll position query is duped from dojo.html to
@@ -419,14 +418,16 @@ dojo.require("dojo._base.connect");
                                var offset = dojo._getIeDocumentElementOffset();
                                evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x;
                                evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y;
-                               if(evt.type == "mouseover"){ 
+                               if(evt.type == "mouseover"){
                                        evt.relatedTarget = evt.fromElement;
                                }
-                               if(evt.type == "mouseout"){ 
+                               if(evt.type == "mouseout"){
                                        evt.relatedTarget = evt.toElement;
                                }
-                               evt.stopPropagation = del._stopPropagation;
-                               evt.preventDefault = del._preventDefault;
+                               if (dojo.isIE < 9 || dojo.isQuirks) {
+                                       evt.stopPropagation = del._stopPropagation;
+                                       evt.preventDefault = del._preventDefault;
+                               }
                                return del._fixKeys(evt);
                        },
                        _fixKeys: function(evt){
@@ -460,38 +461,41 @@ dojo.require("dojo._base.connect");
                                var k=evt.keyCode;
                                // These are Windows Virtual Key Codes
                                // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp
-                               var unprintable = k!=13 && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222);
+                               var unprintable = (k!=13 || (dojo.isIE >= 9 && !dojo.isQuirks)) && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222);
+
                                // synthesize keypress for most unprintables and CTRL-keys
                                if(unprintable||evt.ctrlKey){
                                        var c = unprintable ? 0 : k;
                                        if(evt.ctrlKey){
                                                if(k==3 || k==13){
-                                                       return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively 
-                                               }else if(c>95 && c<106){ 
+                                                       return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively
+                                               }else if(c>95 && c<106){
                                                        c -= 48; // map CTRL-[numpad 0-9] to ASCII
-                                               }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ 
+                                               }else if((!evt.shiftKey)&&(c>=65&&c<=90)){
                                                        c += 32; // map CTRL-[A-Z] to lowercase
-                                               }else{ 
+                                               }else{
                                                        c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII
                                                }
                                        }
                                        // simulate a keypress event
                                        var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c});
                                        kp.call(evt.currentTarget, faux);
-                                       evt.cancelBubble = faux.cancelBubble;
+                                       if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){
+                                               evt.cancelBubble = faux.cancelBubble;
+                                       }
                                        evt.returnValue = faux.returnValue;
                                        _trySetKeyCode(evt, faux.keyCode);
                                }
                        },
                        // Called in Event scope
                        _stopPropagation: function(){
-                               this.cancelBubble = true; 
+                               this.cancelBubble = true;
                        },
                        _preventDefault: function(){
                                // Setting keyCode to 0 is the only way to prevent certain keypresses (namely
                                // ctrl-combinations that correspond to menu accelerator keys).
                                // Otoh, it prevents upstream listeners from getting this information
-                               // Try to split the difference here by clobbering keyCode only for ctrl 
+                               // Try to split the difference here by clobbering keyCode only for ctrl
                                // combinations. If you still need to access the key upstream, bubbledKeyCode is
                                // provided as a workaround.
                                this.bubbledKeyCode = this.keyCode;
@@ -501,23 +505,23 @@ dojo.require("dojo._base.connect");
                });
                                
                // override stopEvent for IE
-               dojo.stopEvent = function(evt){
+               dojo.stopEvent = (dojo.isIE < 9 || dojo.isQuirks) ? function(evt){
                        evt = evt || window.event;
                        del._stopPropagation.call(evt);
                        del._preventDefault.call(evt);
-               }
+               } : dojo.stopEvent;
        }
        
        del._synthesizeEvent = function(evt, props){
                        var faux = dojo.mixin({}, evt, props);
                        del._setKeyChar(faux);
-                       // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); 
+                       // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault);
                        // but it throws an error when preventDefault is invoked on Safari
                        // does Event.preventDefault not support "apply" on Safari?
-                       faux.preventDefault = function(){ evt.preventDefault(); }; 
-                       faux.stopPropagation = function(){ evt.stopPropagation(); }; 
+                       faux.preventDefault = function(){ evt.preventDefault(); };
+                       faux.stopPropagation = function(){ evt.stopPropagation(); };
                        return faux;
-       }
+       };
        
                // Opera event normalization
        if(dojo.isOpera){
@@ -568,12 +572,12 @@ dojo.require("dojo._base.connect");
                                                        var c = unprintable ? 0 : k;
                                                        if(evt.ctrlKey){
                                                                if(k==3 || k==13){
-                                                                       return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively 
-                                                               }else if(c>95 && c<106){ 
+                                                                       return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively
+                                                               }else if(c>95 && c<106){
                                                                        c -= 48; // map CTRL-[numpad 0-9] to ASCII
-                                                               }else if(!evt.shiftKey && c>=65 && c<=90){ 
+                                                               }else if(!evt.shiftKey && c>=65 && c<=90){
                                                                        c += 32; // map CTRL-[A-Z] to lowercase
-                                                               }else{ 
+                                                               }else{
                                                                        c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII
                                                                }
                                                        }
@@ -630,16 +634,16 @@ if(dojo.isIE){
                        }
                }
                return r;
-       }
+       };
        dojo._getIeDispatcher = function(){
                // ensure the returned function closes over nothing ("new Function" apparently doesn't close)
                return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function
-       }
+       };
        // keep this out of the closure to reduce RAM allocation
        dojo._event_listener._fixCallback = function(fp){
                var f = dojo._event_listener._fixEvent;
                return function(e){ return fp.call(this, f(e, this)); };
-       }
+       };
 }
 
 }
index 21243c1c9a1fe5e386ee48758e8f523537089b53..860e0e18b507297cf90a7862f0a62550a0785903 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -13,6 +13,7 @@ dojo.require("dojo._base.connect");
 dojo.require("dojo._base.lang");
 dojo.require("dojo._base.html");
 
+
 /*
        Animation loosely package based on Dan Pupius' work, contributed under CLA:
                http://pupius.co.uk/js/Toolkit.Drawing.js
index be5fd2aaa06af5e1942b764428756dd5d5499585..8661b2b123c53c6b4b0cf7c39b1032ed9ee3685d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -7,8 +7,9 @@
 
 if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo._base.html"] = true;
-dojo.require("dojo._base.lang");
 dojo.provide("dojo._base.html");
+dojo.require("dojo._base.lang");
+
 
 // FIXME: need to add unit tests for all the semi-public methods
 
@@ -53,13 +54,13 @@ dojo.byId = function(id, doc){
        //      |       }
 =====*/
 
-if(dojo.isIE || dojo.isOpera){
+if(dojo.isIE){
        dojo.byId = function(id, doc){
                if(typeof id != "string"){
                        return id;
                }
                var _d = doc || dojo.doc, te = _d.getElementById(id);
-               // attributes.id.value is better than just id in case the 
+               // attributes.id.value is better than just id in case the
                // user has a name=id inside a form
                if(te && (te.attributes.id.value == id || te.id == id)){
                        return te;
@@ -80,8 +81,9 @@ if(dojo.isIE || dojo.isOpera){
        };
 }else{
        dojo.byId = function(id, doc){
-               // inline'd type check
-               return (typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id; // DomNode
+               // inline'd type check.
+               // be sure to return null per documentation, to match IE branch.
+               return ((typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id) || null; // DomNode
        };
 }
 /*=====
@@ -164,16 +166,16 @@ if(dojo.isIE || dojo.isOpera){
        };
 
        dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){
-               //      summary: 
+               //      summary:
                //              Enable or disable selection on a node
                //      node:
                //              id or reference to node
                //      selectable:
-               //              state to put the node in. false indicates unselectable, true 
+               //              state to put the node in. false indicates unselectable, true
                //              allows selection.
                //      example:
                //      Make the node id="bar" unselectable
-               //      |       dojo.setSelectable("bar"); 
+               //      |       dojo.setSelectable("bar");
                //      example:
                //      Make the node id="bar" selectable
                //      |       dojo.setSelectable("bar", true);
@@ -256,7 +258,7 @@ if(dojo.isIE || dojo.isOpera){
 
                refNode = byId(refNode);
                if(typeof node == "string"){ // inline'd type check
-                       node = node.charAt(0) == "<" ? d._toDom(node, refNode.ownerDocument) : byId(node);
+                       node = /^\s*</.test(node) ? d._toDom(node, refNode.ownerDocument) : byId(node);
                }
                if(typeof position == "number"){ // inline'd type check
                        var cn = refNode.childNodes;
@@ -291,7 +293,7 @@ if(dojo.isIE || dojo.isOpera){
                        }
                }
                return node; // DomNode
-       }
+       };
 
        // Box functions will assume this model.
        // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode.
@@ -303,7 +305,7 @@ if(dojo.isIE || dojo.isOpera){
        dojo.boxModel = "content-box";
 
        // We punt per-node box mode testing completely.
-       // If anybody cares, we can provide an additional (optional) unit 
+       // If anybody cares, we can provide an additional (optional) unit
        // that overrides existing code to include per-node box sensitivity.
 
        // Opera documentation claims that Opera 9 uses border-box in BackCompat mode.
@@ -323,10 +325,10 @@ if(dojo.isIE || dojo.isOpera){
        // getComputedStyle drives most of the style code.
        // Wherever possible, reuse the returned object.
        //
-       // API functions below that need to access computed styles accept an 
+       // API functions below that need to access computed styles accept an
        // optional computedStyle parameter.
        // If this parameter is omitted, the functions will call getComputedStyle themselves.
-       // This way, calling code can access computedStyle once, and then pass the reference to 
+       // This way, calling code can access computedStyle once, and then pass the reference to
        // multiple API functions.
 
 /*=====
@@ -365,7 +367,7 @@ if(dojo.isIE || dojo.isOpera){
        // Although we normally eschew argument validation at this
        // level, here we test argument 'node' for (duck)type,
        // by testing nodeType, ecause 'document' is the 'parentNode' of 'body'
-       // it is frequently sent to this function even 
+       // it is frequently sent to this function even
        // though it is not Element.
        var gcs;
                if(d.isWebKit){
@@ -426,7 +428,7 @@ if(dojo.isIE || dojo.isOpera){
                                runtimeStyle.left = rsLeft;
                        }
                        return avalue;
-               }
+               };
        }
                var px = d._toPixelValue;
 
@@ -454,7 +456,7 @@ if(dojo.isIE || dojo.isOpera){
        };
 
                dojo._getOpacity =
-                       d.isIE ? function(node){
+                       d.isIE < 9 ? function(node){
                        try{
                                return af(node).Opacity / 100; // Number
                        }catch(e){
@@ -481,7 +483,7 @@ if(dojo.isIE || dojo.isOpera){
        =====*/
 
        dojo._setOpacity =
-                               d.isIE ? function(/*DomNode*/node, /*Number*/opacity){
+                               d.isIE < 9 ? function(/*DomNode*/node, /*Number*/opacity){
                        var ov = opacity * 100, opaque = opacity == 1;
                        node.style.zoom = opaque ? "" : 1;
 
@@ -553,7 +555,7 @@ if(dojo.isIE || dojo.isOpera){
                //              Also when getting values, use specific style names,
                //              like "borderBottomWidth" instead of "border" since compound values like
                //              "border" are not necessarily reflected as expected.
-               //              If you want to get node dimensions, use `dojo.marginBox()`, 
+               //              If you want to get node dimensions, use `dojo.marginBox()`,
                //              `dojo.contentBox()` or `dojo.position()`.
                //      node:
                //              id or reference to node to get/set style for
@@ -622,7 +624,7 @@ if(dojo.isIE || dojo.isOpera){
                        return s;
                }
                return (args == 1) ? s : _toStyleValue(n, style, s[style] || n.style[style]); /* CSS2Properties||String||Number */
-       }
+       };
 
        // =============================
        // Box Functions
@@ -635,13 +637,13 @@ if(dojo.isIE || dojo.isOpera){
                //      description:
                //              Returns an object with `w`, `h`, `l`, `t` properties:
                //      |               l/t = left/top padding (respectively)
-               //      |               w = the total of the left and right padding 
+               //      |               w = the total of the left and right padding
                //      |               h = the total of the top and bottom padding
                //              If 'node' has position, l/t forms the origin for child nodes.
                //              The w/h are used for calculating boxes.
                //              Normally application code will not need to invoke this
                //              directly, and will use the ...box... functions instead.
-               var 
+               var
                        s = computedStyle||gcs(n),
                        l = px(n, s.paddingLeft),
                        t = px(n, s.paddingTop);
@@ -651,7 +653,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: l+px(n, s.paddingRight),
                        h: t+px(n, s.paddingBottom)
                };
-       }
+       };
 
        dojo._getBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){
                //      summary:
@@ -665,7 +667,7 @@ if(dojo.isIE || dojo.isOpera){
                //              The w/h are used for calculating boxes.
                //              Normally application code will not need to invoke this
                //              directly, and will use the ...box... functions instead.
-               var 
+               var
                        ne = "none",
                        s = computedStyle||gcs(n),
                        bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0),
@@ -676,7 +678,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0),
                        h: bt + (s.borderBottomStyle!=ne ? px(n, s.borderBottomWidth) : 0)
                };
-       }
+       };
 
        dojo._getPadBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){
                //      summary:
@@ -690,7 +692,7 @@ if(dojo.isIE || dojo.isOpera){
                //              The w/h are used for calculating boxes.
                //              Normally application code will not need to invoke this
                //              directly, and will use the ...box... functions instead.
-               var 
+               var
                        s = computedStyle||gcs(n),
                        p = d._getPadExtents(n, s),
                        b = d._getBorderExtents(n, s);
@@ -700,7 +702,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: p.w + b.w,
                        h: p.h + b.h
                };
-       }
+       };
 
        dojo._getMarginExtents = function(n, computedStyle){
                //      summary:
@@ -714,7 +716,7 @@ if(dojo.isIE || dojo.isOpera){
                //              The w/h are used for calculating boxes.
                //              Normally application code will not need to invoke this
                //              directly, and will use the ...box... functions instead.
-               var 
+               var
                        s = computedStyle||gcs(n),
                        l = px(n, s.marginLeft),
                        t = px(n, s.marginTop),
@@ -722,9 +724,9 @@ if(dojo.isIE || dojo.isOpera){
                        b = px(n, s.marginBottom);
                if(d.isWebKit && (s.position != "absolute")){
                        // FIXME: Safari's version of the computed right margin
-                       // is the space between our right edge and the right edge 
+                       // is the space between our right edge and the right edge
                        // of our offsetParent.
-                       // What we are looking for is the actual margin value as 
+                       // What we are looking for is the actual margin value as
                        // determined by CSS.
                        // Hack solution is to assume left/right margins are the same.
                        r = l;
@@ -735,7 +737,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: l+r,
                        h: t+b
                };
-       }
+       };
 
        // Box getters work in any box context because offsetWidth/clientWidth
        // are invariant wrt box context
@@ -743,10 +745,10 @@ if(dojo.isIE || dojo.isOpera){
        // They do *not* work for display: inline objects that have padding styles
        // because the user agent ignores padding (it's bogus styling in any case)
        //
-       // Be careful with IMGs because they are inline or block depending on 
+       // Be careful with IMGs because they are inline or block depending on
        // browser and browser mode.
 
-       // Although it would be easier to read, there are not separate versions of 
+       // Although it would be easier to read, there are not separate versions of
        // _getMarginBox for each browser because:
        // 1. the branching is not expensive
        // 2. factoring the shared code wastes cycles (function call overhead)
@@ -790,9 +792,23 @@ if(dojo.isIE || dojo.isOpera){
                        l: l,
                        t: t,
                        w: node.offsetWidth + me.w,
-                       h: node.offsetHeight + me.h 
+                       h: node.offsetHeight + me.h
                };
        }
+       
+       dojo._getMarginSize = function(/*DomNode*/node, /*Object*/computedStyle){
+               // summary:
+               //      returns an object that encodes the width and height of
+               //      the node's margin box
+               node = byId(node);
+               var me = d._getMarginExtents(node, computedStyle || gcs(node));
+
+               var size = node.getBoundingClientRect();
+               return {
+                       w: (size.right - size.left) + me.w,
+                       h: (size.bottom - size.top) + me.h
+               }
+       }
 
        dojo._getContentBox = function(node, computedStyle){
                // summary:
@@ -821,7 +837,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: w - pe.w - be.w,
                        h: h - pe.h - be.h
                };
-       }
+       };
 
        dojo._getBorderBox = function(node, computedStyle){
                var s = computedStyle || gcs(node),
@@ -834,7 +850,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: cb.w + pe.w,
                        h: cb.h + pe.h
                };
-       }
+       };
 
        // Box setters depend on box context because interpretation of width/height styles
        // vary wrt box context.
@@ -845,12 +861,12 @@ if(dojo.isIE || dojo.isOpera){
        // Beware of display: inline objects that have padding styles
        // because the user agent ignores padding (it's a bogus setup anyway)
        //
-       // Be careful with IMGs because they are inline or block depending on 
+       // Be careful with IMGs because they are inline or block depending on
        // browser and browser mode.
        //
        // Elements other than DIV may have special quirks, like built-in
        // margins or padding, or values not detectable via computedStyle.
-       // In particular, margins on TABLE do not seems to appear 
+       // In particular, margins on TABLE do not seems to appear
        // at all in computedStyle on Mozilla.
 
        dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){
@@ -876,14 +892,14 @@ if(dojo.isIE || dojo.isOpera){
                if(!isNaN(t)){ s.top = t + u; }
                if(w >= 0){ s.width = w + u; }
                if(h >= 0){ s.height = h + u; }
-       }
+       };
 
        dojo._isButtonTag = function(/*DomNode*/node) {
                // summary:
                //              True if the node is BUTTON or INPUT.type="button".
                return node.tagName == "BUTTON"
                        || node.tagName=="INPUT" && (node.getAttribute("type")||'').toUpperCase() == "BUTTON"; // boolean
-       }
+       };
 
        dojo._usesBorderBox = function(/*DomNode*/node){
                //      summary:
@@ -898,7 +914,7 @@ if(dojo.isIE || dojo.isOpera){
 
                var n = node.tagName;
                return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean
-       }
+       };
 
        dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){
                //      summary:
@@ -910,7 +926,7 @@ if(dojo.isIE || dojo.isOpera){
                        if(heightPx >= 0){ heightPx += pb.h; }
                }
                d._setBox(node, NaN, NaN, widthPx, heightPx);
-       }
+       };
 
        dojo._setMarginBox = function(/*DomNode*/node,  /*Number?*/leftPx, /*Number?*/topPx,
                                                                                                        /*Number?*/widthPx, /*Number?*/heightPx,
@@ -942,7 +958,7 @@ if(dojo.isIE || dojo.isOpera){
                if(widthPx >= 0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); }
                if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); }
                d._setBox(node, leftPx, topPx, widthPx, heightPx);
-       }
+       };
 
        var _nilExtents = { l:0, t:0, w:0, h:0 };
 
@@ -977,7 +993,7 @@ if(dojo.isIE || dojo.isOpera){
                
                var n = byId(node), s = gcs(n), b = box;
                return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object
-       }
+       };
 
        dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){
                //      summary:
@@ -1002,14 +1018,14 @@ if(dojo.isIE || dojo.isOpera){
                //              All properties are optional if passed.
                var n = byId(node), s = gcs(n), b = box;
                return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object
-       }
+       };
 
        // =============================
-       // Positioning 
+       // Positioning
        // =============================
 
        var _sumAncestorProperties = function(node, prop){
-               if(!(node = (node||0).parentNode)){return 0}
+               if(!(node = (node||0).parentNode)){return 0;}
                var val, retVal = 0, _b = d.body();
                while(node && node.style){
                        if(gcs(node).position == "fixed"){
@@ -1025,19 +1041,19 @@ if(dojo.isIE || dojo.isOpera){
                        node = node.parentNode;
                }
                return retVal;  //      integer
-       }
+       };
 
        dojo._docScroll = function(){
                var n = d.global;
-               return "pageXOffset" in n? { x:n.pageXOffset, y:n.pageYOffset } :
-                       (n=d.doc.documentElement, n.clientHeight? { x:d._fixIeBiDiScrollLeft(n.scrollLeft), y:n.scrollTop } :
-                       (n=d.body(), { x:n.scrollLeft||0, y:n.scrollTop||0 }));
+               return "pageXOffset" in n
+                       ? { x:n.pageXOffset, y:n.pageYOffset }
+                       : (n = d.isQuirks? d.doc.body : d.doc.documentElement, { x:d._fixIeBiDiScrollLeft(n.scrollLeft || 0), y:n.scrollTop || 0 });
        };
 
        dojo._isBodyLtr = function(){
                return "_bodyLtr" in d? d._bodyLtr :
-                       d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean 
-       }
+                       d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean
+       };
 
                dojo._getIeDocumentElementOffset = function(){
                //      summary:
@@ -1058,7 +1074,7 @@ if(dojo.isIE || dojo.isOpera){
 
                //NOTE: assumes we're being called in an IE browser
 
-               var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks 
+               var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks
 
                if(d.isIE < 8){
                        var r = de.getBoundingClientRect(); // works well for IE6+
@@ -1083,18 +1099,22 @@ if(dojo.isIE || dojo.isOpera){
        };
        
        dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){
-               // In RTL direction, scrollLeft should be a negative value, but IE < 8
+               // In RTL direction, scrollLeft should be a negative value, but IE
                // returns a positive one. All codes using documentElement.scrollLeft
                // must call this function to fix this error, otherwise the position
                // will offset to right when there is a horizontal scrollbar.
 
-                               var dd = d.doc;
-               if(d.isIE < 8 && !d._isBodyLtr()){
-                       var de = d.isQuirks ? dd.body : dd.documentElement;
-                       return scrollLeft + de.clientWidth - de.scrollWidth; // Integer
+                               var ie = d.isIE;
+               if(ie && !d._isBodyLtr()){
+                       var qk = d.isQuirks,
+                               de = qk ? d.doc.body : d.doc.documentElement;
+                       if(ie == 6 && !qk && d.global.frameElement && de.scrollHeight > de.clientHeight){
+                               scrollLeft += de.clientLeft; // workaround ie6+strict+rtl+iframe+vertical-scrollbar bug where clientWidth is too small by clientLeft pixels
+                       }
+                       return (ie < 8 || qk) ? (scrollLeft + de.clientWidth - de.scrollWidth) : -scrollLeft; // Integer
                }
                                return scrollLeft; // Integer
-       }
+       };
 
        // FIXME: need a setter for coords or a moveTo!!
        dojo._abs = dojo.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){
@@ -1112,10 +1132,9 @@ if(dojo.isIE || dojo.isOpera){
                //              Uses the border-box model (inclusive of border and padding but
                //              not margin).  Does not act as a setter.
 
-               var db = d.body(), dh = db.parentNode, ret;
                node = byId(node);
-               if(node["getBoundingClientRect"]){
-                       // IE6+, FF3+, super-modern WebKit, and Opera 9.6+ all take this branch
+               var     db = d.body(),
+                       dh = db.parentNode,
                        ret = node.getBoundingClientRect();
                        ret = { x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top };
                                        if(d.isIE){
@@ -1132,60 +1151,7 @@ if(dojo.isIE || dojo.isOpera){
                                ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth);
                                ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth);
                        }
-                               }else{
-                       // FF2 and older WebKit
-                       ret = {
-                               x: 0,
-                               y: 0,
-                               w: node.offsetWidth,
-                               h: node.offsetHeight
-                       };
-                       if(node["offsetParent"]){
-                               ret.x -= _sumAncestorProperties(node, "scrollLeft");
-                               ret.y -= _sumAncestorProperties(node, "scrollTop");
-
-                               var curnode = node;
-                               do{
-                                       var n = curnode.offsetLeft,
-                                               t = curnode.offsetTop;
-                                       ret.x += isNaN(n) ? 0 : n;
-                                       ret.y += isNaN(t) ? 0 : t;
-
-                                       cs = gcs(curnode);
-                                       if(curnode != node){
-                                                               if(d.isMoz){
-                                                       // tried left+right with differently sized left/right borders
-                                                       // it really is 2xleft border in FF, not left+right, even in RTL!
-                                                       ret.x += 2 * px(curnode,cs.borderLeftWidth);
-                                                       ret.y += 2 * px(curnode,cs.borderTopWidth);
-                                               }else{
-                                                                       ret.x += px(curnode, cs.borderLeftWidth);
-                                                       ret.y += px(curnode, cs.borderTopWidth);
-                                                               }
-                                                       }
-                                       // static children in a static div in FF2 are affected by the div's border as well
-                                       // but offsetParent will skip this div!
-                                                       if(d.isMoz && cs.position=="static"){
-                                               var parent=curnode.parentNode;
-                                               while(parent!=curnode.offsetParent){
-                                                       var pcs=gcs(parent);
-                                                       if(pcs.position=="static"){
-                                                               ret.x += px(curnode,pcs.borderLeftWidth);
-                                                               ret.y += px(curnode,pcs.borderTopWidth);
-                                                       }
-                                                       parent=parent.parentNode;
-                                               }
-                                       }
-                                                       curnode = curnode.offsetParent;
-                               }while((curnode != dh) && curnode);
-                       }else if(node.x && node.y){
-                               ret.x += isNaN(node.x) ? 0 : node.x;
-                               ret.y += isNaN(node.y) ? 0 : node.y;
-                       }
-               }
-               // account for document scrolling
-               // if offsetParent is used, ret value already includes scroll position
-               // so we may have to actually remove that value if !includeScroll
+                               // account for document scrolling
                if(includeScroll){
                        var scroll = d._docScroll();
                        ret.x += scroll.x;
@@ -1193,7 +1159,7 @@ if(dojo.isIE || dojo.isOpera){
                }
 
                return ret; // Object
-       }
+       };
 
        dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){
                //      summary:
@@ -1215,7 +1181,7 @@ if(dojo.isIE || dojo.isOpera){
                mb.x = abs.x;
                mb.y = abs.y;
                return mb;
-       }
+       };
 
        // =============================
        // Element attribute Functions
@@ -1277,7 +1243,7 @@ if(dojo.isIE || dojo.isOpera){
                //              given element, and false otherwise
                var lc = name.toLowerCase();
                return _forcePropNames[_propNames[lc] || name] || _hasAttr(byId(node), _attrNames[lc] || name); // Boolean
-       }
+       };
 
        var _evtHdlrMap = {}, _ctr = 0,
                _attrId = dojo._scopeName + "attrid",
@@ -1447,7 +1413,7 @@ if(dojo.isIE || dojo.isOpera){
                // node's attribute
                // we need _hasAttr() here to guard against IE returning a default value
                return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything
-       }
+       };
 
        dojo.removeAttr = function(/*DomNode|String*/ node, /*String*/ name){
                //      summary:
@@ -1457,7 +1423,7 @@ if(dojo.isIE || dojo.isOpera){
                //      name:
                //              the name of the attribute to remove
                byId(node).removeAttribute(_fixAttrName(name));
-       }
+       };
 
        dojo.getNodeProp = function(/*DomNode|String*/ node, /*String*/ name){
                //      summary:
@@ -1476,7 +1442,7 @@ if(dojo.isIE || dojo.isOpera){
                // node's attribute
                var attrName = _attrNames[lc] || name;
                return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything
-       }
+       };
 
        dojo.create = function(tag, attrs, refNode, pos){
                //      summary:
@@ -1491,7 +1457,7 @@ if(dojo.isIE || dojo.isOpera){
                //              Attributes are set by passing the optional object through `dojo.attr`.
                //              See `dojo.attr` for noted caveats and nuances, and API if applicable.
                //|
-               //              Placement is done via `dojo.place`, assuming the new node to be the action 
+               //              Placement is done via `dojo.place`, assuming the new node to be the action
                //              node, passing along the optional reference node and position.
                //
                // tag: String|DomNode
@@ -1529,7 +1495,7 @@ if(dojo.isIE || dojo.isOpera){
                //      |       var n = dojo.create("div", null, dojo.body());
                //
                // example:
-               //      Create an UL, and populate it with LI's. Place the list as the first-child of a 
+               //      Create an UL, and populate it with LI's. Place the list as the first-child of a
                //      node with id="someId":
                //      |       var ul = dojo.create("ul", null, "someId", "first");
                //      |       var items = ["one", "two", "three", "four"];
@@ -1559,7 +1525,7 @@ if(dojo.isIE || dojo.isOpera){
                if(attrs){ d.attr(tag, attrs); }
                if(refNode){ d.place(tag, refNode, pos); }
                return tag; // DomNode
-       }
+       };
 
        /*=====
        dojo.empty = function(node){
@@ -1627,11 +1593,13 @@ if(dojo.isIE || dojo.isOpera){
        // generate start/end tag strings to use
        // for the injection for each special tag wrap case.
        for(var param in tagWrap){
-               var tw = tagWrap[param];
-               tw.pre  = param == "option" ? '<select multiple="multiple">' : "<" + tw.join("><") + ">";
-               tw.post = "</" + tw.reverse().join("></") + ">";
-               // the last line is destructive: it reverses the array,
-               // but we don't care at this point
+               if(tagWrap.hasOwnProperty(param)){
+                       var tw = tagWrap[param];
+                       tw.pre  = param == "option" ? '<select multiple="multiple">' : "<" + tw.join("><") + ">";
+                       tw.post = "</" + tw.reverse().join("></") + ">";
+                       // the last line is destructive: it reverses the array,
+                       // but we don't care at this point
+               }
        }
 
        d._toDom = function(frag, doc){
@@ -1674,7 +1642,7 @@ if(dojo.isIE || dojo.isOpera){
                        df.appendChild(fc);
                }
                return df; // DOMNode
-       }
+       };
 
        // =============================
        // (CSS) Class Functions
@@ -1700,6 +1668,7 @@ if(dojo.isIE || dojo.isOpera){
        };
 
        var spaces = /\s+/, a1 = [""],
+               fakeNode = {},
                str2array = function(s){
                        if(typeof s == "string" || s instanceof String){
                                if(s.indexOf(" ") < 0){
@@ -1805,6 +1774,39 @@ if(dojo.isIE || dojo.isOpera){
                if(node[_className] != cls){ node[_className] = cls; }
        };
 
+       dojo.replaceClass = function(/*DomNode|String*/node, /*String|Array*/addClassStr, /*String|Array?*/removeClassStr){
+               // summary:
+               //              Replaces one or more classes on a node if not present.
+               //              Operates more quickly than calling dojo.removeClass and dojo.addClass
+               // node:
+               //              String ID or DomNode reference to remove the class from.
+               // addClassStr:
+               //              A String class name to add, or several space-separated class names,
+               //              or an array of class names.
+               // removeClassStr:
+               //              A String class name to remove, or several space-separated class names,
+               //              or an array of class names.
+               //
+               // example:
+               //      |       dojo.replaceClass("someNode", "add1 add2", "remove1 remove2");
+               //
+               // example:
+               //      Replace all classes with addMe
+               //      |       dojo.replaceClass("someNode", "addMe");
+               //
+               // example:
+               //      Available in `dojo.NodeList()` for multiple toggles
+               //      |       dojo.query(".findMe").replaceClass("addMe", "removeMe");
+
+        node = byId(node);
+               fakeNode.className = node.className;
+               dojo.removeClass(fakeNode, removeClassStr);
+               dojo.addClass(fakeNode, addClassStr);
+               if(node.className !== fakeNode.className){
+                       node.className = fakeNode.className;
+               }
+       };
+
        dojo.toggleClass = function(/*DomNode|String*/node, /*String|Array*/classStr, /*Boolean?*/condition){
                //      summary:
                //              Adds a class to node if not present, or removes if present.
index 4d50400c90638927ec86562eeef05310dae2334e..4267c225ed7fa15b39ae290d6dd7f552bb3cf822 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo._base.json"] = true;
 dojo.provide("dojo._base.json");
 
+
 dojo.fromJson = function(/*String*/ json){
        // summary:
        //              Parses a [JSON](http://json.org) string to return a JavaScript object.
@@ -16,12 +17,12 @@ dojo.fromJson = function(/*String*/ json){
        //              Throws for invalid JSON strings, but it does not use a strict JSON parser. It
        //              delegates to eval().  The content passed to this method must therefore come
        //              from a trusted source.
-       // json: 
+       // json:
        //              a string literal of a JSON item, for instance:
        //                      `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'`
 
        return eval("(" + json + ")"); // Object
-}
+};
 
 dojo._escapeString = function(/*String*/str){
        //summary:
@@ -31,7 +32,7 @@ dojo._escapeString = function(/*String*/str){
        return ('"' + str.replace(/(["\\])/g, '\\$1') + '"').
                replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n").
                replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string
-}
+};
 
 dojo.toJsonIndentStr = "\t";
 dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){
@@ -75,8 +76,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind
        if(it === null){
                return "null";
        }
-       if(dojo.isString(it)){ 
-               return dojo._escapeString(it); 
+       if(dojo.isString(it)){
+               return dojo._escapeString(it);
        }
        // recurse
        var recurse = arguments.callee;
@@ -149,6 +150,6 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind
                output.push(newLine + nextIndent + keyStr + ":" + sep + val);
        }
        return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String
-}
+};
 
 }
index 0e9c7c2f9634c5b96840f8de738e03c71532a2b5..9061de01eb8b3d64b3672c9279ac9907f6c8d6ac 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo._base.lang"] = true;
 dojo.provide("dojo._base.lang");
 
+
 (function(){
        var d = dojo, opts = Object.prototype.toString;
 
@@ -18,14 +19,14 @@ dojo.provide("dojo._base.lang");
                //      summary:
                //              Return true if it is a String
                return (typeof it == "string" || it instanceof String); // Boolean
-       }
+       };
 
        dojo.isArray = function(/*anything*/ it){
                //      summary:
                //              Return true if it is an Array.
                //              Does not work on Arrays created in other windows.
                return it && (it instanceof Array || typeof it == "array"); // Boolean
-       }
+       };
 
        dojo.isFunction = function(/*anything*/ it){
                // summary:
@@ -39,7 +40,7 @@ dojo.provide("dojo._base.lang");
                //              or null)
                return it !== undefined &&
                        (it === null || typeof it == "object" || d.isArray(it) || d.isFunction(it)); // Boolean
-       }
+       };
 
        dojo.isArrayLike = function(/*anything*/ it){
                //      summary:
@@ -58,14 +59,14 @@ dojo.provide("dojo._base.lang");
                        !d.isString(it) && !d.isFunction(it) &&
                        !(it.tagName && it.tagName.toLowerCase() == 'form') &&
                        (d.isArray(it) || isFinite(it.length));
-       }
+       };
 
        dojo.isAlien = function(/*anything*/ it){
                // summary:
                //              Returns true if it is a built-in function or some other kind of
                //              oddball that *should* report as a function but doesn't
                return it && !d.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean
-       }
+       };
 
        dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){
                // summary:
@@ -76,7 +77,7 @@ dojo.provide("dojo._base.lang");
                        d._mixin(constructor.prototype, arguments[i]);
                }
                return constructor; // Object
-       }
+       };
 
        dojo._hitchArgs = function(scope, method /*,...*/){
                var pre = d._toArray(arguments, 2);
@@ -88,8 +89,8 @@ dojo.provide("dojo._base.lang");
                        var f = named ? (scope||d.global)[method] : method;
                        // invoke with collected args
                        return f && f.apply(scope || this, pre.concat(args)); // mixed
-               } // Function
-       }
+               }; // Function
+       };
 
        dojo.hitch = function(/*Object*/scope, /*Function|String*/method /*,...*/){
                //      summary:
@@ -97,7 +98,7 @@ dojo.provide("dojo._base.lang");
                //              This allows for easy use of object member functions
                //              in callbacks and other places in which the "this" keyword may
                //              otherwise not reference the expected scope.
-               //              Any number of default positional arguments may be passed as parameters 
+               //              Any number of default positional arguments may be passed as parameters
                //              beyond "method".
                //              Each of these values will be used to "placehold" (similar to curry)
                //              for the hitched function.
@@ -137,7 +138,7 @@ dojo.provide("dojo._base.lang");
                        return function(){ return scope[method].apply(scope, arguments || []); }; // Function
                }
                return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function
-       }
+       };
 
        /*=====
        dojo.delegate = function(obj, props){
@@ -181,7 +182,7 @@ dojo.provide("dojo._base.lang");
                                d._mixin(tmp, props);
                        }
                        return tmp; // Object
-               }
+               };
        })();
 
        /*=====
@@ -230,7 +231,7 @@ dojo.provide("dojo._base.lang");
                //              |       dojo.hitch(null, funcName, ...);
                var arr = [ null ];
                return d.hitch.apply(d, arr.concat(d._toArray(arguments))); // Function
-       }
+       };
 
        var extraNames = d._extraNames, extraLen = extraNames.length, empty = {};
 
@@ -250,6 +251,10 @@ dojo.provide("dojo._base.lang");
                        // Date
                        return new Date(o.getTime());   // Date
                }
+               if(o instanceof RegExp){
+                       // RegExp
+                       return new RegExp(o);   // RegExp
+               }
                var r, i, l, s, name;
                if(d.isArray(o)){
                        // array
@@ -288,7 +293,7 @@ dojo.provide("dojo._base.lang");
                        }
                }
                                return r; // Object
-       }
+       };
 
        /*=====
        dojo.trim = function(str){
@@ -317,7 +322,7 @@ dojo.provide("dojo._base.lang");
        dojo.replace = function(tmpl, map, pattern){
                //      summary:
                //              Performs parameterized substitutions on a string. Throws an
-               //              exception if any parameter is unmatched. 
+               //              exception if any parameter is unmatched.
                //      tmpl: String
                //              String to be used as a template.
                //      map: Object|Function
index 5d160ec55184fd19db41c614bdffecd821bc3c1f..aad4e824dad2c9cf23977999a90f5eef30668095 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -20,11 +20,7 @@ dojo._hasResource["dojo._base.query"] = true;
  *  Finally, dojo.provide/require added.
  */
 
-//This file gets copied to dojo/_base/query.js, so set the provide accordingly.
-if(typeof dojo != "undefined"){
-       dojo.provide("dojo._base.query");
-       dojo.require("dojo._base.NodeList");
-
+var startDojoMappings= function(dojo) {
        //Start Dojo mappings.
        dojo.query = function(/*String*/ query, /*String|DOMNode?*/ root, /*Function?*/listCtor){
                listCtor = listCtor || dojo.NodeList;
@@ -45,16 +41,16 @@ if(typeof dojo != "undefined"){
                }
 
                return dojo.Sizzle(query, root, new listCtor());
-       }
+       };
 
        dojo._filterQueryResult = function(nodeList, simpleFilter){
                return dojo.Sizzle.filter(simpleFilter, nodeList);
-       }
-}
+       };
+};
 
 //Main Sizzle code follows...
 //ns argument, added for dojo, used at the end of the file.
-;(function(ns){
+var defineSizzle= function(ns){
 
 var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,
        done = 0,
@@ -862,8 +858,20 @@ var contains = document.compareDocumentPosition ?  function(a, b){
 
 // EXPOSE
 
-(ns || window).Sizzle = Sizzle;
+ns.Sizzle = Sizzle;
 
-})(typeof dojo == "undefined" ? null : dojo);
+};
+
+if (this["dojo"]) {
+  var defined= 0;
+  if (!defined) {
+    // must be in a built version that stripped out the define above
+       dojo.provide("dojo._base.query");
+    dojo.require("dojo._base.NodeList");
+    defineSizzle(dojo);
+  } // else must be in a source version (or a build that likes define)
+} else {
+  defineSizzle(window);
+}
 
 }
index 7b9878e473c6252e91a081924e82dfd1df96f973..59411952ff910d68e681773d1b64c823204b13d5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -7,12 +7,7 @@
 
 if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo._base.query"] = true;
-if(typeof dojo != "undefined"){
-       dojo.provide("dojo._base.query");
-       dojo.require("dojo._base.NodeList");
-       dojo.require("dojo._base.lang");
-
-}
+(function(){
 
 /*
        dojo.query() architectural overview:
@@ -46,7 +41,7 @@ if(typeof dojo != "undefined"){
                        5.) matched nodes are pruned to ensure they are unique (if necessary)
 */
 
-;(function(d){
+var defineQuery= function(d){
        // define everything in a closure for compressability reasons. "d" is an
        // alias to "dojo" (or the toolkit alias object, e.g., "acme").
 
@@ -54,7 +49,7 @@ if(typeof dojo != "undefined"){
        // Toolkit aliases
        ////////////////////////////////////////////////////////////////////////
 
-       // if you are extracing dojo.query for use in your own system, you will
+       // if you are extracting dojo.query for use in your own system, you will
        // need to provide these methods and properties. No other porting should be
        // necessary, save for configuring the system to use a class other than
        // dojo.NodeList as the return instance instantiator
@@ -65,7 +60,7 @@ if(typeof dojo != "undefined"){
        //                                      d.isOpera; // float
        //                                      d.isWebKit; // float
        //                                      d.doc ; // document element
-       var qlc = d._NodeListCtor =             d.NodeList;
+       var qlc = (d._NodeListCtor =            d.NodeList);
 
        var getDoc = function(){ return d.doc; };
        // NOTE(alex): the spec is idiotic. CSS queries should ALWAYS be case-sensitive, but nooooooo
@@ -96,7 +91,7 @@ if(typeof dojo != "undefined"){
        ////////////////////////////////////////////////////////////////////////
 
        var getQueryParts = function(query){
-               //      summary: 
+               //      summary:
                //              state machine for query tokenization
                //      description:
                //              instead of using a brittle and slow regex-based CSS parser,
@@ -105,16 +100,16 @@ if(typeof dojo != "undefined"){
                //              the same query run multiple times or under different root nodes
                //              does not re-parse the selector expression but instead uses the
                //              cached data structure. The state machine implemented here
-               //              terminates on the last " " (space) charachter and returns an
+               //              terminates on the last " " (space) character and returns an
                //              ordered array of query component structures (or "parts"). Each
                //              part represents an operator or a simple CSS filtering
                //              expression. The structure for parts is documented in the code
                //              below.
 
 
-               // NOTE: 
+               // NOTE:
                //              this code is designed to run fast and compress well. Sacrifices
-               //              to readibility and maintainability have been made.  Your best
+               //              to readability and maintainability have been made.  Your best
                //              bet when hacking the tokenizer is to put The Donnas on *really*
                //              loud (may we recommend their "Spend The Night" release?) and
                //              just assume you're gonna make mistakes. Keep the unit tests
@@ -130,7 +125,7 @@ if(typeof dojo != "undefined"){
                }
 
                var ts = function(/*Integer*/ s, /*Integer*/ e){
-                       // trim and slice. 
+                       // trim and slice.
 
                        // take an index to start a string slice from and an end position
                        // and return a trimmed copy of that sub-string
@@ -138,12 +133,12 @@ if(typeof dojo != "undefined"){
                }
 
                // the overall data graph of the full query, as represented by queryPart objects
-               var queryParts = []; 
+               var queryParts = [];
 
 
                // state keeping vars
-               var inBrackets = -1, inParens = -1, inMatchFor = -1, 
-                       inPseudo = -1, inClass = -1, inId = -1, inTag = -1, 
+               var inBrackets = -1, inParens = -1, inMatchFor = -1,
+                       inPseudo = -1, inClass = -1, inId = -1, inTag = -1,
                        lc = "", cc = "", pStart;
 
                // iteration vars
@@ -152,7 +147,7 @@ if(typeof dojo != "undefined"){
                        currentPart = null, // data structure representing the entire clause
                        _cp = null; // the current pseudo or attr matcher
 
-               // several temporary variables are assigned to this structure durring a
+               // several temporary variables are assigned to this structure during a
                // potential sub-expression match:
                //              attr:
                //                      a string representing the current full attribute match in a
@@ -207,9 +202,9 @@ if(typeof dojo != "undefined"){
                        // needs to do any iteration. Many simple selectors don't, and
                        // we can avoid significant construction-time work by advising
                        // the system to skip them
-                       currentPart.loops = (   
-                                       currentPart.pseudos.length || 
-                                       currentPart.attrs.length || 
+                       currentPart.loops = (
+                                       currentPart.pseudos.length ||
+                                       currentPart.attrs.length ||
                                        currentPart.classes.length      );
 
                        currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string
@@ -239,9 +234,9 @@ if(typeof dojo != "undefined"){
                                currentPart.infixOper = queryParts.pop();
                                currentPart.query = currentPart.infixOper.query + " " + currentPart.query;
                                /*
-                               console.debug(  "swapping out the infix", 
-                                                               currentPart.infixOper, 
-                                                               "and attaching it to", 
+                               console.debug(  "swapping out the infix",
+                                                               currentPart.infixOper,
+                                                               "and attaching it to",
                                                                currentPart);
                                */
                        }
@@ -250,15 +245,15 @@ if(typeof dojo != "undefined"){
                        currentPart = null;
                }
 
-               // iterate over the query, charachter by charachter, building up a 
+               // iterate over the query, character by character, building up a
                // list of query part objects
                for(; lc=cc, cc=query.charAt(x), x < ql; x++){
                        //              cc: the current character in the match
-                       //              lc: the last charachter (if any)
+                       //              lc: the last character (if any)
 
                        // someone is trying to escape something, so don't try to match any
                        // fragments. We assume we're inside a literal.
-                       if(lc == "\\"){ continue; } 
+                       if(lc == "\\"){ continue; }
                        if(!currentPart){ // a part was just ended or none has yet been created
                                // NOTE: I hate all this alloc, but it's shorter than writing tons of if's
                                pStart = x;
@@ -301,7 +296,7 @@ if(typeof dojo != "undefined"){
                                // the beginning of a match, which should be a tag name. This
                                // might fault a little later on, but we detect that and this
                                // iteration will still be fine.
-                               inTag = x; 
+                               inTag = x;
                        }
 
                        if(inBrackets >= 0){
@@ -309,7 +304,7 @@ if(typeof dojo != "undefined"){
                                if(cc == "]"){ // if we're in a [...] clause and we end, do assignment
                                        if(!_cp.attr){
                                                // no attribute match was previously begun, so we
-                                               // assume this is an attribute existance match in the
+                                               // assume this is an attribute existence match in the
                                                // form of [someAttributeName]
                                                _cp.attr = ts(inBrackets+1, x);
                                        }else{
@@ -320,19 +315,19 @@ if(typeof dojo != "undefined"){
                                        var cmf = _cp.matchFor;
                                        if(cmf){
                                                // try to strip quotes from the matchFor value. We want
-                                               // [attrName=howdy] to match the same 
+                                               // [attrName=howdy] to match the same
                                                //      as [attrName = 'howdy' ]
                                                if(     (cmf.charAt(0) == '"') || (cmf.charAt(0)  == "'") ){
                                                        _cp.matchFor = cmf.slice(1, -1);
                                                }
                                        }
-                                       // end the attribute by adding it to the list of attributes. 
+                                       // end the attribute by adding it to the list of attributes.
                                        currentPart.attrs.push(_cp);
                                        _cp = null; // necessary?
                                        inBrackets = inMatchFor = -1;
                                }else if(cc == "="){
                                        // if the last char was an operator prefix, make sure we
-                                       // record it along with the "=" operator. 
+                                       // record it along with the "=" operator.
                                        var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : "";
                                        _cp.type = addToCc+cc;
                                        _cp.attr = ts(inBrackets+1, x-addToCc.length);
@@ -341,7 +336,7 @@ if(typeof dojo != "undefined"){
                                // now look for other clause parts
                        }else if(inParens >= 0){
                                // if we're in a parenthetical expression, we need to figure
-                               // out if it's attached to a pseduo-selector rule like
+                               // out if it's attached to a pseudo-selector rule like
                                // :nth-child(1)
                                if(cc == ")"){
                                        if(inPseudo >= 0){
@@ -362,7 +357,7 @@ if(typeof dojo != "undefined"){
                                endAll();
                                inPseudo = x;
                        }else if(cc == "["){
-                               // start of an attribute match. 
+                               // start of an attribute match.
                                endAll();
                                inBrackets = x;
                                // provide a new structure for the attribute match to fill-in
@@ -376,15 +371,15 @@ if(typeof dojo != "undefined"){
                                // expression if we're already inside a pseudo-selector match
                                if(inPseudo >= 0){
                                        // provide a new structure for the pseudo match to fill-in
-                                       _cp = { 
-                                               name: ts(inPseudo+1, x), 
+                                       _cp = {
+                                               name: ts(inPseudo+1, x),
                                                value: null
                                        }
                                        currentPart.pseudos.push(_cp);
                                }
                                inParens = x;
                        }else if(
-                               (cc == " ") && 
+                               (cc == " ") &&
                                // if it's a space char and the last char is too, consume the
                                // current one without doing more work
                                (lc != cc)
@@ -404,7 +399,7 @@ if(typeof dojo != "undefined"){
                // the basic building block of the yes/no chaining system. agree(f1,
                // f2) generates a new function which returns the boolean results of
                // both of the passed functions to a single logical-anded result. If
-               // either are not possed, the other is used exclusively.
+               // either are not passed, the other is used exclusively.
                if(!first){ return second; }
                if(!second){ return first; }
 
@@ -456,7 +451,7 @@ if(typeof dojo != "undefined"){
                        }
                },
                "$=": function(attr, value){
-                       // E[foo$="bar"]        
+                       // E[foo$="bar"]
                        //              an E element whose "foo" attribute value ends exactly
                        //              with the string "bar"
                        var tval = " "+value;
@@ -466,7 +461,7 @@ if(typeof dojo != "undefined"){
                        }
                },
                "~=": function(attr, value){
-                       // E[foo~="bar"]        
+                       // E[foo~="bar"]
                        //              an E element whose "foo" attribute value is a list of
                        //              space-separated values, one of which is exactly equal
                        //              to "bar"
@@ -532,7 +527,7 @@ if(typeof dojo != "undefined"){
                if(!tret){ return -1; }
                var l = tret.length;
 
-               // we calcuate the parent length as a cheap way to invalidate the
+               // we calculate the parent length as a cheap way to invalidate the
                // cache. It's not 100% accurate, but it's much more honest than what
                // other libraries do
                if( cl == l && ci >= 0 && cl >= 0 ){
@@ -544,11 +539,11 @@ if(typeof dojo != "undefined"){
                root["_l"] = l;
                ci = -1;
                for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){
-                       if(_simpleNodeTest(te)){ 
+                       if(_simpleNodeTest(te)){
                                te["_i"] = ++i;
-                               if(node === te){ 
+                               if(node === te){
                                        // NOTE:
-                                       //      shortcuting the return at this step in indexing works
+                                       //      shortcutting the return at this step in indexing works
                                        //      very well for benchmarking but we avoid it here since
                                        //      it leads to potential O(n^2) behavior in sequential
                                        //      getNodexIndex operations on a previously un-indexed
@@ -579,7 +574,7 @@ if(typeof dojo != "undefined"){
                "first-child": function(){ return _lookLeft; },
                "last-child": function(){ return _lookRight; },
                "only-child": function(name, condition){
-                       return function(node){ 
+                       return function(node){
                                if(!_lookLeft(node)){ return false; }
                                if(!_lookRight(node)){ return false; }
                                return true;
@@ -610,7 +605,7 @@ if(typeof dojo != "undefined"){
                },
                "not": function(name, condition){
                        var p = getQueryParts(condition)[0];
-                       var ignores = { el: 1 }; 
+                       var ignores = { el: 1 };
                        if(p.tag != "*"){
                                ignores.tag = 1;
                        }
@@ -670,7 +665,7 @@ if(typeof dojo != "undefined"){
                }
        };
 
-       var defaultGetter = (d.isIE) ? function(cond){
+       var defaultGetter = (d.isIE < 9 || (dojo.isIE && dojo.isQuirks)) ? function(cond){
                var clc = cond.toLowerCase();
                if(clc == "class"){ cond = "className"; }
                return function(elem){
@@ -684,7 +679,7 @@ if(typeof dojo != "undefined"){
 
        var getSimpleFilterFunc = function(query, ignores){
                // generates a node tester function based on the passed query part. The
-               // query part is one of the structures generatd by the query parser
+               // query part is one of the structures generated by the query parser
                // when it creates the query AST. The "ignores" object specifies which
                // (if any) tests to skip, allowing the system to avoid duplicating
                // work where it may have already been taken into account by other
@@ -715,7 +710,7 @@ if(typeof dojo != "undefined"){
                                if(isWildcard){
                                        cname = cname.substr(0, cname.length-1);
                                }
-                               // I dislike the regex thing, even if memozied in a cache, but it's VERY short
+                               // I dislike the regex thing, even if memoized in a cache, but it's VERY short
                                var re = new RegExp("(?:^|\\s)" + cname + (isWildcard ? ".*" : "") + "(?:\\s|$)");
                                */
                                var re = new RegExp("(?:^|\\s)" + cname + "(?:\\s|$)");
@@ -753,7 +748,7 @@ if(typeof dojo != "undefined"){
 
                if(!("id" in ignores)){
                        if(query.id){
-                               ff = agree(ff, function(elem){ 
+                               ff = agree(ff, function(elem){
                                        return (!!elem && (elem.id == query.id));
                                });
                        }
@@ -761,7 +756,7 @@ if(typeof dojo != "undefined"){
 
                if(!ff){
                        if(!("default" in ignores)){
-                               ff = yesman; 
+                               ff = yesman;
                        }
                }
                return ff;
@@ -812,7 +807,7 @@ if(typeof dojo != "undefined"){
                                        _simpleNodeTest(te) &&
                                        (!bag || _isUnique(te, bag)) &&
                                        (filterFunc(te, x))
-                               ){ 
+                               ){
                                        ret.push(te);
                                }
                        }
@@ -854,7 +849,7 @@ if(typeof dojo != "undefined"){
                //              filters them.  The search may be specialized by infix operators
                //              (">", "~", or "+") else it will default to searching all
                //              descendants (the " " selector). Once a group of children is
-               //              founde, a test function is applied to weed out the ones we
+               //              found, a test function is applied to weed out the ones we
                //              don't want. Many common cases can be fast-pathed. We spend a
                //              lot of cycles to create a dispatcher that doesn't do more work
                //              than necessary at any point since, unlike this function, the
@@ -907,7 +902,7 @@ if(typeof dojo != "undefined"){
                var filterFunc = getSimpleFilterFunc(query, { el: 1 });
                var qt = query.tag;
                var wildcardTag = ("*" == qt);
-               var ecs = getDoc()["getElementsByClassName"]; 
+               var ecs = getDoc()["getElementsByClassName"];
 
                if(!oper){
                        // if there's no infix operator, then it's a descendant query. ID
@@ -917,8 +912,8 @@ if(typeof dojo != "undefined"){
                                // testing shows that the overhead of yesman() is acceptable
                                // and can save us some bytes vs. re-defining the function
                                // everywhere.
-                               filterFunc = (!query.loops && wildcardTag) ? 
-                                       yesman : 
+                               filterFunc = (!query.loops && wildcardTag) ?
+                                       yesman :
                                        getSimpleFilterFunc(query, { el: 1, id: 1 });
 
                                retFunc = function(root, arr){
@@ -933,9 +928,9 @@ if(typeof dojo != "undefined"){
                                        }
                                }
                        }else if(
-                               ecs && 
+                               ecs &&
                                // isAlien check. Workaround for Prototype.js being totally evil/dumb.
-                               /\{\s*\[native code\]\s*\}/.test(String(ecs)) && 
+                               /\{\s*\[native code\]\s*\}/.test(String(ecs)) &&
                                query.classes.length &&
                                !cssCaseBug
                        ){
@@ -1101,8 +1096,8 @@ if(typeof dojo != "undefined"){
        // We need te detect the right "internal" webkit version to make this work.
        var wk = "WebKit/";
        var is525 = (
-               d.isWebKit && 
-               (nua.indexOf(wk) > 0) && 
+               d.isWebKit &&
+               (nua.indexOf(wk) > 0) &&
                (parseFloat(nua.split(wk)[1]) > 528)
        );
 
@@ -1113,7 +1108,7 @@ if(typeof dojo != "undefined"){
 
        var qsa = "querySelectorAll";
        var qsaAvail = (
-               !!getDoc()[qsa] && 
+               !!getDoc()[qsa] &&
                // see #5832
                (!d.isSafari || (d.isSafari > 3.1) || is525 )
        );
@@ -1142,7 +1137,7 @@ if(typeof dojo != "undefined"){
                var domCached = _queryFuncCacheDOM[query];
                if(domCached){ return domCached; }
 
-               // TODO: 
+               // TODO:
                //              today we're caching DOM and QSA branches separately so we
                //              recalc useQSA every time. If we had a way to tag root+query
                //              efficiently, we'd be in good shape to do a global cache.
@@ -1156,11 +1151,11 @@ if(typeof dojo != "undefined"){
                        forceDOM = true;
                }
 
-               var useQSA = ( 
+               var useQSA = (
                        qsaAvail && (!forceDOM) &&
                        // as per CSS 3, we can't currently start w/ combinator:
                        //              http://www.w3.org/TR/css3-selectors/#w3cselgrammar
-                       (specials.indexOf(qcz) == -1) && 
+                       (specials.indexOf(qcz) == -1) &&
                        // IE's QSA impl sucks on pseudos
                        (!d.isIE || (query.indexOf(":") == -1)) &&
 
@@ -1173,11 +1168,11 @@ if(typeof dojo != "undefined"){
                        //              elements, even though according to spec, selected options should
                        //              match :checked. So go nonQSA for it:
                        //              http://bugs.dojotoolkit.org/ticket/5179
-                       (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && 
+                       (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) &&
                        (query.indexOf("|=") == -1) // some browsers don't grok it
                );
 
-               // TODO: 
+               // TODO:
                //              if we've got a descendant query (e.g., "> .thinger" instead of
                //              just ".thinger") in a QSA-able doc, but are passed a child as a
                //              root, it should be possible to give the item a synthetic ID and
@@ -1186,7 +1181,7 @@ if(typeof dojo != "undefined"){
 
 
                if(useQSA){
-                       var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? 
+                       var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ?
                                                (query + " *") : query;
                        return _queryFuncCacheQSA[query] = function(root){
                                try{
@@ -1213,9 +1208,9 @@ if(typeof dojo != "undefined"){
                }else{
                        // DOM branch
                        var parts = query.split(/\s*,\s*/);
-                       return _queryFuncCacheDOM[query] = ((parts.length < 2) ? 
+                       return _queryFuncCacheDOM[query] = ((parts.length < 2) ?
                                // if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher
-                               getStepQueryFunc(query) : 
+                               getStepQueryFunc(query) :
                                // if it *is* a complex query, break it up into its
                                // constituent parts and return a dispatcher that will
                                // merge the parts when run
@@ -1245,7 +1240,7 @@ if(typeof dojo != "undefined"){
                }else{
                        return node.uniqueID;
                }
-       } : 
+       } :
        function(node){
                return (node._uid || (node._uid = ++_zipIdx));
        };
@@ -1254,7 +1249,7 @@ if(typeof dojo != "undefined"){
        // to flatten a list of unique items, but rather just tell if the item in
        // question is already in the bag. Normally we'd just use hash lookup to do
        // this for us but IE's DOM is busted so we can't really count on that. On
-       // the upside, it gives us a built in unique ID function. 
+       // the upside, it gives us a built in unique ID function.
        var _isUnique = function(node, bag){
                if(!bag){ return 1; }
                var id = _nodeUID(node);
@@ -1266,7 +1261,7 @@ if(typeof dojo != "undefined"){
        // returning a list of "uniques", hopefully in doucment order
        var _zipIdxName = "_zipIdx";
        var _zip = function(arr){
-               if(arr && arr.nozip){ 
+               if(arr && arr.nozip){
                        return (qlc._wrap) ? qlc._wrap(arr) : arr;
                }
                // var ret = new d._NodeListCtor();
@@ -1285,7 +1280,7 @@ if(typeof dojo != "undefined"){
                        var szidx = _zipIdx+"";
                        arr[0].setAttribute(_zipIdxName, szidx);
                        for(var x = 1, te; te = arr[x]; x++){
-                               if(arr[x].getAttribute(_zipIdxName) != szidx){ 
+                               if(arr[x].getAttribute(_zipIdxName) != szidx){
                                        ret.push(te);
                                }
                                te.setAttribute(_zipIdxName, szidx);
@@ -1293,7 +1288,7 @@ if(typeof dojo != "undefined"){
                }else if(d.isIE && arr.commentStrip){
                        try{
                                for(var x = 1, te; te = arr[x]; x++){
-                                       if(_isElement(te)){ 
+                                       if(_isElement(te)){
                                                ret.push(te);
                                        }
                                }
@@ -1301,7 +1296,7 @@ if(typeof dojo != "undefined"){
                }else{
                        if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; }
                        for(var x = 1, te; te = arr[x]; x++){
-                               if(arr[x][_zipIdxName] != _zipIdx){ 
+                               if(arr[x][_zipIdxName] != _zipIdx){
                                        ret.push(te);
                                }
                                te[_zipIdxName] = _zipIdx;
@@ -1331,11 +1326,11 @@ if(typeof dojo != "undefined"){
                //                      * class selectors (e.g., `.foo`)
                //                      * node type selectors like `span`
                //                      * ` ` descendant selectors
-               //                      * `>` child element selectors 
+               //                      * `>` child element selectors
                //                      * `#foo` style ID selectors
                //                      * `*` universal selector
-               //                      * `~`, the immediately preceeded-by sibling selector
-               //                      * `+`, the preceeded-by sibling selector
+               //                      * `~`, the preceded-by sibling selector
+               //                      * `+`, the immediately preceded-by sibling selector
                //                      * attribute queries:
                //                      |       * `[foo]` attribute presence selector
                //                      |       * `[foo='bar']` attribute value exact match
@@ -1356,14 +1351,14 @@ if(typeof dojo != "undefined"){
                //              palette of selectors and when combined with functions for
                //              manipulation presented by dojo.NodeList, many types of DOM
                //              manipulation operations become very straightforward.
-               //              
+               //
                //              Unsupported Selectors:
                //              ----------------------
                //
                //              While dojo.query handles many CSS3 selectors, some fall outside of
-               //              what's resaonable for a programmatic node querying engine to
+               //              what's reasonable for a programmatic node querying engine to
                //              handle. Currently unsupported selectors include:
-               //              
+               //
                //                      * namespace-differentiated selectors of any form
                //                      * all `::` pseduo-element selectors
                //                      * certain pseduo-selectors which don't get a lot of day-to-day use:
@@ -1372,10 +1367,10 @@ if(typeof dojo != "undefined"){
                //                      |       * `:root`, `:active`, `:hover`, `:visisted`, `:link`,
                //                                `:enabled`, `:disabled`
                //                      * `:*-of-type` pseudo selectors
-               //              
+               //
                //              dojo.query and XML Documents:
                //              -----------------------------
-               //              
+               //
                //              `dojo.query` (as of dojo 1.2) supports searching XML documents
                //              in a case-sensitive manner. If an HTML document is served with
                //              a doctype that forces case-sensitivity (e.g., XHTML 1.1
@@ -1485,12 +1480,12 @@ if(typeof dojo != "undefined"){
                // NOTE:
                //              Opera in XHTML mode doesn't detect case-sensitivity correctly
                //              and it's not clear that there's any way to test for it
-               caseSensitive = (root.contentType && root.contentType=="application/xml") || 
+               caseSensitive = (root.contentType && root.contentType=="application/xml") ||
                                                (d.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) ||
-                                               (!!od) && 
+                                               (!!od) &&
                                                (d.isIE ? od.xml : (root.xmlVersion||od.xmlVersion));
 
-               // NOTE: 
+               // NOTE:
                //              adding "true" as the 2nd argument to getQueryFunc is useful for
                //              testing the DOM branch without worrying about the
                //              behavior/performance of the QSA branch.
@@ -1507,16 +1502,98 @@ if(typeof dojo != "undefined"){
        // FIXME: need to add infrastructure for post-filtering pseudos, ala :last
        d.query.pseudos = pseudos;
 
-       // one-off function for filtering a NodeList based on a simple selector
-       d._filterQueryResult = function(nodeList, simpleFilter){
-               var tmpNodeList = new d._NodeListCtor();
-               var filterFunc = getSimpleFilterFunc(getQueryParts(simpleFilter)[0]);
+       // function for filtering a NodeList based on a selector, optimized for simple selectors
+       d._filterQueryResult = function(/*NodeList*/ nodeList, /*String*/ filter, /*String|DOMNode?*/ root){
+               var tmpNodeList = new d._NodeListCtor(),
+                       parts = getQueryParts(filter),
+                       filterFunc =
+                               (parts.length == 1 && !/[^\w#\.]/.test(filter)) ?
+                               getSimpleFilterFunc(parts[0]) :
+                               function(node) {
+                                       return dojo.query(filter, root).indexOf(node) != -1;
+                               };
                for(var x = 0, te; te = nodeList[x]; x++){
                        if(filterFunc(te)){ tmpNodeList.push(te); }
                }
                return tmpNodeList;
        }
-})(this["queryPortability"]||this["acme"]||dojo);
+};//end defineQuery
+
+var defineAcme= function(){
+       // a self-sufficient query impl
+       acme = {
+               trim: function(/*String*/ str){
+                       // summary:
+                       //              trims whitespaces from both sides of the string
+                       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;     // String
+               },
+               forEach: function(/*String*/ arr, /*Function*/ callback, /*Object?*/ thisObject){
+                       //      summary:
+                       //              an iterator function that passes items, indexes,
+                       //              and the array to a callback
+                       if(!arr || !arr.length){ return; }
+                       for(var i=0,l=arr.length; i<l; ++i){
+                               callback.call(thisObject||window, arr[i], i, arr);
+                       }
+               },
+               byId: function(id, doc){
+                       //      summary:
+                       //              a function that return an element by ID, but also
+                       //              accepts nodes safely
+                       if(typeof id == "string"){
+                               return (doc||document).getElementById(id); // DomNode
+                       }else{
+                               return id; // DomNode
+                       }
+               },
+               // the default document to search
+               doc: document,
+               // the constructor for node list objects returned from query()
+               NodeList: Array
+       };
+
+       // define acme.isIE, acme.isSafari, acme.isOpera, etc.
+       var n = navigator;
+       var dua = n.userAgent;
+       var dav = n.appVersion;
+       var tv = parseFloat(dav);
+       acme.isOpera = (dua.indexOf("Opera") >= 0) ? tv: undefined;
+       acme.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;
+       acme.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined;
+       acme.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined;
+       var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
+       if(index && !acme.isChrome){
+               acme.isSafari = parseFloat(dav.split("Version/")[1]);
+               if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){
+                       acme.isSafari = 2;
+               }
+       }
+       if(document.all && !acme.isOpera){
+               acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;
+       }
+
+       Array._wrap = function(arr){ return arr; };
+  return acme;
+};
+
+       //prefers queryPortability, then acme, then dojo
+       if(this["dojo"]){
+               dojo.provide("dojo._base.query");
+               dojo.require("dojo._base.NodeList");
+               dojo.require("dojo._base.lang");
+               defineQuery(this["queryPortability"]||this["acme"]||dojo);
+       }else{
+               defineQuery(this["queryPortability"]||this["acme"]||defineAcme());
+       }
+
+})();
 
 /*
 */
index 5c6e2e9523b5bbc1cd9add76aa1949852e597f85..143bad61008d962dc6fda101de12576abad94933 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by buil
 dojo._hasResource["dojo._base.window"] = true;
 dojo.provide("dojo._base.window");
 
+
 /*=====
 dojo.doc = {
        // summary:
@@ -34,7 +35,7 @@ dojo.body = function(){
        // Note: document.body is not defined for a strict xhtml document
        // Would like to memoize this, but dojo.doc can change vi dojo.withDoc().
        return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node
-}
+};
 
 dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){
        // summary:
@@ -47,9 +48,9 @@ dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocu
        dojo.doc = globalDocument;
 };
 
-dojo.withGlobal = function(    /*Object*/globalObject, 
-                                                       /*Function*/callback, 
-                                                       /*Object?*/thisObject, 
+dojo.withGlobal = function(    /*Object*/globalObject,
+                                                       /*Function*/callback,
+                                                       /*Object?*/thisObject,
                                                        /*Array?*/cbArguments){
        // summary:
        //              Invoke callback with globalObject as dojo.global and
@@ -68,11 +69,11 @@ dojo.withGlobal = function( /*Object*/globalObject,
        }finally{
                dojo.global = oldGlob;
        }
-}
+};
 
-dojo.withDoc = function(       /*DocumentElement*/documentObject, 
-                                                       /*Function*/callback, 
-                                                       /*Object?*/thisObject, 
+dojo.withDoc = function(       /*DocumentElement*/documentObject,
+                                                       /*Function*/callback,
+                                                       /*Object?*/thisObject,
                                                        /*Array?*/cbArguments){
        // summary:
        //              Invoke callback with documentObject as dojo.doc.
@@ -103,6 +104,5 @@ dojo.withDoc = function(    /*DocumentElement*/documentObject,
                dojo.isQuirks = oldQ;
        }
 };
-       
 
 }
index 818f8e41825e264d0ec04239a5bd156d5ec4e411..58f1fdb62b8643d82ca41ea9dddf10167e4819e4 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -13,6 +13,7 @@ dojo.require("dojo._base.json");
 dojo.require("dojo._base.lang");
 dojo.require("dojo._base.query");
 
+
 (function(){
        var _d = dojo, cfg = _d.config;
 
@@ -53,7 +54,7 @@ dojo.require("dojo._base.query");
                        var type = (item.type||"").toLowerCase();
                        if(_in && type && !item.disabled){
                                if(type == "radio" || type == "checkbox"){
-                                       if(item.checked){ ret = item.value }
+                                       if(item.checked){ ret = item.value; }
                                }else if(item.multiple){
                                        ret = [];
                                        _d.query("option", item).forEach(function(opt){
@@ -67,7 +68,7 @@ dojo.require("dojo._base.query");
                        }
                }
                return ret; // Object
-       }
+       };
 
        dojo.formToObject = function(/*DOMNode||String*/ formNode){
                // summary:
@@ -94,7 +95,7 @@ dojo.require("dojo._base.query");
                //              yields this object structure as the result of a call to
                //              formToObject():
                //
-               //              |       { 
+               //              |       {
                //              |               blah: "blah",
                //              |               multi: [
                //              |                       "thud",
@@ -115,7 +116,7 @@ dojo.require("dojo._base.query");
                        }
                });
                return ret; // Object
-       }
+       };
 
        dojo.objectToQuery = function(/*Object*/ map){
                //      summary:
@@ -124,7 +125,7 @@ dojo.require("dojo._base.query");
                //      example:
                //              this object:
                //
-               //              |       { 
+               //              |       {
                //              |               blah: "blah",
                //              |               multi: [
                //              |                       "thud",
@@ -133,7 +134,7 @@ dojo.require("dojo._base.query");
                //              |       };
                //
                //      yields the following query string:
-               //      
+               //
                //      |       "blah=blah&multi=thud&multi=thonk"
 
                // FIXME: need to implement encodeAscii!!
@@ -154,21 +155,21 @@ dojo.require("dojo._base.query");
                        }
                }
                return pairs.join("&"); // String
-       }
+       };
 
        dojo.formToQuery = function(/*DOMNode||String*/ formNode){
                // summary:
                //              Returns a URL-encoded string representing the form passed as either a
                //              node or string ID identifying the form to serialize
                return _d.objectToQuery(_d.formToObject(formNode)); // String
-       }
+       };
 
        dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){
                // summary:
                //              Create a serialized JSON string from a form node or string
                //              ID identifying the form to serialize
                return _d.toJson(_d.formToObject(formNode), prettyPrint); // String
-       }
+       };
 
        dojo.queryToObject = function(/*String*/ str){
                // summary:
@@ -179,7 +180,7 @@ dojo.require("dojo._base.query");
                //              This string:
                //
                //      |               "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&"
-               //              
+               //
                //              results in this object structure:
                //
                //      |               {
@@ -187,7 +188,7 @@ dojo.require("dojo._base.query");
                //      |                       thinger: " spaces =blah",
                //      |                       zonk: "blarg"
                //      |               }
-               //      
+               //
                //              Note that spaces and other urlencoded entities are correctly
                //              handled.
 
@@ -212,7 +213,7 @@ dojo.require("dojo._base.query");
                        }
                });
                return ret; // Object
-       }
+       };
 
        // need to block async callbacks from snatching this thread as the result
        // of an async callback might call another sync XHR, this hangs khtml forever
@@ -222,7 +223,7 @@ dojo.require("dojo._base.query");
 
        // MOW: remove dojo._contentHandlers alias in 2.0
        var handlers = _d._contentHandlers = dojo.contentHandlers = {
-               // summary: 
+               // summary:
                //              A map of availble XHR transport handle types. Name matches the
                //              `handleAs` attribute passed to XHR calls.
                //
@@ -230,41 +231,41 @@ dojo.require("dojo._base.query");
                //              A map of availble XHR transport handle types. Name matches the
                //              `handleAs` attribute passed to XHR calls. Each contentHandler is
                //              called, passing the xhr object for manipulation. The return value
-               //              from the contentHandler will be passed to the `load` or `handle` 
-               //              functions defined in the original xhr call. 
-               //              
+               //              from the contentHandler will be passed to the `load` or `handle`
+               //              functions defined in the original xhr call.
+               //
                // example:
                //              Creating a custom content-handler:
                //      |       dojo.contentHandlers.makeCaps = function(xhr){
                //      |               return xhr.responseText.toUpperCase();
                //      |       }
                //      |       // and later:
-               //      |       dojo.xhrGet({ 
+               //      |       dojo.xhrGet({
                //      |               url:"foo.txt",
                //      |               handleAs:"makeCaps",
                //      |               load: function(data){ /* data is a toUpper version of foo.txt */ }
                //      |       });
 
-               text: function(xhr){ 
+               text: function(xhr){
                        // summary: A contentHandler which simply returns the plaintext response data
-                       return xhr.responseText; 
+                       return xhr.responseText;
                },
                json: function(xhr){
                        // summary: A contentHandler which returns a JavaScript object created from the response data
                        return _d.fromJson(xhr.responseText || null);
                },
-               "json-comment-filtered": function(xhr){ 
-                       // summary: A contentHandler which expects comment-filtered JSON. 
-                       // description: 
-                       //              A contentHandler which expects comment-filtered JSON. 
+               "json-comment-filtered": function(xhr){
+                       // summary: A contentHandler which expects comment-filtered JSON.
+                       // description:
+                       //              A contentHandler which expects comment-filtered JSON.
                        //              the json-comment-filtered option was implemented to prevent
                        //              "JavaScript Hijacking", but it is less secure than standard JSON. Use
                        //              standard JSON instead. JSON prefixing can be used to subvert hijacking.
-                       //              
+                       //
                        //              Will throw a notice suggesting to use application/json mimetype, as
                        //              json-commenting can introduce security issues. To decrease the chances of hijacking,
-                       //              use the standard `json` contentHandler, and prefix your "JSON" with: {}&& 
-                       //              
+                       //              use the standard `json` contentHandler, and prefix your "JSON" with: {}&&
+                       //
                        //              use djConfig.useCommentedJson = true to turn off the notice
                        if(!dojo.config.useCommentedJson){
                                console.warn("Consider using the standard mimetype:application/json."
@@ -282,7 +283,7 @@ dojo.require("dojo._base.query");
                        }
                        return _d.fromJson(value.substring(cStartIdx+2, cEndIdx));
                },
-               javascript: function(xhr){ 
+               javascript: function(xhr){
                        // summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript
 
                        // FIXME: try Moz and IE specific eval variants?
@@ -294,7 +295,7 @@ dojo.require("dojo._base.query");
                                                if(_d.isIE && (!result || !result.documentElement)){
                                //WARNING: this branch used by the xml handling in dojo.io.iframe,
                                //so be sure to test dojo.io.iframe if making changes below.
-                               var ms = function(n){ return "MSXML" + n + ".DOMDocument"; }
+                               var ms = function(n){ return "MSXML" + n + ".DOMDocument"; };
                                var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)];
                                _d.some(dp, function(p){
                                        try{
@@ -309,7 +310,7 @@ dojo.require("dojo._base.query");
                                                return result; // DOMDocument
                },
                "json-comment-optional": function(xhr){
-                       // summary: A contentHandler which checks the presence of comment-filtered JSON and 
+                       // summary: A contentHandler which checks the presence of comment-filtered JSON and
                        //              alternates between the `json` and `json-comment-filtered` contentHandlers.
                        if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){
                                return handlers["json-comment-filtered"](xhr);
@@ -341,7 +342,7 @@ dojo.require("dojo._base.query");
                //      handleAs: String?
                //              Acceptable values depend on the type of IO
                //              transport (see specific IO calls for more information).
-               //      rawBody: String?
+               //      rawBody: String?
                //              Sets the raw body for an HTTP request. If this is used, then the content
                //              property is ignored. This is mostly useful for HTTP methods that have
                //              a body to their requests, like PUT or POST. This property can be used instead
@@ -486,7 +487,7 @@ dojo.require("dojo._base.query");
                        /*Function*/canceller,
                        /*Function*/okHandler,
                        /*Function*/errHandler){
-               //      summary: 
+               //      summary:
                //              sets up the Deferred and ioArgs property on the Deferred so it
                //              can be used in an io call.
                //      args:
@@ -502,19 +503,19 @@ dojo.require("dojo._base.query");
                //              object returned from this function.
                //      errHandler:
                //              The first error callback to be registered with Deferred. It has the opportunity
-               //              to do cleanup on an error. It will receive two arguments: error (the 
+               //              to do cleanup on an error. It will receive two arguments: error (the
                //              Error object) and dfd, the Deferred object returned from this function.
 
                var ioArgs = {args: args, url: args.url};
 
                //Get values from form if requestd.
                var formObject = null;
-               if(args.form){ 
+               if(args.form){
                        var form = _d.byId(args.form);
-                       //IE requires going through getAttributeNode instead of just getAttribute in some form cases, 
+                       //IE requires going through getAttributeNode instead of just getAttribute in some form cases,
                        //so use it for all.  See #2844
                        var actnNode = form.getAttributeNode("action");
-                       ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); 
+                       ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null);
                        formObject = _d.formToObject(form);
                }
 
@@ -587,7 +588,7 @@ dojo.require("dojo._base.query");
                // FIXME: need to wire up the xhr object's abort method to something
                // analagous in the Deferred
                return d;
-       }
+       };
 
        var _deferredCancel = function(/*Deferred*/dfd){
                // summary: canceller function for dojo._ioSetArgs call.
@@ -604,13 +605,13 @@ dojo.require("dojo._base.query");
                        err.dojoType="cancel";
                }
                return err;
-       }
+       };
        var _deferredOk = function(/*Deferred*/dfd){
                // summary: okHandler function for dojo._ioSetArgs call.
 
                var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);
                return ret === undefined ? null : ret;
-       }
+       };
        var _deferError = function(/*Error*/error, /*Deferred*/dfd){
                // summary: errHandler function for dojo._ioSetArgs call.
 
@@ -618,7 +619,7 @@ dojo.require("dojo._base.query");
                        console.error(error);
                }
                return error;
-       }
+       };
 
        // avoid setting a timer per request. It degrades performance on IE
        // something fierece if we don't use unified loops.
@@ -642,7 +643,7 @@ dojo.require("dojo._base.query");
        };
 
        var _watchInFlight = function(){
-               //summary: 
+               //summary:
                //              internal method that checks each inflight XMLHttpRequest to see
                //              if it has completed or if the timeout situation applies.
                
@@ -657,7 +658,7 @@ dojo.require("dojo._base.query");
                                var dfd = tif.dfd;
                                var func = function(){
                                        if(!dfd || dfd.canceled || !tif.validCheck(dfd)){
-                                               _inFlight.splice(i--, 1); 
+                                               _inFlight.splice(i--, 1);
                                                _pubCount -= 1;
                                        }else if(tif.ioCheck(dfd)){
                                                _inFlight.splice(i--, 1);
@@ -695,7 +696,7 @@ dojo.require("dojo._base.query");
                        _inFlightIntvl = null;
                        return;
                }
-       }
+       };
 
        dojo._ioCancelAll = function(){
                //summary: Cancels all pending IO requests, regardless of IO type
@@ -707,7 +708,7 @@ dojo.require("dojo._base.query");
                                }catch(e){/*squelch*/}
                        });
                }catch(e){/*squelch*/}
-       }
+       };
 
        //Automatically call cancel all io calls on unload
        //in IE for trac issue #2357.
@@ -730,10 +731,10 @@ dojo.require("dojo._base.query");
                        _pubCount += 1;
                        _d.publish("/dojo/io/send", [dfd]);
                }
-       }
+       };
 
        _d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){
-               // summary: 
+               // summary:
                //              Watches the io request represented by dfd to see if it completes.
                // dfd: Deferred
                //              The Deferred object to watch.
@@ -763,16 +764,16 @@ dojo.require("dojo._base.query");
                if(args.sync){
                        _watchInFlight();
                }
-       }
+       };
 
        var _defaultContentType = "application/x-www-form-urlencoded";
 
        var _validCheck = function(/*Deferred*/dfd){
                return dfd.ioArgs.xhr.readyState; //boolean
-       }
+       };
        var _ioCheck = function(/*Deferred*/dfd){
                return 4 == dfd.ioArgs.xhr.readyState; //boolean
-       }
+       };
        var _resHandle = function(/*Deferred*/dfd){
                var xhr = dfd.ioArgs.xhr;
                if(_d._isDocumentOk(xhr)){
@@ -783,7 +784,7 @@ dojo.require("dojo._base.query");
                        err.responseText = xhr.responseText;
                        dfd.errback(err);
                }
-       }
+       };
 
        dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){
                //summary: Adds query params discovered by the io deferred construction to the URL.
@@ -791,8 +792,8 @@ dojo.require("dojo._base.query");
                if(ioArgs.query.length){
                        ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query;
                        ioArgs.query = null;
-               }               
-       }
+               }
+       };
 
        /*=====
        dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, {
@@ -893,13 +894,13 @@ dojo.require("dojo._base.query");
                _d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle);
                xhr = null;
                return dfd; // dojo.Deferred
-       }
+       };
 
        dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){
-               //      summary: 
+               //      summary:
                //              Sends an HTTP GET request to the server.
                return _d.xhr("GET", args); // dojo.Deferred
-       }
+       };
 
        dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){
                //      summary:
@@ -908,7 +909,7 @@ dojo.require("dojo._base.query");
                //      postData:
                //              String. Send raw data in the body of the POST request.
                return _d.xhr("POST", args, true); // dojo.Deferred
-       }
+       };
 
        dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){
                //      summary:
@@ -917,13 +918,13 @@ dojo.require("dojo._base.query");
                //      putData:
                //              String. Send raw data in the body of the PUT request.
                return _d.xhr("PUT", args, true); // dojo.Deferred
-       }
+       };
 
        dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){
                //      summary:
                //              Sends an HTTP DELETE request to the server.
                return _d.xhr("DELETE", args); //dojo.Deferred
-       }
+       };
 
        /*
        dojo.wrapForm = function(formNode){
index d1f112f6955e3191a01fc6051c0d22c7ac446286..c78b50fa6940d4dae01837833e4ea4896f9b9f88 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,13 +8,14 @@
 if(!dojo._hasResource["dojo._firebug.firebug"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo._firebug.firebug"] = true;
 dojo.provide("dojo._firebug.firebug");
+
        
 dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){
-       // summary: 
+       // summary:
        //              Log a debug message to indicate that a behavior has been
        //              deprecated.
        // extra: Text to append to the message.
-       // removal: 
+       // removal:
        //              Text to indicate when in the future the behavior will be removed.
        var message = "DEPRECATED: " + behaviour;
        if(extra){ message += " " + extra; }
@@ -24,16 +25,16 @@ dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/
 
 dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
        // summary: Marks code as experimental.
-       // description: 
+       // description:
        //              This can be used to mark a function, file, or module as
        //              experimental.  Experimental code is not ready to be used, and the
        //              APIs are subject to change without notice.  Experimental code may be
        //              completed deleted without going through the normal deprecation
        //              process.
-       // moduleName: 
+       // moduleName:
        //              The name of a module, or the name of a module file or a specific
        //              function
-       // extra: 
+       // extra:
        //              some additional message for the user
        // example:
        //      |       dojo.experimental("dojo.data.Result");
@@ -49,10 +50,10 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
        // description:
        //              Opens a console for logging, debugging, and error messages.
        //              Contains partial functionality to Firebug. See function list below.
-       //      NOTE: 
+       //      NOTE:
        //                      Firebug is a Firefox extension created by Joe Hewitt (see license). You do not need Dojo to run Firebug.
        //                      Firebug Lite is included in Dojo by permission from Joe Hewitt
-       //                      If you are new to Firebug, or used to the Dojo 0.4 dojo.debug, you can learn Firebug 
+       //                      If you are new to Firebug, or used to the Dojo 0.4 dojo.debug, you can learn Firebug
        //                              functionality by reading the function comments below or visiting http://www.getfirebug.com/docs.html
        //      NOTE:
        //              To test Firebug Lite in Firefox:
@@ -80,13 +81,13 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                var calls = ["log", "info", "debug", "warn", "error"];
                for(var i=0;i<calls.length;i++){
                        var m = calls[i];
-                       var n = "_"+calls[i]
+                       var n = "_"+calls[i];
                        console[n] = console[m];
                        console[m] = (function(){
                                var type = n;
                                return function(){
                                        console[type](Array.prototype.slice.call(arguments).join(" "));
-                               }
+                               };
                        })();
                }
                // clear the console on load. This is more than a convenience - too many logs crashes it.
@@ -96,8 +97,8 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
        
        if(
                !dojo.isFF &&                                                           // Firefox has Firebug
-               (!dojo.isChrome || dojo.isChrome < 3) &&
-               (!dojo.isSafari || dojo.isSafari < 4) &&        // Safari 4 has a console
+               !dojo.isChrome &&                                                       // Chrome 3+ has a console
+               !dojo.isSafari &&                                                       // Safari 4 has a console
                !isNewIE &&                                                                     // Has the new IE console
                !window.firebug &&                                                      // Testing for mozilla firebug lite
                (typeof console != "undefined" && !console.firebug) && //A console that is not firebug's
@@ -108,17 +109,17 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
        
        // don't build firebug in iframes
        try{
-               if(window != window.parent){ 
+               if(window != window.parent){
                        // but if we've got a parent logger, connect to it
                        if(window.parent["console"]){
                                window.console = window.parent.console;
                        }
-                       return; 
+                       return;
                }
        }catch(e){/*squelch*/}
 
        // ***************************************************************************
-       // Placing these variables before the functions that use them to avoid a 
+       // Placing these variables before the functions that use them to avoid a
        // shrinksafe bug where variable renaming does not happen correctly otherwise.
        
        // most of the objects in this script are run anonomously
@@ -155,38 +156,38 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
        window.console = {
                _connects: [],
                log: function(){
-                       // summary: 
+                       // summary:
                        //              Sends arguments to console.
                        logFormatted(arguments, "");
                },
                
                debug: function(){
-                       // summary: 
+                       // summary:
                        //              Sends arguments to console. Missing finctionality to show script line of trace.
                        logFormatted(arguments, "debug");
                },
                
                info: function(){
-                       // summary: 
+                       // summary:
                        //              Sends arguments to console, highlighted with (I) icon.
                        logFormatted(arguments, "info");
                },
                
                warn: function(){
-                       // summary: 
+                       // summary:
                        //              Sends warning arguments to console, highlighted with (!) icon and blue style.
                        logFormatted(arguments, "warning");
                },
                
                error: function(){
-                       // summary: 
+                       // summary:
                        //              Sends error arguments (object) to console, highlighted with (X) icon and yellow style
                        //                      NEW: error object now displays in object inspector
                        logFormatted(arguments, "error");
                },
                
                assert: function(truth, message){
-                       // summary: 
+                       // summary:
                        //              Tests for true. Throws exception if false.
                        if(!truth){
                                var args = [];
@@ -207,7 +208,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                },
                
                dirxml: function(node){
-                       // summary: 
+                       // summary:
                        //
                        var html = [];
                        appendNode(node, html);
@@ -215,20 +216,20 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                },
                
                group: function(){
-                       // summary: 
-                       //              collects log messages into a group, starting with this call and ending with 
+                       // summary:
+                       //              collects log messages into a group, starting with this call and ending with
                        //                      groupEnd(). Missing collapse functionality
                        logRow(arguments, "group", pushGroup);
                },
                
                groupEnd: function(){
-                       // summary: 
+                       // summary:
                        //              Closes group. See above
                        logRow(arguments, "", popGroup);
                },
                
                time: function(name){
-                       // summary: 
+                       // summary:
                        //              Starts timers assigned to name given in argument. Timer stops and displays on timeEnd(title);
                        //      example:
                        //      |       console.time("load");
@@ -239,7 +240,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                },
                
                timeEnd: function(name){
-                       // summary: 
+                       // summary:
                        //              See above.
                        if(name in timeMap){
                                var delta = (new Date()).getTime() - timeMap[name];
@@ -249,7 +250,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                },
                
                count: function(name){
-                       // summary: 
+                       // summary:
                        //              Not supported
                        if(!countMap[name]) countMap[name] = 0;
                        countMap[name]++;
@@ -264,20 +265,20 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                                var func = f.toString();
                                var args=[];
                                for (var a = 0; a < f.arguments.length; a++) {
-                                       args.push(f.arguments[a])
+                                       args.push(f.arguments[a]);
                                }
                                if(f.arguments.length){
-                                       console.dir({"function":func, "arguments":args});       
+                                       console.dir({"function":func, "arguments":args});
                                }else{
                                        console.dir({"function":func});
                                }
                                
                                f = f.caller;
-                       }       
+                       }
                },
                
                profile: function(){
-                       // summary: 
+                       // summary:
                        //              Not supported
                        this.warn(["profile() not supported."]);
                },
@@ -285,24 +286,24 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                profileEnd: function(){ },
 
                clear: function(){
-                       // summary: 
+                       // summary:
                        //              Clears message console. Do not call this directly
                        if(consoleBody){
                                while(consoleBody.childNodes.length){
-                                       dojo.destroy(consoleBody.firstChild);   
+                                       dojo.destroy(consoleBody.firstChild);
                                }
                        }
                        dojo.forEach(this._connects,dojo.disconnect);
                },
 
-               open: function(){ 
-                       // summary: 
+               open: function(){
+                       // summary:
                        //              Opens message console. Do not call this directly
-                       toggleConsole(true); 
+                       toggleConsole(true);
                },
                
                close: function(){
-                       // summary: 
+                       // summary:
                        //              Closes message console. Do not call this directly
                        if(frameVisible){
                                toggleConsole();
@@ -343,7 +344,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                        setTimeout(function(){
                                _inspectionClickConnection = dojo.connect(document, "click", function(evt){
                                        document.body.style.cursor = "";
-                                       _inspectionEnabled = !_inspectionEnabled;                                                                                                                                 
+                                       _inspectionEnabled = !_inspectionEnabled;
                                        dojo.disconnect(_inspectionClickConnection);
                                        // console._restoreBorder();
                                });
@@ -357,7 +358,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                        console._restoreBorder();
                },
                openConsole:function(){
-                       // summary: 
+                       // summary:
                        //              Closes object inspector and opens message console. Do not call this directly
                        consoleBody.style.display = "block";
                        consoleDomInspector.style.display = "none";
@@ -383,7 +384,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                                }
                        }
                }
-       }
+       };
 
        // ***************************************************************************
 
@@ -448,7 +449,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                        }
                        
 
-               window.onFirebugResize = function(){ 
+               window.onFirebugResize = function(){
                        
                        //resize the height of the console log body
                        layout(getViewport().h);
@@ -520,12 +521,12 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                }
                consoleFrame.className += " firebug";
                consoleFrame.style.height = containerHeight;
-               consoleFrame.style.display = (frameVisible ? "block" : "none");   
+               consoleFrame.style.display = (frameVisible ? "block" : "none");
                
                var buildLink = function(label, title, method, _class){
                        return '<li class="'+_class+'"><a href="javascript:void(0);" onclick="console.'+ method +'(); return false;" title="'+title+'">'+label+'</a></li>';
                };
-               consoleFrame.innerHTML = 
+               consoleFrame.innerHTML =
                          '<div id="firebugToolbar">'
                        + '  <ul id="fireBugTabs" class="tabs">'
                        
@@ -598,8 +599,8 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
        
        function layout(h){
                var tHeight = 25; //consoleToolbar.offsetHeight; // tab style not ready on load - throws off layout
-               var height = h ? 
-                       h  - (tHeight + commandLine.offsetHeight +25 + (h*.01)) + "px" : 
+               var height = h ?
+                       h  - (tHeight + commandLine.offsetHeight +25 + (h*.01)) + "px" :
                        (consoleFrame.offsetHeight - tHeight - commandLine.offsetHeight) + "px";
                
                consoleBody.style.top = tHeight + "px";
@@ -610,7 +611,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                consoleDomInspector.style.top = tHeight + "px";
                commandLine.style.bottom = 0;
                
-               dojo.addOnWindowUnload(clearFrame)
+               dojo.addOnWindowUnload(clearFrame);
        }
        
        function logRow(message, className, handler){
@@ -755,7 +756,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
        function parseFormat(format){
                var parts = [];
 
-               var reg = /((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/;    
+               var reg = /((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/;
                var appenderMap = {s: appendText, d: appendInteger, i: appendInteger, f: appendFloat};
 
                for(var m = reg.exec(format); m; m = reg.exec(format)){
@@ -900,7 +901,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                                        appendNode(child, html);
                                }
                                        
-                               html.push('</div><div class="objectBox-element">&lt;/<span class="nodeTag">', 
+                               html.push('</div><div class="objectBox-element">&lt;/<span class="nodeTag">',
                                        node.nodeName.toLowerCase(), '&gt;</span></div>');
                        }else{
                                html.push('/&gt;</div>');
@@ -933,7 +934,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                if(document.all){
                        event.cancelBubble = true;
                }else{
-                       event.stopPropagation();                
+                       event.stopPropagation();
                }
        }
 
@@ -942,7 +943,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                var fileName = lastSlash == -1 ? href : href.substr(lastSlash+1);
 
                var html = [
-                       '<span class="errorMessage">', msg, '</span>', 
+                       '<span class="errorMessage">', msg, '</span>',
                        '<div class="objectBox-sourceLink">', fileName, ' (line ', lineNo, ')</div>'
                ];
 
@@ -965,7 +966,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
                                toggleConsole();
                        }else if(
                                (ekc == keys.NUMPAD_ENTER || ekc == 76) &&
-                               event.shiftKey && 
+                               event.shiftKey &&
                                (event.metaKey || event.ctrlKey)
                        ){
                                focusCommandLine();
@@ -1072,7 +1073,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
        function objectLength(o){
                var cnt = 0;
                for(var nm in o){
-                       cnt++   
+                       cnt++;
                }
                return cnt;
        }
@@ -1222,5 +1223,4 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
 
 })();
 
-
 }
index 5e2998c9726ee272375ae6c86c86d67ae992a7b8..0bb4817b462383dbc4d37b6dcc84bc9776e8179a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.back"]){ //_hasResource checks added by build. Do no
 dojo._hasResource["dojo.back"] = true;
 dojo.provide("dojo.back");
 
+dojo.getObject("back", true, dojo);
+
 /*=====
 dojo.back = {
        // summary: Browser history management resources
@@ -16,29 +18,23 @@ dojo.back = {
 =====*/
 
 
-(function(){ 
-       var back = dojo.back;
+(function(){
+       var back = dojo.back,
 
        // everyone deals with encoding the hash slightly differently
 
-       function getHash(){ 
+       getHash= back.getHash= function(){
                var h = window.location.hash;
                if(h.charAt(0) == "#"){ h = h.substring(1); }
-               return dojo.isMozilla ? h : decodeURIComponent(h); 
-       }
+               return dojo.isMozilla ? h : decodeURIComponent(h);
+       },
        
-       function setHash(h){
+       setHash= back.setHash= function(h){
                if(!h){ h = ""; }
                window.location.hash = encodeURIComponent(h);
                historyCounter = history.length;
-       }
-       
-       // if we're in the test for these methods, expose them on dojo.back. ok'd with alex.
-       if(dojo.exists("tests.back-hash")){
-               back.getHash = getHash;
-               back.setHash = setHash;         
-       }
-       
+       };
+
        var initialHref = (typeof(window) !== "undefined") ? window.location.href : "";
        var initialHash = (typeof(window) !== "undefined") ? getHash() : "";
        var initialState = null;
@@ -150,18 +146,11 @@ dojo.back = {
                                        return;
                                }
                        }
-                       
-                       if(dojo.isSafari && dojo.isSafari < 3){
-                               var hisLen = history.length;
-                               if(hisLen > historyCounter) handleForwardButton();
-                               else if(hisLen < historyCounter) handleBackButton();
-                         historyCounter = hisLen;
-                       }
                }
        };
        
        back.init = function(){
-               //summary: Initializes the undo stack. This must be called from a <script> 
+               //summary: Initializes the undo stack. This must be called from a <script>
                //         block that lives inside the <body> tag to prevent bugs on IE.
                // description:
                //              Only call this method before the page's DOM is finished loading. Otherwise
@@ -179,7 +168,7 @@ dojo.back = {
        };
 
        back.setInitialState = function(/*Object*/args){
-               //summary: 
+               //summary:
                //              Sets the state object and back callback for the very first page
                //              that is loaded.
                //description:
@@ -213,14 +202,14 @@ dojo.back = {
        =====*/
 
        back.addToHistory = function(/*dojo.__backArgs*/ args){
-               //      summary: 
-               //              adds a state object (args) to the history list. 
+               //      summary:
+               //              adds a state object (args) to the history list.
                //      description:
                //              To support getting back button notifications, the object
                //              argument should implement a function called either "back",
                //              "backButton", or "handle". The string "back" will be passed as
                //              the first and only argument to this callback.
-               //      
+               //
                //              To support getting forward button notifications, the object
                //              argument should implement a function called either "forward",
                //              "forwardButton", or "handle". The string "forward" will be
@@ -247,7 +236,7 @@ dojo.back = {
                //              |       });
 
                //      BROWSER NOTES:
-               //  Safari 1.2: 
+               //  Safari 1.2:
                //      back button "works" fine, however it's not possible to actually
                //      DETECT that you've moved backwards by inspecting window.location.
                //      Unless there is some other means of locating.
@@ -261,10 +250,10 @@ dojo.back = {
                //      previous hash value, but to the last full page load. This suggests
                //      that the iframe is the correct way to capture the back button in
                //      these cases.
-               //      Don't test this page using local disk for MSIE. MSIE will not create 
-               //      a history list for iframe_history.html if served from a file: URL. 
-               //      The XML served back from the XHR tests will also not be properly 
-               //      created if served from local disk. Serve the test pages from a web 
+               //      Don't test this page using local disk for MSIE. MSIE will not create
+               //      a history list for iframe_history.html if served from a file: URL.
+               //      The XML served back from the XHR tests will also not be properly
+               //      created if served from local disk. Serve the test pages from a web
                //      server to test in that browser.
                //      IE 6.0:
                //      same behavior as IE 5.5 SP2
@@ -276,7 +265,7 @@ dojo.back = {
                //If addToHistory is called, then that means we prune the
                //forward stack -- the user went back, then wanted to
                //start a new forward path.
-               forwardStack = []; 
+               forwardStack = [];
 
                var hash = null;
                var url = null;
@@ -310,9 +299,9 @@ dojo.back = {
                        }
 
                        changingUrl = true;
-                       setTimeout(function() { 
-                                       setHash(hash); 
-                                       changingUrl = false;                                    
+                       setTimeout(function() {
+                                       setHash(hash);
+                                       changingUrl = false;
                                }, 1);
                        bookmarkAnchor.href = hash;
                        
@@ -380,10 +369,10 @@ dojo.back = {
        };
 
        back._iframeLoaded = function(evt, ifrLoc){
-               //summary: 
+               //summary:
                //              private method. Do not call this directly.
                var query = getUrlQuery(ifrLoc.href);
-               if(query == null){ 
+               if(query == null){
                        // alert("iframeLoaded");
                        // we hit the end of the history, so we should go back
                        if(historyStack.length == 1){
index 15f1f23a3ba7a3bcded0a009bd30a9214d9e7995..8b058892f311f2671c124f5d8166589bd16f3c40 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,23 +9,24 @@ if(!dojo._hasResource["dojo.behavior"]){ //_hasResource checks added by build. D
 dojo._hasResource["dojo.behavior"] = true;
 dojo.provide("dojo.behavior");
 
+
 dojo.behavior = new function(){
-       // summary: 
+       // summary:
        //              Utility for unobtrusive/progressive event binding, DOM traversal,
        //              and manipulation.
        //
        // description:
-       //              
-       //              A very simple, lightweight mechanism for applying code to 
-       //              existing documents, based around `dojo.query` (CSS3 selectors) for node selection, 
+       //
+       //              A very simple, lightweight mechanism for applying code to
+       //              existing documents, based around `dojo.query` (CSS3 selectors) for node selection,
        //              and a simple two-command API: `dojo.behavior.add()` and `dojo.behavior.apply()`;
-       //      
-       //              Behaviors apply to a given page, and are registered following the syntax 
+       //
+       //              Behaviors apply to a given page, and are registered following the syntax
        //              options described by `dojo.behavior.add` to match nodes to actions, or "behaviors".
-       //              
+       //
        //              Added behaviors are applied to the current DOM when .apply() is called,
-       //              matching only new nodes found since .apply() was last called. 
-       //              
+       //              matching only new nodes found since .apply() was last called.
+       //
        function arrIn(obj, name){
                if(!obj[name]){ obj[name] = []; }
                return obj[name];
@@ -51,7 +52,7 @@ dojo.behavior = new function(){
        this.add = function(/* Object */behaviorObj){
                //      summary:
                //              Add the specified behavior to the list of behaviors, ignoring existing
-               //              matches. 
+               //              matches.
                //
                //      description:
                //              Add the specified behavior to the list of behaviors which will
@@ -59,26 +60,26 @@ dojo.behavior = new function(){
                //              an already existing behavior do not replace the previous rules,
                //              but are instead additive. New nodes which match the rule will
                //              have all add()-ed behaviors applied to them when matched.
-               //              
+               //
                //              The "found" method is a generalized handler that's called as soon
                //              as the node matches the selector. Rules for values that follow also
                //              apply to the "found" key.
-               //              
-               //              The "on*" handlers are attached with `dojo.connect()`, using the 
+               //
+               //              The "on*" handlers are attached with `dojo.connect()`, using the
                //              matching node
-               //              
+               //
                //              If the value corresponding to the ID key is a function and not a
                //              list, it's treated as though it was the value of "found".
                //
-               //              dojo.behavior.add() can be called any number of times before 
+               //              dojo.behavior.add() can be called any number of times before
                //              the DOM is ready. `dojo.behavior.apply()` is called automatically
                //              by `dojo.addOnLoad`, though can be called to re-apply previously added
                //              behaviors anytime the DOM changes.
                //
                //              There are a variety of formats permitted in the behaviorObject
-               //      
+               //
                //      example:
-               //              Simple list of properties. "found" is special. "Found" is assumed if 
+               //              Simple list of properties. "found" is special. "Found" is assumed if
                //              no property object for a given selector, and property is a function.
                //
                //      |       dojo.behavior.add({
@@ -95,7 +96,7 @@ dojo.behavior = new function(){
                //      |               }
                //      |       });
                //
-               //      example: 
+               //      example:
                //               If property is a string, a dojo.publish will be issued on the channel:
                //
                //      |       dojo.behavior.add({
@@ -106,15 +107,15 @@ dojo.behavior = new function(){
                //      |               }
                //      |       });
                //      |       dojo.subscribe("/got/newAnchor", function(node){
-               //      |               // handle node finding when dojo.behavior.apply() is called, 
+               //      |               // handle node finding when dojo.behavior.apply() is called,
                //      |               // provided a newly matched node is found.
                //      |       });
                //
                //      example:
-               //              Scoping can be accomplished by passing an object as a property to 
+               //              Scoping can be accomplished by passing an object as a property to
                //              a connection handle (on*):
-               //      
-               //      |       dojo.behavior.add({ 
+               //
+               //      |       dojo.behavior.add({
                //      |                       "#id": {
                //      |                               // like calling dojo.hitch(foo,"bar"). execute foo.bar() in scope of foo
                //      |                               "onmouseenter": { targetObj: foo, targetFunc: "bar" },
@@ -122,7 +123,7 @@ dojo.behavior = new function(){
                //      |                       }
                //      |       });
                //
-               //      example: 
+               //      example:
                //              Bahaviors match on CSS3 Selectors, powered by dojo.query. Example selectors:
                //
                //      |       dojo.behavior.add({
@@ -130,31 +131,31 @@ dojo.behavior = new function(){
                //      |               "#id4 > *": function(element){
                //      |                       // ...
                //      |               },
-               //      |               
+               //      |
                //      |               // match the first child node that's an element
                //      |               "#id4 > :first-child": { ... },
-               //      |               
+               //      |
                //      |               // match the last child node that's an element
                //      |               "#id4 > :last-child":  { ... },
-               //      |               
+               //      |
                //      |               // all elements of type tagname
                //      |               "tagname": {
                //      |                       // ...
                //      |               },
-               //      |               
+               //      |
                //      |               "tagname1 tagname2 tagname3": {
                //      |                       // ...
                //      |               },
-               //      |               
+               //      |
                //      |               ".classname": {
                //      |                       // ...
                //      |               },
-               //      |               
+               //      |
                //      |               "tagname.classname": {
                //      |                       // ...
                //      |               }
                //      |       });
-               //   
+               //
 
                var tmpObj = {};
                forIn(behaviorObj, this, function(behavior, name){
@@ -171,7 +172,7 @@ dojo.behavior = new function(){
                                arrIn(cversion, ruleName).push(rule);
                        });
                });
-       }
+       };
 
        var _applyToNode = function(node, action, ruleSetName){
                if(dojo.isString(action)){
@@ -189,33 +190,33 @@ dojo.behavior = new function(){
                                dojo.connect(node, ruleSetName, action);
                        }
                }
-       }
+       };
 
        this.apply = function(){
                // summary:
                //              Applies all currently registered behaviors to the document.
-               // 
+               //
                // description:
                //              Applies all currently registered behaviors to the document,
                //              taking care to ensure that only incremental updates are made
-               //              since the last time add() or apply() were called. 
-               //      
+               //              since the last time add() or apply() were called.
+               //
                //              If new matching nodes have been added, all rules in a behavior will be
                //              applied to that node. For previously matched nodes, only
                //              behaviors which have been added since the last call to apply()
                //              will be added to the nodes.
                //
-               //              apply() is called once automatically by `dojo.addOnLoad`, so 
+               //              apply() is called once automatically by `dojo.addOnLoad`, so
                //              registering behaviors with `dojo.behavior.add` before the DOM is
                //              ready is acceptable, provided the dojo.behavior module is ready.
-               //              
-               //              Calling appy() manually after manipulating the DOM is required 
+               //
+               //              Calling appy() manually after manipulating the DOM is required
                //              to rescan the DOM and apply newly .add()ed behaviors, or to match
-               //              nodes that match existing behaviors when those nodes are added to 
+               //              nodes that match existing behaviors when those nodes are added to
                //              the DOM.
-               //              
+               //
                forIn(this._behaviors, function(tBehavior, id){
-                       dojo.query(id).forEach( 
+                       dojo.query(id).forEach(
                                function(elem){
                                        var runFrom = 0;
                                        var bid = "_dj_behavior_"+tBehavior.id;
@@ -242,8 +243,8 @@ dojo.behavior = new function(){
                                }
                        );
                });
-       }
-}
+       };
+};
 
 dojo.addOnLoad(dojo.behavior, "apply");
 
index bc58b776f6e2dae98628f77291cf5d98046a09f9..6f15de0c4b3e4be3e6d8cb2a2163892a373f160b 100644 (file)
@@ -12,7 +12,6 @@ dojo.js:
 ./../../release/dojo/_base/Deferred.js
 ./../../release/dojo/_base/json.js
 ./../../release/dojo/_base/Color.js
-./../../release/dojo/_base.js
 ./../../release/dojo/_base/window.js
 ./../../release/dojo/_base/event.js
 ./../../release/dojo/_base/html.js
@@ -21,6 +20,7 @@ dojo.js:
 ./../../release/dojo/_base/xhr.js
 ./../../release/dojo/_base/fx.js
 ./../../release/dojo/_base/browser.js
+./../../release/dojo/_base.js
 ./jslib/dojoGuardEnd.jsfrag
 
 tt-rss-layer.js:
@@ -39,6 +39,8 @@ tt-rss-layer.js:
 ./../../release/dijit/_base/typematic.js
 ./../../release/dijit/_base/wai.js
 ./../../release/dijit/_base.js
+./../../release/dojo/Stateful.js
+./../../release/dijit/_WidgetBase.js
 ./../../release/dijit/_Widget.js
 ./../../release/dojo/string.js
 ./../../release/dojo/cache.js
@@ -65,6 +67,7 @@ tt-rss-layer.js:
 ./../../release/dijit/form/_FormMixin.js
 ./../../release/dijit/_DialogMixin.js
 ./../../release/dijit/DialogUnderlay.js
+./../../release/dijit/layout/_ContentPaneResizeMixin.js
 ./../../release/dojo/html.js
 ./../../release/dijit/layout/ContentPane.js
 ./../../release/dijit/TooltipDialog.js
@@ -112,10 +115,10 @@ tt-rss-layer.js:
 ./../../release/dojo/DeferredList.js
 ./../../release/dijit/tree/TreeStoreModel.js
 ./../../release/dijit/tree/ForestStoreModel.js
-./../../release/dijit/Tree.js
 ./../../release/dojo/dnd/Container.js
 ./../../release/dijit/tree/_dndContainer.js
 ./../../release/dijit/tree/_dndSelector.js
+./../../release/dijit/Tree.js
 ./../../release/dojo/dnd/Avatar.js
 ./../../release/dojo/dnd/Manager.js
 ./../../release/dijit/tree/dndSource.js
index da237c7672d343fd316242f413847ea4ed3530dc..887a7f2e58a6cf4c9b43040d50effd7682633272 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,14 +9,14 @@ if(!dojo._hasResource["dojo.cache"]){ //_hasResource checks added by build. Do n
 dojo._hasResource["dojo.cache"] = true;
 dojo.provide("dojo.cache");
 
+
 /*=====
-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:
@@ -55,7 +55,7 @@ dojo.cache = {
                //              |       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 
+               //               (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
@@ -105,7 +105,7 @@ dojo.cache = {
        };
 
        dojo.cache._sanitize = function(/*String*/val){
-               // summary: 
+               // 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.
@@ -122,6 +122,5 @@ dojo.cache = {
                }
                return val; //String
        };
-})();
 
 }
index 0380055c4f17265feb0cd755d5d5fb9f3ed01b97..498e437abe31bbafd41bdaa4af52ef21f108181c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.cldr.monetary"]){ //_hasResource checks added by bui
 dojo._hasResource["dojo.cldr.monetary"] = true;
 dojo.provide("dojo.cldr.monetary");
 
+dojo.getObject("cldr.monetary", true, dojo);
+
 dojo.cldr.monetary.getData = function(/*String*/code){
 // summary: A mapping of currency code to currency-specific formatting information. Returns a unique object with properties: places, round.
 // code: an [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code
diff --git a/lib/dojo/cldr/nls/ar/buddhist.js b/lib/dojo/cldr/nls/ar/buddhist.js
new file mode 100644 (file)
index 0000000..68708e9
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M‏/y G","dateFormatItem-yQ":"yyyy Q","dayPeriods-format-wide-pm":"م","eraNames":["التقويم البوذي"],"dateFormatItem-MMMEd":"E d MMM","dateFormatItem-MMdd":"dd‏/MM","dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"dayPeriods-format-wide-am":"ص","dateFormatItem-y":"y G","timeFormat-full":"zzzz h:mm:ss a","dateFormatItem-Ed":"E، d","dateFormatItem-yMMM":"MMM y G","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["التقويم البوذي"],"dateFormatItem-yyyyMM":"MM‏/y G","dateFormatItem-yyyyMMMM":"MMMM، y G","dateFormat-long":"d MMMM، y G","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"dd‏/MM‏/y G","dateFormatItem-yMd":"d/‏M/‏y G","dateFormatItem-yMMMM":"MMMM y G","dateFormatItem-ms":"mm:ss","quarters-standAlone-narrow":["١","٢","٣","٤"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","timeFormat-long":"z h:mm:ss a","timeFormat-short":"h:mm a","dateFormatItem-MMMMd":"d MMMM","days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormatItem-M":"L","dateFormatItem-yMMMd":"d MMMM y G","dateFormat-short":"d‏/M‏/y G","dateFormatItem-yMMMEd":"EEE، d MMMM y G","dateFormat-full":"EEEE، d MMMM، y G","dateFormatItem-Md":"d/‏M","dateFormatItem-yMEd":"EEE، d/‏M/‏y G","months-format-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-d":"d","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"eraNarrow":["التقويم البوذي"],"days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-yQQQ":"y QQQ","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Era":"{0} {1}","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index c25f80231cbf0b42719e0dcd83866c8577c1af87..a3d0e9ddd03a164a27950fed66b047ce43a0d206 100644 (file)
@@ -1 +1 @@
-({"dateFormatItem-yM":"M‏/yyyy","field-dayperiod":"ص/م","dateFormatItem-yQ":"yyyy Q","dayPeriods-format-wide-pm":"م","field-minute":"الدقائق","eraNames":["قبل الميلاد","ميلادي"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"أمس","field-weekday":"اليوم","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-MMdd":"dd‏/MM","days-standAlone-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"field-era":"العصر","field-hour":"الساعات","dayPeriods-format-wide-am":"ص","quarters-standAlone-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-y":"y","timeFormat-full":"zzzz h:mm:ss a","months-standAlone-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"اليوم","field-day-relative+1":"غدًا","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["ق.م","م"],"field-day-relative+2":"بعد الغد","dateFormatItem-yyyyMM":"MM‏/yyyy","dateFormatItem-yyyyMMMM":"MMMM، y","dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","field-zone":"التوقيت","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"dd‏/MM‏/yyyy","quarters-standAlone-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"السنة","quarters-standAlone-narrow":["١","٢","٣","٤"],"field-week":"الأسبوع","months-standAlone-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"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":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormatItem-M":"L","days-format-narrow":["ح","ن","ث","ر","خ","ج","س"],"field-second":"الثواني","field-day":"يوم","months-format-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"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","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
+({"dateFormatItem-yM":"M‏/yyyy","field-dayperiod":"ص/م","dateFormatItem-yQ":"yyyy Q","dayPeriods-format-wide-pm":"م","field-minute":"الدقائق","eraNames":["قبل الميلاد","ميلادي"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"أمس","field-weekday":"اليوم","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-MMdd":"dd‏/MM","days-standAlone-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"field-era":"العصر","field-hour":"الساعات","dayPeriods-format-wide-am":"ص","quarters-standAlone-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-y":"y","timeFormat-full":"zzzz h:mm:ss a","months-standAlone-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-Ed":"E، d","dateFormatItem-yMMM":"MMM y","field-day-relative+0":"اليوم","field-day-relative+1":"غدًا","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["ق.م","م"],"field-day-relative+2":"بعد الغد","dateFormatItem-yyyyMM":"MM‏/yyyy","dateFormatItem-yyyyMMMM":"MMMM، y","dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","field-zone":"التوقيت","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"dd‏/MM‏/yyyy","quarters-standAlone-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"السنة","quarters-standAlone-narrow":["١","٢","٣","٤"],"field-week":"الأسبوع","months-standAlone-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"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":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormatItem-M":"L","days-format-narrow":["ح","ن","ث","ر","خ","ج","س"],"field-second":"الثواني","field-day":"يوم","months-format-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"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","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index 543ccb3e19ff865fb3c687ac020c02bc80f760b9..e9a48164a9654bcfec62884027e7e719825638e4 100644 (file)
@@ -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
+({"group":"٬","percentSign":"٪","exponential":"اس","list":"؛","infinity":"∞","minusSign":"-","decimal":"٫","nan":"ليس رقم","perMille":"؉","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nativeZeroDigit":"0","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index da4300c279881d962a994803eba62175313d50c4..4f0befd38bcb1fbf0bac49f81006f089a691f42a 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 3b9752ce981cdf573bc1d157e37c58d1f282d554..d7abc9b5e79dc405ce2cc705ad5aa992b337b4cb 100644 (file)
@@ -1 +1 @@
-({"dayPeriods-format-wide-pm":"odp.","eraNames":["př.Kr.","po Kr."],"field-day-relative+-1":"Včera","field-day-relative+-2":"Předevčírem","days-standAlone-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"months-standAlone-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"dayPeriods-format-wide-am":"dop.","quarters-standAlone-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["1.","2.","3.","4.","5.","6.","7.","8.","9.","10.","11.","12."],"field-day-relative+0":"Dnes","field-day-relative+1":"Zítra","days-standAlone-narrow":["N","P","Ú","S","Č","P","S"],"eraAbbr":["př.Kr.","po Kr."],"field-day-relative+2":"Pozítří","dateFormat-long":"d. MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"months-standAlone-wide":["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],"timeFormat-long":"H:mm:ss z","months-format-abbr":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"timeFormat-short":"H:mm","dateFormatItem-H":"H","quarters-format-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"days-format-abbr":["ne","po","út","st","čt","pá","so"],"days-format-narrow":["N","P","Ú","S","Č","P","S"],"months-format-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"days-standAlone-abbr":["ne","po","út","st","čt","pá","so"],"dateFormat-short":"d.M.yy","dateFormat-full":"EEEE, d. MMMM y","months-format-wide":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"quarters-format-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"days-format-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"eraNarrow":["př.Kr.","po Kr."],"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","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","dateFormatItem-yM":"y-M","field-year":"Year","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","field-hour":"Hour","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","field-minute":"Minute","field-dayperiod":"Dayperiod","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","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})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","field-month":"Month","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","field-second":"Second","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
+({"dateFormatItem-yM":"M.y","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"odp.","eraNames":["př.Kr.","po Kr."],"dateFormatItem-MMMEd":"E, d. MMM","field-day-relative+-1":"Včera","dateFormatItem-yQQQ":"QQQ y","field-day-relative+-2":"Předevčírem","days-standAlone-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"months-standAlone-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"dayPeriods-format-wide-am":"dop.","quarters-standAlone-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"timeFormat-full":"H:mm:ss zzzz","dateFormatItem-yyyy":"y","months-standAlone-abbr":["1.","2.","3.","4.","5.","6.","7.","8.","9.","10.","11.","12."],"dateFormatItem-yMMM":"LLL y","field-day-relative+0":"Dnes","field-day-relative+1":"Zítra","days-standAlone-narrow":["N","P","Ú","S","Č","P","S"],"eraAbbr":["př.Kr.","po Kr."],"field-day-relative+2":"Pozítří","dateFormatItem-yyyyMMMM":"LLLL y","dateFormat-long":"d. MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE, d.","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-yMd":"d.M.y","quarters-standAlone-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"months-standAlone-wide":["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],"dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"timeFormat-short":"H:mm","dateFormatItem-H":"H","quarters-format-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"days-format-abbr":["ne","po","út","st","čt","pá","so"],"days-format-narrow":["N","P","Ú","S","Č","P","S"],"dateFormatItem-MEd":"E, d.M","months-format-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"days-standAlone-abbr":["ne","po","út","st","čt","pá","so"],"dateFormat-short":"d.M.yy","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.y","months-format-wide":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"dateFormatItem-d":"d.","quarters-format-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"days-format-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"eraNarrow":["př.Kr.","po Kr."],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Day of the Week","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","field-year":"Year","dateTimeFormats-appendItem-Era":"{0} {1}","field-hour":"Hour","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","field-minute":"Minute","field-dayperiod":"Dayperiod","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","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})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","field-month":"Month","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","field-second":"Second","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index f9a71abd63cf8f6ced8abc6b6de85a15508cd842..9dcfdd4d97d17907af5e24ec21832a631b09033b 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/da/buddhist.js b/lib/dojo/cldr/nls/da/buddhist.js
new file mode 100644 (file)
index 0000000..d6d4ca3
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M/y G","dateFormatItem-yQ":"Q y G","dayPeriods-format-wide-pm":"e.m.","dateFormatItem-MMMEd":"E d. MMM","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yQQQ":"QQQ y G","dateFormatItem-MMdd":"dd/MM","dateFormatItem-MMM":"MMM","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dayPeriods-format-wide-am":"f.m.","dateFormatItem-y":"y G","timeFormat-full":"HH.mm.ss zzzz","dateFormatItem-yyyy":"y G","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"dateFormatItem-Ed":"E d.","dateFormatItem-yMMM":"MMM y G","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-yyyyMM":"MM/y G","dateFormat-long":"d. MMMM y G","timeFormat-medium":"HH.mm.ss","dateFormatItem-Hm":"HH.mm","dateFormatItem-yyMM":"MM/y G","dateFormat-medium":"d. MMM y G","dateFormatItem-Hms":"HH.mm.ss","dateFormatItem-yyMMM":"MMM y G","dateFormatItem-yMd":"d/M/y G","dateFormatItem-ms":"mm.ss","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q. 'kvartal' y G","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":"HH","quarters-format-abbr":["K1","K2","K3","K4"],"days-format-abbr":["søn","man","tir","ons","tor","fre","lør"],"dateFormatItem-M":"M","dateFormatItem-MEd":"E. d/M","dateFormatItem-hm":"h.mm a","dateFormat-short":"d/M/yyyy","dateFormatItem-yMMMEd":"EEE. d. MMM y G","dateFormat-full":"EEEE d. MMMM y G","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE. d/M/y G","months-format-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"dateFormatItem-yyyyMMM":"MMM y G","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"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["BE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index 08e43118409fe12a06e71e877725b6621b15aa3e..1dffad5529f23a182e0e6b318bc253894b572602 100644 (file)
@@ -1 +1 @@
-({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"ugedag","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE. d/M/y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d. MMM y","months-format-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"dayPeriods-format-wide-pm":"e.m.","dateFormat-full":"EEEE 'den' d. MMMM y","dateFormatItem-Md":"d/M","field-era":"æra","dateFormatItem-yM":"M/y","months-standAlone-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"timeFormat-short":"HH.mm","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"timeFormat-long":"HH.mm.ss z","field-year":"år","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","field-hour":"time","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan.","feb.","mar.","apr.","maj","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yyQ":"Q. 'kvartal' yy","timeFormat-full":"HH.mm.ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgen","field-day-relative+2":"i overmorgen","dateFormatItem-H":"HH","field-day-relative+3":"i overovermorgen","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. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-M":"M","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH.mm.ss","dateFormatItem-Hm":"HH.mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minut","field-dayperiod":"dagtid","days-standAlone-abbr":["søn","man","tir","ons","tor","fre","lør"],"dateFormatItem-d":"d.","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"i går","field-day-relative+-2":"i forgårs","field-day-relative+-3":"i forforgårs","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E. d/M","field-day":"dag","days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"field-zone":"zone","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","dateFormatItem-hm":"h.mm a","days-format-abbr":["søn","man","tir","ons","tor","fre","lør"],"eraNames":["f.Kr.","e.Kr."],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"måned","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"MMM","dayPeriods-format-wide-am":"f.m.","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormat-short":"dd/MM/yy","field-second":"sekund","dateFormatItem-yMMMEd":"EEE. d. MMM y","field-week":"uge","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-Hms":"HH.mm.ss","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"ugedag","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE. d/M/y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d. MMM y","months-format-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"dayPeriods-format-wide-pm":"e.m.","dateFormat-full":"EEEE 'den' d. MMMM y","dateFormatItem-Md":"d/M","field-era":"æra","dateFormatItem-yM":"M/y","months-standAlone-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"timeFormat-short":"HH.mm","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"timeFormat-long":"HH.mm.ss z","field-year":"år","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","field-hour":"time","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan.","feb.","mar.","apr.","maj","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yyQ":"Q. 'kvartal' yy","timeFormat-full":"HH.mm.ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgen","field-day-relative+2":"i overmorgen","dateFormatItem-H":"HH","field-day-relative+3":"i overovermorgen","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. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-M":"M","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH.mm.ss","dateFormatItem-Hm":"HH.mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minut","field-dayperiod":"dagtid","days-standAlone-abbr":["søn","man","tir","ons","tor","fre","lør"],"dateFormatItem-d":"d.","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"i går","field-day-relative+-2":"i forgårs","field-day-relative+-3":"i forforgårs","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E. d/M","field-day":"dag","days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"field-zone":"zone","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","dateFormatItem-hm":"h.mm a","days-format-abbr":["søn","man","tir","ons","tor","fre","lør"],"eraNames":["f.Kr.","e.Kr."],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"måned","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"MMM","dayPeriods-format-wide-am":"f.m.","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormat-short":"dd/MM/yy","field-second":"sekund","dateFormatItem-yMMMEd":"EEE. d. MMM y","dateFormatItem-Ed":"E d.","field-week":"uge","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-Hms":"HH.mm.ss","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/da/islamic.js b/lib/dojo/cldr/nls/da/islamic.js
new file mode 100644 (file)
index 0000000..a6bda97
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M/y","dateFormatItem-yyyyMMMEd":"EEE. d. MMM y G","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"e.m.","dateFormatItem-MMMEd":"E d. MMM","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMdd":"dd/MM","dateFormatItem-MMM":"MMM","dayPeriods-format-wide-am":"f.m.","timeFormat-full":"HH.mm.ss zzzz","dateFormatItem-yyyy":"y G","dateFormatItem-Ed":"E d.","dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormat-long":"d. MMMM y G","timeFormat-medium":"HH.mm.ss","dateFormatItem-Hm":"HH.mm","dateFormatItem-yyMM":"MM/y G","dateFormat-medium":"d. MMM y G","dateFormatItem-Hms":"HH.mm.ss","dateFormatItem-yyMMM":"MMM y G","dateFormatItem-ms":"mm.ss","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormatItem-yyyyMEd":"EEE. d/M/y G","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q. 'kvartal' y G","timeFormat-long":"HH.mm.ss z","timeFormat-short":"HH.mm","dateFormatItem-H":"HH","quarters-format-abbr":["K1","K2","K3","K4"],"days-format-abbr":["søn","man","tir","ons","tor","fre","lør"],"dateFormatItem-M":"M","dateFormatItem-yyyyQQQ":"QQQ y G","dateFormatItem-MEd":"E. d/M","dateFormatItem-hm":"h.mm a","dateFormat-short":"d/M/y G","dateFormatItem-yyyyM":"M/y G","dateFormatItem-yMMMEd":"EEE. d. MMM y","dateFormat-full":"EEEE d. MMMM y G","dateFormatItem-Md":"d/M","dateFormatItem-yyyyQ":"Q y G","dateFormatItem-yMEd":"EEE. d/M/y","dateFormatItem-yyyyMMM":"MMM y G","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"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["AH"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","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","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","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-Era":"{0} {1}","months-format-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","months-standAlone-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["AH"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","eraNames":["AH"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index 2f5fc8e30cfc09a86f3499f73cd08b6c5c6ee2ee..a0aa79acc2acd5f5f7dc8397d9cbd13b0dae5e7c 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/de/buddhist.js b/lib/dojo/cldr/nls/de/buddhist.js
new file mode 100644 (file)
index 0000000..c1dc677
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M.y G","dateFormatItem-yyMMdd":"dd.MM.y G","dateFormatItem-yQ":"Q y G","dayPeriods-format-wide-pm":"nachm.","dateFormatItem-MMMEd":"E, d. MMM","dateFormatItem-yQQQ":"QQQ y G","dateFormatItem-MMdd":"dd.MM.","dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dayPeriods-format-wide-am":"vorm.","dateFormatItem-y":"y G","dateFormatItem-yyyy":"y G","months-standAlone-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"dateFormatItem-Ed":"E d.","dateFormatItem-yMMM":"MMM y G","days-standAlone-narrow":["S","M","D","M","D","F","S"],"dateFormatItem-yyyyMMMM":"MMMM y G","dateFormat-long":"d. MMMM y G","dateFormatItem-Hm":"HH:mm","dateFormatItem-MMd":"d.MM.","dateFormatItem-yyMM":"MM.y G","dateFormat-medium":"d. MMM y G","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyMMM":"MMM y G","dateFormatItem-yyQQQQ":"QQQQ y G","dateFormatItem-ms":"mm:ss","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q y G","months-format-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"dateFormatItem-H":"HH 'Uhr'","days-format-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dateFormatItem-MMMMdd":"dd. MMMM","dateFormatItem-M":"L","dateFormatItem-MEd":"E, d.M.","dateFormat-short":"d.M.yyyy","dateFormatItem-yMMMEd":"EEE, d. MMM y G","dateFormat-full":"EEEE d. MMMM y G","dateFormatItem-Md":"d.M.","dateFormatItem-yMEd":"EEE, d.M.y G","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"dateFormatItem-d":"d","quarters-format-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["BE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","dateTimeFormats-appendItem-Era":"{0} {1}","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index 0a2720a81ecaa158b298a89f2b2c5c3d8684b4d6..4a1395dd53b3ae7ed1a02e2ce39ef007a2082062 100644 (file)
@@ -1 +1 @@
-({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Wochentag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d.M.y","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["v. Chr.","n. Chr."],"dayPeriods-format-wide-earlyMorning":"morgens","dayPeriods-format-wide-morning":"vormittags","dateFormat-long":"d. MMMM y","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"dayPeriods-format-wide-evening":"abends","dateFormatItem-EEEd":"d. EEE","dayPeriods-format-wide-pm":"nachm.","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yyMMdd":"dd.MM.yy","dayPeriods-format-wide-noon":"Mittag","field-era":"Epoche","dateFormatItem-yM":"M.y","months-standAlone-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"timeFormat-long":"HH:mm:ss z","field-year":"Jahr","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Stunde","dateFormatItem-MMdd":"dd.MM.","months-format-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"heute","field-day-relative+1":"morgen","field-day-relative+2":"übermorgen","dateFormatItem-H":"HH","field-day-relative+3":"überübermorgen","months-standAlone-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"dateFormatItem-M":"L","days-standAlone-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","eraAbbr":["v. Chr.","n. Chr."],"field-minute":"Minute","field-dayperiod":"Tageshälfte","days-standAlone-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dayPeriods-format-wide-night":"nachts","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"gestern","field-day-relative+-2":"vorgestern","field-day-relative+-3":"vorvorgestern","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E, d.M.","field-day":"Tag","days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"field-zone":"Zone","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":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"eraNames":["v. Chr.","n. Chr."],"days-format-narrow":["S","M","D","M","D","F","S"],"field-month":"Monat","days-standAlone-narrow":["S","M","D","M","D","F","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"vorm.","dateFormatItem-MMMMdd":"dd. MMMM","dateFormat-short":"dd.MM.yy","dateFormatItem-MMd":"d.MM.","dayPeriods-format-wide-afternoon":"nachmittags","field-second":"Sekunde","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormatItem-Ed":"E d.","field-week":"Woche","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Wochentag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d.M.y","dateFormatItem-MMMEd":"E, d. MMM","eraNarrow":["v. Chr.","n. Chr."],"dayPeriods-format-wide-earlyMorning":"morgens","dayPeriods-format-wide-morning":"vormittags","dateFormat-long":"d. MMMM y","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"dayPeriods-format-wide-evening":"abends","dayPeriods-format-wide-pm":"nachm.","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yyMMdd":"dd.MM.yy","dayPeriods-format-wide-noon":"Mittag","field-era":"Epoche","dateFormatItem-yM":"M.y","months-standAlone-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"timeFormat-long":"HH:mm:ss z","field-year":"Jahr","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Stunde","dateFormatItem-MMdd":"dd.MM.","months-format-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"heute","field-day-relative+1":"morgen","field-day-relative+2":"übermorgen","dateFormatItem-H":"HH 'Uhr'","field-day-relative+3":"überübermorgen","months-standAlone-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"dateFormatItem-M":"L","days-standAlone-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","eraAbbr":["v. Chr.","n. Chr."],"field-minute":"Minute","field-dayperiod":"Tageshälfte","days-standAlone-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dayPeriods-format-wide-night":"nachts","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"gestern","field-day-relative+-2":"vorgestern","field-day-relative+-3":"vorvorgestern","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E, d.M.","field-day":"Tag","days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"field-zone":"Zone","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":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"eraNames":["v. Chr.","n. Chr."],"days-format-narrow":["S","M","D","M","D","F","S"],"field-month":"Monat","days-standAlone-narrow":["S","M","D","M","D","F","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"vorm.","dateFormatItem-MMMMdd":"dd. MMMM","dateFormat-short":"dd.MM.yy","dateFormatItem-MMd":"d.MM.","dayPeriods-format-wide-afternoon":"nachmittags","field-second":"Sekunde","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormatItem-Ed":"E, d.","field-week":"Woche","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/de/islamic.js b/lib/dojo/cldr/nls/de/islamic.js
new file mode 100644 (file)
index 0000000..1f3b7a8
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M.y","dateFormatItem-yyyyMMMEd":"EEE, d. MMM y G","dateFormatItem-yyMMdd":"dd.MM.y G","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"nachm.","eraNames":["AH"],"dateFormatItem-MMMEd":"E, d. MMM","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMdd":"dd.MM.","dateFormatItem-MMM":"LLL","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dayPeriods-format-wide-am":"vorm.","dateFormatItem-yyyy":"y G","months-standAlone-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"dateFormatItem-Ed":"E d.","dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["S","M","D","M","D","F","S"],"eraAbbr":["AH"],"dateFormatItem-yyyyMMMM":"MMMM y G","dateFormat-long":"d. MMMM y G","dateFormatItem-Hm":"HH:mm","dateFormatItem-MMd":"d.MM.","dateFormatItem-yyMM":"MM.y G","dateFormat-medium":"d. MMM y G","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyMMM":"MMM y G","dateFormatItem-yyQQQQ":"QQQQ y G","dateFormatItem-ms":"mm:ss","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"],"dateFormatItem-yyyyMEd":"EEE, d.M.y G","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q y G","months-format-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"dateFormatItem-H":"HH 'Uhr'","dateFormatItem-MMMMdd":"dd. MMMM","days-format-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dateFormatItem-M":"L","dateFormatItem-MEd":"E, d.M.","dateFormatItem-yyyyQQQ":"QQQ y G","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormat-short":"d.M.y G","dateFormatItem-yyyyM":"M.y G","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormat-full":"EEEE d. MMMM y G","dateFormatItem-Md":"d.M.","dateFormatItem-yyyyQ":"Q y G","dateFormatItem-yMEd":"EEE, d.M.y","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"],"dateFormatItem-yyyyMMM":"MMM y G","dateFormatItem-d":"d","quarters-format-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"eraNarrow":["AH"],"days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","dateTimeFormats-appendItem-Era":"{0} {1}","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index 90861a09199ac1ed87fc7b6a647b8fed91d06224..5fbf57bf281daa20ba9f880977e24f4dd94d8f73 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/el/buddhist.js b/lib/dojo/cldr/nls/el/buddhist.js
new file mode 100644 (file)
index 0000000..4715b46
--- /dev/null
@@ -0,0 +1 @@
+({"quarters-format-abbr":["Τ1","Τ2","Τ3","Τ4"],"dateFormat-medium":"d MMM, y G","dateFormatItem-MMMEd":"E, d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMEd":"EEE, d/M/yyyy","timeFormat-full":"h:mm:ss a zzzz","dateFormatItem-Md":"d/M","months-standAlone-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"months-standAlone-wide":["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],"dateFormatItem-EEEd":"EEE d","days-standAlone-narrow":["Κ","Δ","Τ","Τ","Π","Π","Σ"],"dayPeriods-format-wide-pm":"μ.μ.","dayPeriods-format-wide-am":"π.μ.","timeFormat-medium":"h:mm:ss a","dateFormat-long":"d MMMM, y G","dateFormat-short":"d/M/yyyy","dateFormatItem-yMMMEd":"EEE, d MMM y","months-format-wide":["Ιανουαρίου","Φεβρουαρίου","Μαρτίου","Απριλίου","Μαΐου","Ιουνίου","Ιουλίου","Αυγούστου","Σεπτεμβρίου","Οκτωβρίου","Νοεμβρίου","Δεκεμβρίου"],"dateFormatItem-yM":"M/yyyy","timeFormat-short":"h:mm a","months-format-abbr":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"timeFormat-long":"h:mm:ss a z","days-format-wide":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"dateFormatItem-yMMM":"LLL y","quarters-format-wide":["1ο τρίμηνο","2ο τρίμηνο","3ο τρίμηνο","4ο τρίμηνο"],"dateFormat-full":"EEEE, d MMMM, y G","dateFormatItem-MMMd":"d MMM","days-format-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","eraNarrow":["BE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index 047e5d54d5cac5789852839540931f4649236c1a..87644f6616fce684966b4c48f0b3549cb779882c 100644 (file)
@@ -1 +1 @@
-({"months-format-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"field-weekday":"Ημέρα εβδομάδας","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-MMMEd":"E, d MMM","eraNarrow":["π.Χ.","μ.Χ."],"dateFormat-long":"d MMMM y","months-format-wide":["Ιανουαρίου","Φεβρουαρίου","Μαρτίου","Απριλίου","Μαΐου","Ιουνίου","Ιουλίου","Αυγούστου","Σεπτεμβρίου","Οκτωβρίου","Νοεμβρίου","Δεκεμβρίου"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"μ.μ.","dateFormat-full":"EEEE, d 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","field-day-relative+0":"Σήμερα","field-day-relative+1":"Αύριο","field-day-relative+2":"Μεθαύριο","dateFormatItem-H":"HH","field-day-relative+3":"Σε τρεις ημέρες από τώρα","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":"HH:mm","quarters-standAlone-abbr":["Τ1","Τ2","Τ3","Τ4"],"eraAbbr":["π.Χ.","μ.Χ."],"field-minute":"Λεπτό","field-dayperiod":"π.μ./μ.μ.","days-standAlone-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Χθες","field-day-relative+-2":"Προχθές","field-day-relative+-3":"Πριν από τρεις ημέρες","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","dayPeriods-format-wide-am":"π.μ.","dateFormatItem-MMMMEd":"E, d MMMM","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"d/M/yy","field-second":"Δευτερόλεπτο","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormatItem-Ed":"E d","field-week":"Εβδομάδα","dateFormat-medium":"d MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
+({"months-format-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"field-weekday":"Ημέρα εβδομάδας","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-MMMEd":"E, d MMM","eraNarrow":["π.Χ.","μ.Χ."],"dateFormat-long":"d MMMM y","months-format-wide":["Ιανουαρίου","Φεβρουαρίου","Μαρτίου","Απριλίου","Μαΐου","Ιουνίου","Ιουλίου","Αυγούστου","Σεπτεμβρίου","Οκτωβρίου","Νοεμβρίου","Δεκεμβρίου"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"μ.μ.","dateFormat-full":"EEEE, d 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":"LLL y","dateFormatItem-yQ":"y Q","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"Ώρα","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"h:mm:ss a zzzz","field-day-relative+0":"Σήμερα","field-day-relative+1":"Αύριο","field-day-relative+2":"Μεθαύριο","dateFormatItem-H":"HH","field-day-relative+3":"Σε τρεις ημέρες από τώρα","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":"LLL yy","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Τ1","Τ2","Τ3","Τ4"],"eraAbbr":["π.Χ.","μ.Χ."],"field-minute":"Λεπτό","field-dayperiod":"π.μ./μ.μ.","days-standAlone-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Χθες","field-day-relative+-2":"Προχθές","field-day-relative+-3":"Πριν από τρεις ημέρες","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","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","dayPeriods-format-wide-am":"π.μ.","dateFormatItem-MMMMEd":"E, d MMMM","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"d/M/yy","field-second":"Δευτερόλεπτο","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormatItem-Ed":"E d","field-week":"Εβδομάδα","dateFormat-medium":"d MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/el/hebrew.js b/lib/dojo/cldr/nls/el/hebrew.js
new file mode 100644 (file)
index 0000000..840b1d1
--- /dev/null
@@ -0,0 +1 @@
+({"quarters-format-abbr":["Τ1","Τ2","Τ3","Τ4"],"dateFormat-medium":"d MMM y","dateFormatItem-MMMEd":"E, d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMEd":"EEE, d/M/yyyy","eraNarrow":["π.μ."],"timeFormat-full":"h:mm:ss a zzzz","dateFormatItem-Md":"d/M","dateFormatItem-EEEd":"EEE d","eraNames":["π.μ."],"days-standAlone-narrow":["Κ","Δ","Τ","Τ","Π","Π","Σ"],"dayPeriods-format-wide-pm":"μ.μ.","dayPeriods-format-wide-am":"π.μ.","timeFormat-medium":"h:mm:ss a","dateFormat-long":"d MMMM y","dateFormat-short":"d/M/yy","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormatItem-yM":"M/yyyy","timeFormat-short":"h:mm a","eraAbbr":["π.μ."],"timeFormat-long":"h:mm:ss a z","days-format-wide":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"dateFormatItem-yMMM":"LLL y","quarters-format-wide":["1ο τρίμηνο","2ο τρίμηνο","3ο τρίμηνο","4ο τρίμηνο"],"dateFormat-full":"EEEE, d MMMM y","dateFormatItem-MMMd":"d MMM","days-format-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"months-format-narrow":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","months-standAlone-narrow-leap":"Adar II","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","months-format-wide":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","months-standAlone-wide":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","months-format-abbr-leap":"Adar II","months-format-abbr":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"months-standAlone-wide-leap":"Adar II","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"months-format-narrow-leap":"Adar II","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","months-standAlone-abbr-leap":"Adar II","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","months-format-wide-leap":"Adar II"})
\ No newline at end of file
index ff419fb45a40fe038741228fd8d0b835cca95485..75198a1d8b9c34e5e751771ff1d109c92f6fc2cf 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","decimalFormat":"#,##0.###","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 94324942eac7739d0dc741441b638ae2c93b18aa..aad096762d878c6e8d3b127fc4147ba674fae347 100644 (file)
@@ -1 +1 @@
-({"AUD_symbol":"$","USD_symbol":"US$","HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
+({"AUD_symbol":"$","USD_symbol":"US$","HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
index 748ea804a4e5fecf5d909f410d77f4b362df3616..70e56f4710251ac85634164aa52ed3dc8b544d3f 100644 (file)
@@ -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
+({"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","decimalFormat-short":"000T","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
index 4e950ec5b7c11f140301dd38e9e78b5a7a7153a6..a0a0b24468402f45e085f20212731392708e46d1 100644 (file)
@@ -1 +1 @@
-({"CAD_symbol":"$","USD_symbol":"US$","HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
+({"CAD_symbol":"$","USD_symbol":"US$","HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/en-gb/buddhist.js b/lib/dojo/cldr/nls/en-gb/buddhist.js
new file mode 100644 (file)
index 0000000..9e4575c
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormat-medium":"d MMM y G","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-MMdd":"dd/MM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMEd":"EEE, d/M/y G","dateFormatItem-yyMMM":"MMM y G","dateFormatItem-y":"y","dateFormatItem-Md":"d/M","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"days-standAlone-narrow":["S","M","T","W","T","F","S"],"dateFormatItem-yyyyMMMM":"MMMM y G","dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yyyyMM":"MM/y G","dateFormat-long":"d MMMM y G","dateFormat-short":"dd/MM/y G","dateFormatItem-yMMMEd":"EEE, MMM d, y","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-yM":"M/y","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-yQ":"Q y","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormat-full":"EEEE, d MMMM y G","dateFormatItem-yyyyMd":"d/M/y G","days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-Hm":"HH:mm","timeFormat-full":"h:mm:ss a zzzz","dateFormatItem-hm":"h:mm a","dateFormatItem-EEEd":"d EEE","dateFormatItem-M":"L","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-ms":"mm:ss","dateFormatItem-d":"d","timeFormat-short":"h:mm a","timeFormat-long":"h:mm:ss a z","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-MMM":"LLL","dateFormatItem-MMMd":"MMM d","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["BE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/en-gb/islamic.js b/lib/dojo/cldr/nls/en-gb/islamic.js
new file mode 100644 (file)
index 0000000..8774cbb
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormat-medium":"d MMM y G","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-MMdd":"dd/MM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-yyyyMMM":"MMM y G","eraNarrow":["AH"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-yyMMM":"MMM y G","dateFormatItem-Md":"d/M","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"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"],"eraNames":["AH"],"days-standAlone-narrow":["S","M","T","W","T","F","S"],"dateFormatItem-yyyyMEd":"EEE, d/M/y G","dateFormatItem-yyyyMMMM":"MMMM y G","dateFormatItem-MMMMd":"d MMMM","months-standAlone-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yyyyMM":"MM/y G","dateFormat-long":"d MMMM y G","dateFormat-short":"dd/MM/y G","dateFormatItem-yMMMEd":"EEE, MMM d, y","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"],"dateFormatItem-yM":"M/y","months-format-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"eraAbbr":["AH"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-yQ":"Q y","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-yyyyMd":"d/M/y G","dateFormat-full":"EEEE, d MMMM y G","days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-yyyyMMMEd":"EEE, MMM d, y G","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-MMM":"LLL","timeFormat-full":"h:mm:ss a zzzz","dateFormatItem-yyyy":"y G","timeFormat-medium":"h:mm:ss a","dateFormatItem-EEEd":"d EEE","dateFormatItem-Hm":"HH:mm","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-ms":"mm:ss","dateFormatItem-MMMd":"MMM d","timeFormat-long":"h:mm:ss a z","timeFormat-short":"h:mm a","dateFormatItem-M":"L","dateFormatItem-yyyyQQQ":"QQQ y G","dateFormatItem-hm":"h:mm a","dateFormatItem-yyyyM":"M/y G","dateFormatItem-yyyyQ":"Q y G","dateFormatItem-d":"d","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index 748ea804a4e5fecf5d909f410d77f4b362df3616..70e56f4710251ac85634164aa52ed3dc8b544d3f 100644 (file)
@@ -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
+({"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","decimalFormat-short":"000T","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/lib/dojo/cldr/nls/en/buddhist.js b/lib/dojo/cldr/nls/en/buddhist.js
new file mode 100644 (file)
index 0000000..2e3ea93
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormat-medium":"MMM d, y G","dateFormatItem-MMMEd":"E, MMM d","dateFormatItem-MEd":"E, M/d","dateFormatItem-yMEd":"EEE, M/d/y G","dateFormatItem-Hm":"HH:mm","dateFormatItem-y":"y G","timeFormat-full":"h:mm:ss a zzzz","dateFormatItem-hm":"h:mm a","dateFormatItem-Md":"M/d","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-EEEd":"d EEE","dateFormatItem-M":"L","days-standAlone-narrow":["S","M","T","W","T","F","S"],"dateFormatItem-yQQQ":"QQQ y G","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hms":"HH:mm:ss","dateFormat-long":"MMMM d, y G","dateFormatItem-ms":"mm:ss","dateFormat-short":"M/d/yy G","dateFormatItem-yMMMEd":"EEE, MMM d, y G","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","dateFormatItem-yM":"M/y G","timeFormat-short":"h:mm a","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"timeFormat-long":"h:mm:ss a z","days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQ":"Q y G","dateFormatItem-MMM":"LLL","dateFormatItem-yMMM":"MMM y G","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormat-full":"EEEE, MMMM d, y G","dateFormatItem-MMMd":"MMM d","days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["BE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index e9729d96a69e0996d89150f8ec0e2a587e129030..4f780c154f684f5af2ed0463dd05fa2cd25dd380 100644 (file)
@@ -1 +1 @@
-({"HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","USD_symbol":"$","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
+({"HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan","USD_symbol":"$","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/en/islamic.js b/lib/dojo/cldr/nls/en/islamic.js
new file mode 100644 (file)
index 0000000..5d8f34b
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M/y","dateFormatItem-yyyyMMMEd":"EEE, MMM d, y G","dateFormatItem-yQ":"Q y","eraNames":["AH"],"dateFormatItem-MMMEd":"E, MMM d","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMM":"LLL","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-full":"h:mm:ss a zzzz","dateFormatItem-yyyy":"y G","months-standAlone-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["AH"],"dateFormat-long":"MMMM d, y G","timeFormat-medium":"h:mm:ss a","dateFormatItem-EEEd":"d EEE","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"MMM d, y G","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-ms":"mm:ss","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"],"dateFormatItem-yyyyMEd":"EEE, M/d/y G","dateFormatItem-MMMd":"MMM d","timeFormat-long":"h:mm:ss a z","months-format-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"timeFormat-short":"h:mm a","days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","dateFormatItem-yyyyQQQ":"QQQ y G","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","dateFormat-short":"M/d/yy G","dateFormatItem-yyyyM":"M/y G","dateFormatItem-yMMMEd":"EEE, MMM d, y","dateFormat-full":"EEEE, MMMM d, y G","dateFormatItem-Md":"M/d","dateFormatItem-yyyyQ":"Q y G","dateFormatItem-yMEd":"EEE, M/d/y","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"],"dateFormatItem-yyyyMMM":"MMM y G","dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"eraNarrow":["AH"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index 92b2e32bf3903a738fcce7d2bf76bc353988bf9e..9c2a231533dd79585de8ed6e112df80a6921124d 100644 (file)
@@ -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
+({"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":"+","decimalFormat-short":"000T","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/lib/dojo/cldr/nls/es/buddhist.js b/lib/dojo/cldr/nls/es/buddhist.js
new file mode 100644 (file)
index 0000000..eadddb3
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M/y G","dateFormatItem-yQ":"Q y G","dayPeriods-format-wide-pm":"p.m.","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-hms":"hh:mm:ss a","dateFormatItem-yQQQ":"QQQ y G","dateFormatItem-MMM":"LLL","months-standAlone-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"dayPeriods-format-wide-am":"a.m.","dateFormatItem-y":"y G","dateFormatItem-MMMdd":"dd-MMM","dateFormatItem-yMMM":"MMM y G","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-yyyyMM":"MM/y G","dateFormat-long":"d 'de' MMMM 'de' y G","dateFormatItem-EEEd":"EEE d","dateFormatItem-Hm":"HH:mm","dateFormatItem-MMd":"d/MM","dateFormatItem-yyMM":"MM/y G","dateFormat-medium":"dd/MM/y G","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyMMM":"MMM-y G","dateFormatItem-yyQQQQ":"QQQQ 'de' y G","dateFormatItem-yMd":"d/M/y G","dateFormatItem-yMMMM":"MMMM 'de' y G","dateFormatItem-ms":"mm:ss","dateFormatItem-MMMd":"d MMM","dateFormatItem-yyQ":"Q y G","months-format-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"dateFormatItem-MMMMd":"d 'de' MMMM","quarters-format-abbr":["T1","T2","T3","T4"],"days-format-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"dateFormatItem-M":"L","dateFormatItem-yMMMd":"d MMM y G","dateFormatItem-MEd":"E, d/M","dateFormatItem-hm":"hh:mm a","dateFormat-short":"dd/MM/y G","dateFormatItem-yMMMEd":"EEE, d MMM y G","dateFormat-full":"EEEE d 'de' MMMM 'de' y G","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE d/M/y G","months-format-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"dateFormatItem-d":"d","quarters-format-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"days-format-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"dateFormatItem-h":"hh a","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["BE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","dateTimeFormats-appendItem-Era":"{0} {1}","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/es/islamic.js b/lib/dojo/cldr/nls/es/islamic.js
new file mode 100644 (file)
index 0000000..906accd
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M/y","dateFormatItem-yyyyMMMEd":"EEE, d MMM y G","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"p.m.","eraNames":["AH"],"dateFormatItem-MMMEd":"E d MMM","dateFormatItem-hms":"hh:mm:ss a","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMM":"LLL","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dayPeriods-format-wide-am":"a.m.","dateFormatItem-MMMdd":"dd-MMM","dateFormatItem-yyyy":"y G","months-standAlone-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["D","L","M","M","J","V","S"],"eraAbbr":["AH"],"dateFormatItem-yyyyMMMM":"MMMM 'de' y G","dateFormat-long":"d 'de' MMMM 'de' y G","dateFormatItem-EEEd":"EEE d","dateFormatItem-Hm":"HH:mm","dateFormatItem-MMd":"d/MM","dateFormatItem-yyMM":"MM/y G","dateFormat-medium":"dd/MM/y G","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyMMM":"MMM-y G","dateFormatItem-yyQQQQ":"QQQQ 'de' y G","dateFormatItem-ms":"mm:ss","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"],"dateFormatItem-yyyyMEd":"EEE d/M/y G","dateFormatItem-MMMd":"d MMM","dateFormatItem-yyQ":"Q y G","months-format-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"dateFormatItem-MMMMd":"d 'de' MMMM","quarters-format-abbr":["T1","T2","T3","T4"],"days-format-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"dateFormatItem-M":"L","dateFormatItem-MEd":"E, d/M","dateFormatItem-yyyyQQQ":"QQQ y G","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"hh:mm a","dateFormat-short":"dd/MM/y G","dateFormatItem-yyyyM":"M/y G","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormat-full":"EEEE d 'de' MMMM 'de' y G","dateFormatItem-Md":"d/M","dateFormatItem-yyyyQ":"Q y G","dateFormatItem-yMEd":"EEE d/M/y","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"],"dateFormatItem-yyyyMMM":"MMM y G","dateFormatItem-d":"d","quarters-format-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"eraNarrow":["AH"],"days-format-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"dateFormatItem-h":"hh a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","dateTimeFormats-appendItem-Era":"{0} {1}","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index be433d85a237daf0ef7669747fcdfe4d33245daf..4a31948c47a0374f4ccc80f935e02d8e828920d5 100644 (file)
@@ -1 +1 @@
-({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","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:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/fi/buddhist.js b/lib/dojo/cldr/nls/fi/buddhist.js
new file mode 100644 (file)
index 0000000..2598108
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"L.y G","dateFormatItem-yMMMMccccd":"cccc, d. MMMM y G","dateFormatItem-yQ":"Q/y G","dayPeriods-format-wide-pm":"ip.","dateFormatItem-MMMEd":"E d. MMM","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yQQQ":"QQQ y G","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"dateFormatItem-Gy":"y G","dayPeriods-format-wide-am":"ap.","dateFormatItem-y":"y G","timeFormat-full":"H.mm.ss zzzz","months-standAlone-abbr":["tammi","helmi","maalis","huhti","touko","kesä","heinä","elo","syys","loka","marras","joulu"],"dateFormatItem-Ed":"ccc d.","dateFormatItem-yMMM":"LLLL y G","days-standAlone-narrow":["S","M","T","K","T","P","L"],"dateFormatItem-yyyyMMMM":"LLLL y G","dateFormat-long":"d. MMMM y G","timeFormat-medium":"H.mm.ss","dateFormatItem-Hm":"H.mm","dateFormatItem-yyyyMEEEd":"EEE d.M.y G","dateFormatItem-yyMM":"M.y G","dateFormat-medium":"d.M.y G","dateFormatItem-Hms":"H.mm.ss","dateFormatItem-yyMMM":"LLLL y G","dateFormatItem-ms":"mm.ss","dateFormatItem-yyyyQQQQ":"QQQQ y G","months-standAlone-wide":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q/y G","timeFormat-long":"H.mm.ss z","months-format-abbr":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-H":"H","timeFormat-short":"H.mm","quarters-format-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"days-format-abbr":["su","ma","ti","ke","to","pe","la"],"dateFormatItem-M":"L","dateFormatItem-MEd":"E d.M.","dateFormatItem-hm":"h.mm a","dayPeriods-format-abbr-pm":"ip.","dateFormat-short":"d.M.y G","dateFormatItem-yyyyM":"M.y G","dateFormatItem-yMMMEd":"EEE d. MMM y G","dateFormat-full":"cccc d. MMMM y G","dateFormatItem-Md":"d.M.","dateFormatItem-yMEd":"EEE d.M.y G","months-format-wide":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dayPeriods-format-abbr-am":"ap.","dateFormatItem-d":"d","quarters-format-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"days-format-wide":["sunnuntaina","maanantaina","tiistaina","keskiviikkona","torstaina","perjantaina","lauantaina"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["BE"],"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-standAlone-wide":["Q1","Q2","Q3","Q4"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index db2ffc7c1d3f60485b7e545f04c8e40fbf15f1df..c9ca4b9b3dd76cc8d7d026476fb754bde9cfb9ac 100644 (file)
@@ -1 +1 @@
-({"months-format-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"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.","dayPeriods-format-wide-pm":"ip.","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","dayPeriods-standAlone-wide-pm":"ip.","dayPeriods-format-abbr-am":"ap.","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","field-day-relative+0":"tänään","field-day-relative+1":"huomenna","field-day-relative+2":"ylihuomenna","dateFormatItem-H":"H","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-M":"L","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-yyMMM":"LLLL 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","field-day-relative+-1":"eilen","field-day-relative+-2":"toissapäivänä","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M.","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","dayPeriods-format-abbr-pm":"ip.","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","dayPeriods-format-wide-am":"ap.","dayPeriods-standAlone-wide-am":"ap.","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","dateFormatItem-hms":"h.mm.ss a","quarters-standAlone-narrow":["1","2","3","4"],"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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
+({"months-format-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"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"],"dayPeriods-format-wide-pm":"ip.","dateFormat-full":"cccc d. MMMM y","dateFormatItem-Md":"d.M.","dayPeriods-standAlone-wide-pm":"ip.","dayPeriods-format-abbr-am":"ap.","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","field-day-relative+0":"tänään","field-day-relative+1":"huomenna","field-day-relative+2":"ylihuomenna","dateFormatItem-H":"H","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-M":"L","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-yyMMM":"LLLL 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","field-day-relative+-1":"eilen","field-day-relative+-2":"toissapäivänä","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M.","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","dayPeriods-format-abbr-pm":"ip.","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","dayPeriods-format-wide-am":"ap.","dayPeriods-standAlone-wide-am":"ap.","dateFormat-short":"d.M.yyyy","field-second":"sekunti","dateFormatItem-yMMMEd":"EEE d. MMM y","dateFormatItem-Ed":"ccc d.","field-week":"viikko","dateFormat-medium":"d.M.yyyy","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-Hms":"H.mm.ss","dateFormatItem-hms":"h.mm.ss a","quarters-standAlone-narrow":["1","2","3","4"],"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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/fi/hebrew.js b/lib/dojo/cldr/nls/fi/hebrew.js
new file mode 100644 (file)
index 0000000..77443f0
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"L.yyyy","dateFormatItem-yQ":"Q/yyyy","months-standAlone-abbr-leap":"adár II","dayPeriods-format-wide-pm":"ip.","dateFormatItem-MMMEd":"E d. MMM","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"months-standAlone-narrow":["T","H","K","T","S","A","A","N","I","S","T","A","E"],"dayPeriods-format-wide-am":"ap.","timeFormat-full":"H.mm.ss zzzz","months-standAlone-narrow-leap":"A","months-standAlone-abbr":["tišrí","hešván","kislév","tevét","ševát","adár I","adár","nisán","ijjár","siván","tammúz","ab","elúl"],"dateFormatItem-yMMM":"LLL y","days-standAlone-narrow":["S","M","T","K","T","P","L"],"dateFormat-long":"d. MMMM y","timeFormat-medium":"H.mm.ss","dateFormatItem-Hm":"H.mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-Hms":"H.mm.ss","dateFormatItem-ms":"mm.ss","months-standAlone-wide":["tišríkuu","hešvánkuu","kislévkuu","tevétkuu","ševátkuu","adárkuu I","adárkuu","nisánkuu","ijjárkuu","sivánkuu","tammúzkuu","abkuu","elúlkuu"],"dateFormatItem-MMMd":"d. MMM","timeFormat-long":"H.mm.ss z","months-format-abbr":["tišríkuuta","hešvánkuuta","kislévkuuta","tevétkuuta","ševátkuuta","adárkuuta I","adárkuuta","nisánkuuta","ijjárkuuta","sivánkuuta","tammúzkuuta","abkuuta","elúlkuuta"],"timeFormat-short":"H.mm","dateFormatItem-H":"H","quarters-format-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"days-format-abbr":["su","ma","ti","ke","to","pe","la"],"dateFormatItem-MEd":"E d.M.","months-format-narrow":["T","H","K","T","S","A","A","N","I","S","T","A","E"],"dateFormatItem-hm":"h.mm a","months-standAlone-wide-leap":"adárkuu II","dayPeriods-format-abbr-pm":"ip.","dateFormat-short":"d.M.yyyy","dateFormatItem-yMMMEd":"EEE d. MMM y","dateFormat-full":"cccc d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yMEd":"EEE d.M.yyyy","months-format-wide":["tišríkuuta","hešvánkuuta","kislévkuuta","tevétkuuta","ševátkuuta","adárkuuta I","adárkuuta","nisánkuuta","ijjárkuuta","sivánkuuta","tammúzkuuta","abkuuta","elúlkuuta"],"dayPeriods-format-abbr-am":"ap.","quarters-format-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"months-format-wide-leap":"adárkuuta II","days-format-wide":["sunnuntaina","maanantaina","tiistaina","keskiviikkona","torstaina","perjantaina","lauantaina"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["AM"],"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}","months-format-abbr-leap":"Adar II","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"months-format-narrow-leap":"Adar II","eraAbbr":["AM"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","eraNames":["AM"],"days-format-narrow":["1","2","3","4","5","6","7"],"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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/fi/islamic.js b/lib/dojo/cldr/nls/fi/islamic.js
new file mode 100644 (file)
index 0000000..33eff8f
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"L.yyyy","dateFormatItem-yyyyMMMEd":"EEE d. MMM y G","dateFormatItem-yQ":"Q/yyyy","dayPeriods-format-wide-pm":"ip.","dateFormatItem-MMMEd":"E d. MMM","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-MMM":"LLL","dateFormatItem-Gy":"y G","dayPeriods-format-wide-am":"ap.","dateFormatItem-y":"y G","timeFormat-full":"H.mm.ss zzzz","dateFormatItem-yyyy":"y G","months-standAlone-abbr":["muharram","safar","rabi’ al-awwal","rabi’ al-akhir","džumada-l-ula","džumada-l-akhira","radžab","ša’ban","ramadan","šawwal","dhu-l-qa’da","dhu-l-hiddža"],"dateFormatItem-Ed":"ccc d.","dateFormatItem-yMMM":"LLL y","days-standAlone-narrow":["S","M","T","K","T","P","L"],"dateFormatItem-yyyyMMMMccccd":"cccc, d. MMMM y G","dateFormatItem-yyyyMM":"M.y G","dateFormatItem-yyyyMMMM":"LLLL y G","dateFormat-long":"d. MMMM y G","timeFormat-medium":"H.mm.ss","dateFormatItem-Hm":"H.mm","dateFormat-medium":"d.M.y G","dateFormatItem-Hms":"H.mm.ss","dateFormatItem-ms":"mm.ss","dateFormatItem-yyyyQQQQ":"QQQQ y G","months-standAlone-wide":["muharram","safar","rabi’ al-awwal","rabi’ al-akhir","džumada-l-ula","džumada-l-akhira","radžab","ša’ban","ramadan","šawwal","dhu-l-qa’da","dhu-l-hiddža"],"dateFormatItem-yyyyMEd":"EEE d.M.y G","dateFormatItem-MMMd":"d. MMM","timeFormat-long":"H.mm.ss z","months-format-abbr":["muharram","safar","rabi’ al-awwal","rabi’ al-akhir","džumada-l-ula","džumada-l-akhira","radžab","ša’ban","ramadan","šawwal","dhu-l-qa’da","dhu-l-hiddža"],"timeFormat-short":"H.mm","dateFormatItem-H":"H","quarters-format-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"days-format-abbr":["su","ma","ti","ke","to","pe","la"],"dateFormatItem-M":"L","dateFormatItem-yyyyQQQ":"QQQ y G","dateFormatItem-MEd":"E d.M.","dateFormatItem-hm":"h.mm a","dayPeriods-format-abbr-pm":"ip.","dateFormat-short":"d.M.y G","dateFormatItem-yyyyM":"M.y G","dateFormatItem-yMMMEd":"EEE d. MMM y","dateFormat-full":"cccc d. MMMM y G","dateFormatItem-Md":"d.M.","dateFormatItem-yyyyQ":"Q/y G","dateFormatItem-yMEd":"EEE d.M.yyyy","months-format-wide":["muharram","safar","rabi’ al-awwal","rabi’ al-akhir","džumada-l-ula","džumada-l-akhira","radžab","ša’ban","ramadan","šawwal","dhu-l-qa’da","dhu-l-hiddža"],"dayPeriods-format-abbr-am":"ap.","dateFormatItem-yyyyMMM":"LLLL y G","dateFormatItem-d":"d","quarters-format-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"days-format-wide":["sunnuntaina","maanantaina","tiistaina","keskiviikkona","torstaina","perjantaina","lauantaina"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["AH"],"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-standAlone-wide":["Q1","Q2","Q3","Q4"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["AH"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","eraNames":["AH"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index aa0fee6ef0bbb8399391341b387af7d37d009d8d..1713de48ad526b6c06cf9dbe34dfb99522d54334 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/fr-ch/gregorian.js b/lib/dojo/cldr/nls/fr-ch/gregorian.js
new file mode 100644 (file)
index 0000000..9c5c084
--- /dev/null
@@ -0,0 +1 @@
+({"timeFormat-full":"HH.mm:ss 'h' zzzz","dateFormat-full":"EEEE, d MMMM y","dateFormat-short":"dd.MM.yy","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"jour de la semaine","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["av. J.-C.","ap. J.-C."],"dayPeriods-format-wide-morning":"matin","dateFormatItem-MMMdd":"dd MMM","dateFormat-long":"d MMMM y","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"dayPeriods-format-wide-pm":"PM","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"midi","field-era":"ère","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"année","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"'T'Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"heure","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"dateFormatItem-yyQ":"'T'Q yy","field-day-relative+0":"aujourd’hui","field-day-relative+1":"demain","field-day-relative+2":"après-demain","field-day-relative+3":"après-après-demain","months-standAlone-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormatItem-yyMMMEEEd":"EEE d MMM yy","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["av. J.-C.","ap. J.-C."],"field-minute":"minute","field-dayperiod":"cadran","days-standAlone-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"dayPeriods-format-wide-night":"soir","dateFormatItem-yyMMMd":"d MMM yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["T1","T2","T3","T4"],"field-day-relative+-1":"hier","field-day-relative+-2":"avant-hier","field-day-relative+-3":"avant-avant-hier","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"jour","days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"field-zone":"fuseau horaire","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":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"eraNames":["avant Jésus-Christ","après Jésus-Christ"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mois","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"EEE d MMMM","dateFormatItem-MMd":"d/MM","dayPeriods-format-wide-afternoon":"après-midi","field-second":"seconde","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormatItem-Ed":"E d","field-week":"semaine","dateFormat-medium":"d MMM y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/fr-ch/number.js b/lib/dojo/cldr/nls/fr-ch/number.js
new file mode 100644 (file)
index 0000000..8d9a79e
--- /dev/null
@@ -0,0 +1 @@
+({"currencyFormat":"¤ #,##0.00;¤-#,##0.00","group":"'","decimal":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 052b033939db827cefb15ccfe29bdf6e6aa5a263..0d0983d496d4d6b7c596c9399564faf606f05ab7 100644 (file)
@@ -1 +1 @@
-({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"jour de la semaine","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["av. J.-C.","ap. J.-C."],"dayPeriods-format-wide-morning":"matin","dateFormatItem-MMMdd":"dd MMM","dateFormat-long":"d MMMM y","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"midi","field-era":"ère","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"année","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"'T'Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"heure","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"dateFormatItem-yyQ":"'T'Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"aujourd’hui","field-day-relative+1":"demain","field-day-relative+2":"après-demain","field-day-relative+3":"après-après-demain","months-standAlone-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormatItem-yyMMMEEEd":"EEE d MMM yy","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["av. J.-C.","ap. J.-C."],"field-minute":"minute","field-dayperiod":"cadran","days-standAlone-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"dayPeriods-format-wide-night":"soir","dateFormatItem-yyMMMd":"d MMM yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["T1","T2","T3","T4"],"field-day-relative+-1":"hier","field-day-relative+-2":"avant-hier","field-day-relative+-3":"avant-avant-hier","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"jour","days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"field-zone":"fuseau horaire","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":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"eraNames":["avant Jésus-Christ","après Jésus-Christ"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mois","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"EEE d MMMM","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","dayPeriods-format-wide-afternoon":"après-midi","field-second":"seconde","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"semaine","dateFormat-medium":"d MMM y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"jour de la semaine","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["av. J.-C.","ap. J.-C."],"dayPeriods-format-wide-morning":"matin","dateFormatItem-MMMdd":"dd MMM","dateFormat-long":"d MMMM y","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"midi","field-era":"ère","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"année","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"'T'Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"heure","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"dateFormatItem-yyQ":"'T'Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"aujourd’hui","field-day-relative+1":"demain","field-day-relative+2":"après-demain","field-day-relative+3":"après-après-demain","months-standAlone-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormatItem-yyMMMEEEd":"EEE d MMM yy","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["av. J.-C.","ap. J.-C."],"field-minute":"minute","field-dayperiod":"cadran","days-standAlone-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"dayPeriods-format-wide-night":"soir","dateFormatItem-yyMMMd":"d MMM yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["T1","T2","T3","T4"],"field-day-relative+-1":"hier","field-day-relative+-2":"avant-hier","field-day-relative+-3":"avant-avant-hier","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"jour","days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"field-zone":"fuseau horaire","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":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"eraNames":["avant Jésus-Christ","après Jésus-Christ"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mois","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"EEE d MMMM","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","dayPeriods-format-wide-afternoon":"après-midi","field-second":"seconde","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormatItem-Ed":"E d","field-week":"semaine","dateFormat-medium":"d MMM y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index f9a71abd63cf8f6ced8abc6b6de85a15508cd842..9dcfdd4d97d17907af5e24ec21832a631b09033b 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 23e6fa4e2126f367b8aff065b29e9399e2d1ba38..565c899fe979821a5a3d226ee58a9682edb73b23 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 0418bd716c6d9ac0e6cab5082f48c131740a305e..a8cc39a09179297afc4b4237595c31eac5b8a23d 100644 (file)
@@ -1 +1 @@
-({"field-dayperiod":"napszak","dayPeriods-format-wide-pm":"du.","field-minute":"perc","eraNames":["időszámításunk előtt","időszámításunk szerint"],"field-day-relative+-1":"tegnap","field-weekday":"hét napja","field-day-relative+-2":"tegnapelőtt","dateFormatItem-MMdd":"MM.dd.","field-day-relative+-3":"három nappal ezelőtt","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","Sz","O","N","D"],"field-era":"éra","field-hour":"óra","dayPeriods-format-wide-am":"de.","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."],"field-day-relative+0":"ma","field-day-relative+1":"holnap","days-standAlone-narrow":["V","H","K","Sz","Cs","P","Sz"],"eraAbbr":["i. e.","i. sz."],"field-day-relative+2":"holnapután","field-day-relative+3":"három nap múlva","dateFormatItem-yyyyMM":"yyyy.MM","dateFormatItem-yyyyMMMM":"y. MMMM","dateFormat-long":"y. MMMM d.","timeFormat-medium":"H:mm:ss","field-zone":"zóna","dateFormatItem-Hm":"H:mm","dateFormat-medium":"yyyy.MM.dd.","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["I. negyedév","II. negyedév","III. negyedév","IV. negyedév"],"field-year":"év","field-week":"hét","months-standAlone-wide":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],"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","dateFormatItem-H":"H","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"],"dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["V","H","K","Sz","Cs","P","Sz"],"field-second":"másodperc","field-day":"nap","dateFormatItem-MEd":"M. d., E","months-format-narrow":["J","F","M","Á","M","J","J","A","Sz","O","N","D"],"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."],"quarters-standAlone-narrow":["1","2","3","4"],"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","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
+({"field-dayperiod":"napszak","dayPeriods-format-wide-pm":"du.","field-minute":"perc","eraNames":["időszámításunk előtt","időszámításunk szerint"],"dateFormatItem-MMMEd":"MMM d., E","field-day-relative+-1":"tegnap","field-weekday":"hét napja","field-day-relative+-2":"tegnapelőtt","dateFormatItem-MMdd":"MM.dd.","field-day-relative+-3":"három nappal ezelőtt","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","Sz","O","N","D"],"field-era":"éra","field-hour":"óra","dayPeriods-format-wide-am":"de.","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."],"dateFormatItem-Ed":"d., E","field-day-relative+0":"ma","field-day-relative+1":"holnap","days-standAlone-narrow":["V","H","K","Sz","Cs","P","Sz"],"eraAbbr":["i. e.","i. sz."],"field-day-relative+2":"holnapután","field-day-relative+3":"három nap múlva","dateFormatItem-yyyyMM":"yyyy.MM","dateFormatItem-yyyyMMMM":"y. MMMM","dateFormat-long":"y. MMMM d.","timeFormat-medium":"H:mm:ss","field-zone":"zóna","dateFormatItem-Hm":"H:mm","dateFormat-medium":"yyyy.MM.dd.","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["I. negyedév","II. negyedév","III. negyedév","IV. negyedév"],"field-year":"év","field-week":"hét","months-standAlone-wide":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],"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","dateFormatItem-H":"H","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"],"dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["V","H","K","Sz","Cs","P","Sz"],"field-second":"másodperc","field-day":"nap","dateFormatItem-MEd":"M. d., E","months-format-narrow":["J","F","M","Á","M","J","J","A","Sz","O","N","D"],"days-standAlone-abbr":["V","H","K","Sze","Cs","P","Szo"],"dateFormat-short":"yyyy.MM.dd.","dateFormatItem-yMMMEd":"y. MMM d., E","dateFormat-full":"y. MMMM d., EEEE","dateFormatItem-Md":"M. d.","dateFormatItem-yMEd":"yyyy.MM.dd., E","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."],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index 472a2c86d92beee53ba1978d880f2523374ca4ba..8ce153f8a97532bf6045eb334f8f7df565cc3330 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index dbd7207e2ef2eead9abadf3241ec6386fa778bf6..118b60b45471cbc4d9667212916237d3c4cf6280 100644 (file)
@@ -1 +1 @@
-({"months-format-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"field-weekday":"giorno della settimana","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d/M/y","dateFormatItem-MMMEd":"EEE d MMM","eraNarrow":["aC","dC"],"dateFormat-long":"dd MMMM y","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"dayPeriods-format-wide-pm":"p.","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"anno","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q-yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"ora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"oggi","field-day-relative+1":"domani","field-day-relative+2":"dopodomani","field-day-relative+3":"tra tre giorni","months-standAlone-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["aC","dC"],"field-minute":"minuto","field-dayperiod":"periodo del giorno","days-standAlone-abbr":["dom","lun","mar","mer","gio","ven","sab"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ieri","dateFormatItem-h":"hh a","field-day-relative+-2":"l'altro ieri","field-day-relative+-3":"tre giorni fa","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"giorno","days-format-wide":["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],"field-zone":"zona","dateFormatItem-y":"y","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"eraNames":["a.C.","d.C"],"days-format-narrow":["D","L","M","M","G","V","S"],"field-month":"mese","days-standAlone-narrow":["D","L","M","M","G","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"m.","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"dd/MM/yy","field-second":"secondo","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"settimana","dateFormat-medium":"dd/MMM/y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
+({"months-format-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"field-weekday":"giorno della settimana","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d/M/y","dateFormatItem-MMMEd":"EEE d MMM","eraNarrow":["aC","dC"],"dateFormat-long":"dd MMMM y","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"dayPeriods-format-wide-pm":"p.","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"anno","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q-yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"ora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"oggi","field-day-relative+1":"domani","field-day-relative+2":"dopodomani","field-day-relative+3":"tra tre giorni","months-standAlone-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["aC","dC"],"field-minute":"minuto","field-dayperiod":"periodo del giorno","days-standAlone-abbr":["dom","lun","mar","mer","gio","ven","sab"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ieri","dateFormatItem-h":"hh a","field-day-relative+-2":"l'altro ieri","field-day-relative+-3":"tre giorni fa","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"giorno","days-format-wide":["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],"field-zone":"zona","dateFormatItem-y":"y","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"eraNames":["a.C.","d.C"],"days-format-narrow":["D","L","M","M","G","V","S"],"field-month":"mese","days-standAlone-narrow":["D","L","M","M","G","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"m.","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"dd/MM/yy","field-second":"secondo","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormatItem-Ed":"E d","field-week":"settimana","dateFormat-medium":"dd/MMM/y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index d878fb3835115d439692aeea0ef2838f3b587017..4fc6202a5011bc059f4bb442892a2bba87fe0ecf 100644 (file)
@@ -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
+({"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","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
index 4126131874c3d9285eeb0268b203a4295d887704..faea6fc9bd7e41f18465d1bed904b2c257dc50f1 100644 (file)
@@ -1 +1 @@
-({"field-weekday":"曜日","dateFormatItem-yQQQ":"yQQQ","dateFormatItem-yMEd":"y/M/d(EEE)","dateFormatItem-MMMEd":"M月d日(E)","eraNarrow":["BC","AD"],"dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"午後","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M/d","dateFormatItem-yMd":"y/M/d","field-era":"時代","dateFormatItem-yM":"y/M","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"timeFormat-short":"H:mm","quarters-format-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"timeFormat-long":"H:mm:ss z","field-year":"年","dateFormatItem-yMMM":"y年M月","dateFormatItem-yQ":"y/Q","field-hour":"時","dateFormatItem-MMdd":"MM/dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy/Q","timeFormat-full":"H時mm分ss秒 zzzz","field-day-relative+0":"今日","field-day-relative+1":"明日","field-day-relative+2":"明後日","dateFormatItem-H":"H時","field-day-relative+3":"3日後","months-standAlone-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"dateFormatItem-M":"L","days-standAlone-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"dateFormatItem-yyMMM":"y年M月","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","eraAbbr":["BC","AD"],"field-minute":"分","field-dayperiod":"午前/午後","days-standAlone-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨日","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"一昨日","field-day-relative+-3":"3日前","dateFormatItem-MMMd":"M月d日","dateFormatItem-MEd":"M/d(E)","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"field-zone":"タイムゾーン","dateFormatItem-yyyyMM":"yyyy/MM","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"ah:mm","dateFormatItem-GGGGyMd":"GGGGy年M月d日","days-format-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-yMMMd":"y年M月d日","eraNames":["紀元前","西暦"],"days-format-narrow":["日","月","火","水","木","金","土"],"field-month":"月","days-standAlone-narrow":["日","月","火","水","木","金","土"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"午前","dateFormat-short":"yy/MM/dd","field-second":"秒","dateFormatItem-yMMMEd":"y年M月d日(EEE)","dateFormatItem-Ed":"d日(EEE)","field-week":"週","dateFormat-medium":"yyyy/MM/dd","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","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"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
+({"field-weekday":"曜日","dateFormatItem-yQQQ":"yQQQ","dateFormatItem-yMEd":"y/M/d(EEE)","dateFormatItem-MMMEd":"M月d日(E)","eraNarrow":["BC","AD"],"dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"午後","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M/d","dateFormatItem-yMd":"y/M/d","field-era":"時代","dateFormatItem-yM":"y/M","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"timeFormat-short":"H:mm","quarters-format-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"timeFormat-long":"H:mm:ss z","field-year":"年","dateFormatItem-yMMM":"y年M月","dateFormatItem-yQ":"y/Q","field-hour":"時","dateFormatItem-MMdd":"MM/dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy/Q","timeFormat-full":"H時mm分ss秒 zzzz","field-day-relative+0":"今日","field-day-relative+1":"明日","field-day-relative+2":"明後日","dateFormatItem-H":"H時","field-day-relative+3":"3日後","months-standAlone-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"dateFormatItem-M":"M月","days-standAlone-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"dateFormatItem-yyMMM":"y年M月","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","eraAbbr":["BC","AD"],"field-minute":"分","field-dayperiod":"午前/午後","days-standAlone-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨日","dateFormatItem-h":"ah時","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"一昨日","field-day-relative+-3":"3日前","dateFormatItem-MMMd":"M月d日","dateFormatItem-MEd":"M/d(E)","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"field-zone":"タイムゾーン","dateFormatItem-yyyyMM":"yyyy/MM","dateFormatItem-y":"y年","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"ah:mm","dateFormatItem-GGGGyMd":"GGGGy年M月d日","days-format-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-yMMMd":"y年M月d日","eraNames":["紀元前","西暦"],"days-format-narrow":["日","月","火","水","木","金","土"],"field-month":"月","days-standAlone-narrow":["日","月","火","水","木","金","土"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"午前","dateFormat-short":"yy/MM/dd","field-second":"秒","dateFormatItem-yMMMEd":"y年M月d日(EEE)","dateFormatItem-Ed":"d日(EEE)","field-week":"週","dateFormat-medium":"yyyy/MM/dd","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","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"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
index 90d87b9461f99bc79b85568d969793fb9860fe13..dbde35c648f1c4b7385a251aaf8029f7a237fc76 100644 (file)
@@ -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
+({"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","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
index b10bdbf175f38b1e39ed61b418e1caf5bbcd380d..8f52d1c6facfc70b19eaa9e18a12ddc6d681ef3f 100644 (file)
@@ -1 +1 @@
-({"months-format-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"field-weekday":"요일","dateFormatItem-yQQQ":"y년 QQQ","dateFormatItem-yMEd":"yyyy. M. d. EEE","dateFormatItem-MMMEd":"MMM d일 (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}","dateFormatItem-EEEd":"d일 EEE","dayPeriods-format-wide-pm":"오후","dateFormat-full":"y년 M월 d일 EEEE","dateFormatItem-Md":"M. d.","field-era":"연호","dateFormatItem-yM":"yyyy. M.","months-standAlone-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"timeFormat-short":"a h:mm","quarters-format-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"timeFormat-long":"a h시 m분 s초 z","field-year":"년","dateFormatItem-yMMM":"y년 MMM","dateFormatItem-yQ":"y년 Q분기","field-hour":"시","dateFormatItem-MMdd":"MM. dd","months-format-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyQ":"yy년 Q분기","timeFormat-full":"a h시 m분 s초 zzzz","field-day-relative+0":"오늘","field-day-relative+1":"내일","field-day-relative+2":"모레","field-day-relative+3":"3일후","months-standAlone-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"quarters-format-abbr":["1분기","2분기","3분기","4분기"],"quarters-standAlone-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"dateFormatItem-yyMMM":"yy년 MMM","timeFormat-medium":"a h:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1분기","2분기","3분기","4분기"],"eraAbbr":["기원전","서기"],"field-minute":"분","field-dayperiod":"오전/오후","days-standAlone-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"어제","dateFormatItem-h":"a h","dateTimeFormat-long":"{1} {0}","field-day-relative+-2":"그저께","field-day-relative+-3":"그끄제","dateFormatItem-MMMd":"MMM d일","dateFormatItem-MEd":"M. d. (E)","dateTimeFormat-full":"{1} {0}","field-day":"일","days-format-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"field-zone":"시간대","dateFormatItem-yyyyMM":"yyyy. MM","dateFormatItem-y":"y","months-standAlone-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyMM":"YY. M.","dateFormatItem-hm":"a h:mm","days-format-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-yMMMd":"y년 MMM d일","eraNames":["서력기원전","서력기원"],"days-format-narrow":["일","월","화","수","목","금","토"],"field-month":"월","days-standAlone-narrow":["일","월","화","수","목","금","토"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"오전","dateFormat-short":"yy. M. d.","field-second":"초","dateFormatItem-yMMMEd":"y년 MMM d일 EEE","dateFormatItem-Ed":"d일 (E)","field-week":"주","dateFormat-medium":"yyyy. M. d.","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H시 m분 s초","dateFormatItem-hms":"a h:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
+({"months-format-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"field-weekday":"요일","dateFormatItem-yQQQ":"y년 QQQ","dateFormatItem-yMEd":"yyyy. M. d. EEE","dateFormatItem-MMMEd":"MMM d일 (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}","dateFormatItem-EEEd":"d일 EEE","dayPeriods-format-wide-pm":"오후","dateFormat-full":"y년 M월 d일 EEEE","dateFormatItem-Md":"M. d.","field-era":"연호","dateFormatItem-yM":"yyyy. M.","months-standAlone-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"timeFormat-short":"a h:mm","quarters-format-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"timeFormat-long":"a h시 m분 s초 z","field-year":"년","dateFormatItem-yMMM":"y년 MMM","dateFormatItem-yQ":"y년 Q분기","field-hour":"시","dateFormatItem-MMdd":"MM. dd","months-format-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyQ":"yy년 Q분기","timeFormat-full":"a h시 m분 s초 zzzz","field-day-relative+0":"오늘","field-day-relative+1":"내일","field-day-relative+2":"모레","dateFormatItem-H":"H시","field-day-relative+3":"3일후","months-standAlone-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"quarters-format-abbr":["1분기","2분기","3분기","4분기"],"quarters-standAlone-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"M월","days-standAlone-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"dateFormatItem-yyMMM":"yy년 MMM","timeFormat-medium":"a h:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1분기","2분기","3분기","4분기"],"eraAbbr":["기원전","서기"],"field-minute":"분","field-dayperiod":"오전/오후","days-standAlone-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-d":"d일","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"어제","dateFormatItem-h":"a h시","dateTimeFormat-long":"{1} {0}","field-day-relative+-2":"그저께","field-day-relative+-3":"그끄제","dateFormatItem-MMMd":"MMM d일","dateFormatItem-MEd":"M. d. (E)","dateTimeFormat-full":"{1} {0}","field-day":"일","days-format-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"field-zone":"시간대","dateFormatItem-yyyyMM":"yyyy. MM","dateFormatItem-y":"y년","months-standAlone-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyMM":"YY. M.","dateFormatItem-hm":"a h:mm","days-format-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-yMMMd":"y년 MMM d일","eraNames":["서력기원전","서력기원"],"days-format-narrow":["일","월","화","수","목","금","토"],"field-month":"월","days-standAlone-narrow":["일","월","화","수","목","금","토"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"오전","dateFormat-short":"yy. M. d.","field-second":"초","dateFormatItem-yMMMEd":"y년 MMM d일 EEE","dateFormatItem-Ed":"d일 (E)","field-week":"주","dateFormat-medium":"yyyy. M. d.","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H시 m분 s초","dateFormatItem-hms":"a h:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
index b155b913d7432df1d4c8a533f311af399bb6c038..70be2f66615a07841ff23e35c621619b71a39022 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 008dd84ddeb71a1a20cd90b08cee740b8aba5521..409a7cc48bf7d25024289a91437c7d5dd93c8502 100644 (file)
@@ -1 +1 @@
-({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"ukedag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d. MMMM y","months-format-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","field-era":"tidsalder","dateFormatItem-yM":"M y","months-standAlone-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"timeFormat-long":"HH:mm:ss z","field-year":"år","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"time","dateFormatItem-MMdd":"dd.MM","months-format-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"'kl'. HH:mm:ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgen","field-day-relative+2":"i overmorgen","field-day-relative+3":"i overovermorgen","months-standAlone-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-M":"L","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minutt","field-dayperiod":"AM/PM","days-standAlone-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"dateFormatItem-d":"d.","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"i går","field-day-relative+-2":"i forgårs","field-day-relative+-3":"i forforgårs","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M","field-day":"dag","days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"field-zone":"sone","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM.yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"eraNames":["f.Kr.","e.Kr."],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"måned","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd.MM.yy","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"uke","dateFormat-medium":"d. MMM y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"ukedag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d. MMMM y","months-format-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"dateFormatItem-EEEd":"EEE d.","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","field-era":"tidsalder","dateFormatItem-yM":"M y","months-standAlone-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"timeFormat-long":"HH:mm:ss z","field-year":"år","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"time","dateFormatItem-MMdd":"dd.MM","months-format-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"'kl'. HH:mm:ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgen","field-day-relative+2":"i overmorgen","field-day-relative+3":"i overovermorgen","months-standAlone-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-M":"L","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minutt","field-dayperiod":"AM/PM","days-standAlone-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"dateFormatItem-d":"d.","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"i går","field-day-relative+-2":"i forgårs","field-day-relative+-3":"i forforgårs","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M","field-day":"dag","days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"field-zone":"sone","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM.yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"eraNames":["f.Kr.","e.Kr."],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"måned","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd.MM.yy","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"uke","dateFormat-medium":"d. MMM y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index 2904b4ba27fa7b8b9031f3529c6076f2a414ae59..058217994c9f1aa41dd3230d801de5fa89bccd92 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 32eb4aa0be41203302f7cb40b628cca0291e4d41..9e3ba2c1cc1309170fd6f6bd34525dba68460ff6 100644 (file)
@@ -1 +1 @@
-({"dateFormatItem-yM":"M-y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"PM","field-minute":"Minuut","eraNames":["Voor Christus","na Christus"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"gisteren","field-weekday":"Dag van de week","dateFormatItem-yQQQ":"QQQ y","field-day-relative+-2":"eergisteren","dateFormatItem-MMdd":"dd-MM","field-day-relative+-3":"eereergisteren","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","dayPeriods-format-wide-am":"AM","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","field-day-relative+0":"vandaag","field-day-relative+1":"morgen","days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"eraAbbr":["v. Chr.","n. Chr."],"field-day-relative+2":"overmorgen","field-day-relative+3":"overovermorgen","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","dateFormat-medium":"d MMM y","dateFormatItem-yyMM":"MM-yy","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"dateFormatItem-ms":"mm:ss","field-year":"Jaar","field-week":"Week","months-standAlone-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"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"],"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"],"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-y","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."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dag van de week","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d-M-y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["v. Chr.","n. Chr."],"dateFormat-long":"d MMMM y","months-format-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d-M","field-era":"Tijdperk","dateFormatItem-yM":"M-y","months-standAlone-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"timeFormat-short":"HH:mm","quarters-format-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"timeFormat-long":"HH:mm:ss z","field-year":"Jaar","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Uur","dateFormatItem-MMdd":"dd-MM","months-format-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"vandaag","field-day-relative+1":"morgen","field-day-relative+2":"overmorgen","field-day-relative+3":"overovermorgen","months-standAlone-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"dateFormatItem-M":"L","days-standAlone-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["v. Chr.","n. Chr."],"field-minute":"Minuut","field-dayperiod":"AM/PM","days-standAlone-abbr":["zo","ma","di","wo","do","vr","za"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"gisteren","field-day-relative+-2":"eergisteren","field-day-relative+-3":"eereergisteren","dateFormatItem-MMMd":"d-MMM","dateFormatItem-MEd":"E d-M","field-day":"Dag","days-format-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"field-zone":"Zone","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":["zo","ma","di","wo","do","vr","za"],"eraNames":["Voor Christus","na Christus"],"days-format-narrow":["Z","M","D","W","D","V","Z"],"field-month":"Maand","days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd-MM-yy","dateFormatItem-MMd":"d-MM","field-second":"Seconde","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormatItem-Ed":"E d","field-week":"Week","dateFormat-medium":"d MMM y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index 6e47a0a588e1822a6305994765beacbdb870ab5f..3edd9e7148db8e0f9258d6868e472d757493701e 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 8f762162fbcc02faa7c16c9d0d8afb5a8f06f169..ee347cd0b9ed5072ee349bfef332f759a0c44b53 100644 (file)
@@ -1 +1 @@
-({"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:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"})
\ No newline at end of file
+({"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"})
\ No newline at end of file
index 661278f715efebb3dd5718c2ac90da8449f62f12..ca45fcf4ee5232195ac95623c4a25e010532734f 100644 (file)
@@ -1 +1 @@
-({"months-format-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"field-weekday":"Dzień tygodnia","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d-M-y","dateFormatItem-MMMEd":"d MMM E","eraNarrow":["p.n.e.","n.e."],"dayPeriods-format-wide-earlyMorning":"nad ranem","dayPeriods-format-wide-morning":"rano","dateFormat-long":"d MMMM y","months-format-wide":["stycznia","lutego","marca","kwietnia","maja","czerwca","lipca","sierpnia","września","października","listopada","grudnia"],"dayPeriods-format-wide-evening":"wieczorem","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, d MMMM y","dateFormatItem-Md":"d-M","dayPeriods-format-wide-noon":"w południe","field-era":"Era","dateFormatItem-yM":"M-y","months-standAlone-wide":["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],"timeFormat-short":"HH:mm","quarters-format-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"timeFormat-long":"HH:mm:ss z","field-year":"Rok","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"Godzina","dateFormatItem-MMdd":"dd-MM","months-format-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"Dzisiaj","field-day-relative+1":"Jutro","field-day-relative+2":"Pojutrze","field-day-relative+3":"Za trzy dni","months-standAlone-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"dateFormatItem-M":"L","days-standAlone-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1 kw.","2 kw.","3 kw.","4 kw."],"eraAbbr":["p.n.e.","n.e."],"field-minute":"Minuta","field-dayperiod":"Dayperiod","days-standAlone-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"dayPeriods-format-wide-night":"w nocy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Wczoraj","dateFormatItem-h":"hh a","field-day-relative+-2":"Przedwczoraj","field-day-relative+-3":"Trzy dni temu","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d-M","dayPeriods-format-wide-lateMorning":"przed południem","dateFormatItem-yMMMM":"LLLL y","field-day":"Dzień","days-format-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"field-zone":"Strefa","dateFormatItem-yyyyMM":"yyyy-MM","dateFormatItem-y":"y","months-standAlone-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"eraNames":["p.n.e.","n.e."],"days-format-narrow":["N","P","W","Ś","C","P","S"],"field-month":"Miesiąc","days-standAlone-narrow":["N","P","W","Ś","C","P","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd-MM-yyyy","dayPeriods-format-wide-afternoon":"po południu","field-second":"Sekunda","dateFormatItem-yMMMEd":"EEE, d MMM y","field-week":"Tydzień","dateFormat-medium":"dd-MM-yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yMMM":"y MMM","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
+({"months-format-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"field-weekday":"Dzień tygodnia","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d.MM.yyyy","dateFormatItem-MMMEd":"E, d MMM","eraNarrow":["p.n.e.","n.e."],"dayPeriods-format-wide-earlyMorning":"nad ranem","dayPeriods-format-wide-morning":"rano","dateFormat-long":"d MMMM y","months-format-wide":["stycznia","lutego","marca","kwietnia","maja","czerwca","lipca","sierpnia","września","października","listopada","grudnia"],"dayPeriods-format-wide-evening":"wieczorem","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, d MMMM y","dateFormatItem-Md":"d.MM","dayPeriods-format-wide-noon":"w południe","field-era":"Era","dateFormatItem-yM":"MM.yyyy","months-standAlone-wide":["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],"timeFormat-short":"HH:mm","quarters-format-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"timeFormat-long":"HH:mm:ss z","field-year":"Rok","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"Godzina","dateFormatItem-MMdd":"d.MM","months-format-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"Dzisiaj","field-day-relative+1":"Jutro","field-day-relative+2":"Pojutrze","field-day-relative+3":"Za trzy dni","months-standAlone-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"dateFormatItem-M":"L","days-standAlone-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1 kw.","2 kw.","3 kw.","4 kw."],"eraAbbr":["p.n.e.","n.e."],"field-minute":"Minuta","field-dayperiod":"Dayperiod","days-standAlone-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"dayPeriods-format-wide-night":"w nocy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Wczoraj","dateFormatItem-h":"hh a","field-day-relative+-2":"Przedwczoraj","field-day-relative+-3":"Trzy dni temu","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d.MM","dayPeriods-format-wide-lateMorning":"przed południem","dateFormatItem-yMMMM":"LLLL y","field-day":"Dzień","days-format-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"field-zone":"Strefa","dateFormatItem-yyyyMM":"MM.yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"dateFormatItem-hm":"hh:mm a","days-format-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"eraNames":["p.n.e.","n.e."],"days-format-narrow":["N","P","W","Ś","C","P","S"],"field-month":"Miesiąc","days-standAlone-narrow":["N","P","W","Ś","C","P","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd.MM.yyyy","dayPeriods-format-wide-afternoon":"po południu","field-second":"Sekunda","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormatItem-Ed":"E, d","field-week":"Tydzień","dateFormat-medium":"d MMM y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yMMM":"y MMM","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index ad7c86955228d9807d7ea92e8a42f40e0ecdb83d..66776161f4531c8247baa4c833935e1a6f282938 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 0108200103ee849279da5ed7b52e6e2ae650e9b2..ce4e079aff7b48fc170df38c1fa8a0c031a3c1be 100644 (file)
@@ -1 +1 @@
-({"quarters-standAlone-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"quarters-format-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-wide-am":"a.m.","dateFormat-medium":"d 'de' MMM 'de' yyyy","quarters-standAlone-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-abbr-pm":"p.m.","dateFormatItem-hm":"h:mm","months-standAlone-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"dayPeriods-standAlone-abbr-am":"a.m.","dayPeriods-format-wide-pm":"Depois do meio-dia","months-standAlone-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"dateFormatItem-yQQQ":"QQQ 'de' y","dayPeriods-format-wide-am":"Antes do meio-dia","dayPeriods-format-abbr-pm":"p.m.","dateFormatItem-yyQ":"QQQ 'de' yy","dayPeriods-format-abbr-am":"a.m.","months-format-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"days-standAlone-wide":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"months-format-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"days-standAlone-abbr":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"days-format-wide":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"dateFormatItem-yQ":"QQQ 'de' yyyy","dateFormatItem-hms":"h:mm:ss","quarters-format-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-wide-pm":"p.m.","days-format-abbr":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dia da semana","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dayPeriods-format-wide-morning":"manhã","dateFormat-long":"d 'de' MMMM 'de' y","dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"meio-dia","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","field-day-relative+0":"Hoje","field-day-relative+1":"Amanhã","field-day-relative+2":"Depois de amanhã","field-day-relative+3":"Daqui a três dias","dateFormatItem-HHmmss":"HH'h'mm'min'ss's'","dateFormatItem-M":"L","dateFormatItem-yyyyMMM":"MMM 'de' y","dateFormatItem-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH'h'mm","eraAbbr":["a.C.","d.C."],"field-minute":"Minuto","field-dayperiod":"Período do dia","dayPeriods-format-wide-night":"noite","dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","field-day-relative+-1":"Ontem","field-day-relative+-2":"Anteontem","field-day-relative+-3":"Há três dias","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","field-day":"Dia","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","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","dateFormat-short":"dd/MM/yy","dayPeriods-format-wide-afternoon":"tarde","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","quarters-standAlone-narrow":["1","2","3","4"],"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})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss"})
\ No newline at end of file
+({"quarters-standAlone-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"quarters-format-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-wide-am":"a.m.","dateFormat-medium":"d 'de' MMM 'de' yyyy","quarters-standAlone-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dateFormatItem-Hm":"HH:mm","dayPeriods-standAlone-abbr-pm":"p.m.","dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-hm":"h:mm a","months-standAlone-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"dayPeriods-standAlone-abbr-am":"a.m.","dayPeriods-format-wide-pm":"Depois do meio-dia","months-standAlone-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"dateFormatItem-yQQQ":"QQQ 'de' y","dayPeriods-format-wide-am":"Antes do meio-dia","dateFormatItem-Hms":"HH:mm:ss","dayPeriods-format-abbr-pm":"p.m.","dateFormatItem-yyQ":"QQQ 'de' yy","dateFormatItem-ms":"mm:ss","dayPeriods-format-abbr-am":"a.m.","months-format-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"days-standAlone-wide":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"dateFormatItem-HHmm":"HH:mm","months-format-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"days-standAlone-abbr":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"days-format-wide":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQ":"QQQ 'de' yyyy","quarters-format-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-wide-pm":"p.m.","days-format-abbr":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dia da semana","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dayPeriods-format-wide-morning":"manhã","dateFormat-long":"d 'de' MMMM 'de' y","dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"meio-dia","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","field-day-relative+0":"Hoje","field-day-relative+1":"Amanhã","field-day-relative+2":"Depois de amanhã","field-day-relative+3":"Daqui a três dias","dateFormatItem-M":"L","dateFormatItem-yyyyMMM":"MMM 'de' y","dateFormatItem-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","eraAbbr":["a.C.","d.C."],"field-minute":"Minuto","field-dayperiod":"Período do dia","dayPeriods-format-wide-night":"noite","dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","field-day-relative+-1":"Ontem","field-day-relative+-2":"Anteontem","field-day-relative+-3":"Há três dias","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","field-day":"Dia","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","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","dateFormat-short":"dd/MM/yy","dayPeriods-format-wide-afternoon":"tarde","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","quarters-standAlone-narrow":["1","2","3","4"],"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})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index e06fd94c1a60d75df00a17c4a428d8e8df966cd1..3dc20dbe44a880c6873f28a60529e1f72aef079f 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index f10fcfa2f37da8b5b571e58bdf65f29690944730..8323386bb7c76dca533b8bcdc5032338fbd21fed 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/ro/buddhist.js b/lib/dojo/cldr/nls/ro/buddhist.js
new file mode 100644 (file)
index 0000000..7f27100
--- /dev/null
@@ -0,0 +1 @@
+({"quarters-format-abbr":["trim. I","trim. II","trim. III","trim. IV"],"dateFormat-medium":"d MMM y G","dateFormatItem-MMMEd":"E, d MMM","dateFormatItem-MEd":"E, d MMM","dateFormatItem-yMEd":"EEE, d/M/yyyy","eraNarrow":["e.b."],"dateTimeFormat-medium":"{1}, {0}","dateFormatItem-Md":"d.M","months-standAlone-narrow":["I","F","M","A","M","I","I","A","S","O","N","D"],"dateFormatItem-EEEd":"EEE d","eraNames":["era budistă"],"days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateTimeFormat-long":"{1}, {0}","dateFormatItem-yQQQ":"QQQ y","quarters-standAlone-narrow":["T1","T2","T3","T4"],"dateFormat-long":"d MMMM y G","dateFormat-short":"d/M/yyyy","dateFormatItem-yMMMEd":"EEE, d MMM y","dateTimeFormat-short":"{1}, {0}","months-format-wide":["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie","decembrie"],"dateTimeFormat-full":"{1}, {0}","dateFormatItem-yM":"M.yyyy","months-format-abbr":["ian.","feb.","mar.","apr.","mai","iun.","iul.","aug.","sept.","oct.","nov.","dec."],"eraAbbr":["e.b."],"days-format-wide":["duminică","luni","marți","miercuri","joi","vineri","sâmbătă"],"dateFormatItem-yQ":"'trimestrul' Q y","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["trimestrul I","trimestrul al II-lea","trimestrul al III-lea","trimestrul al IV-lea"],"dateFormat-full":"EEEE, d MMMM, y G","dateFormatItem-MMMd":"d MMM","days-format-abbr":["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","dateTimeFormats-appendItem-Era":"{0} {1}","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH: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-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/ro/currency.js b/lib/dojo/cldr/nls/ro/currency.js
new file mode 100644 (file)
index 0000000..63a82a5
--- /dev/null
@@ -0,0 +1 @@
+({"HKD_displayName":"dolar Hong Kong","CHF_displayName":"franc elvețian","CAD_displayName":"dolar canadian","CNY_displayName":"yuan renminbi chinezesc","AUD_displayName":"dolar australian","JPY_displayName":"yen japonez","USD_displayName":"dolar american","GBP_displayName":"liră sterlină","EUR_displayName":"euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/ro/gregorian.js b/lib/dojo/cldr/nls/ro/gregorian.js
new file mode 100644 (file)
index 0000000..a5f14ed
--- /dev/null
@@ -0,0 +1 @@
+({"months-format-narrow":["I","F","M","A","M","I","I","A","S","O","N","D"],"quarters-standAlone-narrow":["T1","T2","T3","T4"],"field-weekday":"zi a săptămânii","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-MMMEd":"E, d MMM","eraNarrow":["î.Hr.","d.Hr."],"dateFormat-long":"d MMMM y","months-format-wide":["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie","decembrie"],"dateTimeFormat-medium":"{1}, {0}","dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, d MMMM y","dateFormatItem-Md":"d.M","field-era":"eră","dateFormatItem-yM":"M.yyyy","months-standAlone-wide":["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie","decembrie"],"timeFormat-short":"HH:mm","quarters-format-wide":["trimestrul I","trimestrul al II-lea","trimestrul al III-lea","trimestrul al IV-lea"],"timeFormat-long":"HH:mm:ss z","field-year":"an","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"'trimestrul' Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"oră","dateFormatItem-MMdd":"dd.MM","months-format-abbr":["ian.","feb.","mar.","apr.","mai","iun.","iul.","aug.","sept.","oct.","nov.","dec."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"azi","field-day-relative+1":"mâine","field-day-relative+2":"poimâine","field-day-relative+3":"răspoimâine","months-standAlone-abbr":["ian.","feb.","mar.","apr.","mai","iun.","iul.","aug.","sept.","oct.","nov.","dec."],"quarters-format-abbr":["trim. I","trim. II","trim. III","trim. IV"],"quarters-standAlone-wide":["trimestrul I","trimestrul al II-lea","trimestrul al III-lea","trimestrul al IV-lea"],"dateFormatItem-M":"L","days-standAlone-wide":["duminică","luni","marți","miercuri","joi","vineri","sâmbătă"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["trim. I","trim. II","trim. III","trim. IV"],"eraAbbr":["î.Hr.","d.Hr."],"field-minute":"minut","field-dayperiod":"perioada zilei","days-standAlone-abbr":["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["T1","T2","T3","T4"],"field-day-relative+-1":"ieri","dateTimeFormat-long":"{1}, {0}","field-day-relative+-2":"alaltăieri","field-day-relative+-3":"răsalaltăieri","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d MMM","dateTimeFormat-full":"{1}, {0}","dateFormatItem-yMMMM":"MMMM y","field-day":"zi","days-format-wide":["duminică","luni","marți","miercuri","joi","vineri","sâmbătă"],"field-zone":"zonă","dateFormatItem-yyyyMM":"MM.yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["I","F","M","A","M","I","I","A","S","O","N","D"],"dateFormatItem-yyMM":"MM.yy","days-format-abbr":["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],"eraNames":["înainte de Hristos","după Hristos"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"lună","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"E, d MMMM","dateFormat-short":"dd.MM.yyyy","field-second":"secundă","dateFormatItem-yMMMEd":"EEE, d MMM y","field-week":"săptămână","dateFormat-medium":"dd.MM.yyyy","dateTimeFormat-short":"{1}, {0}","dateFormatItem-MMMEEEd":"EEE, d MMM","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/ro/number.js b/lib/dojo/cldr/nls/ro/number.js
new file mode 100644 (file)
index 0000000..4f0befd
--- /dev/null
@@ -0,0 +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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 8eadf9d28e40345a0935edf2a367ad80f7868dbb..7d91ce88e8095c8d02cbbeb0642da952cf14b93b 100644 (file)
@@ -1 +1 @@
-({"dateFormatItem-yM":"M.y","field-dayperiod":"AM/PM","field-minute":"Минута","eraNames":["до н.э.","н.э."],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"Вчера","field-weekday":"День недели","dateFormatItem-yQQQ":"y QQQ","field-day-relative+-2":"Позавчера","dateFormatItem-MMdd":"dd.MM","days-standAlone-wide":["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"field-era":"Эра","field-hour":"Час","quarters-standAlone-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"dateFormatItem-yyMMMEEEd":"EEE, d MMM yy","dateFormatItem-y":"y","timeFormat-full":"H:mm:ss zzzz","dateFormatItem-yyyy":"y","months-standAlone-abbr":["янв.","февр.","март","апр.","май","июнь","июль","авг.","сент.","окт.","нояб.","дек."],"dateFormatItem-Ed":"E d","dateFormatItem-yMMM":"LLL y","field-day-relative+0":"Сегодня","dateFormatItem-yyyyLLLL":"LLLL y","field-day-relative+1":"Завтра","days-standAlone-narrow":["В","П","В","С","Ч","П","С"],"eraAbbr":["до н.э.","н.э."],"field-day-relative+2":"Послезавтра","dateFormatItem-yyyyMM":"MM.yyyy","dateFormatItem-yyyyMMMM":"LLLL y","dateFormat-long":"d MMMM y 'г'.","timeFormat-medium":"H:mm:ss","field-zone":"Часовой пояс","dateFormatItem-Hm":"H:mm","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-yyMM":"MM.yy","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-yyMMM":"LLL yy","quarters-standAlone-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"dateFormatItem-ms":"mm:ss","dateFormatItem-yyyyQQQQ":"QQQQ y 'г'.","field-year":"Год","months-standAlone-wide":["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],"field-week":"Неделя","dateFormatItem-MMMd":"d MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["янв.","февр.","марта","апр.","мая","июня","июля","авг.","сент.","окт.","нояб.","дек."],"timeFormat-short":"H:mm","dateFormatItem-H":"H","field-month":"Месяц","quarters-format-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"days-format-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"dateFormatItem-M":"L","days-format-narrow":["В","П","В","С","Ч","П","С"],"field-second":"Секунда","field-day":"День","dateFormatItem-MEd":"E, d.M","months-format-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"days-standAlone-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"dateFormat-short":"dd.MM.yy","dateFormatItem-yMMMEd":"E, d MMM y","dateFormat-full":"EEEE, d MMMM y 'г'.","dateFormatItem-Md":"d.M","dateFormatItem-yMEd":"EEE, d.M.y","months-format-wide":["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],"dateFormatItem-d":"d","quarters-format-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"days-format-wide":["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],"eraNarrow":["до н.э.","н.э."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
+({"dateFormatItem-yM":"M.y","field-dayperiod":"AM/PM","field-minute":"Минута","eraNames":["до н.э.","н.э."],"dateFormatItem-MMMEd":"ccc, d MMM","field-day-relative+-1":"Вчера","field-weekday":"День недели","dateFormatItem-yQQQ":"y QQQ","field-day-relative+-2":"Позавчера","dateFormatItem-MMdd":"dd.MM","days-standAlone-wide":["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"field-era":"Эра","field-hour":"Час","quarters-standAlone-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"dateFormatItem-yyMMMEEEd":"EEE, d MMM yy","dateFormatItem-y":"y","timeFormat-full":"H:mm:ss zzzz","dateFormatItem-yyyy":"y","months-standAlone-abbr":["янв.","февр.","март","апр.","май","июнь","июль","авг.","сент.","окт.","нояб.","дек."],"dateFormatItem-Ed":"E, d","dateFormatItem-yMMM":"LLL y","field-day-relative+0":"Сегодня","dateFormatItem-yyyyLLLL":"LLLL y","field-day-relative+1":"Завтра","days-standAlone-narrow":["В","П","В","С","Ч","П","С"],"eraAbbr":["до н.э.","н.э."],"field-day-relative+2":"Послезавтра","dateFormatItem-yyyyMM":"MM.yyyy","dateFormatItem-yyyyMMMM":"LLLL y","dateFormat-long":"d MMMM y 'г'.","timeFormat-medium":"H:mm:ss","field-zone":"Часовой пояс","dateFormatItem-Hm":"H:mm","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-yyMM":"MM.yy","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-yyMMM":"LLL yy","quarters-standAlone-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"dateFormatItem-ms":"mm:ss","dateFormatItem-yyyyQQQQ":"QQQQ y 'г'.","field-year":"Год","months-standAlone-wide":["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],"field-week":"Неделя","dateFormatItem-MMMd":"d MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["янв.","февр.","марта","апр.","мая","июня","июля","авг.","сент.","окт.","нояб.","дек."],"timeFormat-short":"H:mm","dateFormatItem-H":"H","field-month":"Месяц","quarters-format-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"days-format-abbr":["вс","пн","вт","ср","чт","пт","сб"],"dateFormatItem-M":"L","days-format-narrow":["В","П","В","С","Ч","П","С"],"field-second":"Секунда","field-day":"День","dateFormatItem-MEd":"E, d.M","months-format-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"days-standAlone-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"dateFormat-short":"dd.MM.yy","dateFormatItem-yMMMEd":"E, d MMM y","dateFormat-full":"EEEE, d MMMM y 'г'.","dateFormatItem-Md":"d.M","dateFormatItem-yMEd":"EEE, d.M.y","months-format-wide":["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],"dateFormatItem-d":"d","quarters-format-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"days-format-wide":["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],"eraNarrow":["до н.э.","н.э."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","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"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index 55fbdf8ca3d3005b88c90674495aac8c2856ad75..be45af22bf76a6bafb33677a5fe2a3e0bae13048 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index f4095fdc6269e02bed2265aa8a6b08d084247f1f..8d495cd0f0456a94bec82f994c95151d8af4ee63 100644 (file)
@@ -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
+({"currencyFormat":"#,##0.00 ¤","group":" ","decimal":",","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","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
index 15bc1846ec049387eb45f074b94cdd7d9a1cef75..52562be1a08e2db2c73b43597f735ab3dc45e379 100644 (file)
@@ -1 +1 @@
-({"field-dayperiod":"Čas dneva","dayPeriods-format-wide-pm":"pop.","field-minute":"Minuta","eraNames":["pred našim štetjem","naše štetje"],"field-day-relative+-1":"Včeraj","field-weekday":"Dan v tednu","field-day-relative+-2":"Predvčerajšnjim","field-day-relative+-3":"Pred tremi dnevi","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","dayPeriods-format-wide-am":"dop.","dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"field-day-relative+0":"Danes","field-day-relative+1":"Jutri","days-standAlone-narrow":["n","p","t","s","č","p","s"],"eraAbbr":["pr. n. št.","po Kr."],"field-day-relative+2":"Pojutrišnjem","field-day-relative+3":"Čez tri dni","dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"dd. MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Območje","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"d. MMM. yyyy","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"dateFormatItem-ms":"mm:ss","field-year":"Leto","months-standAlone-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"field-week":"Teden","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","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"],"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."],"quarters-standAlone-narrow":["1","2","3","4"],"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","dayPeriods-format-abbr-am":"AM","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-H":"HH","dateFormatItem-M":"L","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-d":"d","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","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})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
+({"field-dayperiod":"Čas dneva","dayPeriods-format-wide-pm":"pop.","field-minute":"Minuta","eraNames":["pred našim štetjem","naše štetje"],"dateFormatItem-MMMEd":"E., d. MMM","field-day-relative+-1":"Včeraj","field-weekday":"Dan v tednu","field-day-relative+-2":"Predvčerajšnjim","field-day-relative+-3":"Pred tremi dnevi","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","dayPeriods-format-wide-am":"dop.","dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"dateFormatItem-Ed":"E., d.","dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Danes","field-day-relative+1":"Jutri","days-standAlone-narrow":["n","p","t","s","č","p","s"],"eraAbbr":["pr. n. št.","po Kr."],"field-day-relative+2":"Pojutrišnjem","field-day-relative+3":"Čez tri dni","dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"dd. MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Območje","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"d. MMM yyyy","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"dateFormatItem-ms":"mm:ss","field-year":"Leto","field-week":"Teden","months-standAlone-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"dateFormatItem-MMMd":"d. MMM","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","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["ned","pon","tor","sre","čet","pet","sob"],"dateFormatItem-mmss":"mm:ss","days-format-narrow":["n","p","t","s","č","p","s"],"field-second":"Sekunda","field-day":"Dan","dateFormatItem-MEd":"E., d. MM.","months-format-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"days-standAlone-abbr":["ned","pon","tor","sre","čet","pet","sob"],"dateFormat-short":"d. MM. yy","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-yMMMEd":"E., d. MMM y","dateFormat-full":"EEEE, dd. MMMM y","dateFormatItem-Md":"d. M.","dateFormatItem-yMEd":"E., d. M. y","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."],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-M":"L","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-d":"d","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","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})","dayPeriods-format-abbr-pm":"PM","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}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
index cc627888ef7edb619a28e90538afdb9d1be90f6b..2d85e97a15557909fec50b55dea7587c5758dbca 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index b92d4fe933a51718c2158f958c1e178cba0638b7..757dfade2ee4639180ae4a3472ceee1b548a384f 100644 (file)
@@ -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"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"em","dateFormat-full":"EEEE'en' 'den' d:'e' 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","field-day-relative+0":"i dag","field-day-relative+1":"i morgon","field-day-relative+2":"i övermorgon","field-day-relative+3":"i överövermorgon","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-M":"L","days-standAlone-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-MMMMd":"d:'e' MMMM","dateFormatItem-yyMMM":"MMM -yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH: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","field-day-relative+-1":"i går","field-day-relative+-2":"i förrgår","field-day-relative+-3":"i förrförrgår","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E d/M","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","dateFormatItem-hm":"h:mm a","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","dayPeriods-format-wide-am":"fm","dateFormatItem-MMMMEd":"E d:'e' MMMM","dateFormat-short":"yyyy-MM-dd","dateFormatItem-MMd":"d/M","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"vecka","dateFormat-medium":"d MMM y","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
+({"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"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"em","dateFormat-full":"EEEE'en' 'den' d:'e' 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":"MMM y","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","field-day-relative+0":"i dag","field-day-relative+1":"i morgon","field-day-relative+2":"i övermorgon","field-day-relative+3":"i överövermorgon","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-M":"L","days-standAlone-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-MMMMd":"d:'e' MMMM","dateFormatItem-yyMMM":"MMM -yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH: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","field-day-relative+-1":"i går","field-day-relative+-2":"i förrgår","field-day-relative+-3":"i förrförrgår","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E d/M","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","dateFormatItem-hm":"h:mm a","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","dayPeriods-format-wide-am":"fm","dateFormatItem-MMMMEd":"E d:'e' MMMM","dateFormat-short":"yyyy-MM-dd","dateFormatItem-MMd":"d/M","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"vecka","dateFormat-medium":"d MMM y","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
index de83eac0d4afe45e75f42c72641a396d4f295490..eedc15d2ec9e9de4b481f198618bd1a0f23a7955 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 9d4a2504c4efee8af2ee5e283400d4a22f859d8f..393dd6cbd71f0519d3c22af435848df2e9df174a 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
index 0be46063bedb1b36f0a2811c72f38d90798eb353..7a3e4ea80d8a6fe1941cf66daf941324e3e1273a 100644 (file)
@@ -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
+({"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/zh-hant/buddhist.js b/lib/dojo/cldr/nls/zh-hant/buddhist.js
new file mode 100644 (file)
index 0000000..5e8a565
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"Gy/M","dateFormatItem-yQ":"Gy年QQQ","dayPeriods-format-wide-pm":"下午","dateFormatItem-MMMEd":"MMMd日E","dateTimeFormat-full":"{1}{0}","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yQQQ":"Gy年QQQ","dateFormatItem-MMdd":"MM/dd","dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-y":"Gy年","timeFormat-full":"zzzzah時mm分ss秒","dateFormatItem-yyyy":"y年","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"dateFormatItem-Ed":"d日(E)","dateFormatItem-yMMM":"Gy年M月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-yyyyMMMM":"y年MMMM","dateFormat-long":"Gy年M月d日","timeFormat-medium":"ah:mm:ss","dateFormatItem-EEEd":"d EEE","dateFormatItem-Hm":"H:mm","dateFormatItem-yyMM":"Gyy/MM","dateFormat-medium":"Gy/M/d","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-yyMMM":"Gyy年MMM","dateFormatItem-yMd":"Gy/M/d","dateFormatItem-ms":"mm:ss","dateTimeFormat-long":"{1}{0}","months-standAlone-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"dateFormatItem-MMMd":"MMMd日","dateFormatItem-yyQ":"Gyy年第Q季度","timeFormat-long":"zah時mm分ss秒","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-H":"H時","timeFormat-short":"ah:mm","quarters-format-abbr":["1季","2季","3季","4季"],"dateFormatItem-MMMMdd":"MMMMdd日","days-format-abbr":["週日","週一","週二","週三","週四","週五","週六"],"dateFormatItem-M":"M月","dateFormatItem-yMMMd":"Gy年MMMd日","dateFormatItem-MEd":"M/d(E)","dateFormatItem-hm":"ah:mm","dateFormat-short":"Gy/M/d","dateFormatItem-yyyyM":"y年M月","dateFormatItem-yMMMEd":"Gy年M月d日EEE","dateFormat-full":"Gy年M月d日EEEE","dateFormatItem-Md":"M/d","dateFormatItem-yMEd":"Gy/M/d(EEE)","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-d":"d日","quarters-format-wide":["第1季","第2季","第3季","第4季"],"days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-h":"ah時","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["BE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/zh-hant/currency.js b/lib/dojo/cldr/nls/zh-hant/currency.js
new file mode 100644 (file)
index 0000000..289e9bb
--- /dev/null
@@ -0,0 +1 @@
+({"HKD_displayName":"港幣","CHF_displayName":"瑞士法郎","CAD_displayName":"加幣","CNY_displayName":"人民幣","USD_symbol":"$","AUD_displayName":"澳幣","JPY_displayName":"日圓","CNY_symbol":"¥","GBP_displayName":"英鎊","EUR_displayName":"歐元","USD_displayName":"美元","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/zh-hant/gregorian.js b/lib/dojo/cldr/nls/zh-hant/gregorian.js
new file mode 100644 (file)
index 0000000..a32d304
--- /dev/null
@@ -0,0 +1 @@
+({"field-weekday":"週天","dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-yMEd":"yyyy/M/d(EEE)","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}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M/d","field-era":"年代","dateFormatItem-yM":"yyyy/M","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"timeFormat-short":"ah:mm","quarters-format-wide":["第1季","第2季","第3季","第4季"],"timeFormat-long":"zah時mm分ss秒","field-year":"年","dateFormatItem-yMMM":"y年M月","dateFormatItem-yQ":"y年QQQ","field-hour":"小時","dateFormatItem-MMdd":"MM/dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","timeFormat-full":"zzzzah時mm分ss秒","field-day-relative+0":"今天","field-day-relative+1":"明天","field-day-relative+2":"後天","dateFormatItem-H":"H時","field-day-relative+3":"大後天","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"quarters-format-abbr":["1季","2季","3季","4季"],"quarters-standAlone-wide":["第1季","第2季","第3季","第4季"],"dateFormatItem-M":"M月","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","timeFormat-medium":"ah:mm:ss","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","field-day-relative+-1":"昨天","dateFormatItem-h":"ah時","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","field-day-relative+-3":"大前天","dateFormatItem-MMMd":"MMMd日","dateFormatItem-MEd":"M/d(E)","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-zone":"區域","dateFormatItem-y":"y年","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"ah:mm","days-format-abbr":["週日","週一","週二","週三","週四","週五","週六"],"dateFormatItem-yMMMd":"y年MMMd日","eraNames":["西元前","西元"],"days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dateFormat-short":"yy/M/d","field-second":"秒","dateFormatItem-yMMMEd":"y年M月d日EEE","dateFormatItem-Ed":"d日(E)","field-week":"週","dateFormat-medium":"yyyy/M/d","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","months-format-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormatItem-yyyyMMMM":"y年MMMM","dayPeriods-format-wide-night":"晚上","dayPeriods-format-wide-midDay":"中午","dayPeriods-format-wide-weeHours":"凌晨","dayPeriods-format-wide-afternoon":"下午","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/zh-hant/islamic.js b/lib/dojo/cldr/nls/zh-hant/islamic.js
new file mode 100644 (file)
index 0000000..e46d217
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"yyyy/M","dateFormatItem-yQ":"y年QQQ","dayPeriods-format-wide-pm":"下午","dateFormatItem-MMMEd":"MMMd日E","dateTimeFormat-full":"{1}{0}","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-MMdd":"MM/dd","dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-y":"y年","timeFormat-full":"zzzzah時mm分ss秒","dateFormatItem-yyyy":"Gy年","dateFormatItem-Ed":"d日(E)","dateFormatItem-yMMM":"y年M月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormat-long":"Gy年M月d日","timeFormat-medium":"ah:mm:ss","dateFormatItem-Hm":"H:mm","dateFormat-medium":"Gy/M/d","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-ms":"mm:ss","dateTimeFormat-long":"{1}{0}","dateFormatItem-yyyyMd":"Gy/M/d","dateFormatItem-yyyyMMMd":"Gy年M月d日","dateFormatItem-MMMd":"MMMd日","timeFormat-long":"zah時mm分ss秒","timeFormat-short":"ah:mm","dateFormatItem-H":"H時","quarters-format-abbr":["1季","2季","3季","4季"],"days-format-abbr":["週日","週一","週二","週三","週四","週五","週六"],"dateFormatItem-MMMMdd":"MMMMdd日","dateFormatItem-M":"M月","dateFormatItem-MEd":"M/d(E)","dateFormatItem-hm":"ah:mm","dateFormat-short":"Gy/M/d","dateFormatItem-yyyyM":"Gy/M","dateFormatItem-yMMMEd":"y年M月d日EEE","dateFormat-full":"Gy年M月d日EEEE","dateFormatItem-Md":"M/d","dateFormatItem-yyyyQ":"Gy年QQQ","dateFormatItem-yMEd":"yyyy/M/d(EEE)","dateFormatItem-yyyyMMM":"Gy年M月","dateFormatItem-d":"d日","quarters-format-wide":["第1季","第2季","第3季","第4季"],"days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-h":"ah時","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"eraNarrow":["AH"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","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","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","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-Era":"{0} {1}","months-format-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","months-standAlone-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"days-standAlone-wide":["1","2","3","4","5","6","7"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["AH"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","eraNames":["AH"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/zh-hant/number.js b/lib/dojo/cldr/nls/zh-hant/number.js
new file mode 100644 (file)
index 0000000..1597174
--- /dev/null
@@ -0,0 +1 @@
+({"currencyFormat":"¤#,##0.00","decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","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/lib/dojo/cldr/nls/zh-hk/currency.js b/lib/dojo/cldr/nls/zh-hk/currency.js
new file mode 100644 (file)
index 0000000..aab119f
--- /dev/null
@@ -0,0 +1 @@
+({"HKD_displayName":"港幣","HKD_symbol":"HK$","CAD_displayName":"加幣","CNY_displayName":"人民幣","USD_symbol":"$","AUD_displayName":"澳幣","JPY_displayName":"日圓","GBP_displayName":"英鎊","EUR_displayName":"歐元","CHF_displayName":"瑞士法郎","USD_displayName":"美元","CNY_symbol":"¥","CAD_symbol":"CA$","GBP_symbol":"£","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/zh-hk/gregorian.js b/lib/dojo/cldr/nls/zh-hk/gregorian.js
new file mode 100644 (file)
index 0000000..fe3a9a0
--- /dev/null
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"yyyy/M","field-minute":"分鐘","eraNames":["西元前","西元"],"field-weekday":"週天","dateFormatItem-MMdd":"MM/dd","field-day-relative+-3":"大前天","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormat-short":"{1} {0}","field-era":"年代","field-hour":"小時","dateTimeFormat-medium":"{1} {0}","quarters-standAlone-abbr":["第1季","第2季","第3季","第4季"],"timeFormat-full":"zzzzah時mm分ss秒","dateFormatItem-Ed":"d日(E)","dateFormatItem-yMMM":"y年M月","eraAbbr":["西元前","西元"],"field-day-relative+2":"後天","field-day-relative+3":"大後天","dateFormat-long":"y年M月d日","timeFormat-medium":"ah:mm:ss","field-zone":"區域","dateFormat-medium":"yyyy/M/d","quarters-standAlone-wide":["第1季","第2季","第3季","第4季"],"field-week":"週","timeFormat-long":"zah時mm分ss秒","dateFormatItem-H":"H時","quarters-format-abbr":["第1季","第2季","第3季","第4季"],"field-second":"秒","dateFormatItem-MEd":"M/d(E)","dateFormat-short":"yy/M/d","dateFormatItem-yMMMEd":"y年M月d日EEE","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M/d","dateFormatItem-yMEd":"yyyy/M/d(EEE)","quarters-format-wide":["第1季","第2季","第3季","第4季"],"eraNarrow":["西元前","西元"],"dateFormatItem-h":"ah時","months-format-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-MMMEd":"MMMd日E","dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dayPeriods-format-wide-pm":"下午","months-standAlone-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"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季度","field-day-relative+0":"今天","field-day-relative+1":"明天","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"dateFormatItem-M":"M月","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","dateFormatItem-Hm":"H:mm","field-dayperiod":"上午/下午","days-standAlone-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-y":"y年","dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"ah:mm","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dateFormatItem-yMMMd":"y年MMMd日","days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dayPeriods-format-wide-afternoon":"下午","dateFormatItem-yyyyM":"y年M月","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
diff --git a/lib/dojo/cldr/nls/zh-hk/number.js b/lib/dojo/cldr/nls/zh-hk/number.js
new file mode 100644 (file)
index 0000000..1597174
--- /dev/null
@@ -0,0 +1 @@
+({"currencyFormat":"¤#,##0.00","decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","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
index a57f458d10920aa90acbf71e9ea76947cf5b4a15..4622f4a293ec9b467afad89d5307e4d616d0044f 100644 (file)
@@ -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":"¥","HKD_symbol":"HK$","JPY_symbol":"JP¥"})
\ No newline at end of file
+({"USD_symbol":"$","EUR_displayName":"歐元","HKD_displayName":"港幣","CAD_displayName":"加幣","JPY_displayName":"日圓","GBP_displayName":"英鎊","AUD_displayName":"澳幣","CNY_displayName":"人民幣","CHF_displayName":"瑞士法郎","USD_displayName":"美元","CNY_symbol":"¥","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"})
\ No newline at end of file
index 78165cb920fcc5f3eaf1ad6e1cc62faf06ed6f3b..be7dfc65956a26d810b963c5d51f8405e6538894 100644 (file)
@@ -1 +1 @@
-({"dateFormatItem-yM":"yyyy/M","field-minute":"分鐘","eraNames":["西元前","西元"],"field-weekday":"週天","dateFormatItem-MMdd":"MM/dd","field-day-relative+-3":"大前天","field-relative-day":"大後天","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月","eraAbbr":["西元前","西元"],"field-day-relative+2":"後天","field-day-relative+3":"大後天","timeFormat-medium":"ah:mm:ss","field-zone":"區域","dateFormatItem-yyMM":"yy-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-yMMMEd":"y年M月d日EEE","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季"],"eraNarrow":["西元前","西元"],"dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-MMMEd":"MMMd日E","dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","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季度","field-day-relative+0":"今天","field-day-relative+1":"明天","dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","dateFormatItem-Hm":"H:mm","field-dayperiod":"上午/下午","dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","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","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dayPeriods-format-wide-afternoon":"下午","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
+({"quarters-standAlone-wide":["第1季","第2季","第3季","第4季"],"quarters-format-abbr":["第1季","第2季","第3季","第4季"],"dateFormat-medium":"yyyy/M/d","field-second":"秒","quarters-standAlone-abbr":["第1季","第2季","第3季","第4季"],"dateFormatItem-MMdd":"MM/dd","dateFormatItem-MEd":"M/d(E)","dateFormatItem-yMEd":"yyyy/M/d(EEE)","field-week":"週","dateFormatItem-H":"H時","eraNarrow":["西元前","西元"],"field-day-relative+-3":"大前天","timeFormat-full":"zzzzah時mm分ss秒","dateFormatItem-Md":"M/d","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"eraNames":["西元前","西元"],"field-minute":"分鐘","field-hour":"小時","field-day-relative+2":"後天","field-day-relative+3":"大後天","dateFormat-short":"yy/M/d","dateFormatItem-yMMMEd":"y年M月d日EEE","field-era":"年代","dateFormatItem-yM":"yyyy/M","timeFormat-long":"zah時mm分ss秒","eraAbbr":["西元前","西元"],"dateFormatItem-h":"ah時","dateFormatItem-yMMM":"y年M月","quarters-format-wide":["第1季","第2季","第3季","第4季"],"field-weekday":"週天","field-zone":"區域","dateFormatItem-Ed":"d日(E)","months-format-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-MMMEd":"MMMd日E","dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","months-standAlone-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"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季度","field-day-relative+0":"今天","field-day-relative+1":"明天","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"dateFormatItem-M":"M月","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","timeFormat-medium":"ah:mm:ss","dateFormatItem-Hm":"H:mm","field-dayperiod":"上午/下午","days-standAlone-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-y":"y年","dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"ah:mm","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dateFormatItem-yMMMd":"y年MMMd日","days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dayPeriods-format-wide-afternoon":"下午","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
index 4c5993f433ac981ccd3bfec6a7c3d18e1e382127..9509b436458607f05c9bddf645e456e339ccddb4 100644 (file)
@@ -1 +1 @@
-({"months-format-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"field-weekday":"周天","dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-yMEd":"y年M月d日,E","dateFormatItem-MMMEd":"MMMd日E","eraNarrow":["公元前","公元"],"dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M-d","field-era":"时期","dateFormatItem-yM":"yyyy-M","months-standAlone-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"timeFormat-short":"ah:mm","quarters-format-wide":["第1季度","第2季度","第3季度","第4季度"],"timeFormat-long":"zah时mm分ss秒","field-year":"年","dateFormatItem-yMMM":"y年MMM","dateFormatItem-yQ":"y年QQQ","dateFormatItem-yyyyMMMM":"y年MMMM","field-hour":"小时","dateFormatItem-MMdd":"MM-dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","timeFormat-full":"zzzzah时mm分ss秒","field-day-relative+0":"今天","field-day-relative+1":"明天","field-day-relative+2":"后天","dateFormatItem-H":"H时","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"quarters-format-abbr":["1季","2季","3季","4季"],"quarters-standAlone-wide":["第1季度","第2季度","第3季度","第4季度"],"dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","timeFormat-medium":"ah:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1季","2季","3季","4季"],"eraAbbr":["公元前","公元"],"field-minute":"分钟","field-dayperiod":"上午/下午","days-standAlone-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateFormatItem-MEd":"M-dE","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-zone":"区域","dateFormatItem-y":"y年","months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"ah:mm","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dateFormatItem-yMMMd":"y年MMMd日","eraNames":["公元前","公元"],"days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dateFormat-short":"yy-M-d","dayPeriods-format-wide-afternoon":"下午","field-second":"秒钟","dateFormatItem-yMMMEd":"y年MMMd日EEE","dateFormatItem-Ed":"d日E","field-week":"周","dateFormat-medium":"yyyy-M-d","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
+({"months-format-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"field-weekday":"周天","dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-yMEd":"y年M月d日,E","dateFormatItem-MMMEd":"MMMd日E","eraNarrow":["公元前","公元"],"dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M-d","field-era":"时期","dateFormatItem-yM":"yyyy-M","months-standAlone-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"timeFormat-short":"ah:mm","quarters-format-wide":["第1季度","第2季度","第3季度","第4季度"],"timeFormat-long":"zah时mm分ss秒","field-year":"年","dateFormatItem-yMMM":"y年MMM","dateFormatItem-yQ":"y年QQQ","dateFormatItem-yyyyMMMM":"y年MMMM","field-hour":"小时","dateFormatItem-MMdd":"MM-dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","timeFormat-full":"zzzzah时mm分ss秒","field-day-relative+0":"今天","field-day-relative+1":"明天","field-day-relative+2":"后天","dateFormatItem-H":"H时","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"quarters-format-abbr":["1季","2季","3季","4季"],"quarters-standAlone-wide":["第1季度","第2季度","第3季度","第4季度"],"dateFormatItem-M":"M月","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","timeFormat-medium":"ah:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1季","2季","3季","4季"],"eraAbbr":["公元前","公元"],"field-minute":"分钟","field-dayperiod":"上午/下午","days-standAlone-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah时","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateFormatItem-MEd":"M-dE","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-zone":"区域","dateFormatItem-y":"y年","months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"ah:mm","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dateFormatItem-yMMMd":"y年MMMd日","eraNames":["公元前","公元"],"days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dateFormat-short":"yy-M-d","dayPeriods-format-wide-afternoon":"下午","field-second":"秒钟","dateFormatItem-yMMMEd":"y年MMMd日EEE","dateFormatItem-Ed":"d日E","field-week":"周","dateFormat-medium":"yyyy-M-d","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
index 90d87b9461f99bc79b85568d969793fb9860fe13..dbde35c648f1c4b7385a251aaf8029f7a237fc76 100644 (file)
@@ -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
+({"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","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
index f887e3a99fcfc5cd6cffbe3fbdbb4199498a7966..4ceef4f789834cafad2c90ce86f3c423f7357c97 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,9 +8,10 @@
 if(!dojo._hasResource["dojo.cldr.supplemental"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.cldr.supplemental"] = true;
 dojo.provide("dojo.cldr.supplemental");
-
 dojo.require("dojo.i18n");
 
+dojo.getObject("cldr.supplemental", true, dojo);
+
 dojo.cldr.supplemental.getFirstDayOfWeek = function(/*String?*/locale){
 // summary: Returns a zero-based index for first day of the week
 // description:
@@ -20,11 +21,11 @@ dojo.cldr.supplemental.getFirstDayOfWeek = function(/*String?*/locale){
        // from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/firstDay
        var firstDay = {/*default is 1=Monday*/
                mv:5,
-               af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,
-               ly:6,ma:6,om:6,qa:6,sa:6,sd:6,so:6,tn:6,ye:6,
-               ar:0,as:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,
-               il:0,'in':0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,mh:0,mn:0,mo:0,mp:0,
-               mt:0,nz:0,ph:0,pk:0,sg:0,sy:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,
+               ae:6,af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,
+               ly:6,ma:6,om:6,qa:6,sa:6,sd:6,so:6,sy:6,tn:6,ye:6,
+               ar:0,as:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,
+               il:0,'in':0,jm:0,jp:0,kg:0,kr:0,la:0,mh:0,mn:0,mo:0,mp:0,
+               mt:0,nz:0,ph:0,pk:0,sg:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,
                vi:0,zw:0
 // variant. do not use?                gb:0,
        };
@@ -49,7 +50,7 @@ dojo.cldr.supplemental._region = function(/*String?*/locale){
                region = tags[2];
        }
        return region;
-}
+};
 
 dojo.cldr.supplemental.getWeekend = function(/*String?*/locale){
 // summary: Returns a hash containing the start and end days of the weekend
index 1f41dc3c7f0c47c36178457d7d50a27e52126f13..dfb8f89e649d81ef58f3d1335bc1cceb6cab0c59 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.colors"]){ //_hasResource checks added by build. Do
 dojo._hasResource["dojo.colors"] = true;
 dojo.provide("dojo.colors");
 
+dojo.getObject("colors", true, dojo);
+
 //TODO: this module appears to break naming conventions
 
 /*=====
@@ -55,9 +57,9 @@ dojo.colors = {
                                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, 
+                                       // 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,
index 67d2cdc6a7d4cb5d0644cdb6ff7f1d60f873ea6f..32d2718d9270a15a26a3f59602948757dd925062 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,9 +8,9 @@
 if(!dojo._hasResource["dojo.cookie"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.cookie"] = true;
 dojo.provide("dojo.cookie");
-
 dojo.require("dojo.regexp");
 
+
 /*=====
 dojo.__cookieProps = function(){
        //      expires: Date|String|Number?
@@ -33,7 +33,7 @@ dojo.__cookieProps = function(){
 
 
 dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/props){
-       //      summary: 
+       //      summary:
        //              Get or set a cookie.
        //      description:
        //              If one argument is passed, returns the value of the cookie
@@ -42,17 +42,17 @@ dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/
        //              Name of the cookie
        //      value:
        //              Value for the cookie
-       //      props: 
+       //      props:
        //              Properties for the cookie
        //      example:
        //              set a cookie with the JSON-serialized contents of an object which
        //              will expire 5 days from now:
        //      |       dojo.cookie("configObj", dojo.toJson(config), { expires: 5 });
-       //      
+       //
        //      example:
        //              de-serialize a cookie back into a JavaScript object:
        //      |       var config = dojo.fromJson(dojo.cookie("configObj"));
-       //      
+       //
        //      example:
        //              delete a cookie:
        //      |       dojo.cookie("configObj", null, {expires: -1});
@@ -64,7 +64,7 @@ dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/
                props = props || {};
 // FIXME: expires=0 seems to disappear right away, not on close? (FF3)  Change docs?
                var exp = props.expires;
-               if(typeof exp == "number"){ 
+               if(typeof exp == "number"){
                        var d = new Date();
                        d.setTime(d.getTime() + exp*24*60*60*1000);
                        exp = props.expires = d;
@@ -85,7 +85,7 @@ dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/
 dojo.cookie.isSupported = function(){
        //      summary:
        //              Use to determine if the current browser supports cookies or not.
-       //              
+       //
        //              Returns true if user allows cookies.
        //              Returns false if user doesn't allow cookies.
 
index 53833344d17eb5d565f6f0900efbea866960eeff..8ae564618dacd1b2ddf62284346c63f6ba0456bf 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,12 +8,13 @@
 if(!dojo._hasResource["dojo.currency"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.currency"] = true;
 dojo.provide("dojo.currency");
-
 dojo.require("dojo.number");
 dojo.require("dojo.i18n");
-dojo.requireLocalization("dojo.cldr", "currency", null, "ROOT,ar,ca,cs,da,de,el,en,en-au,en-ca,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dojo.cldr", "currency", null, "ROOT,ar,ca,cs,da,de,el,en,en-au,en-ca,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,ro,ru,sk,sl,sv,th,tr,zh,zh-hant,zh-hk,zh-tw");
 dojo.require("dojo.cldr.monetary");
 
+dojo.getObject("currency", true, dojo);
+
 /*=====
 dojo.currency = {
        // summary: localized formatting and parsing routines for currencies
@@ -47,7 +48,7 @@ dojo.currency._mixInDefaults = function(options){
 
        // Mixin with provided options
        return dojo.mixin(data, options);
-}
+};
 
 /*=====
 dojo.declare("dojo.currency.__FormatOptions", [dojo.number.__FormatOptions], {
@@ -82,7 +83,7 @@ dojo.currency.format = function(/*Number*/value, /*dojo.currency.__FormatOptions
 //             the number to be formatted.
 
        return dojo.number.format(value, dojo.currency._mixInDefaults(options));
-}
+};
 
 dojo.currency.regexp = function(/*dojo.number.__RegexpOptions?*/options){
 //
@@ -93,7 +94,7 @@ dojo.currency.regexp = function(/*dojo.number.__RegexpOptions?*/options){
 //             Returns regular expression with positive and negative match, group and decimal separators
 //             Note: the options.places default, the number of decimal places to accept, is defined by the currency type.
        return dojo.number.regexp(dojo.currency._mixInDefaults(options)); // String
-}
+};
 
 /*=====
 dojo.declare("dojo.currency.__ParseOptions", [dojo.number.__ParseOptions], {
@@ -134,6 +135,6 @@ dojo.currency.parse = function(/*String*/expression, /*dojo.currency.__ParseOpti
        // expression: A string representation of a currency value
 
        return dojo.number.parse(expression, dojo.currency._mixInDefaults(options));
-}
+};
 
 }
index 1faed3c7d7e0f719ce3890c9d9538fb414f9cbf0..9d175ca2ce4d094ee2ae89dd02ade9661a13650c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,11 +8,11 @@
 if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.data.ItemFileReadStore"] = true;
 dojo.provide("dojo.data.ItemFileReadStore");
-
 dojo.require("dojo.data.util.filter");
 dojo.require("dojo.data.util.simpleFetch");
 dojo.require("dojo.date.stamp");
 
+
 dojo.declare("dojo.data.ItemFileReadStore", null,{
        //      summary:
        //              The ItemFileReadStore implements the dojo.data.api.Read API and reads
@@ -22,7 +22,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        //                      { name:'Fozzie Bear', wears:['hat', 'tie']},
        //                      { name:'Miss Piggy', pets:'Foo-Foo'}
        //              ]}
-       //              Note that it can also contain an 'identifer' property that specified which attribute on the items 
+       //              Note that it can also contain an 'identifer' property that specified which attribute on the items
        //              in the array of items that acts as the unique identifier for that item.
        //
        constructor: function(/* Object */ keywordParameters){
@@ -37,7 +37,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                //                      ...
                //                      typeN: function || object
                //              }
-               //              Where if it is a function, it is assumed to be an object constructor that takes the 
+               //              Where if it is a function, it is assumed to be an object constructor that takes the
                //              value of _value as the initialization parameters.  If it is an object, then it is assumed
                //              to be an object of general form:
                //              {
@@ -103,7 +103,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        //all item handles will become invalid and a new fetch must be issued.
        clearOnClose: false,
 
-       //Parameter to allow specifying if preventCache should be passed to the xhrGet call or not when loading data from a url.  
+       //Parameter to allow specifying if preventCache should be passed to the xhrGet call or not when loading data from a url.
        //Note this does not mean the store calls the server on each fetch, only that the data load has preventCache set as an option.
        //Added for tracker: #6072
        urlPreventCache: false,
@@ -111,19 +111,19 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        //Parameter for specifying that it is OK for the xhrGet call to fail silently.
        failOk: false,
 
-       //Parameter to indicate to process data from the url as hierarchical 
-       //(data items can contain other data items in js form).  Default is true 
-       //for backwards compatibility.  False means only root items are processed 
-       //as items, all child objects outside of type-mapped objects and those in 
+       //Parameter to indicate to process data from the url as hierarchical
+       //(data items can contain other data items in js form).  Default is true
+       //for backwards compatibility.  False means only root items are processed
+       //as items, all child objects outside of type-mapped objects and those in
        //specific reference format, are left straight JS data objects.
        hierarchical: true,
 
        _assertIsItem: function(/* item */ item){
                //      summary:
                //              This function tests whether the item passed in is indeed an item in the store.
-               //      item: 
+               //      item:
                //              The item to test for being contained by the store.
-               if(!this.isItem(item)){ 
+               if(!this.isItem(item)){
                        throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");
                }
        },
@@ -131,25 +131,25 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        _assertIsAttribute: function(/* attribute-name-string */ attribute){
                //      summary:
                //              This function tests whether the item passed in is indeed a valid 'attribute' like type for the store.
-               //      attribute: 
+               //      attribute:
                //              The attribute to test for being contained by the store.
-               if(typeof attribute !== "string"){ 
+               if(typeof attribute !== "string"){
                        throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");
                }
        },
 
-       getValue: function(     /* item */ item, 
-                                               /* attribute-name-string */ attribute, 
+       getValue: function(     /* item */ item,
+                                               /* attribute-name-string */ attribute,
                                                /* value? */ defaultValue){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getValue()
                var values = this.getValues(item, attribute);
                return (values.length > 0)?values[0]:defaultValue; // mixed
        },
 
-       getValues: function(/* item */ item, 
+       getValues: function(/* item */ item,
                                                /* attribute-name-string */ attribute){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getValues()
 
                this._assertIsItem(item);
@@ -159,7 +159,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        getAttributes: function(/* item */ item){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getAttributes()
                this._assertIsItem(item);
                var attributes = [];
@@ -174,17 +174,17 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
 
        hasAttribute: function( /* item */ item,
                                                        /* attribute-name-string */ attribute){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.hasAttribute()
                this._assertIsItem(item);
                this._assertIsAttribute(attribute);
                return (attribute in item);
        },
 
-       containsValue: function(/* item */ item, 
-                                                       /* attribute-name-string */ attribute, 
+       containsValue: function(/* item */ item,
+                                                       /* attribute-name-string */ attribute,
                                                        /* anything */ value){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.containsValue()
                var regexp = undefined;
                if(typeof value === "string"){
@@ -193,22 +193,22 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                return this._containsValue(item, attribute, value, regexp); //boolean.
        },
 
-       _containsValue: function(       /* item */ item, 
-                                                               /* attribute-name-string */ attribute, 
+       _containsValue: function(       /* item */ item,
+                                                               /* attribute-name-string */ attribute,
                                                                /* anything */ value,
                                                                /* RegExp?*/ regexp){
-               //      summary: 
+               //      summary:
                //              Internal function for looking at the values contained by the item.
-               //      description: 
-               //              Internal function for looking at the values contained by the item.  This 
+               //      description:
+               //              Internal function for looking at the values contained by the item.  This
                //              function allows for denoting if the comparison should be case sensitive for
                //              strings or not (for handling filtering cases where string case should not matter)
-               //      
+               //
                //      item:
                //              The data item to examine for attribute values.
                //      attribute:
                //              The attribute to inspect.
-               //      value:  
+               //      value:
                //              The value to match.
                //      regexp:
                //              Optional regular expression generated off value if value was of string type to handle wildcarding.
@@ -225,7 +225,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        isItem: function(/* anything */ something){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.isItem()
                if(something && something[this._storeRefPropName] === this){
                        if(this._arrayOfAllItems[something[this._itemNumPropName]] === something){
@@ -236,25 +236,25 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        isItemLoaded: function(/* anything */ something){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.isItemLoaded()
                return this.isItem(something); //boolean
        },
 
        loadItem: function(/* object */ keywordArgs){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.loadItem()
                this._assertIsItem(keywordArgs.item);
        },
 
        getFeatures: function(){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getFeatures()
                return this._features; //Object
        },
 
        getLabel: function(/* item */ item){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getLabel()
                if(this._labelAttr && this.isItem(item)){
                        return this.getValue(item,this._labelAttr); //String
@@ -263,7 +263,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        getLabelAttributes: function(/* item */ item){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getLabelAttributes()
                if(this._labelAttr){
                        return [this._labelAttr]; //array
@@ -271,10 +271,10 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                return null; //null
        },
 
-       _fetchItems: function(  /* Object */ keywordArgs, 
-                                                       /* Function */ findCallback, 
+       _fetchItems: function(  /* Object */ keywordArgs,
+                                                       /* Function */ findCallback,
                                                        /* Function */ errorCallback){
-               //      summary: 
+               //      summary:
                //              See dojo.data.util.simpleFetch.fetch()
                var self = this,
                    filter = function(requestArgs, arrayOfItems){
@@ -314,8 +314,8 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                }
                                findCallback(items, requestArgs);
                        }else{
-                               // We want a copy to pass back in case the parent wishes to sort the array. 
-                               // We shouldn't allow resort of the internal list, so that multiple callers 
+                               // We want a copy to pass back in case the parent wishes to sort the array.
+                               // We shouldn't allow resort of the internal list, so that multiple callers
                                // can get lists and sort without affecting each other.  We also need to
                                // filter out any null values that have been left as a result of deleteItem()
                                // calls in ItemFileWriteStore.
@@ -335,11 +335,11 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        //Do a check on the JsonFileUrl and crosscheck it.
                        //If it doesn't match the cross-check, it needs to be updated
                        //This allows for either url or _jsonFileUrl to he changed to
-                       //reset the store load location.  Done this way for backwards 
+                       //reset the store load location.  Done this way for backwards
                        //compatibility.  People use _jsonFileUrl (even though officially
                        //private.
                        if(this._jsonFileUrl !== this._ccUrl){
-                               dojo.deprecated("dojo.data.ItemFileReadStore: ", 
+                               dojo.deprecated("dojo.data.ItemFileReadStore: ",
                                        "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;
@@ -350,21 +350,21 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        }
 
                        //See if there was any forced reset of data.
-                       if(this.data != null && this._jsonData == null){
+                       if(this.data != null){
                                this._jsonData = this.data;
                                this.data = null;
                        }
 
                        if(this._jsonFileUrl){
                                //If fetches come in before the loading has finished, but while
-                               //a load is in progress, we have to defer the fetching to be 
+                               //a load is in progress, we have to defer the fetching to be
                                //invoked in the callback.
                                if(this._loadInProgress){
                                        this._queuedFetches.push({args: keywordArgs, filter: filter});
                                }else{
                                        this._loadInProgress = true;
                                        var getArgs = {
-                                                       url: self._jsonFileUrl, 
+                                                       url: self._jsonFileUrl,
                                                        handleAs: "json-comment-optional",
                                                        preventCache: this.urlPreventCache,
                                                        failOk: this.failOk
@@ -424,7 +424,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        _handleQueuedFetches: function(){
-               //      summary: 
+               //      summary:
                //              Internal function to execute delayed request in the store.
                //Execute any deferred fetches now.
                if(this._queuedFetches.length > 0){
@@ -433,7 +433,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                    delayedQuery = fData.args,
                                    delayedFilter = fData.filter;
                                if(delayedFilter){
-                                       delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions)); 
+                                       delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions));
                                }else{
                                        this.fetchItemByIdentity(delayedQuery);
                                }
@@ -443,31 +443,31 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        _getItemsArray: function(/*object?*/queryOptions){
-               //      summary: 
+               //      summary:
                //              Internal function to determine which list of items to search over.
                //      queryOptions: The query options parameter, if any.
                if(queryOptions && queryOptions.deep){
-                       return this._arrayOfAllItems; 
+                       return this._arrayOfAllItems;
                }
                return this._arrayOfTopLevelItems;
        },
 
        close: function(/*dojo.data.api.Request || keywordArgs || null */ request){
-                //     summary: 
+                //     summary:
                 //             See dojo.data.api.Read.close()
-                if(this.clearOnClose && 
-                       this._loadFinished && 
+                if(this.clearOnClose &&
+                       this._loadFinished &&
                        !this._loadInProgress){
                         //Reset all internalsback to default state.  This will force a reload
-                        //on next fetch.  This also checks that the data or url param was set 
+                        //on next fetch.  This also checks that the data or url param was set
                         //so that the store knows it can get data.  Without one of those being set,
                         //the next fetch will trigger an error.
 
-                        if(((this._jsonFileUrl == "" || this._jsonFileUrl == null) && 
+                        if(((this._jsonFileUrl == "" || this._jsonFileUrl == null) &&
                                 (this.url == "" || this.url == null)
                                ) && this.data == null){
                                 console.debug("dojo.data.ItemFileReadStore: WARNING!  Data reload " +
-                                       " information has not been provided." + 
+                                       " information has not been provided." +
                                        "  Please set 'url' or 'data' to the appropriate value before" +
                                        " the next fetch");
                         }
@@ -505,7 +505,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        //      |       false == valueIsAnItem("Kermit");
                        //      |       false == valueIsAnItem(42);
                        //      |       false == valueIsAnItem(new Date());
-                       //      |       false == valueIsAnItem({_type:'Date', _value:'May 14, 1802'});
+                       //      |       false == valueIsAnItem({_type:'Date', _value:'1802-05-14'});
                        //      |       false == valueIsAnItem({_reference:'Kermit'});
                        //      |       true == valueIsAnItem({name:'Kermit', color:'green'});
                        //      |       true == valueIsAnItem({iggy:'pop'});
@@ -516,8 +516,8 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                (!dojo.isArray(aValue) || addingArrays) &&
                                (!dojo.isFunction(aValue)) &&
                                (aValue.constructor == Object || dojo.isArray(aValue)) &&
-                               (typeof aValue._reference === "undefined") && 
-                               (typeof aValue._type === "undefined") && 
+                               (typeof aValue._reference === "undefined") &&
+                               (typeof aValue._type === "undefined") &&
                                (typeof aValue._value === "undefined") &&
                                self.hierarchical
                        );
@@ -567,13 +567,13 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        item[this._rootItemPropName]=true;
                }
 
-               // Step 2: Walk through all the attribute values of all the items, 
+               // Step 2: Walk through all the attribute values of all the items,
                // and replace single values with arrays.  For example, we change this:
                //              { name:'Miss Piggy', pets:'Foo-Foo'}
                // into this:
                //              { name:['Miss Piggy'], pets:['Foo-Foo']}
-               // 
-               // We also store the attribute names so we can validate our store  
+               //
+               // We also store the attribute names so we can validate our store
                // reference and item id special properties for the O(1) isItem
                var allAttributeNames = {},
                    key;
@@ -607,9 +607,9 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        this._reverseRefMap += "_";
                }
 
-               // Step 4: Some data files specify an optional 'identifier', which is 
-               // the name of an attribute that holds the identity of each item. 
-               // If this data file specified an identifier attribute, then build a 
+               // Step 4: Some data files specify an optional 'identifier', which is
+               // the name of an attribute that holds the identity of each item.
+               // If this data file specified an identifier attribute, then build a
                // hash table of items keyed by the identity of the items.
                var arrayOfValues;
 
@@ -621,7 +621,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                item = this._arrayOfAllItems[i];
                                arrayOfValues = item[identifier];
                                var identity = arrayOfValues[0];
-                               if(!this._itemsByIdentity[identity]){
+                               if(!Object.hasOwnProperty.call(this._itemsByIdentity, identity)){
                                        this._itemsByIdentity[identity] = item;
                                }else{
                                        if(this._jsonFileUrl){
@@ -635,7 +635,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        this._features['dojo.data.api.Identity'] = Number;
                }
 
-               // Step 5: Walk through all the items, and set each item's properties 
+               // Step 5: Walk through all the items, and set each item's properties
                // for _storeRefPropName and _itemNumPropName, so that store.isItem() will return true.
                for(i = 0; i < this._arrayOfAllItems.length; ++i){
                        item = this._arrayOfAllItems[i];
@@ -649,13 +649,13 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                // We replace item-references with pointers to items.  For example, we change:
                //              { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
                // into this:
-               //              { name:['Kermit'], friends:[miss_piggy] } 
+               //              { name:['Kermit'], friends:[miss_piggy] }
                // (where miss_piggy is the object representing the 'Miss Piggy' item).
                //
                // We replace type/value pairs with typed-literals.  For example, we change:
-               //              { name:['Nelson Mandela'], born:[{_type:'Date', _value:'July 18, 1918'}] }
+               //              { name:['Nelson Mandela'], born:[{_type:'Date', _value:'1918-07-18'}] }
                // into this:
-               //              { name:['Kermit'], born:(new Date('July 18, 1918')) } 
+               //              { name:['Kermit'], born:(new Date(1918, 6, 18)) }
                //
                // We also generate the associate map for all items for the O(1) isItem function.
                for(i = 0; i < this._arrayOfAllItems.length; ++i){
@@ -668,7 +668,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                                if(("_type" in value) && ("_value" in value)){
                                                        var type = value._type; // examples: 'Date', 'Color', or 'ComplexNumber'
                                                        var mappingObj = this._datatypeMap[type]; // examples: Date, dojo.Color, foo.math.ComplexNumber, {type: dojo.Color, deserialize(value){ return new dojo.Color(value)}}
-                                                       if(!mappingObj){ 
+                                                       if(!mappingObj){
                                                                throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '" + type + "'");
                                                        }else if(dojo.isFunction(mappingObj)){
                                                                arrayOfValues[j] = new mappingObj(value._value);
@@ -691,12 +691,12 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                                                        var candidateItem = this._arrayOfAllItems[k],
                                                                            found = true;
                                                                        for(var refKey in referenceDescription){
-                                                                               if(candidateItem[refKey] != referenceDescription[refKey]){ 
-                                                                                       found = false; 
+                                                                               if(candidateItem[refKey] != referenceDescription[refKey]){
+                                                                                       found = false;
                                                                                }
                                                                        }
-                                                                       if(found){ 
-                                                                               arrayOfValues[j] = candidateItem; 
+                                                                       if(found){
+                                                                               arrayOfValues[j] = candidateItem;
                                                                        }
                                                                }
                                                        }
@@ -707,7 +707,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                                                }
                                                        }
                                                }else if(this.isItem(value)){
-                                                       //It's a child item (not one referenced through _reference).  
+                                                       //It's a child item (not one referenced through _reference).
                                                        //We need to treat this as a referenced item, so it can be cleaned up
                                                        //in a write store easily.
                                                        if(this.referenceIntegrity){
@@ -736,7 +736,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        getIdentity: function(/* item */ item){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Identity.getIdentity()
                var identifier = this._features['dojo.data.api.Identity'];
                if(identifier === Number){
@@ -751,7 +751,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        fetchItemByIdentity: function(/* Object */ keywordArgs){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Identity.fetchItemByIdentity()
 
                // Hasn't loaded yet, we have to trigger the load.
@@ -762,11 +762,11 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        //Do a check on the JsonFileUrl and crosscheck it.
                        //If it doesn't match the cross-check, it needs to be updated
                        //This allows for either url or _jsonFileUrl to he changed to
-                       //reset the store load location.  Done this way for backwards 
+                       //reset the store load location.  Done this way for backwards
                        //compatibility.  People use _jsonFileUrl (even though officially
                        //private.
                        if(this._jsonFileUrl !== this._ccUrl){
-                               dojo.deprecated("dojo.data.ItemFileReadStore: ", 
+                               dojo.deprecated("dojo.data.ItemFileReadStore: ",
                                        "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;
@@ -789,7 +789,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                }else{
                                        this._loadInProgress = true;
                                        var getArgs = {
-                                                       url: self._jsonFileUrl, 
+                                                       url: self._jsonFileUrl,
                                                        handleAs: "json-comment-optional",
                                                        preventCache: this.urlPreventCache,
                                                        failOk: this.failOk
@@ -832,7 +832,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                        scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
                                        keywordArgs.onItem.call(scope, item);
                                }
-                       } 
+                       }
                }else{
                        // Already loaded.  We can just look it up and call back.
                        item = this._getItemByIdentity(keywordArgs.identity);
@@ -847,9 +847,10 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                //      summary:
                //              Internal function to look an item up by its identity map.
                var item = null;
-               if(this._itemsByIdentity){
+               if(this._itemsByIdentity &&
+                  Object.hasOwnProperty.call(this._itemsByIdentity, identity)){
                        item = this._itemsByIdentity[identity];
-               }else{
+               }else if (Object.hasOwnProperty.call(this._arrayOfAllItems, identity)){
                        item = this._arrayOfAllItems[identity];
                }
                if(item === undefined){
@@ -859,15 +860,15 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        getIdentityAttributes: function(/* item */ item){
-               //      summary: 
-               //              See dojo.data.api.Identity.getIdentifierAttributes()
+               //      summary:
+               //              See dojo.data.api.Identity.getIdentityAttributes()
                 
                var identifier = this._features['dojo.data.api.Identity'];
                if(identifier === Number){
                        // If (identifier === Number) it means getIdentity() just returns
                        // an integer item-number for each item.  The dojo.data.api.Identity
-                       // spec says we need to return null if the identity is not composed 
-                       // of attributes 
+                       // spec says we need to return null if the identity is not composed
+                       // of attributes
                        return null; // null
                }else{
                        return [identifier]; // Array
@@ -875,18 +876,18 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
        
        _forceLoad: function(){
-               //      summary: 
+               //      summary:
                //              Internal function to force a load of the store if it hasn't occurred yet.  This is required
-               //              for specific functions to work properly.  
+               //              for specific functions to work properly.
                var self = this;
                //Do a check on the JsonFileUrl and crosscheck it.
                //If it doesn't match the cross-check, it needs to be updated
                //This allows for either url or _jsonFileUrl to he changed to
-               //reset the store load location.  Done this way for backwards 
+               //reset the store load location.  Done this way for backwards
                //compatibility.  People use _jsonFileUrl (even though officially
                //private.
                if(this._jsonFileUrl !== this._ccUrl){
-                       dojo.deprecated("dojo.data.ItemFileReadStore: ", 
+                       dojo.deprecated("dojo.data.ItemFileReadStore: ",
                                "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;
@@ -897,14 +898,14 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                }
 
                //See if there was any forced reset of data.
-               if(this.data != null && this._jsonData == null){
+               if(this.data != null){
                        this._jsonData = this.data;
                        this.data = null;
                }
 
                if(this._jsonFileUrl){
                                var getArgs = {
-                                       url: this._jsonFileUrl, 
+                                       url: this._jsonFileUrl,
                                        handleAs: "json-comment-optional",
                                        preventCache: this.urlPreventCache,
                                        failOk: this.failOk,
@@ -913,7 +914,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        var getHandler = dojo.xhrGet(getArgs);
                        getHandler.addCallback(function(data){
                                try{
-                                       //Check to be sure there wasn't another load going on concurrently 
+                                       //Check to be sure there wasn't another load going on concurrently
                                        //So we don't clobber data that comes in on it.  If there is a load going on
                                        //then do not save this data.  It will potentially clobber current data.
                                        //We mainly wanted to sync/wait here.
@@ -926,7 +927,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                                //Okay, we hit an error state we can't recover from.  A forced load occurred
                                                //while an async load was occurring.  Since we cannot block at this point, the best
                                                //that can be managed is to throw an error.
-                                               throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress."); 
+                                               throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress.");
                                        }
                                }catch(e){
                                        console.log(e);
@@ -940,7 +941,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        self._getItemsFromLoadedData(self._jsonData);
                        self._jsonData = null;
                        self._loadFinished = true;
-               } 
+               }
        }
 });
 //Mix in the simple fetch implementation to this class.
index 8782dce05afc099773ce919b8cf77df11db0a0e7..2c0f3b3267de301bee3caf04311e128b9683b32d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,6 +10,7 @@ dojo._hasResource["dojo.data.ItemFileWriteStore"] = true;
 dojo.provide("dojo.data.ItemFileWriteStore");
 dojo.require("dojo.data.ItemFileReadStore");
 
+
 dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
        constructor: function(/* object */ keywordParameters){
                //      keywordParameters: {typeMap: object)
@@ -20,7 +21,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                //                      ...
                //                      typeN: function || object
                //              }
-               //              Where if it is a function, it is assumed to be an object constructor that takes the 
+               //              Where if it is a function, it is assumed to be an object constructor that takes the
                //              value of _value as the initialization parameters.  It is serialized assuming object.toString()
                //              serialization.  If it is an object, then it is assumed
                //              to be an object of general form:
@@ -36,8 +37,8 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                
                // For keeping track of changes so that we can implement isDirty and revert
                this._pending = {
-                       _newItems:{}, 
-                       _modifiedItems:{}, 
+                       _newItems:{},
+                       _modifiedItems:{},
                        _deletedItems:{}
                };
 
@@ -100,8 +101,8 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                        }
                }
                
-               // make sure this identity is not already in use by another item, if identifiers were 
-               // defined in the file.  Otherwise it would be the item count, 
+               // make sure this identity is not already in use by another item, if identifiers were
+               // defined in the file.  Otherwise it would be the item count,
                // which should always be unique in this case.
                if(this._itemsByIdentity){
                        this._assert(typeof this._itemsByIdentity[newIdentity] === "undefined");
@@ -110,7 +111,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                this._assert(typeof this._pending._deletedItems[newIdentity] === "undefined");
                
                var newItem = {};
-               newItem[this._storeRefPropName] = this;         
+               newItem[this._storeRefPropName] = this;
                newItem[this._itemNumPropName] = this._arrayOfAllItems.length;
                if(this._itemsByIdentity){
                        this._itemsByIdentity[newIdentity] = newItem;
@@ -163,14 +164,14 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                // Bummer, the user is trying to do something like
                                // newItem({_S:"foo"}).  Unfortunately, our superclass,
                                // ItemFileReadStore, is already using _S in each of our items
-                               // to hold private info.  To avoid a naming collision, we 
-                               // need to move all our private info to some other property 
+                               // to hold private info.  To avoid a naming collision, we
+                               // need to move all our private info to some other property
                                // of all the items/objects.  So, we need to iterate over all
-                               // the items and do something like: 
+                               // the items and do something like:
                                //    item.__S = item._S;
                                //    item._S = undefined;
-                               // But first we have to make sure the new "__S" variable is 
-                               // not in use, which means we have to iterate over all the 
+                               // But first we have to make sure the new "__S" variable is
+                               // not in use, which means we have to iterate over all the
                                // items checking for that.
                                throw new Error("encountered bug in ItemFileWriteStore.newItem");
                        }
@@ -207,17 +208,17 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                this._assertIsItem(item);
 
                // Remove this item from the _arrayOfAllItems, but leave a null value in place
-               // of the item, so as not to change the length of the array, so that in newItem() 
+               // of the item, so as not to change the length of the array, so that in newItem()
                // we can still safely do: newIdentity = this._arrayOfAllItems.length;
                var indexInArrayOfAllItems = item[this._itemNumPropName];
                var identity = this.getIdentity(item);
 
                //If we have reference integrity on, we need to do reference cleanup for the deleted item
                if(this.referenceIntegrity){
-                       //First scan all the attributes of this items for references and clean them up in the map 
+                       //First scan all the attributes of this items for references and clean them up in the map
                        //As this item is going away, no need to track its references anymore.
 
-                       //Get the attributes list before we generate the backup so it 
+                       //Get the attributes list before we generate the backup so it
                        //doesn't pollute the attributes list.
                        var attributes = this.getAttributes(item);
 
@@ -263,7 +264,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                                                return !(this.isItem(possibleItem) && this.getIdentity(possibleItem) == identity);
                                                        }, this);
                                                        //Remove the note of the reference to the item and set the values on the modified attribute.
-                                                       this._removeReferenceFromMap(item, containingItem, attribute); 
+                                                       this._removeReferenceFromMap(item, containingItem, attribute);
                                                        if(newValues.length < oldValues.length){
                                                                this._setValueOrValues(containingItem, attribute, newValues, true);
                                                        }
@@ -325,11 +326,11 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
 
                var identity = this.getIdentity(item);
                if(!this._pending._modifiedItems[identity]){
-                       // Before we actually change the item, we make a copy of it to 
-                       // record the original state, so that we'll be able to revert if 
+                       // Before we actually change the item, we make a copy of it to
+                       // record the original state, so that we'll be able to revert if
                        // the revert method gets called.  If the item has already been
                        // modified then there's no need to do this now, since we already
-                       // have a record of the original state.                                         
+                       // have a record of the original state.
                        var copyOfItemState = {};
                        for(var key in item){
                                if((key === this._storeRefPropName) || (key === this._itemNumPropName) || (key === this._rootItemPropName)){
@@ -350,7 +351,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                if(dojo.isArray(newValueOrValues) && newValueOrValues.length === 0){
                        
                        // If we were passed an empty array as the value, that counts
-                       // as "unsetting" the attribute, so we need to remove this 
+                       // as "unsetting" the attribute, so we need to remove this
                        // attribute from the item.
                        success = delete item[attribute];
                        newValueOrValues = undefined; // used in the onSet Notification call below
@@ -374,7 +375,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                // Unfortunately, it's not safe to just do this:
                                //    newValueArray = newValues;
                                // Instead, we need to copy the array, which slice() does very nicely.
-                               // This is so that our internal data structure won't  
+                               // This is so that our internal data structure won't
                                // get corrupted if the user mucks with the values array *after*
                                // calling setValues().
                                newValueArray = newValueOrValues.slice(0, newValueOrValues.length);
@@ -382,7 +383,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                newValueArray = [newValueOrValues];
                        }
 
-                       //We need to handle reference integrity if this is on. 
+                       //We need to handle reference integrity if this is on.
                        //In the case of set, we need to see if references were added or removed
                        //and update the reference tracking map accordingly.
                        if(this.referenceIntegrity){
@@ -409,7 +410,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                                        if(map[id.toString()]){
                                                                delete map[id.toString()];
                                                        }else{
-                                                               this._addReferenceToMap(possibleItem, item, attribute); 
+                                                               this._addReferenceToMap(possibleItem, item, attribute);
                                                        }
                                                }
                                        }, this);
@@ -439,7 +440,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
 
                // Now we make the dojo.data.api.Notification call
                if(callOnSet){
-                       this.onSet(item, attribute, oldValueOrValues, newValueOrValues); 
+                       this.onSet(item, attribute, oldValueOrValues, newValueOrValues);
                }
                return success; // boolean
        },
@@ -474,7 +475,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                //              Method to remove an reference map entry for an item and attribute.
                //      description:
                //              Method to remove an reference map entry for an item and attribute.  This will
-               //              also perform cleanup on the map such that if there are no more references at all to 
+               //              also perform cleanup on the map such that if there are no more references at all to
                //              the item, its reference object and entry are removed.
                //
                //      refItem:
@@ -531,7 +532,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
        _flatten: function(/* anything */ value){
                if(this.isItem(value)){
                        var item = value;
-                       // Given an item, return an serializable object that provides a 
+                       // Given an item, return an serializable object that provides a
                        // reference to the item.
                        // For example, given kermit:
                        //    var kermit = store.newItem({id:2, name:"Kermit"});
@@ -562,7 +563,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
        },
        
        _getNewFileContentString: function(){
-               // summary: 
+               // summary:
                //              Generate a string that can be saved to a file.
                //              The result should look similar to:
                //              http://trac.dojotoolkit.org/browser/dojo/trunk/tests/data/countries.json
@@ -603,7 +604,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
        },
 
        _isEmpty: function(something){
-               //      summary: 
+               //      summary:
                //              Function to determine if an array or object has no properties or values.
                //      something:
                //              The array or object to examine.
@@ -632,7 +633,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                var self = this;
                var saveCompleteCallback = function(){
                        self._pending = {
-                               _newItems:{}, 
+                               _newItems:{},
                                _modifiedItems:{},
                                _deletedItems:{}
                        };
@@ -681,7 +682,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                modifiedItem = this._arrayOfAllItems[identity];
                        }
        
-                       // Restore the original item into a full-fledged item again, we want to try to 
+                       // Restore the original item into a full-fledged item again, we want to try to
                        // keep the same object instance as if we don't it, causes bugs like #9022.
                        copyOfItemState[this._storeRefPropName] = this;
                        for(key in modifiedItem){
@@ -722,7 +723,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                        }
                                        this._addReferenceToMap(refItem, deletedItem, reference.attr);
                                }, this);
-                               delete deletedItem["backupRefs_" + this._reverseRefMap]; 
+                               delete deletedItem["backupRefs_" + this._reverseRefMap];
                        }
                }
 
@@ -741,8 +742,8 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                }
 
                this._pending = {
-                       _newItems:{}, 
-                       _modifiedItems:{}, 
+                       _newItems:{},
+                       _modifiedItems:{},
                        _deletedItems:{}
                };
                return true; // boolean
@@ -753,13 +754,13 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                if(item){
                        // return true if the item is dirty
                        var identity = this.getIdentity(item);
-                       return new Boolean(this._pending._newItems[identity] || 
+                       return new Boolean(this._pending._newItems[identity] ||
                                this._pending._modifiedItems[identity] ||
                                this._pending._deletedItems[identity]).valueOf(); // boolean
                }else{
                        // return true if the store is dirty -- which means return true
                        // if there are any new items, dirty items, or modified items
-                       if(!this._isEmpty(this._pending._newItems) || 
+                       if(!this._isEmpty(this._pending._newItems) ||
                                !this._isEmpty(this._pending._modifiedItems) ||
                                !this._isEmpty(this._pending._deletedItems)){
                                return true;
@@ -770,28 +771,28 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
 
 /* dojo.data.api.Notification */
 
-       onSet: function(/* item */ item, 
-                                       /*attribute-name-string*/ attribute, 
+       onSet: function(/* item */ item,
+                                       /*attribute-name-string*/ attribute,
                                        /*object | array*/ oldValue,
                                        /*object | array*/ newValue){
                // summary: See dojo.data.api.Notification.onSet()
                
-               // No need to do anything. This method is here just so that the 
+               // No need to do anything. This method is here just so that the
                // client code can connect observers to it.
        },
 
        onNew: function(/* item */ newItem, /*object?*/ parentInfo){
                // summary: See dojo.data.api.Notification.onNew()
                
-               // No need to do anything. This method is here just so that the 
-               // client code can connect observers to it. 
+               // No need to do anything. This method is here just so that the
+               // client code can connect observers to it.
        },
 
        onDelete: function(/* item */ deletedItem){
                // summary: See dojo.data.api.Notification.onDelete()
                
-               // No need to do anything. This method is here just so that the 
-               // client code can connect observers to it. 
+               // No need to do anything. This method is here just so that the
+               // client code can connect observers to it.
        },
 
        close: function(/* object? */ request){
diff --git a/lib/dojo/data/ObjectStore.js b/lib/dojo/data/ObjectStore.js
new file mode 100644 (file)
index 0000000..8ccc4f8
--- /dev/null
@@ -0,0 +1,487 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.data.ObjectStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.data.ObjectStore"] = true;
+dojo.provide("dojo.data.ObjectStore");
+dojo.require("dojo.regexp");
+
+
+
+dojo.declare("dojo.data.ObjectStore", null,{
+               objectStore: null,
+               constructor: function(options){
+                       // summary:
+                       //              A Dojo Data implementation that wraps Dojo object stores for backwards
+                       //              compatibility.
+                       //      options:
+                       //              The configuration information to pass into the data store.
+                       //      options.objectStore:
+                       //              The object store to use as the source provider for this data store
+                       dojo.mixin(this, options);
+               },
+               labelProperty: "label",
+
+               getValue: function(/*Object*/ item, /*String*/property, /*value?*/defaultValue){
+                       // summary:
+                       //      Gets the value of an item's 'property'
+                       //
+                       //      item:
+                       //              The item to get the value from
+                       //      property:
+                       //              property to look up value for
+                       //      defaultValue:
+                       //              the default value
+                       
+                       return typeof item.get === "function" ? item.get(property) :
+                               property in item ?
+                                       item[property] : defaultValue;
+               },
+               getValues: function(item, property){
+                       // summary:
+                       //              Gets the value of an item's 'property' and returns
+                       //              it.     If this value is an array it is just returned,
+                       //              if not, the value is added to an array and that is returned.
+                       //
+                       //      item: /* object */
+                       //      property: /* string */
+                       //              property to look up value for
+
+                       var val = this.getValue(item,property);
+                       return val instanceof Array ? val : val === undefined ? [] : [val];
+               },
+
+               getAttributes: function(item){
+                       // summary:
+                       //      Gets the available attributes of an item's 'property' and returns
+                       //      it as an array.
+                       //
+                       //      item: /* object */
+
+                       var res = [];
+                       for(var i in item){
+                               if(item.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_')){
+                                       res.push(i);
+                               }
+                       }
+                       return res;
+               },
+
+               hasAttribute: function(item,attribute){
+                       // summary:
+                       //              Checks to see if item has attribute
+                       //
+                       //      item: /* object */
+                       //      attribute: /* string */
+                       return attribute in item;
+               },
+
+               containsValue: function(item, attribute, value){
+                       // summary:
+                       //              Checks to see if 'item' has 'value' at 'attribute'
+                       //
+                       //      item: /* object */
+                       //      attribute: /* string */
+                       //      value: /* anything */
+                       return dojo.indexOf(this.getValues(item,attribute),value) > -1;
+               },
+
+
+               isItem: function(item){
+                       // summary:
+                       //              Checks to see if the argument is an item
+                       //
+                       //      item: /* object */
+                       //      attribute: /* string */
+
+                       // we have no way of determining if it belongs, we just have object returned from
+                       //      service queries
+                       return (typeof item == 'object') && item && !(item instanceof Date);
+               },
+
+               isItemLoaded: function(item){
+                       // summary:
+                       //              Checks to see if the item is loaded.
+                       //
+                       //              item: /* object */
+
+                       return item && typeof item.load !== "function";
+               },
+
+               loadItem: function(args){
+                       // summary:
+                       //              Loads an item and calls the callback handler. Note, that this will call the callback
+                       //              handler even if the item is loaded. Consequently, you can use loadItem to ensure
+                       //              that an item is loaded is situations when the item may or may not be loaded yet.
+                       //              If you access a value directly through property access, you can use this to load
+                       //              a lazy value as well (doesn't need to be an item).
+                       //
+                       //      example:
+                       //              store.loadItem({
+                       //                      item: item, // this item may or may not be loaded
+                       //                      onItem: function(item){
+                       //                              // do something with the item
+                       //                      }
+                       //              });
+
+                       var item;
+                       if(typeof args.item.load === "function"){
+                               dojo.when(args.item.load(), function(result){
+                                       item = result; // in synchronous mode this can allow loadItem to return the value
+                                       var func = result instanceof Error ? args.onError : args.onItem;
+                                       if(func){
+                                               func.call(args.scope, result);
+                                       }
+                               });
+                       }else if(args.onItem){
+                               // even if it is already loaded, we will use call the callback, this makes it easier to
+                               // use when it is not known if the item is loaded (you can always safely call loadItem).
+                               args.onItem.call(args.scope, args.item);
+                       }
+                       return item;
+               },
+               close: function(request){
+                       return request && request.abort && request.abort();
+               },
+               fetch: function(args){
+                       // summary:
+                       //              See dojo.data.api.Read.fetch
+                       //
+                       
+                       args = args || {};
+                       var self = this;
+                       var scope = args.scope || self;
+                       var query = args.query;
+                       if(typeof query == "object"){ // can be null, but that is ignore by for-in
+                               query = dojo.delegate(query); // don't modify the original
+                               for(var i in query){
+                                       // find any strings and convert them to regular expressions for wildcard support
+                                       var required = query[i];
+                                       if(typeof required == "string"){
+                                               query[i] = RegExp("^" + dojo.regexp.escapeString(required, "*?").replace(/\*/g, '.*').replace(/\?/g, '.') + "$", args.queryOptions && args.queryOptions.ignoreCase ? "mi" : "m");
+                                               query[i].toString = (function(original){
+                                                       return function(){
+                                                               return original;
+                                                       }
+                                               })(required);
+                                       }
+                               }
+                       }
+                       
+                       var results = this.objectStore.query(query, args);
+                       dojo.when(results.total, function(totalCount){
+                               dojo.when(results, function(results){
+                                       if(args.onBegin){
+                                               args.onBegin.call(scope, totalCount || results.length, args);
+                                       }
+                                       if(args.onItem){
+                                               for(var i=0; i<results.length;i++){
+                                                       args.onItem.call(scope, results[i], args);
+                                               }
+                                       }
+                                       if(args.onComplete){
+                                               args.onComplete.call(scope, args.onItem ? null : results, args);
+                                       }
+                                       return results;
+                               }, errorHandler);
+                       }, errorHandler);
+                       function errorHandler(error){
+                               if(args.onError){
+                                       args.onError.call(scope, error, args);
+                               }
+                       }
+                       args.abort = function(){
+                               // abort the request
+                               if(results.cancel){
+                                       results.cancel();
+                               }
+                       };
+                       args.store = this;
+                       return args;
+               },
+               getFeatures: function(){
+                       // summary:
+                       //              return the store feature set
+
+                       return {
+                               "dojo.data.api.Read": !!this.objectStore.get,
+                               "dojo.data.api.Identity": true,
+                               "dojo.data.api.Write": !!this.objectStore.put,
+                               "dojo.data.api.Notification": true
+                       };
+               },
+
+               getLabel: function(/* item */ item){
+                       //      summary:
+                       //              See dojo.data.api.Read.getLabel()
+                       if(this.isItem(item)){
+                               return this.getValue(item,this.labelProperty); //String
+                       }
+                       return undefined; //undefined
+               },
+
+               getLabelAttributes: function(/* item */ item){
+                       //      summary:
+                       //              See dojo.data.api.Read.getLabelAttributes()
+                       return [this.labelProperty]; //array
+               },
+
+               //Identity API Support
+
+
+               getIdentity: function(item){
+                       return item.getId ? item.getId() : item[this.objectStore.idProperty || "id"];
+               },
+
+               getIdentityAttributes: function(item){
+                       // summary:
+                       //              returns the attributes which are used to make up the
+                       //              identity of an item.    Basically returns this.objectStore.idProperty
+
+                       return [this.objectStore.idProperty];
+               },
+
+               fetchItemByIdentity: function(args){
+                       // summary:
+                       //              fetch an item by its identity, by looking in our index of what we have loaded
+                       var item;
+                       dojo.when(this.objectStore.get(args.identity),
+                               function(result){
+                                       item = result;
+                                       args.onItem.call(args.scope, result);
+                               },
+                               function(error){
+                                       args.onError.call(args.scope, error);
+                               }
+                       );
+                       return item;
+               },
+               
+               newItem: function(data, parentInfo){
+                       // summary:
+                       //              adds a new item to the store at the specified point.
+                       //              Takes two parameters, data, and options.
+                       //
+                       //      data: /* object */
+                       //              The data to be added in as an item.
+                       if(parentInfo){
+                               // get the previous value or any empty array
+                               var values = this.getValue(parentInfo.parent,parentInfo.attribute,[]);
+                               // set the new value
+                               values = values.concat([data]);
+                               data.__parent = values;
+                               this.setValue(parentInfo.parent, parentInfo.attribute, values);
+                       }
+                       this._dirtyObjects.push({object:data, save: true});
+                       this.onNew(data);
+                       return data;
+               },
+               deleteItem: function(item){
+                       // summary:
+                       //              deletes item and any references to that item from the store.
+                       //
+                       //      item:
+                       //              item to delete
+                       //
+
+                       //      If the desire is to delete only one reference, unsetAttribute or
+                       //      setValue is the way to go.
+                       this.changing(item, true);
+
+                       this.onDelete(item);
+               },
+               setValue: function(item, attribute, value){
+                       // summary:
+                       //              sets 'attribute' on 'item' to 'value'
+
+                       var old = item[attribute];
+                       this.changing(item);
+                       item[attribute]=value;
+                       this.onSet(item,attribute,old,value);
+               },
+               setValues: function(item, attribute, values){
+                       // summary:
+                       //      sets 'attribute' on 'item' to 'value' value
+                       //      must be an array.
+
+
+                       if(!dojo.isArray(values)){
+                               throw new Error("setValues expects to be passed an Array object as its value");
+                       }
+                       this.setValue(item,attribute,values);
+               },
+
+               unsetAttribute: function(item, attribute){
+                       // summary:
+                       //              unsets 'attribute' on 'item'
+
+                       this.changing(item);
+                       var old = item[attribute];
+                       delete item[attribute];
+                       this.onSet(item,attribute,old,undefined);
+               },
+               
+               _dirtyObjects: [],
+               
+               changing: function(object,_deleting){
+                       // summary:
+                       //              adds an object to the list of dirty objects.  This object
+                       //              contains a reference to the object itself as well as a
+                       //              cloned and trimmed version of old object for use with
+                       //              revert.
+                       object.__isDirty = true;
+                       //if an object is already in the list of dirty objects, don't add it again
+                       //or it will overwrite the premodification data set.
+                       for(var i=0; i<this._dirtyObjects.length; i++){
+                               var dirty = this._dirtyObjects[i];
+                               if(object==dirty.object){
+                                       if(_deleting){
+                                               // we are deleting, no object is an indicator of deletiong
+                                               dirty.object = false;
+                                               if(!this._saveNotNeeded){
+                                                       dirty.save = true;
+                                               }
+                                       }
+                                       return;
+                               }
+                       }
+                       var old = object instanceof Array ? [] : {};
+                       for(i in object){
+                               if(object.hasOwnProperty(i)){
+                                       old[i] = object[i];
+                               }
+                       }
+                       this._dirtyObjects.push({object: !_deleting && object, old: old, save: !this._saveNotNeeded});
+               },
+               
+               save: function(kwArgs){
+                       // summary:
+                       //              Saves the dirty data using object store provider. See dojo.data.api.Write for API.
+                       //
+                       //      kwArgs.global:
+                       //              This will cause the save to commit the dirty data for all
+                       //              ObjectStores as a single transaction.
+                       //
+                       //      kwArgs.revertOnError
+                       //              This will cause the changes to be reverted if there is an
+                       //              error on the save. By default a revert is executed unless
+                       //              a value of false is provide for this parameter.
+
+                       kwArgs = kwArgs || {};
+                       var result, actions = [];
+                       var alreadyRecorded = {};
+                       var savingObjects = [];
+                       var self;
+                       var dirtyObjects = this._dirtyObjects;
+                       var left = dirtyObjects.length;// this is how many changes are remaining to be received from the server
+                       try{
+                               dojo.connect(kwArgs,"onError",function(){
+                                       if(kwArgs.revertOnError !== false){
+                                               var postCommitDirtyObjects = dirtyObjects;
+                                               dirtyObjects = savingObjects;
+                                               var numDirty = 0; // make sure this does't do anything if it is called again
+                                               jr.revert(); // revert if there was an error
+                                               self._dirtyObjects = postCommitDirtyObjects;
+                                       }
+                                       else{
+                                               self._dirtyObjects = dirtyObject.concat(savingObjects);
+                                       }
+                               });
+                               if(this.objectStore.transaction){
+                                       var transaction = this.objectStore.transaction();
+                               }
+                               for(var i = 0; i < dirtyObjects.length; i++){
+                                       var dirty = dirtyObjects[i];
+                                       var object = dirty.object;
+                                       var old = dirty.old;
+                                       delete object.__isDirty;
+                                       if(object){
+                                               result = this.objectStore.put(object, {overwrite: !!old});
+                                       }
+                                       else{
+                                               result = this.objectStore.remove(this.getIdentity(old));
+                                       }
+                                       savingObjects.push(dirty);
+                                       dirtyObjects.splice(i--,1);
+                                       dojo.when(result, function(value){
+                                               if(!(--left)){
+                                                       if(kwArgs.onComplete){
+                                                               kwArgs.onComplete.call(kwArgs.scope, actions);
+                                                       }
+                                               }
+                                       },function(value){
+                                               
+                                               // on an error we want to revert, first we want to separate any changes that were made since the commit
+                                               left = -1; // first make sure that success isn't called
+                                               kwArgs.onError.call(kwArgs.scope, value);
+                                       });
+                                       
+                               }
+                               if(transaction){
+                                       transaction.commit();
+                               }
+                       }catch(e){
+                               kwArgs.onError.call(kwArgs.scope, value);
+                       }
+                       
+                       
+               },
+
+               revert: function(kwArgs){
+                       // summary
+                       //              returns any modified data to its original state prior to a save();
+                       //
+                       var dirtyObjects = this._dirtyObjects;
+                       for(var i = dirtyObjects.length; i > 0;){
+                               i--;
+                               var dirty = dirtyObjects[i];
+                               var object = dirty.object;
+                               var old = dirty.old;
+                               if(object && old){
+                                       // changed
+                                       for(var j in old){
+                                               if(old.hasOwnProperty(j) && object[j] !== old[j]){
+                                                       this.onSet(object, j, object[j], old[j]);
+                                                       object[j] = old[j];
+                                               }
+                                       }
+                                       for(j in object){
+                                               if(!old.hasOwnProperty(j)){
+                                                       this.onSet(object, j, object[j]);
+                                                       delete object[j];
+                                               }
+                                       }
+                               }else if(!old){
+                                       // was an addition, remove it
+                                       this.onDelete(object);
+                               }else{
+                                       // was a deletion, we will add it back
+                                       this.onNew(old);
+                               }
+                               delete (object || old).__isDirty;
+                               dirtyObjects.splice(i, 1);
+                       }
+                       
+                       
+               },
+               isDirty: function(item){
+                       // summary
+                       //              returns true if the item is marked as dirty or true if there are any dirty items
+                       if(!item){
+                               return !!this._dirtyObjects.length;
+                       }
+                       return item.__isDirty;
+               },
+               //Notifcation Support
+
+               onSet: function(){},
+               onNew: function(){},
+               onDelete:       function(){}
+       }
+);
+
+}
index 7a1caeb5373dd17e780c4e3ce8dc0be265129bfc..9d99f3d64bfe9aa45662102df69bfd9d721b7d95 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,6 +10,7 @@ dojo._hasResource["dojo.data.api.Identity"] = true;
 dojo.provide("dojo.data.api.Identity");
 dojo.require("dojo.data.api.Read");
 
+
 dojo.declare("dojo.data.api.Identity", dojo.data.api.Read, {
        //      summary:
        //              This is an abstract API that data provider implementations conform to.
@@ -17,7 +18,7 @@ dojo.declare("dojo.data.api.Identity", dojo.data.api.Read, {
        //              methods unimplemented.
 
        getFeatures: function(){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getFeatures()
                return {
                         'dojo.data.api.Read': true,
@@ -45,16 +46,16 @@ dojo.declare("dojo.data.api.Identity", dojo.data.api.Read, {
 
        getIdentityAttributes: function(/* item */ item){
                //      summary:
-               //              Returns an array of attribute names that are used to generate the identity. 
+               //              Returns an array of attribute names that are used to generate the identity.
                //              For most stores, this is a single attribute, but for some complex stores
                //              such as RDB backed stores that use compound (multi-attribute) identifiers
                //              it can be more than one.  If the identity is not composed of attributes
                //              on the item, it will return null.  This function is intended to identify
                //              the attributes that comprise the identity so that so that during a render
-               //              of all attributes, the UI can hide the the identity information if it 
+               //              of all attributes, the UI can hide the the identity information if it
                //              chooses.
                //      item:
-               //              The item from the store from which to obtain the array of public attributes that 
+               //              The item from the store from which to obtain the array of public attributes that
                //              compose the identifier, if any.
                //      example:
                //      |       var itemId = store.getIdentity(kermit);
@@ -67,14 +68,14 @@ dojo.declare("dojo.data.api.Identity", dojo.data.api.Read, {
 
        fetchItemByIdentity: function(/* object */ keywordArgs){
                //      summary:
-               //              Given the identity of an item, this method returns the item that has 
-               //              that identity through the onItem callback.  Conforming implementations 
-               //              should return null if there is no item with the given identity.  
-               //              Implementations of fetchItemByIdentity() may sometimes return an item 
-               //              from a local cache and may sometimes fetch an item from a remote server, 
+               //              Given the identity of an item, this method returns the item that has
+               //              that identity through the onItem callback.  Conforming implementations
+               //              should return null if there is no item with the given identity.
+               //              Implementations of fetchItemByIdentity() may sometimes return an item
+               //              from a local cache and may sometimes fetch an item from a remote server,
                //
                //      keywordArgs:
-               //              An anonymous object that defines the item to locate and callbacks to invoke when the 
+               //              An anonymous object that defines the item to locate and callbacks to invoke when the
                //              item has been located and load has completed.  The format of the object is as follows:
                //              {
                //                      identity: string|object,
@@ -84,9 +85,9 @@ dojo.declare("dojo.data.api.Identity", dojo.data.api.Read, {
                //              }
                //      The *identity* parameter.
                //              The identity parameter is the identity of the item you wish to locate and load
-               //              This attribute is required.  It should be a string or an object that toString() 
+               //              This attribute is required.  It should be a string or an object that toString()
                //              can be called on.
-               //              
+               //
                //      The *onItem* parameter.
                //              Function(item)
                //              The onItem parameter is the callback to invoke when the item has been loaded.  It takes only one
@@ -98,12 +99,12 @@ dojo.declare("dojo.data.api.Identity", dojo.data.api.Read, {
                //              parameter, the error object
                //
                //      The *scope* parameter.
-               //              If a scope object is provided, all of the callback functions (onItem, 
+               //              If a scope object is provided, all of the callback functions (onItem,
                //              onError, etc) will be invoked in the context of the scope object.
                //              In the body of the callback function, the value of the "this"
                //              keyword will be the scope object.   If no scope object is provided,
                //              the callback functions will be called in the context of dojo.global.
-               //              For example, onItem.call(scope, item, request) vs. 
+               //              For example, onItem.call(scope, item, request) vs.
                //              onItem.call(dojo.global, item, request)
                if(!this.isItemLoaded(keywordArgs.item)){
                        throw new Error('Unimplemented API: dojo.data.api.Identity.fetchItemByIdentity');
index b1abad797f2564d3eb08c9ec8a4d22f71ef90db0..33daa3010f66ac075f0722bdba7308f7ddf8fbbb 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,6 +10,7 @@ dojo._hasResource["dojo.data.api.Notification"] = true;
 dojo.provide("dojo.data.api.Notification");
 dojo.require("dojo.data.api.Read");
 
+
 dojo.declare("dojo.data.api.Notification", dojo.data.api.Read, {
        //      summary:
        //              This is an abstract API that data provider implementations conform to.
@@ -18,12 +19,12 @@ dojo.declare("dojo.data.api.Notification", dojo.data.api.Read, {
        //
        //      description:
        //              This API defines a set of APIs that all datastores that conform to the
-       //              Notifications API must implement.  In general, most stores will implement 
+       //              Notifications API must implement.  In general, most stores will implement
        //              these APIs as no-op functions for users who wish to monitor them to be able
-       //              to connect to then via dojo.connect().  For non-users of dojo.connect, 
+       //              to connect to then via dojo.connect().  For non-users of dojo.connect,
        //              they should be able to just replace the function on the store to obtain
        //               notifications.  Both read-only and read-write stores may implement
-       //              this feature.  In the case of a read-only store, this feature makes sense if 
+       //              this feature.  In the case of a read-only store, this feature makes sense if
        //              the store itself does internal polling to a back-end server and periodically updates
        //              its cache of items (deletes, adds, and updates).
        //
@@ -36,7 +37,7 @@ dojo.declare("dojo.data.api.Notification", dojo.data.api.Read, {
        //      |       dojo.connect(store, "onSet", onSet);
 
        getFeatures: function(){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getFeatures()
                return {
                        'dojo.data.api.Read': true,
@@ -44,16 +45,16 @@ dojo.declare("dojo.data.api.Notification", dojo.data.api.Read, {
                };
        },
 
-       onSet: function(/* item */ item, 
-                                       /* attribute-name-string */ attribute, 
+       onSet: function(/* item */ item,
+                                       /* attribute-name-string */ attribute,
                                        /* object | array */ oldValue,
                                        /* object | array */ newValue){
                //      summary:
-               //              This function is called any time an item is modified via setValue, setValues, unsetAttribute, etc.  
+               //              This function is called any time an item is modified via setValue, setValues, unsetAttribute, etc.
                //      description:
-               //              This function is called any time an item is modified via setValue, setValues, unsetAttribute, etc.  
-               //              Its purpose is to provide a hook point for those who wish to monitor actions on items in the store 
-               //              in a simple manner.  The general expected usage is to dojo.connect() to the store's 
+               //              This function is called any time an item is modified via setValue, setValues, unsetAttribute, etc.
+               //              Its purpose is to provide a hook point for those who wish to monitor actions on items in the store
+               //              in a simple manner.  The general expected usage is to dojo.connect() to the store's
                //              implementation and be called after the store function is called.
                //
                //      item:
@@ -62,11 +63,11 @@ dojo.declare("dojo.data.api.Notification", dojo.data.api.Read, {
                //              The attribute being changed represented as a string name.
                //      oldValue:
                //              The old value of the attribute.  In the case of single value calls, such as setValue, unsetAttribute, etc,
-               //              this value will be generally be an atomic value of some sort (string, int, etc, object).  In the case of 
+               //              this value will be generally be an atomic value of some sort (string, int, etc, object).  In the case of
                //              multi-valued attributes, it will be an array.
                //      newValue:
-               //              The new value of the attribute.  In the case of single value calls, such as setValue, this value will be 
-               //              generally be an atomic value of some sort (string, int, etc, object).  In the case of multi-valued attributes, 
+               //              The new value of the attribute.  In the case of single value calls, such as setValue, this value will be
+               //              generally be an atomic value of some sort (string, int, etc, object).  In the case of multi-valued attributes,
                //              it will be an array.  In the case of unsetAttribute, the new value will be 'undefined'.
                //
                //      returns:
@@ -93,12 +94,12 @@ dojo.declare("dojo.data.api.Notification", dojo.data.api.Read, {
                //              {
                //                      item: someItem,                                                 //The parent item
                //                      attribute:      "attribute-name-string",        //The attribute the new item was assigned to.
-               //                      oldValue: something     //Whatever was the previous value for the attribute.  
+               //                      oldValue: something     //Whatever was the previous value for the attribute.
                //                                              //If it is a single-value attribute only, then this value will be a single value.
                //                                              //If it was a multi-valued attribute, then this will be an array of all the values minues the new one.
                //                      newValue: something     //The new value of the attribute.  In the case of single value calls, such as setValue, this value will be
                //                                              //generally be an atomic value of some sort (string, int, etc, object).  In the case of multi-valued attributes,
-               //                                              //it will be an array.  
+               //                                              //it will be an array.
                //              }
                //
                //      returns:
index 0a84aa5f96cfaa1bc9ed8898c5950e53f0c2365a..ff8518cd48ed4df7575e2e9ba9a86a8e0e0c7ac5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,26 +10,27 @@ dojo._hasResource["dojo.data.api.Read"] = true;
 dojo.provide("dojo.data.api.Read");
 dojo.require("dojo.data.api.Request");
 
+
 dojo.declare("dojo.data.api.Read", null, {
        //      summary:
-       //              This is an abstract API that data provider implementations conform to.  
+       //              This is an abstract API that data provider implementations conform to.
        //              This file defines methods signatures and intentionally leaves all the
-       //              methods unimplemented.  For more information on the dojo.data APIs, 
+       //              methods unimplemented.  For more information on the dojo.data APIs,
        //              please visit: http://www.dojotoolkit.org/node/98
 
-       getValue: function(     /* item */ item, 
-                                               /* attribute-name-string */ attribute, 
+       getValue: function(     /* item */ item,
+                                               /* attribute-name-string */ attribute,
                                                /* value? */ defaultValue){
                //      summary:
                //              Returns a single attribute value.
                //              Returns defaultValue if and only if *item* does not have a value for *attribute*.
                //              Returns null if and only if null was explicitly set as the attribute value.
                //              Returns undefined if and only if the item does not have a value for the
-               //              given attribute (which is the same as saying the item does not have the attribute). 
+               //              given attribute (which is the same as saying the item does not have the attribute).
                // description:
                //              Saying that an "item x does not have a value for an attribute y"
-               //              is identical to saying that an "item x does not have attribute y". 
-               //              It is an oxymoron to say "that attribute is present but has no values" 
+               //              is identical to saying that an "item x does not have attribute y".
+               //              It is an oxymoron to say "that attribute is present but has no values"
                //              or "the item has that attribute but does not have any attribute values".
                //              If store.hasAttribute(item, attribute) returns false, then
                //              store.getValue(item, attribute) will return undefined.
@@ -112,7 +113,7 @@ dojo.declare("dojo.data.api.Read", null, {
        },
 
        containsValue: function(/* item */ item,
-                                                       /* attribute-name-string */ attribute, 
+                                                       /* attribute-name-string */ attribute,
                                                        /* anything */ value){
                //      summary:
                //              Returns true if the given *value* is one of the values that getValues()
@@ -135,8 +136,8 @@ dojo.declare("dojo.data.api.Read", null, {
 
        isItem: function(/* anything */ something){
                //      summary:
-               //              Returns true if *something* is an item and came from the store instance.  
-               //              Returns false if *something* is a literal, an item from another store instance, 
+               //              Returns true if *something* is an item and came from the store instance.
+               //              Returns false if *something* is a literal, an item from another store instance,
                //              or is any object other than an item.
                //
                //      something:
@@ -173,9 +174,9 @@ dojo.declare("dojo.data.api.Read", null, {
                //              isItemLoaded() returns true before loadItem() is even called,
                //              then loadItem() need not do any work at all and will not even invoke
                //              the callback handlers.  So, before invoking this method, check that
-               //              the item has not already been loaded.  
+               //              the item has not already been loaded.
                //      keywordArgs:
-               //              An anonymous object that defines the item to load and callbacks to invoke when the 
+               //              An anonymous object that defines the item to load and callbacks to invoke when the
                //              load has completed.  The format of the object is as follows:
                //              {
                //                      item: object,
@@ -198,12 +199,12 @@ dojo.declare("dojo.data.api.Read", null, {
                //              parameter, the error object
                //
                //      The *scope* parameter.
-               //              If a scope object is provided, all of the callback functions (onItem, 
+               //              If a scope object is provided, all of the callback functions (onItem,
                //              onError, etc) will be invoked in the context of the scope object.
                //              In the body of the callback function, the value of the "this"
                //              keyword will be the scope object.   If no scope object is provided,
                //              the callback functions will be called in the context of dojo.global().
-               //              For example, onItem.call(scope, item, request) vs. 
+               //              For example, onItem.call(scope, item, request) vs.
                //              onItem.call(dojo.global(), item, request)
                if(!this.isItemLoaded(keywordArgs.item)){
                        throw new Error('Unimplemented API: dojo.data.api.Read.loadItem');
@@ -214,25 +215,25 @@ dojo.declare("dojo.data.api.Read", null, {
                //      summary:
                //              Given a query and set of defined options, such as a start and count of items to return,
                //              this method executes the query and makes the results available as data items.
-               //              The format and expectations of stores is that they operate in a generally asynchronous 
+               //              The format and expectations of stores is that they operate in a generally asynchronous
                //              manner, therefore callbacks are always used to return items located by the fetch parameters.
                //
                //      description:
                //              A Request object will always be returned and is returned immediately.
-               //              The basic request is nothing more than the keyword args passed to fetch and 
-               //              an additional function attached, abort().  The returned request object may then be used 
-               //              to cancel a fetch.  All data items returns are passed through the callbacks defined in the 
+               //              The basic request is nothing more than the keyword args passed to fetch and
+               //              an additional function attached, abort().  The returned request object may then be used
+               //              to cancel a fetch.  All data items returns are passed through the callbacks defined in the
                //              fetch parameters and are not present on the 'request' object.
                //
                //              This does not mean that custom stores can not add methods and properties to the request object
-               //              returned, only that the API does not require it.  For more info about the Request API, 
+               //              returned, only that the API does not require it.  For more info about the Request API,
                //              see dojo.data.api.Request
                //
                //      keywordArgs:
-               //              The keywordArgs parameter may either be an instance of 
+               //              The keywordArgs parameter may either be an instance of
                //              conforming to dojo.data.api.Request or may be a simple anonymous object
                //              that may contain any of the following:
-               //              { 
+               //              {
                //                      query: query-object or query-string,
                //                      queryOptions: object,
                //                      onBegin: Function,
@@ -245,10 +246,10 @@ dojo.declare("dojo.data.api.Read", null, {
                //                      sort: array
                //              }
                //              All implementations should accept keywordArgs objects with any of
-               //              the 9 standard properties: query, onBegin, onItem, onComplete, onError 
-               //              scope, sort, start, and count.  Some implementations may accept additional 
-               //              properties in the keywordArgs object as valid parameters, such as 
-               //              {includeOutliers:true}.         
+               //              the 9 standard properties: query, onBegin, onItem, onComplete, onError
+               //              scope, sort, start, and count.  Some implementations may accept additional
+               //              properties in the keywordArgs object as valid parameters, such as
+               //              {includeOutliers:true}.
                //
                //      The *query* parameter.
                //              The query may be optional in some data store implementations.
@@ -256,28 +257,28 @@ dojo.declare("dojo.data.api.Read", null, {
                //              of the query itself -- each different data store implementation
                //              may have its own notion of what a query should look like.
                //              However, as of dojo 0.9, 1.0, and 1.1, all the provided datastores in dojo.data
-               //              and dojox.data support an object structure query, where the object is a set of 
+               //              and dojox.data support an object structure query, where the object is a set of
                //              name/value parameters such as { attrFoo: valueBar, attrFoo1: valueBar1}.  Most of the
-               //              dijit widgets, such as ComboBox assume this to be the case when working with a datastore 
-               //              when they dynamically update the query.  Therefore, for maximum compatibility with dijit 
+               //              dijit widgets, such as ComboBox assume this to be the case when working with a datastore
+               //              when they dynamically update the query.  Therefore, for maximum compatibility with dijit
                //              widgets the recommended query parameter is a key/value object.  That does not mean that the
-               //              the datastore may not take alternative query forms, such as a simple string, a Date, a number, 
-               //              or a mix of such.  Ultimately, The dojo.data.api.Read API is agnostic about what the query 
-               //              format.  
-               //              Further note:  In general for query objects that accept strings as attribute 
-               //              value matches, the store should also support basic filtering capability, such as * 
+               //              the datastore may not take alternative query forms, such as a simple string, a Date, a number,
+               //              or a mix of such.  Ultimately, The dojo.data.api.Read API is agnostic about what the query
+               //              format.
+               //              Further note:  In general for query objects that accept strings as attribute
+               //              value matches, the store should also support basic filtering capability, such as *
                //              (match any character) and ? (match single character).  An example query that is a query object
-               //              would be like: { attrFoo: "value*"}.  Which generally means match all items where they have 
+               //              would be like: { attrFoo: "value*"}.  Which generally means match all items where they have
                //              an attribute named attrFoo, with a value that starts with 'value'.
                //
                //      The *queryOptions* parameter
                //              The queryOptions parameter is an optional parameter used to specify optiosn that may modify
                //              the query in some fashion, such as doing a case insensitive search, or doing a deep search
-               //              where all items in a hierarchical representation of data are scanned instead of just the root 
+               //              where all items in a hierarchical representation of data are scanned instead of just the root
                //              items.  It currently defines two options that all datastores should attempt to honor if possible:
                //              {
                //                      ignoreCase: boolean, //Whether or not the query should match case sensitively or not.  Default behaviour is false.
-               //                      deep: boolean   //Whether or not a fetch should do a deep search of items and all child 
+               //                      deep: boolean   //Whether or not a fetch should do a deep search of items and all child
                //                                                      //items instead of just root-level items in a datastore.  Default is false.
                //              }
                //
@@ -287,14 +288,14 @@ dojo.declare("dojo.data.api.Read", null, {
                //              will be called just once, before the first onItem callback is called.
                //              The onBegin callback function will be passed two arguments, the
                //              the total number of items identified and the Request object.  If the total number is
-               //              unknown, then size will be -1.  Note that size is not necessarily the size of the 
-               //              collection of items returned from the query, as the request may have specified to return only a 
+               //              unknown, then size will be -1.  Note that size is not necessarily the size of the
+               //              collection of items returned from the query, as the request may have specified to return only a
                //              subset of the total set of items through the use of the start and count parameters.
                //
                //      The *onItem* parameter.
                //              function(item, request);
                //              If an onItem callback function is provided, the callback function
-               //              will be called as each item in the result is received. The callback 
+               //              will be called as each item in the result is received. The callback
                //              function will be passed two arguments: the item itself, and the
                //              Request object.
                //
@@ -304,12 +305,12 @@ dojo.declare("dojo.data.api.Read", null, {
                //              If an onComplete callback function is provided, the callback function
                //              will be called just once, after the last onItem callback is called.
                //              Note that if the onItem callback is not present, then onComplete will be passed
-               //              an array containing all items which matched the query and the request object.  
-               //              If the onItem callback is present, then onComplete is called as: 
+               //              an array containing all items which matched the query and the request object.
+               //              If the onItem callback is present, then onComplete is called as:
                //              onComplete(null, request).
                //
                //      The *onError* parameter.
-               //              function(errorData, request); 
+               //              function(errorData, request);
                //              If an onError callback function is provided, the callback function
                //              will be called if there is any sort of error while attempting to
                //              execute the query.
@@ -317,29 +318,29 @@ dojo.declare("dojo.data.api.Read", null, {
                //              an Error object and the Request object.
                //
                //      The *scope* parameter.
-               //              If a scope object is provided, all of the callback functions (onItem, 
+               //              If a scope object is provided, all of the callback functions (onItem,
                //              onComplete, onError, etc) will be invoked in the context of the scope
                //              object.  In the body of the callback function, the value of the "this"
                //              keyword will be the scope object.   If no scope object is provided,
-               //              the callback functions will be called in the context of dojo.global().  
-               //              For example, onItem.call(scope, item, request) vs. 
+               //              the callback functions will be called in the context of dojo.global().
+               //              For example, onItem.call(scope, item, request) vs.
                //              onItem.call(dojo.global(), item, request)
                //
                //      The *start* parameter.
-               //              If a start parameter is specified, this is a indication to the datastore to 
+               //              If a start parameter is specified, this is a indication to the datastore to
                //              only start returning items once the start number of items have been located and
                //              skipped.  When this parameter is paired withh 'count', the store should be able
-               //              to page across queries with millions of hits by only returning subsets of the 
+               //              to page across queries with millions of hits by only returning subsets of the
                //              hits for each query
                //
                //      The *count* parameter.
-               //              If a count parameter is specified, this is a indication to the datastore to 
-               //              only return up to that many items.  This allows a fetch call that may have 
-               //              millions of item matches to be paired down to something reasonable.  
+               //              If a count parameter is specified, this is a indication to the datastore to
+               //              only return up to that many items.  This allows a fetch call that may have
+               //              millions of item matches to be paired down to something reasonable.
                //
                //      The *sort* parameter.
-               //              If a sort parameter is specified, this is a indication to the datastore to 
-               //              sort the items in some manner before returning the items.  The array is an array of 
+               //              If a sort parameter is specified, this is a indication to the datastore to
+               //              sort the items in some manner before returning the items.  The array is an array of
                //              javascript objects that must conform to the following format to be applied to the
                //              fetching of items:
                //              {
@@ -347,18 +348,18 @@ dojo.declare("dojo.data.api.Read", null, {
                //                      descending: true|false;   // Optional.  Default is false.
                //              }
                //              Note that when comparing attributes, if an item contains no value for the attribute
-               //              (undefined), then it the default ascending sort logic should push it to the bottom 
+               //              (undefined), then it the default ascending sort logic should push it to the bottom
                //              of the list.  In the descending order case, it such items should appear at the top of the list.
-               // 
+               //
                //      returns:
                //              The fetch() method will return a javascript object conforming to the API
                //              defined in dojo.data.api.Request.  In general, it will be the keywordArgs
                //              object returned with the required functions in Request.js attached.
                //              Its general purpose is to provide a convenient way for a caller to abort an
-               //              ongoing fetch.  
-               // 
+               //              ongoing fetch.
+               //
                //              The Request object may also have additional properties when it is returned
-               //              such as request.store property, which is a pointer to the datastore object that 
+               //              such as request.store property, which is a pointer to the datastore object that
                //              fetch() is a method of.
                //
                //      exceptions:
@@ -373,7 +374,7 @@ dojo.declare("dojo.data.api.Read", null, {
                //              |       var request = store.fetch(onComplete: showEverything);
                //      example:
                //              Fetch only 10 books that match the query 'all books', starting at the fifth book found during the search.
-               //              This demonstrates how paging can be done for specific queries.  
+               //              This demonstrates how paging can be done for specific queries.
                //              |       var request = store.fetch({query:"all books", start: 4, count: 10, onComplete: showBooks});
                //      example:
                //              Fetch all items that match the query, calling 'callback' each time an item is located.
@@ -412,21 +413,21 @@ dojo.declare("dojo.data.api.Read", null, {
                //              and then when the user presses the "Next Page" button...
                //              |       fetchArgs.start += 20;
                //              |       store.fetch(fetchArgs);  // get the next 20 items
-               var request = null; 
+               var request = null;
                throw new Error('Unimplemented API: dojo.data.api.Read.fetch');
                return request; // an object conforming to the dojo.data.api.Request API
        },
 
        getFeatures: function(){
                //      summary:
-               //              The getFeatures() method returns an simple keyword values object 
-               //              that specifies what interface features the datastore implements.  
-               //              A simple CsvStore may be read-only, and the only feature it 
+               //              The getFeatures() method returns an simple keyword values object
+               //              that specifies what interface features the datastore implements.
+               //              A simple CsvStore may be read-only, and the only feature it
                //              implements will be the 'dojo.data.api.Read' interface, so the
                //              getFeatures() method will return an object like this one:
                //              {'dojo.data.api.Read': true}.
                //              A more sophisticated datastore might implement a variety of
-               //              interface features, like 'dojo.data.api.Read', 'dojo.data.api.Write', 
+               //              interface features, like 'dojo.data.api.Read', 'dojo.data.api.Write',
                //              'dojo.data.api.Identity', and 'dojo.data.api.Attribution'.
                return {
                        'dojo.data.api.Read': true
@@ -435,14 +436,14 @@ dojo.declare("dojo.data.api.Read", null, {
 
        close: function(/*dojo.data.api.Request || keywordArgs || null */ request){
                //      summary:
-               //              The close() method is intended for instructing the store to 'close' out 
+               //              The close() method is intended for instructing the store to 'close' out
                //              any information associated with a particular request.
                //
                //      description:
-               //              The close() method is intended for instructing the store to 'close' out 
+               //              The close() method is intended for instructing the store to 'close' out
                //              any information associated with a particular request.  In general, this API
-               //              expects to recieve as a parameter a request object returned from a fetch.  
-               //              It will then close out anything associated with that request, such as 
+               //              expects to recieve as a parameter a request object returned from a fetch.
+               //              It will then close out anything associated with that request, such as
                //              clearing any internal datastore caches and closing any 'open' connections.
                //              For some store implementations, this call may be a no-op.
                //
@@ -450,7 +451,7 @@ dojo.declare("dojo.data.api.Read", null, {
                //              An instance of a request for the store to use to identify what to close out.
                //              If no request is passed, then the store should clear all internal caches (if any)
                //              and close out all 'open' connections.  It does not render the store unusable from
-               //              there on, it merely cleans out any current data and resets the store to initial 
+               //              there on, it merely cleans out any current data and resets the store to initial
                //              state.
                //
                //      example:
@@ -463,7 +464,7 @@ dojo.declare("dojo.data.api.Read", null, {
        getLabel: function(/* item */ item){
                //      summary:
                //              Method to inspect the item and return a user-readable 'label' for the item
-               //              that provides a general/adequate description of what the item is. 
+               //              that provides a general/adequate description of what the item is.
                //
                //      description:
                //              Method to inspect the item and return a user-readable 'label' for the item
@@ -471,17 +472,17 @@ dojo.declare("dojo.data.api.Read", null, {
                //              most labels will be a specific attribute value or collection of the attribute
                //              values that combine to label the item in some manner.  For example for an item
                //              that represents a person it may return the label as:  "firstname lastlame" where
-               //              the firstname and lastname are attributes on the item.  If the store is unable 
+               //              the firstname and lastname are attributes on the item.  If the store is unable
                //              to determine an adequate human readable label, it should return undefined.  Users that wish
-               //              to customize how a store instance labels items should replace the getLabel() function on 
-               //              their instance of the store, or extend the store and replace the function in 
+               //              to customize how a store instance labels items should replace the getLabel() function on
+               //              their instance of the store, or extend the store and replace the function in
                //              the extension class.
                //
                //      item:
                //              The item to return the label for.
                //
-               //      returns: 
-               //              A user-readable string representing the item or undefined if no user-readable label can 
+               //      returns:
+               //              A user-readable string representing the item or undefined if no user-readable label can
                //              be generated.
                throw new Error('Unimplemented API: dojo.data.api.Read.getLabel');
                return undefined;
@@ -489,21 +490,21 @@ dojo.declare("dojo.data.api.Read", null, {
 
        getLabelAttributes: function(/* item */ item){
                //      summary:
-               //              Method to inspect the item and return an array of what attributes of the item were used 
+               //              Method to inspect the item and return an array of what attributes of the item were used
                //              to generate its label, if any.
                //
                //      description:
-               //              Method to inspect the item and return an array of what attributes of the item were used 
+               //              Method to inspect the item and return an array of what attributes of the item were used
                //              to generate its label, if any.  This function is to assist UI developers in knowing what
                //              attributes can be ignored out of the attributes an item has when displaying it, in cases
-               //              where the UI is using the label as an overall identifer should they wish to hide 
+               //              where the UI is using the label as an overall identifer should they wish to hide
                //              redundant information.
                //
                //      item:
                //              The item to return the list of label attributes for.
                //
-               //      returns: 
-               //              An array of attribute names that were used to generate the label, or null if public attributes 
+               //      returns:
+               //              An array of attribute names that were used to generate the label, or null if public attributes
                //              were not used to generate the label.
                throw new Error('Unimplemented API: dojo.data.api.Read.getLabelAttributes');
                return null;
index d613c7b1189dfd97a163e714baef50b5dc9537fe..5c94cb5e0743e3267f2537eee27cec90d4876fd9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,16 +9,17 @@ if(!dojo._hasResource["dojo.data.api.Request"]){ //_hasResource checks added by
 dojo._hasResource["dojo.data.api.Request"] = true;
 dojo.provide("dojo.data.api.Request");
 
+
 dojo.declare("dojo.data.api.Request", null, {
        //      summary:
        //              This class defines out the semantics of what a 'Request' object looks like
        //              when returned from a fetch() method.  In general, a request object is
-       //              nothing more than the original keywordArgs from fetch with an abort function 
-       //              attached to it to allow users to abort a particular request if they so choose. 
+       //              nothing more than the original keywordArgs from fetch with an abort function
+       //              attached to it to allow users to abort a particular request if they so choose.
        //              No other functions are required on a general Request object return.  That does not
        //              inhibit other store implementations from adding extentions to it, of course.
        //
-       //              This is an abstract API that data provider implementations conform to.  
+       //              This is an abstract API that data provider implementations conform to.
        //              This file defines methods signatures and intentionally leaves all the
        //              methods unimplemented.
        //
@@ -26,10 +27,10 @@ dojo.declare("dojo.data.api.Request", null, {
 
        abort: function(){
                //      summary:
-               //              This function is a hook point for stores to provide as a way for 
+               //              This function is a hook point for stores to provide as a way for
                //              a fetch to be halted mid-processing.
                //      description:
-               //              This function is a hook point for stores to provide as a way for 
+               //              This function is a hook point for stores to provide as a way for
                //              a fetch to be halted mid-processing.  For more details on the fetch() api,
                //              please see dojo.data.api.Read.fetch().
                throw new Error('Unimplemented API: dojo.data.api.Request.abort');
index 3fd0b1af02bafae1708c81b53037818712527876..08779180bbd0f565049c47ac1036e7a2f3a25177 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,14 +10,15 @@ dojo._hasResource["dojo.data.api.Write"] = true;
 dojo.provide("dojo.data.api.Write");
 dojo.require("dojo.data.api.Read");
 
+
 dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
        //      summary:
-       //              This is an abstract API that data provider implementations conform to.  
+       //              This is an abstract API that data provider implementations conform to.
        //              This file defines function signatures and intentionally leaves all the
        //              functionss unimplemented.
 
        getFeatures: function(){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getFeatures()
                return {
                        'dojo.data.api.Read': true,
@@ -31,16 +32,16 @@ dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
                //              item based on the *keywordArgs* provided.  In general, the attribute
                //              names in the keywords become the attributes in the new item and as for
                //              the attribute values in keywordArgs, they become the values of the attributes
-               //              in the new item.  In addition, for stores that support hierarchical item 
+               //              in the new item.  In addition, for stores that support hierarchical item
                //              creation, an optional second parameter is accepted that defines what item is the parent
                //              of the new item and what attribute of that item should the new item be assigned to.
                //              In general, this will assume that the attribute targetted is multi-valued and a new item
-               //              is appended onto the list of values for that attribute.  
+               //              is appended onto the list of values for that attribute.
                //
                //      keywordArgs:
                //              A javascript object defining the initial content of the item as a set of JavaScript 'property name: value' pairs.
                //      parentInfo:
-               //              An optional javascript object defining what item is the parent of this item (in a hierarchical store.  Not all stores do hierarchical items), 
+               //              An optional javascript object defining what item is the parent of this item (in a hierarchical store.  Not all stores do hierarchical items),
                //              and what attribute of that parent to assign the new item to.  If this is present, and the attribute specified
                //              is a multi-valued attribute, it will append this item into the array of values for that attribute.  The structure
                //              of the object is as follows:
@@ -51,7 +52,7 @@ dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
                //
                //      exceptions:
                //              Throws an exception if *keywordArgs* is a string or a number or
-               //              anything other than a simple anonymous object.  
+               //              anything other than a simple anonymous object.
                //              Throws an exception if the item in parentInfo is not an item from the store
                //              or if the attribute isn't an attribute name string.
                //      example:
@@ -66,11 +67,11 @@ dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
                //      summary:
                //              Deletes an item from the store.
                //
-               //      item: 
+               //      item:
                //              The item to delete.
                //
                //      exceptions:
-               //              Throws an exception if the argument *item* is not an item 
+               //              Throws an exception if the argument *item* is not an item
                //              (if store.isItem(item) returns false).
                //      example:
                //      |       var success = store.deleteItem(kermit);
@@ -78,7 +79,7 @@ dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
                return false; // boolean
        },
 
-       setValue: function(     /* item */ item, 
+       setValue: function(     /* item */ item,
                                                /* string */ attribute,
                                                /* almost anything */ value){
                //      summary:
@@ -103,7 +104,7 @@ dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
        },
 
        setValues: function(/* item */ item,
-                                               /* string */ attribute, 
+                                               /* string */ attribute,
                                                /* array */ values){
                //      summary:
                //              Adds each value in the *values* array as a value of the given
@@ -130,7 +131,7 @@ dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
                return false; // boolean
        },
 
-       unsetAttribute: function(       /* item */ item, 
+       unsetAttribute: function(       /* item */ item,
                                                                /* string */ attribute){
                //      summary:
                //              Deletes all the values of an attribute on an item.
@@ -154,9 +155,9 @@ dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
                //      summary:
                //              Saves to the server all the changes that have been made locally.
                //              The save operation may take some time and is generally performed
-               //              in an asynchronous fashion.  The outcome of the save action is 
+               //              in an asynchronous fashion.  The outcome of the save action is
                //              is passed into the set of supported callbacks for the save.
-               //   
+               //
                //      keywordArgs:
                //              {
                //                      onComplete: function
@@ -172,7 +173,7 @@ dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
                //              are generally passed to the onComplete.
                //
                //      The *onError* parameter.
-               //              function(errorData); 
+               //              function(errorData);
                //
                //              If an onError callback function is provided, the callback function
                //              will be called if there is any sort of error while attempting to
@@ -184,12 +185,12 @@ dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
                //              onComplete, onError, etc) will be invoked in the context of the scope
                //              object.  In the body of the callback function, the value of the "this"
                //              keyword will be the scope object.   If no scope object is provided,
-               //              the callback functions will be called in the context of dojo.global.  
-               //              For example, onComplete.call(scope) vs. 
+               //              the callback functions will be called in the context of dojo.global.
+               //              For example, onComplete.call(scope) vs.
                //              onComplete.call(dojo.global)
                //
                //      returns:
-               //              Nothing.  Since the saves are generally asynchronous, there is 
+               //              Nothing.  Since the saves are generally asynchronous, there is
                //              no need to return anything.  All results are passed via callbacks.
                //      example:
                //      |       store.save({onComplete: onSave});
@@ -211,8 +212,8 @@ dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
 
        isDirty: function(/* item? */ item){
                //      summary:
-               //              Given an item, isDirty() returns true if the item has been modified 
-               //              since the last save().  If isDirty() is called with no *item* argument,  
+               //              Given an item, isDirty() returns true if the item has been modified
+               //              since the last save().  If isDirty() is called with no *item* argument,
                //              then this function returns true if any item has been modified since
                //              the last save().
                //
index d23e63ade501def879801fdcc9a81b0e6a4a3889..909cc49bc900a1f32143db12c5524f7a4eff4074 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,12 +9,14 @@ if(!dojo._hasResource["dojo.data.util.filter"]){ //_hasResource checks added by
 dojo._hasResource["dojo.data.util.filter"] = true;
 dojo.provide("dojo.data.util.filter");
 
+dojo.getObject("data.util.filter", true, dojo);
+
 dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase){
-       //      summary:  
+       //      summary:
        //              Helper function to convert a simple pattern to a regular expression for matching.
        //      description:
        //              Returns a regular expression object that conforms to the defined conversion rules.
-       //              For example:  
+       //              For example:
        //                      ca*   -> /^ca.*$/
        //                      *ca*  -> /^.*ca.*$/
        //                      *c\*a*  -> /^.*c\*a.*$/
@@ -26,7 +28,7 @@ dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/
        //                      * Means match anything, so ca* means match anything starting with ca
        //                      ? Means match single character.  So, b?b will match to bob and bab, and so on.
        //              \ is an escape character.  So for example, \* means do not treat * as a match, but literal character *.
-       //                              To use a \ as a character in the string, it must be escaped.  So in the pattern it should be 
+       //                              To use a \ as a character in the string, it must be escaped.  So in the pattern it should be
        //                              represented by \\ to be treated as an ordinary \ character instead of an escape.
        //
        //      ignoreCase:
index 0bfb19ec34e81474c884db3352896d3d0f136c1c..b3f859b4899ff46e4521da6bd6819af06def9796 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,30 +10,32 @@ dojo._hasResource["dojo.data.util.simpleFetch"] = true;
 dojo.provide("dojo.data.util.simpleFetch");
 dojo.require("dojo.data.util.sorter");
 
+dojo.getObject("data.util.simpleFetch", true, dojo);
+
 dojo.data.util.simpleFetch.fetch = function(/* Object? */ request){
        //      summary:
        //              The simpleFetch mixin is designed to serve as a set of function(s) that can
-       //              be mixed into other datastore implementations to accelerate their development.  
-       //              The simpleFetch mixin should work well for any datastore that can respond to a _fetchItems() 
+       //              be mixed into other datastore implementations to accelerate their development.
+       //              The simpleFetch mixin should work well for any datastore that can respond to a _fetchItems()
        //              call by returning an array of all the found items that matched the query.  The simpleFetch mixin
        //              is not designed to work for datastores that respond to a fetch() call by incrementally
        //              loading items, or sequentially loading partial batches of the result
-       //              set.  For datastores that mixin simpleFetch, simpleFetch 
+       //              set.  For datastores that mixin simpleFetch, simpleFetch
        //              implements a fetch method that automatically handles eight of the fetch()
        //              arguments -- onBegin, onItem, onComplete, onError, start, count, sort and scope
        //              The class mixing in simpleFetch should not implement fetch(),
-       //              but should instead implement a _fetchItems() method.  The _fetchItems() 
-       //              method takes three arguments, the keywordArgs object that was passed 
+       //              but should instead implement a _fetchItems() method.  The _fetchItems()
+       //              method takes three arguments, the keywordArgs object that was passed
        //              to fetch(), a callback function to be called when the result array is
        //              available, and an error callback to be called if something goes wrong.
        //              The _fetchItems() method should ignore any keywordArgs parameters for
-       //              start, count, onBegin, onItem, onComplete, onError, sort, and scope.  
+       //              start, count, onBegin, onItem, onComplete, onError, sort, and scope.
        //              The _fetchItems() method needs to correctly handle any other keywordArgs
-       //              parameters, including the query parameter and any optional parameters 
-       //              (such as includeChildren).  The _fetchItems() method should create an array of 
-       //              result items and pass it to the fetchHandler along with the original request object 
-       //              -- or, the _fetchItems() method may, if it wants to, create an new request object 
-       //              with other specifics about the request that are specific to the datastore and pass 
+       //              parameters, including the query parameter and any optional parameters
+       //              (such as includeChildren).  The _fetchItems() method should create an array of
+       //              result items and pass it to the fetchHandler along with the original request object
+       //              -- or, the _fetchItems() method may, if it wants to, create an new request object
+       //              with other specifics about the request that are specific to the datastore and pass
        //              that as the request object to the handler.
        //
        //              For more information on this specific function, see dojo.data.api.Read.fetch()
index c0261c848bfc431a5477e5c0cf86f85d235901b1..539d3ca02c8b70222518c65b04058c8d99a6f448 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,11 +9,13 @@ if(!dojo._hasResource["dojo.data.util.sorter"]){ //_hasResource checks added by
 dojo._hasResource["dojo.data.util.sorter"] = true;
 dojo.provide("dojo.data.util.sorter");
 
-dojo.data.util.sorter.basicComparator = function(      /*anything*/ a, 
+dojo.getObject("data.util.sorter", true, dojo);
+
+dojo.data.util.sorter.basicComparator = function(      /*anything*/ a,
                                                                                                        /*anything*/ b){
-       //      summary:  
+       //      summary:
        //              Basic comparision function that compares if an item is greater or less than another item
-       //      description:  
+       //      description:
        //              returns 1 if a > b, -1 if a < b, 0 if equal.
        //              'null' values (null, undefined) are treated as larger values so that they're pushed to the end of the list.
        //              And compared to each other, null is equivalent to undefined.
@@ -30,18 +32,18 @@ dojo.data.util.sorter.basicComparator = function(   /*anything*/ a,
                b = undefined;
        }
        if(a == b){
-               r = 0; 
+               r = 0;
        }else if(a > b || a == null){
-               r = 1; 
+               r = 1;
        }
        return r; //int {-1,0,1}
 };
 
 dojo.data.util.sorter.createSortFunction = function(   /* attributes array */sortSpec,
                                                                                                                /*dojo.data.core.Read*/ store){
-       //      summary:  
+       //      summary:
        //              Helper function to generate the sorting function based off the list of sort attributes.
-       //      description:  
+       //      description:
        //              The sort function creation will look for a property on the store called 'comparatorMap'.  If it exists
        //              it will look in the mapping for comparisons function for the attributes.  If one is found, it will
        //              use it instead of the basic comparator, which is typically used for strings, ints, booleans, and dates.
@@ -83,7 +85,7 @@ dojo.data.util.sorter.createSortFunction = function(  /* attributes array */sortS
                                }
                                comp = map[attr] || bc;
                        }
-                       sortFunctions.push(createSortFunction(attr, 
+                       sortFunctions.push(createSortFunction(attr,
                                dir, comp, store));
                }
        }
@@ -95,7 +97,7 @@ dojo.data.util.sorter.createSortFunction = function(  /* attributes array */sortS
                                return ret;//int
                        }
                }
-               return 0; //int  
+               return 0; //int
        }; // Function
 };
 
index d4fe218d30e36cd3361a28a38c82bfbed20174d5..e961b5a863e64cfeaa83efbab02f287add773f94 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.date"]){ //_hasResource checks added by build. Do no
 dojo._hasResource["dojo.date"] = true;
 dojo.provide("dojo.date");
 
+dojo.getObject("date", true, dojo);
+
 /*=====
 dojo.date = {
        // summary: Date manipulation utilities
@@ -22,7 +24,7 @@ dojo.date.getDaysInMonth = function(/*Date*/dateObject){
        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:
@@ -36,7 +38,7 @@ dojo.date.isLeapYear = function(/*Date*/dateObject){
 
        var year = dateObject.getFullYear();
        return !(year%400) || (!(year%4) && !!(year%100)); // Boolean
-}
+};
 
 // FIXME: This is not localized
 dojo.date.getTimezoneName = function(/*Date*/dateObject){
@@ -61,7 +63,7 @@ dojo.date.getTimezoneName = function(/*Date*/dateObject){
        }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 
+               // 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))){
@@ -70,7 +72,7 @@ dojo.date.getTimezoneName = function(/*Date*/dateObject){
                // 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, 
+                       // Capital letters or slash -- end of string,
                        // after space
                        pat = / ([A-Z\/]+)$/;
                        if((match = str.match(pat))){
@@ -81,7 +83,7 @@ dojo.date.getTimezoneName = function(/*Date*/dateObject){
 
        // 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
 
index c66da2331462a6d97cd4f269360d4ad07d9770ab..9b6b4fa629c2f9de660397d72da06492b0b88f2b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,18 +8,20 @@
 if(!dojo._hasResource["dojo.date.locale"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.date.locale"] = true;
 dojo.provide("dojo.date.locale");
-
-// Localization methods for Date.   Honor local customs using locale-dependent dojo.cldr data.
-
 dojo.require("dojo.date");
 dojo.require("dojo.cldr.supplemental");
 dojo.require("dojo.regexp");
 dojo.require("dojo.string");
 dojo.require("dojo.i18n");
+dojo.requireLocalization("dojo.cldr", "gregorian", null, "ROOT,ar,ca,cs,da,de,el,en,en-au,en-ca,en-gb,es,fi,fr,fr-ch,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-hant,zh-hk,zh-tw");
+
+dojo.getObject("date.locale", true, dojo);
+
+// Localization methods for Date.   Honor local customs using locale-dependent dojo.cldr data.
+
 
 // Load the bundles containing localization information for
 // names and formats
-dojo.requireLocalization("dojo.cldr", "gregorian", null, "ROOT,ar,ca,cs,da,de,el,en,en-au,en-ca,en-gb,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
 
 //NOTE: Everything in this module assumes Gregorian calendars.
 // Other calendars will be implemented in separate modules.
@@ -91,7 +93,7 @@ dojo.requireLocalization("dojo.cldr", "gregorian", null, "ROOT,ar,ca,cs,da,de,el
                                        break;
                                case 'a':
                                        var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';
-                                       s = bundle['dayPeriods-format-wide-' + timePeriod];
+                                       s = options[timePeriod] || bundle['dayPeriods-format-wide-' + timePeriod];
                                        break;
                                case 'h':
                                case 'H':
@@ -292,20 +294,23 @@ dojo.date.locale.parse = function(/*String*/value, /*dojo.date.locale.__FormatOp
        //              formatting lengths may be chosen, with "full" used by default.
        //              Custom patterns may be used or registered with translations using
        //              the dojo.date.locale.addCustomFormats method.
-       //      
+       //
        //              Formatting patterns are implemented using [the syntax described at
        //              unicode.org](http://www.unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns)
-       //              When two digit years are used, a century is chosen according to a sliding 
+       //              When two digit years are used, a century is chosen according to a sliding
        //              window of 80 years before and 20 years after present year, for both `yy` and `yyyy` patterns.
        //              year < 100CE requires strict mode.
        //
        // value:
        //              A string representation of a date
 
-       var info = dojo.date.locale._parseInfo(options),
+       // remove non-printing bidi control chars from input and pattern
+       var controlChars = /[\u200E\u200F\u202A\u202E]/g,
+               info = dojo.date.locale._parseInfo(options),
                tokens = info.tokens, bundle = info.bundle,
-               re = new RegExp("^" + info.regexp + "$", info.strict ? "" : "i"),
-               match = re.exec(value);
+               re = new RegExp("^" + info.regexp.replace(controlChars, "") + "$",
+                       info.strict ? "" : "i"),
+               match = re.exec(value && value.replace(controlChars, ""));
 
        if(!match){ return null; } // null
 
@@ -444,7 +449,7 @@ dojo.date.locale.parse = function(/*String*/value, /*dojo.date.locale.__FormatOp
                result[3] = 0; //12am -> 0
        }
 
-       //TODO: implement a getWeekday() method in order to test 
+       //TODO: implement a getWeekday() method in order to test
        //validity of input strings containing 'EEE' or 'EEEE'...
 
        var dateObject = new Date(result[0], result[1], result[2], result[3], result[4], result[5], result[6]); // Date
@@ -484,7 +489,7 @@ function _processPattern(pattern, applyPattern, applyLiteral, applyAll){
        applyLiteral = applyLiteral || identity;
        applyAll = applyAll || identity;
 
-       //split on single quotes (which escape literals in date format strings) 
+       //split on single quotes (which escape literals in date format strings)
        //but preserve escaped single quotes (e.g., o''clock)
        var chunks = pattern.match(/(''|[^'])+/g),
                literal = pattern.charAt(0) == "'";
@@ -520,31 +525,31 @@ function _buildDateTimeRE(tokens, bundle, options, pattern){
                                s = '\\d{2,4}';
                                break;
                        case 'M':
-                               s = (l>2) ? '\\S+?' : p2+'[1-9]|1[0-2]';
+                               s = (l>2) ? '\\S+?' : '1[0-2]|'+p2+'[1-9]';
                                break;
                        case 'D':
-                               s = p2+'[1-9]|'+p3+'[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]';
+                               s = '[12][0-9][0-9]|3[0-5][0-9]|36[0-6]|'+p3+'[1-9][0-9]|'+p2+'[1-9]';
                                break;
                        case 'd':
                                s = '3[01]|[12]\\d|'+p2+'[1-9]';
                                break;
                        case 'w':
-                               s = p2+'[1-9]|[1-4][0-9]|5[0-3]';
+                               s = '[1-4][0-9]|5[0-3]|'+p2+'[1-9]';
                                break;
                        case 'E':
                                s = '\\S+';
                                break;
                        case 'h': //hour (1-12)
-                               s = p2+'[1-9]|1[0-2]';
+                               s = '1[0-2]|'+p2+'[1-9]';
                                break;
                        case 'k': //hour (0-11)
-                               s = p2+'\\d|1[01]';
+                               s = '1[01]|'+p2+'\\d';
                                break;
                        case 'H': //hour (0-23)
-                               s = p2+'\\d|1\\d|2[0-3]';
+                               s = '1\\d|2[0-3]|'+p2+'\\d';
                                break;
                        case 'K': //hour (1-24)
-                               s = p2+'[1-9]|1\\d|2[0-4]';
+                               s = '1\\d|2[0-4]|'+p2+'[1-9]';
                                break;
                        case 'm':
                        case 's':
@@ -556,10 +561,8 @@ function _buildDateTimeRE(tokens, bundle, options, pattern){
                        case 'a':
                                var am = options.am || bundle['dayPeriods-format-wide-am'],
                                        pm = options.pm || bundle['dayPeriods-format-wide-pm'];
-                               if(options.strict){
-                                       s = am + '|' + pm;
-                               }else{
-                                       s = am + '|' + pm;
+                               s = am + '|' + pm;
+                               if(!options.strict){
                                        if(am != am.toLowerCase()){ s += '|' + am.toLowerCase(); }
                                        if(pm != pm.toLowerCase()){ s += '|' + pm.toLowerCase(); }
                                        if(s.indexOf('.') != -1){ s += '|' + s.replace(/\./g, ""); }
index 968bc40fdd4088ff24af58e7f0f4cbbb876ffb3c..04b68a06adb7f177c1798b5864570e61443d98ec 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.date.stamp"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo.date.stamp"] = true;
 dojo.provide("dojo.date.stamp");
 
+dojo.getObject("date.stamp", true, dojo);
+
 // Methods to convert dates to or from a wire (string) format using well-known conventions
 
 dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){
@@ -87,7 +89,7 @@ dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/d
        }
 
        return result; // Date or null
-}
+};
 
 /*=====
        dojo.date.stamp.__Options = function(){
@@ -137,12 +139,12 @@ dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__O
                }else if(options.selector != "time"){
                        var timezoneOffset = dateObject.getTimezoneOffset();
                        var absOffset = Math.abs(timezoneOffset);
-                       time += (timezoneOffset > 0 ? "-" : "+") + 
+                       time += (timezoneOffset > 0 ? "-" : "+") +
                                _(Math.floor(absOffset/60)) + ":" + _(absOffset%60);
                }
                formattedDate.push(time);
        }
        return formattedDate.join('T'); // String
-}
+};
 
 }
index effd253f3f48716e04a50c5e1fd4a9fb58ae41a6..8f43801b3f8ade3b82b8d0f95b697272b6a44e6c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,9 +8,9 @@
 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.require("dojo.dnd.common");
 
+
 dojo.declare("dojo.dnd.Avatar", null, {
        // summary:
        //              Object that represents transferred DnD items visually
@@ -93,7 +93,7 @@ dojo.declare("dojo.dnd.Avatar", null, {
                        var icon = dojo.byId("a11yIcon");
                        var text = '+';   // assume canDrop && copy
                        if (this.manager.canDropFlag && !this.manager.copy) {
-                               text = '< '; // canDrop && move 
+                               text = '< '; // canDrop && move
                        }else if (!this.manager.canDropFlag && !this.manager.copy) {
                                text = "o"; //!canDrop && move
                        }else if(!this.manager.canDropFlag){
index 6efc6f6fb40e76746d0ebb89ca33e2af48d4cd17..58f34eb6bfb9fe63e4407656c968553bc1a9afc8 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,10 +8,10 @@
 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");
-
 dojo.require("dojo.dnd.common");
 dojo.require("dojo.parser");
 
+
 /*
        Container states:
                ""              - normal state
@@ -63,7 +63,7 @@ dojo.dnd.Item = function(){
 
 dojo.declare("dojo.dnd.Container", null, {
        // summary:
-       //              a Container object, which knows when mouse hovers over it, 
+       //              a Container object, which knows when mouse hovers over it,
        //              and over which element it hovers
        
        // object attributes (for markup)
@@ -140,7 +140,7 @@ dojo.declare("dojo.dnd.Container", null, {
        },
        forInItems: function(/*Function*/ f, /*Object?*/ o){
                // summary:
-               //              iterates over a data map skipping members that 
+               //              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;
@@ -327,8 +327,7 @@ dojo.declare("dojo.dnd.Container", null, {
                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);
+               dojo.replaceClass(this.node, prefix + newState, prefix + this[state]);
                this[state] = newState;
        },
        _addItemClass: function(node, type){
@@ -375,7 +374,7 @@ dojo.declare("dojo.dnd.Container", null, {
 
 dojo.dnd._createNode = function(tag){
        // summary:
-       //              returns a function, which creates an element of given tag 
+       //              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
index 70754f93fad00fc07e9e218994297c209a8ba027..38611fbd4c88c4d36edd7dd14845fe722a2d3d67 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,11 +8,11 @@
 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.require("dojo.dnd.common");
 dojo.require("dojo.dnd.autoscroll");
 dojo.require("dojo.dnd.Avatar");
 
+
 dojo.declare("dojo.dnd.Manager", null, {
        // summary:
        //              the manager of DnD operations (usually a singleton)
@@ -84,7 +84,7 @@ dojo.declare("dojo.dnd.Manager", null, {
                        dojo.connect(dojo.body(), "onselectstart", dojo.stopEvent)
                ];
                var c = "dojoDnd" + (copy ? "Copy" : "Move");
-               dojo.addClass(dojo.body(), c); 
+               dojo.addClass(dojo.body(), c);
        },
        canDrop: function(flag){
                // summary:
@@ -98,8 +98,7 @@ dojo.declare("dojo.dnd.Manager", null, {
        stopDrag: function(){
                // summary:
                //              stop the DnD in progress
-               dojo.removeClass(dojo.body(), "dojoDndCopy");
-               dojo.removeClass(dojo.body(), "dojoDndMove");
+               dojo.removeClass(dojo.body(), ["dojoDndCopy", "dojoDndMove"]);
                dojo.forEach(this.events, dojo.disconnect);
                this.events = [];
                this.avatar.destroy();
@@ -132,7 +131,7 @@ dojo.declare("dojo.dnd.Manager", null, {
                        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){ 
+                       if(this.copy != copy){
                                this._setCopyStatus(copy);
                        }
                }
@@ -166,7 +165,7 @@ dojo.declare("dojo.dnd.Manager", null, {
                        switch(e.keyCode){
                                case dojo.keys.CTRL:
                                        var copy = Boolean(this.source.copyState(true));
-                                       if(this.copy != copy){ 
+                                       if(this.copy != copy){
                                                this._setCopyStatus(copy);
                                        }
                                        break;
@@ -184,7 +183,7 @@ dojo.declare("dojo.dnd.Manager", null, {
                //              keyboard event
                if(this.avatar && e.keyCode == dojo.keys.CTRL){
                        var copy = Boolean(this.source.copyState(false));
-                       if(this.copy != copy){ 
+                       if(this.copy != copy){
                                this._setCopyStatus(copy);
                        }
                }
@@ -199,8 +198,9 @@ dojo.declare("dojo.dnd.Manager", null, {
                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.replaceClass(dojo.body(),
+                       "dojoDnd" + (this.copy ? "Copy" : "Move"),
+                       "dojoDnd" + (this.copy ? "Move" : "Copy"));
        }
 });
 
index 3241965827ec9b55fef1f32ffb0124baaea2dbce..705b8cf62ae8f722e25e8c7804700a707f99128b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,9 +8,9 @@
 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.require("dojo.dnd.Mover");
 
+
 /*=====
 dojo.declare("dojo.dnd.__MoveableArgs", [], {
        // handle: Node||String
@@ -54,6 +54,7 @@ dojo.declare("dojo.dnd.Moveable", null, {
                this.mover = params.mover ? params.mover : dojo.dnd.Mover;
                this.events = [
                        dojo.connect(this.handle, "onmousedown", this, "onMouseDown"),
+                       dojo.connect(this.handle, "ontouchstart", this, "onMouseDown"),
                        // cancel text selection and text dragging
                        dojo.connect(this.handle, "ondragstart",   this, "onSelectStart"),
                        dojo.connect(this.handle, "onselectstart", this, "onSelectStart")
@@ -76,17 +77,20 @@ dojo.declare("dojo.dnd.Moveable", null, {
        // mouse event processors
        onMouseDown: function(e){
                // summary:
-               //              event processor for onmousedown, creates a Mover for the node
+               //              event processor for onmousedown/ontouchstart, creates a Mover for the node
                // e: Event
-               //              mouse event
+               //              mouse/touch 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")
+                               dojo.connect(this.handle, "ontouchmove", this, "onMouseMove"),
+                               dojo.connect(this.handle, "onmouseup", this, "onMouseUp"),
+                               dojo.connect(this.handle, "ontouchend", this, "onMouseUp")
                        );
-                       this._lastX = e.pageX;
-                       this._lastY = e.pageY;
+                       var pos = e.touches ? e.touches[0] : e;
+                       this._lastX = pos.pageX;
+                       this._lastY = pos.pageY;
                }else{
                        this.onDragDetected(e);
                }
@@ -94,10 +98,11 @@ dojo.declare("dojo.dnd.Moveable", null, {
        },
        onMouseMove: function(e){
                // summary:
-               //              event processor for onmousemove, used only for delayed drags
+               //              event processor for onmousemove/ontouchmove, 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){
+               //              mouse/touch event
+               var pos = e.touches ? e.touches[0] : e;
+               if(Math.abs(pos.pageX - this._lastX) > this.delay || Math.abs(pos.pageY - this._lastY) > this.delay){
                        this.onMouseUp(e);
                        this.onDragDetected(e);
                }
@@ -134,8 +139,8 @@ dojo.declare("dojo.dnd.Moveable", null, {
                // summary:
                //              called before every move operation
                dojo.publish("/dnd/move/start", [mover]);
-               dojo.addClass(dojo.body(), "dojoMove"); 
-               dojo.addClass(this.node, "dojoMoveItem"); 
+               dojo.addClass(dojo.body(), "dojoMove");
+               dojo.addClass(this.node, "dojoMoveItem");
        },
        onMoveStop: function(/* dojo.dnd.Mover */ mover){
                // summary:
index cdb995c0832a4b7cace909a3021310f49ae0bebf..a8c161c80fb4321f5d1b617158823c8b7704ea95 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,14 +8,14 @@
 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.require("dojo.dnd.common");
 dojo.require("dojo.dnd.autoscroll");
 
+
 dojo.declare("dojo.dnd.Mover", null, {
        constructor: function(node, e, host){
                // summary:
-               //              an object, which makes a node follow the mouse. 
+               //              an object which makes a node follow the mouse, or touch-drag on touch devices.
                //              Used as a default mover, and as a base class for custom movers.
                // node: Node
                //              a node (or node's id) to be moved
@@ -26,17 +26,27 @@ dojo.declare("dojo.dnd.Mover", null, {
                //              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};
+               var pos = e.touches ? e.touches[0] : e;
+               this.marginBox = {l: pos.pageX, t: pos.pageY};
                this.mouseButton = e.button;
-               var h = this.host = host, d = node.ownerDocument, 
-                       firstEvent = dojo.connect(d, "onmousemove", this, "onFirstMove");
+               var h = (this.host = host), d = node.ownerDocument;
                this.events = [
+                       // At the start of a drag, onFirstMove is called, and then the following two
+                       // connects are disconnected
+                       dojo.connect(d, "onmousemove", this, "onFirstMove"),
+                       dojo.connect(d, "ontouchmove", this, "onFirstMove"),
+
+                       // These are called continually during the drag
                        dojo.connect(d, "onmousemove", this, "onMouseMove"),
+                       dojo.connect(d, "ontouchmove", this, "onMouseMove"),
+
+                       // And these are called at the end of the drag
                        dojo.connect(d, "onmouseup",   this, "onMouseUp"),
+                       dojo.connect(d, "ontouchend", this, "onMouseUp"),
+
                        // cancel text selection and text dragging
                        dojo.connect(d, "ondragstart",   dojo.stopEvent),
-                       dojo.connect(d.body, "onselectstart", dojo.stopEvent),
-                       firstEvent
+                       dojo.connect(d.body, "onselectstart", dojo.stopEvent)
                ];
                // notify that the move has started
                if(h && h.onMoveStart){
@@ -46,17 +56,18 @@ dojo.declare("dojo.dnd.Mover", null, {
        // mouse event processors
        onMouseMove: function(e){
                // summary:
-               //              event processor for onmousemove
+               //              event processor for onmousemove/ontouchmove
                // e: Event
-               //              mouse event
+               //              mouse/touch event
                dojo.dnd.autoScroll(e);
-               var m = this.marginBox;
-               this.host.onMove(this, {l: m.l + e.pageX, t: m.t + e.pageY}, e);
+               var m = this.marginBox,
+                       pos = e.touches ? e.touches[0] : e;
+               this.host.onMove(this, {l: m.l + pos.pageX, t: m.t + pos.pageY}, e);
                dojo.stopEvent(e);
        },
        onMouseUp: function(e){
-               if(dojo.isWebKit && dojo.isMac && this.mouseButton == 2 ? 
-                               e.button == 0 : this.mouseButton == e.button){
+               if(dojo.isWebKit && dojo.isMac && this.mouseButton == 2 ?
+                               e.button == 0 : this.mouseButton == e.button){ // TODO Should condition be met for touch devices, too?
                        this.destroy();
                }
                dojo.stopEvent(e);
@@ -64,7 +75,7 @@ dojo.declare("dojo.dnd.Mover", null, {
        // utilities
        onFirstMove: function(e){
                // summary:
-               //              makes the node absolute; it is meant to be called only once. 
+               //              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){
@@ -84,7 +95,7 @@ dojo.declare("dojo.dnd.Mover", null, {
                                // 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. 
+                               // the computed style.
                                var b = dojo.doc.body;
                                var bs = dojo.getComputedStyle(b);
                                var bm = dojo._getMarginBox(b, bs);
@@ -98,7 +109,10 @@ dojo.declare("dojo.dnd.Mover", null, {
                if(h && h.onFirstMove){
                        h.onFirstMove(this, e);
                }
-               dojo.disconnect(this.events.pop());
+               
+               // Disconnect onmousemove and ontouchmove events that call this function
+               dojo.disconnect(this.events.shift());
+               dojo.disconnect(this.events.shift());
        },
        destroy: function(){
                // summary:
index 9f13b75a0eeb8afb481991588c0111244a2fc91a..20569daaecf5f110c37fa8a0be1ce8ef004eba9d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,10 +8,10 @@
 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");
-
 dojo.require("dojo.dnd.common");
 dojo.require("dojo.dnd.Container");
 
+
 /*
        Container item states:
                ""                      - an item is not selected
index 8e5c55dbc2a44c8afb73a20734a5cd6f237dd064..30a61becddf7acaa9f7b6cc9fb2947b7f5ea25ad 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,10 +8,10 @@
 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");
-
 dojo.require("dojo.dnd.Selector");
 dojo.require("dojo.dnd.Manager");
 
+
 /*
        Container property:
                "Horizontal"- if this is the horizontal container
@@ -89,11 +89,11 @@ dojo.declare("dojo.dnd.Source", dojo.dnd.Selector, {
        generateText: true,
        
        constructor: function(/*DOMNode|String*/node, /*dojo.dnd.__SourceArgs?*/params){
-               // summary: 
+               // summary:
                //              a constructor of the Source
                // node:
                //              node or node's id to build the source on
-               // params: 
+               // 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));
index 25a101e20e7424164cd4656073aae04fec66cafe..bd8e7d2535ed710c39f1ea5a9ab6962919fbfc3e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,9 +8,9 @@
 if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.dnd.TimedMoveable"] = true;
 dojo.provide("dojo.dnd.TimedMoveable");
-
 dojo.require("dojo.dnd.Moveable");
 
+
 /*=====
 dojo.declare("dojo.dnd.__TimedMoveableArgs", [dojo.dnd.__MoveableArgs], {
        // timeout: Number
@@ -27,7 +27,7 @@ dojo.declare("dojo.dnd.__TimedMoveableArgs", [dojo.dnd.__MoveableArgs], {
        dojo.declare("dojo.dnd.TimedMoveable", dojo.dnd.Moveable, {
                // summary:
                //              A specialized version of Moveable to support an FPS throttling.
-               //              This class puts an upper restriction on FPS, which may reduce 
+               //              This class puts an upper restriction on FPS, which may reduce
                //              the CPU load. The additional parameter "timeout" regulates
                //              the delay before actually moving the moveable object.
                
index 40daf66a19785bbe47bc7340e39b4854432ea5db..d2c99cf308b2595ce3aed3c860c79bf947f65792 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,26 +8,11 @@
 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.require("dojo.window");
 
-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
+dojo.getObject("dnd", true, dojo);
 
-       // 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.getViewport = dojo.window.getBox;
 
 dojo.dnd.V_TRIGGER_AUTOSCROLL = 32;
 dojo.dnd.H_TRIGGER_AUTOSCROLL = 32;
@@ -43,7 +28,7 @@ dojo.dnd.autoScroll = function(e){
        //              onmousemove event
 
        // FIXME: needs more docs!
-       var v = dojo.dnd.getViewport(), dx = 0, dy = 0;
+       var v = dojo.window.getBox(), 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){
@@ -74,14 +59,15 @@ dojo.dnd.autoScrollNodes = function(e){
                        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), 
+                               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 
+                                       // 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;
+                                       rx += dojo.body().scrollLeft;
+                                       ry += dojo.body().scrollTop;
                                }
                                if(rx > 0 && rx < b.w){
                                        if(rx < w){
index e49552919582b5692ee18966e09f3c9d48c6f968..f69aa5a5a8ca0e36a0178c5136dcc2d0eb4607fc 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.dnd.common"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo.dnd.common"] = true;
 dojo.provide("dojo.dnd.common");
 
+dojo.getObject("dnd", true, dojo);
+
 dojo.dnd.getCopyKeyState = dojo.isCopyKey;
 
 dojo.dnd._uniqueId = 0;
index f2abc1b41cba08156440bae9b9ebdb967548f0ce..6a737bd3acdba6801744600e99b68ce2dca4020b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,10 +8,10 @@
 if(!dojo._hasResource["dojo.dnd.move"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.dnd.move"] = true;
 dojo.provide("dojo.dnd.move");
-
 dojo.require("dojo.dnd.Mover");
 dojo.require("dojo.dnd.Moveable");
 
+
 /*=====
 dojo.declare("dojo.dnd.move.__constrainedMoveableArgs", [dojo.dnd.__MoveableArgs], {
        // constraints: Function
@@ -55,7 +55,7 @@ dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, {
                c.r = c.l + c.w;
                c.b = c.t + c.h;
                if(this.within){
-                       var mb = dojo.marginBox(mover.node);
+                       var mb = dojo._getMarginSize(mover.node);
                        c.r -= mb.w;
                        c.b -= mb.h;
                }
@@ -65,8 +65,12 @@ dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, {
                //              called during every move notification;
                //              should actually move the node; can be overwritten.
                var c = this.constraintBox, s = mover.node.style;
-               s.left = (leftTop.l < c.l ? c.l : c.r < leftTop.l ? c.r : leftTop.l) + "px";
-               s.top  = (leftTop.t < c.t ? c.t : c.b < leftTop.t ? c.b : leftTop.t) + "px";
+               this.onMoving(mover, leftTop);
+               leftTop.l = leftTop.l < c.l ? c.l : c.r < leftTop.l ? c.r : leftTop.l;
+               leftTop.t = leftTop.t < c.t ? c.t : c.b < leftTop.t ? c.b : leftTop.t;
+               s.left = leftTop.l + "px";
+               s.top  = leftTop.t + "px";
+               this.onMoved(mover, leftTop);
        }
 });
 
@@ -128,8 +132,8 @@ dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constraine
                //              an optional object with parameters
                var area = params && params.area;
                this.constraints = function(){
-                       var n = this.node.parentNode, 
-                               s = dojo.getComputedStyle(n), 
+                       var n = this.node.parentNode,
+                               s = dojo.getComputedStyle(n),
                                mb = dojo._getMarginBox(n, s);
                        if(area == "margin"){
                                return mb;      // Object
@@ -151,100 +155,6 @@ dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constraine
        }
 });
 
-// WARNING: below are obsolete objects, instead of custom movers use custom moveables (above)
-
-dojo.dnd.move.constrainedMover = function(fun, within){
-       // summary:
-       //              returns a constrained version of dojo.dnd.Mover
-       // description:
-       //              this function produces n object, which will put a constraint on 
-       //              the margin box of dragged object in absolute coordinates
-       // fun: Function
-       //              called on drag, and returns a constraint box
-       // within: Boolean
-       //              if true, constraints the whole dragged object withtin the rectangle, 
-       //              otherwise the constraint is applied to the left-top corner
-
-       dojo.deprecated("dojo.dnd.move.constrainedMover, use dojo.dnd.move.constrainedMoveable instead");
-       var mover = function(node, e, notifier){
-               dojo.dnd.Mover.call(this, node, e, notifier);
-       };
-       dojo.extend(mover, dojo.dnd.Mover.prototype);
-       dojo.extend(mover, {
-               onMouseMove: function(e){
-                       // summary: event processor for onmousemove
-                       // e: Event: mouse event
-                       dojo.dnd.autoScroll(e);
-                       var m = this.marginBox, c = this.constraintBox,
-                               l = m.l + e.pageX, t = m.t + e.pageY;
-                       l = l < c.l ? c.l : c.r < l ? c.r : l;
-                       t = t < c.t ? c.t : c.b < t ? c.b : t;
-                       this.host.onMove(this, {l: l, t: t});
-               },
-               onFirstMove: function(){
-                       // summary: called once to initialize things; it is meant to be called only once
-                       dojo.dnd.Mover.prototype.onFirstMove.call(this);
-                       var c = this.constraintBox = fun.call(this);
-                       c.r = c.l + c.w;
-                       c.b = c.t + c.h;
-                       if(within){
-                               var mb = dojo.marginBox(this.node);
-                               c.r -= mb.w;
-                               c.b -= mb.h;
-                       }
-               }
-       });
-       return mover;   // Object
-};
-
-dojo.dnd.move.boxConstrainedMover = function(box, within){
-       // summary:
-       //              a specialization of dojo.dnd.constrainedMover, which constrains to the specified box
-       // box: Object
-       //              a constraint box (l, t, w, h)
-       // within: Boolean
-       //              if true, constraints the whole dragged object withtin the rectangle, 
-       //              otherwise the constraint is applied to the left-top corner
-
-       dojo.deprecated("dojo.dnd.move.boxConstrainedMover, use dojo.dnd.move.boxConstrainedMoveable instead");
-       return dojo.dnd.move.constrainedMover(function(){ return box; }, within);       // Object
-};
-
-dojo.dnd.move.parentConstrainedMover = function(area, within){
-       // summary:
-       //              a specialization of dojo.dnd.constrainedMover, which constrains to the parent node
-       // area: String
-       //              "margin" to constrain within the parent's margin box, "border" for the border box,
-       //              "padding" for the padding box, and "content" for the content box; "content" is the default value.
-       // within: Boolean
-       //              if true, constraints the whole dragged object within the rectangle, 
-       //              otherwise the constraint is applied to the left-top corner
-
-       dojo.deprecated("dojo.dnd.move.parentConstrainedMover, use dojo.dnd.move.parentConstrainedMoveable instead");
-       var fun = function(){
-               var n = this.node.parentNode, 
-                       s = dojo.getComputedStyle(n), 
-                       mb = dojo._getMarginBox(n, s);
-               if(area == "margin"){
-                       return mb;      // Object
-               }
-               var t = dojo._getMarginExtents(n, s);
-               mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-               if(area == "border"){
-                       return mb;      // Object
-               }
-               t = dojo._getBorderExtents(n, s);
-               mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-               if(area == "padding"){
-                       return mb;      // Object
-               }
-               t = dojo._getPadExtents(n, s);
-               mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-               return mb;      // Object
-       };
-       return dojo.dnd.move.constrainedMover(fun, within);     // Object
-};
-
 // patching functions one level up for compatibility
 
 dojo.dnd.constrainedMover = dojo.dnd.move.constrainedMover;
index 665870c62fc05a859698951e50611e90cbc9ad5c..ef2f2fb775650d3358e623112cbc2673c2a3572a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -11,4 +11,4 @@
                http://dojotoolkit.org
 */
 
-(function(){var _1=null;if((_1||(typeof djConfig!="undefined"&&djConfig.scopeMap))&&(typeof window!="undefined")){var _2="",_3="",_4="",_5={},_6={};_1=_1||djConfig.scopeMap;for(var i=0;i<_1.length;i++){var _7=_1[i];_2+="var "+_7[0]+" = {}; "+_7[1]+" = "+_7[0]+";"+_7[1]+"._scopeName = '"+_7[1]+"';";_3+=(i==0?"":",")+_7[0];_4+=(i==0?"":",")+_7[1];_5[_7[0]]=_7[1];_6[_7[1]]=_7[0];}eval(_2+"dojo._scopeArgs = ["+_4+"];");dojo._scopePrefixArgs=_3;dojo._scopePrefix="(function("+_3+"){";dojo._scopeSuffix="})("+_4+")";dojo._scopeMap=_5;dojo._scopeMapRev=_6;}(function(){if(typeof this["loadFirebugConsole"]=="function"){this["loadFirebugConsole"]();}else{this.console=this.console||{};var cn=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"];var i=0,tn;while((tn=cn[i++])){if(!console[tn]){(function(){var _8=tn+"";console[_8]=("log" in console)?function(){var a=Array.apply({},arguments);a.unshift(_8+":");console["log"](a.join(" "));}:function(){};console[_8]._fake=true;})();}}}if(typeof dojo=="undefined"){dojo={_scopeName:"dojo",_scopePrefix:"",_scopePrefixArgs:"",_scopeSuffix:"",_scopeMap:{},_scopeMapRev:{}};}var d=dojo;if(typeof dijit=="undefined"){dijit={_scopeName:"dijit"};}if(typeof dojox=="undefined"){dojox={_scopeName:"dojox"};}if(!d._scopeArgs){d._scopeArgs=[dojo,dijit,dojox];}d.global=this;d.config={isDebug:false,debugAtAllCosts:false};if(typeof djConfig!="undefined"){for(var _9 in djConfig){d.config[_9]=djConfig[_9];}}dojo.locale=d.config.locale;var _a="$Rev: 22487 $".match(/\d+/);dojo.version={major:1,minor:5,patch:0,flag:"",revision:_a?+_a[0]:NaN,toString:function(){with(d.version){return major+"."+minor+"."+patch+flag+" ("+revision+")";}}};if(typeof OpenAjax!="undefined"){OpenAjax.hub.registerLibrary(dojo._scopeName,"http://dojotoolkit.org",d.version.toString());}var _b,_c,_d={};for(var i in {toString:1}){_b=[];break;}dojo._extraNames=_b=_b||["hasOwnProperty","valueOf","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","constructor"];_c=_b.length;dojo._mixin=function(_e,_f){var _10,s,i;for(_10 in _f){s=_f[_10];if(!(_10 in _e)||(_e[_10]!==s&&(!(_10 in _d)||_d[_10]!==s))){_e[_10]=s;}}if(_c&&_f){for(i=0;i<_c;++i){_10=_b[i];s=_f[_10];if(!(_10 in _e)||(_e[_10]!==s&&(!(_10 in _d)||_d[_10]!==s))){_e[_10]=s;}}}return _e;};dojo.mixin=function(obj,_11){if(!obj){obj={};}for(var i=1,l=arguments.length;i<l;i++){d._mixin(obj,arguments[i]);}return obj;};dojo._getProp=function(_12,_13,_14){var obj=_14||d.global;for(var i=0,p;obj&&(p=_12[i]);i++){if(i==0&&d._scopeMap[p]){p=d._scopeMap[p];}obj=(p in obj?obj[p]:(_13?obj[p]={}:undefined));}return obj;};dojo.setObject=function(_15,_16,_17){var _18=_15.split("."),p=_18.pop(),obj=d._getProp(_18,true,_17);return obj&&p?(obj[p]=_16):undefined;};dojo.getObject=function(_19,_1a,_1b){return d._getProp(_19.split("."),_1a,_1b);};dojo.exists=function(_1c,obj){return !!d.getObject(_1c,false,obj);};dojo["eval"]=function(_1d){return d.global.eval?d.global.eval(_1d):eval(_1d);};d.deprecated=d.experimental=function(){};})();(function(){var d=dojo;d.mixin(d,{_loadedModules:{},_inFlightCount:0,_hasResource:{},_modulePrefixes:{dojo:{name:"dojo",value:"."},doh:{name:"doh",value:"../util/doh"},tests:{name:"tests",value:"tests"}},_moduleHasPrefix:function(_1e){var mp=d._modulePrefixes;return !!(mp[_1e]&&mp[_1e].value);},_getModulePrefix:function(_1f){var mp=d._modulePrefixes;if(d._moduleHasPrefix(_1f)){return mp[_1f].value;}return _1f;},_loadedUrls:[],_postLoad:false,_loaders:[],_unloaders:[],_loadNotifying:false});dojo._loadPath=function(_20,_21,cb){var uri=((_20.charAt(0)=="/"||_20.match(/^\w+:/))?"":d.baseUrl)+_20;try{return !_21?d._loadUri(uri,cb):d._loadUriAndCheck(uri,_21,cb);}catch(e){console.error(e);return false;}};dojo._loadUri=function(uri,cb){if(d._loadedUrls[uri]){return true;}d._inFlightCount++;var _22=d._getText(uri,true);if(_22){d._loadedUrls[uri]=true;d._loadedUrls.push(uri);if(cb){_22="("+_22+")";}else{_22=d._scopePrefix+_22+d._scopeSuffix;}if(!d.isIE){_22+="\r\n//@ sourceURL="+uri;}var _23=d["eval"](_22);if(cb){cb(_23);}}if(--d._inFlightCount==0&&d._postLoad&&d._loaders.length){setTimeout(function(){if(d._inFlightCount==0){d._callLoaded();}},0);}return !!_22;};dojo._loadUriAndCheck=function(uri,_24,cb){var ok=false;try{ok=d._loadUri(uri,cb);}catch(e){console.error("failed loading "+uri+" with error: "+e);}return !!(ok&&d._loadedModules[_24]);};dojo.loaded=function(){d._loadNotifying=true;d._postLoad=true;var mll=d._loaders;d._loaders=[];for(var x=0;x<mll.length;x++){mll[x]();}d._loadNotifying=false;if(d._postLoad&&d._inFlightCount==0&&mll.length){d._callLoaded();}};dojo.unloaded=function(){var mll=d._unloaders;while(mll.length){(mll.pop())();}};d._onto=function(arr,obj,fn){if(!fn){arr.push(obj);}else{if(fn){var _25=(typeof fn=="string")?obj[fn]:fn;arr.push(function(){_25.call(obj);});}}};dojo.ready=dojo.addOnLoad=function(obj,_26){d._onto(d._loaders,obj,_26);if(d._postLoad&&d._inFlightCount==0&&!d._loadNotifying){d._callLoaded();}};var dca=d.config.addOnLoad;if(dca){d.addOnLoad[(dca instanceof Array?"apply":"call")](d,dca);}dojo._modulesLoaded=function(){if(d._postLoad){return;}if(d._inFlightCount>0){console.warn("files still in flight!");return;}d._callLoaded();};dojo._callLoaded=function(){if(typeof setTimeout=="object"||(d.config.useXDomain&&d.isOpera)){setTimeout(d.isAIR?function(){d.loaded();}:d._scopeName+".loaded();",0);}else{d.loaded();}};dojo._getModuleSymbols=function(_27){var _28=_27.split(".");for(var i=_28.length;i>0;i--){var _29=_28.slice(0,i).join(".");if(i==1&&!d._moduleHasPrefix(_29)){_28[0]="../"+_28[0];}else{var _2a=d._getModulePrefix(_29);if(_2a!=_29){_28.splice(0,i,_2a);break;}}}return _28;};dojo._global_omit_module_check=false;dojo.loadInit=function(_2b){_2b();};dojo._loadModule=dojo.require=function(_2c,_2d){_2d=d._global_omit_module_check||_2d;var _2e=d._loadedModules[_2c];if(_2e){return _2e;}var _2f=d._getModuleSymbols(_2c).join("/")+".js";var _30=!_2d?_2c:null;var ok=d._loadPath(_2f,_30);if(!ok&&!_2d){throw new Error("Could not load '"+_2c+"'; last tried '"+_2f+"'");}if(!_2d&&!d._isXDomain){_2e=d._loadedModules[_2c];if(!_2e){throw new Error("symbol '"+_2c+"' is not defined after loading '"+_2f+"'");}}return _2e;};dojo.provide=function(_31){_31=_31+"";return (d._loadedModules[_31]=d.getObject(_31,true));};dojo.platformRequire=function(_32){var _33=_32.common||[];var _34=_33.concat(_32[d._name]||_32["default"]||[]);for(var x=0;x<_34.length;x++){var _35=_34[x];if(_35.constructor==Array){d._loadModule.apply(d,_35);}else{d._loadModule(_35);}}};dojo.requireIf=function(_36,_37){if(_36===true){var _38=[];for(var i=1;i<arguments.length;i++){_38.push(arguments[i]);}d.require.apply(d,_38);}};dojo.requireAfterIf=d.requireIf;dojo.registerModulePath=function(_39,_3a){d._modulePrefixes[_39]={name:_39,value:_3a};};dojo.requireLocalization=function(_3b,_3c,_3d,_3e){d.require("dojo.i18n");d.i18n._requireLocalization.apply(d.hostenv,arguments);};var ore=new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),ire=new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$");dojo._Url=function(){var n=null,_3f=arguments,uri=[_3f[0]];for(var i=1;i<_3f.length;i++){if(!_3f[i]){continue;}var _40=new d._Url(_3f[i]+""),_41=new d._Url(uri[0]+"");if(_40.path==""&&!_40.scheme&&!_40.authority&&!_40.query){if(_40.fragment!=n){_41.fragment=_40.fragment;}_40=_41;}else{if(!_40.scheme){_40.scheme=_41.scheme;if(!_40.authority){_40.authority=_41.authority;if(_40.path.charAt(0)!="/"){var _42=_41.path.substring(0,_41.path.lastIndexOf("/")+1)+_40.path;var _43=_42.split("/");for(var j=0;j<_43.length;j++){if(_43[j]=="."){if(j==_43.length-1){_43[j]="";}else{_43.splice(j,1);j--;}}else{if(j>0&&!(j==1&&_43[0]=="")&&_43[j]==".."&&_43[j-1]!=".."){if(j==(_43.length-1)){_43.splice(j,1);_43[j-1]="";}else{_43.splice(j-1,2);j-=2;}}}}_40.path=_43.join("/");}}}}uri=[];if(_40.scheme){uri.push(_40.scheme,":");}if(_40.authority){uri.push("//",_40.authority);}uri.push(_40.path);if(_40.query){uri.push("?",_40.query);}if(_40.fragment){uri.push("#",_40.fragment);}}this.uri=uri.join("");var r=this.uri.match(ore);this.scheme=r[2]||(r[1]?"":n);this.authority=r[4]||(r[3]?"":n);this.path=r[5];this.query=r[7]||(r[6]?"":n);this.fragment=r[9]||(r[8]?"":n);if(this.authority!=n){r=this.authority.match(ire);this.user=r[3]||n;this.password=r[4]||n;this.host=r[6]||r[7];this.port=r[9]||n;}};dojo._Url.prototype.toString=function(){return this.uri;};dojo.moduleUrl=function(_44,url){var loc=d._getModuleSymbols(_44).join("/");if(!loc){return null;}if(loc.lastIndexOf("/")!=loc.length-1){loc+="/";}var _45=loc.indexOf(":");if(loc.charAt(0)!="/"&&(_45==-1||_45>loc.indexOf("/"))){loc=d.baseUrl+loc;}return new d._Url(loc,url);};})();if(typeof window!="undefined"){dojo.isBrowser=true;dojo._name="browser";(function(){var d=dojo;if(document&&document.getElementsByTagName){var _46=document.getElementsByTagName("script");var _47=/dojo(\.xd)?\.js(\W|$)/i;for(var i=0;i<_46.length;i++){var src=_46[i].getAttribute("src");if(!src){continue;}var m=src.match(_47);if(m){if(!d.config.baseUrl){d.config.baseUrl=src.substring(0,m.index);}var cfg=_46[i].getAttribute("djConfig");if(cfg){var _48=eval("({ "+cfg+" })");for(var x in _48){dojo.config[x]=_48[x];}}break;}}}d.baseUrl=d.config.baseUrl;var n=navigator;var dua=n.userAgent,dav=n.appVersion,tv=parseFloat(dav);if(dua.indexOf("Opera")>=0){d.isOpera=tv;}if(dua.indexOf("AdobeAIR")>=0){d.isAIR=1;}d.isKhtml=(dav.indexOf("Konqueror")>=0)?tv:0;d.isWebKit=parseFloat(dua.split("WebKit/")[1])||undefined;d.isChrome=parseFloat(dua.split("Chrome/")[1])||undefined;d.isMac=dav.indexOf("Macintosh")>=0;var _49=Math.max(dav.indexOf("WebKit"),dav.indexOf("Safari"),0);if(_49&&!dojo.isChrome){d.isSafari=parseFloat(dav.split("Version/")[1]);if(!d.isSafari||parseFloat(dav.substr(_49+7))<=419.3){d.isSafari=2;}}if(dua.indexOf("Gecko")>=0&&!d.isKhtml&&!d.isWebKit){d.isMozilla=d.isMoz=tv;}if(d.isMoz){d.isFF=parseFloat(dua.split("Firefox/")[1]||dua.split("Minefield/")[1])||undefined;}if(document.all&&!d.isOpera){d.isIE=parseFloat(dav.split("MSIE ")[1])||undefined;var _4a=document.documentMode;if(_4a&&_4a!=5&&Math.floor(d.isIE)!=_4a){d.isIE=_4a;}}if(dojo.isIE&&window.location.protocol==="file:"){dojo.config.ieForceActiveXXhr=true;}d.isQuirks=document.compatMode=="BackCompat";d.locale=dojo.config.locale||(d.isIE?n.userLanguage:n.language).toLowerCase();d._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];d._xhrObj=function(){var _4b,_4c;if(!dojo.isIE||!dojo.config.ieForceActiveXXhr){try{_4b=new XMLHttpRequest();}catch(e){}}if(!_4b){for(var i=0;i<3;++i){var _4d=d._XMLHTTP_PROGIDS[i];try{_4b=new ActiveXObject(_4d);}catch(e){_4c=e;}if(_4b){d._XMLHTTP_PROGIDS=[_4d];break;}}}if(!_4b){throw new Error("XMLHTTP not available: "+_4c);}return _4b;};d._isDocumentOk=function(_4e){var _4f=_4e.status||0,lp=location.protocol;return (_4f>=200&&_4f<300)||_4f==304||_4f==1223||(!_4f&&(lp=="file:"||lp=="chrome:"||lp=="chrome-extension:"||lp=="app:"));};var _50=window.location+"";var _51=document.getElementsByTagName("base");var _52=(_51&&_51.length>0);d._getText=function(uri,_53){var _54=d._xhrObj();if(!_52&&dojo._Url){uri=(new dojo._Url(_50,uri)).toString();}if(d.config.cacheBust){uri+="";uri+=(uri.indexOf("?")==-1?"?":"&")+String(d.config.cacheBust).replace(/\W+/g,"");}_54.open("GET",uri,false);try{_54.send(null);if(!d._isDocumentOk(_54)){var err=Error("Unable to load "+uri+" status:"+_54.status);err.status=_54.status;err.responseText=_54.responseText;throw err;}}catch(e){if(_53){return null;}throw e;}return _54.responseText;};var _55=window;var _56=function(_57,fp){var _58=_55.attachEvent||_55.addEventListener;_57=_55.attachEvent?_57:_57.substring(2);_58(_57,function(){fp.apply(_55,arguments);},false);};d._windowUnloaders=[];d.windowUnloaded=function(){var mll=d._windowUnloaders;while(mll.length){(mll.pop())();}d=null;};var _59=0;d.addOnWindowUnload=function(obj,_5a){d._onto(d._windowUnloaders,obj,_5a);if(!_59){_59=1;_56("onunload",d.windowUnloaded);}};var _5b=0;d.addOnUnload=function(obj,_5c){d._onto(d._unloaders,obj,_5c);if(!_5b){_5b=1;_56("onbeforeunload",dojo.unloaded);}};})();dojo._initFired=false;dojo._loadInit=function(e){if(dojo._scrollIntervalId){clearInterval(dojo._scrollIntervalId);dojo._scrollIntervalId=0;}if(!dojo._initFired){dojo._initFired=true;if(!dojo.config.afterOnLoad&&window.detachEvent){window.detachEvent("onload",dojo._loadInit);}if(dojo._inFlightCount==0){dojo._modulesLoaded();}}};if(!dojo.config.afterOnLoad){if(document.addEventListener){document.addEventListener("DOMContentLoaded",dojo._loadInit,false);window.addEventListener("load",dojo._loadInit,false);}else{if(window.attachEvent){window.attachEvent("onload",dojo._loadInit);if(!dojo.config.skipIeDomLoaded&&self===self.top){dojo._scrollIntervalId=setInterval(function(){try{if(document.body){document.documentElement.doScroll("left");dojo._loadInit();}}catch(e){}},30);}}}}if(dojo.isIE){try{(function(){document.namespaces.add("v","urn:schemas-microsoft-com:vml");var _5d=["*","group","roundrect","oval","shape","rect","imagedata","path","textpath","text"],i=0,l=1,s=document.createStyleSheet();if(dojo.isIE>=8){i=1;l=_5d.length;}for(;i<l;++i){s.addRule("v\\:"+_5d[i],"behavior:url(#default#VML); display:inline-block");}})();}catch(e){}}}(function(){var mp=dojo.config["modulePaths"];if(mp){for(var _5e in mp){dojo.registerModulePath(_5e,mp[_5e]);}}})();if(dojo.config.isDebug){dojo.require("dojo._firebug.firebug");}if(dojo.config.debugAtAllCosts){dojo.config.useXDomain=true;dojo.require("dojo._base._loader.loader_xd");dojo.require("dojo._base._loader.loader_debug");dojo.require("dojo.i18n");}if(!dojo._hasResource["dojo._base.lang"]){dojo._hasResource["dojo._base.lang"]=true;dojo.provide("dojo._base.lang");(function(){var d=dojo,_5f=Object.prototype.toString;dojo.isString=function(it){return (typeof it=="string"||it instanceof String);};dojo.isArray=function(it){return it&&(it instanceof Array||typeof it=="array");};dojo.isFunction=function(it){return _5f.call(it)==="[object Function]";};dojo.isObject=function(it){return it!==undefined&&(it===null||typeof it=="object"||d.isArray(it)||d.isFunction(it));};dojo.isArrayLike=function(it){return it&&it!==undefined&&!d.isString(it)&&!d.isFunction(it)&&!(it.tagName&&it.tagName.toLowerCase()=="form")&&(d.isArray(it)||isFinite(it.length));};dojo.isAlien=function(it){return it&&!d.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));};dojo.extend=function(_60,_61){for(var i=1,l=arguments.length;i<l;i++){d._mixin(_60.prototype,arguments[i]);}return _60;};dojo._hitchArgs=function(_62,_63){var pre=d._toArray(arguments,2);var _64=d.isString(_63);return function(){var _65=d._toArray(arguments);var f=_64?(_62||d.global)[_63]:_63;return f&&f.apply(_62||this,pre.concat(_65));};};dojo.hitch=function(_66,_67){if(arguments.length>2){return d._hitchArgs.apply(d,arguments);}if(!_67){_67=_66;_66=null;}if(d.isString(_67)){_66=_66||d.global;if(!_66[_67]){throw (["dojo.hitch: scope[\"",_67,"\"] is null (scope=\"",_66,"\")"].join(""));}return function(){return _66[_67].apply(_66,arguments||[]);};}return !_66?_67:function(){return _67.apply(_66,arguments||[]);};};dojo.delegate=dojo._delegate=(function(){function TMP(){};return function(obj,_68){TMP.prototype=obj;var tmp=new TMP();TMP.prototype=null;if(_68){d._mixin(tmp,_68);}return tmp;};})();var _69=function(obj,_6a,_6b){return (_6b||[]).concat(Array.prototype.slice.call(obj,_6a||0));};var _6c=function(obj,_6d,_6e){var arr=_6e||[];for(var x=_6d||0;x<obj.length;x++){arr.push(obj[x]);}return arr;};dojo._toArray=d.isIE?function(obj){return ((obj.item)?_6c:_69).apply(this,arguments);}:_69;dojo.partial=function(_6f){var arr=[null];return d.hitch.apply(d,arr.concat(d._toArray(arguments)));};var _70=d._extraNames,_71=_70.length,_72={};dojo.clone=function(o){if(!o||typeof o!="object"||d.isFunction(o)){return o;}if(o.nodeType&&"cloneNode" in o){return o.cloneNode(true);}if(o instanceof Date){return new Date(o.getTime());}var r,i,l,s,_73;if(d.isArray(o)){r=[];for(i=0,l=o.length;i<l;++i){if(i in o){r.push(d.clone(o[i]));}}}else{r=o.constructor?new o.constructor():{};}for(_73 in o){s=o[_73];if(!(_73 in r)||(r[_73]!==s&&(!(_73 in _72)||_72[_73]!==s))){r[_73]=d.clone(s);}}if(_71){for(i=0;i<_71;++i){_73=_70[i];s=o[_73];if(!(_73 in r)||(r[_73]!==s&&(!(_73 in _72)||_72[_73]!==s))){r[_73]=s;}}}return r;};dojo.trim=String.prototype.trim?function(str){return str.trim();}:function(str){return str.replace(/^\s\s*/,"").replace(/\s\s*$/,"");};var _74=/\{([^\}]+)\}/g;dojo.replace=function(_75,map,_76){return _75.replace(_76||_74,d.isFunction(map)?map:function(_77,k){return d.getObject(k,false,map);});};})();}if(!dojo._hasResource["dojo._base.array"]){dojo._hasResource["dojo._base.array"]=true;dojo.provide("dojo._base.array");(function(){var _78=function(arr,obj,cb){return [(typeof arr=="string")?arr.split(""):arr,obj||dojo.global,(typeof cb=="string")?new Function("item","index","array",cb):cb];};var _79=function(_7a,arr,_7b,_7c){var _7d=_78(arr,_7c,_7b);arr=_7d[0];for(var i=0,l=arr.length;i<l;++i){var _7e=!!_7d[2].call(_7d[1],arr[i],i,arr);if(_7a^_7e){return _7e;}}return _7a;};dojo.mixin(dojo,{indexOf:function(_7f,_80,_81,_82){var _83=1,end=_7f.length||0,i=0;if(_82){i=end-1;_83=end=-1;}if(_81!=undefined){i=_81;}if((_82&&i>end)||i<end){for(;i!=end;i+=_83){if(_7f[i]==_80){return i;}}}return -1;},lastIndexOf:function(_84,_85,_86){return dojo.indexOf(_84,_85,_86,true);},forEach:function(arr,_87,_88){if(!arr||!arr.length){return;}var _89=_78(arr,_88,_87);arr=_89[0];for(var i=0,l=arr.length;i<l;++i){_89[2].call(_89[1],arr[i],i,arr);}},every:function(arr,_8a,_8b){return _79(true,arr,_8a,_8b);},some:function(arr,_8c,_8d){return _79(false,arr,_8c,_8d);},map:function(arr,_8e,_8f){var _90=_78(arr,_8f,_8e);arr=_90[0];var _91=(arguments[3]?(new arguments[3]()):[]);for(var i=0,l=arr.length;i<l;++i){_91.push(_90[2].call(_90[1],arr[i],i,arr));}return _91;},filter:function(arr,_92,_93){var _94=_78(arr,_93,_92);arr=_94[0];var _95=[];for(var i=0,l=arr.length;i<l;++i){if(_94[2].call(_94[1],arr[i],i,arr)){_95.push(arr[i]);}}return _95;}});})();}if(!dojo._hasResource["dojo._base.declare"]){dojo._hasResource["dojo._base.declare"]=true;dojo.provide("dojo._base.declare");(function(){var d=dojo,mix=d._mixin,op=Object.prototype,_96=op.toString,_97=new Function,_98=0,_99="constructor";function err(msg){throw new Error("declare: "+msg);};function _9a(_9b){var _9c=[],_9d=[{cls:0,refs:[]}],_9e={},_9f=1,l=_9b.length,i=0,j,lin,_a0,top,_a1,rec,_a2,_a3;for(;i<l;++i){_a0=_9b[i];if(!_a0){err("mixin #"+i+" is unknown. Did you use dojo.require to pull it in?");}else{if(_96.call(_a0)!="[object Function]"){err("mixin #"+i+" is not a callable constructor.");}}lin=_a0._meta?_a0._meta.bases:[_a0];top=0;for(j=lin.length-1;j>=0;--j){_a1=lin[j].prototype;if(!_a1.hasOwnProperty("declaredClass")){_a1.declaredClass="uniqName_"+(_98++);}_a2=_a1.declaredClass;if(!_9e.hasOwnProperty(_a2)){_9e[_a2]={count:0,refs:[],cls:lin[j]};++_9f;}rec=_9e[_a2];if(top&&top!==rec){rec.refs.push(top);++top.count;}top=rec;}++top.count;_9d[0].refs.push(top);}while(_9d.length){top=_9d.pop();_9c.push(top.cls);--_9f;while(_a3=top.refs,_a3.length==1){top=_a3[0];if(!top||--top.count){top=0;break;}_9c.push(top.cls);--_9f;}if(top){for(i=0,l=_a3.length;i<l;++i){top=_a3[i];if(!--top.count){_9d.push(top);}}}}if(_9f){err("can't build consistent linearization");}_a0=_9b[0];_9c[0]=_a0?_a0._meta&&_a0===_9c[_9c.length-_a0._meta.bases.length]?_a0._meta.bases.length:1:0;return _9c;};function _a4(_a5,a,f){var _a6,_a7,_a8,_a9,_aa,_ab,_ac,opf,pos,_ad=this._inherited=this._inherited||{};if(typeof _a5=="string"){_a6=_a5;_a5=a;a=f;}f=0;_a9=_a5.callee;_a6=_a6||_a9.nom;if(!_a6){err("can't deduce a name to call inherited()");}_aa=this.constructor._meta;_a8=_aa.bases;pos=_ad.p;if(_a6!=_99){if(_ad.c!==_a9){pos=0;_ab=_a8[0];_aa=_ab._meta;if(_aa.hidden[_a6]!==_a9){_a7=_aa.chains;if(_a7&&typeof _a7[_a6]=="string"){err("calling chained method with inherited: "+_a6);}do{_aa=_ab._meta;_ac=_ab.prototype;if(_aa&&(_ac[_a6]===_a9&&_ac.hasOwnProperty(_a6)||_aa.hidden[_a6]===_a9)){break;}}while(_ab=_a8[++pos]);pos=_ab?pos:-1;}}_ab=_a8[++pos];if(_ab){_ac=_ab.prototype;if(_ab._meta&&_ac.hasOwnProperty(_a6)){f=_ac[_a6];}else{opf=op[_a6];do{_ac=_ab.prototype;f=_ac[_a6];if(f&&(_ab._meta?_ac.hasOwnProperty(_a6):f!==opf)){break;}}while(_ab=_a8[++pos]);}}f=_ab&&f||op[_a6];}else{if(_ad.c!==_a9){pos=0;_aa=_a8[0]._meta;if(_aa&&_aa.ctor!==_a9){_a7=_aa.chains;if(!_a7||_a7.constructor!=="manual"){err("calling chained constructor with inherited");}while(_ab=_a8[++pos]){_aa=_ab._meta;if(_aa&&_aa.ctor===_a9){break;}}pos=_ab?pos:-1;}}while(_ab=_a8[++pos]){_aa=_ab._meta;f=_aa?_aa.ctor:_ab;if(f){break;}}f=_ab&&f;}_ad.c=f;_ad.p=pos;if(f){return a===true?f:f.apply(this,a||_a5);}};function _ae(_af,_b0){if(typeof _af=="string"){return this.inherited(_af,_b0,true);}return this.inherited(_af,true);};function _b1(cls){var _b2=this.constructor._meta.bases;for(var i=0,l=_b2.length;i<l;++i){if(_b2[i]===cls){return true;}}return this instanceof cls;};function _b3(_b4,_b5){var _b6,i=0,l=d._extraNames.length;for(_b6 in _b5){if(_b6!=_99&&_b5.hasOwnProperty(_b6)){_b4[_b6]=_b5[_b6];}}for(;i<l;++i){_b6=d._extraNames[i];if(_b6!=_99&&_b5.hasOwnProperty(_b6)){_b4[_b6]=_b5[_b6];}}};function _b7(_b8,_b9){var _ba,t,i=0,l=d._extraNames.length;for(_ba in _b9){t=_b9[_ba];if((t!==op[_ba]||!(_ba in op))&&_ba!=_99){if(_96.call(t)=="[object Function]"){t.nom=_ba;}_b8[_ba]=t;}}for(;i<l;++i){_ba=d._extraNames[i];t=_b9[_ba];if((t!==op[_ba]||!(_ba in op))&&_ba!=_99){if(_96.call(t)=="[object Function]"){t.nom=_ba;}_b8[_ba]=t;}}return _b8;};function _bb(_bc){_b7(this.prototype,_bc);return this;};function _bd(_be,_bf){return function(){var a=arguments,_c0=a,a0=a[0],f,i,m,l=_be.length,_c1;if(!(this instanceof a.callee)){return _c2(a);}if(_bf&&(a0&&a0.preamble||this.preamble)){_c1=new Array(_be.length);_c1[0]=a;for(i=0;;){a0=a[0];if(a0){f=a0.preamble;if(f){a=f.apply(this,a)||a;}}f=_be[i].prototype;f=f.hasOwnProperty("preamble")&&f.preamble;if(f){a=f.apply(this,a)||a;}if(++i==l){break;}_c1[i]=a;}}for(i=l-1;i>=0;--i){f=_be[i];m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,_c1?_c1[i]:a);}}f=this.postscript;if(f){f.apply(this,_c0);}};};function _c3(_c4,_c5){return function(){var a=arguments,t=a,a0=a[0],f;if(!(this instanceof a.callee)){return _c2(a);}if(_c5){if(a0){f=a0.preamble;if(f){t=f.apply(this,t)||t;}}f=this.preamble;if(f){f.apply(this,t);}}if(_c4){_c4.apply(this,a);}f=this.postscript;if(f){f.apply(this,a);}};};function _c6(_c7){return function(){var a=arguments,i=0,f,m;if(!(this instanceof a.callee)){return _c2(a);}for(;f=_c7[i];++i){m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,a);break;}}f=this.postscript;if(f){f.apply(this,a);}};};function _c8(_c9,_ca,_cb){return function(){var b,m,f,i=0,_cc=1;if(_cb){i=_ca.length-1;_cc=-1;}for(;b=_ca[i];i+=_cc){m=b._meta;f=(m?m.hidden:b.prototype)[_c9];if(f){f.apply(this,arguments);}}};};function _cd(_ce){_97.prototype=_ce.prototype;var t=new _97;_97.prototype=null;return t;};function _c2(_cf){var _d0=_cf.callee,t=_cd(_d0);_d0.apply(t,_cf);return t;};d.declare=function(_d1,_d2,_d3){if(typeof _d1!="string"){_d3=_d2;_d2=_d1;_d1="";}_d3=_d3||{};var _d4,i,t,_d5,_d6,_d7,_d8,_d9=1,_da=_d2;if(_96.call(_d2)=="[object Array]"){_d7=_9a(_d2);t=_d7[0];_d9=_d7.length-t;_d2=_d7[_d9];}else{_d7=[0];if(_d2){if(_96.call(_d2)=="[object Function]"){t=_d2._meta;_d7=_d7.concat(t?t.bases:_d2);}else{err("base class is not a callable constructor.");}}else{if(_d2!==null){err("unknown base class. Did you use dojo.require to pull it in?");}}}if(_d2){for(i=_d9-1;;--i){_d4=_cd(_d2);if(!i){break;}t=_d7[i];(t._meta?_b3:mix)(_d4,t.prototype);_d5=new Function;_d5.superclass=_d2;_d5.prototype=_d4;_d2=_d4.constructor=_d5;}}else{_d4={};}_b7(_d4,_d3);t=_d3.constructor;if(t!==op.constructor){t.nom=_99;_d4.constructor=t;}for(i=_d9-1;i;--i){t=_d7[i]._meta;if(t&&t.chains){_d8=mix(_d8||{},t.chains);}}if(_d4["-chains-"]){_d8=mix(_d8||{},_d4["-chains-"]);}t=!_d8||!_d8.hasOwnProperty(_99);_d7[0]=_d5=(_d8&&_d8.constructor==="manual")?_c6(_d7):(_d7.length==1?_c3(_d3.constructor,t):_bd(_d7,t));_d5._meta={bases:_d7,hidden:_d3,chains:_d8,parents:_da,ctor:_d3.constructor};_d5.superclass=_d2&&_d2.prototype;_d5.extend=_bb;_d5.prototype=_d4;_d4.constructor=_d5;_d4.getInherited=_ae;_d4.inherited=_a4;_d4.isInstanceOf=_b1;if(_d1){_d4.declaredClass=_d1;d.setObject(_d1,_d5);}if(_d8){for(_d6 in _d8){if(_d4[_d6]&&typeof _d8[_d6]=="string"&&_d6!=_99){t=_d4[_d6]=_c8(_d6,_d7,_d8[_d6]==="after");t.nom=_d6;}}}return _d5;};d.safeMixin=_b7;})();}if(!dojo._hasResource["dojo._base.connect"]){dojo._hasResource["dojo._base.connect"]=true;dojo.provide("dojo._base.connect");dojo._listener={getDispatcher:function(){return function(){var ap=Array.prototype,c=arguments.callee,ls=c._listeners,t=c.target;var r=t&&t.apply(this,arguments);var i,lls;lls=[].concat(ls);for(i in lls){if(!(i in ap)){lls[i].apply(this,arguments);}}return r;};},add:function(_db,_dc,_dd){_db=_db||dojo.global;var f=_db[_dc];if(!f||!f._listeners){var d=dojo._listener.getDispatcher();d.target=f;d._listeners=[];f=_db[_dc]=d;}return f._listeners.push(_dd);},remove:function(_de,_df,_e0){var f=(_de||dojo.global)[_df];if(f&&f._listeners&&_e0--){delete f._listeners[_e0];}}};dojo.connect=function(obj,_e1,_e2,_e3,_e4){var a=arguments,_e5=[],i=0;_e5.push(dojo.isString(a[0])?null:a[i++],a[i++]);var a1=a[i+1];_e5.push(dojo.isString(a1)||dojo.isFunction(a1)?a[i++]:null,a[i++]);for(var l=a.length;i<l;i++){_e5.push(a[i]);}return dojo._connect.apply(this,_e5);};dojo._connect=function(obj,_e6,_e7,_e8){var l=dojo._listener,h=l.add(obj,_e6,dojo.hitch(_e7,_e8));return [obj,_e6,h,l];};dojo.disconnect=function(_e9){if(_e9&&_e9[0]!==undefined){dojo._disconnect.apply(this,_e9);delete _e9[0];}};dojo._disconnect=function(obj,_ea,_eb,_ec){_ec.remove(obj,_ea,_eb);};dojo._topics={};dojo.subscribe=function(_ed,_ee,_ef){return [_ed,dojo._listener.add(dojo._topics,_ed,dojo.hitch(_ee,_ef))];};dojo.unsubscribe=function(_f0){if(_f0){dojo._listener.remove(dojo._topics,_f0[0],_f0[1]);}};dojo.publish=function(_f1,_f2){var f=dojo._topics[_f1];if(f){f.apply(this,_f2||[]);}};dojo.connectPublisher=function(_f3,obj,_f4){var pf=function(){dojo.publish(_f3,arguments);};return _f4?dojo.connect(obj,_f4,pf):dojo.connect(obj,pf);};}if(!dojo._hasResource["dojo._base.Deferred"]){dojo._hasResource["dojo._base.Deferred"]=true;dojo.provide("dojo._base.Deferred");(function(){var _f5=function(){};var _f6=Object.freeze||function(){};dojo.Deferred=function(_f7){var _f8,_f9,_fa,_fb,_fc;var _fd=this.promise={};function _fe(_ff){if(_f9){throw new Error("This deferred has already been resolved");}_f8=_ff;_f9=true;_100();};function _100(){var _101;while(!_101&&_fc){var _102=_fc;_fc=_fc.next;if(_101=(_102.progress==_f5)){_f9=false;}var func=(_fa?_102.error:_102.resolved);if(func){try{var _103=func(_f8);if(_103&&typeof _103.then==="function"){_103.then(dojo.hitch(_102.deferred,"resolve"),dojo.hitch(_102.deferred,"reject"));continue;}var _104=_101&&_103===undefined;_102.deferred[_104&&_fa?"reject":"resolve"](_104?_f8:_103);}catch(e){_102.deferred.reject(e);}}else{if(_fa){_102.deferred.reject(_f8);}else{_102.deferred.resolve(_f8);}}}};this.resolve=this.callback=function(_105){this.fired=0;this.results=[_105,null];_fe(_105);};this.reject=this.errback=function(_106){_fa=true;this.fired=1;_fe(_106);this.results=[null,_106];if(!_106||_106.log!==false){(dojo.config.deferredOnError||function(x){console.error(x);})(_106);}};this.progress=function(_107){var _108=_fc;while(_108){var _109=_108.progress;_109&&_109(_107);_108=_108.next;}};this.addCallbacks=function(_10a,_10b){this.then(_10a,_10b,_f5);return this;};this.then=_fd.then=function(_10c,_10d,_10e){var _10f=_10e==_f5?this:new dojo.Deferred(_fd.cancel);var _110={resolved:_10c,error:_10d,progress:_10e,deferred:_10f};if(_fc){_fb=_fb.next=_110;}else{_fc=_fb=_110;}if(_f9){_100();}return _10f.promise;};var _111=this;this.cancel=_fd.cancel=function(){if(!_f9){var _112=_f7&&_f7(_111);if(!_f9){if(!(_112 instanceof Error)){_112=new Error(_112);}_112.log=false;_111.reject(_112);}}};_f6(_fd);};dojo.extend(dojo.Deferred,{addCallback:function(_113){return this.addCallbacks(dojo.hitch.apply(dojo,arguments));},addErrback:function(_114){return this.addCallbacks(null,dojo.hitch.apply(dojo,arguments));},addBoth:function(_115){var _116=dojo.hitch.apply(dojo,arguments);return this.addCallbacks(_116,_116);},fired:-1});})();dojo.when=function(_117,_118,_119,_11a){if(_117&&typeof _117.then==="function"){return _117.then(_118,_119,_11a);}return _118(_117);};}if(!dojo._hasResource["dojo._base.json"]){dojo._hasResource["dojo._base.json"]=true;dojo.provide("dojo._base.json");dojo.fromJson=function(json){return eval("("+json+")");};dojo._escapeString=function(str){return ("\""+str.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");};dojo.toJsonIndentStr="\t";dojo.toJson=function(it,_11b,_11c){if(it===undefined){return "undefined";}var _11d=typeof it;if(_11d=="number"||_11d=="boolean"){return it+"";}if(it===null){return "null";}if(dojo.isString(it)){return dojo._escapeString(it);}var _11e=arguments.callee;var _11f;_11c=_11c||"";var _120=_11b?_11c+dojo.toJsonIndentStr:"";var tf=it.__json__||it.json;if(dojo.isFunction(tf)){_11f=tf.call(it);if(it!==_11f){return _11e(_11f,_11b,_120);}}if(it.nodeType&&it.cloneNode){throw new Error("Can't serialize DOM nodes");}var sep=_11b?" ":"";var _121=_11b?"\n":"";if(dojo.isArray(it)){var res=dojo.map(it,function(obj){var val=_11e(obj,_11b,_120);if(typeof val!="string"){val="undefined";}return _121+_120+val;});return "["+res.join(","+sep)+_121+_11c+"]";}if(_11d=="function"){return null;}var _122=[],key;for(key in it){var _123,val;if(typeof key=="number"){_123="\""+key+"\"";}else{if(typeof key=="string"){_123=dojo._escapeString(key);}else{continue;}}val=_11e(it[key],_11b,_120);if(typeof val!="string"){continue;}_122.push(_121+_120+_123+":"+sep+val);}return "{"+_122.join(","+sep)+_121+_11c+"}";};}if(!dojo._hasResource["dojo._base.Color"]){dojo._hasResource["dojo._base.Color"]=true;dojo.provide("dojo._base.Color");(function(){var d=dojo;dojo.Color=function(_124){if(_124){this.setColor(_124);}};dojo.Color.named={black:[0,0,0],silver:[192,192,192],gray:[128,128,128],white:[255,255,255],maroon:[128,0,0],red:[255,0,0],purple:[128,0,128],fuchsia:[255,0,255],green:[0,128,0],lime:[0,255,0],olive:[128,128,0],yellow:[255,255,0],navy:[0,0,128],blue:[0,0,255],teal:[0,128,128],aqua:[0,255,255],transparent:d.config.transparentColor||[255,255,255]};dojo.extend(dojo.Color,{r:255,g:255,b:255,a:1,_set:function(r,g,b,a){var t=this;t.r=r;t.g=g;t.b=b;t.a=a;},setColor:function(_125){if(d.isString(_125)){d.colorFromString(_125,this);}else{if(d.isArray(_125)){d.colorFromArray(_125,this);}else{this._set(_125.r,_125.g,_125.b,_125.a);if(!(_125 instanceof d.Color)){this.sanitize();}}}return this;},sanitize:function(){return this;},toRgb:function(){var t=this;return [t.r,t.g,t.b];},toRgba:function(){var t=this;return [t.r,t.g,t.b,t.a];},toHex:function(){var arr=d.map(["r","g","b"],function(x){var s=this[x].toString(16);return s.length<2?"0"+s:s;},this);return "#"+arr.join("");},toCss:function(_126){var t=this,rgb=t.r+", "+t.g+", "+t.b;return (_126?"rgba("+rgb+", "+t.a:"rgb("+rgb)+")";},toString:function(){return this.toCss(true);}});dojo.blendColors=function(_127,end,_128,obj){var t=obj||new d.Color();d.forEach(["r","g","b","a"],function(x){t[x]=_127[x]+(end[x]-_127[x])*_128;if(x!="a"){t[x]=Math.round(t[x]);}});return t.sanitize();};dojo.colorFromRgb=function(_129,obj){var m=_129.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);return m&&dojo.colorFromArray(m[1].split(/\s*,\s*/),obj);};dojo.colorFromHex=function(_12a,obj){var t=obj||new d.Color(),bits=(_12a.length==4)?4:8,mask=(1<<bits)-1;_12a=Number("0x"+_12a.substr(1));if(isNaN(_12a)){return null;}d.forEach(["b","g","r"],function(x){var c=_12a&mask;_12a>>=bits;t[x]=bits==4?17*c:c;});t.a=1;return t;};dojo.colorFromArray=function(a,obj){var t=obj||new d.Color();t._set(Number(a[0]),Number(a[1]),Number(a[2]),Number(a[3]));if(isNaN(t.a)){t.a=1;}return t.sanitize();};dojo.colorFromString=function(str,obj){var a=d.Color.named[str];return a&&d.colorFromArray(a,obj)||d.colorFromRgb(str,obj)||d.colorFromHex(str,obj);};})();}if(!dojo._hasResource["dojo._base"]){dojo._hasResource["dojo._base"]=true;dojo.provide("dojo._base");}if(!dojo._hasResource["dojo._base.window"]){dojo._hasResource["dojo._base.window"]=true;dojo.provide("dojo._base.window");dojo.doc=window["document"]||null;dojo.body=function(){return dojo.doc.body||dojo.doc.getElementsByTagName("body")[0];};dojo.setContext=function(_12b,_12c){dojo.global=_12b;dojo.doc=_12c;};dojo.withGlobal=function(_12d,_12e,_12f,_130){var _131=dojo.global;try{dojo.global=_12d;return dojo.withDoc.call(null,_12d.document,_12e,_12f,_130);}finally{dojo.global=_131;}};dojo.withDoc=function(_132,_133,_134,_135){var _136=dojo.doc,_137=dojo._bodyLtr,oldQ=dojo.isQuirks;try{dojo.doc=_132;delete dojo._bodyLtr;dojo.isQuirks=dojo.doc.compatMode=="BackCompat";if(_134&&typeof _133=="string"){_133=_134[_133];}return _133.apply(_134,_135||[]);}finally{dojo.doc=_136;delete dojo._bodyLtr;if(_137!==undefined){dojo._bodyLtr=_137;}dojo.isQuirks=oldQ;}};}if(!dojo._hasResource["dojo._base.event"]){dojo._hasResource["dojo._base.event"]=true;dojo.provide("dojo._base.event");(function(){var del=(dojo._event_listener={add:function(node,name,fp){if(!node){return;}name=del._normalizeEventName(name);fp=del._fixCallback(name,fp);var _138=name;if(!dojo.isIE&&(name=="mouseenter"||name=="mouseleave")){var ofp=fp;name=(name=="mouseenter")?"mouseover":"mouseout";fp=function(e){if(!dojo.isDescendant(e.relatedTarget,node)){return ofp.call(this,e);}};}node.addEventListener(name,fp,false);return fp;},remove:function(node,_139,_13a){if(node){_139=del._normalizeEventName(_139);if(!dojo.isIE&&(_139=="mouseenter"||_139=="mouseleave")){_139=(_139=="mouseenter")?"mouseover":"mouseout";}node.removeEventListener(_139,_13a,false);}},_normalizeEventName:function(name){return name.slice(0,2)=="on"?name.slice(2):name;},_fixCallback:function(name,fp){return name!="keypress"?fp:function(e){return fp.call(this,del._fixEvent(e,this));};},_fixEvent:function(evt,_13b){switch(evt.type){case "keypress":del._setKeyChar(evt);break;}return evt;},_setKeyChar:function(evt){evt.keyChar=evt.charCode?String.fromCharCode(evt.charCode):"";evt.charOrCode=evt.keyChar||evt.keyCode;},_punctMap:{106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39}});dojo.fixEvent=function(evt,_13c){return del._fixEvent(evt,_13c);};dojo.stopEvent=function(evt){evt.preventDefault();evt.stopPropagation();};var _13d=dojo._listener;dojo._connect=function(obj,_13e,_13f,_140,_141){var _142=obj&&(obj.nodeType||obj.attachEvent||obj.addEventListener);var lid=_142?(_141?2:1):0,l=[dojo._listener,del,_13d][lid];var h=l.add(obj,_13e,dojo.hitch(_13f,_140));return [obj,_13e,h,lid];};dojo._disconnect=function(obj,_143,_144,_145){([dojo._listener,del,_13d][_145]).remove(obj,_143,_144);};dojo.keys={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,META:dojo.isSafari?91:224,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145,copyKey:dojo.isMac&&!dojo.isAIR?(dojo.isSafari?91:224):17};var _146=dojo.isMac?"metaKey":"ctrlKey";dojo.isCopyKey=function(e){return e[_146];};if(dojo.isIE){dojo.mouseButtons={LEFT:1,MIDDLE:4,RIGHT:2,isButton:function(e,_147){return e.button&_147;},isLeft:function(e){return e.button&1;},isMiddle:function(e){return e.button&4;},isRight:function(e){return e.button&2;}};}else{dojo.mouseButtons={LEFT:0,MIDDLE:1,RIGHT:2,isButton:function(e,_148){return e.button==_148;},isLeft:function(e){return e.button==0;},isMiddle:function(e){return e.button==1;},isRight:function(e){return e.button==2;}};}if(dojo.isIE){var _149=function(e,code){try{return (e.keyCode=code);}catch(e){return 0;}};var iel=dojo._listener;var _14a=(dojo._ieListenersName="_"+dojo._scopeName+"_listeners");if(!dojo.config._allow_leaks){_13d=iel=dojo._ie_listener={handlers:[],add:function(_14b,_14c,_14d){_14b=_14b||dojo.global;var f=_14b[_14c];if(!f||!f[_14a]){var d=dojo._getIeDispatcher();d.target=f&&(ieh.push(f)-1);d[_14a]=[];f=_14b[_14c]=d;}return f[_14a].push(ieh.push(_14d)-1);},remove:function(_14e,_14f,_150){var f=(_14e||dojo.global)[_14f],l=f&&f[_14a];if(f&&l&&_150--){delete ieh[l[_150]];delete l[_150];}}};var ieh=iel.handlers;}dojo.mixin(del,{add:function(node,_151,fp){if(!node){return;}_151=del._normalizeEventName(_151);if(_151=="onkeypress"){var kd=node.onkeydown;if(!kd||!kd[_14a]||!kd._stealthKeydownHandle){var h=del.add(node,"onkeydown",del._stealthKeyDown);kd=node.onkeydown;kd._stealthKeydownHandle=h;kd._stealthKeydownRefs=1;}else{kd._stealthKeydownRefs++;}}return iel.add(node,_151,del._fixCallback(fp));},remove:function(node,_152,_153){_152=del._normalizeEventName(_152);iel.remove(node,_152,_153);if(_152=="onkeypress"){var kd=node.onkeydown;if(--kd._stealthKeydownRefs<=0){iel.remove(node,"onkeydown",kd._stealthKeydownHandle);delete kd._stealthKeydownHandle;}}},_normalizeEventName:function(_154){return _154.slice(0,2)!="on"?"on"+_154:_154;},_nop:function(){},_fixEvent:function(evt,_155){if(!evt){var w=_155&&(_155.ownerDocument||_155.document||_155).parentWindow||window;evt=w.event;}if(!evt){return (evt);}evt.target=evt.srcElement;evt.currentTarget=(_155||evt.srcElement);evt.layerX=evt.offsetX;evt.layerY=evt.offsetY;var se=evt.srcElement,doc=(se&&se.ownerDocument)||document;var _156=((dojo.isIE<6)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;var _157=dojo._getIeDocumentElementOffset();evt.pageX=evt.clientX+dojo._fixIeBiDiScrollLeft(_156.scrollLeft||0)-_157.x;evt.pageY=evt.clientY+(_156.scrollTop||0)-_157.y;if(evt.type=="mouseover"){evt.relatedTarget=evt.fromElement;}if(evt.type=="mouseout"){evt.relatedTarget=evt.toElement;}evt.stopPropagation=del._stopPropagation;evt.preventDefault=del._preventDefault;return del._fixKeys(evt);},_fixKeys:function(evt){switch(evt.type){case "keypress":var c=("charCode" in evt?evt.charCode:evt.keyCode);if(c==10){c=0;evt.keyCode=13;}else{if(c==13||c==27){c=0;}else{if(c==3){c=99;}}}evt.charCode=c;del._setKeyChar(evt);break;}return evt;},_stealthKeyDown:function(evt){var kp=evt.currentTarget.onkeypress;if(!kp||!kp[_14a]){return;}var k=evt.keyCode;var _158=k!=13&&k!=32&&k!=27&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);if(_158||evt.ctrlKey){var c=_158?0:k;if(evt.ctrlKey){if(k==3||k==13){return;}else{if(c>95&&c<106){c-=48;}else{if((!evt.shiftKey)&&(c>=65&&c<=90)){c+=32;}else{c=del._punctMap[c]||c;}}}}var faux=del._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c});kp.call(evt.currentTarget,faux);evt.cancelBubble=faux.cancelBubble;evt.returnValue=faux.returnValue;_149(evt,faux.keyCode);}},_stopPropagation:function(){this.cancelBubble=true;},_preventDefault:function(){this.bubbledKeyCode=this.keyCode;if(this.ctrlKey){_149(this,0);}this.returnValue=false;}});dojo.stopEvent=function(evt){evt=evt||window.event;del._stopPropagation.call(evt);del._preventDefault.call(evt);};}del._synthesizeEvent=function(evt,_159){var faux=dojo.mixin({},evt,_159);del._setKeyChar(faux);faux.preventDefault=function(){evt.preventDefault();};faux.stopPropagation=function(){evt.stopPropagation();};return faux;};if(dojo.isOpera){dojo.mixin(del,{_fixEvent:function(evt,_15a){switch(evt.type){case "keypress":var c=evt.which;if(c==3){c=99;}c=c<41&&!evt.shiftKey?0:c;if(evt.ctrlKey&&!evt.shiftKey&&c>=65&&c<=90){c+=32;}return del._synthesizeEvent(evt,{charCode:c});}return evt;}});}if(dojo.isWebKit){del._add=del.add;del._remove=del.remove;dojo.mixin(del,{add:function(node,_15b,fp){if(!node){return;}var _15c=del._add(node,_15b,fp);if(del._normalizeEventName(_15b)=="keypress"){_15c._stealthKeyDownHandle=del._add(node,"keydown",function(evt){var k=evt.keyCode;var _15d=k!=13&&k!=32&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);if(_15d||evt.ctrlKey){var c=_15d?0:k;if(evt.ctrlKey){if(k==3||k==13){return;}else{if(c>95&&c<106){c-=48;}else{if(!evt.shiftKey&&c>=65&&c<=90){c+=32;}else{c=del._punctMap[c]||c;}}}}var faux=del._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c});fp.call(evt.currentTarget,faux);}});}return _15c;},remove:function(node,_15e,_15f){if(node){if(_15f._stealthKeyDownHandle){del._remove(node,"keydown",_15f._stealthKeyDownHandle);}del._remove(node,_15e,_15f);}},_fixEvent:function(evt,_160){switch(evt.type){case "keypress":if(evt.faux){return evt;}var c=evt.charCode;c=c>=32?c:0;return del._synthesizeEvent(evt,{charCode:c,faux:true});}return evt;}});}})();if(dojo.isIE){dojo._ieDispatcher=function(args,_161){var ap=Array.prototype,h=dojo._ie_listener.handlers,c=args.callee,ls=c[dojo._ieListenersName],t=h[c.target];var r=t&&t.apply(_161,args);var lls=[].concat(ls);for(var i in lls){var f=h[lls[i]];if(!(i in ap)&&f){f.apply(_161,args);}}return r;};dojo._getIeDispatcher=function(){return new Function(dojo._scopeName+"._ieDispatcher(arguments, this)");};dojo._event_listener._fixCallback=function(fp){var f=dojo._event_listener._fixEvent;return function(e){return fp.call(this,f(e,this));};};}}if(!dojo._hasResource["dojo._base.html"]){dojo._hasResource["dojo._base.html"]=true;dojo.provide("dojo._base.html");try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}if(dojo.isIE||dojo.isOpera){dojo.byId=function(id,doc){if(typeof id!="string"){return id;}var _162=doc||dojo.doc,te=_162.getElementById(id);if(te&&(te.attributes.id.value==id||te.id==id)){return te;}else{var eles=_162.all[id];if(!eles||eles.nodeName){eles=[eles];}var i=0;while((te=eles[i++])){if((te.attributes&&te.attributes.id&&te.attributes.id.value==id)||te.id==id){return te;}}}};}else{dojo.byId=function(id,doc){return (typeof id=="string")?(doc||dojo.doc).getElementById(id):id;};}(function(){var d=dojo;var byId=d.byId;var _163=null,_164;d.addOnWindowUnload(function(){_163=null;});dojo._destroyElement=dojo.destroy=function(node){node=byId(node);try{var doc=node.ownerDocument;if(!_163||_164!=doc){_163=doc.createElement("div");_164=doc;}_163.appendChild(node.parentNode?node.parentNode.removeChild(node):node);_163.innerHTML="";}catch(e){}};dojo.isDescendant=function(node,_165){try{node=byId(node);_165=byId(_165);while(node){if(node==_165){return true;}node=node.parentNode;}}catch(e){}return false;};dojo.setSelectable=function(node,_166){node=byId(node);if(d.isMozilla){node.style.MozUserSelect=_166?"":"none";}else{if(d.isKhtml||d.isWebKit){node.style.KhtmlUserSelect=_166?"auto":"none";}else{if(d.isIE){var v=(node.unselectable=_166?"":"on");d.query("*",node).forEach("item.unselectable = '"+v+"'");}}}};var _167=function(node,ref){var _168=ref.parentNode;if(_168){_168.insertBefore(node,ref);}};var _169=function(node,ref){var _16a=ref.parentNode;if(_16a){if(_16a.lastChild==ref){_16a.appendChild(node);}else{_16a.insertBefore(node,ref.nextSibling);}}};dojo.place=function(node,_16b,_16c){_16b=byId(_16b);if(typeof node=="string"){node=node.charAt(0)=="<"?d._toDom(node,_16b.ownerDocument):byId(node);}if(typeof _16c=="number"){var cn=_16b.childNodes;if(!cn.length||cn.length<=_16c){_16b.appendChild(node);}else{_167(node,cn[_16c<0?0:_16c]);}}else{switch(_16c){case "before":_167(node,_16b);break;case "after":_169(node,_16b);break;case "replace":_16b.parentNode.replaceChild(node,_16b);break;case "only":d.empty(_16b);_16b.appendChild(node);break;case "first":if(_16b.firstChild){_167(node,_16b.firstChild);break;}default:_16b.appendChild(node);}}return node;};dojo.boxModel="content-box";if(d.isIE){d.boxModel=document.compatMode=="BackCompat"?"border-box":"content-box";}var gcs;if(d.isWebKit){gcs=function(node){var s;if(node.nodeType==1){var dv=node.ownerDocument.defaultView;s=dv.getComputedStyle(node,null);if(!s&&node.style){node.style.display="";s=dv.getComputedStyle(node,null);}}return s||{};};}else{if(d.isIE){gcs=function(node){return node.nodeType==1?node.currentStyle:{};};}else{gcs=function(node){return node.nodeType==1?node.ownerDocument.defaultView.getComputedStyle(node,null):{};};}}dojo.getComputedStyle=gcs;if(!d.isIE){d._toPixelValue=function(_16d,_16e){return parseFloat(_16e)||0;};}else{d._toPixelValue=function(_16f,_170){if(!_170){return 0;}if(_170=="medium"){return 4;}if(_170.slice&&_170.slice(-2)=="px"){return parseFloat(_170);}with(_16f){var _171=style.left;var _172=runtimeStyle.left;runtimeStyle.left=currentStyle.left;try{style.left=_170;_170=style.pixelLeft;}catch(e){_170=0;}style.left=_171;runtimeStyle.left=_172;}return _170;};}var px=d._toPixelValue;var astr="DXImageTransform.Microsoft.Alpha";var af=function(n,f){try{return n.filters.item(astr);}catch(e){return f?{}:null;}};dojo._getOpacity=d.isIE?function(node){try{return af(node).Opacity/100;}catch(e){return 1;}}:function(node){return gcs(node).opacity;};dojo._setOpacity=d.isIE?function(node,_173){var ov=_173*100,_174=_173==1;node.style.zoom=_174?"":1;if(!af(node)){if(_174){return _173;}node.style.filter+=" progid:"+astr+"(Opacity="+ov+")";}else{af(node,1).Opacity=ov;}af(node,1).Enabled=!_174;if(node.nodeName.toLowerCase()=="tr"){d.query("> td",node).forEach(function(i){d._setOpacity(i,_173);});}return _173;}:function(node,_175){return node.style.opacity=_175;};var _176={left:true,top:true};var _177=/margin|padding|width|height|max|min|offset/;var _178=function(node,type,_179){type=type.toLowerCase();if(d.isIE){if(_179=="auto"){if(type=="height"){return node.offsetHeight;}if(type=="width"){return node.offsetWidth;}}if(type=="fontweight"){switch(_179){case 700:return "bold";case 400:default:return "normal";}}}if(!(type in _176)){_176[type]=_177.test(type);}return _176[type]?px(node,_179):_179;};var _17a=d.isIE?"styleFloat":"cssFloat",_17b={"cssFloat":_17a,"styleFloat":_17a,"float":_17a};dojo.style=function(node,_17c,_17d){var n=byId(node),args=arguments.length,op=(_17c=="opacity");_17c=_17b[_17c]||_17c;if(args==3){return op?d._setOpacity(n,_17d):n.style[_17c]=_17d;}if(args==2&&op){return d._getOpacity(n);}var s=gcs(n);if(args==2&&typeof _17c!="string"){for(var x in _17c){d.style(node,x,_17c[x]);}return s;}return (args==1)?s:_178(n,_17c,s[_17c]||n.style[_17c]);};dojo._getPadExtents=function(n,_17e){var s=_17e||gcs(n),l=px(n,s.paddingLeft),t=px(n,s.paddingTop);return {l:l,t:t,w:l+px(n,s.paddingRight),h:t+px(n,s.paddingBottom)};};dojo._getBorderExtents=function(n,_17f){var ne="none",s=_17f||gcs(n),bl=(s.borderLeftStyle!=ne?px(n,s.borderLeftWidth):0),bt=(s.borderTopStyle!=ne?px(n,s.borderTopWidth):0);return {l:bl,t:bt,w:bl+(s.borderRightStyle!=ne?px(n,s.borderRightWidth):0),h:bt+(s.borderBottomStyle!=ne?px(n,s.borderBottomWidth):0)};};dojo._getPadBorderExtents=function(n,_180){var s=_180||gcs(n),p=d._getPadExtents(n,s),b=d._getBorderExtents(n,s);return {l:p.l+b.l,t:p.t+b.t,w:p.w+b.w,h:p.h+b.h};};dojo._getMarginExtents=function(n,_181){var s=_181||gcs(n),l=px(n,s.marginLeft),t=px(n,s.marginTop),r=px(n,s.marginRight),b=px(n,s.marginBottom);if(d.isWebKit&&(s.position!="absolute")){r=l;}return {l:l,t:t,w:l+r,h:t+b};};dojo._getMarginBox=function(node,_182){var s=_182||gcs(node),me=d._getMarginExtents(node,s);var l=node.offsetLeft-me.l,t=node.offsetTop-me.t,p=node.parentNode;if(d.isMoz){var sl=parseFloat(s.left),st=parseFloat(s.top);if(!isNaN(sl)&&!isNaN(st)){l=sl,t=st;}else{if(p&&p.style){var pcs=gcs(p);if(pcs.overflow!="visible"){var be=d._getBorderExtents(p,pcs);l+=be.l,t+=be.t;}}}}else{if(d.isOpera||(d.isIE>7&&!d.isQuirks)){if(p){be=d._getBorderExtents(p);l-=be.l;t-=be.t;}}}return {l:l,t:t,w:node.offsetWidth+me.w,h:node.offsetHeight+me.h};};dojo._getContentBox=function(node,_183){var s=_183||gcs(node),pe=d._getPadExtents(node,s),be=d._getBorderExtents(node,s),w=node.clientWidth,h;if(!w){w=node.offsetWidth,h=node.offsetHeight;}else{h=node.clientHeight,be.w=be.h=0;}if(d.isOpera){pe.l+=be.l;pe.t+=be.t;}return {l:pe.l,t:pe.t,w:w-pe.w-be.w,h:h-pe.h-be.h};};dojo._getBorderBox=function(node,_184){var s=_184||gcs(node),pe=d._getPadExtents(node,s),cb=d._getContentBox(node,s);return {l:cb.l-pe.l,t:cb.t-pe.t,w:cb.w+pe.w,h:cb.h+pe.h};};dojo._setBox=function(node,l,t,w,h,u){u=u||"px";var s=node.style;if(!isNaN(l)){s.left=l+u;}if(!isNaN(t)){s.top=t+u;}if(w>=0){s.width=w+u;}if(h>=0){s.height=h+u;}};dojo._isButtonTag=function(node){return node.tagName=="BUTTON"||node.tagName=="INPUT"&&(node.getAttribute("type")||"").toUpperCase()=="BUTTON";};dojo._usesBorderBox=function(node){var n=node.tagName;return d.boxModel=="border-box"||n=="TABLE"||d._isButtonTag(node);};dojo._setContentSize=function(node,_185,_186,_187){if(d._usesBorderBox(node)){var pb=d._getPadBorderExtents(node,_187);if(_185>=0){_185+=pb.w;}if(_186>=0){_186+=pb.h;}}d._setBox(node,NaN,NaN,_185,_186);};dojo._setMarginBox=function(node,_188,_189,_18a,_18b,_18c){var s=_18c||gcs(node),bb=d._usesBorderBox(node),pb=bb?_18d:d._getPadBorderExtents(node,s);if(d.isWebKit){if(d._isButtonTag(node)){var ns=node.style;if(_18a>=0&&!ns.width){ns.width="4px";}if(_18b>=0&&!ns.height){ns.height="4px";}}}var mb=d._getMarginExtents(node,s);if(_18a>=0){_18a=Math.max(_18a-pb.w-mb.w,0);}if(_18b>=0){_18b=Math.max(_18b-pb.h-mb.h,0);}d._setBox(node,_188,_189,_18a,_18b);};var _18d={l:0,t:0,w:0,h:0};dojo.marginBox=function(node,box){var n=byId(node),s=gcs(n),b=box;return !b?d._getMarginBox(n,s):d._setMarginBox(n,b.l,b.t,b.w,b.h,s);};dojo.contentBox=function(node,box){var n=byId(node),s=gcs(n),b=box;return !b?d._getContentBox(n,s):d._setContentSize(n,b.w,b.h,s);};var _18e=function(node,prop){if(!(node=(node||0).parentNode)){return 0;}var val,_18f=0,_190=d.body();while(node&&node.style){if(gcs(node).position=="fixed"){return 0;}val=node[prop];if(val){_18f+=val-0;if(node==_190){break;}}node=node.parentNode;}return _18f;};dojo._docScroll=function(){var n=d.global;return "pageXOffset" in n?{x:n.pageXOffset,y:n.pageYOffset}:(n=d.doc.documentElement,n.clientHeight?{x:d._fixIeBiDiScrollLeft(n.scrollLeft),y:n.scrollTop}:(n=d.body(),{x:n.scrollLeft||0,y:n.scrollTop||0}));};dojo._isBodyLtr=function(){return "_bodyLtr" in d?d._bodyLtr:d._bodyLtr=(d.body().dir||d.doc.documentElement.dir||"ltr").toLowerCase()=="ltr";};dojo._getIeDocumentElementOffset=function(){var de=d.doc.documentElement;if(d.isIE<8){var r=de.getBoundingClientRect();var l=r.left,t=r.top;if(d.isIE<7){l+=de.clientLeft;t+=de.clientTop;}return {x:l<0?0:l,y:t<0?0:t};}else{return {x:0,y:0};}};dojo._fixIeBiDiScrollLeft=function(_191){var dd=d.doc;if(d.isIE<8&&!d._isBodyLtr()){var de=d.isQuirks?dd.body:dd.documentElement;return _191+de.clientWidth-de.scrollWidth;}return _191;};dojo._abs=dojo.position=function(node,_192){var db=d.body(),dh=db.parentNode,ret;node=byId(node);if(node["getBoundingClientRect"]){ret=node.getBoundingClientRect();ret={x:ret.left,y:ret.top,w:ret.right-ret.left,h:ret.bottom-ret.top};if(d.isIE){var _193=d._getIeDocumentElementOffset();ret.x-=_193.x+(d.isQuirks?db.clientLeft+db.offsetLeft:0);ret.y-=_193.y+(d.isQuirks?db.clientTop+db.offsetTop:0);}else{if(d.isFF==3){var cs=gcs(dh);ret.x-=px(dh,cs.marginLeft)+px(dh,cs.borderLeftWidth);ret.y-=px(dh,cs.marginTop)+px(dh,cs.borderTopWidth);}}}else{ret={x:0,y:0,w:node.offsetWidth,h:node.offsetHeight};if(node["offsetParent"]){ret.x-=_18e(node,"scrollLeft");ret.y-=_18e(node,"scrollTop");var _194=node;do{var n=_194.offsetLeft,t=_194.offsetTop;ret.x+=isNaN(n)?0:n;ret.y+=isNaN(t)?0:t;cs=gcs(_194);if(_194!=node){if(d.isMoz){ret.x+=2*px(_194,cs.borderLeftWidth);ret.y+=2*px(_194,cs.borderTopWidth);}else{ret.x+=px(_194,cs.borderLeftWidth);ret.y+=px(_194,cs.borderTopWidth);}}if(d.isMoz&&cs.position=="static"){var _195=_194.parentNode;while(_195!=_194.offsetParent){var pcs=gcs(_195);if(pcs.position=="static"){ret.x+=px(_194,pcs.borderLeftWidth);ret.y+=px(_194,pcs.borderTopWidth);}_195=_195.parentNode;}}_194=_194.offsetParent;}while((_194!=dh)&&_194);}else{if(node.x&&node.y){ret.x+=isNaN(node.x)?0:node.x;ret.y+=isNaN(node.y)?0:node.y;}}}if(_192){var _196=d._docScroll();ret.x+=_196.x;ret.y+=_196.y;}return ret;};dojo.coords=function(node,_197){var n=byId(node),s=gcs(n),mb=d._getMarginBox(n,s);var abs=d.position(n,_197);mb.x=abs.x;mb.y=abs.y;return mb;};var _198={"class":"className","for":"htmlFor",tabindex:"tabIndex",readonly:"readOnly",colspan:"colSpan",frameborder:"frameBorder",rowspan:"rowSpan",valuetype:"valueType"},_199={classname:"class",htmlfor:"for",tabindex:"tabIndex",readonly:"readOnly"},_19a={innerHTML:1,className:1,htmlFor:d.isIE,value:1};var _19b=function(name){return _199[name.toLowerCase()]||name;};var _19c=function(node,name){var attr=node.getAttributeNode&&node.getAttributeNode(name);return attr&&attr.specified;};dojo.hasAttr=function(node,name){var lc=name.toLowerCase();return _19a[_198[lc]||name]||_19c(byId(node),_199[lc]||name);};var _19d={},_19e=0,_19f=dojo._scopeName+"attrid",_1a0={col:1,colgroup:1,table:1,tbody:1,tfoot:1,thead:1,tr:1,title:1};dojo.attr=function(node,name,_1a1){node=byId(node);var args=arguments.length,prop;if(args==2&&typeof name!="string"){for(var x in name){d.attr(node,x,name[x]);}return node;}var lc=name.toLowerCase(),_1a2=_198[lc]||name,_1a3=_19a[_1a2],_1a4=_199[lc]||name;if(args==3){do{if(_1a2=="style"&&typeof _1a1!="string"){d.style(node,_1a1);break;}if(_1a2=="innerHTML"){if(d.isIE&&node.tagName.toLowerCase() in _1a0){d.empty(node);node.appendChild(d._toDom(_1a1,node.ownerDocument));}else{node[_1a2]=_1a1;}break;}if(d.isFunction(_1a1)){var _1a5=d.attr(node,_19f);if(!_1a5){_1a5=_19e++;d.attr(node,_19f,_1a5);}if(!_19d[_1a5]){_19d[_1a5]={};}var h=_19d[_1a5][_1a2];if(h){d.disconnect(h);}else{try{delete node[_1a2];}catch(e){}}_19d[_1a5][_1a2]=d.connect(node,_1a2,_1a1);break;}if(_1a3||typeof _1a1=="boolean"){node[_1a2]=_1a1;break;}node.setAttribute(_1a4,_1a1);}while(false);return node;}_1a1=node[_1a2];if(_1a3&&typeof _1a1!="undefined"){return _1a1;}if(_1a2!="href"&&(typeof _1a1=="boolean"||d.isFunction(_1a1))){return _1a1;}return _19c(node,_1a4)?node.getAttribute(_1a4):null;};dojo.removeAttr=function(node,name){byId(node).removeAttribute(_19b(name));};dojo.getNodeProp=function(node,name){node=byId(node);var lc=name.toLowerCase(),_1a6=_198[lc]||name;if((_1a6 in node)&&_1a6!="href"){return node[_1a6];}var _1a7=_199[lc]||name;return _19c(node,_1a7)?node.getAttribute(_1a7):null;};dojo.create=function(tag,_1a8,_1a9,pos){var doc=d.doc;if(_1a9){_1a9=byId(_1a9);doc=_1a9.ownerDocument;}if(typeof tag=="string"){tag=doc.createElement(tag);}if(_1a8){d.attr(tag,_1a8);}if(_1a9){d.place(tag,_1a9,pos);}return tag;};d.empty=d.isIE?function(node){node=byId(node);for(var c;c=node.lastChild;){d.destroy(c);}}:function(node){byId(node).innerHTML="";};var _1aa={option:["select"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","thead","tr"],legend:["fieldset"],caption:["table"],colgroup:["table"],col:["table","colgroup"],li:["ul"]},_1ab=/<\s*([\w\:]+)/,_1ac={},_1ad=0,_1ae="__"+d._scopeName+"ToDomId";for(var _1af in _1aa){var tw=_1aa[_1af];tw.pre=_1af=="option"?"<select multiple=\"multiple\">":"<"+tw.join("><")+">";tw.post="</"+tw.reverse().join("></")+">";}d._toDom=function(frag,doc){doc=doc||d.doc;var _1b0=doc[_1ae];if(!_1b0){doc[_1ae]=_1b0=++_1ad+"";_1ac[_1b0]=doc.createElement("div");}frag+="";var _1b1=frag.match(_1ab),tag=_1b1?_1b1[1].toLowerCase():"",_1b2=_1ac[_1b0],wrap,i,fc,df;if(_1b1&&_1aa[tag]){wrap=_1aa[tag];_1b2.innerHTML=wrap.pre+frag+wrap.post;for(i=wrap.length;i;--i){_1b2=_1b2.firstChild;}}else{_1b2.innerHTML=frag;}if(_1b2.childNodes.length==1){return _1b2.removeChild(_1b2.firstChild);}df=doc.createDocumentFragment();while(fc=_1b2.firstChild){df.appendChild(fc);}return df;};var _1b3="className";dojo.hasClass=function(node,_1b4){return ((" "+byId(node)[_1b3]+" ").indexOf(" "+_1b4+" ")>=0);};var _1b5=/\s+/,a1=[""],_1b6=function(s){if(typeof s=="string"||s instanceof String){if(s.indexOf(" ")<0){a1[0]=s;return a1;}else{return s.split(_1b5);}}return s||"";};dojo.addClass=function(node,_1b7){node=byId(node);_1b7=_1b6(_1b7);var cls=node[_1b3],_1b8;cls=cls?" "+cls+" ":" ";_1b8=cls.length;for(var i=0,len=_1b7.length,c;i<len;++i){c=_1b7[i];if(c&&cls.indexOf(" "+c+" ")<0){cls+=c+" ";}}if(_1b8<cls.length){node[_1b3]=cls.substr(1,cls.length-2);}};dojo.removeClass=function(node,_1b9){node=byId(node);var cls;if(_1b9!==undefined){_1b9=_1b6(_1b9);cls=" "+node[_1b3]+" ";for(var i=0,len=_1b9.length;i<len;++i){cls=cls.replace(" "+_1b9[i]+" "," ");}cls=d.trim(cls);}else{cls="";}if(node[_1b3]!=cls){node[_1b3]=cls;}};dojo.toggleClass=function(node,_1ba,_1bb){if(_1bb===undefined){_1bb=!d.hasClass(node,_1ba);}d[_1bb?"addClass":"removeClass"](node,_1ba);};})();}if(!dojo._hasResource["dojo._base.NodeList"]){dojo._hasResource["dojo._base.NodeList"]=true;dojo.provide("dojo._base.NodeList");(function(){var d=dojo;var ap=Array.prototype,aps=ap.slice,apc=ap.concat;var tnl=function(a,_1bc,_1bd){if(!a.sort){a=aps.call(a,0);}var ctor=_1bd||this._NodeListCtor||d._NodeListCtor;a.constructor=ctor;dojo._mixin(a,ctor.prototype);a._NodeListCtor=ctor;return _1bc?a._stash(_1bc):a;};var _1be=function(f,a,o){a=[0].concat(aps.call(a,0));o=o||d.global;return function(node){a[0]=node;return f.apply(o,a);};};var _1bf=function(f,o){return function(){this.forEach(_1be(f,arguments,o));return this;};};var _1c0=function(f,o){return function(){return this.map(_1be(f,arguments,o));};};var _1c1=function(f,o){return function(){return this.filter(_1be(f,arguments,o));};};var _1c2=function(f,g,o){return function(){var a=arguments,body=_1be(f,a,o);if(g.call(o||d.global,a)){return this.map(body);}this.forEach(body);return this;};};var _1c3=function(a){return a.length==1&&(typeof a[0]=="string");};var _1c4=function(node){var p=node.parentNode;if(p){p.removeChild(node);}};dojo.NodeList=function(){return tnl(Array.apply(null,arguments));};d._NodeListCtor=d.NodeList;var nl=d.NodeList,nlp=nl.prototype;nl._wrap=nlp._wrap=tnl;nl._adaptAsMap=_1c0;nl._adaptAsForEach=_1bf;nl._adaptAsFilter=_1c1;nl._adaptWithCondition=_1c2;d.forEach(["slice","splice"],function(name){var f=ap[name];nlp[name]=function(){return this._wrap(f.apply(this,arguments),name=="slice"?this:null);};});d.forEach(["indexOf","lastIndexOf","every","some"],function(name){var f=d[name];nlp[name]=function(){return f.apply(d,[this].concat(aps.call(arguments,0)));};});d.forEach(["attr","style"],function(name){nlp[name]=_1c2(d[name],_1c3);});d.forEach(["connect","addClass","removeClass","toggleClass","empty","removeAttr"],function(name){nlp[name]=_1bf(d[name]);});dojo.extend(dojo.NodeList,{_normalize:function(_1c5,_1c6){var _1c7=_1c5.parse===true?true:false;if(typeof _1c5.template=="string"){var _1c8=_1c5.templateFunc||(dojo.string&&dojo.string.substitute);_1c5=_1c8?_1c8(_1c5.template,_1c5):_1c5;}var type=(typeof _1c5);if(type=="string"||type=="number"){_1c5=dojo._toDom(_1c5,(_1c6&&_1c6.ownerDocument));if(_1c5.nodeType==11){_1c5=dojo._toArray(_1c5.childNodes);}else{_1c5=[_1c5];}}else{if(!dojo.isArrayLike(_1c5)){_1c5=[_1c5];}else{if(!dojo.isArray(_1c5)){_1c5=dojo._toArray(_1c5);}}}if(_1c7){_1c5._runParse=true;}return _1c5;},_cloneNode:function(node){return node.cloneNode(true);},_place:function(ary,_1c9,_1ca,_1cb){if(_1c9.nodeType!=1&&_1ca=="only"){return;}var _1cc=_1c9,_1cd;var _1ce=ary.length;for(var i=_1ce-1;i>=0;i--){var node=(_1cb?this._cloneNode(ary[i]):ary[i]);if(ary._runParse&&dojo.parser&&dojo.parser.parse){if(!_1cd){_1cd=_1cc.ownerDocument.createElement("div");}_1cd.appendChild(node);dojo.parser.parse(_1cd);node=_1cd.firstChild;while(_1cd.firstChild){_1cd.removeChild(_1cd.firstChild);}}if(i==_1ce-1){dojo.place(node,_1cc,_1ca);}else{_1cc.parentNode.insertBefore(node,_1cc);}_1cc=node;}},_stash:function(_1cf){this._parent=_1cf;return this;},end:function(){if(this._parent){return this._parent;}else{return new this._NodeListCtor();}},concat:function(item){var t=d.isArray(this)?this:aps.call(this,0),m=d.map(arguments,function(a){return a&&!d.isArray(a)&&(typeof NodeList!="undefined"&&a.constructor===NodeList||a.constructor===this._NodeListCtor)?aps.call(a,0):a;});return this._wrap(apc.apply(t,m),this);},map:function(func,obj){return this._wrap(d.map(this,func,obj),this);},forEach:function(_1d0,_1d1){d.forEach(this,_1d0,_1d1);return this;},coords:_1c0(d.coords),position:_1c0(d.position),place:function(_1d2,_1d3){var item=d.query(_1d2)[0];return this.forEach(function(node){d.place(node,item,_1d3);});},orphan:function(_1d4){return (_1d4?d._filterQueryResult(this,_1d4):this).forEach(_1c4);},adopt:function(_1d5,_1d6){return d.query(_1d5).place(this[0],_1d6)._stash(this);},query:function(_1d7){if(!_1d7){return this;}var ret=this.map(function(node){return d.query(_1d7,node).filter(function(_1d8){return _1d8!==undefined;});});return this._wrap(apc.apply([],ret),this);},filter:function(_1d9){var a=arguments,_1da=this,_1db=0;if(typeof _1d9=="string"){_1da=d._filterQueryResult(this,a[0]);if(a.length==1){return _1da._stash(this);}_1db=1;}return this._wrap(d.filter(_1da,a[_1db],a[_1db+1]),this);},addContent:function(_1dc,_1dd){_1dc=this._normalize(_1dc,this[0]);for(var i=0,node;node=this[i];i++){this._place(_1dc,node,_1dd,i>0);}return this;},instantiate:function(_1de,_1df){var c=d.isFunction(_1de)?_1de:d.getObject(_1de);_1df=_1df||{};return this.forEach(function(node){new c(_1df,node);});},at:function(){var t=new this._NodeListCtor();d.forEach(arguments,function(i){if(i<0){i=this.length+i;}if(this[i]){t.push(this[i]);}},this);return t._stash(this);}});nl.events=["blur","focus","change","click","error","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","submit"];d.forEach(nl.events,function(evt){var _1e0="on"+evt;nlp[_1e0]=function(a,b){return this.connect(_1e0,a,b);};});})();}if(!dojo._hasResource["dojo._base.query"]){dojo._hasResource["dojo._base.query"]=true;if(typeof dojo!="undefined"){dojo.provide("dojo._base.query");}(function(d){var trim=d.trim;var each=d.forEach;var qlc=d._NodeListCtor=d.NodeList;var _1e1=function(){return d.doc;};var _1e2=((d.isWebKit||d.isMozilla)&&((_1e1().compatMode)=="BackCompat"));var _1e3=!!_1e1().firstChild["children"]?"children":"childNodes";var _1e4=">~+";var _1e5=false;var _1e6=function(){return true;};var _1e7=function(_1e8){if(_1e4.indexOf(_1e8.slice(-1))>=0){_1e8+=" * ";}else{_1e8+=" ";}var ts=function(s,e){return trim(_1e8.slice(s,e));};var _1e9=[];var _1ea=-1,_1eb=-1,_1ec=-1,_1ed=-1,_1ee=-1,inId=-1,_1ef=-1,lc="",cc="",_1f0;var x=0,ql=_1e8.length,_1f1=null,_1f2=null;var _1f3=function(){if(_1ef>=0){var tv=(_1ef==x)?null:ts(_1ef,x);_1f1[(_1e4.indexOf(tv)<0)?"tag":"oper"]=tv;_1ef=-1;}};var _1f4=function(){if(inId>=0){_1f1.id=ts(inId,x).replace(/\\/g,"");inId=-1;}};var _1f5=function(){if(_1ee>=0){_1f1.classes.push(ts(_1ee+1,x).replace(/\\/g,""));_1ee=-1;}};var _1f6=function(){_1f4();_1f3();_1f5();};var _1f7=function(){_1f6();if(_1ed>=0){_1f1.pseudos.push({name:ts(_1ed+1,x)});}_1f1.loops=(_1f1.pseudos.length||_1f1.attrs.length||_1f1.classes.length);_1f1.oquery=_1f1.query=ts(_1f0,x);_1f1.otag=_1f1.tag=(_1f1["oper"])?null:(_1f1.tag||"*");if(_1f1.tag){_1f1.tag=_1f1.tag.toUpperCase();}if(_1e9.length&&(_1e9[_1e9.length-1].oper)){_1f1.infixOper=_1e9.pop();_1f1.query=_1f1.infixOper.query+" "+_1f1.query;}_1e9.push(_1f1);_1f1=null;};for(;lc=cc,cc=_1e8.charAt(x),x<ql;x++){if(lc=="\\"){continue;}if(!_1f1){_1f0=x;_1f1={query:null,pseudos:[],attrs:[],classes:[],tag:null,oper:null,id:null,getTag:function(){return (_1e5)?this.otag:this.tag;}};_1ef=x;}if(_1ea>=0){if(cc=="]"){if(!_1f2.attr){_1f2.attr=ts(_1ea+1,x);}else{_1f2.matchFor=ts((_1ec||_1ea+1),x);}var cmf=_1f2.matchFor;if(cmf){if((cmf.charAt(0)=="\"")||(cmf.charAt(0)=="'")){_1f2.matchFor=cmf.slice(1,-1);}}_1f1.attrs.push(_1f2);_1f2=null;_1ea=_1ec=-1;}else{if(cc=="="){var _1f8=("|~^$*".indexOf(lc)>=0)?lc:"";_1f2.type=_1f8+cc;_1f2.attr=ts(_1ea+1,x-_1f8.length);_1ec=x+1;}}}else{if(_1eb>=0){if(cc==")"){if(_1ed>=0){_1f2.value=ts(_1eb+1,x);}_1ed=_1eb=-1;}}else{if(cc=="#"){_1f6();inId=x+1;}else{if(cc=="."){_1f6();_1ee=x;}else{if(cc==":"){_1f6();_1ed=x;}else{if(cc=="["){_1f6();_1ea=x;_1f2={};}else{if(cc=="("){if(_1ed>=0){_1f2={name:ts(_1ed+1,x),value:null};_1f1.pseudos.push(_1f2);}_1eb=x;}else{if((cc==" ")&&(lc!=cc)){_1f7();}}}}}}}}}return _1e9;};var _1f9=function(_1fa,_1fb){if(!_1fa){return _1fb;}if(!_1fb){return _1fa;}return function(){return _1fa.apply(window,arguments)&&_1fb.apply(window,arguments);};};var _1fc=function(i,arr){var r=arr||[];if(i){r.push(i);}return r;};var _1fd=function(n){return (1==n.nodeType);};var _1fe="";var _1ff=function(elem,attr){if(!elem){return _1fe;}if(attr=="class"){return elem.className||_1fe;}if(attr=="for"){return elem.htmlFor||_1fe;}if(attr=="style"){return elem.style.cssText||_1fe;}return (_1e5?elem.getAttribute(attr):elem.getAttribute(attr,2))||_1fe;};var _200={"*=":function(attr,_201){return function(elem){return (_1ff(elem,attr).indexOf(_201)>=0);};},"^=":function(attr,_202){return function(elem){return (_1ff(elem,attr).indexOf(_202)==0);};},"$=":function(attr,_203){var tval=" "+_203;return function(elem){var ea=" "+_1ff(elem,attr);return (ea.lastIndexOf(_203)==(ea.length-_203.length));};},"~=":function(attr,_204){var tval=" "+_204+" ";return function(elem){var ea=" "+_1ff(elem,attr)+" ";return (ea.indexOf(tval)>=0);};},"|=":function(attr,_205){var _206=" "+_205+"-";return function(elem){var ea=" "+_1ff(elem,attr);return ((ea==_205)||(ea.indexOf(_206)==0));};},"=":function(attr,_207){return function(elem){return (_1ff(elem,attr)==_207);};}};var _208=(typeof _1e1().firstChild.nextElementSibling=="undefined");var _209=!_208?"nextElementSibling":"nextSibling";var _20a=!_208?"previousElementSibling":"previousSibling";var _20b=(_208?_1fd:_1e6);var _20c=function(node){while(node=node[_20a]){if(_20b(node)){return false;}}return true;};var _20d=function(node){while(node=node[_209]){if(_20b(node)){return false;}}return true;};var _20e=function(node){var root=node.parentNode;var i=0,tret=root[_1e3],ci=(node["_i"]||-1),cl=(root["_l"]||-1);if(!tret){return -1;}var l=tret.length;if(cl==l&&ci>=0&&cl>=0){return ci;}root["_l"]=l;ci=-1;for(var te=root["firstElementChild"]||root["firstChild"];te;te=te[_209]){if(_20b(te)){te["_i"]=++i;if(node===te){ci=i;}}}return ci;};var _20f=function(elem){return !((_20e(elem))%2);};var _210=function(elem){return ((_20e(elem))%2);};var _211={"checked":function(name,_212){return function(elem){return !!("checked" in elem?elem.checked:elem.selected);};},"first-child":function(){return _20c;},"last-child":function(){return _20d;},"only-child":function(name,_213){return function(node){if(!_20c(node)){return false;}if(!_20d(node)){return false;}return true;};},"empty":function(name,_214){return function(elem){var cn=elem.childNodes;var cnl=elem.childNodes.length;for(var x=cnl-1;x>=0;x--){var nt=cn[x].nodeType;if((nt===1)||(nt==3)){return false;}}return true;};},"contains":function(name,_215){var cz=_215.charAt(0);if(cz=="\""||cz=="'"){_215=_215.slice(1,-1);}return function(elem){return (elem.innerHTML.indexOf(_215)>=0);};},"not":function(name,_216){var p=_1e7(_216)[0];var _217={el:1};if(p.tag!="*"){_217.tag=1;}if(!p.classes.length){_217.classes=1;}var ntf=_218(p,_217);return function(elem){return (!ntf(elem));};},"nth-child":function(name,_219){var pi=parseInt;if(_219=="odd"){return _210;}else{if(_219=="even"){return _20f;}}if(_219.indexOf("n")!=-1){var _21a=_219.split("n",2);var pred=_21a[0]?((_21a[0]=="-")?-1:pi(_21a[0])):1;var idx=_21a[1]?pi(_21a[1]):0;var lb=0,ub=-1;if(pred>0){if(idx<0){idx=(idx%pred)&&(pred+(idx%pred));}else{if(idx>0){if(idx>=pred){lb=idx-idx%pred;}idx=idx%pred;}}}else{if(pred<0){pred*=-1;if(idx>0){ub=idx;idx=idx%pred;}}}if(pred>0){return function(elem){var i=_20e(elem);return (i>=lb)&&(ub<0||i<=ub)&&((i%pred)==idx);};}else{_219=idx;}}var _21b=pi(_219);return function(elem){return (_20e(elem)==_21b);};}};var _21c=(d.isIE)?function(cond){var clc=cond.toLowerCase();if(clc=="class"){cond="className";}return function(elem){return (_1e5?elem.getAttribute(cond):elem[cond]||elem[clc]);};}:function(cond){return function(elem){return (elem&&elem.getAttribute&&elem.hasAttribute(cond));};};var _218=function(_21d,_21e){if(!_21d){return _1e6;}_21e=_21e||{};var ff=null;if(!("el" in _21e)){ff=_1f9(ff,_1fd);}if(!("tag" in _21e)){if(_21d.tag!="*"){ff=_1f9(ff,function(elem){return (elem&&(elem.tagName==_21d.getTag()));});}}if(!("classes" in _21e)){each(_21d.classes,function(_21f,idx,arr){var re=new RegExp("(?:^|\\s)"+_21f+"(?:\\s|$)");ff=_1f9(ff,function(elem){return re.test(elem.className);});ff.count=idx;});}if(!("pseudos" in _21e)){each(_21d.pseudos,function(_220){var pn=_220.name;if(_211[pn]){ff=_1f9(ff,_211[pn](pn,_220.value));}});}if(!("attrs" in _21e)){each(_21d.attrs,function(attr){var _221;var a=attr.attr;if(attr.type&&_200[attr.type]){_221=_200[attr.type](a,attr.matchFor);}else{if(a.length){_221=_21c(a);}}if(_221){ff=_1f9(ff,_221);}});}if(!("id" in _21e)){if(_21d.id){ff=_1f9(ff,function(elem){return (!!elem&&(elem.id==_21d.id));});}}if(!ff){if(!("default" in _21e)){ff=_1e6;}}return ff;};var _222=function(_223){return function(node,ret,bag){while(node=node[_209]){if(_208&&(!_1fd(node))){continue;}if((!bag||_224(node,bag))&&_223(node)){ret.push(node);}break;}return ret;};};var _225=function(_226){return function(root,ret,bag){var te=root[_209];while(te){if(_20b(te)){if(bag&&!_224(te,bag)){break;}if(_226(te)){ret.push(te);}}te=te[_209];}return ret;};};var _227=function(_228){_228=_228||_1e6;return function(root,ret,bag){var te,x=0,tret=root[_1e3];while(te=tret[x++]){if(_20b(te)&&(!bag||_224(te,bag))&&(_228(te,x))){ret.push(te);}}return ret;};};var _229=function(node,root){var pn=node.parentNode;while(pn){if(pn==root){break;}pn=pn.parentNode;}return !!pn;};var _22a={};var _22b=function(_22c){var _22d=_22a[_22c.query];if(_22d){return _22d;}var io=_22c.infixOper;var oper=(io?io.oper:"");var _22e=_218(_22c,{el:1});var qt=_22c.tag;var _22f=("*"==qt);var ecs=_1e1()["getElementsByClassName"];if(!oper){if(_22c.id){_22e=(!_22c.loops&&_22f)?_1e6:_218(_22c,{el:1,id:1});_22d=function(root,arr){var te=d.byId(_22c.id,(root.ownerDocument||root));if(!te||!_22e(te)){return;}if(9==root.nodeType){return _1fc(te,arr);}else{if(_229(te,root)){return _1fc(te,arr);}}};}else{if(ecs&&/\{\s*\[native code\]\s*\}/.test(String(ecs))&&_22c.classes.length&&!_1e2){_22e=_218(_22c,{el:1,classes:1,id:1});var _230=_22c.classes.join(" ");_22d=function(root,arr,bag){var ret=_1fc(0,arr),te,x=0;var tret=root.getElementsByClassName(_230);while((te=tret[x++])){if(_22e(te,root)&&_224(te,bag)){ret.push(te);}}return ret;};}else{if(!_22f&&!_22c.loops){_22d=function(root,arr,bag){var ret=_1fc(0,arr),te,x=0;var tret=root.getElementsByTagName(_22c.getTag());while((te=tret[x++])){if(_224(te,bag)){ret.push(te);}}return ret;};}else{_22e=_218(_22c,{el:1,tag:1,id:1});_22d=function(root,arr,bag){var ret=_1fc(0,arr),te,x=0;var tret=root.getElementsByTagName(_22c.getTag());while((te=tret[x++])){if(_22e(te,root)&&_224(te,bag)){ret.push(te);}}return ret;};}}}}else{var _231={el:1};if(_22f){_231.tag=1;}_22e=_218(_22c,_231);if("+"==oper){_22d=_222(_22e);}else{if("~"==oper){_22d=_225(_22e);}else{if(">"==oper){_22d=_227(_22e);}}}}return _22a[_22c.query]=_22d;};var _232=function(root,_233){var _234=_1fc(root),qp,x,te,qpl=_233.length,bag,ret;for(var i=0;i<qpl;i++){ret=[];qp=_233[i];x=_234.length-1;if(x>0){bag={};ret.nozip=true;}var gef=_22b(qp);for(var j=0;(te=_234[j]);j++){gef(te,ret,bag);}if(!ret.length){break;}_234=ret;}return ret;};var _235={},_236={};var _237=function(_238){var _239=_1e7(trim(_238));if(_239.length==1){var tef=_22b(_239[0]);return function(root){var r=tef(root,new qlc());if(r){r.nozip=true;}return r;};}return function(root){return _232(root,_239);};};var nua=navigator.userAgent;var wk="WebKit/";var _23a=(d.isWebKit&&(nua.indexOf(wk)>0)&&(parseFloat(nua.split(wk)[1])>528));var _23b=d.isIE?"commentStrip":"nozip";var qsa="querySelectorAll";var _23c=(!!_1e1()[qsa]&&(!d.isSafari||(d.isSafari>3.1)||_23a));var _23d=/n\+\d|([^ ])?([>~+])([^ =])?/g;var _23e=function(_23f,pre,ch,post){return ch?(pre?pre+" ":"")+ch+(post?" "+post:""):_23f;};var _240=function(_241,_242){_241=_241.replace(_23d,_23e);if(_23c){var _243=_236[_241];if(_243&&!_242){return _243;}}var _244=_235[_241];if(_244){return _244;}var qcz=_241.charAt(0);var _245=(-1==_241.indexOf(" "));if((_241.indexOf("#")>=0)&&(_245)){_242=true;}var _246=(_23c&&(!_242)&&(_1e4.indexOf(qcz)==-1)&&(!d.isIE||(_241.indexOf(":")==-1))&&(!(_1e2&&(_241.indexOf(".")>=0)))&&(_241.indexOf(":contains")==-1)&&(_241.indexOf(":checked")==-1)&&(_241.indexOf("|=")==-1));if(_246){var tq=(_1e4.indexOf(_241.charAt(_241.length-1))>=0)?(_241+" *"):_241;return _236[_241]=function(root){try{if(!((9==root.nodeType)||_245)){throw "";}var r=root[qsa](tq);r[_23b]=true;return r;}catch(e){return _240(_241,true)(root);}};}else{var _247=_241.split(/\s*,\s*/);return _235[_241]=((_247.length<2)?_237(_241):function(root){var _248=0,ret=[],tp;while((tp=_247[_248++])){ret=ret.concat(_237(tp)(root));}return ret;});}};var _249=0;var _24a=d.isIE?function(node){if(_1e5){return (node.getAttribute("_uid")||node.setAttribute("_uid",++_249)||_249);}else{return node.uniqueID;}}:function(node){return (node._uid||(node._uid=++_249));};var _224=function(node,bag){if(!bag){return 1;}var id=_24a(node);if(!bag[id]){return bag[id]=1;}return 0;};var _24b="_zipIdx";var _24c=function(arr){if(arr&&arr.nozip){return (qlc._wrap)?qlc._wrap(arr):arr;}var ret=new qlc();if(!arr||!arr.length){return ret;}if(arr[0]){ret.push(arr[0]);}if(arr.length<2){return ret;}_249++;if(d.isIE&&_1e5){var _24d=_249+"";arr[0].setAttribute(_24b,_24d);for(var x=1,te;te=arr[x];x++){if(arr[x].getAttribute(_24b)!=_24d){ret.push(te);}te.setAttribute(_24b,_24d);}}else{if(d.isIE&&arr.commentStrip){try{for(var x=1,te;te=arr[x];x++){if(_1fd(te)){ret.push(te);}}}catch(e){}}else{if(arr[0]){arr[0][_24b]=_249;}for(var x=1,te;te=arr[x];x++){if(arr[x][_24b]!=_249){ret.push(te);}te[_24b]=_249;}}}return ret;};d.query=function(_24e,root){qlc=d._NodeListCtor;if(!_24e){return new qlc();}if(_24e.constructor==qlc){return _24e;}if(typeof _24e!="string"){return new qlc(_24e);}if(typeof root=="string"){root=d.byId(root);if(!root){return new qlc();}}root=root||_1e1();var od=root.ownerDocument||root.documentElement;_1e5=(root.contentType&&root.contentType=="application/xml")||(d.isOpera&&(root.doctype||od.toString()=="[object XMLDocument]"))||(!!od)&&(d.isIE?od.xml:(root.xmlVersion||od.xmlVersion));var r=_240(_24e)(root);if(r&&r.nozip&&!qlc._wrap){return r;}return _24c(r);};d.query.pseudos=_211;d._filterQueryResult=function(_24f,_250){var _251=new d._NodeListCtor();var _252=_218(_1e7(_250)[0]);for(var x=0,te;te=_24f[x];x++){if(_252(te)){_251.push(te);}}return _251;};})(this["queryPortability"]||this["acme"]||dojo);}if(!dojo._hasResource["dojo._base.xhr"]){dojo._hasResource["dojo._base.xhr"]=true;dojo.provide("dojo._base.xhr");(function(){var _253=dojo,cfg=_253.config;function _254(obj,name,_255){if(_255===null){return;}var val=obj[name];if(typeof val=="string"){obj[name]=[val,_255];}else{if(_253.isArray(val)){val.push(_255);}else{obj[name]=_255;}}};dojo.fieldToObject=function(_256){var ret=null;var item=_253.byId(_256);if(item){var _257=item.name;var type=(item.type||"").toLowerCase();if(_257&&type&&!item.disabled){if(type=="radio"||type=="checkbox"){if(item.checked){ret=item.value;}}else{if(item.multiple){ret=[];_253.query("option",item).forEach(function(opt){if(opt.selected){ret.push(opt.value);}});}else{ret=item.value;}}}}return ret;};dojo.formToObject=function(_258){var ret={};var _259="file|submit|image|reset|button|";_253.forEach(dojo.byId(_258).elements,function(item){var _25a=item.name;var type=(item.type||"").toLowerCase();if(_25a&&type&&_259.indexOf(type)==-1&&!item.disabled){_254(ret,_25a,_253.fieldToObject(item));if(type=="image"){ret[_25a+".x"]=ret[_25a+".y"]=ret[_25a].x=ret[_25a].y=0;}}});return ret;};dojo.objectToQuery=function(map){var enc=encodeURIComponent;var _25b=[];var _25c={};for(var name in map){var _25d=map[name];if(_25d!=_25c[name]){var _25e=enc(name)+"=";if(_253.isArray(_25d)){for(var i=0;i<_25d.length;i++){_25b.push(_25e+enc(_25d[i]));}}else{_25b.push(_25e+enc(_25d));}}}return _25b.join("&");};dojo.formToQuery=function(_25f){return _253.objectToQuery(_253.formToObject(_25f));};dojo.formToJson=function(_260,_261){return _253.toJson(_253.formToObject(_260),_261);};dojo.queryToObject=function(str){var ret={};var qp=str.split("&");var dec=decodeURIComponent;_253.forEach(qp,function(item){if(item.length){var _262=item.split("=");var name=dec(_262.shift());var val=dec(_262.join("="));if(typeof ret[name]=="string"){ret[name]=[ret[name]];}if(_253.isArray(ret[name])){ret[name].push(val);}else{ret[name]=val;}}});return ret;};dojo._blockAsync=false;var _263=_253._contentHandlers=dojo.contentHandlers={text:function(xhr){return xhr.responseText;},json:function(xhr){return _253.fromJson(xhr.responseText||null);},"json-comment-filtered":function(xhr){if(!dojo.config.useCommentedJson){console.warn("Consider using the standard mimetype:application/json."+" json-commenting can introduce security issues. To"+" decrease the chances of hijacking, use the standard the 'json' handler and"+" prefix your json with: {}&&\n"+"Use djConfig.useCommentedJson=true to turn off this message.");}var _264=xhr.responseText;var _265=_264.indexOf("/*");var _266=_264.lastIndexOf("*/");if(_265==-1||_266==-1){throw new Error("JSON was not comment filtered");}return _253.fromJson(_264.substring(_265+2,_266));},javascript:function(xhr){return _253.eval(xhr.responseText);},xml:function(xhr){var _267=xhr.responseXML;if(_253.isIE&&(!_267||!_267.documentElement)){var ms=function(n){return "MSXML"+n+".DOMDocument";};var dp=["Microsoft.XMLDOM",ms(6),ms(4),ms(3),ms(2)];_253.some(dp,function(p){try{var dom=new ActiveXObject(p);dom.async=false;dom.loadXML(xhr.responseText);_267=dom;}catch(e){return false;}return true;});}return _267;},"json-comment-optional":function(xhr){if(xhr.responseText&&/^[^{\[]*\/\*/.test(xhr.responseText)){return _263["json-comment-filtered"](xhr);}else{return _263["json"](xhr);}}};dojo._ioSetArgs=function(args,_268,_269,_26a){var _26b={args:args,url:args.url};var _26c=null;if(args.form){var form=_253.byId(args.form);var _26d=form.getAttributeNode("action");_26b.url=_26b.url||(_26d?_26d.value:null);_26c=_253.formToObject(form);}var _26e=[{}];if(_26c){_26e.push(_26c);}if(args.content){_26e.push(args.content);}if(args.preventCache){_26e.push({"dojo.preventCache":new Date().valueOf()});}_26b.query=_253.objectToQuery(_253.mixin.apply(null,_26e));_26b.handleAs=args.handleAs||"text";var d=new _253.Deferred(_268);d.addCallbacks(_269,function(_26f){return _26a(_26f,d);});var ld=args.load;if(ld&&_253.isFunction(ld)){d.addCallback(function(_270){return ld.call(args,_270,_26b);});}var err=args.error;if(err&&_253.isFunction(err)){d.addErrback(function(_271){return err.call(args,_271,_26b);});}var _272=args.handle;if(_272&&_253.isFunction(_272)){d.addBoth(function(_273){return _272.call(args,_273,_26b);});}if(cfg.ioPublish&&_253.publish&&_26b.args.ioPublish!==false){d.addCallbacks(function(res){_253.publish("/dojo/io/load",[d,res]);return res;},function(res){_253.publish("/dojo/io/error",[d,res]);return res;});d.addBoth(function(res){_253.publish("/dojo/io/done",[d,res]);return res;});}d.ioArgs=_26b;return d;};var _274=function(dfd){dfd.canceled=true;var xhr=dfd.ioArgs.xhr;var _275=typeof xhr.abort;if(_275=="function"||_275=="object"||_275=="unknown"){xhr.abort();}var err=dfd.ioArgs.error;if(!err){err=new Error("xhr cancelled");err.dojoType="cancel";}return err;};var _276=function(dfd){var ret=_263[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);return ret===undefined?null:ret;};var _277=function(_278,dfd){if(!dfd.ioArgs.args.failOk){console.error(_278);}return _278;};var _279=null;var _27a=[];var _27b=0;var _27c=function(dfd){if(_27b<=0){_27b=0;if(cfg.ioPublish&&_253.publish&&(!dfd||dfd&&dfd.ioArgs.args.ioPublish!==false)){_253.publish("/dojo/io/stop");}}};var _27d=function(){var now=(new Date()).getTime();if(!_253._blockAsync){for(var i=0,tif;i<_27a.length&&(tif=_27a[i]);i++){var dfd=tif.dfd;var func=function(){if(!dfd||dfd.canceled||!tif.validCheck(dfd)){_27a.splice(i--,1);_27b-=1;}else{if(tif.ioCheck(dfd)){_27a.splice(i--,1);tif.resHandle(dfd);_27b-=1;}else{if(dfd.startTime){if(dfd.startTime+(dfd.ioArgs.args.timeout||0)<now){_27a.splice(i--,1);var err=new Error("timeout exceeded");err.dojoType="timeout";dfd.errback(err);dfd.cancel();_27b-=1;}}}}};if(dojo.config.debugAtAllCosts){func.call(this);}else{try{func.call(this);}catch(e){dfd.errback(e);}}}}_27c(dfd);if(!_27a.length){clearInterval(_279);_279=null;return;}};dojo._ioCancelAll=function(){try{_253.forEach(_27a,function(i){try{i.dfd.cancel();}catch(e){}});}catch(e){}};if(_253.isIE){_253.addOnWindowUnload(_253._ioCancelAll);}_253._ioNotifyStart=function(dfd){if(cfg.ioPublish&&_253.publish&&dfd.ioArgs.args.ioPublish!==false){if(!_27b){_253.publish("/dojo/io/start");}_27b+=1;_253.publish("/dojo/io/send",[dfd]);}};_253._ioWatch=function(dfd,_27e,_27f,_280){var args=dfd.ioArgs.args;if(args.timeout){dfd.startTime=(new Date()).getTime();}_27a.push({dfd:dfd,validCheck:_27e,ioCheck:_27f,resHandle:_280});if(!_279){_279=setInterval(_27d,50);}if(args.sync){_27d();}};var _281="application/x-www-form-urlencoded";var _282=function(dfd){return dfd.ioArgs.xhr.readyState;};var _283=function(dfd){return 4==dfd.ioArgs.xhr.readyState;};var _284=function(dfd){var xhr=dfd.ioArgs.xhr;if(_253._isDocumentOk(xhr)){dfd.callback(dfd);}else{var err=new Error("Unable to load "+dfd.ioArgs.url+" status:"+xhr.status);err.status=xhr.status;err.responseText=xhr.responseText;dfd.errback(err);}};dojo._ioAddQueryToUrl=function(_285){if(_285.query.length){_285.url+=(_285.url.indexOf("?")==-1?"?":"&")+_285.query;_285.query=null;}};dojo.xhr=function(_286,args,_287){var dfd=_253._ioSetArgs(args,_274,_276,_277);var _288=dfd.ioArgs;var xhr=_288.xhr=_253._xhrObj(_288.args);if(!xhr){dfd.cancel();return dfd;}if("postData" in args){_288.query=args.postData;}else{if("putData" in args){_288.query=args.putData;}else{if("rawBody" in args){_288.query=args.rawBody;}else{if((arguments.length>2&&!_287)||"POST|PUT".indexOf(_286.toUpperCase())==-1){_253._ioAddQueryToUrl(_288);}}}}xhr.open(_286,_288.url,args.sync!==true,args.user||undefined,args.password||undefined);if(args.headers){for(var hdr in args.headers){if(hdr.toLowerCase()==="content-type"&&!args.contentType){args.contentType=args.headers[hdr];}else{if(args.headers[hdr]){xhr.setRequestHeader(hdr,args.headers[hdr]);}}}}xhr.setRequestHeader("Content-Type",args.contentType||_281);if(!args.headers||!("X-Requested-With" in args.headers)){xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");}_253._ioNotifyStart(dfd);if(dojo.config.debugAtAllCosts){xhr.send(_288.query);}else{try{xhr.send(_288.query);}catch(e){_288.error=e;dfd.cancel();}}_253._ioWatch(dfd,_282,_283,_284);xhr=null;return dfd;};dojo.xhrGet=function(args){return _253.xhr("GET",args);};dojo.rawXhrPost=dojo.xhrPost=function(args){return _253.xhr("POST",args,true);};dojo.rawXhrPut=dojo.xhrPut=function(args){return _253.xhr("PUT",args,true);};dojo.xhrDelete=function(args){return _253.xhr("DELETE",args);};})();}if(!dojo._hasResource["dojo._base.fx"]){dojo._hasResource["dojo._base.fx"]=true;dojo.provide("dojo._base.fx");(function(){var d=dojo;var _289=d._mixin;dojo._Line=function(_28a,end){this.start=_28a;this.end=end;};dojo._Line.prototype.getValue=function(n){return ((this.end-this.start)*n)+this.start;};dojo.Animation=function(args){_289(this,args);if(d.isArray(this.curve)){this.curve=new d._Line(this.curve[0],this.curve[1]);}};d._Animation=d.Animation;d.extend(dojo.Animation,{duration:350,repeat:0,rate:20,_percent:0,_startRepeatCount:0,_getStep:function(){var _28b=this._percent,_28c=this.easing;return _28c?_28c(_28b):_28b;},_fire:function(evt,args){var a=args||[];if(this[evt]){if(d.config.debugAtAllCosts){this[evt].apply(this,a);}else{try{this[evt].apply(this,a);}catch(e){console.error("exception in animation handler for:",evt);console.error(e);}}}return this;},play:function(_28d,_28e){var _28f=this;if(_28f._delayTimer){_28f._clearTimer();}if(_28e){_28f._stopTimer();_28f._active=_28f._paused=false;_28f._percent=0;}else{if(_28f._active&&!_28f._paused){return _28f;}}_28f._fire("beforeBegin",[_28f.node]);var de=_28d||_28f.delay,_290=dojo.hitch(_28f,"_play",_28e);if(de>0){_28f._delayTimer=setTimeout(_290,de);return _28f;}_290();return _28f;},_play:function(_291){var _292=this;if(_292._delayTimer){_292._clearTimer();}_292._startTime=new Date().valueOf();if(_292._paused){_292._startTime-=_292.duration*_292._percent;}_292._active=true;_292._paused=false;var _293=_292.curve.getValue(_292._getStep());if(!_292._percent){if(!_292._startRepeatCount){_292._startRepeatCount=_292.repeat;}_292._fire("onBegin",[_293]);}_292._fire("onPlay",[_293]);_292._cycle();return _292;},pause:function(){var _294=this;if(_294._delayTimer){_294._clearTimer();}_294._stopTimer();if(!_294._active){return _294;}_294._paused=true;_294._fire("onPause",[_294.curve.getValue(_294._getStep())]);return _294;},gotoPercent:function(_295,_296){var _297=this;_297._stopTimer();_297._active=_297._paused=true;_297._percent=_295;if(_296){_297.play();}return _297;},stop:function(_298){var _299=this;if(_299._delayTimer){_299._clearTimer();}if(!_299._timer){return _299;}_299._stopTimer();if(_298){_299._percent=1;}_299._fire("onStop",[_299.curve.getValue(_299._getStep())]);_299._active=_299._paused=false;return _299;},status:function(){if(this._active){return this._paused?"paused":"playing";}return "stopped";},_cycle:function(){var _29a=this;if(_29a._active){var curr=new Date().valueOf();var step=(curr-_29a._startTime)/(_29a.duration);if(step>=1){step=1;}_29a._percent=step;if(_29a.easing){step=_29a.easing(step);}_29a._fire("onAnimate",[_29a.curve.getValue(step)]);if(_29a._percent<1){_29a._startTimer();}else{_29a._active=false;if(_29a.repeat>0){_29a.repeat--;_29a.play(null,true);}else{if(_29a.repeat==-1){_29a.play(null,true);}else{if(_29a._startRepeatCount){_29a.repeat=_29a._startRepeatCount;_29a._startRepeatCount=0;}}}_29a._percent=0;_29a._fire("onEnd",[_29a.node]);!_29a.repeat&&_29a._stopTimer();}}return _29a;},_clearTimer:function(){clearTimeout(this._delayTimer);delete this._delayTimer;}});var ctr=0,_29b=null,_29c={run:function(){}};d.extend(d.Animation,{_startTimer:function(){if(!this._timer){this._timer=d.connect(_29c,"run",this,"_cycle");ctr++;}if(!_29b){_29b=setInterval(d.hitch(_29c,"run"),this.rate);}},_stopTimer:function(){if(this._timer){d.disconnect(this._timer);this._timer=null;ctr--;}if(ctr<=0){clearInterval(_29b);_29b=null;ctr=0;}}});var _29d=d.isIE?function(node){var ns=node.style;if(!ns.width.length&&d.style(node,"width")=="auto"){ns.width="auto";}}:function(){};dojo._fade=function(args){args.node=d.byId(args.node);var _29e=_289({properties:{}},args),_29f=(_29e.properties.opacity={});_29f.start=!("start" in _29e)?function(){return +d.style(_29e.node,"opacity")||0;}:_29e.start;_29f.end=_29e.end;var anim=d.animateProperty(_29e);d.connect(anim,"beforeBegin",d.partial(_29d,_29e.node));return anim;};dojo.fadeIn=function(args){return d._fade(_289({end:1},args));};dojo.fadeOut=function(args){return d._fade(_289({end:0},args));};dojo._defaultEasing=function(n){return 0.5+((Math.sin((n+1.5)*Math.PI))/2);};var _2a0=function(_2a1){this._properties=_2a1;for(var p in _2a1){var prop=_2a1[p];if(prop.start instanceof d.Color){prop.tempColor=new d.Color();}}};_2a0.prototype.getValue=function(r){var ret={};for(var p in this._properties){var prop=this._properties[p],_2a2=prop.start;if(_2a2 instanceof d.Color){ret[p]=d.blendColors(_2a2,prop.end,r,prop.tempColor).toCss();}else{if(!d.isArray(_2a2)){ret[p]=((prop.end-_2a2)*r)+_2a2+(p!="opacity"?prop.units||"px":0);}}}return ret;};dojo.animateProperty=function(args){var n=args.node=d.byId(args.node);if(!args.easing){args.easing=d._defaultEasing;}var anim=new d.Animation(args);d.connect(anim,"beforeBegin",anim,function(){var pm={};for(var p in this.properties){if(p=="width"||p=="height"){this.node.display="block";}var prop=this.properties[p];if(d.isFunction(prop)){prop=prop(n);}prop=pm[p]=_289({},(d.isObject(prop)?prop:{end:prop}));if(d.isFunction(prop.start)){prop.start=prop.start(n);}if(d.isFunction(prop.end)){prop.end=prop.end(n);}var _2a3=(p.toLowerCase().indexOf("color")>=0);function _2a4(node,p){var v={height:node.offsetHeight,width:node.offsetWidth}[p];if(v!==undefined){return v;}v=d.style(node,p);return (p=="opacity")?+v:(_2a3?v:parseFloat(v));};if(!("end" in prop)){prop.end=_2a4(n,p);}else{if(!("start" in prop)){prop.start=_2a4(n,p);}}if(_2a3){prop.start=new d.Color(prop.start);prop.end=new d.Color(prop.end);}else{prop.start=(p=="opacity")?+prop.start:parseFloat(prop.start);}}this.curve=new _2a0(pm);});d.connect(anim,"onAnimate",d.hitch(d,"style",anim.node));return anim;};dojo.anim=function(node,_2a5,_2a6,_2a7,_2a8,_2a9){return d.animateProperty({node:node,duration:_2a6||d.Animation.prototype.duration,properties:_2a5,easing:_2a7,onEnd:_2a8}).play(_2a9||0);};})();}if(!dojo._hasResource["dojo._base.browser"]){dojo._hasResource["dojo._base.browser"]=true;dojo.provide("dojo._base.browser");dojo.forEach(dojo.config.require,function(i){dojo["require"](i);});}if(dojo.isBrowser&&(document.readyState==="complete"||dojo.config.afterOnLoad)){window.setTimeout(dojo._loadInit,100);}})();
+(function(){var _1=null;if((_1||(typeof djConfig!="undefined"&&djConfig.scopeMap))&&(typeof window!="undefined")){var _2="",_3="",_4="",_5={},_6={};_1=_1||djConfig.scopeMap;for(var i=0;i<_1.length;i++){var _7=_1[i];_2+="var "+_7[0]+" = {}; "+_7[1]+" = "+_7[0]+";"+_7[1]+"._scopeName = '"+_7[1]+"';";_3+=(i==0?"":",")+_7[0];_4+=(i==0?"":",")+_7[1];_5[_7[0]]=_7[1];_6[_7[1]]=_7[0];}eval(_2+"dojo._scopeArgs = ["+_4+"];");dojo._scopePrefixArgs=_3;dojo._scopePrefix="(function("+_3+"){";dojo._scopeSuffix="})("+_4+")";dojo._scopeMap=_5;dojo._scopeMapRev=_6;}(function(){if(typeof this["loadFirebugConsole"]=="function"){this["loadFirebugConsole"]();}else{this.console=this.console||{};var cn=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"];var i=0,tn;while((tn=cn[i++])){if(!console[tn]){(function(){var _8=tn+"";console[_8]=("log" in console)?function(){var a=Array.apply({},arguments);a.unshift(_8+":");console["log"](a.join(" "));}:function(){};console[_8]._fake=true;})();}}}if(typeof dojo=="undefined"){dojo={_scopeName:"dojo",_scopePrefix:"",_scopePrefixArgs:"",_scopeSuffix:"",_scopeMap:{},_scopeMapRev:{}};}var d=dojo;if(typeof dijit=="undefined"){dijit={_scopeName:"dijit"};}if(typeof dojox=="undefined"){dojox={_scopeName:"dojox"};}if(!d._scopeArgs){d._scopeArgs=[dojo,dijit,dojox];}d.global=this;d.config={isDebug:false,debugAtAllCosts:false};var _9=typeof djConfig!="undefined"?djConfig:typeof dojoConfig!="undefined"?dojoConfig:null;if(_9){for(var c in _9){d.config[c]=_9[c];}}dojo.locale=d.config.locale;var _a="$Rev: 24595 $".match(/\d+/);dojo.version={major:1,minor:6,patch:1,flag:"",revision:_a?+_a[0]:NaN,toString:function(){with(d.version){return major+"."+minor+"."+patch+flag+" ("+revision+")";}}};if(typeof OpenAjax!="undefined"){OpenAjax.hub.registerLibrary(dojo._scopeName,"http://dojotoolkit.org",d.version.toString());}var _b,_c,_d={};for(var i in {toString:1}){_b=[];break;}dojo._extraNames=_b=_b||["hasOwnProperty","valueOf","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","constructor"];_c=_b.length;dojo._mixin=function(_e,_f){var _10,s,i;for(_10 in _f){s=_f[_10];if(!(_10 in _e)||(_e[_10]!==s&&(!(_10 in _d)||_d[_10]!==s))){_e[_10]=s;}}if(_c&&_f){for(i=0;i<_c;++i){_10=_b[i];s=_f[_10];if(!(_10 in _e)||(_e[_10]!==s&&(!(_10 in _d)||_d[_10]!==s))){_e[_10]=s;}}}return _e;};dojo.mixin=function(obj,_11){if(!obj){obj={};}for(var i=1,l=arguments.length;i<l;i++){d._mixin(obj,arguments[i]);}return obj;};dojo._getProp=function(_12,_13,_14){var obj=_14||d.global;for(var i=0,p;obj&&(p=_12[i]);i++){if(i==0&&d._scopeMap[p]){p=d._scopeMap[p];}obj=(p in obj?obj[p]:(_13?obj[p]={}:undefined));}return obj;};dojo.setObject=function(_15,_16,_17){var _18=_15.split("."),p=_18.pop(),obj=d._getProp(_18,true,_17);return obj&&p?(obj[p]=_16):undefined;};dojo.getObject=function(_19,_1a,_1b){return d._getProp(_19.split("."),_1a,_1b);};dojo.exists=function(_1c,obj){return d.getObject(_1c,false,obj)!==undefined;};dojo["eval"]=function(_1d){return d.global.eval?d.global.eval(_1d):eval(_1d);};d.deprecated=d.experimental=function(){};})();(function(){var d=dojo,_1e;d.mixin(d,{_loadedModules:{},_inFlightCount:0,_hasResource:{},_modulePrefixes:{dojo:{name:"dojo",value:"."},doh:{name:"doh",value:"../util/doh"},tests:{name:"tests",value:"tests"}},_moduleHasPrefix:function(_1f){var mp=d._modulePrefixes;return !!(mp[_1f]&&mp[_1f].value);},_getModulePrefix:function(_20){var mp=d._modulePrefixes;if(d._moduleHasPrefix(_20)){return mp[_20].value;}return _20;},_loadedUrls:[],_postLoad:false,_loaders:[],_unloaders:[],_loadNotifying:false});dojo._loadPath=function(_21,_22,cb){var uri=((_21.charAt(0)=="/"||_21.match(/^\w+:/))?"":d.baseUrl)+_21;try{_1e=_22;return !_22?d._loadUri(uri,cb):d._loadUriAndCheck(uri,_22,cb);}catch(e){console.error(e);return false;}finally{_1e=null;}};dojo._loadUri=function(uri,cb){if(d._loadedUrls[uri]){return true;}d._inFlightCount++;var _23=d._getText(uri,true);if(_23){d._loadedUrls[uri]=true;d._loadedUrls.push(uri);if(cb){_23=/^define\(/.test(_23)?_23:"("+_23+")";}else{_23=d._scopePrefix+_23+d._scopeSuffix;}if(!d.isIE){_23+="\r\n//@ sourceURL="+uri;}var _24=d["eval"](_23);if(cb){cb(_24);}}if(--d._inFlightCount==0&&d._postLoad&&d._loaders.length){setTimeout(function(){if(d._inFlightCount==0){d._callLoaded();}},0);}return !!_23;};dojo._loadUriAndCheck=function(uri,_25,cb){var ok=false;try{ok=d._loadUri(uri,cb);}catch(e){console.error("failed loading "+uri+" with error: "+e);}return !!(ok&&d._loadedModules[_25]);};dojo.loaded=function(){d._loadNotifying=true;d._postLoad=true;var mll=d._loaders;d._loaders=[];for(var x=0;x<mll.length;x++){mll[x]();}d._loadNotifying=false;if(d._postLoad&&d._inFlightCount==0&&mll.length){d._callLoaded();}};dojo.unloaded=function(){var mll=d._unloaders;while(mll.length){(mll.pop())();}};d._onto=function(arr,obj,fn){if(!fn){arr.push(obj);}else{if(fn){var _26=(typeof fn=="string")?obj[fn]:fn;arr.push(function(){_26.call(obj);});}}};dojo.ready=dojo.addOnLoad=function(obj,_27){d._onto(d._loaders,obj,_27);if(d._postLoad&&d._inFlightCount==0&&!d._loadNotifying){d._callLoaded();}};var dca=d.config.addOnLoad;if(dca){d.addOnLoad[(dca instanceof Array?"apply":"call")](d,dca);}dojo._modulesLoaded=function(){if(d._postLoad){return;}if(d._inFlightCount>0){console.warn("files still in flight!");return;}d._callLoaded();};dojo._callLoaded=function(){if(typeof setTimeout=="object"||(d.config.useXDomain&&d.isOpera)){setTimeout(d.isAIR?function(){d.loaded();}:d._scopeName+".loaded();",0);}else{d.loaded();}};dojo._getModuleSymbols=function(_28){var _29=_28.split(".");for(var i=_29.length;i>0;i--){var _2a=_29.slice(0,i).join(".");if(i==1&&!d._moduleHasPrefix(_2a)){_29[0]="../"+_29[0];}else{var _2b=d._getModulePrefix(_2a);if(_2b!=_2a){_29.splice(0,i,_2b);break;}}}return _29;};dojo._global_omit_module_check=false;dojo.loadInit=function(_2c){_2c();};dojo._loadModule=dojo.require=function(_2d,_2e){_2e=d._global_omit_module_check||_2e;var _2f=d._loadedModules[_2d];if(_2f){return _2f;}var _30=d._getModuleSymbols(_2d).join("/")+".js";var _31=!_2e?_2d:null;var ok=d._loadPath(_30,_31);if(!ok&&!_2e){throw new Error("Could not load '"+_2d+"'; last tried '"+_30+"'");}if(!_2e&&!d._isXDomain){_2f=d._loadedModules[_2d];if(!_2f){throw new Error("symbol '"+_2d+"' is not defined after loading '"+_30+"'");}}return _2f;};dojo.provide=function(_32){_32=_32+"";return (d._loadedModules[_32]=d.getObject(_32,true));};dojo.platformRequire=function(_33){var _34=_33.common||[];var _35=_34.concat(_33[d._name]||_33["default"]||[]);for(var x=0;x<_35.length;x++){var _36=_35[x];if(_36.constructor==Array){d._loadModule.apply(d,_36);}else{d._loadModule(_36);}}};dojo.requireIf=function(_37,_38){if(_37===true){var _39=[];for(var i=1;i<arguments.length;i++){_39.push(arguments[i]);}d.require.apply(d,_39);}};dojo.requireAfterIf=d.requireIf;dojo.registerModulePath=function(_3a,_3b){d._modulePrefixes[_3a]={name:_3a,value:_3b};};dojo.requireLocalization=function(_3c,_3d,_3e,_3f){d.require("dojo.i18n");d.i18n._requireLocalization.apply(d.hostenv,arguments);};var ore=new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),ire=new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$");dojo._Url=function(){var n=null,_40=arguments,uri=[_40[0]];for(var i=1;i<_40.length;i++){if(!_40[i]){continue;}var _41=new d._Url(_40[i]+""),_42=new d._Url(uri[0]+"");if(_41.path==""&&!_41.scheme&&!_41.authority&&!_41.query){if(_41.fragment!=n){_42.fragment=_41.fragment;}_41=_42;}else{if(!_41.scheme){_41.scheme=_42.scheme;if(!_41.authority){_41.authority=_42.authority;if(_41.path.charAt(0)!="/"){var _43=_42.path.substring(0,_42.path.lastIndexOf("/")+1)+_41.path;var _44=_43.split("/");for(var j=0;j<_44.length;j++){if(_44[j]=="."){if(j==_44.length-1){_44[j]="";}else{_44.splice(j,1);j--;}}else{if(j>0&&!(j==1&&_44[0]=="")&&_44[j]==".."&&_44[j-1]!=".."){if(j==(_44.length-1)){_44.splice(j,1);_44[j-1]="";}else{_44.splice(j-1,2);j-=2;}}}}_41.path=_44.join("/");}}}}uri=[];if(_41.scheme){uri.push(_41.scheme,":");}if(_41.authority){uri.push("//",_41.authority);}uri.push(_41.path);if(_41.query){uri.push("?",_41.query);}if(_41.fragment){uri.push("#",_41.fragment);}}this.uri=uri.join("");var r=this.uri.match(ore);this.scheme=r[2]||(r[1]?"":n);this.authority=r[4]||(r[3]?"":n);this.path=r[5];this.query=r[7]||(r[6]?"":n);this.fragment=r[9]||(r[8]?"":n);if(this.authority!=n){r=this.authority.match(ire);this.user=r[3]||n;this.password=r[4]||n;this.host=r[6]||r[7];this.port=r[9]||n;}};dojo._Url.prototype.toString=function(){return this.uri;};dojo.moduleUrl=function(_45,url){var loc=d._getModuleSymbols(_45).join("/");if(!loc){return null;}if(loc.lastIndexOf("/")!=loc.length-1){loc+="/";}var _46=loc.indexOf(":");if(loc.charAt(0)!="/"&&(_46==-1||_46>loc.indexOf("/"))){loc=d.baseUrl+loc;}return new d._Url(loc,url);};})();if(typeof window!="undefined"){dojo.isBrowser=true;dojo._name="browser";(function(){var d=dojo;if(document&&document.getElementsByTagName){var _47=document.getElementsByTagName("script");var _48=/dojo(\.xd)?\.js(\W|$)/i;for(var i=0;i<_47.length;i++){var src=_47[i].getAttribute("src");if(!src){continue;}var m=src.match(_48);if(m){if(!d.config.baseUrl){d.config.baseUrl=src.substring(0,m.index);}var cfg=(_47[i].getAttribute("djConfig")||_47[i].getAttribute("data-dojo-config"));if(cfg){var _49=eval("({ "+cfg+" })");for(var x in _49){dojo.config[x]=_49[x];}}break;}}}d.baseUrl=d.config.baseUrl;var n=navigator;var dua=n.userAgent,dav=n.appVersion,tv=parseFloat(dav);if(dua.indexOf("Opera")>=0){d.isOpera=tv;}if(dua.indexOf("AdobeAIR")>=0){d.isAIR=1;}d.isKhtml=(dav.indexOf("Konqueror")>=0)?tv:0;d.isWebKit=parseFloat(dua.split("WebKit/")[1])||undefined;d.isChrome=parseFloat(dua.split("Chrome/")[1])||undefined;d.isMac=dav.indexOf("Macintosh")>=0;var _4a=Math.max(dav.indexOf("WebKit"),dav.indexOf("Safari"),0);if(_4a&&!dojo.isChrome){d.isSafari=parseFloat(dav.split("Version/")[1]);if(!d.isSafari||parseFloat(dav.substr(_4a+7))<=419.3){d.isSafari=2;}}if(dua.indexOf("Gecko")>=0&&!d.isKhtml&&!d.isWebKit){d.isMozilla=d.isMoz=tv;}if(d.isMoz){d.isFF=parseFloat(dua.split("Firefox/")[1]||dua.split("Minefield/")[1])||undefined;}if(document.all&&!d.isOpera){d.isIE=parseFloat(dav.split("MSIE ")[1])||undefined;var _4b=document.documentMode;if(_4b&&_4b!=5&&Math.floor(d.isIE)!=_4b){d.isIE=_4b;}}if(dojo.isIE&&window.location.protocol==="file:"){dojo.config.ieForceActiveXXhr=true;}d.isQuirks=document.compatMode=="BackCompat";d.locale=dojo.config.locale||(d.isIE?n.userLanguage:n.language).toLowerCase();d._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];d._xhrObj=function(){var _4c,_4d;if(!dojo.isIE||!dojo.config.ieForceActiveXXhr){try{_4c=new XMLHttpRequest();}catch(e){}}if(!_4c){for(var i=0;i<3;++i){var _4e=d._XMLHTTP_PROGIDS[i];try{_4c=new ActiveXObject(_4e);}catch(e){_4d=e;}if(_4c){d._XMLHTTP_PROGIDS=[_4e];break;}}}if(!_4c){throw new Error("XMLHTTP not available: "+_4d);}return _4c;};d._isDocumentOk=function(_4f){var _50=_4f.status||0,lp=location.protocol;return (_50>=200&&_50<300)||_50==304||_50==1223||(!_50&&(lp=="file:"||lp=="chrome:"||lp=="chrome-extension:"||lp=="app:"));};var _51=window.location+"";var _52=document.getElementsByTagName("base");var _53=(_52&&_52.length>0);d._getText=function(uri,_54){var _55=d._xhrObj();if(!_53&&dojo._Url){uri=(new dojo._Url(_51,uri)).toString();}if(d.config.cacheBust){uri+="";uri+=(uri.indexOf("?")==-1?"?":"&")+String(d.config.cacheBust).replace(/\W+/g,"");}_55.open("GET",uri,false);try{_55.send(null);if(!d._isDocumentOk(_55)){var err=Error("Unable to load "+uri+" status:"+_55.status);err.status=_55.status;err.responseText=_55.responseText;throw err;}}catch(e){if(_54){return null;}throw e;}return _55.responseText;};var _56=window;var _57=function(_58,fp){var _59=_56.attachEvent||_56.addEventListener;_58=_56.attachEvent?_58:_58.substring(2);_59(_58,function(){fp.apply(_56,arguments);},false);};d._windowUnloaders=[];d.windowUnloaded=function(){var mll=d._windowUnloaders;while(mll.length){(mll.pop())();}d=null;};var _5a=0;d.addOnWindowUnload=function(obj,_5b){d._onto(d._windowUnloaders,obj,_5b);if(!_5a){_5a=1;_57("onunload",d.windowUnloaded);}};var _5c=0;d.addOnUnload=function(obj,_5d){d._onto(d._unloaders,obj,_5d);if(!_5c){_5c=1;_57("onbeforeunload",dojo.unloaded);}};})();dojo._initFired=false;dojo._loadInit=function(e){if(dojo._scrollIntervalId){clearInterval(dojo._scrollIntervalId);dojo._scrollIntervalId=0;}if(!dojo._initFired){dojo._initFired=true;if(!dojo.config.afterOnLoad&&window.detachEvent){window.detachEvent("onload",dojo._loadInit);}if(dojo._inFlightCount==0){dojo._modulesLoaded();}}};if(!dojo.config.afterOnLoad){if(document.addEventListener){document.addEventListener("DOMContentLoaded",dojo._loadInit,false);window.addEventListener("load",dojo._loadInit,false);}else{if(window.attachEvent){window.attachEvent("onload",dojo._loadInit);if(!dojo.config.skipIeDomLoaded&&self===self.top){dojo._scrollIntervalId=setInterval(function(){try{if(document.body){document.documentElement.doScroll("left");dojo._loadInit();}}catch(e){}},30);}}}}if(dojo.isIE){try{(function(){document.namespaces.add("v","urn:schemas-microsoft-com:vml");var _5e=["*","group","roundrect","oval","shape","rect","imagedata","path","textpath","text"],i=0,l=1,s=document.createStyleSheet();if(dojo.isIE>=8){i=1;l=_5e.length;}for(;i<l;++i){s.addRule("v\\:"+_5e[i],"behavior:url(#default#VML); display:inline-block");}})();}catch(e){}}}(function(){var mp=dojo.config["modulePaths"];if(mp){for(var _5f in mp){dojo.registerModulePath(_5f,mp[_5f]);}}})();if(dojo.config.isDebug){dojo.require("dojo._firebug.firebug");}if(dojo.config.debugAtAllCosts){dojo.require("dojo._base._loader.loader_debug");dojo.require("dojo.i18n");}if(!dojo._hasResource["dojo._base.lang"]){dojo._hasResource["dojo._base.lang"]=true;dojo.provide("dojo._base.lang");(function(){var d=dojo,_60=Object.prototype.toString;dojo.isString=function(it){return (typeof it=="string"||it instanceof String);};dojo.isArray=function(it){return it&&(it instanceof Array||typeof it=="array");};dojo.isFunction=function(it){return _60.call(it)==="[object Function]";};dojo.isObject=function(it){return it!==undefined&&(it===null||typeof it=="object"||d.isArray(it)||d.isFunction(it));};dojo.isArrayLike=function(it){return it&&it!==undefined&&!d.isString(it)&&!d.isFunction(it)&&!(it.tagName&&it.tagName.toLowerCase()=="form")&&(d.isArray(it)||isFinite(it.length));};dojo.isAlien=function(it){return it&&!d.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));};dojo.extend=function(_61,_62){for(var i=1,l=arguments.length;i<l;i++){d._mixin(_61.prototype,arguments[i]);}return _61;};dojo._hitchArgs=function(_63,_64){var pre=d._toArray(arguments,2);var _65=d.isString(_64);return function(){var _66=d._toArray(arguments);var f=_65?(_63||d.global)[_64]:_64;return f&&f.apply(_63||this,pre.concat(_66));};};dojo.hitch=function(_67,_68){if(arguments.length>2){return d._hitchArgs.apply(d,arguments);}if(!_68){_68=_67;_67=null;}if(d.isString(_68)){_67=_67||d.global;if(!_67[_68]){throw (["dojo.hitch: scope[\"",_68,"\"] is null (scope=\"",_67,"\")"].join(""));}return function(){return _67[_68].apply(_67,arguments||[]);};}return !_67?_68:function(){return _68.apply(_67,arguments||[]);};};dojo.delegate=dojo._delegate=(function(){function TMP(){};return function(obj,_69){TMP.prototype=obj;var tmp=new TMP();TMP.prototype=null;if(_69){d._mixin(tmp,_69);}return tmp;};})();var _6a=function(obj,_6b,_6c){return (_6c||[]).concat(Array.prototype.slice.call(obj,_6b||0));};var _6d=function(obj,_6e,_6f){var arr=_6f||[];for(var x=_6e||0;x<obj.length;x++){arr.push(obj[x]);}return arr;};dojo._toArray=d.isIE?function(obj){return ((obj.item)?_6d:_6a).apply(this,arguments);}:_6a;dojo.partial=function(_70){var arr=[null];return d.hitch.apply(d,arr.concat(d._toArray(arguments)));};var _71=d._extraNames,_72=_71.length,_73={};dojo.clone=function(o){if(!o||typeof o!="object"||d.isFunction(o)){return o;}if(o.nodeType&&"cloneNode" in o){return o.cloneNode(true);}if(o instanceof Date){return new Date(o.getTime());}if(o instanceof RegExp){return new RegExp(o);}var r,i,l,s,_74;if(d.isArray(o)){r=[];for(i=0,l=o.length;i<l;++i){if(i in o){r.push(d.clone(o[i]));}}}else{r=o.constructor?new o.constructor():{};}for(_74 in o){s=o[_74];if(!(_74 in r)||(r[_74]!==s&&(!(_74 in _73)||_73[_74]!==s))){r[_74]=d.clone(s);}}if(_72){for(i=0;i<_72;++i){_74=_71[i];s=o[_74];if(!(_74 in r)||(r[_74]!==s&&(!(_74 in _73)||_73[_74]!==s))){r[_74]=s;}}}return r;};dojo.trim=String.prototype.trim?function(str){return str.trim();}:function(str){return str.replace(/^\s\s*/,"").replace(/\s\s*$/,"");};var _75=/\{([^\}]+)\}/g;dojo.replace=function(_76,map,_77){return _76.replace(_77||_75,d.isFunction(map)?map:function(_78,k){return d.getObject(k,false,map);});};})();}if(!dojo._hasResource["dojo._base.array"]){dojo._hasResource["dojo._base.array"]=true;dojo.provide("dojo._base.array");(function(){var _79=function(arr,obj,cb){return [(typeof arr=="string")?arr.split(""):arr,obj||dojo.global,(typeof cb=="string")?new Function("item","index","array",cb):cb];};var _7a=function(_7b,arr,_7c,_7d){var _7e=_79(arr,_7d,_7c);arr=_7e[0];for(var i=0,l=arr.length;i<l;++i){var _7f=!!_7e[2].call(_7e[1],arr[i],i,arr);if(_7b^_7f){return _7f;}}return _7b;};dojo.mixin(dojo,{indexOf:function(_80,_81,_82,_83){var _84=1,end=_80.length||0,i=0;if(_83){i=end-1;_84=end=-1;}if(_82!=undefined){i=_82;}if((_83&&i>end)||i<end){for(;i!=end;i+=_84){if(_80[i]==_81){return i;}}}return -1;},lastIndexOf:function(_85,_86,_87){return dojo.indexOf(_85,_86,_87,true);},forEach:function(arr,_88,_89){if(!arr||!arr.length){return;}var _8a=_79(arr,_89,_88);arr=_8a[0];for(var i=0,l=arr.length;i<l;++i){_8a[2].call(_8a[1],arr[i],i,arr);}},every:function(arr,_8b,_8c){return _7a(true,arr,_8b,_8c);},some:function(arr,_8d,_8e){return _7a(false,arr,_8d,_8e);},map:function(arr,_8f,_90){var _91=_79(arr,_90,_8f);arr=_91[0];var _92=(arguments[3]?(new arguments[3]()):[]);for(var i=0,l=arr.length;i<l;++i){_92.push(_91[2].call(_91[1],arr[i],i,arr));}return _92;},filter:function(arr,_93,_94){var _95=_79(arr,_94,_93);arr=_95[0];var _96=[];for(var i=0,l=arr.length;i<l;++i){if(_95[2].call(_95[1],arr[i],i,arr)){_96.push(arr[i]);}}return _96;}});})();}if(!dojo._hasResource["dojo._base.declare"]){dojo._hasResource["dojo._base.declare"]=true;dojo.provide("dojo._base.declare");(function(){var d=dojo,mix=d._mixin,op=Object.prototype,_97=op.toString,_98=new Function,_99=0,_9a="constructor";function err(msg,cls){throw new Error("declare"+(cls?" "+cls:"")+": "+msg);};function _9b(_9c,_9d){var _9e=[],_9f=[{cls:0,refs:[]}],_a0={},_a1=1,l=_9c.length,i=0,j,lin,_a2,top,_a3,rec,_a4,_a5;for(;i<l;++i){_a2=_9c[i];if(!_a2){err("mixin #"+i+" is unknown. Did you use dojo.require to pull it in?",_9d);}else{if(_97.call(_a2)!="[object Function]"){err("mixin #"+i+" is not a callable constructor.",_9d);}}lin=_a2._meta?_a2._meta.bases:[_a2];top=0;for(j=lin.length-1;j>=0;--j){_a3=lin[j].prototype;if(!_a3.hasOwnProperty("declaredClass")){_a3.declaredClass="uniqName_"+(_99++);}_a4=_a3.declaredClass;if(!_a0.hasOwnProperty(_a4)){_a0[_a4]={count:0,refs:[],cls:lin[j]};++_a1;}rec=_a0[_a4];if(top&&top!==rec){rec.refs.push(top);++top.count;}top=rec;}++top.count;_9f[0].refs.push(top);}while(_9f.length){top=_9f.pop();_9e.push(top.cls);--_a1;while(_a5=top.refs,_a5.length==1){top=_a5[0];if(!top||--top.count){top=0;break;}_9e.push(top.cls);--_a1;}if(top){for(i=0,l=_a5.length;i<l;++i){top=_a5[i];if(!--top.count){_9f.push(top);}}}}if(_a1){err("can't build consistent linearization",_9d);}_a2=_9c[0];_9e[0]=_a2?_a2._meta&&_a2===_9e[_9e.length-_a2._meta.bases.length]?_a2._meta.bases.length:1:0;return _9e;};function _a6(_a7,a,f){var _a8,_a9,_aa,_ab,_ac,_ad,_ae,opf,pos,_af=this._inherited=this._inherited||{};if(typeof _a7=="string"){_a8=_a7;_a7=a;a=f;}f=0;_ab=_a7.callee;_a8=_a8||_ab.nom;if(!_a8){err("can't deduce a name to call inherited()",this.declaredClass);}_ac=this.constructor._meta;_aa=_ac.bases;pos=_af.p;if(_a8!=_9a){if(_af.c!==_ab){pos=0;_ad=_aa[0];_ac=_ad._meta;if(_ac.hidden[_a8]!==_ab){_a9=_ac.chains;if(_a9&&typeof _a9[_a8]=="string"){err("calling chained method with inherited: "+_a8,this.declaredClass);}do{_ac=_ad._meta;_ae=_ad.prototype;if(_ac&&(_ae[_a8]===_ab&&_ae.hasOwnProperty(_a8)||_ac.hidden[_a8]===_ab)){break;}}while(_ad=_aa[++pos]);pos=_ad?pos:-1;}}_ad=_aa[++pos];if(_ad){_ae=_ad.prototype;if(_ad._meta&&_ae.hasOwnProperty(_a8)){f=_ae[_a8];}else{opf=op[_a8];do{_ae=_ad.prototype;f=_ae[_a8];if(f&&(_ad._meta?_ae.hasOwnProperty(_a8):f!==opf)){break;}}while(_ad=_aa[++pos]);}}f=_ad&&f||op[_a8];}else{if(_af.c!==_ab){pos=0;_ac=_aa[0]._meta;if(_ac&&_ac.ctor!==_ab){_a9=_ac.chains;if(!_a9||_a9.constructor!=="manual"){err("calling chained constructor with inherited",this.declaredClass);}while(_ad=_aa[++pos]){_ac=_ad._meta;if(_ac&&_ac.ctor===_ab){break;}}pos=_ad?pos:-1;}}while(_ad=_aa[++pos]){_ac=_ad._meta;f=_ac?_ac.ctor:_ad;if(f){break;}}f=_ad&&f;}_af.c=f;_af.p=pos;if(f){return a===true?f:f.apply(this,a||_a7);}};function _b0(_b1,_b2){if(typeof _b1=="string"){return this.inherited(_b1,_b2,true);}return this.inherited(_b1,true);};function _b3(cls){var _b4=this.constructor._meta.bases;for(var i=0,l=_b4.length;i<l;++i){if(_b4[i]===cls){return true;}}return this instanceof cls;};function _b5(_b6,_b7){var _b8,i=0,l=d._extraNames.length;for(_b8 in _b7){if(_b8!=_9a&&_b7.hasOwnProperty(_b8)){_b6[_b8]=_b7[_b8];}}for(;i<l;++i){_b8=d._extraNames[i];if(_b8!=_9a&&_b7.hasOwnProperty(_b8)){_b6[_b8]=_b7[_b8];}}};function _b9(_ba,_bb){var _bc,t,i=0,l=d._extraNames.length;for(_bc in _bb){t=_bb[_bc];if((t!==op[_bc]||!(_bc in op))&&_bc!=_9a){if(_97.call(t)=="[object Function]"){t.nom=_bc;}_ba[_bc]=t;}}for(;i<l;++i){_bc=d._extraNames[i];t=_bb[_bc];if((t!==op[_bc]||!(_bc in op))&&_bc!=_9a){if(_97.call(t)=="[object Function]"){t.nom=_bc;}_ba[_bc]=t;}}return _ba;};function _bd(_be){_b9(this.prototype,_be);return this;};function _bf(_c0,_c1){return function(){var a=arguments,_c2=a,a0=a[0],f,i,m,l=_c0.length,_c3;if(!(this instanceof a.callee)){return _c4(a);}if(_c1&&(a0&&a0.preamble||this.preamble)){_c3=new Array(_c0.length);_c3[0]=a;for(i=0;;){a0=a[0];if(a0){f=a0.preamble;if(f){a=f.apply(this,a)||a;}}f=_c0[i].prototype;f=f.hasOwnProperty("preamble")&&f.preamble;if(f){a=f.apply(this,a)||a;}if(++i==l){break;}_c3[i]=a;}}for(i=l-1;i>=0;--i){f=_c0[i];m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,_c3?_c3[i]:a);}}f=this.postscript;if(f){f.apply(this,_c2);}};};function _c5(_c6,_c7){return function(){var a=arguments,t=a,a0=a[0],f;if(!(this instanceof a.callee)){return _c4(a);}if(_c7){if(a0){f=a0.preamble;if(f){t=f.apply(this,t)||t;}}f=this.preamble;if(f){f.apply(this,t);}}if(_c6){_c6.apply(this,a);}f=this.postscript;if(f){f.apply(this,a);}};};function _c8(_c9){return function(){var a=arguments,i=0,f,m;if(!(this instanceof a.callee)){return _c4(a);}for(;f=_c9[i];++i){m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,a);break;}}f=this.postscript;if(f){f.apply(this,a);}};};function _ca(_cb,_cc,_cd){return function(){var b,m,f,i=0,_ce=1;if(_cd){i=_cc.length-1;_ce=-1;}for(;b=_cc[i];i+=_ce){m=b._meta;f=(m?m.hidden:b.prototype)[_cb];if(f){f.apply(this,arguments);}}};};function _cf(_d0){_98.prototype=_d0.prototype;var t=new _98;_98.prototype=null;return t;};function _c4(_d1){var _d2=_d1.callee,t=_cf(_d2);_d2.apply(t,_d1);return t;};d.declare=function(_d3,_d4,_d5){if(typeof _d3!="string"){_d5=_d4;_d4=_d3;_d3="";}_d5=_d5||{};var _d6,i,t,_d7,_d8,_d9,_da,_db=1,_dc=_d4;if(_97.call(_d4)=="[object Array]"){_d9=_9b(_d4,_d3);t=_d9[0];_db=_d9.length-t;_d4=_d9[_db];}else{_d9=[0];if(_d4){if(_97.call(_d4)=="[object Function]"){t=_d4._meta;_d9=_d9.concat(t?t.bases:_d4);}else{err("base class is not a callable constructor.",_d3);}}else{if(_d4!==null){err("unknown base class. Did you use dojo.require to pull it in?",_d3);}}}if(_d4){for(i=_db-1;;--i){_d6=_cf(_d4);if(!i){break;}t=_d9[i];(t._meta?_b5:mix)(_d6,t.prototype);_d7=new Function;_d7.superclass=_d4;_d7.prototype=_d6;_d4=_d6.constructor=_d7;}}else{_d6={};}_b9(_d6,_d5);t=_d5.constructor;if(t!==op.constructor){t.nom=_9a;_d6.constructor=t;}for(i=_db-1;i;--i){t=_d9[i]._meta;if(t&&t.chains){_da=mix(_da||{},t.chains);}}if(_d6["-chains-"]){_da=mix(_da||{},_d6["-chains-"]);}t=!_da||!_da.hasOwnProperty(_9a);_d9[0]=_d7=(_da&&_da.constructor==="manual")?_c8(_d9):(_d9.length==1?_c5(_d5.constructor,t):_bf(_d9,t));_d7._meta={bases:_d9,hidden:_d5,chains:_da,parents:_dc,ctor:_d5.constructor};_d7.superclass=_d4&&_d4.prototype;_d7.extend=_bd;_d7.prototype=_d6;_d6.constructor=_d7;_d6.getInherited=_b0;_d6.inherited=_a6;_d6.isInstanceOf=_b3;if(_d3){_d6.declaredClass=_d3;d.setObject(_d3,_d7);}if(_da){for(_d8 in _da){if(_d6[_d8]&&typeof _da[_d8]=="string"&&_d8!=_9a){t=_d6[_d8]=_ca(_d8,_d9,_da[_d8]==="after");t.nom=_d8;}}}return _d7;};d.safeMixin=_b9;})();}if(!dojo._hasResource["dojo._base.connect"]){dojo._hasResource["dojo._base.connect"]=true;dojo.provide("dojo._base.connect");dojo._listener={getDispatcher:function(){return function(){var ap=Array.prototype,c=arguments.callee,ls=c._listeners,t=c.target,r=t&&t.apply(this,arguments),i,lls=[].concat(ls);for(i in lls){if(!(i in ap)){lls[i].apply(this,arguments);}}return r;};},add:function(_dd,_de,_df){_dd=_dd||dojo.global;var f=_dd[_de];if(!f||!f._listeners){var d=dojo._listener.getDispatcher();d.target=f;d._listeners=[];f=_dd[_de]=d;}return f._listeners.push(_df);},remove:function(_e0,_e1,_e2){var f=(_e0||dojo.global)[_e1];if(f&&f._listeners&&_e2--){delete f._listeners[_e2];}}};dojo.connect=function(obj,_e3,_e4,_e5,_e6){var a=arguments,_e7=[],i=0;_e7.push(dojo.isString(a[0])?null:a[i++],a[i++]);var a1=a[i+1];_e7.push(dojo.isString(a1)||dojo.isFunction(a1)?a[i++]:null,a[i++]);for(var l=a.length;i<l;i++){_e7.push(a[i]);}return dojo._connect.apply(this,_e7);};dojo._connect=function(obj,_e8,_e9,_ea){var l=dojo._listener,h=l.add(obj,_e8,dojo.hitch(_e9,_ea));return [obj,_e8,h,l];};dojo.disconnect=function(_eb){if(_eb&&_eb[0]!==undefined){dojo._disconnect.apply(this,_eb);delete _eb[0];}};dojo._disconnect=function(obj,_ec,_ed,_ee){_ee.remove(obj,_ec,_ed);};dojo._topics={};dojo.subscribe=function(_ef,_f0,_f1){return [_ef,dojo._listener.add(dojo._topics,_ef,dojo.hitch(_f0,_f1))];};dojo.unsubscribe=function(_f2){if(_f2){dojo._listener.remove(dojo._topics,_f2[0],_f2[1]);}};dojo.publish=function(_f3,_f4){var f=dojo._topics[_f3];if(f){f.apply(this,_f4||[]);}};dojo.connectPublisher=function(_f5,obj,_f6){var pf=function(){dojo.publish(_f5,arguments);};return _f6?dojo.connect(obj,_f6,pf):dojo.connect(obj,pf);};}if(!dojo._hasResource["dojo._base.Deferred"]){dojo._hasResource["dojo._base.Deferred"]=true;dojo.provide("dojo._base.Deferred");(function(){var _f7=function(){};var _f8=Object.freeze||function(){};dojo.Deferred=function(_f9){var _fa,_fb,_fc,_fd,_fe;var _ff=(this.promise={});function _100(_101){if(_fb){throw new Error("This deferred has already been resolved");}_fa=_101;_fb=true;_102();};function _102(){var _103;while(!_103&&_fe){var _104=_fe;_fe=_fe.next;if((_103=(_104.progress==_f7))){_fb=false;}var func=(_fc?_104.error:_104.resolved);if(func){try{var _105=func(_fa);if(_105&&typeof _105.then==="function"){_105.then(dojo.hitch(_104.deferred,"resolve"),dojo.hitch(_104.deferred,"reject"));continue;}var _106=_103&&_105===undefined;if(_103&&!_106){_fc=_105 instanceof Error;}_104.deferred[_106&&_fc?"reject":"resolve"](_106?_fa:_105);}catch(e){_104.deferred.reject(e);}}else{if(_fc){_104.deferred.reject(_fa);}else{_104.deferred.resolve(_fa);}}}};this.resolve=this.callback=function(_107){this.fired=0;this.results=[_107,null];_100(_107);};this.reject=this.errback=function(_108){_fc=true;this.fired=1;_100(_108);this.results=[null,_108];if(!_108||_108.log!==false){(dojo.config.deferredOnError||function(x){console.error(x);})(_108);}};this.progress=function(_109){var _10a=_fe;while(_10a){var _10b=_10a.progress;_10b&&_10b(_109);_10a=_10a.next;}};this.addCallbacks=function(_10c,_10d){this.then(_10c,_10d,_f7);return this;};this.then=_ff.then=function(_10e,_10f,_110){var _111=_110==_f7?this:new dojo.Deferred(_ff.cancel);var _112={resolved:_10e,error:_10f,progress:_110,deferred:_111};if(_fe){_fd=_fd.next=_112;}else{_fe=_fd=_112;}if(_fb){_102();}return _111.promise;};var _113=this;this.cancel=_ff.cancel=function(){if(!_fb){var _114=_f9&&_f9(_113);if(!_fb){if(!(_114 instanceof Error)){_114=new Error(_114);}_114.log=false;_113.reject(_114);}}};_f8(_ff);};dojo.extend(dojo.Deferred,{addCallback:function(_115){return this.addCallbacks(dojo.hitch.apply(dojo,arguments));},addErrback:function(_116){return this.addCallbacks(null,dojo.hitch.apply(dojo,arguments));},addBoth:function(_117){var _118=dojo.hitch.apply(dojo,arguments);return this.addCallbacks(_118,_118);},fired:-1});})();dojo.when=function(_119,_11a,_11b,_11c){if(_119&&typeof _119.then==="function"){return _119.then(_11a,_11b,_11c);}return _11a(_119);};}if(!dojo._hasResource["dojo._base.json"]){dojo._hasResource["dojo._base.json"]=true;dojo.provide("dojo._base.json");dojo.fromJson=function(json){return eval("("+json+")");};dojo._escapeString=function(str){return ("\""+str.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");};dojo.toJsonIndentStr="\t";dojo.toJson=function(it,_11d,_11e){if(it===undefined){return "undefined";}var _11f=typeof it;if(_11f=="number"||_11f=="boolean"){return it+"";}if(it===null){return "null";}if(dojo.isString(it)){return dojo._escapeString(it);}var _120=arguments.callee;var _121;_11e=_11e||"";var _122=_11d?_11e+dojo.toJsonIndentStr:"";var tf=it.__json__||it.json;if(dojo.isFunction(tf)){_121=tf.call(it);if(it!==_121){return _120(_121,_11d,_122);}}if(it.nodeType&&it.cloneNode){throw new Error("Can't serialize DOM nodes");}var sep=_11d?" ":"";var _123=_11d?"\n":"";if(dojo.isArray(it)){var res=dojo.map(it,function(obj){var val=_120(obj,_11d,_122);if(typeof val!="string"){val="undefined";}return _123+_122+val;});return "["+res.join(","+sep)+_123+_11e+"]";}if(_11f=="function"){return null;}var _124=[],key;for(key in it){var _125,val;if(typeof key=="number"){_125="\""+key+"\"";}else{if(typeof key=="string"){_125=dojo._escapeString(key);}else{continue;}}val=_120(it[key],_11d,_122);if(typeof val!="string"){continue;}_124.push(_123+_122+_125+":"+sep+val);}return "{"+_124.join(","+sep)+_123+_11e+"}";};}if(!dojo._hasResource["dojo._base.Color"]){dojo._hasResource["dojo._base.Color"]=true;dojo.provide("dojo._base.Color");(function(){var d=dojo;dojo.Color=function(_126){if(_126){this.setColor(_126);}};dojo.Color.named={black:[0,0,0],silver:[192,192,192],gray:[128,128,128],white:[255,255,255],maroon:[128,0,0],red:[255,0,0],purple:[128,0,128],fuchsia:[255,0,255],green:[0,128,0],lime:[0,255,0],olive:[128,128,0],yellow:[255,255,0],navy:[0,0,128],blue:[0,0,255],teal:[0,128,128],aqua:[0,255,255],transparent:d.config.transparentColor||[255,255,255]};dojo.extend(dojo.Color,{r:255,g:255,b:255,a:1,_set:function(r,g,b,a){var t=this;t.r=r;t.g=g;t.b=b;t.a=a;},setColor:function(_127){if(d.isString(_127)){d.colorFromString(_127,this);}else{if(d.isArray(_127)){d.colorFromArray(_127,this);}else{this._set(_127.r,_127.g,_127.b,_127.a);if(!(_127 instanceof d.Color)){this.sanitize();}}}return this;},sanitize:function(){return this;},toRgb:function(){var t=this;return [t.r,t.g,t.b];},toRgba:function(){var t=this;return [t.r,t.g,t.b,t.a];},toHex:function(){var arr=d.map(["r","g","b"],function(x){var s=this[x].toString(16);return s.length<2?"0"+s:s;},this);return "#"+arr.join("");},toCss:function(_128){var t=this,rgb=t.r+", "+t.g+", "+t.b;return (_128?"rgba("+rgb+", "+t.a:"rgb("+rgb)+")";},toString:function(){return this.toCss(true);}});dojo.blendColors=function(_129,end,_12a,obj){var t=obj||new d.Color();d.forEach(["r","g","b","a"],function(x){t[x]=_129[x]+(end[x]-_129[x])*_12a;if(x!="a"){t[x]=Math.round(t[x]);}});return t.sanitize();};dojo.colorFromRgb=function(_12b,obj){var m=_12b.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);return m&&dojo.colorFromArray(m[1].split(/\s*,\s*/),obj);};dojo.colorFromHex=function(_12c,obj){var t=obj||new d.Color(),bits=(_12c.length==4)?4:8,mask=(1<<bits)-1;_12c=Number("0x"+_12c.substr(1));if(isNaN(_12c)){return null;}d.forEach(["b","g","r"],function(x){var c=_12c&mask;_12c>>=bits;t[x]=bits==4?17*c:c;});t.a=1;return t;};dojo.colorFromArray=function(a,obj){var t=obj||new d.Color();t._set(Number(a[0]),Number(a[1]),Number(a[2]),Number(a[3]));if(isNaN(t.a)){t.a=1;}return t.sanitize();};dojo.colorFromString=function(str,obj){var a=d.Color.named[str];return a&&d.colorFromArray(a,obj)||d.colorFromRgb(str,obj)||d.colorFromHex(str,obj);};})();}if(!dojo._hasResource["dojo._base.window"]){dojo._hasResource["dojo._base.window"]=true;dojo.provide("dojo._base.window");dojo.doc=window["document"]||null;dojo.body=function(){return dojo.doc.body||dojo.doc.getElementsByTagName("body")[0];};dojo.setContext=function(_12d,_12e){dojo.global=_12d;dojo.doc=_12e;};dojo.withGlobal=function(_12f,_130,_131,_132){var _133=dojo.global;try{dojo.global=_12f;return dojo.withDoc.call(null,_12f.document,_130,_131,_132);}finally{dojo.global=_133;}};dojo.withDoc=function(_134,_135,_136,_137){var _138=dojo.doc,_139=dojo._bodyLtr,oldQ=dojo.isQuirks;try{dojo.doc=_134;delete dojo._bodyLtr;dojo.isQuirks=dojo.doc.compatMode=="BackCompat";if(_136&&typeof _135=="string"){_135=_136[_135];}return _135.apply(_136,_137||[]);}finally{dojo.doc=_138;delete dojo._bodyLtr;if(_139!==undefined){dojo._bodyLtr=_139;}dojo.isQuirks=oldQ;}};}if(!dojo._hasResource["dojo._base.event"]){dojo._hasResource["dojo._base.event"]=true;dojo.provide("dojo._base.event");(function(){var del=(dojo._event_listener={add:function(node,name,fp){if(!node){return;}name=del._normalizeEventName(name);fp=del._fixCallback(name,fp);if(!dojo.isIE&&(name=="mouseenter"||name=="mouseleave")){var ofp=fp;name=(name=="mouseenter")?"mouseover":"mouseout";fp=function(e){if(!dojo.isDescendant(e.relatedTarget,node)){return ofp.call(this,e);}};}node.addEventListener(name,fp,false);return fp;},remove:function(node,_13a,_13b){if(node){_13a=del._normalizeEventName(_13a);if(!dojo.isIE&&(_13a=="mouseenter"||_13a=="mouseleave")){_13a=(_13a=="mouseenter")?"mouseover":"mouseout";}node.removeEventListener(_13a,_13b,false);}},_normalizeEventName:function(name){return name.slice(0,2)=="on"?name.slice(2):name;},_fixCallback:function(name,fp){return name!="keypress"?fp:function(e){return fp.call(this,del._fixEvent(e,this));};},_fixEvent:function(evt,_13c){switch(evt.type){case "keypress":del._setKeyChar(evt);break;}return evt;},_setKeyChar:function(evt){evt.keyChar=evt.charCode>=32?String.fromCharCode(evt.charCode):"";evt.charOrCode=evt.keyChar||evt.keyCode;},_punctMap:{106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39}});dojo.fixEvent=function(evt,_13d){return del._fixEvent(evt,_13d);};dojo.stopEvent=function(evt){evt.preventDefault();evt.stopPropagation();};var _13e=dojo._listener;dojo._connect=function(obj,_13f,_140,_141,_142){var _143=obj&&(obj.nodeType||obj.attachEvent||obj.addEventListener);var lid=_143?(_142?2:1):0,l=[dojo._listener,del,_13e][lid];var h=l.add(obj,_13f,dojo.hitch(_140,_141));return [obj,_13f,h,lid];};dojo._disconnect=function(obj,_144,_145,_146){([dojo._listener,del,_13e][_146]).remove(obj,_144,_145);};dojo.keys={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,META:dojo.isSafari?91:224,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145,copyKey:dojo.isMac&&!dojo.isAIR?(dojo.isSafari?91:224):17};var _147=dojo.isMac?"metaKey":"ctrlKey";dojo.isCopyKey=function(e){return e[_147];};if(dojo.isIE<9||(dojo.isIE&&dojo.isQuirks)){dojo.mouseButtons={LEFT:1,MIDDLE:4,RIGHT:2,isButton:function(e,_148){return e.button&_148;},isLeft:function(e){return e.button&1;},isMiddle:function(e){return e.button&4;},isRight:function(e){return e.button&2;}};}else{dojo.mouseButtons={LEFT:0,MIDDLE:1,RIGHT:2,isButton:function(e,_149){return e.button==_149;},isLeft:function(e){return e.button==0;},isMiddle:function(e){return e.button==1;},isRight:function(e){return e.button==2;}};}if(dojo.isIE){var _14a=function(e,code){try{return (e.keyCode=code);}catch(e){return 0;}};var iel=dojo._listener;var _14b=(dojo._ieListenersName="_"+dojo._scopeName+"_listeners");if(!dojo.config._allow_leaks){_13e=iel=dojo._ie_listener={handlers:[],add:function(_14c,_14d,_14e){_14c=_14c||dojo.global;var f=_14c[_14d];if(!f||!f[_14b]){var d=dojo._getIeDispatcher();d.target=f&&(ieh.push(f)-1);d[_14b]=[];f=_14c[_14d]=d;}return f[_14b].push(ieh.push(_14e)-1);},remove:function(_14f,_150,_151){var f=(_14f||dojo.global)[_150],l=f&&f[_14b];if(f&&l&&_151--){delete ieh[l[_151]];delete l[_151];}}};var ieh=iel.handlers;}dojo.mixin(del,{add:function(node,_152,fp){if(!node){return;}_152=del._normalizeEventName(_152);if(_152=="onkeypress"){var kd=node.onkeydown;if(!kd||!kd[_14b]||!kd._stealthKeydownHandle){var h=del.add(node,"onkeydown",del._stealthKeyDown);kd=node.onkeydown;kd._stealthKeydownHandle=h;kd._stealthKeydownRefs=1;}else{kd._stealthKeydownRefs++;}}return iel.add(node,_152,del._fixCallback(fp));},remove:function(node,_153,_154){_153=del._normalizeEventName(_153);iel.remove(node,_153,_154);if(_153=="onkeypress"){var kd=node.onkeydown;if(--kd._stealthKeydownRefs<=0){iel.remove(node,"onkeydown",kd._stealthKeydownHandle);delete kd._stealthKeydownHandle;}}},_normalizeEventName:function(_155){return _155.slice(0,2)!="on"?"on"+_155:_155;},_nop:function(){},_fixEvent:function(evt,_156){if(!evt){var w=_156&&(_156.ownerDocument||_156.document||_156).parentWindow||window;evt=w.event;}if(!evt){return (evt);}evt.target=evt.srcElement;evt.currentTarget=(_156||evt.srcElement);evt.layerX=evt.offsetX;evt.layerY=evt.offsetY;var se=evt.srcElement,doc=(se&&se.ownerDocument)||document;var _157=((dojo.isIE<6)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;var _158=dojo._getIeDocumentElementOffset();evt.pageX=evt.clientX+dojo._fixIeBiDiScrollLeft(_157.scrollLeft||0)-_158.x;evt.pageY=evt.clientY+(_157.scrollTop||0)-_158.y;if(evt.type=="mouseover"){evt.relatedTarget=evt.fromElement;}if(evt.type=="mouseout"){evt.relatedTarget=evt.toElement;}if(dojo.isIE<9||dojo.isQuirks){evt.stopPropagation=del._stopPropagation;evt.preventDefault=del._preventDefault;}return del._fixKeys(evt);},_fixKeys:function(evt){switch(evt.type){case "keypress":var c=("charCode" in evt?evt.charCode:evt.keyCode);if(c==10){c=0;evt.keyCode=13;}else{if(c==13||c==27){c=0;}else{if(c==3){c=99;}}}evt.charCode=c;del._setKeyChar(evt);break;}return evt;},_stealthKeyDown:function(evt){var kp=evt.currentTarget.onkeypress;if(!kp||!kp[_14b]){return;}var k=evt.keyCode;var _159=(k!=13||(dojo.isIE>=9&&!dojo.isQuirks))&&k!=32&&k!=27&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);if(_159||evt.ctrlKey){var c=_159?0:k;if(evt.ctrlKey){if(k==3||k==13){return;}else{if(c>95&&c<106){c-=48;}else{if((!evt.shiftKey)&&(c>=65&&c<=90)){c+=32;}else{c=del._punctMap[c]||c;}}}}var faux=del._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c});kp.call(evt.currentTarget,faux);if(dojo.isIE<9||(dojo.isIE&&dojo.isQuirks)){evt.cancelBubble=faux.cancelBubble;}evt.returnValue=faux.returnValue;_14a(evt,faux.keyCode);}},_stopPropagation:function(){this.cancelBubble=true;},_preventDefault:function(){this.bubbledKeyCode=this.keyCode;if(this.ctrlKey){_14a(this,0);}this.returnValue=false;}});dojo.stopEvent=(dojo.isIE<9||dojo.isQuirks)?function(evt){evt=evt||window.event;del._stopPropagation.call(evt);del._preventDefault.call(evt);}:dojo.stopEvent;}del._synthesizeEvent=function(evt,_15a){var faux=dojo.mixin({},evt,_15a);del._setKeyChar(faux);faux.preventDefault=function(){evt.preventDefault();};faux.stopPropagation=function(){evt.stopPropagation();};return faux;};if(dojo.isOpera){dojo.mixin(del,{_fixEvent:function(evt,_15b){switch(evt.type){case "keypress":var c=evt.which;if(c==3){c=99;}c=c<41&&!evt.shiftKey?0:c;if(evt.ctrlKey&&!evt.shiftKey&&c>=65&&c<=90){c+=32;}return del._synthesizeEvent(evt,{charCode:c});}return evt;}});}if(dojo.isWebKit){del._add=del.add;del._remove=del.remove;dojo.mixin(del,{add:function(node,_15c,fp){if(!node){return;}var _15d=del._add(node,_15c,fp);if(del._normalizeEventName(_15c)=="keypress"){_15d._stealthKeyDownHandle=del._add(node,"keydown",function(evt){var k=evt.keyCode;var _15e=k!=13&&k!=32&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);if(_15e||evt.ctrlKey){var c=_15e?0:k;if(evt.ctrlKey){if(k==3||k==13){return;}else{if(c>95&&c<106){c-=48;}else{if(!evt.shiftKey&&c>=65&&c<=90){c+=32;}else{c=del._punctMap[c]||c;}}}}var faux=del._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c});fp.call(evt.currentTarget,faux);}});}return _15d;},remove:function(node,_15f,_160){if(node){if(_160._stealthKeyDownHandle){del._remove(node,"keydown",_160._stealthKeyDownHandle);}del._remove(node,_15f,_160);}},_fixEvent:function(evt,_161){switch(evt.type){case "keypress":if(evt.faux){return evt;}var c=evt.charCode;c=c>=32?c:0;return del._synthesizeEvent(evt,{charCode:c,faux:true});}return evt;}});}})();if(dojo.isIE){dojo._ieDispatcher=function(args,_162){var ap=Array.prototype,h=dojo._ie_listener.handlers,c=args.callee,ls=c[dojo._ieListenersName],t=h[c.target];var r=t&&t.apply(_162,args);var lls=[].concat(ls);for(var i in lls){var f=h[lls[i]];if(!(i in ap)&&f){f.apply(_162,args);}}return r;};dojo._getIeDispatcher=function(){return new Function(dojo._scopeName+"._ieDispatcher(arguments, this)");};dojo._event_listener._fixCallback=function(fp){var f=dojo._event_listener._fixEvent;return function(e){return fp.call(this,f(e,this));};};}}if(!dojo._hasResource["dojo._base.html"]){dojo._hasResource["dojo._base.html"]=true;dojo.provide("dojo._base.html");try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}if(dojo.isIE){dojo.byId=function(id,doc){if(typeof id!="string"){return id;}var _163=doc||dojo.doc,te=_163.getElementById(id);if(te&&(te.attributes.id.value==id||te.id==id)){return te;}else{var eles=_163.all[id];if(!eles||eles.nodeName){eles=[eles];}var i=0;while((te=eles[i++])){if((te.attributes&&te.attributes.id&&te.attributes.id.value==id)||te.id==id){return te;}}}};}else{dojo.byId=function(id,doc){return ((typeof id=="string")?(doc||dojo.doc).getElementById(id):id)||null;};}(function(){var d=dojo;var byId=d.byId;var _164=null,_165;d.addOnWindowUnload(function(){_164=null;});dojo._destroyElement=dojo.destroy=function(node){node=byId(node);try{var doc=node.ownerDocument;if(!_164||_165!=doc){_164=doc.createElement("div");_165=doc;}_164.appendChild(node.parentNode?node.parentNode.removeChild(node):node);_164.innerHTML="";}catch(e){}};dojo.isDescendant=function(node,_166){try{node=byId(node);_166=byId(_166);while(node){if(node==_166){return true;}node=node.parentNode;}}catch(e){}return false;};dojo.setSelectable=function(node,_167){node=byId(node);if(d.isMozilla){node.style.MozUserSelect=_167?"":"none";}else{if(d.isKhtml||d.isWebKit){node.style.KhtmlUserSelect=_167?"auto":"none";}else{if(d.isIE){var v=(node.unselectable=_167?"":"on");d.query("*",node).forEach("item.unselectable = '"+v+"'");}}}};var _168=function(node,ref){var _169=ref.parentNode;if(_169){_169.insertBefore(node,ref);}};var _16a=function(node,ref){var _16b=ref.parentNode;if(_16b){if(_16b.lastChild==ref){_16b.appendChild(node);}else{_16b.insertBefore(node,ref.nextSibling);}}};dojo.place=function(node,_16c,_16d){_16c=byId(_16c);if(typeof node=="string"){node=/^\s*</.test(node)?d._toDom(node,_16c.ownerDocument):byId(node);}if(typeof _16d=="number"){var cn=_16c.childNodes;if(!cn.length||cn.length<=_16d){_16c.appendChild(node);}else{_168(node,cn[_16d<0?0:_16d]);}}else{switch(_16d){case "before":_168(node,_16c);break;case "after":_16a(node,_16c);break;case "replace":_16c.parentNode.replaceChild(node,_16c);break;case "only":d.empty(_16c);_16c.appendChild(node);break;case "first":if(_16c.firstChild){_168(node,_16c.firstChild);break;}default:_16c.appendChild(node);}}return node;};dojo.boxModel="content-box";if(d.isIE){d.boxModel=document.compatMode=="BackCompat"?"border-box":"content-box";}var gcs;if(d.isWebKit){gcs=function(node){var s;if(node.nodeType==1){var dv=node.ownerDocument.defaultView;s=dv.getComputedStyle(node,null);if(!s&&node.style){node.style.display="";s=dv.getComputedStyle(node,null);}}return s||{};};}else{if(d.isIE){gcs=function(node){return node.nodeType==1?node.currentStyle:{};};}else{gcs=function(node){return node.nodeType==1?node.ownerDocument.defaultView.getComputedStyle(node,null):{};};}}dojo.getComputedStyle=gcs;if(!d.isIE){d._toPixelValue=function(_16e,_16f){return parseFloat(_16f)||0;};}else{d._toPixelValue=function(_170,_171){if(!_171){return 0;}if(_171=="medium"){return 4;}if(_171.slice&&_171.slice(-2)=="px"){return parseFloat(_171);}with(_170){var _172=style.left;var _173=runtimeStyle.left;runtimeStyle.left=currentStyle.left;try{style.left=_171;_171=style.pixelLeft;}catch(e){_171=0;}style.left=_172;runtimeStyle.left=_173;}return _171;};}var px=d._toPixelValue;var astr="DXImageTransform.Microsoft.Alpha";var af=function(n,f){try{return n.filters.item(astr);}catch(e){return f?{}:null;}};dojo._getOpacity=d.isIE<9?function(node){try{return af(node).Opacity/100;}catch(e){return 1;}}:function(node){return gcs(node).opacity;};dojo._setOpacity=d.isIE<9?function(node,_174){var ov=_174*100,_175=_174==1;node.style.zoom=_175?"":1;if(!af(node)){if(_175){return _174;}node.style.filter+=" progid:"+astr+"(Opacity="+ov+")";}else{af(node,1).Opacity=ov;}af(node,1).Enabled=!_175;if(node.nodeName.toLowerCase()=="tr"){d.query("> td",node).forEach(function(i){d._setOpacity(i,_174);});}return _174;}:function(node,_176){return node.style.opacity=_176;};var _177={left:true,top:true};var _178=/margin|padding|width|height|max|min|offset/;var _179=function(node,type,_17a){type=type.toLowerCase();if(d.isIE){if(_17a=="auto"){if(type=="height"){return node.offsetHeight;}if(type=="width"){return node.offsetWidth;}}if(type=="fontweight"){switch(_17a){case 700:return "bold";case 400:default:return "normal";}}}if(!(type in _177)){_177[type]=_178.test(type);}return _177[type]?px(node,_17a):_17a;};var _17b=d.isIE?"styleFloat":"cssFloat",_17c={"cssFloat":_17b,"styleFloat":_17b,"float":_17b};dojo.style=function(node,_17d,_17e){var n=byId(node),args=arguments.length,op=(_17d=="opacity");_17d=_17c[_17d]||_17d;if(args==3){return op?d._setOpacity(n,_17e):n.style[_17d]=_17e;}if(args==2&&op){return d._getOpacity(n);}var s=gcs(n);if(args==2&&typeof _17d!="string"){for(var x in _17d){d.style(node,x,_17d[x]);}return s;}return (args==1)?s:_179(n,_17d,s[_17d]||n.style[_17d]);};dojo._getPadExtents=function(n,_17f){var s=_17f||gcs(n),l=px(n,s.paddingLeft),t=px(n,s.paddingTop);return {l:l,t:t,w:l+px(n,s.paddingRight),h:t+px(n,s.paddingBottom)};};dojo._getBorderExtents=function(n,_180){var ne="none",s=_180||gcs(n),bl=(s.borderLeftStyle!=ne?px(n,s.borderLeftWidth):0),bt=(s.borderTopStyle!=ne?px(n,s.borderTopWidth):0);return {l:bl,t:bt,w:bl+(s.borderRightStyle!=ne?px(n,s.borderRightWidth):0),h:bt+(s.borderBottomStyle!=ne?px(n,s.borderBottomWidth):0)};};dojo._getPadBorderExtents=function(n,_181){var s=_181||gcs(n),p=d._getPadExtents(n,s),b=d._getBorderExtents(n,s);return {l:p.l+b.l,t:p.t+b.t,w:p.w+b.w,h:p.h+b.h};};dojo._getMarginExtents=function(n,_182){var s=_182||gcs(n),l=px(n,s.marginLeft),t=px(n,s.marginTop),r=px(n,s.marginRight),b=px(n,s.marginBottom);if(d.isWebKit&&(s.position!="absolute")){r=l;}return {l:l,t:t,w:l+r,h:t+b};};dojo._getMarginBox=function(node,_183){var s=_183||gcs(node),me=d._getMarginExtents(node,s);var l=node.offsetLeft-me.l,t=node.offsetTop-me.t,p=node.parentNode;if(d.isMoz){var sl=parseFloat(s.left),st=parseFloat(s.top);if(!isNaN(sl)&&!isNaN(st)){l=sl,t=st;}else{if(p&&p.style){var pcs=gcs(p);if(pcs.overflow!="visible"){var be=d._getBorderExtents(p,pcs);l+=be.l,t+=be.t;}}}}else{if(d.isOpera||(d.isIE>7&&!d.isQuirks)){if(p){be=d._getBorderExtents(p);l-=be.l;t-=be.t;}}}return {l:l,t:t,w:node.offsetWidth+me.w,h:node.offsetHeight+me.h};};dojo._getMarginSize=function(node,_184){node=byId(node);var me=d._getMarginExtents(node,_184||gcs(node));var size=node.getBoundingClientRect();return {w:(size.right-size.left)+me.w,h:(size.bottom-size.top)+me.h};};dojo._getContentBox=function(node,_185){var s=_185||gcs(node),pe=d._getPadExtents(node,s),be=d._getBorderExtents(node,s),w=node.clientWidth,h;if(!w){w=node.offsetWidth,h=node.offsetHeight;}else{h=node.clientHeight,be.w=be.h=0;}if(d.isOpera){pe.l+=be.l;pe.t+=be.t;}return {l:pe.l,t:pe.t,w:w-pe.w-be.w,h:h-pe.h-be.h};};dojo._getBorderBox=function(node,_186){var s=_186||gcs(node),pe=d._getPadExtents(node,s),cb=d._getContentBox(node,s);return {l:cb.l-pe.l,t:cb.t-pe.t,w:cb.w+pe.w,h:cb.h+pe.h};};dojo._setBox=function(node,l,t,w,h,u){u=u||"px";var s=node.style;if(!isNaN(l)){s.left=l+u;}if(!isNaN(t)){s.top=t+u;}if(w>=0){s.width=w+u;}if(h>=0){s.height=h+u;}};dojo._isButtonTag=function(node){return node.tagName=="BUTTON"||node.tagName=="INPUT"&&(node.getAttribute("type")||"").toUpperCase()=="BUTTON";};dojo._usesBorderBox=function(node){var n=node.tagName;return d.boxModel=="border-box"||n=="TABLE"||d._isButtonTag(node);};dojo._setContentSize=function(node,_187,_188,_189){if(d._usesBorderBox(node)){var pb=d._getPadBorderExtents(node,_189);if(_187>=0){_187+=pb.w;}if(_188>=0){_188+=pb.h;}}d._setBox(node,NaN,NaN,_187,_188);};dojo._setMarginBox=function(node,_18a,_18b,_18c,_18d,_18e){var s=_18e||gcs(node),bb=d._usesBorderBox(node),pb=bb?_18f:d._getPadBorderExtents(node,s);if(d.isWebKit){if(d._isButtonTag(node)){var ns=node.style;if(_18c>=0&&!ns.width){ns.width="4px";}if(_18d>=0&&!ns.height){ns.height="4px";}}}var mb=d._getMarginExtents(node,s);if(_18c>=0){_18c=Math.max(_18c-pb.w-mb.w,0);}if(_18d>=0){_18d=Math.max(_18d-pb.h-mb.h,0);}d._setBox(node,_18a,_18b,_18c,_18d);};var _18f={l:0,t:0,w:0,h:0};dojo.marginBox=function(node,box){var n=byId(node),s=gcs(n),b=box;return !b?d._getMarginBox(n,s):d._setMarginBox(n,b.l,b.t,b.w,b.h,s);};dojo.contentBox=function(node,box){var n=byId(node),s=gcs(n),b=box;return !b?d._getContentBox(n,s):d._setContentSize(n,b.w,b.h,s);};var _190=function(node,prop){if(!(node=(node||0).parentNode)){return 0;}var val,_191=0,_192=d.body();while(node&&node.style){if(gcs(node).position=="fixed"){return 0;}val=node[prop];if(val){_191+=val-0;if(node==_192){break;}}node=node.parentNode;}return _191;};dojo._docScroll=function(){var n=d.global;return "pageXOffset" in n?{x:n.pageXOffset,y:n.pageYOffset}:(n=d.isQuirks?d.doc.body:d.doc.documentElement,{x:d._fixIeBiDiScrollLeft(n.scrollLeft||0),y:n.scrollTop||0});};dojo._isBodyLtr=function(){return "_bodyLtr" in d?d._bodyLtr:d._bodyLtr=(d.body().dir||d.doc.documentElement.dir||"ltr").toLowerCase()=="ltr";};dojo._getIeDocumentElementOffset=function(){var de=d.doc.documentElement;if(d.isIE<8){var r=de.getBoundingClientRect();var l=r.left,t=r.top;if(d.isIE<7){l+=de.clientLeft;t+=de.clientTop;}return {x:l<0?0:l,y:t<0?0:t};}else{return {x:0,y:0};}};dojo._fixIeBiDiScrollLeft=function(_193){var ie=d.isIE;if(ie&&!d._isBodyLtr()){var qk=d.isQuirks,de=qk?d.doc.body:d.doc.documentElement;if(ie==6&&!qk&&d.global.frameElement&&de.scrollHeight>de.clientHeight){_193+=de.clientLeft;}return (ie<8||qk)?(_193+de.clientWidth-de.scrollWidth):-_193;}return _193;};dojo._abs=dojo.position=function(node,_194){node=byId(node);var db=d.body(),dh=db.parentNode,ret=node.getBoundingClientRect();ret={x:ret.left,y:ret.top,w:ret.right-ret.left,h:ret.bottom-ret.top};if(d.isIE){var _195=d._getIeDocumentElementOffset();ret.x-=_195.x+(d.isQuirks?db.clientLeft+db.offsetLeft:0);ret.y-=_195.y+(d.isQuirks?db.clientTop+db.offsetTop:0);}else{if(d.isFF==3){var cs=gcs(dh);ret.x-=px(dh,cs.marginLeft)+px(dh,cs.borderLeftWidth);ret.y-=px(dh,cs.marginTop)+px(dh,cs.borderTopWidth);}}if(_194){var _196=d._docScroll();ret.x+=_196.x;ret.y+=_196.y;}return ret;};dojo.coords=function(node,_197){var n=byId(node),s=gcs(n),mb=d._getMarginBox(n,s);var abs=d.position(n,_197);mb.x=abs.x;mb.y=abs.y;return mb;};var _198={"class":"className","for":"htmlFor",tabindex:"tabIndex",readonly:"readOnly",colspan:"colSpan",frameborder:"frameBorder",rowspan:"rowSpan",valuetype:"valueType"},_199={classname:"class",htmlfor:"for",tabindex:"tabIndex",readonly:"readOnly"},_19a={innerHTML:1,className:1,htmlFor:d.isIE,value:1};var _19b=function(name){return _199[name.toLowerCase()]||name;};var _19c=function(node,name){var attr=node.getAttributeNode&&node.getAttributeNode(name);return attr&&attr.specified;};dojo.hasAttr=function(node,name){var lc=name.toLowerCase();return _19a[_198[lc]||name]||_19c(byId(node),_199[lc]||name);};var _19d={},_19e=0,_19f=dojo._scopeName+"attrid",_1a0={col:1,colgroup:1,table:1,tbody:1,tfoot:1,thead:1,tr:1,title:1};dojo.attr=function(node,name,_1a1){node=byId(node);var args=arguments.length,prop;if(args==2&&typeof name!="string"){for(var x in name){d.attr(node,x,name[x]);}return node;}var lc=name.toLowerCase(),_1a2=_198[lc]||name,_1a3=_19a[_1a2],_1a4=_199[lc]||name;if(args==3){do{if(_1a2=="style"&&typeof _1a1!="string"){d.style(node,_1a1);break;}if(_1a2=="innerHTML"){if(d.isIE&&node.tagName.toLowerCase() in _1a0){d.empty(node);node.appendChild(d._toDom(_1a1,node.ownerDocument));}else{node[_1a2]=_1a1;}break;}if(d.isFunction(_1a1)){var _1a5=d.attr(node,_19f);if(!_1a5){_1a5=_19e++;d.attr(node,_19f,_1a5);}if(!_19d[_1a5]){_19d[_1a5]={};}var h=_19d[_1a5][_1a2];if(h){d.disconnect(h);}else{try{delete node[_1a2];}catch(e){}}_19d[_1a5][_1a2]=d.connect(node,_1a2,_1a1);break;}if(_1a3||typeof _1a1=="boolean"){node[_1a2]=_1a1;break;}node.setAttribute(_1a4,_1a1);}while(false);return node;}_1a1=node[_1a2];if(_1a3&&typeof _1a1!="undefined"){return _1a1;}if(_1a2!="href"&&(typeof _1a1=="boolean"||d.isFunction(_1a1))){return _1a1;}return _19c(node,_1a4)?node.getAttribute(_1a4):null;};dojo.removeAttr=function(node,name){byId(node).removeAttribute(_19b(name));};dojo.getNodeProp=function(node,name){node=byId(node);var lc=name.toLowerCase(),_1a6=_198[lc]||name;if((_1a6 in node)&&_1a6!="href"){return node[_1a6];}var _1a7=_199[lc]||name;return _19c(node,_1a7)?node.getAttribute(_1a7):null;};dojo.create=function(tag,_1a8,_1a9,pos){var doc=d.doc;if(_1a9){_1a9=byId(_1a9);doc=_1a9.ownerDocument;}if(typeof tag=="string"){tag=doc.createElement(tag);}if(_1a8){d.attr(tag,_1a8);}if(_1a9){d.place(tag,_1a9,pos);}return tag;};d.empty=d.isIE?function(node){node=byId(node);for(var c;c=node.lastChild;){d.destroy(c);}}:function(node){byId(node).innerHTML="";};var _1aa={option:["select"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","thead","tr"],legend:["fieldset"],caption:["table"],colgroup:["table"],col:["table","colgroup"],li:["ul"]},_1ab=/<\s*([\w\:]+)/,_1ac={},_1ad=0,_1ae="__"+d._scopeName+"ToDomId";for(var _1af in _1aa){if(_1aa.hasOwnProperty(_1af)){var tw=_1aa[_1af];tw.pre=_1af=="option"?"<select multiple=\"multiple\">":"<"+tw.join("><")+">";tw.post="</"+tw.reverse().join("></")+">";}}d._toDom=function(frag,doc){doc=doc||d.doc;var _1b0=doc[_1ae];if(!_1b0){doc[_1ae]=_1b0=++_1ad+"";_1ac[_1b0]=doc.createElement("div");}frag+="";var _1b1=frag.match(_1ab),tag=_1b1?_1b1[1].toLowerCase():"",_1b2=_1ac[_1b0],wrap,i,fc,df;if(_1b1&&_1aa[tag]){wrap=_1aa[tag];_1b2.innerHTML=wrap.pre+frag+wrap.post;for(i=wrap.length;i;--i){_1b2=_1b2.firstChild;}}else{_1b2.innerHTML=frag;}if(_1b2.childNodes.length==1){return _1b2.removeChild(_1b2.firstChild);}df=doc.createDocumentFragment();while(fc=_1b2.firstChild){df.appendChild(fc);}return df;};var _1b3="className";dojo.hasClass=function(node,_1b4){return ((" "+byId(node)[_1b3]+" ").indexOf(" "+_1b4+" ")>=0);};var _1b5=/\s+/,a1=[""],_1b6={},_1b7=function(s){if(typeof s=="string"||s instanceof String){if(s.indexOf(" ")<0){a1[0]=s;return a1;}else{return s.split(_1b5);}}return s||"";};dojo.addClass=function(node,_1b8){node=byId(node);_1b8=_1b7(_1b8);var cls=node[_1b3],_1b9;cls=cls?" "+cls+" ":" ";_1b9=cls.length;for(var i=0,len=_1b8.length,c;i<len;++i){c=_1b8[i];if(c&&cls.indexOf(" "+c+" ")<0){cls+=c+" ";}}if(_1b9<cls.length){node[_1b3]=cls.substr(1,cls.length-2);}};dojo.removeClass=function(node,_1ba){node=byId(node);var cls;if(_1ba!==undefined){_1ba=_1b7(_1ba);cls=" "+node[_1b3]+" ";for(var i=0,len=_1ba.length;i<len;++i){cls=cls.replace(" "+_1ba[i]+" "," ");}cls=d.trim(cls);}else{cls="";}if(node[_1b3]!=cls){node[_1b3]=cls;}};dojo.replaceClass=function(node,_1bb,_1bc){node=byId(node);_1b6.className=node.className;dojo.removeClass(_1b6,_1bc);dojo.addClass(_1b6,_1bb);if(node.className!==_1b6.className){node.className=_1b6.className;}};dojo.toggleClass=function(node,_1bd,_1be){if(_1be===undefined){_1be=!d.hasClass(node,_1bd);}d[_1be?"addClass":"removeClass"](node,_1bd);};})();}if(!dojo._hasResource["dojo._base.NodeList"]){dojo._hasResource["dojo._base.NodeList"]=true;dojo.provide("dojo._base.NodeList");(function(){var d=dojo;var ap=Array.prototype,aps=ap.slice,apc=ap.concat;var tnl=function(a,_1bf,_1c0){if(!a.sort){a=aps.call(a,0);}var ctor=_1c0||this._NodeListCtor||d._NodeListCtor;a.constructor=ctor;dojo._mixin(a,ctor.prototype);a._NodeListCtor=ctor;return _1bf?a._stash(_1bf):a;};var _1c1=function(f,a,o){a=[0].concat(aps.call(a,0));o=o||d.global;return function(node){a[0]=node;return f.apply(o,a);};};var _1c2=function(f,o){return function(){this.forEach(_1c1(f,arguments,o));return this;};};var _1c3=function(f,o){return function(){return this.map(_1c1(f,arguments,o));};};var _1c4=function(f,o){return function(){return this.filter(_1c1(f,arguments,o));};};var _1c5=function(f,g,o){return function(){var a=arguments,body=_1c1(f,a,o);if(g.call(o||d.global,a)){return this.map(body);}this.forEach(body);return this;};};var _1c6=function(a){return a.length==1&&(typeof a[0]=="string");};var _1c7=function(node){var p=node.parentNode;if(p){p.removeChild(node);}};dojo.NodeList=function(){return tnl(Array.apply(null,arguments));};d._NodeListCtor=d.NodeList;var nl=d.NodeList,nlp=nl.prototype;nl._wrap=nlp._wrap=tnl;nl._adaptAsMap=_1c3;nl._adaptAsForEach=_1c2;nl._adaptAsFilter=_1c4;nl._adaptWithCondition=_1c5;d.forEach(["slice","splice"],function(name){var f=ap[name];nlp[name]=function(){return this._wrap(f.apply(this,arguments),name=="slice"?this:null);};});d.forEach(["indexOf","lastIndexOf","every","some"],function(name){var f=d[name];nlp[name]=function(){return f.apply(d,[this].concat(aps.call(arguments,0)));};});d.forEach(["attr","style"],function(name){nlp[name]=_1c5(d[name],_1c6);});d.forEach(["connect","addClass","removeClass","replaceClass","toggleClass","empty","removeAttr"],function(name){nlp[name]=_1c2(d[name]);});dojo.extend(dojo.NodeList,{_normalize:function(_1c8,_1c9){var _1ca=_1c8.parse===true?true:false;if(typeof _1c8.template=="string"){var _1cb=_1c8.templateFunc||(dojo.string&&dojo.string.substitute);_1c8=_1cb?_1cb(_1c8.template,_1c8):_1c8;}var type=(typeof _1c8);if(type=="string"||type=="number"){_1c8=dojo._toDom(_1c8,(_1c9&&_1c9.ownerDocument));if(_1c8.nodeType==11){_1c8=dojo._toArray(_1c8.childNodes);}else{_1c8=[_1c8];}}else{if(!dojo.isArrayLike(_1c8)){_1c8=[_1c8];}else{if(!dojo.isArray(_1c8)){_1c8=dojo._toArray(_1c8);}}}if(_1ca){_1c8._runParse=true;}return _1c8;},_cloneNode:function(node){return node.cloneNode(true);},_place:function(ary,_1cc,_1cd,_1ce){if(_1cc.nodeType!=1&&_1cd=="only"){return;}var _1cf=_1cc,_1d0;var _1d1=ary.length;for(var i=_1d1-1;i>=0;i--){var node=(_1ce?this._cloneNode(ary[i]):ary[i]);if(ary._runParse&&dojo.parser&&dojo.parser.parse){if(!_1d0){_1d0=_1cf.ownerDocument.createElement("div");}_1d0.appendChild(node);dojo.parser.parse(_1d0);node=_1d0.firstChild;while(_1d0.firstChild){_1d0.removeChild(_1d0.firstChild);}}if(i==_1d1-1){dojo.place(node,_1cf,_1cd);}else{_1cf.parentNode.insertBefore(node,_1cf);}_1cf=node;}},_stash:function(_1d2){this._parent=_1d2;return this;},end:function(){if(this._parent){return this._parent;}else{return new this._NodeListCtor();}},concat:function(item){var t=d.isArray(this)?this:aps.call(this,0),m=d.map(arguments,function(a){return a&&!d.isArray(a)&&(typeof NodeList!="undefined"&&a.constructor===NodeList||a.constructor===this._NodeListCtor)?aps.call(a,0):a;});return this._wrap(apc.apply(t,m),this);},map:function(func,obj){return this._wrap(d.map(this,func,obj),this);},forEach:function(_1d3,_1d4){d.forEach(this,_1d3,_1d4);return this;},coords:_1c3(d.coords),position:_1c3(d.position),place:function(_1d5,_1d6){var item=d.query(_1d5)[0];return this.forEach(function(node){d.place(node,item,_1d6);});},orphan:function(_1d7){return (_1d7?d._filterQueryResult(this,_1d7):this).forEach(_1c7);},adopt:function(_1d8,_1d9){return d.query(_1d8).place(this[0],_1d9)._stash(this);},query:function(_1da){if(!_1da){return this;}var ret=this.map(function(node){return d.query(_1da,node).filter(function(_1db){return _1db!==undefined;});});return this._wrap(apc.apply([],ret),this);},filter:function(_1dc){var a=arguments,_1dd=this,_1de=0;if(typeof _1dc=="string"){_1dd=d._filterQueryResult(this,a[0]);if(a.length==1){return _1dd._stash(this);}_1de=1;}return this._wrap(d.filter(_1dd,a[_1de],a[_1de+1]),this);},addContent:function(_1df,_1e0){_1df=this._normalize(_1df,this[0]);for(var i=0,node;(node=this[i]);i++){this._place(_1df,node,_1e0,i>0);}return this;},instantiate:function(_1e1,_1e2){var c=d.isFunction(_1e1)?_1e1:d.getObject(_1e1);_1e2=_1e2||{};return this.forEach(function(node){new c(_1e2,node);});},at:function(){var t=new this._NodeListCtor();d.forEach(arguments,function(i){if(i<0){i=this.length+i;}if(this[i]){t.push(this[i]);}},this);return t._stash(this);}});nl.events=["blur","focus","change","click","error","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","submit"];d.forEach(nl.events,function(evt){var _1e3="on"+evt;nlp[_1e3]=function(a,b){return this.connect(_1e3,a,b);};});})();}if(!dojo._hasResource["dojo._base.query"]){dojo._hasResource["dojo._base.query"]=true;(function(){var _1e4=function(d){var trim=d.trim;var each=d.forEach;var qlc=(d._NodeListCtor=d.NodeList);var _1e5=function(){return d.doc;};var _1e6=((d.isWebKit||d.isMozilla)&&((_1e5().compatMode)=="BackCompat"));var _1e7=!!_1e5().firstChild["children"]?"children":"childNodes";var _1e8=">~+";var _1e9=false;var _1ea=function(){return true;};var _1eb=function(_1ec){if(_1e8.indexOf(_1ec.slice(-1))>=0){_1ec+=" * ";}else{_1ec+=" ";}var ts=function(s,e){return trim(_1ec.slice(s,e));};var _1ed=[];var _1ee=-1,_1ef=-1,_1f0=-1,_1f1=-1,_1f2=-1,inId=-1,_1f3=-1,lc="",cc="",_1f4;var x=0,ql=_1ec.length,_1f5=null,_1f6=null;var _1f7=function(){if(_1f3>=0){var tv=(_1f3==x)?null:ts(_1f3,x);_1f5[(_1e8.indexOf(tv)<0)?"tag":"oper"]=tv;_1f3=-1;}};var _1f8=function(){if(inId>=0){_1f5.id=ts(inId,x).replace(/\\/g,"");inId=-1;}};var _1f9=function(){if(_1f2>=0){_1f5.classes.push(ts(_1f2+1,x).replace(/\\/g,""));_1f2=-1;}};var _1fa=function(){_1f8();_1f7();_1f9();};var _1fb=function(){_1fa();if(_1f1>=0){_1f5.pseudos.push({name:ts(_1f1+1,x)});}_1f5.loops=(_1f5.pseudos.length||_1f5.attrs.length||_1f5.classes.length);_1f5.oquery=_1f5.query=ts(_1f4,x);_1f5.otag=_1f5.tag=(_1f5["oper"])?null:(_1f5.tag||"*");if(_1f5.tag){_1f5.tag=_1f5.tag.toUpperCase();}if(_1ed.length&&(_1ed[_1ed.length-1].oper)){_1f5.infixOper=_1ed.pop();_1f5.query=_1f5.infixOper.query+" "+_1f5.query;}_1ed.push(_1f5);_1f5=null;};for(;lc=cc,cc=_1ec.charAt(x),x<ql;x++){if(lc=="\\"){continue;}if(!_1f5){_1f4=x;_1f5={query:null,pseudos:[],attrs:[],classes:[],tag:null,oper:null,id:null,getTag:function(){return (_1e9)?this.otag:this.tag;}};_1f3=x;}if(_1ee>=0){if(cc=="]"){if(!_1f6.attr){_1f6.attr=ts(_1ee+1,x);}else{_1f6.matchFor=ts((_1f0||_1ee+1),x);}var cmf=_1f6.matchFor;if(cmf){if((cmf.charAt(0)=="\"")||(cmf.charAt(0)=="'")){_1f6.matchFor=cmf.slice(1,-1);}}_1f5.attrs.push(_1f6);_1f6=null;_1ee=_1f0=-1;}else{if(cc=="="){var _1fc=("|~^$*".indexOf(lc)>=0)?lc:"";_1f6.type=_1fc+cc;_1f6.attr=ts(_1ee+1,x-_1fc.length);_1f0=x+1;}}}else{if(_1ef>=0){if(cc==")"){if(_1f1>=0){_1f6.value=ts(_1ef+1,x);}_1f1=_1ef=-1;}}else{if(cc=="#"){_1fa();inId=x+1;}else{if(cc=="."){_1fa();_1f2=x;}else{if(cc==":"){_1fa();_1f1=x;}else{if(cc=="["){_1fa();_1ee=x;_1f6={};}else{if(cc=="("){if(_1f1>=0){_1f6={name:ts(_1f1+1,x),value:null};_1f5.pseudos.push(_1f6);}_1ef=x;}else{if((cc==" ")&&(lc!=cc)){_1fb();}}}}}}}}}return _1ed;};var _1fd=function(_1fe,_1ff){if(!_1fe){return _1ff;}if(!_1ff){return _1fe;}return function(){return _1fe.apply(window,arguments)&&_1ff.apply(window,arguments);};};var _200=function(i,arr){var r=arr||[];if(i){r.push(i);}return r;};var _201=function(n){return (1==n.nodeType);};var _202="";var _203=function(elem,attr){if(!elem){return _202;}if(attr=="class"){return elem.className||_202;}if(attr=="for"){return elem.htmlFor||_202;}if(attr=="style"){return elem.style.cssText||_202;}return (_1e9?elem.getAttribute(attr):elem.getAttribute(attr,2))||_202;};var _204={"*=":function(attr,_205){return function(elem){return (_203(elem,attr).indexOf(_205)>=0);};},"^=":function(attr,_206){return function(elem){return (_203(elem,attr).indexOf(_206)==0);};},"$=":function(attr,_207){var tval=" "+_207;return function(elem){var ea=" "+_203(elem,attr);return (ea.lastIndexOf(_207)==(ea.length-_207.length));};},"~=":function(attr,_208){var tval=" "+_208+" ";return function(elem){var ea=" "+_203(elem,attr)+" ";return (ea.indexOf(tval)>=0);};},"|=":function(attr,_209){var _20a=" "+_209+"-";return function(elem){var ea=" "+_203(elem,attr);return ((ea==_209)||(ea.indexOf(_20a)==0));};},"=":function(attr,_20b){return function(elem){return (_203(elem,attr)==_20b);};}};var _20c=(typeof _1e5().firstChild.nextElementSibling=="undefined");var _20d=!_20c?"nextElementSibling":"nextSibling";var _20e=!_20c?"previousElementSibling":"previousSibling";var _20f=(_20c?_201:_1ea);var _210=function(node){while(node=node[_20e]){if(_20f(node)){return false;}}return true;};var _211=function(node){while(node=node[_20d]){if(_20f(node)){return false;}}return true;};var _212=function(node){var root=node.parentNode;var i=0,tret=root[_1e7],ci=(node["_i"]||-1),cl=(root["_l"]||-1);if(!tret){return -1;}var l=tret.length;if(cl==l&&ci>=0&&cl>=0){return ci;}root["_l"]=l;ci=-1;for(var te=root["firstElementChild"]||root["firstChild"];te;te=te[_20d]){if(_20f(te)){te["_i"]=++i;if(node===te){ci=i;}}}return ci;};var _213=function(elem){return !((_212(elem))%2);};var _214=function(elem){return ((_212(elem))%2);};var _215={"checked":function(name,_216){return function(elem){return !!("checked" in elem?elem.checked:elem.selected);};},"first-child":function(){return _210;},"last-child":function(){return _211;},"only-child":function(name,_217){return function(node){if(!_210(node)){return false;}if(!_211(node)){return false;}return true;};},"empty":function(name,_218){return function(elem){var cn=elem.childNodes;var cnl=elem.childNodes.length;for(var x=cnl-1;x>=0;x--){var nt=cn[x].nodeType;if((nt===1)||(nt==3)){return false;}}return true;};},"contains":function(name,_219){var cz=_219.charAt(0);if(cz=="\""||cz=="'"){_219=_219.slice(1,-1);}return function(elem){return (elem.innerHTML.indexOf(_219)>=0);};},"not":function(name,_21a){var p=_1eb(_21a)[0];var _21b={el:1};if(p.tag!="*"){_21b.tag=1;}if(!p.classes.length){_21b.classes=1;}var ntf=_21c(p,_21b);return function(elem){return (!ntf(elem));};},"nth-child":function(name,_21d){var pi=parseInt;if(_21d=="odd"){return _214;}else{if(_21d=="even"){return _213;}}if(_21d.indexOf("n")!=-1){var _21e=_21d.split("n",2);var pred=_21e[0]?((_21e[0]=="-")?-1:pi(_21e[0])):1;var idx=_21e[1]?pi(_21e[1]):0;var lb=0,ub=-1;if(pred>0){if(idx<0){idx=(idx%pred)&&(pred+(idx%pred));}else{if(idx>0){if(idx>=pred){lb=idx-idx%pred;}idx=idx%pred;}}}else{if(pred<0){pred*=-1;if(idx>0){ub=idx;idx=idx%pred;}}}if(pred>0){return function(elem){var i=_212(elem);return (i>=lb)&&(ub<0||i<=ub)&&((i%pred)==idx);};}else{_21d=idx;}}var _21f=pi(_21d);return function(elem){return (_212(elem)==_21f);};}};var _220=(d.isIE<9||(dojo.isIE&&dojo.isQuirks))?function(cond){var clc=cond.toLowerCase();if(clc=="class"){cond="className";}return function(elem){return (_1e9?elem.getAttribute(cond):elem[cond]||elem[clc]);};}:function(cond){return function(elem){return (elem&&elem.getAttribute&&elem.hasAttribute(cond));};};var _21c=function(_221,_222){if(!_221){return _1ea;}_222=_222||{};var ff=null;if(!("el" in _222)){ff=_1fd(ff,_201);}if(!("tag" in _222)){if(_221.tag!="*"){ff=_1fd(ff,function(elem){return (elem&&(elem.tagName==_221.getTag()));});}}if(!("classes" in _222)){each(_221.classes,function(_223,idx,arr){var re=new RegExp("(?:^|\\s)"+_223+"(?:\\s|$)");ff=_1fd(ff,function(elem){return re.test(elem.className);});ff.count=idx;});}if(!("pseudos" in _222)){each(_221.pseudos,function(_224){var pn=_224.name;if(_215[pn]){ff=_1fd(ff,_215[pn](pn,_224.value));}});}if(!("attrs" in _222)){each(_221.attrs,function(attr){var _225;var a=attr.attr;if(attr.type&&_204[attr.type]){_225=_204[attr.type](a,attr.matchFor);}else{if(a.length){_225=_220(a);}}if(_225){ff=_1fd(ff,_225);}});}if(!("id" in _222)){if(_221.id){ff=_1fd(ff,function(elem){return (!!elem&&(elem.id==_221.id));});}}if(!ff){if(!("default" in _222)){ff=_1ea;}}return ff;};var _226=function(_227){return function(node,ret,bag){while(node=node[_20d]){if(_20c&&(!_201(node))){continue;}if((!bag||_228(node,bag))&&_227(node)){ret.push(node);}break;}return ret;};};var _229=function(_22a){return function(root,ret,bag){var te=root[_20d];while(te){if(_20f(te)){if(bag&&!_228(te,bag)){break;}if(_22a(te)){ret.push(te);}}te=te[_20d];}return ret;};};var _22b=function(_22c){_22c=_22c||_1ea;return function(root,ret,bag){var te,x=0,tret=root[_1e7];while(te=tret[x++]){if(_20f(te)&&(!bag||_228(te,bag))&&(_22c(te,x))){ret.push(te);}}return ret;};};var _22d=function(node,root){var pn=node.parentNode;while(pn){if(pn==root){break;}pn=pn.parentNode;}return !!pn;};var _22e={};var _22f=function(_230){var _231=_22e[_230.query];if(_231){return _231;}var io=_230.infixOper;var oper=(io?io.oper:"");var _232=_21c(_230,{el:1});var qt=_230.tag;var _233=("*"==qt);var ecs=_1e5()["getElementsByClassName"];if(!oper){if(_230.id){_232=(!_230.loops&&_233)?_1ea:_21c(_230,{el:1,id:1});_231=function(root,arr){var te=d.byId(_230.id,(root.ownerDocument||root));if(!te||!_232(te)){return;}if(9==root.nodeType){return _200(te,arr);}else{if(_22d(te,root)){return _200(te,arr);}}};}else{if(ecs&&/\{\s*\[native code\]\s*\}/.test(String(ecs))&&_230.classes.length&&!_1e6){_232=_21c(_230,{el:1,classes:1,id:1});var _234=_230.classes.join(" ");_231=function(root,arr,bag){var ret=_200(0,arr),te,x=0;var tret=root.getElementsByClassName(_234);while((te=tret[x++])){if(_232(te,root)&&_228(te,bag)){ret.push(te);}}return ret;};}else{if(!_233&&!_230.loops){_231=function(root,arr,bag){var ret=_200(0,arr),te,x=0;var tret=root.getElementsByTagName(_230.getTag());while((te=tret[x++])){if(_228(te,bag)){ret.push(te);}}return ret;};}else{_232=_21c(_230,{el:1,tag:1,id:1});_231=function(root,arr,bag){var ret=_200(0,arr),te,x=0;var tret=root.getElementsByTagName(_230.getTag());while((te=tret[x++])){if(_232(te,root)&&_228(te,bag)){ret.push(te);}}return ret;};}}}}else{var _235={el:1};if(_233){_235.tag=1;}_232=_21c(_230,_235);if("+"==oper){_231=_226(_232);}else{if("~"==oper){_231=_229(_232);}else{if(">"==oper){_231=_22b(_232);}}}}return _22e[_230.query]=_231;};var _236=function(root,_237){var _238=_200(root),qp,x,te,qpl=_237.length,bag,ret;for(var i=0;i<qpl;i++){ret=[];qp=_237[i];x=_238.length-1;if(x>0){bag={};ret.nozip=true;}var gef=_22f(qp);for(var j=0;(te=_238[j]);j++){gef(te,ret,bag);}if(!ret.length){break;}_238=ret;}return ret;};var _239={},_23a={};var _23b=function(_23c){var _23d=_1eb(trim(_23c));if(_23d.length==1){var tef=_22f(_23d[0]);return function(root){var r=tef(root,new qlc());if(r){r.nozip=true;}return r;};}return function(root){return _236(root,_23d);};};var nua=navigator.userAgent;var wk="WebKit/";var _23e=(d.isWebKit&&(nua.indexOf(wk)>0)&&(parseFloat(nua.split(wk)[1])>528));var _23f=d.isIE?"commentStrip":"nozip";var qsa="querySelectorAll";var _240=(!!_1e5()[qsa]&&(!d.isSafari||(d.isSafari>3.1)||_23e));var _241=/n\+\d|([^ ])?([>~+])([^ =])?/g;var _242=function(_243,pre,ch,post){return ch?(pre?pre+" ":"")+ch+(post?" "+post:""):_243;};var _244=function(_245,_246){_245=_245.replace(_241,_242);if(_240){var _247=_23a[_245];if(_247&&!_246){return _247;}}var _248=_239[_245];if(_248){return _248;}var qcz=_245.charAt(0);var _249=(-1==_245.indexOf(" "));if((_245.indexOf("#")>=0)&&(_249)){_246=true;}var _24a=(_240&&(!_246)&&(_1e8.indexOf(qcz)==-1)&&(!d.isIE||(_245.indexOf(":")==-1))&&(!(_1e6&&(_245.indexOf(".")>=0)))&&(_245.indexOf(":contains")==-1)&&(_245.indexOf(":checked")==-1)&&(_245.indexOf("|=")==-1));if(_24a){var tq=(_1e8.indexOf(_245.charAt(_245.length-1))>=0)?(_245+" *"):_245;return _23a[_245]=function(root){try{if(!((9==root.nodeType)||_249)){throw "";}var r=root[qsa](tq);r[_23f]=true;return r;}catch(e){return _244(_245,true)(root);}};}else{var _24b=_245.split(/\s*,\s*/);return _239[_245]=((_24b.length<2)?_23b(_245):function(root){var _24c=0,ret=[],tp;while((tp=_24b[_24c++])){ret=ret.concat(_23b(tp)(root));}return ret;});}};var _24d=0;var _24e=d.isIE?function(node){if(_1e9){return (node.getAttribute("_uid")||node.setAttribute("_uid",++_24d)||_24d);}else{return node.uniqueID;}}:function(node){return (node._uid||(node._uid=++_24d));};var _228=function(node,bag){if(!bag){return 1;}var id=_24e(node);if(!bag[id]){return bag[id]=1;}return 0;};var _24f="_zipIdx";var _250=function(arr){if(arr&&arr.nozip){return (qlc._wrap)?qlc._wrap(arr):arr;}var ret=new qlc();if(!arr||!arr.length){return ret;}if(arr[0]){ret.push(arr[0]);}if(arr.length<2){return ret;}_24d++;if(d.isIE&&_1e9){var _251=_24d+"";arr[0].setAttribute(_24f,_251);for(var x=1,te;te=arr[x];x++){if(arr[x].getAttribute(_24f)!=_251){ret.push(te);}te.setAttribute(_24f,_251);}}else{if(d.isIE&&arr.commentStrip){try{for(var x=1,te;te=arr[x];x++){if(_201(te)){ret.push(te);}}}catch(e){}}else{if(arr[0]){arr[0][_24f]=_24d;}for(var x=1,te;te=arr[x];x++){if(arr[x][_24f]!=_24d){ret.push(te);}te[_24f]=_24d;}}}return ret;};d.query=function(_252,root){qlc=d._NodeListCtor;if(!_252){return new qlc();}if(_252.constructor==qlc){return _252;}if(typeof _252!="string"){return new qlc(_252);}if(typeof root=="string"){root=d.byId(root);if(!root){return new qlc();}}root=root||_1e5();var od=root.ownerDocument||root.documentElement;_1e9=(root.contentType&&root.contentType=="application/xml")||(d.isOpera&&(root.doctype||od.toString()=="[object XMLDocument]"))||(!!od)&&(d.isIE?od.xml:(root.xmlVersion||od.xmlVersion));var r=_244(_252)(root);if(r&&r.nozip&&!qlc._wrap){return r;}return _250(r);};d.query.pseudos=_215;d._filterQueryResult=function(_253,_254,root){var _255=new d._NodeListCtor(),_256=_1eb(_254),_257=(_256.length==1&&!/[^\w#\.]/.test(_254))?_21c(_256[0]):function(node){return dojo.query(_254,root).indexOf(node)!=-1;};for(var x=0,te;te=_253[x];x++){if(_257(te)){_255.push(te);}}return _255;};};var _258=function(){acme={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;},forEach:function(arr,_259,_25a){if(!arr||!arr.length){return;}for(var i=0,l=arr.length;i<l;++i){_259.call(_25a||window,arr[i],i,arr);}},byId:function(id,doc){if(typeof id=="string"){return (doc||document).getElementById(id);}else{return id;}},doc:document,NodeList:Array};var n=navigator;var dua=n.userAgent;var dav=n.appVersion;var tv=parseFloat(dav);acme.isOpera=(dua.indexOf("Opera")>=0)?tv:undefined;acme.isKhtml=(dav.indexOf("Konqueror")>=0)?tv:undefined;acme.isWebKit=parseFloat(dua.split("WebKit/")[1])||undefined;acme.isChrome=parseFloat(dua.split("Chrome/")[1])||undefined;var _25b=Math.max(dav.indexOf("WebKit"),dav.indexOf("Safari"),0);if(_25b&&!acme.isChrome){acme.isSafari=parseFloat(dav.split("Version/")[1]);if(!acme.isSafari||parseFloat(dav.substr(_25b+7))<=419.3){acme.isSafari=2;}}if(document.all&&!acme.isOpera){acme.isIE=parseFloat(dav.split("MSIE ")[1])||undefined;}Array._wrap=function(arr){return arr;};return acme;};if(this["dojo"]){dojo.provide("dojo._base.query");_1e4(this["queryPortability"]||this["acme"]||dojo);}else{_1e4(this["queryPortability"]||this["acme"]||_258());}})();}if(!dojo._hasResource["dojo._base.xhr"]){dojo._hasResource["dojo._base.xhr"]=true;dojo.provide("dojo._base.xhr");(function(){var _25c=dojo,cfg=_25c.config;function _25d(obj,name,_25e){if(_25e===null){return;}var val=obj[name];if(typeof val=="string"){obj[name]=[val,_25e];}else{if(_25c.isArray(val)){val.push(_25e);}else{obj[name]=_25e;}}};dojo.fieldToObject=function(_25f){var ret=null;var item=_25c.byId(_25f);if(item){var _260=item.name;var type=(item.type||"").toLowerCase();if(_260&&type&&!item.disabled){if(type=="radio"||type=="checkbox"){if(item.checked){ret=item.value;}}else{if(item.multiple){ret=[];_25c.query("option",item).forEach(function(opt){if(opt.selected){ret.push(opt.value);}});}else{ret=item.value;}}}}return ret;};dojo.formToObject=function(_261){var ret={};var _262="file|submit|image|reset|button|";_25c.forEach(dojo.byId(_261).elements,function(item){var _263=item.name;var type=(item.type||"").toLowerCase();if(_263&&type&&_262.indexOf(type)==-1&&!item.disabled){_25d(ret,_263,_25c.fieldToObject(item));if(type=="image"){ret[_263+".x"]=ret[_263+".y"]=ret[_263].x=ret[_263].y=0;}}});return ret;};dojo.objectToQuery=function(map){var enc=encodeURIComponent;var _264=[];var _265={};for(var name in map){var _266=map[name];if(_266!=_265[name]){var _267=enc(name)+"=";if(_25c.isArray(_266)){for(var i=0;i<_266.length;i++){_264.push(_267+enc(_266[i]));}}else{_264.push(_267+enc(_266));}}}return _264.join("&");};dojo.formToQuery=function(_268){return _25c.objectToQuery(_25c.formToObject(_268));};dojo.formToJson=function(_269,_26a){return _25c.toJson(_25c.formToObject(_269),_26a);};dojo.queryToObject=function(str){var ret={};var qp=str.split("&");var dec=decodeURIComponent;_25c.forEach(qp,function(item){if(item.length){var _26b=item.split("=");var name=dec(_26b.shift());var val=dec(_26b.join("="));if(typeof ret[name]=="string"){ret[name]=[ret[name]];}if(_25c.isArray(ret[name])){ret[name].push(val);}else{ret[name]=val;}}});return ret;};dojo._blockAsync=false;var _26c=_25c._contentHandlers=dojo.contentHandlers={text:function(xhr){return xhr.responseText;},json:function(xhr){return _25c.fromJson(xhr.responseText||null);},"json-comment-filtered":function(xhr){if(!dojo.config.useCommentedJson){console.warn("Consider using the standard mimetype:application/json."+" json-commenting can introduce security issues. To"+" decrease the chances of hijacking, use the standard the 'json' handler and"+" prefix your json with: {}&&\n"+"Use djConfig.useCommentedJson=true to turn off this message.");}var _26d=xhr.responseText;var _26e=_26d.indexOf("/*");var _26f=_26d.lastIndexOf("*/");if(_26e==-1||_26f==-1){throw new Error("JSON was not comment filtered");}return _25c.fromJson(_26d.substring(_26e+2,_26f));},javascript:function(xhr){return _25c.eval(xhr.responseText);},xml:function(xhr){var _270=xhr.responseXML;if(_25c.isIE&&(!_270||!_270.documentElement)){var ms=function(n){return "MSXML"+n+".DOMDocument";};var dp=["Microsoft.XMLDOM",ms(6),ms(4),ms(3),ms(2)];_25c.some(dp,function(p){try{var dom=new ActiveXObject(p);dom.async=false;dom.loadXML(xhr.responseText);_270=dom;}catch(e){return false;}return true;});}return _270;},"json-comment-optional":function(xhr){if(xhr.responseText&&/^[^{\[]*\/\*/.test(xhr.responseText)){return _26c["json-comment-filtered"](xhr);}else{return _26c["json"](xhr);}}};dojo._ioSetArgs=function(args,_271,_272,_273){var _274={args:args,url:args.url};var _275=null;if(args.form){var form=_25c.byId(args.form);var _276=form.getAttributeNode("action");_274.url=_274.url||(_276?_276.value:null);_275=_25c.formToObject(form);}var _277=[{}];if(_275){_277.push(_275);}if(args.content){_277.push(args.content);}if(args.preventCache){_277.push({"dojo.preventCache":new Date().valueOf()});}_274.query=_25c.objectToQuery(_25c.mixin.apply(null,_277));_274.handleAs=args.handleAs||"text";var d=new _25c.Deferred(_271);d.addCallbacks(_272,function(_278){return _273(_278,d);});var ld=args.load;if(ld&&_25c.isFunction(ld)){d.addCallback(function(_279){return ld.call(args,_279,_274);});}var err=args.error;if(err&&_25c.isFunction(err)){d.addErrback(function(_27a){return err.call(args,_27a,_274);});}var _27b=args.handle;if(_27b&&_25c.isFunction(_27b)){d.addBoth(function(_27c){return _27b.call(args,_27c,_274);});}if(cfg.ioPublish&&_25c.publish&&_274.args.ioPublish!==false){d.addCallbacks(function(res){_25c.publish("/dojo/io/load",[d,res]);return res;},function(res){_25c.publish("/dojo/io/error",[d,res]);return res;});d.addBoth(function(res){_25c.publish("/dojo/io/done",[d,res]);return res;});}d.ioArgs=_274;return d;};var _27d=function(dfd){dfd.canceled=true;var xhr=dfd.ioArgs.xhr;var _27e=typeof xhr.abort;if(_27e=="function"||_27e=="object"||_27e=="unknown"){xhr.abort();}var err=dfd.ioArgs.error;if(!err){err=new Error("xhr cancelled");err.dojoType="cancel";}return err;};var _27f=function(dfd){var ret=_26c[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);return ret===undefined?null:ret;};var _280=function(_281,dfd){if(!dfd.ioArgs.args.failOk){console.error(_281);}return _281;};var _282=null;var _283=[];var _284=0;var _285=function(dfd){if(_284<=0){_284=0;if(cfg.ioPublish&&_25c.publish&&(!dfd||dfd&&dfd.ioArgs.args.ioPublish!==false)){_25c.publish("/dojo/io/stop");}}};var _286=function(){var now=(new Date()).getTime();if(!_25c._blockAsync){for(var i=0,tif;i<_283.length&&(tif=_283[i]);i++){var dfd=tif.dfd;var func=function(){if(!dfd||dfd.canceled||!tif.validCheck(dfd)){_283.splice(i--,1);_284-=1;}else{if(tif.ioCheck(dfd)){_283.splice(i--,1);tif.resHandle(dfd);_284-=1;}else{if(dfd.startTime){if(dfd.startTime+(dfd.ioArgs.args.timeout||0)<now){_283.splice(i--,1);var err=new Error("timeout exceeded");err.dojoType="timeout";dfd.errback(err);dfd.cancel();_284-=1;}}}}};if(dojo.config.debugAtAllCosts){func.call(this);}else{try{func.call(this);}catch(e){dfd.errback(e);}}}}_285(dfd);if(!_283.length){clearInterval(_282);_282=null;return;}};dojo._ioCancelAll=function(){try{_25c.forEach(_283,function(i){try{i.dfd.cancel();}catch(e){}});}catch(e){}};if(_25c.isIE){_25c.addOnWindowUnload(_25c._ioCancelAll);}_25c._ioNotifyStart=function(dfd){if(cfg.ioPublish&&_25c.publish&&dfd.ioArgs.args.ioPublish!==false){if(!_284){_25c.publish("/dojo/io/start");}_284+=1;_25c.publish("/dojo/io/send",[dfd]);}};_25c._ioWatch=function(dfd,_287,_288,_289){var args=dfd.ioArgs.args;if(args.timeout){dfd.startTime=(new Date()).getTime();}_283.push({dfd:dfd,validCheck:_287,ioCheck:_288,resHandle:_289});if(!_282){_282=setInterval(_286,50);}if(args.sync){_286();}};var _28a="application/x-www-form-urlencoded";var _28b=function(dfd){return dfd.ioArgs.xhr.readyState;};var _28c=function(dfd){return 4==dfd.ioArgs.xhr.readyState;};var _28d=function(dfd){var xhr=dfd.ioArgs.xhr;if(_25c._isDocumentOk(xhr)){dfd.callback(dfd);}else{var err=new Error("Unable to load "+dfd.ioArgs.url+" status:"+xhr.status);err.status=xhr.status;err.responseText=xhr.responseText;dfd.errback(err);}};dojo._ioAddQueryToUrl=function(_28e){if(_28e.query.length){_28e.url+=(_28e.url.indexOf("?")==-1?"?":"&")+_28e.query;_28e.query=null;}};dojo.xhr=function(_28f,args,_290){var dfd=_25c._ioSetArgs(args,_27d,_27f,_280);var _291=dfd.ioArgs;var xhr=_291.xhr=_25c._xhrObj(_291.args);if(!xhr){dfd.cancel();return dfd;}if("postData" in args){_291.query=args.postData;}else{if("putData" in args){_291.query=args.putData;}else{if("rawBody" in args){_291.query=args.rawBody;}else{if((arguments.length>2&&!_290)||"POST|PUT".indexOf(_28f.toUpperCase())==-1){_25c._ioAddQueryToUrl(_291);}}}}xhr.open(_28f,_291.url,args.sync!==true,args.user||undefined,args.password||undefined);if(args.headers){for(var hdr in args.headers){if(hdr.toLowerCase()==="content-type"&&!args.contentType){args.contentType=args.headers[hdr];}else{if(args.headers[hdr]){xhr.setRequestHeader(hdr,args.headers[hdr]);}}}}xhr.setRequestHeader("Content-Type",args.contentType||_28a);if(!args.headers||!("X-Requested-With" in args.headers)){xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");}_25c._ioNotifyStart(dfd);if(dojo.config.debugAtAllCosts){xhr.send(_291.query);}else{try{xhr.send(_291.query);}catch(e){_291.error=e;dfd.cancel();}}_25c._ioWatch(dfd,_28b,_28c,_28d);xhr=null;return dfd;};dojo.xhrGet=function(args){return _25c.xhr("GET",args);};dojo.rawXhrPost=dojo.xhrPost=function(args){return _25c.xhr("POST",args,true);};dojo.rawXhrPut=dojo.xhrPut=function(args){return _25c.xhr("PUT",args,true);};dojo.xhrDelete=function(args){return _25c.xhr("DELETE",args);};})();}if(!dojo._hasResource["dojo._base.fx"]){dojo._hasResource["dojo._base.fx"]=true;dojo.provide("dojo._base.fx");(function(){var d=dojo;var _292=d._mixin;dojo._Line=function(_293,end){this.start=_293;this.end=end;};dojo._Line.prototype.getValue=function(n){return ((this.end-this.start)*n)+this.start;};dojo.Animation=function(args){_292(this,args);if(d.isArray(this.curve)){this.curve=new d._Line(this.curve[0],this.curve[1]);}};d._Animation=d.Animation;d.extend(dojo.Animation,{duration:350,repeat:0,rate:20,_percent:0,_startRepeatCount:0,_getStep:function(){var _294=this._percent,_295=this.easing;return _295?_295(_294):_294;},_fire:function(evt,args){var a=args||[];if(this[evt]){if(d.config.debugAtAllCosts){this[evt].apply(this,a);}else{try{this[evt].apply(this,a);}catch(e){console.error("exception in animation handler for:",evt);console.error(e);}}}return this;},play:function(_296,_297){var _298=this;if(_298._delayTimer){_298._clearTimer();}if(_297){_298._stopTimer();_298._active=_298._paused=false;_298._percent=0;}else{if(_298._active&&!_298._paused){return _298;}}_298._fire("beforeBegin",[_298.node]);var de=_296||_298.delay,_299=dojo.hitch(_298,"_play",_297);if(de>0){_298._delayTimer=setTimeout(_299,de);return _298;}_299();return _298;},_play:function(_29a){var _29b=this;if(_29b._delayTimer){_29b._clearTimer();}_29b._startTime=new Date().valueOf();if(_29b._paused){_29b._startTime-=_29b.duration*_29b._percent;}_29b._active=true;_29b._paused=false;var _29c=_29b.curve.getValue(_29b._getStep());if(!_29b._percent){if(!_29b._startRepeatCount){_29b._startRepeatCount=_29b.repeat;}_29b._fire("onBegin",[_29c]);}_29b._fire("onPlay",[_29c]);_29b._cycle();return _29b;},pause:function(){var _29d=this;if(_29d._delayTimer){_29d._clearTimer();}_29d._stopTimer();if(!_29d._active){return _29d;}_29d._paused=true;_29d._fire("onPause",[_29d.curve.getValue(_29d._getStep())]);return _29d;},gotoPercent:function(_29e,_29f){var _2a0=this;_2a0._stopTimer();_2a0._active=_2a0._paused=true;_2a0._percent=_29e;if(_29f){_2a0.play();}return _2a0;},stop:function(_2a1){var _2a2=this;if(_2a2._delayTimer){_2a2._clearTimer();}if(!_2a2._timer){return _2a2;}_2a2._stopTimer();if(_2a1){_2a2._percent=1;}_2a2._fire("onStop",[_2a2.curve.getValue(_2a2._getStep())]);_2a2._active=_2a2._paused=false;return _2a2;},status:function(){if(this._active){return this._paused?"paused":"playing";}return "stopped";},_cycle:function(){var _2a3=this;if(_2a3._active){var curr=new Date().valueOf();var step=(curr-_2a3._startTime)/(_2a3.duration);if(step>=1){step=1;}_2a3._percent=step;if(_2a3.easing){step=_2a3.easing(step);}_2a3._fire("onAnimate",[_2a3.curve.getValue(step)]);if(_2a3._percent<1){_2a3._startTimer();}else{_2a3._active=false;if(_2a3.repeat>0){_2a3.repeat--;_2a3.play(null,true);}else{if(_2a3.repeat==-1){_2a3.play(null,true);}else{if(_2a3._startRepeatCount){_2a3.repeat=_2a3._startRepeatCount;_2a3._startRepeatCount=0;}}}_2a3._percent=0;_2a3._fire("onEnd",[_2a3.node]);!_2a3.repeat&&_2a3._stopTimer();}}return _2a3;},_clearTimer:function(){clearTimeout(this._delayTimer);delete this._delayTimer;}});var ctr=0,_2a4=null,_2a5={run:function(){}};d.extend(d.Animation,{_startTimer:function(){if(!this._timer){this._timer=d.connect(_2a5,"run",this,"_cycle");ctr++;}if(!_2a4){_2a4=setInterval(d.hitch(_2a5,"run"),this.rate);}},_stopTimer:function(){if(this._timer){d.disconnect(this._timer);this._timer=null;ctr--;}if(ctr<=0){clearInterval(_2a4);_2a4=null;ctr=0;}}});var _2a6=d.isIE?function(node){var ns=node.style;if(!ns.width.length&&d.style(node,"width")=="auto"){ns.width="auto";}}:function(){};dojo._fade=function(args){args.node=d.byId(args.node);var _2a7=_292({properties:{}},args),_2a8=(_2a7.properties.opacity={});_2a8.start=!("start" in _2a7)?function(){return +d.style(_2a7.node,"opacity")||0;}:_2a7.start;_2a8.end=_2a7.end;var anim=d.animateProperty(_2a7);d.connect(anim,"beforeBegin",d.partial(_2a6,_2a7.node));return anim;};dojo.fadeIn=function(args){return d._fade(_292({end:1},args));};dojo.fadeOut=function(args){return d._fade(_292({end:0},args));};dojo._defaultEasing=function(n){return 0.5+((Math.sin((n+1.5)*Math.PI))/2);};var _2a9=function(_2aa){this._properties=_2aa;for(var p in _2aa){var prop=_2aa[p];if(prop.start instanceof d.Color){prop.tempColor=new d.Color();}}};_2a9.prototype.getValue=function(r){var ret={};for(var p in this._properties){var prop=this._properties[p],_2ab=prop.start;if(_2ab instanceof d.Color){ret[p]=d.blendColors(_2ab,prop.end,r,prop.tempColor).toCss();}else{if(!d.isArray(_2ab)){ret[p]=((prop.end-_2ab)*r)+_2ab+(p!="opacity"?prop.units||"px":0);}}}return ret;};dojo.animateProperty=function(args){var n=args.node=d.byId(args.node);if(!args.easing){args.easing=d._defaultEasing;}var anim=new d.Animation(args);d.connect(anim,"beforeBegin",anim,function(){var pm={};for(var p in this.properties){if(p=="width"||p=="height"){this.node.display="block";}var prop=this.properties[p];if(d.isFunction(prop)){prop=prop(n);}prop=pm[p]=_292({},(d.isObject(prop)?prop:{end:prop}));if(d.isFunction(prop.start)){prop.start=prop.start(n);}if(d.isFunction(prop.end)){prop.end=prop.end(n);}var _2ac=(p.toLowerCase().indexOf("color")>=0);function _2ad(node,p){var v={height:node.offsetHeight,width:node.offsetWidth}[p];if(v!==undefined){return v;}v=d.style(node,p);return (p=="opacity")?+v:(_2ac?v:parseFloat(v));};if(!("end" in prop)){prop.end=_2ad(n,p);}else{if(!("start" in prop)){prop.start=_2ad(n,p);}}if(_2ac){prop.start=new d.Color(prop.start);prop.end=new d.Color(prop.end);}else{prop.start=(p=="opacity")?+prop.start:parseFloat(prop.start);}}this.curve=new _2a9(pm);});d.connect(anim,"onAnimate",d.hitch(d,"style",anim.node));return anim;};dojo.anim=function(node,_2ae,_2af,_2b0,_2b1,_2b2){return d.animateProperty({node:node,duration:_2af||d.Animation.prototype.duration,properties:_2ae,easing:_2b0,onEnd:_2b1}).play(_2b2||0);};})();}if(!dojo._hasResource["dojo._base.browser"]){dojo._hasResource["dojo._base.browser"]=true;dojo.provide("dojo._base.browser");dojo.forEach(dojo.config.require,function(i){dojo["require"](i);});}if(!dojo._hasResource["dojo._base"]){dojo._hasResource["dojo._base"]=true;dojo.provide("dojo._base");}if(dojo.isBrowser&&(document.readyState==="complete"||dojo.config.afterOnLoad)){window.setTimeout(dojo._loadInit,100);}})();
index 07593d88e017059fabfc11b13fdfddafda3e8091..af7051aaf3d5a13e3103653cbbadf3c138ee2db7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -122,7 +122,7 @@ djConfig = {
        //              of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple
        //              modules may be configured via `djConfig.modulePaths`.
        modulePaths: {},
-       // afterOnLoad: Boolean 
+       // afterOnLoad: Boolean
        //              Indicates Dojo was added to the page after the page load. In this case
        //              Dojo will not wait for the page DOMContentLoad/load events and fire
        //              its dojo.addOnLoad callbacks after making sure all outstanding
@@ -149,7 +149,7 @@ djConfig = {
        // dojoBlankHtmlUrl: String
        //              Used by some modules to configure an empty iframe. Used by dojo.io.iframe and
        //              dojo.back, and dijit popup support in IE where an iframe is needed to make sure native
-       //              controls do not bleed through the popups. Normally this configuration variable 
+       //              controls do not bleed through the popups. Normally this configuration variable
        //              does not need to be set, except when using cross-domain/CDN Dojo builds.
        //              Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl`
        //              to the path on your domain your copy of blank.html.
@@ -195,7 +195,7 @@ djConfig = {
                        "groupEnd", "info", "profile", "profileEnd", "time", "timeEnd",
                        "trace", "warn", "log"
                ];
-               var i=0, tn;
+               var i = 0, tn;
                while((tn=cn[i++])){
                        if(!console[tn]){
                                (function(){
@@ -255,9 +255,13 @@ dojo.global = {
                debugAtAllCosts: false
        };
 
-       if(typeof djConfig != "undefined"){
-               for(var opt in djConfig){
-                       d.config[opt] = djConfig[opt];
+       // FIXME: 2.0, drop djConfig support. Use dojoConfig exclusively for global config.
+       var cfg = typeof djConfig != "undefined" ? djConfig :
+               typeof dojoConfig != "undefined" ? dojoConfig : null;
+               
+       if(cfg){
+               for(var c in cfg){
+                       d.config[c] = cfg[c];
                }
        }
 
@@ -269,7 +273,7 @@ dojo.global = {
 =====*/
        dojo.locale = d.config.locale;
 
-       var rev = "$Rev: 22487 $".match(/\d+/);
+       var rev = "$Rev: 24595 $".match(/\d+/);
 
 /*=====
        dojo.version = function(){
@@ -293,7 +297,7 @@ dojo.global = {
        }
 =====*/
        dojo.version = {
-               major: 1, minor: 5, patch: 0, flag: "",
+               major: 1, minor: 6, patch: 1, flag: "",
                revision: rev ? +rev[0] : NaN,
                toString: function(){
                        with(d.version){
@@ -369,7 +373,7 @@ dojo.global = {
                //      |               constructor: function(properties){
                //      |                       // property configuration:
                //      |                       dojo.mixin(this, properties);
-               //      |       
+               //      |
                //      |                       console.log(this.quip);
                //      |                       //  ...
                //      |               },
@@ -390,7 +394,7 @@ dojo.global = {
                //      |                       name: "Carl Brutanananadilewski"
                //      |               }
                //      |       );
-               //      |       
+               //      |
                //      |       // will print "Carl Brutanananadilewski"
                //      |       console.log(flattened.name);
                //      |       // will print "true"
@@ -465,10 +469,7 @@ dojo.global = {
                //              determine if an object supports a given method
                //      description:
                //              useful for longer api chains where you have to test each object in
-               //              the chain. Useful only for object and method detection.
-               //              Not useful for testing generic properties on an object.
-               //              In particular, dojo.exists("foo.bar") when foo.bar = ""
-               //              will return false. Use ("bar" in foo) to test for those cases.
+               //              the chain. Useful for object and method detection.
                //      name:
                //              Path to an object, in the form "A.B.C".
                //      obj:
@@ -487,7 +488,7 @@ dojo.global = {
                //      |       // search from a particular scope
                //      |       dojo.exists("bar", foo); // true
                //      |       dojo.exists("bar.baz", foo); // false
-               return !!d.getObject(name, false, obj); // Boolean
+               return d.getObject(name, false, obj) !== undefined; // Boolean
        }
 
        dojo["eval"] = function(/*String*/ scriptFragment){
@@ -553,9 +554,8 @@ dojo.global = {
  * loader.js - A bootstrap module.  Runs before the hostenv_*.js file. Contains
  * all of the package loading methods.
  */
-
 (function(){
-       var d = dojo;
+       var d = dojo, currentModule;
 
        d.mixin(d, {
                _loadedModules: {},
@@ -587,11 +587,11 @@ dojo.global = {
 
                _loadedUrls: [],
 
-               //WARNING: 
+               //WARNING:
                //              This variable is referenced by packages outside of bootstrap:
                //              FloatingPane.js and undo/browser.js
                _postLoad: false,
-               
+
                //Egad! Lots of test files push on this directly instead of using dojo.addOnLoad.
                _loaders: [],
                _unloaders: [],
@@ -610,21 +610,24 @@ dojo.global = {
                //              not caught by us, so the caller will see it.  We return a true
                //              value if and only if the script is found.
                //
-               // relpath: 
+               // relpath:
                //              A relative path to a script (no leading '/', and typically ending
                //              in '.js').
-               // module: 
+               // module:
                //              A module whose existance to check for after loading a path.  Can be
                //              used to determine success or failure of the load.
-               // cb: 
+               // cb:
                //              a callback function to pass the result of evaluating the script
 
                var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : d.baseUrl) + relpath;
                try{
+                       currentModule = module;
                        return !module ? d._loadUri(uri, cb) : d._loadUriAndCheck(uri, module, cb); // Boolean
                }catch(e){
                        console.error(e);
                        return false; // Boolean
+               }finally{
+                       currentModule = null;
                }
        }
 
@@ -637,7 +640,7 @@ dojo.global = {
                //              it succeeded. Returns false if the URI reading failed.  Throws if
                //              the evaluation throws.
                //      uri: a uri which points at the script to be loaded
-               //      cb: 
+               //      cb:
                //              a callback function to process the result of evaluating the script
                //              as an expression, typically used by the resource bundle loader to
                //              load JSON-style resources
@@ -651,7 +654,8 @@ dojo.global = {
                        d._loadedUrls[uri] = true;
                        d._loadedUrls.push(uri);
                        if(cb){
-                               contents = '('+contents+')';
+                               //conditional to support script-inject i18n bundle format
+                               contents = /^define\(/.test(contents) ? contents : '('+contents+')';
                        }else{
                                //Only do the scoping if no callback. If a callback is specified,
                                //it is most likely the i18n bundle stuff.
@@ -663,16 +667,16 @@ dojo.global = {
                }
                // Check to see if we need to call _callLoaded() due to an addOnLoad() that arrived while we were busy downloading
                if(--d._inFlightCount == 0 && d._postLoad && d._loaders.length){
-                       // We shouldn't be allowed to get here but Firefox allows an event 
-                       // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. 
+                       // We shouldn't be allowed to get here but Firefox allows an event
+                       // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet.
                        // If the current script block contains multiple require() statements, then after each
                        // require() returns, inFlightCount == 0, but we want to hold the _callLoaded() until
                        // all require()s are done since the out-of-sequence addOnLoad() presumably needs them all.
                        // setTimeout allows the next require() to start (if needed), and then we check this again.
-                       setTimeout(function(){ 
-                               // If inFlightCount > 0, then multiple require()s are running sequentially and 
+                       setTimeout(function(){
+                               // If inFlightCount > 0, then multiple require()s are running sequentially and
                                // the next require() started after setTimeout() was executed but before we got here.
-                               if(d._inFlightCount == 0){ 
+                               if(d._inFlightCount == 0){
                                        d._callLoaded();
                                }
                        }, 0);
@@ -695,10 +699,10 @@ dojo.global = {
        dojo.loaded = function(){
                // summary:
                //              signal fired when initial environment and package loading is
-               //              complete. You should use dojo.addOnLoad() instead of doing a 
+               //              complete. You should use dojo.addOnLoad() instead of doing a
                //              direct dojo.connect() to this method in order to handle
                //              initialization tasks that require the environment to be
-               //              initialized. In a browser host, declarative widgets will 
+               //              initialized. In a browser host, declarative widgets will
                //              be constructed when this function finishes runing.
                d._loadNotifying = true;
                d._postLoad = true;
@@ -725,8 +729,8 @@ dojo.global = {
        dojo.unloaded = function(){
                // summary:
                //              signal fired by impending environment destruction. You should use
-               //              dojo.addOnUnload() instead of doing a direct dojo.connect() to this 
-               //              method to perform page/application cleanup methods. See 
+               //              dojo.addOnUnload() instead of doing a direct dojo.connect() to this
+               //              method to perform page/application cleanup methods. See
                //              dojo.addOnUnload for more info.
                var mll = d._unloaders;
                while(mll.length){
@@ -745,13 +749,13 @@ dojo.global = {
 
        dojo.ready = dojo.addOnLoad = function(/*Object*/obj, /*String|Function?*/functionName){
                // summary:
-               //              Registers a function to be triggered after the DOM and dojo.require() calls 
+               //              Registers a function to be triggered after the DOM and dojo.require() calls
                //              have finished loading.
                //
                // description:
                //              Registers a function to be triggered after the DOM has finished
-               //              loading and `dojo.require` modules have loaded. Widgets declared in markup 
-               //              have been instantiated if `djConfig.parseOnLoad` is true when this fires. 
+               //              loading and `dojo.require` modules have loaded. Widgets declared in markup
+               //              have been instantiated if `djConfig.parseOnLoad` is true when this fires.
                //
                //              Images and CSS files may or may not have finished downloading when
                //              the specified function is called.  (Note that widgets' CSS and HTML
@@ -794,7 +798,7 @@ dojo.global = {
 
        dojo._modulesLoaded = function(){
                if(d._postLoad){ return; }
-               if(d._inFlightCount > 0){ 
+               if(d._inFlightCount > 0){
                        console.warn("files still in flight!");
                        return;
                }
@@ -826,8 +830,8 @@ dojo.global = {
                var syms = modulename.split(".");
                for(var i = syms.length; i>0; i--){
                        var parentModule = syms.slice(0, i).join(".");
-                       if(i == 1 && !d._moduleHasPrefix(parentModule)){                
-                               // Support default module directory (sibling of dojo) for top-level modules 
+                       if(i == 1 && !d._moduleHasPrefix(parentModule)){
+                               // Support default module directory (sibling of dojo) for top-level modules
                                syms[0] = "../" + syms[0];
                        }else{
                                var parentModulePath = d._getModulePrefix(parentModule);
@@ -862,87 +866,95 @@ dojo.global = {
        dojo._loadModule = dojo.require = function(/*String*/moduleName, /*Boolean?*/omitModuleCheck){
                //      summary:
                //              loads a Javascript module from the appropriate URI
-               //      moduleName:
+               //
+               //      moduleName: String
                //              module name to load, using periods for separators,
                //               e.g. "dojo.date.locale".  Module paths are de-referenced by dojo's
                //              internal mapping of locations to names and are disambiguated by
                //              longest prefix. See `dojo.registerModulePath()` for details on
                //              registering new modules.
-               //      omitModuleCheck:
+               //
+               //      omitModuleCheck: Boolean?
                //              if `true`, omitModuleCheck skips the step of ensuring that the
                //              loaded file actually defines the symbol it is referenced by.
                //              For example if it called as `dojo.require("a.b.c")` and the
                //              file located at `a/b/c.js` does not define an object `a.b.c`,
                //              and exception will be throws whereas no exception is raised
                //              when called as `dojo.require("a.b.c", true)`
+               //
                //      description:
                //              Modules are loaded via dojo.require by using one of two loaders: the normal loader
                //              and the xdomain loader. The xdomain loader is used when dojo was built with a
                //              custom build that specified loader=xdomain and the module lives on a modulePath
                //              that is a whole URL, with protocol and a domain. The versions of Dojo that are on
                //              the Google and AOL CDNs use the xdomain loader.
-               // 
+               //
                //              If the module is loaded via the xdomain loader, it is an asynchronous load, since
                //              the module is added via a dynamically created script tag. This
-               //              means that dojo.require() can return before the module has loaded. However, this 
+               //              means that dojo.require() can return before the module has loaded. However, this
                //              should only happen in the case where you do dojo.require calls in the top-level
                //              HTML page, or if you purposely avoid the loader checking for dojo.require
                //              dependencies in your module by using a syntax like dojo["require"] to load the module.
-               // 
+               //
                //              Sometimes it is useful to not have the loader detect the dojo.require calls in the
                //              module so that you can dynamically load the modules as a result of an action on the
                //              page, instead of right at module load time.
-               // 
+               //
                //              Also, for script blocks in an HTML page, the loader does not pre-process them, so
                //              it does not know to download the modules before the dojo.require calls occur.
-               // 
+               //
                //              So, in those two cases, when you want on-the-fly module loading or for script blocks
                //              in the HTML page, special care must be taken if the dojo.required code is loaded
                //              asynchronously. To make sure you can execute code that depends on the dojo.required
                //              modules, be sure to add the code that depends on the modules in a dojo.addOnLoad()
                //              callback. dojo.addOnLoad waits for all outstanding modules to finish loading before
-               //              executing. Example:
-               // 
-               //              |       <script type="text/javascript">
-               //              |       dojo.require("foo");
-               //              |       dojo.require("bar");
-               //              |       dojo.addOnLoad(function(){
-               //              |               //you can now safely do something with foo and bar
-               //              |       });
-               //              |       </script>
-               // 
+               //              executing.
+               //
                //              This type of syntax works with both xdomain and normal loaders, so it is good
                //              practice to always use this idiom for on-the-fly code loading and in HTML script
                //              blocks. If at some point you change loaders and where the code is loaded from,
                //              it will all still work.
-               // 
+               //
                //              More on how dojo.require
                //              `dojo.require("A.B")` first checks to see if symbol A.B is
                //              defined. If it is, it is simply returned (nothing to do).
-               //      
+               //
                //              If it is not defined, it will look for `A/B.js` in the script root
                //              directory.
-               //      
-               //              `dojo.require` throws an excpetion if it cannot find a file
+               //
+               //              `dojo.require` throws an exception if it cannot find a file
                //              to load, or if the symbol `A.B` is not defined after loading.
-               //      
+               //
                //              It returns the object `A.B`, but note the caveats above about on-the-fly loading and
                //              HTML script blocks when the xdomain loader is loading a module.
-               //      
+               //
                //              `dojo.require()` does nothing about importing symbols into
                //              the current namespace.  It is presumed that the caller will
-               //              take care of that. For example, to import all symbols into a
-               //              local block, you might write:
-               //      
+               //              take care of that.
+               //
+               //      example:
+               //              To use dojo.require in conjunction with dojo.ready:
+               //
+               //              |       dojo.require("foo");
+               //              |       dojo.require("bar");
+               //              |       dojo.addOnLoad(function(){
+               //              |               //you can now safely do something with foo and bar
+               //              |       });
+               //
+               //      example:
+               //              For example, to import all symbols into a local block, you might write:
+               //
                //              |       with (dojo.require("A.B")) {
                //              |               ...
                //              |       }
-               //      
+               //
                //              And to import just the leaf symbol to a local variable:
-               //      
+               //
                //              |       var B = dojo.require("A.B");
                //              |       ...
-               //      returns: the required namespace object
+               //
+               //      returns:
+               //              the required namespace object
                omitModuleCheck = d._global_omit_module_check || omitModuleCheck;
 
                //Check if it is already loaded.
@@ -953,10 +965,8 @@ dojo.global = {
 
                // convert periods to slashes
                var relpath = d._getModuleSymbols(moduleName).join("/") + '.js';
-
                var modArg = !omitModuleCheck ? moduleName : null;
                var ok = d._loadPath(relpath, modArg);
-
                if(!ok && !omitModuleCheck){
                        throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'");
                }
@@ -967,7 +977,7 @@ dojo.global = {
                        // pass in false so we can give better error
                        module = d._loadedModules[moduleName];
                        if(!module){
-                               throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); 
+                               throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'");
                        }
                }
 
@@ -988,14 +998,14 @@ dojo.global = {
                //              the file name.  For example, `js/dojo/foo.js` must have
                //              `dojo.provide("dojo.foo");` before any calls to
                //              `dojo.require()` are made.
-               //      
+               //
                //              For backwards compatibility reasons, in addition to registering
                //              the resource, `dojo.provide()` also ensures that the javascript
                //              object for the module exists.  For example,
                //              `dojo.provide("dojox.data.FlickrStore")`, in addition to
                //              registering that `FlickrStore.js` is a resource for the
                //              `dojox.data` module, will ensure that the `dojox.data`
-               //              javascript object exists, so that calls like 
+               //              javascript object exists, so that calls like
                //              `dojo.data.foo = function(){ ... }` don't fail.
                //
                //              In the case of a build where multiple javascript source files
@@ -1004,11 +1014,11 @@ dojo.global = {
                //              note that it includes multiple resources.
                //
                // resourceName: String
-               //              A dot-sperated string identifying a resource. 
+               //              A dot-sperated string identifying a resource.
                //
                // example:
                //      Safely create a `my` object, and make dojo.require("my.CustomModule") work
-               //      |       dojo.provide("my.CustomModule"); 
+               //      |       dojo.provide("my.CustomModule");
 
                //Make sure we have a string.
                resourceName = resourceName + "";
@@ -1065,7 +1075,7 @@ dojo.global = {
                if(condition === true){
                        // FIXME: why do we support chained require()'s here? does the build system?
                        var args = [];
-                       for(var i = 1; i < arguments.length; i++){ 
+                       for(var i = 1; i < arguments.length; i++){
                                args.push(arguments[i]);
                        }
                        d.require.apply(d, args);
@@ -1075,13 +1085,13 @@ dojo.global = {
        dojo.requireAfterIf = d.requireIf;
 
        dojo.registerModulePath = function(/*String*/module, /*String*/prefix){
-               //      summary: 
+               //      summary:
                //              Maps a module name to a path
-               //      description: 
+               //      description:
                //              An unregistered module is given the default path of ../[module],
                //              relative to Dojo root. For example, module acme is mapped to
                //              ../acme.  If you want to use a different module name, use
-               //              dojo.registerModulePath. 
+               //              dojo.registerModulePath.
                //      example:
                //              If your dojo.js is located at this location in the web root:
                //      |       /myapp/js/dojo/dojo/dojo.js
@@ -1094,7 +1104,7 @@ dojo.global = {
                //              At which point you can then use dojo.require() to load the
                //              modules (assuming they provide() the same things which are
                //              required). The full code might be:
-               //      |       <script type="text/javascript" 
+               //      |       <script type="text/javascript"
                //      |               src="/myapp/js/dojo/dojo/dojo.js"></script>
                //      |       <script type="text/javascript">
                //      |               dojo.registerModulePath("foo", "../../foo");
@@ -1103,8 +1113,8 @@ dojo.global = {
                //      |               dojo.require("foo.thud.xyzzy");
                //      |       </script>
                d._modulePrefixes[module] = { name: module, value: prefix };
-       }
-
+       };
+       
        dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
                // summary:
                //              Declares translated resources and loads them if necessary, in the
@@ -1115,7 +1125,7 @@ dojo.global = {
                // description:
                //              Load translated resource bundles provided underneath the "nls"
                //              directory within a package.  Translated resources may be located in
-               //              different packages throughout the source tree.  
+               //              different packages throughout the source tree.
                //
                //              Each directory is named for a locale as specified by RFC 3066,
                //              (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase.
@@ -1130,21 +1140,21 @@ dojo.global = {
                //              preload the bundles to avoid data redundancy and the multiple
                //              network hits normally required to load these resources.
                //
-               // moduleName: 
+               // moduleName:
                //              name of the package containing the "nls" directory in which the
                //              bundle is found
                //
-               // bundleName: 
+               // bundleName:
                //              bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a
                //              a bundle name is not supported, since "nls" is the name of the folder
                //              that holds bundles. Using "nls" as the bundle name will cause problems
                //              with the custom build.
                //
-               // locale: 
+               // locale:
                //              the locale to load (optional)  By default, the browser's user
                //              locale as defined by dojo.locale
                //
-               // availableFlatLocales: 
+               // availableFlatLocales:
                //              A comma-separated list of the available, flattened locales for this
                //              bundle. This argument should only be set by the build process.
                //
@@ -1186,11 +1196,11 @@ dojo.global = {
                ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$");
 
        dojo._Url = function(/*dojo._Url|String...*/){
-               // summary: 
+               // summary:
                //              Constructor to create an object representing a URL.
                //              It is marked as private, since we might consider removing
                //              or simplifying it.
-               // description: 
+               // description:
                //              Each argument is evaluated in order relative to the next until
                //              a canonical uri is produced. To get an absolute Uri relative to
                //              the current document use:
@@ -1257,7 +1267,7 @@ dojo.global = {
                        }
 
                        uri = [];
-                       if(relobj.scheme){ 
+                       if(relobj.scheme){
                                uri.push(relobj.scheme, ":");
                        }
                        if(relobj.authority){
@@ -1297,7 +1307,7 @@ dojo.global = {
        dojo._Url.prototype.toString = function(){ return this.uri; };
 
        dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){
-               //      summary: 
+               //      summary:
                //              Returns a `dojo._Url` object relative to a module.
                //      example:
                //      |       var pngPath = dojo.moduleUrl("acme","images/small.png");
@@ -1305,10 +1315,10 @@ dojo.global = {
                //      |       // create an image and set it's source to pngPath's value:
                //      |       var img = document.createElement("img");
                //      |       // NOTE: we assign the string representation of the url object
-               //      |       img.src = pngPath.toString(); 
+               //      |       img.src = pngPath.toString();
                //      |       // add our image to the document
                //      |       dojo.body().appendChild(img);
-               //      example: 
+               //      example:
                //              you may de-reference as far as you like down the package
                //              hierarchy.  This is sometimes handy to avoid lenghty relative
                //              urls or for building portable sub-packages. In this example,
@@ -1319,9 +1329,9 @@ dojo.global = {
                //      |       // somewhere in a configuration block
                //      |       dojo.registerModulePath("acme.widget", "../../acme/widget");
                //      |       dojo.registerModulePath("acme.util", "../../util");
-               //      |       
+               //      |
                //      |       // ...
-               //      |       
+               //      |
                //      |       // code in a module using acme resources
                //      |       var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html");
                //      |       var dataPath = dojo.moduleUrl("acme.util","resources/data.json");
@@ -1340,7 +1350,10 @@ dojo.global = {
                }
 
                return new d._Url(loc, url); // dojo._Url
-       }
+       };
+
+
+
 })();
 
 /*=====
@@ -1364,9 +1377,9 @@ dojo.isIE = {
 dojo.isSafari = {
        //      example:
        //      |       if(dojo.isSafari){ ... }
-       //      example: 
+       //      example:
        //              Detect iPhone:
-       //      |       if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ 
+       //      |       if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){
        //      |               // we are iPhone. Note, iPod touch reports "iPod" above and fails this test.
        //      |       }
 };
@@ -1409,7 +1422,6 @@ dojo = {
        //              True if the client runs on Mac
 }
 =====*/
-
 if(typeof window != 'undefined'){
        dojo.isBrowser = true;
        dojo._name = "browser";
@@ -1436,7 +1448,7 @@ if(typeof window != 'undefined'){
                                                d.config.baseUrl = src.substring(0, m.index);
                                        }
                                        // and find out if we need to modify our behavior
-                                       var cfg = scripts[i].getAttribute("djConfig");
+                                       var cfg = (scripts[i].getAttribute("djConfig") || scripts[i].getAttribute("data-dojo-config"));
                                        if(cfg){
                                                var cfgo = eval("({ "+cfg+" })");
                                                for(var x in cfgo){
@@ -1510,7 +1522,7 @@ if(typeof window != 'undefined'){
                                d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
                
                d._xhrObj = function(){
-                       // summary: 
+                       // summary:
                        //              does the work of portably generating a new XMLHTTPRequest object.
                        var http, last_e;
                                                if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){
@@ -1543,10 +1555,11 @@ if(typeof window != 'undefined'){
                        var stat = http.status || 0,
                                lp = location.protocol;
                        return (stat >= 200 && stat < 300) ||   // Boolean
-                               stat == 304 ||                                          // allow any 2XX response code
-                               stat == 1223 ||                                                 // get it out of the cache
+                               stat == 304 ||                  // allow any 2XX response code
+                               stat == 1223 ||                 // get it out of the cache
+                                                               // Internet Explorer mangled the status code
                                // Internet Explorer mangled the status code OR we're Titanium/browser chrome/chrome extension requesting a local file
-                               (!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:") );
+                               (!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:"));
                }
 
                //See if base tag is in use.
@@ -1641,7 +1654,7 @@ if(typeof window != 'undefined'){
                d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){
                        // summary:
                        //              registers a function to be triggered when window.onunload
-                       //              fires. 
+                       //              fires.
                        //      description:
                        //              The first time that addOnWindowUnload is called Dojo
                        //              will register a page listener to trigger your unload
@@ -1672,7 +1685,7 @@ if(typeof window != 'undefined'){
                        //      description:
                        //              The first time that addOnUnload is called Dojo will
                        //              register a page listener to trigger your unload handler
-                       //              with. 
+                       //              with.
                        //
                        //              In a browser enviroment, the functions will be triggered
                        //              during the window.onbeforeunload event. Be careful of doing
@@ -1685,7 +1698,7 @@ if(typeof window != 'undefined'){
                        //
                        //              Further note that calling dojo.addOnUnload will prevent
                        //              browsers from using a "fast back" cache to make page
-                       //              loading via back button instantaneous. 
+                       //              loading via back button instantaneous.
                        // example:
                        //      |       dojo.addOnUnload(functionPointer)
                        //      |       dojo.addOnUnload(object, "functionName")
@@ -1722,7 +1735,7 @@ if(typeof window != 'undefined'){
                }
        }
 
-       if(!dojo.config.afterOnLoad){           
+       if(!dojo.config.afterOnLoad){
                if(document.addEventListener){
                        //Standards. Hooray! Assumption here that if standards based,
                        //it knows about DOMContentLoaded. It is OK if it does not, the fall through
@@ -1739,10 +1752,10 @@ if(typeof window != 'undefined'){
                        if(!dojo.config.skipIeDomLoaded && self === self.top){
                                dojo._scrollIntervalId = setInterval(function (){
                                        try{
-                                               //When dojo is loaded into an iframe in an IE HTML Application 
+                                               //When dojo is loaded into an iframe in an IE HTML Application
                                                //(HTA), such as in a selenium test, javascript in the iframe
                                                //can't see anything outside of it, so self===self.top is true,
-                                               //but the iframe is not the top window and doScroll will be 
+                                               //but the iframe is not the top window and doScroll will be
                                                //available before document.body is set. Test document.body
                                                //before trying the doScroll trick
                                                if(document.body){
@@ -1805,16 +1818,20 @@ if(dojo.config.isDebug){
 }
 
 if(dojo.config.debugAtAllCosts){
-       dojo.config.useXDomain = true;
-       dojo.require("dojo._base._loader.loader_xd");
+       // this breaks the new AMD based module loader. The XDomain won't be necessary
+       // anyway if you switch to the asynchronous loader
+       //dojo.config.useXDomain = true;
+       //dojo.require("dojo._base._loader.loader_xd");
        dojo.require("dojo._base._loader.loader_debug");
        dojo.require("dojo.i18n");
 }
 
+
 if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo._base.lang"] = true;
 dojo.provide("dojo._base.lang");
 
+
 (function(){
        var d = dojo, opts = Object.prototype.toString;
 
@@ -1824,14 +1841,14 @@ dojo.provide("dojo._base.lang");
                //      summary:
                //              Return true if it is a String
                return (typeof it == "string" || it instanceof String); // Boolean
-       }
+       };
 
        dojo.isArray = function(/*anything*/ it){
                //      summary:
                //              Return true if it is an Array.
                //              Does not work on Arrays created in other windows.
                return it && (it instanceof Array || typeof it == "array"); // Boolean
-       }
+       };
 
        dojo.isFunction = function(/*anything*/ it){
                // summary:
@@ -1845,7 +1862,7 @@ dojo.provide("dojo._base.lang");
                //              or null)
                return it !== undefined &&
                        (it === null || typeof it == "object" || d.isArray(it) || d.isFunction(it)); // Boolean
-       }
+       };
 
        dojo.isArrayLike = function(/*anything*/ it){
                //      summary:
@@ -1864,14 +1881,14 @@ dojo.provide("dojo._base.lang");
                        !d.isString(it) && !d.isFunction(it) &&
                        !(it.tagName && it.tagName.toLowerCase() == 'form') &&
                        (d.isArray(it) || isFinite(it.length));
-       }
+       };
 
        dojo.isAlien = function(/*anything*/ it){
                // summary:
                //              Returns true if it is a built-in function or some other kind of
                //              oddball that *should* report as a function but doesn't
                return it && !d.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean
-       }
+       };
 
        dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){
                // summary:
@@ -1882,7 +1899,7 @@ dojo.provide("dojo._base.lang");
                        d._mixin(constructor.prototype, arguments[i]);
                }
                return constructor; // Object
-       }
+       };
 
        dojo._hitchArgs = function(scope, method /*,...*/){
                var pre = d._toArray(arguments, 2);
@@ -1894,8 +1911,8 @@ dojo.provide("dojo._base.lang");
                        var f = named ? (scope||d.global)[method] : method;
                        // invoke with collected args
                        return f && f.apply(scope || this, pre.concat(args)); // mixed
-               } // Function
-       }
+               }; // Function
+       };
 
        dojo.hitch = function(/*Object*/scope, /*Function|String*/method /*,...*/){
                //      summary:
@@ -1903,7 +1920,7 @@ dojo.provide("dojo._base.lang");
                //              This allows for easy use of object member functions
                //              in callbacks and other places in which the "this" keyword may
                //              otherwise not reference the expected scope.
-               //              Any number of default positional arguments may be passed as parameters 
+               //              Any number of default positional arguments may be passed as parameters
                //              beyond "method".
                //              Each of these values will be used to "placehold" (similar to curry)
                //              for the hitched function.
@@ -1943,7 +1960,7 @@ dojo.provide("dojo._base.lang");
                        return function(){ return scope[method].apply(scope, arguments || []); }; // Function
                }
                return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function
-       }
+       };
 
        /*=====
        dojo.delegate = function(obj, props){
@@ -1987,7 +2004,7 @@ dojo.provide("dojo._base.lang");
                                d._mixin(tmp, props);
                        }
                        return tmp; // Object
-               }
+               };
        })();
 
        /*=====
@@ -2036,7 +2053,7 @@ dojo.provide("dojo._base.lang");
                //              |       dojo.hitch(null, funcName, ...);
                var arr = [ null ];
                return d.hitch.apply(d, arr.concat(d._toArray(arguments))); // Function
-       }
+       };
 
        var extraNames = d._extraNames, extraLen = extraNames.length, empty = {};
 
@@ -2056,6 +2073,10 @@ dojo.provide("dojo._base.lang");
                        // Date
                        return new Date(o.getTime());   // Date
                }
+               if(o instanceof RegExp){
+                       // RegExp
+                       return new RegExp(o);   // RegExp
+               }
                var r, i, l, s, name;
                if(d.isArray(o)){
                        // array
@@ -2094,7 +2115,7 @@ dojo.provide("dojo._base.lang");
                        }
                }
                                return r; // Object
-       }
+       };
 
        /*=====
        dojo.trim = function(str){
@@ -2123,7 +2144,7 @@ dojo.provide("dojo._base.lang");
        dojo.replace = function(tmpl, map, pattern){
                //      summary:
                //              Performs parameterized substitutions on a string. Throws an
-               //              exception if any parameter is unmatched. 
+               //              exception if any parameter is unmatched.
                //      tmpl: String
                //              String to be used as a template.
                //      map: Object|Function
@@ -2199,13 +2220,14 @@ dojo.provide("dojo._base.lang");
 
 if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo._base.array"] = true;
-
 dojo.provide("dojo._base.array");
 
+
+
 (function(){
        var _getParts = function(arr, obj, cb){
-               return [ 
-                       (typeof arr == "string") ? arr.split("") : arr, 
+               return [
+                       (typeof arr == "string") ? arr.split("") : arr,
                        obj || dojo.global,
                        // FIXME: cache the anonymous functions we create here?
                        (typeof cb == "string") ? new Function("item", "index", "array", cb) : cb
@@ -2224,7 +2246,7 @@ dojo.provide("dojo._base.array");
        };
 
        dojo.mixin(dojo, {
-               indexOf: function(      /*Array*/               array, 
+               indexOf: function(      /*Array*/               array,
                                                        /*Object*/              value,
                                                        /*Integer?*/    fromIndex,
                                                        /*Boolean?*/    findLast){
@@ -2233,7 +2255,7 @@ dojo.provide("dojo._base.array");
                        //              passed array. If the value is not found, -1 is returned.
                        // description:
                        //              This method corresponds to the JavaScript 1.6 Array.indexOf method, with one difference: when
-                       //              run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript 
+                       //              run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript
                        //              1.6's indexOf skips the holes in the sparse array.
                        //              For details on this method, see:
                        //                      https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf
@@ -2258,7 +2280,7 @@ dojo.provide("dojo._base.array");
                        //              array. If the value is not found, -1 is returned.
                        // description:
                        //              This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when
-                       //              run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript 
+                       //              run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript
                        //              1.6's lastIndexOf skips the holes in the sparse array.
                        //              For details on this method, see:
                        //                      https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf
@@ -2277,7 +2299,7 @@ dojo.provide("dojo._base.array");
                        //      thisObject:
                        //              may be used to scope the call to callback
                        //      description:
-                       //              This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when 
+                       //              This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when
                        //              run over sparse arrays, this implemenation passes the "holes" in the sparse array to
                        //              the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array.
                        //              For more details, see:
@@ -2300,21 +2322,21 @@ dojo.provide("dojo._base.array");
                        //      |       );
                        //      example:
                        //      |       // use a scoped object member as the callback
-                       //      |       
+                       //      |
                        //      |       var obj = {
-                       //      |               prefix: "logged via obj.callback:", 
+                       //      |               prefix: "logged via obj.callback:",
                        //      |               callback: function(item){
                        //      |                       console.log(this.prefix, item);
                        //      |               }
                        //      |       };
-                       //      |       
+                       //      |
                        //      |       // specifying the scope function executes the callback in that scope
                        //      |       dojo.forEach(
                        //      |               [ "thinger", "blah", "howdy", 10 ],
                        //      |               obj.callback,
                        //      |               obj
                        //      |       );
-                       //      |       
+                       //      |
                        //      |       // alternately, we can accomplish the same thing with dojo.hitch()
                        //      |       dojo.forEach(
                        //      |               [ "thinger", "blah", "howdy", 10 ],
@@ -2327,7 +2349,7 @@ dojo.provide("dojo._base.array");
                        // FIXME: there are several ways of handilng thisObject. Is
                        // dojo.global always the default context?
                        var _p = _getParts(arr, thisObject, callback); arr = _p[0];
-                       for(var i=0,l=arr.length; i<l; ++i){ 
+                       for(var i=0,l=arr.length; i<l; ++i){
                                _p[2].call(_p[1], arr[i], i, arr);
                        }
                },
@@ -2344,7 +2366,7 @@ dojo.provide("dojo._base.array");
                        // thisObject:
                        //              may be used to scope the call to callback
                        // description:
-                       //              This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when 
+                       //              This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when
                        //              run over sparse arrays, this implemenation passes the "holes" in the sparse array to
                        //              the callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array.
                        //              For more details, see:
@@ -2353,7 +2375,7 @@ dojo.provide("dojo._base.array");
                        //      |       // returns false
                        //      |       dojo.every([1, 2, 3, 4], function(item){ return item>1; });
                        // example:
-                       //      |       // returns true 
+                       //      |       // returns true
                        //      |       dojo.every([1, 2, 3, 4], function(item){ return item>0; });
                        return everyOrSome(true, arr, callback, thisObject); // Boolean
                },
@@ -2370,7 +2392,7 @@ dojo.provide("dojo._base.array");
                        // thisObject:
                        //              may be used to scope the call to callback
                        // description:
-                       //              This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when 
+                       //              This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when
                        //              run over sparse arrays, this implemenation passes the "holes" in the sparse array to
                        //              the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array.
                        //              For more details, see:
@@ -2397,7 +2419,7 @@ dojo.provide("dojo._base.array");
                        // thisObject:
                        //              may be used to scope the call to callback
                        // description:
-                       //              This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when 
+                       //              This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when
                        //              run over sparse arrays, this implemenation passes the "holes" in the sparse array to
                        //              the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array.
                        //              For more details, see:
@@ -2428,9 +2450,9 @@ dojo.provide("dojo._base.array");
                        // thisObject:
                        //              may be used to scope the call to callback
                        // description:
-                       //              This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when 
+                       //              This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when
                        //              run over sparse arrays, this implemenation passes the "holes" in the sparse array to
-                       //              the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. 
+                       //              the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array.
                        //              For more details, see:
                        //                      https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
                        // example:
@@ -2464,10 +2486,10 @@ dojo.provide("dojo._base.declare");
        var d = dojo, mix = d._mixin, op = Object.prototype, opts = op.toString,
                xtor = new Function, counter = 0, cname = "constructor";
 
-       function err(msg){ throw new Error("declare: " + msg); }
+       function err(msg, cls){ throw new Error("declare" + (cls ? " " + cls : "") + ": " + msg); }
 
        // C3 Method Resolution Order (see http://www.python.org/download/releases/2.3/mro/)
-       function c3mro(bases){
+       function c3mro(bases, className){
                var result = [], roots = [{cls: 0, refs: []}], nameMap = {}, clsCount = 1,
                        l = bases.length, i = 0, j, lin, base, top, proto, rec, name, refs;
 
@@ -2475,9 +2497,9 @@ dojo.provide("dojo._base.declare");
                for(; i < l; ++i){
                        base = bases[i];
                        if(!base){
-                               err("mixin #" + i + " is unknown. Did you use dojo.require to pull it in?");
+                               err("mixin #" + i + " is unknown. Did you use dojo.require to pull it in?", className);
                        }else if(opts.call(base) != "[object Function]"){
-                               err("mixin #" + i + " is not a callable constructor.");
+                               err("mixin #" + i + " is not a callable constructor.", className);
                        }
                        lin = base._meta ? base._meta.bases : [base];
                        top = 0;
@@ -2530,7 +2552,7 @@ dojo.provide("dojo._base.declare");
                        }
                }
                if(clsCount){
-                       err("can't build consistent linearization");
+                       err("can't build consistent linearization", className);
                }
 
                // calculate the superclass offset
@@ -2557,7 +2579,7 @@ dojo.provide("dojo._base.declare");
                caller = args.callee;
                name = name || caller.nom;
                if(!name){
-                       err("can't deduce a name to call inherited()");
+                       err("can't deduce a name to call inherited()", this.declaredClass);
                }
 
                meta = this.constructor._meta;
@@ -2575,7 +2597,7 @@ dojo.provide("dojo._base.declare");
                                        // error detection
                                        chains = meta.chains;
                                        if(chains && typeof chains[name] == "string"){
-                                               err("calling chained method with inherited: " + name);
+                                               err("calling chained method with inherited: " + name, this.declaredClass);
                                        }
                                        // find caller
                                        do{
@@ -2616,7 +2638,7 @@ dojo.provide("dojo._base.declare");
                                        // error detection
                                        chains = meta.chains;
                                        if(!chains || chains.constructor !== "manual"){
-                                               err("calling chained constructor with inherited");
+                                               err("calling chained constructor with inherited", this.declaredClass);
                                        }
                                        // find caller
                                        while(base = bases[++pos]){ // intentional assignment
@@ -2912,7 +2934,7 @@ dojo.provide("dojo._base.declare");
                // build a prototype
                if(opts.call(superclass) == "[object Array]"){
                        // C3 MRO
-                       bases = c3mro(superclass);
+                       bases = c3mro(superclass, className);
                        t = bases[0];
                        mixins = bases.length - t;
                        superclass = bases[mixins];
@@ -2923,10 +2945,10 @@ dojo.provide("dojo._base.declare");
                                        t = superclass._meta;
                                        bases = bases.concat(t ? t.bases : superclass);
                                }else{
-                                       err("base class is not a callable constructor.");
+                                       err("base class is not a callable constructor.", className);
                                }
                        }else if(superclass !== null){
-                               err("unknown base class. Did you use dojo.require to pull it in?")
+                               err("unknown base class. Did you use dojo.require to pull it in?", className);
                        }
                }
                if(superclass){
@@ -3500,27 +3522,28 @@ dojo._hasResource["dojo._base.connect"] = true;
 dojo.provide("dojo._base.connect");
 
 
+
 // this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
 
 // low-level delegation machinery
 dojo._listener = {
        // create a dispatcher function
        getDispatcher: function(){
-               // following comments pulled out-of-line to prevent cloning them 
+               // following comments pulled out-of-line to prevent cloning them
                // in the returned function.
-               // - indices (i) that are really in the array of listeners (ls) will 
+               // - indices (i) that are really in the array of listeners (ls) will
                //   not be in Array.prototype. This is the 'sparse array' trick
-               //   that keeps us safe from libs that take liberties with built-in 
+               //   that keeps us safe from libs that take liberties with built-in
                //   objects
                // - listener is invoked with current scope (this)
                return function(){
-                       var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target;
+                       var ap = Array.prototype, c = arguments.callee, ls = c._listeners, t = c.target,
                        // return value comes from original target function
-                       var r = t && t.apply(this, arguments);
+                               r = t && t.apply(this, arguments),
                        // make local copy of listener array so it is immutable during processing
-                       var i, lls;
-                                                                                       lls = [].concat(ls);
-                                                       
+                               i, lls = [].concat(ls)
+                       ;
+
                        // invoke listeners after target function
                        for(i in lls){
                                if(!(i in ap)){
@@ -3534,12 +3557,12 @@ dojo._listener = {
        // add a listener to an object
        add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){
                // Whenever 'method' is invoked, 'listener' will have the same scope.
-               // Trying to supporting a context object for the listener led to 
-               // complexity. 
+               // Trying to supporting a context object for the listener led to
+               // complexity.
                // Non trivial to provide 'once' functionality here
                // because listener could be the result of a dojo.hitch call,
                // in which case two references to the same hitch target would not
-               // be equivalent. 
+               // be equivalent.
                source = source || dojo.global;
                // The source method is either null, a dispatcher, or some other function
                var f = source[method];
@@ -3549,15 +3572,15 @@ dojo._listener = {
                        // original target function is special
                        d.target = f;
                        // dispatcher holds a list of listeners
-                       d._listeners = []; 
+                       d._listeners = [];
                        // redirect source to dispatcher
                        f = source[method] = d;
                }
-               // The contract is that a handle is returned that can 
-               // identify this listener for disconnect. 
+               // The contract is that a handle is returned that can
+               // identify this listener for disconnect.
                //
-               // The type of the handle is private. Here is it implemented as Integer. 
-               // DOM event code has this same contract but handle is Function 
+               // The type of the handle is private. Here is it implemented as Integer.
+               // DOM event code has this same contract but handle is Function
                // in non-IE browsers.
                //
                // We could have separate lists of before and after listeners.
@@ -3579,9 +3602,9 @@ dojo._listener = {
 // and dontFix argument here to help the autodocs. Actual DOM aware code is in
 // event.js.
 
-dojo.connect = function(/*Object|null*/ obj, 
-                                               /*String*/ event, 
-                                               /*Object|null*/ context, 
+dojo.connect = function(/*Object|null*/ obj,
+                                               /*String*/ event,
+                                               /*Object|null*/ context,
                                                /*String|Function*/ method,
                                                /*Boolean?*/ dontFix){
        // summary:
@@ -3616,37 +3639,37 @@ dojo.connect = function(/*Object|null*/ obj,
        //              arguments may simply be omitted such that fewer than 4 arguments
        //              may be required to set up a connection See the examples for details.
        //
-       //              The return value is a handle that is needed to 
+       //              The return value is a handle that is needed to
        //              remove this connection with `dojo.disconnect`.
        //
-       // obj: 
-       //              The source object for the event function. 
+       // obj:
+       //              The source object for the event function.
        //              Defaults to `dojo.global` if null.
-       //              If obj is a DOM node, the connection is delegated 
+       //              If obj is a DOM node, the connection is delegated
        //              to the DOM event manager (unless dontFix is true).
        //
        // event:
-       //              String name of the event function in obj. 
+       //              String name of the event function in obj.
        //              I.e. identifies a property `obj[event]`.
        //
-       // context: 
+       // context:
        //              The object that method will receive as "this".
        //
        //              If context is null and method is a function, then method
        //              inherits the context of event.
-       //      
-       //              If method is a string then context must be the source 
+       //
+       //              If method is a string then context must be the source
        //              object object for method (context[method]). If context is null,
        //              dojo.global is used.
        //
        // method:
-       //              A function reference, or name of a function in context. 
-       //              The function identified by method fires after event does. 
+       //              A function reference, or name of a function in context.
+       //              The function identified by method fires after event does.
        //              method receives the same arguments as the event.
        //              See context argument comments for information on method's scope.
        //
        // dontFix:
-       //              If obj is a DOM node, set dontFix to true to prevent delegation 
+       //              If obj is a DOM node, set dontFix to true to prevent delegation
        //              of this connection to the DOM event manager.
        //
        // example:
@@ -3696,9 +3719,9 @@ dojo.connect = function(/*Object|null*/ obj,
 
 // used by non-browser hostenvs. always overriden by event.js
 dojo._connect = function(obj, event, context, method){
-       var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); 
+       var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method));
        return [obj, event, h, l]; // Handle
-}
+};
 
 dojo.disconnect = function(/*Handle*/ handle){
        // summary:
@@ -3712,11 +3735,11 @@ dojo.disconnect = function(/*Handle*/ handle){
                // let's not keep this reference
                delete handle[0];
        }
-}
+};
 
 dojo._disconnect = function(obj, event, handle, listener){
        listener.remove(obj, event, handle);
-}
+};
 
 // topic publish/subscribe
 
@@ -3734,15 +3757,15 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu
        //              is invoked when topic is published.
        //      example:
        //      |       dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); });
-       //      |       dojo.publish("alerts", [ "read this", "hello world" ]);                                                                                                                                 
+       //      |       dojo.publish("alerts", [ "read this", "hello world" ]);
 
        // support for 2 argument invocation (omitting context) depends on hitch
        return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/
-}
+};
 
 dojo.unsubscribe = function(/*Handle*/ handle){
        //      summary:
-       //              Remove a topic listener. 
+       //              Remove a topic listener.
        //      handle:
        //              The handle returned from a call to subscribe.
        //      example:
@@ -3752,7 +3775,7 @@ dojo.unsubscribe = function(/*Handle*/ handle){
        if(handle){
                dojo._listener.remove(dojo._topics, handle[0], handle[1]);
        }
-}
+};
 
 dojo.publish = function(/*String*/ topic, /*Array*/ args){
        //      summary:
@@ -3760,11 +3783,11 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){
        //      topic:
        //              The name of the topic to publish.
        //      args:
-       //              An array of arguments. The arguments will be applied 
+       //              An array of arguments. The arguments will be applied
        //              to each topic subscriber (as first class parameters, via apply).
        //      example:
        //      |       dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
-       //      |       dojo.publish("alerts", [ "read this", "hello world" ]); 
+       //      |       dojo.publish("alerts", [ "read this", "hello world" ]);
 
        // Note that args is an array, which is more efficient vs variable length
        // argument list.  Ideally, var args would be implemented via Array
@@ -3773,10 +3796,10 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){
        if(f){
                f.apply(this, args||[]);
        }
-}
+};
 
-dojo.connectPublisher = function(      /*String*/ topic, 
-                                                                       /*Object|null*/ obj, 
+dojo.connectPublisher = function(      /*String*/ topic,
+                                                                       /*Object|null*/ obj,
                                                                        /*String*/ event){
        //      summary:
        //              Ensure that every time obj.event() is called, a message is published
@@ -3785,11 +3808,11 @@ dojo.connectPublisher = function(       /*String*/ topic,
        //              the topic.
        //      topic:
        //              The name of the topic to publish.
-       //      obj: 
+       //      obj:
        //              The source object for the event function. Defaults to dojo.global
        //              if null.
        //      event:
-       //              The name of the event function in obj. 
+       //              The name of the event function in obj.
        //              I.e. identifies a property obj[event].
        //      example:
        //      |       dojo.connectPublisher("/ajax/start", dojo, "xhrGet");
@@ -3804,42 +3827,43 @@ dojo._hasResource["dojo._base.Deferred"] = true;
 dojo.provide("dojo._base.Deferred");
 
 
+
 (function(){
-       var mutator = function(){};             
+       var mutator = function(){};
        var freeze = Object.freeze || function(){};
        // A deferred provides an API for creating and resolving a promise.
        dojo.Deferred = function(/*Function?*/canceller){
        // summary:
        //              Deferreds provide a generic means for encapsulating an asynchronous
-       //              operation and notifying users of the completion and result of the operation. 
+       //              operation and notifying users of the completion and result of the operation.
        // description:
        //              The dojo.Deferred API is based on the concept of promises that provide a
        //              generic interface into the eventual completion of an asynchronous action.
-       //              The motivation for promises fundamentally is about creating a 
-       //              separation of concerns that allows one to achieve the same type of 
-       //              call patterns and logical data flow in asynchronous code as can be 
-       //              achieved in synchronous code. Promises allows one 
-       //              to be able to call a function purely with arguments needed for 
-       //              execution, without conflating the call with concerns of whether it is 
-       //              sync or async. One shouldn't need to alter a call's arguments if the 
-       //              implementation switches from sync to async (or vice versa). By having 
-       //              async functions return promises, the concerns of making the call are 
-       //              separated from the concerns of asynchronous interaction (which are 
+       //              The motivation for promises fundamentally is about creating a
+       //              separation of concerns that allows one to achieve the same type of
+       //              call patterns and logical data flow in asynchronous code as can be
+       //              achieved in synchronous code. Promises allows one
+       //              to be able to call a function purely with arguments needed for
+       //              execution, without conflating the call with concerns of whether it is
+       //              sync or async. One shouldn't need to alter a call's arguments if the
+       //              implementation switches from sync to async (or vice versa). By having
+       //              async functions return promises, the concerns of making the call are
+       //              separated from the concerns of asynchronous interaction (which are
        //              handled by the promise).
-       // 
-       //      The dojo.Deferred is a type of promise that provides methods for fulfilling the 
-       //              promise with a successful result or an error. The most important method for 
-       //              working with Dojo's promises is the then() method, which follows the 
+       //
+       //      The dojo.Deferred is a type of promise that provides methods for fulfilling the
+       //              promise with a successful result or an error. The most important method for
+       //              working with Dojo's promises is the then() method, which follows the
        //              CommonJS proposed promise API. An example of using a Dojo promise:
-       //              
+       //
        //              |       var resultingPromise = someAsyncOperation.then(function(result){
        //              |               ... handle result ...
        //              |       },
        //              |       function(error){
        //              |               ... handle error ...
        //              |       });
-       //      
-       //              The .then() call returns a new promise that represents the result of the 
+       //
+       //              The .then() call returns a new promise that represents the result of the
        //              execution of the callback. The callbacks will never affect the original promises value.
        //
        //              The dojo.Deferred instances also provide the following functions for backwards compatibility:
@@ -3849,7 +3873,7 @@ dojo.provide("dojo._base.Deferred");
        //                      * callback(result)
        //                      * errback(result)
        //
-       //              Callbacks are allowed to return promisesthemselves, so
+       //              Callbacks are allowed to return promises themselves, so
        //              you can build complicated sequences of events with ease.
        //
        //              The creator of the Deferred may specify a canceller.  The canceller
@@ -3909,7 +3933,7 @@ dojo.provide("dojo._base.Deferred");
        //              |                               renderDataitem(data[x]);
        //              |                       }
        //              |                       d.callback(true);
-       //              |               }catch(e){ 
+       //              |               }catch(e){
        //              |                       d.errback(new Error("rendering failed"));
        //              |               }
        //              |               return d;
@@ -3923,7 +3947,7 @@ dojo.provide("dojo._base.Deferred");
        //              |       // again, so we could chain adding callbacks or save the
        //              |       // deferred for later should we need to be notified again.
        // example:
-       //              In this example, renderLotsOfData is syncrhonous and so both
+       //              In this example, renderLotsOfData is synchronous and so both
        //              versions are pretty artificial. Putting the data display on a
        //              timeout helps show why Deferreds rock:
        //
@@ -3936,7 +3960,7 @@ dojo.provide("dojo._base.Deferred");
        //              |                                       renderDataitem(data[x]);
        //              |                               }
        //              |                               d.callback(true);
-       //              |                       }catch(e){ 
+       //              |                       }catch(e){
        //              |                               d.errback(new Error("rendering failed"));
        //              |                       }
        //              |               }, 100);
@@ -3951,11 +3975,11 @@ dojo.provide("dojo._base.Deferred");
        //              Note that the caller doesn't have to change his code at all to
        //              handle the asynchronous case.
                var result, finished, isError, head, nextListener;
-               var promise = this.promise = {};
+               var promise = (this.promise = {});
                
                function complete(value){
                        if(finished){
-                               throw new Error("This deferred has already been resolved");                             
+                               throw new Error("This deferred has already been resolved");
                        }
                        result = value;
                        finished = true;
@@ -3966,7 +3990,7 @@ dojo.provide("dojo._base.Deferred");
                        while(!mutated && nextListener){
                                var listener = nextListener;
                                nextListener = nextListener.next;
-                               if(mutated = (listener.progress == mutator)){ // assignment and check
+                               if((mutated = (listener.progress == mutator))){ // assignment and check
                                        finished = false;
                                }
                                var func = (isError ? listener.error : listener.resolved);
@@ -3978,6 +4002,9 @@ dojo.provide("dojo._base.Deferred");
                                                        continue;
                                                }
                                                var unchanged = mutated && newResult === undefined;
+                                               if(mutated && !unchanged){
+                                                       isError = newResult instanceof Error;
+                                               }
                                                listener.deferred[unchanged && isError ? "reject" : "resolve"](unchanged ? result : newResult);
                                        }
                                        catch (e) {
@@ -3990,7 +4017,7 @@ dojo.provide("dojo._base.Deferred");
                                                listener.deferred.resolve(result);
                                        }
                                }
-                       }       
+                       }
                }
                // calling resolve will resolve the promise
                this.resolve = this.callback = function(value){
@@ -4005,7 +4032,7 @@ dojo.provide("dojo._base.Deferred");
                // calling error will indicate that the promise failed
                this.reject = this.errback = function(error){
                        // summary:
-                       //              Fulfills the Deferred instance as an error with the provided error 
+                       //              Fulfills the Deferred instance as an error with the provided error
                        isError = true;
                        this.fired = 1;
                        complete(error);
@@ -4022,7 +4049,7 @@ dojo.provide("dojo._base.Deferred");
                        while(listener){
                                var progress = listener.progress;
                                progress && progress(update);
-                               listener = listener.next;       
+                               listener = listener.next;
                        }
                };
                this.addCallbacks = function(/*Function?*/callback, /*Function?*/errback){
@@ -4031,35 +4058,35 @@ dojo.provide("dojo._base.Deferred");
                };
                // provide the implementation of the promise
                this.then = promise.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){
-                       // summary
-                       //              Adds a fulfilledHandler, errorHandler, and progressHandler to be called for 
-                       //              completion of a promise. The fulfilledHandler is called when the promise 
-                       //              is fulfilled. The errorHandler is called when a promise fails. The 
-                       //              progressHandler is called for progress events. All arguments are optional 
-                       //              and non-function values are ignored. The progressHandler is not only an 
-                       //              optional argument, but progress events are purely optional. Promise 
+                       // summary:
+                       //              Adds a fulfilledHandler, errorHandler, and progressHandler to be called for
+                       //              completion of a promise. The fulfilledHandler is called when the promise
+                       //              is fulfilled. The errorHandler is called when a promise fails. The
+                       //              progressHandler is called for progress events. All arguments are optional
+                       //              and non-function values are ignored. The progressHandler is not only an
+                       //              optional argument, but progress events are purely optional. Promise
                        //              providers are not required to ever create progress events.
-                       // 
-                       //              This function will return a new promise that is fulfilled when the given 
-                       //              fulfilledHandler or errorHandler callback is finished. This allows promise 
-                       //              operations to be chained together. The value returned from the callback 
-                       //              handler is the fulfillment value for the returned promise. If the callback 
+                       //
+                       //              This function will return a new promise that is fulfilled when the given
+                       //              fulfilledHandler or errorHandler callback is finished. This allows promise
+                       //              operations to be chained together. The value returned from the callback
+                       //              handler is the fulfillment value for the returned promise. If the callback
                        //              throws an error, the returned promise will be moved to failed state.
-                       //      
+                       //
                        // example:
                        //              An example of using a CommonJS compliant promise:
                        //              |       asyncComputeTheAnswerToEverything().
                        //              |               then(addTwo).
                        //              |               then(printResult, onError);
-                       //              |       >44 
-                       //              
+                       //              |       >44
+                       //
                        var returnDeferred = progressCallback == mutator ? this : new dojo.Deferred(promise.cancel);
                        var listener = {
-                               resolved: resolvedCallback, 
-                               error: errorCallback, 
-                               progress: progressCallback, 
+                               resolved: resolvedCallback,
+                               error: errorCallback,
+                               progress: progressCallback,
                                deferred: returnDeferred
-                       }; 
+                       };
                        if(nextListener){
                                head = head.next = listener;
                        }
@@ -4085,7 +4112,7 @@ dojo.provide("dojo._base.Deferred");
                                        deferred.reject(error);
                                }
                        }
-               }
+               };
                freeze(promise);
        };
        dojo.extend(dojo.Deferred, {
@@ -4106,7 +4133,7 @@ dojo.provide("dojo._base.Deferred");
 })();
 dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback, /*Function?*/progressHandler){
        // summary:
-       //              This provides normalization between normal synchronous values and 
+       //              This provides normalization between normal synchronous values and
        //              asynchronous promises, so you can interact with them in a common way
        //      example:
        //              |       function printFirstAndList(items){
@@ -4139,6 +4166,7 @@ if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo._base.json"] = true;
 dojo.provide("dojo._base.json");
 
+
 dojo.fromJson = function(/*String*/ json){
        // summary:
        //              Parses a [JSON](http://json.org) string to return a JavaScript object.
@@ -4146,12 +4174,12 @@ dojo.fromJson = function(/*String*/ json){
        //              Throws for invalid JSON strings, but it does not use a strict JSON parser. It
        //              delegates to eval().  The content passed to this method must therefore come
        //              from a trusted source.
-       // json: 
+       // json:
        //              a string literal of a JSON item, for instance:
        //                      `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'`
 
        return eval("(" + json + ")"); // Object
-}
+};
 
 dojo._escapeString = function(/*String*/str){
        //summary:
@@ -4161,7 +4189,7 @@ dojo._escapeString = function(/*String*/str){
        return ('"' + str.replace(/(["\\])/g, '\\$1') + '"').
                replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n").
                replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string
-}
+};
 
 dojo.toJsonIndentStr = "\t";
 dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){
@@ -4205,8 +4233,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind
        if(it === null){
                return "null";
        }
-       if(dojo.isString(it)){ 
-               return dojo._escapeString(it); 
+       if(dojo.isString(it)){
+               return dojo._escapeString(it);
        }
        // recurse
        var recurse = arguments.callee;
@@ -4279,7 +4307,7 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind
                output.push(newLine + nextIndent + keyStr + ":" + sep + val);
        }
        return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String
-}
+};
 
 }
 
@@ -4289,6 +4317,7 @@ dojo.provide("dojo._base.Color");
 
 
 
+
 (function(){
 
        var d = dojo;
@@ -4477,7 +4506,7 @@ dojo.provide("dojo._base.Color");
                //              Builds a `dojo.Color` from a 3 or 4 element array, mapping each
                //              element in sequence to the rgb(a) values of the color.
                // example:
-               //              | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha 
+               //              | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha
                // returns:
                //              A dojo.Color object. If obj is passed, it will be the return value.
                var t = obj || new d.Color();
@@ -4502,26 +4531,13 @@ dojo.provide("dojo._base.Color");
        };
 })();
 
-}
-
-if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo._base"] = true;
-dojo.provide("dojo._base");
-
-
-
-
-
-
-
-
-
 }
 
 if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo._base.window"] = true;
 dojo.provide("dojo._base.window");
 
+
 /*=====
 dojo.doc = {
        // summary:
@@ -4547,7 +4563,7 @@ dojo.body = function(){
        // Note: document.body is not defined for a strict xhtml document
        // Would like to memoize this, but dojo.doc can change vi dojo.withDoc().
        return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node
-}
+};
 
 dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){
        // summary:
@@ -4560,9 +4576,9 @@ dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocu
        dojo.doc = globalDocument;
 };
 
-dojo.withGlobal = function(    /*Object*/globalObject, 
-                                                       /*Function*/callback, 
-                                                       /*Object?*/thisObject, 
+dojo.withGlobal = function(    /*Object*/globalObject,
+                                                       /*Function*/callback,
+                                                       /*Object?*/thisObject,
                                                        /*Array?*/cbArguments){
        // summary:
        //              Invoke callback with globalObject as dojo.global and
@@ -4581,11 +4597,11 @@ dojo.withGlobal = function(     /*Object*/globalObject,
        }finally{
                dojo.global = oldGlob;
        }
-}
+};
 
-dojo.withDoc = function(       /*DocumentElement*/documentObject, 
-                                                       /*Function*/callback, 
-                                                       /*Object?*/thisObject, 
+dojo.withDoc = function(       /*DocumentElement*/documentObject,
+                                                       /*Function*/callback,
+                                                       /*Object?*/thisObject,
                                                        /*Array?*/cbArguments){
        // summary:
        //              Invoke callback with documentObject as dojo.doc.
@@ -4616,7 +4632,6 @@ dojo.withDoc = function(  /*DocumentElement*/documentObject,
                dojo.isQuirks = oldQ;
        }
 };
-       
 
 }
 
@@ -4625,27 +4640,26 @@ dojo._hasResource["dojo._base.event"] = true;
 dojo.provide("dojo._base.event");
 
 
+
 // this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
 
 (function(){
        // DOM event listener machinery
        var del = (dojo._event_listener = {
                add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){
-                       if(!node){return;} 
+                       if(!node){return;}
                        name = del._normalizeEventName(name);
                        fp = del._fixCallback(name, fp);
-                       var oname = name;
                        if(
-                                                               !dojo.isIE && 
+                                                               !dojo.isIE &&
                                                                (name == "mouseenter" || name == "mouseleave")
                        ){
                                var ofp = fp;
-                               //oname = name;
                                name = (name == "mouseenter") ? "mouseover" : "mouseout";
                                fp = function(e){
                                        if(!dojo.isDescendant(e.relatedTarget, node)){
                                                // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable.
-                                               return ofp.call(this, e); 
+                                               return ofp.call(this, e);
                                        }
                                }
                        }
@@ -4686,7 +4700,7 @@ dojo.provide("dojo._base.event");
                },
                _fixEvent: function(evt, sender){
                        // _fixCallback only attaches us to keypress.
-                       // Switch on evt.type anyway because we might 
+                       // Switch on evt.type anyway because we might
                        // be called directly from dojo.fixEvent.
                        switch(evt.type){
                                case "keypress":
@@ -4696,26 +4710,26 @@ dojo.provide("dojo._base.event");
                        return evt;
                },
                _setKeyChar: function(evt){
-                       evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : '';
+                       evt.keyChar = evt.charCode >= 32 ? String.fromCharCode(evt.charCode) : '';
                        evt.charOrCode = evt.keyChar || evt.keyCode;
                },
                // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE
                // we map those virtual key codes to ascii here
                // not valid for all (non-US) keyboards, so maybe we shouldn't bother
-               _punctMap: { 
-                       106:42, 
-                       111:47, 
-                       186:59, 
-                       187:43, 
-                       188:44, 
-                       189:45, 
-                       190:46, 
-                       191:47, 
-                       192:96, 
-                       219:91, 
-                       220:92, 
-                       221:93, 
-                       222:39 
+               _punctMap: {
+                       106:42,
+                       111:47,
+                       186:59,
+                       187:43,
+                       188:44,
+                       189:45,
+                       190:46,
+                       191:47,
+                       192:96,
+                       219:91,
+                       220:92,
+                       221:93,
+                       222:39
                }
        });
 
@@ -4730,7 +4744,7 @@ dojo.provide("dojo._base.event");
                // sender: DOMNode
                //              node to treat as "currentTarget"
                return del._fixEvent(evt, sender);
-       }
+       };
 
        dojo.stopEvent = function(/*Event*/ evt){
                // summary:
@@ -4741,7 +4755,7 @@ dojo.provide("dojo._base.event");
                evt.preventDefault();
                evt.stopPropagation();
                // NOTE: below, this method is overridden for IE
-       }
+       };
 
        // the default listener to use on dontFix nodes, overriden for IE
        var node_listener = dojo._listener;
@@ -4756,16 +4770,16 @@ dojo.provide("dojo._base.event");
                // create a listener
                var h = l.add(obj, event, dojo.hitch(context, method));
                // formerly, the disconnect package contained "l" directly, but if client code
-               // leaks the disconnect package (by connecting it to a node), referencing "l" 
+               // leaks the disconnect package (by connecting it to a node), referencing "l"
                // compounds the problem.
                // instead we return a listener id, which requires custom _disconnect below.
                // return disconnect package
                return [ obj, event, h, lid ];
-       }
+       };
 
        dojo._disconnect = function(obj, event, handle, listener){
                ([dojo._listener, del, node_listener][listener]).remove(obj, event, handle);
-       }
+       };
 
        // Constants
 
@@ -4895,7 +4909,7 @@ dojo.provide("dojo._base.event");
        };
 =====*/
 
-               if(dojo.isIE){
+               if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){
                dojo.mouseButtons = {
                        LEFT:   1,
                        MIDDLE: 4,
@@ -4920,7 +4934,7 @@ dojo.provide("dojo._base.event");
                }
        
                // IE event normalization
-       if(dojo.isIE){ 
+       if(dojo.isIE){
                var _trySetKeyCode = function(e, code){
                        try{
                                // squelch errors when keyCode is read-only
@@ -4929,7 +4943,7 @@ dojo.provide("dojo._base.event");
                        }catch(e){
                                return 0;
                        }
-               }
+               };
 
                // by default, use the standard listener
                var iel = dojo._listener;
@@ -4938,7 +4952,7 @@ dojo.provide("dojo._base.event");
                if(!dojo.config._allow_leaks){
                        // custom listener that handles leak protection for DOM events
                        node_listener = iel = dojo._ie_listener = {
-                               // support handler indirection: event handler functions are 
+                               // support handler indirection: event handler functions are
                                // referenced here. Event dispatchers hold only indices.
                                handlers: [],
                                // add a listener to an object
@@ -4991,7 +5005,7 @@ dojo.provide("dojo._base.event");
                        },
                        remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){
                                event = del._normalizeEventName(event);
-                               iel.remove(node, event, handle); 
+                               iel.remove(node, event, handle);
                                if(event=="onkeypress"){
                                        var kd = node.onkeydown;
                                        if(--kd._stealthKeydownRefs <= 0){
@@ -5017,11 +5031,11 @@ dojo.provide("dojo._base.event");
                                //              node to treat as "currentTarget"
                                if(!evt){
                                        var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window;
-                                       evt = w.event; 
+                                       evt = w.event;
                                }
                                if(!evt){return(evt);}
-                               evt.target = evt.srcElement; 
-                               evt.currentTarget = (sender || evt.srcElement); 
+                               evt.target = evt.srcElement;
+                               evt.currentTarget = (sender || evt.srcElement);
                                evt.layerX = evt.offsetX;
                                evt.layerY = evt.offsetY;
                                // FIXME: scroll position query is duped from dojo.html to
@@ -5034,14 +5048,16 @@ dojo.provide("dojo._base.event");
                                var offset = dojo._getIeDocumentElementOffset();
                                evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x;
                                evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y;
-                               if(evt.type == "mouseover"){ 
+                               if(evt.type == "mouseover"){
                                        evt.relatedTarget = evt.fromElement;
                                }
-                               if(evt.type == "mouseout"){ 
+                               if(evt.type == "mouseout"){
                                        evt.relatedTarget = evt.toElement;
                                }
-                               evt.stopPropagation = del._stopPropagation;
-                               evt.preventDefault = del._preventDefault;
+                               if (dojo.isIE < 9 || dojo.isQuirks) {
+                                       evt.stopPropagation = del._stopPropagation;
+                                       evt.preventDefault = del._preventDefault;
+                               }
                                return del._fixKeys(evt);
                        },
                        _fixKeys: function(evt){
@@ -5075,38 +5091,41 @@ dojo.provide("dojo._base.event");
                                var k=evt.keyCode;
                                // These are Windows Virtual Key Codes
                                // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp
-                               var unprintable = k!=13 && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222);
+                               var unprintable = (k!=13 || (dojo.isIE >= 9 && !dojo.isQuirks)) && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222);
+
                                // synthesize keypress for most unprintables and CTRL-keys
                                if(unprintable||evt.ctrlKey){
                                        var c = unprintable ? 0 : k;
                                        if(evt.ctrlKey){
                                                if(k==3 || k==13){
-                                                       return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively 
-                                               }else if(c>95 && c<106){ 
+                                                       return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively
+                                               }else if(c>95 && c<106){
                                                        c -= 48; // map CTRL-[numpad 0-9] to ASCII
-                                               }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ 
+                                               }else if((!evt.shiftKey)&&(c>=65&&c<=90)){
                                                        c += 32; // map CTRL-[A-Z] to lowercase
-                                               }else{ 
+                                               }else{
                                                        c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII
                                                }
                                        }
                                        // simulate a keypress event
                                        var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c});
                                        kp.call(evt.currentTarget, faux);
-                                       evt.cancelBubble = faux.cancelBubble;
+                                       if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){
+                                               evt.cancelBubble = faux.cancelBubble;
+                                       }
                                        evt.returnValue = faux.returnValue;
                                        _trySetKeyCode(evt, faux.keyCode);
                                }
                        },
                        // Called in Event scope
                        _stopPropagation: function(){
-                               this.cancelBubble = true; 
+                               this.cancelBubble = true;
                        },
                        _preventDefault: function(){
                                // Setting keyCode to 0 is the only way to prevent certain keypresses (namely
                                // ctrl-combinations that correspond to menu accelerator keys).
                                // Otoh, it prevents upstream listeners from getting this information
-                               // Try to split the difference here by clobbering keyCode only for ctrl 
+                               // Try to split the difference here by clobbering keyCode only for ctrl
                                // combinations. If you still need to access the key upstream, bubbledKeyCode is
                                // provided as a workaround.
                                this.bubbledKeyCode = this.keyCode;
@@ -5116,23 +5135,23 @@ dojo.provide("dojo._base.event");
                });
                                
                // override stopEvent for IE
-               dojo.stopEvent = function(evt){
+               dojo.stopEvent = (dojo.isIE < 9 || dojo.isQuirks) ? function(evt){
                        evt = evt || window.event;
                        del._stopPropagation.call(evt);
                        del._preventDefault.call(evt);
-               }
+               } : dojo.stopEvent;
        }
        
        del._synthesizeEvent = function(evt, props){
                        var faux = dojo.mixin({}, evt, props);
                        del._setKeyChar(faux);
-                       // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); 
+                       // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault);
                        // but it throws an error when preventDefault is invoked on Safari
                        // does Event.preventDefault not support "apply" on Safari?
-                       faux.preventDefault = function(){ evt.preventDefault(); }; 
-                       faux.stopPropagation = function(){ evt.stopPropagation(); }; 
+                       faux.preventDefault = function(){ evt.preventDefault(); };
+                       faux.stopPropagation = function(){ evt.stopPropagation(); };
                        return faux;
-       }
+       };
        
                // Opera event normalization
        if(dojo.isOpera){
@@ -5183,12 +5202,12 @@ dojo.provide("dojo._base.event");
                                                        var c = unprintable ? 0 : k;
                                                        if(evt.ctrlKey){
                                                                if(k==3 || k==13){
-                                                                       return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively 
-                                                               }else if(c>95 && c<106){ 
+                                                                       return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively
+                                                               }else if(c>95 && c<106){
                                                                        c -= 48; // map CTRL-[numpad 0-9] to ASCII
-                                                               }else if(!evt.shiftKey && c>=65 && c<=90){ 
+                                                               }else if(!evt.shiftKey && c>=65 && c<=90){
                                                                        c += 32; // map CTRL-[A-Z] to lowercase
-                                                               }else{ 
+                                                               }else{
                                                                        c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII
                                                                }
                                                        }
@@ -5245,25 +5264,26 @@ if(dojo.isIE){
                        }
                }
                return r;
-       }
+       };
        dojo._getIeDispatcher = function(){
                // ensure the returned function closes over nothing ("new Function" apparently doesn't close)
                return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function
-       }
+       };
        // keep this out of the closure to reduce RAM allocation
        dojo._event_listener._fixCallback = function(fp){
                var f = dojo._event_listener._fixEvent;
                return function(e){ return fp.call(this, f(e, this)); };
-       }
+       };
 }
 
 }
 
 if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo._base.html"] = true;
-
 dojo.provide("dojo._base.html");
 
+
+
 // FIXME: need to add unit tests for all the semi-public methods
 
 try{
@@ -5307,13 +5327,13 @@ dojo.byId = function(id, doc){
        //      |       }
 =====*/
 
-if(dojo.isIE || dojo.isOpera){
+if(dojo.isIE){
        dojo.byId = function(id, doc){
                if(typeof id != "string"){
                        return id;
                }
                var _d = doc || dojo.doc, te = _d.getElementById(id);
-               // attributes.id.value is better than just id in case the 
+               // attributes.id.value is better than just id in case the
                // user has a name=id inside a form
                if(te && (te.attributes.id.value == id || te.id == id)){
                        return te;
@@ -5334,8 +5354,9 @@ if(dojo.isIE || dojo.isOpera){
        };
 }else{
        dojo.byId = function(id, doc){
-               // inline'd type check
-               return (typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id; // DomNode
+               // inline'd type check.
+               // be sure to return null per documentation, to match IE branch.
+               return ((typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id) || null; // DomNode
        };
 }
 /*=====
@@ -5418,16 +5439,16 @@ if(dojo.isIE || dojo.isOpera){
        };
 
        dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){
-               //      summary: 
+               //      summary:
                //              Enable or disable selection on a node
                //      node:
                //              id or reference to node
                //      selectable:
-               //              state to put the node in. false indicates unselectable, true 
+               //              state to put the node in. false indicates unselectable, true
                //              allows selection.
                //      example:
                //      Make the node id="bar" unselectable
-               //      |       dojo.setSelectable("bar"); 
+               //      |       dojo.setSelectable("bar");
                //      example:
                //      Make the node id="bar" selectable
                //      |       dojo.setSelectable("bar", true);
@@ -5510,7 +5531,7 @@ if(dojo.isIE || dojo.isOpera){
 
                refNode = byId(refNode);
                if(typeof node == "string"){ // inline'd type check
-                       node = node.charAt(0) == "<" ? d._toDom(node, refNode.ownerDocument) : byId(node);
+                       node = /^\s*</.test(node) ? d._toDom(node, refNode.ownerDocument) : byId(node);
                }
                if(typeof position == "number"){ // inline'd type check
                        var cn = refNode.childNodes;
@@ -5545,7 +5566,7 @@ if(dojo.isIE || dojo.isOpera){
                        }
                }
                return node; // DomNode
-       }
+       };
 
        // Box functions will assume this model.
        // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode.
@@ -5557,7 +5578,7 @@ if(dojo.isIE || dojo.isOpera){
        dojo.boxModel = "content-box";
 
        // We punt per-node box mode testing completely.
-       // If anybody cares, we can provide an additional (optional) unit 
+       // If anybody cares, we can provide an additional (optional) unit
        // that overrides existing code to include per-node box sensitivity.
 
        // Opera documentation claims that Opera 9 uses border-box in BackCompat mode.
@@ -5577,10 +5598,10 @@ if(dojo.isIE || dojo.isOpera){
        // getComputedStyle drives most of the style code.
        // Wherever possible, reuse the returned object.
        //
-       // API functions below that need to access computed styles accept an 
+       // API functions below that need to access computed styles accept an
        // optional computedStyle parameter.
        // If this parameter is omitted, the functions will call getComputedStyle themselves.
-       // This way, calling code can access computedStyle once, and then pass the reference to 
+       // This way, calling code can access computedStyle once, and then pass the reference to
        // multiple API functions.
 
 /*=====
@@ -5619,7 +5640,7 @@ if(dojo.isIE || dojo.isOpera){
        // Although we normally eschew argument validation at this
        // level, here we test argument 'node' for (duck)type,
        // by testing nodeType, ecause 'document' is the 'parentNode' of 'body'
-       // it is frequently sent to this function even 
+       // it is frequently sent to this function even
        // though it is not Element.
        var gcs;
                if(d.isWebKit){
@@ -5680,7 +5701,7 @@ if(dojo.isIE || dojo.isOpera){
                                runtimeStyle.left = rsLeft;
                        }
                        return avalue;
-               }
+               };
        }
                var px = d._toPixelValue;
 
@@ -5708,7 +5729,7 @@ if(dojo.isIE || dojo.isOpera){
        };
 
                dojo._getOpacity =
-                       d.isIE ? function(node){
+                       d.isIE < 9 ? function(node){
                        try{
                                return af(node).Opacity / 100; // Number
                        }catch(e){
@@ -5735,7 +5756,7 @@ if(dojo.isIE || dojo.isOpera){
        =====*/
 
        dojo._setOpacity =
-                               d.isIE ? function(/*DomNode*/node, /*Number*/opacity){
+                               d.isIE < 9 ? function(/*DomNode*/node, /*Number*/opacity){
                        var ov = opacity * 100, opaque = opacity == 1;
                        node.style.zoom = opaque ? "" : 1;
 
@@ -5807,7 +5828,7 @@ if(dojo.isIE || dojo.isOpera){
                //              Also when getting values, use specific style names,
                //              like "borderBottomWidth" instead of "border" since compound values like
                //              "border" are not necessarily reflected as expected.
-               //              If you want to get node dimensions, use `dojo.marginBox()`, 
+               //              If you want to get node dimensions, use `dojo.marginBox()`,
                //              `dojo.contentBox()` or `dojo.position()`.
                //      node:
                //              id or reference to node to get/set style for
@@ -5876,7 +5897,7 @@ if(dojo.isIE || dojo.isOpera){
                        return s;
                }
                return (args == 1) ? s : _toStyleValue(n, style, s[style] || n.style[style]); /* CSS2Properties||String||Number */
-       }
+       };
 
        // =============================
        // Box Functions
@@ -5889,13 +5910,13 @@ if(dojo.isIE || dojo.isOpera){
                //      description:
                //              Returns an object with `w`, `h`, `l`, `t` properties:
                //      |               l/t = left/top padding (respectively)
-               //      |               w = the total of the left and right padding 
+               //      |               w = the total of the left and right padding
                //      |               h = the total of the top and bottom padding
                //              If 'node' has position, l/t forms the origin for child nodes.
                //              The w/h are used for calculating boxes.
                //              Normally application code will not need to invoke this
                //              directly, and will use the ...box... functions instead.
-               var 
+               var
                        s = computedStyle||gcs(n),
                        l = px(n, s.paddingLeft),
                        t = px(n, s.paddingTop);
@@ -5905,7 +5926,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: l+px(n, s.paddingRight),
                        h: t+px(n, s.paddingBottom)
                };
-       }
+       };
 
        dojo._getBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){
                //      summary:
@@ -5919,7 +5940,7 @@ if(dojo.isIE || dojo.isOpera){
                //              The w/h are used for calculating boxes.
                //              Normally application code will not need to invoke this
                //              directly, and will use the ...box... functions instead.
-               var 
+               var
                        ne = "none",
                        s = computedStyle||gcs(n),
                        bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0),
@@ -5930,7 +5951,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0),
                        h: bt + (s.borderBottomStyle!=ne ? px(n, s.borderBottomWidth) : 0)
                };
-       }
+       };
 
        dojo._getPadBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){
                //      summary:
@@ -5944,7 +5965,7 @@ if(dojo.isIE || dojo.isOpera){
                //              The w/h are used for calculating boxes.
                //              Normally application code will not need to invoke this
                //              directly, and will use the ...box... functions instead.
-               var 
+               var
                        s = computedStyle||gcs(n),
                        p = d._getPadExtents(n, s),
                        b = d._getBorderExtents(n, s);
@@ -5954,7 +5975,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: p.w + b.w,
                        h: p.h + b.h
                };
-       }
+       };
 
        dojo._getMarginExtents = function(n, computedStyle){
                //      summary:
@@ -5968,7 +5989,7 @@ if(dojo.isIE || dojo.isOpera){
                //              The w/h are used for calculating boxes.
                //              Normally application code will not need to invoke this
                //              directly, and will use the ...box... functions instead.
-               var 
+               var
                        s = computedStyle||gcs(n),
                        l = px(n, s.marginLeft),
                        t = px(n, s.marginTop),
@@ -5976,9 +5997,9 @@ if(dojo.isIE || dojo.isOpera){
                        b = px(n, s.marginBottom);
                if(d.isWebKit && (s.position != "absolute")){
                        // FIXME: Safari's version of the computed right margin
-                       // is the space between our right edge and the right edge 
+                       // is the space between our right edge and the right edge
                        // of our offsetParent.
-                       // What we are looking for is the actual margin value as 
+                       // What we are looking for is the actual margin value as
                        // determined by CSS.
                        // Hack solution is to assume left/right margins are the same.
                        r = l;
@@ -5989,7 +6010,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: l+r,
                        h: t+b
                };
-       }
+       };
 
        // Box getters work in any box context because offsetWidth/clientWidth
        // are invariant wrt box context
@@ -5997,10 +6018,10 @@ if(dojo.isIE || dojo.isOpera){
        // They do *not* work for display: inline objects that have padding styles
        // because the user agent ignores padding (it's bogus styling in any case)
        //
-       // Be careful with IMGs because they are inline or block depending on 
+       // Be careful with IMGs because they are inline or block depending on
        // browser and browser mode.
 
-       // Although it would be easier to read, there are not separate versions of 
+       // Although it would be easier to read, there are not separate versions of
        // _getMarginBox for each browser because:
        // 1. the branching is not expensive
        // 2. factoring the shared code wastes cycles (function call overhead)
@@ -6044,9 +6065,23 @@ if(dojo.isIE || dojo.isOpera){
                        l: l,
                        t: t,
                        w: node.offsetWidth + me.w,
-                       h: node.offsetHeight + me.h 
+                       h: node.offsetHeight + me.h
                };
        }
+       
+       dojo._getMarginSize = function(/*DomNode*/node, /*Object*/computedStyle){
+               // summary:
+               //      returns an object that encodes the width and height of
+               //      the node's margin box
+               node = byId(node);
+               var me = d._getMarginExtents(node, computedStyle || gcs(node));
+
+               var size = node.getBoundingClientRect();
+               return {
+                       w: (size.right - size.left) + me.w,
+                       h: (size.bottom - size.top) + me.h
+               }
+       }
 
        dojo._getContentBox = function(node, computedStyle){
                // summary:
@@ -6075,7 +6110,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: w - pe.w - be.w,
                        h: h - pe.h - be.h
                };
-       }
+       };
 
        dojo._getBorderBox = function(node, computedStyle){
                var s = computedStyle || gcs(node),
@@ -6088,7 +6123,7 @@ if(dojo.isIE || dojo.isOpera){
                        w: cb.w + pe.w,
                        h: cb.h + pe.h
                };
-       }
+       };
 
        // Box setters depend on box context because interpretation of width/height styles
        // vary wrt box context.
@@ -6099,12 +6134,12 @@ if(dojo.isIE || dojo.isOpera){
        // Beware of display: inline objects that have padding styles
        // because the user agent ignores padding (it's a bogus setup anyway)
        //
-       // Be careful with IMGs because they are inline or block depending on 
+       // Be careful with IMGs because they are inline or block depending on
        // browser and browser mode.
        //
        // Elements other than DIV may have special quirks, like built-in
        // margins or padding, or values not detectable via computedStyle.
-       // In particular, margins on TABLE do not seems to appear 
+       // In particular, margins on TABLE do not seems to appear
        // at all in computedStyle on Mozilla.
 
        dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){
@@ -6130,14 +6165,14 @@ if(dojo.isIE || dojo.isOpera){
                if(!isNaN(t)){ s.top = t + u; }
                if(w >= 0){ s.width = w + u; }
                if(h >= 0){ s.height = h + u; }
-       }
+       };
 
        dojo._isButtonTag = function(/*DomNode*/node) {
                // summary:
                //              True if the node is BUTTON or INPUT.type="button".
                return node.tagName == "BUTTON"
                        || node.tagName=="INPUT" && (node.getAttribute("type")||'').toUpperCase() == "BUTTON"; // boolean
-       }
+       };
 
        dojo._usesBorderBox = function(/*DomNode*/node){
                //      summary:
@@ -6152,7 +6187,7 @@ if(dojo.isIE || dojo.isOpera){
 
                var n = node.tagName;
                return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean
-       }
+       };
 
        dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){
                //      summary:
@@ -6164,7 +6199,7 @@ if(dojo.isIE || dojo.isOpera){
                        if(heightPx >= 0){ heightPx += pb.h; }
                }
                d._setBox(node, NaN, NaN, widthPx, heightPx);
-       }
+       };
 
        dojo._setMarginBox = function(/*DomNode*/node,  /*Number?*/leftPx, /*Number?*/topPx,
                                                                                                        /*Number?*/widthPx, /*Number?*/heightPx,
@@ -6196,7 +6231,7 @@ if(dojo.isIE || dojo.isOpera){
                if(widthPx >= 0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); }
                if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); }
                d._setBox(node, leftPx, topPx, widthPx, heightPx);
-       }
+       };
 
        var _nilExtents = { l:0, t:0, w:0, h:0 };
 
@@ -6231,7 +6266,7 @@ if(dojo.isIE || dojo.isOpera){
                
                var n = byId(node), s = gcs(n), b = box;
                return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object
-       }
+       };
 
        dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){
                //      summary:
@@ -6256,14 +6291,14 @@ if(dojo.isIE || dojo.isOpera){
                //              All properties are optional if passed.
                var n = byId(node), s = gcs(n), b = box;
                return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object
-       }
+       };
 
        // =============================
-       // Positioning 
+       // Positioning
        // =============================
 
        var _sumAncestorProperties = function(node, prop){
-               if(!(node = (node||0).parentNode)){return 0}
+               if(!(node = (node||0).parentNode)){return 0;}
                var val, retVal = 0, _b = d.body();
                while(node && node.style){
                        if(gcs(node).position == "fixed"){
@@ -6279,19 +6314,19 @@ if(dojo.isIE || dojo.isOpera){
                        node = node.parentNode;
                }
                return retVal;  //      integer
-       }
+       };
 
        dojo._docScroll = function(){
                var n = d.global;
-               return "pageXOffset" in n? { x:n.pageXOffset, y:n.pageYOffset } :
-                       (n=d.doc.documentElement, n.clientHeight? { x:d._fixIeBiDiScrollLeft(n.scrollLeft), y:n.scrollTop } :
-                       (n=d.body(), { x:n.scrollLeft||0, y:n.scrollTop||0 }));
+               return "pageXOffset" in n
+                       ? { x:n.pageXOffset, y:n.pageYOffset }
+                       : (n = d.isQuirks? d.doc.body : d.doc.documentElement, { x:d._fixIeBiDiScrollLeft(n.scrollLeft || 0), y:n.scrollTop || 0 });
        };
 
        dojo._isBodyLtr = function(){
                return "_bodyLtr" in d? d._bodyLtr :
-                       d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean 
-       }
+                       d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean
+       };
 
                dojo._getIeDocumentElementOffset = function(){
                //      summary:
@@ -6312,7 +6347,7 @@ if(dojo.isIE || dojo.isOpera){
 
                //NOTE: assumes we're being called in an IE browser
 
-               var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks 
+               var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks
 
                if(d.isIE < 8){
                        var r = de.getBoundingClientRect(); // works well for IE6+
@@ -6337,18 +6372,22 @@ if(dojo.isIE || dojo.isOpera){
        };
        
        dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){
-               // In RTL direction, scrollLeft should be a negative value, but IE < 8
+               // In RTL direction, scrollLeft should be a negative value, but IE
                // returns a positive one. All codes using documentElement.scrollLeft
                // must call this function to fix this error, otherwise the position
                // will offset to right when there is a horizontal scrollbar.
 
-                               var dd = d.doc;
-               if(d.isIE < 8 && !d._isBodyLtr()){
-                       var de = d.isQuirks ? dd.body : dd.documentElement;
-                       return scrollLeft + de.clientWidth - de.scrollWidth; // Integer
+                               var ie = d.isIE;
+               if(ie && !d._isBodyLtr()){
+                       var qk = d.isQuirks,
+                               de = qk ? d.doc.body : d.doc.documentElement;
+                       if(ie == 6 && !qk && d.global.frameElement && de.scrollHeight > de.clientHeight){
+                               scrollLeft += de.clientLeft; // workaround ie6+strict+rtl+iframe+vertical-scrollbar bug where clientWidth is too small by clientLeft pixels
+                       }
+                       return (ie < 8 || qk) ? (scrollLeft + de.clientWidth - de.scrollWidth) : -scrollLeft; // Integer
                }
                                return scrollLeft; // Integer
-       }
+       };
 
        // FIXME: need a setter for coords or a moveTo!!
        dojo._abs = dojo.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){
@@ -6366,10 +6405,9 @@ if(dojo.isIE || dojo.isOpera){
                //              Uses the border-box model (inclusive of border and padding but
                //              not margin).  Does not act as a setter.
 
-               var db = d.body(), dh = db.parentNode, ret;
                node = byId(node);
-               if(node["getBoundingClientRect"]){
-                       // IE6+, FF3+, super-modern WebKit, and Opera 9.6+ all take this branch
+               var     db = d.body(),
+                       dh = db.parentNode,
                        ret = node.getBoundingClientRect();
                        ret = { x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top };
                                        if(d.isIE){
@@ -6386,60 +6424,7 @@ if(dojo.isIE || dojo.isOpera){
                                ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth);
                                ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth);
                        }
-                               }else{
-                       // FF2 and older WebKit
-                       ret = {
-                               x: 0,
-                               y: 0,
-                               w: node.offsetWidth,
-                               h: node.offsetHeight
-                       };
-                       if(node["offsetParent"]){
-                               ret.x -= _sumAncestorProperties(node, "scrollLeft");
-                               ret.y -= _sumAncestorProperties(node, "scrollTop");
-
-                               var curnode = node;
-                               do{
-                                       var n = curnode.offsetLeft,
-                                               t = curnode.offsetTop;
-                                       ret.x += isNaN(n) ? 0 : n;
-                                       ret.y += isNaN(t) ? 0 : t;
-
-                                       cs = gcs(curnode);
-                                       if(curnode != node){
-                                                               if(d.isMoz){
-                                                       // tried left+right with differently sized left/right borders
-                                                       // it really is 2xleft border in FF, not left+right, even in RTL!
-                                                       ret.x += 2 * px(curnode,cs.borderLeftWidth);
-                                                       ret.y += 2 * px(curnode,cs.borderTopWidth);
-                                               }else{
-                                                                       ret.x += px(curnode, cs.borderLeftWidth);
-                                                       ret.y += px(curnode, cs.borderTopWidth);
-                                                               }
-                                                       }
-                                       // static children in a static div in FF2 are affected by the div's border as well
-                                       // but offsetParent will skip this div!
-                                                       if(d.isMoz && cs.position=="static"){
-                                               var parent=curnode.parentNode;
-                                               while(parent!=curnode.offsetParent){
-                                                       var pcs=gcs(parent);
-                                                       if(pcs.position=="static"){
-                                                               ret.x += px(curnode,pcs.borderLeftWidth);
-                                                               ret.y += px(curnode,pcs.borderTopWidth);
-                                                       }
-                                                       parent=parent.parentNode;
-                                               }
-                                       }
-                                                       curnode = curnode.offsetParent;
-                               }while((curnode != dh) && curnode);
-                       }else if(node.x && node.y){
-                               ret.x += isNaN(node.x) ? 0 : node.x;
-                               ret.y += isNaN(node.y) ? 0 : node.y;
-                       }
-               }
-               // account for document scrolling
-               // if offsetParent is used, ret value already includes scroll position
-               // so we may have to actually remove that value if !includeScroll
+                               // account for document scrolling
                if(includeScroll){
                        var scroll = d._docScroll();
                        ret.x += scroll.x;
@@ -6447,7 +6432,7 @@ if(dojo.isIE || dojo.isOpera){
                }
 
                return ret; // Object
-       }
+       };
 
        dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){
                //      summary:
@@ -6469,7 +6454,7 @@ if(dojo.isIE || dojo.isOpera){
                mb.x = abs.x;
                mb.y = abs.y;
                return mb;
-       }
+       };
 
        // =============================
        // Element attribute Functions
@@ -6531,7 +6516,7 @@ if(dojo.isIE || dojo.isOpera){
                //              given element, and false otherwise
                var lc = name.toLowerCase();
                return _forcePropNames[_propNames[lc] || name] || _hasAttr(byId(node), _attrNames[lc] || name); // Boolean
-       }
+       };
 
        var _evtHdlrMap = {}, _ctr = 0,
                _attrId = dojo._scopeName + "attrid",
@@ -6701,7 +6686,7 @@ if(dojo.isIE || dojo.isOpera){
                // node's attribute
                // we need _hasAttr() here to guard against IE returning a default value
                return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything
-       }
+       };
 
        dojo.removeAttr = function(/*DomNode|String*/ node, /*String*/ name){
                //      summary:
@@ -6711,7 +6696,7 @@ if(dojo.isIE || dojo.isOpera){
                //      name:
                //              the name of the attribute to remove
                byId(node).removeAttribute(_fixAttrName(name));
-       }
+       };
 
        dojo.getNodeProp = function(/*DomNode|String*/ node, /*String*/ name){
                //      summary:
@@ -6730,7 +6715,7 @@ if(dojo.isIE || dojo.isOpera){
                // node's attribute
                var attrName = _attrNames[lc] || name;
                return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything
-       }
+       };
 
        dojo.create = function(tag, attrs, refNode, pos){
                //      summary:
@@ -6745,7 +6730,7 @@ if(dojo.isIE || dojo.isOpera){
                //              Attributes are set by passing the optional object through `dojo.attr`.
                //              See `dojo.attr` for noted caveats and nuances, and API if applicable.
                //|
-               //              Placement is done via `dojo.place`, assuming the new node to be the action 
+               //              Placement is done via `dojo.place`, assuming the new node to be the action
                //              node, passing along the optional reference node and position.
                //
                // tag: String|DomNode
@@ -6783,7 +6768,7 @@ if(dojo.isIE || dojo.isOpera){
                //      |       var n = dojo.create("div", null, dojo.body());
                //
                // example:
-               //      Create an UL, and populate it with LI's. Place the list as the first-child of a 
+               //      Create an UL, and populate it with LI's. Place the list as the first-child of a
                //      node with id="someId":
                //      |       var ul = dojo.create("ul", null, "someId", "first");
                //      |       var items = ["one", "two", "three", "four"];
@@ -6813,7 +6798,7 @@ if(dojo.isIE || dojo.isOpera){
                if(attrs){ d.attr(tag, attrs); }
                if(refNode){ d.place(tag, refNode, pos); }
                return tag; // DomNode
-       }
+       };
 
        /*=====
        dojo.empty = function(node){
@@ -6881,11 +6866,13 @@ if(dojo.isIE || dojo.isOpera){
        // generate start/end tag strings to use
        // for the injection for each special tag wrap case.
        for(var param in tagWrap){
-               var tw = tagWrap[param];
-               tw.pre  = param == "option" ? '<select multiple="multiple">' : "<" + tw.join("><") + ">";
-               tw.post = "</" + tw.reverse().join("></") + ">";
-               // the last line is destructive: it reverses the array,
-               // but we don't care at this point
+               if(tagWrap.hasOwnProperty(param)){
+                       var tw = tagWrap[param];
+                       tw.pre  = param == "option" ? '<select multiple="multiple">' : "<" + tw.join("><") + ">";
+                       tw.post = "</" + tw.reverse().join("></") + ">";
+                       // the last line is destructive: it reverses the array,
+                       // but we don't care at this point
+               }
        }
 
        d._toDom = function(frag, doc){
@@ -6928,7 +6915,7 @@ if(dojo.isIE || dojo.isOpera){
                        df.appendChild(fc);
                }
                return df; // DOMNode
-       }
+       };
 
        // =============================
        // (CSS) Class Functions
@@ -6954,6 +6941,7 @@ if(dojo.isIE || dojo.isOpera){
        };
 
        var spaces = /\s+/, a1 = [""],
+               fakeNode = {},
                str2array = function(s){
                        if(typeof s == "string" || s instanceof String){
                                if(s.indexOf(" ") < 0){
@@ -7059,6 +7047,39 @@ if(dojo.isIE || dojo.isOpera){
                if(node[_className] != cls){ node[_className] = cls; }
        };
 
+       dojo.replaceClass = function(/*DomNode|String*/node, /*String|Array*/addClassStr, /*String|Array?*/removeClassStr){
+               // summary:
+               //              Replaces one or more classes on a node if not present.
+               //              Operates more quickly than calling dojo.removeClass and dojo.addClass
+               // node:
+               //              String ID or DomNode reference to remove the class from.
+               // addClassStr:
+               //              A String class name to add, or several space-separated class names,
+               //              or an array of class names.
+               // removeClassStr:
+               //              A String class name to remove, or several space-separated class names,
+               //              or an array of class names.
+               //
+               // example:
+               //      |       dojo.replaceClass("someNode", "add1 add2", "remove1 remove2");
+               //
+               // example:
+               //      Replace all classes with addMe
+               //      |       dojo.replaceClass("someNode", "addMe");
+               //
+               // example:
+               //      Available in `dojo.NodeList()` for multiple toggles
+               //      |       dojo.query(".findMe").replaceClass("addMe", "removeMe");
+
+        node = byId(node);
+               fakeNode.className = node.className;
+               dojo.removeClass(fakeNode, removeClassStr);
+               dojo.addClass(fakeNode, addClassStr);
+               if(node.className !== fakeNode.className){
+                       node.className = fakeNode.className;
+               }
+       };
+
        dojo.toggleClass = function(/*DomNode|String*/node, /*String|Array*/classStr, /*Boolean?*/condition){
                //      summary:
                //              Adds a class to node if not present, or removes if present.
@@ -7093,6 +7114,9 @@ dojo.provide("dojo._base.NodeList");
 
 
 
+
+
+
 (function(){
 
        var d = dojo;
@@ -7330,7 +7354,7 @@ dojo.provide("dojo._base.NodeList");
        });
 
        // add forEach actions
-       d.forEach(["connect", "addClass", "removeClass", "toggleClass", "empty", "removeAttr"], function(name){
+       d.forEach(["connect", "addClass", "removeClass", "replaceClass", "toggleClass", "empty", "removeAttr"], function(name){
                nlp[name] = adaptAsForEach(d[name]);
        });
 
@@ -7388,7 +7412,7 @@ dojo.provide("dojo._base.NodeList");
 
                _cloneNode: function(/*DOMNode*/ node){
                        // summary:
-                       //              private utiltity to clone a node. Not very interesting in the vanilla
+                       //              private utility to clone a node. Not very interesting in the vanilla
                        //              dojo.NodeList case, but delegates could do interesting things like
                        //              clone event handlers if that is derivable from the node.
                        return node.cloneNode(true);
@@ -7482,7 +7506,7 @@ dojo.provide("dojo._base.NodeList");
                        if(this._parent){
                                return this._parent;
                        }else{
-                               //Just return empy list.
+                               //Just return empty list.
                                return new this._NodeListCtor();
                        }
                },
@@ -7550,12 +7574,12 @@ dojo.provide("dojo._base.NodeList");
 
                indexOf: function(value, fromIndex){
                        //      summary:
-                       //              see dojo.indexOf(). The primary difference is that the acted-on 
+                       //              see dojo.indexOf(). The primary difference is that the acted-on
                        //              array is implicitly this NodeList
                        // value: Object:
                        //              The value to search for.
                        // fromIndex: Integer?:
-                       //              The loction to start searching from. Optional. Defaults to 0.
+                       //              The location to start searching from. Optional. Defaults to 0.
                        //      description:
                        //              For more details on the behavior of indexOf, see Mozilla's
                        //              (indexOf
@@ -7576,7 +7600,7 @@ dojo.provide("dojo._base.NodeList");
                        // value: Object
                        //              The value to search for.
                        // fromIndex: Integer?
-                       //              The loction to start searching from. Optional. Defaults to 0.
+                       //              The location to start searching from. Optional. Defaults to 0.
                        // returns:
                        //              Positive Integer or 0 for a match, -1 of not found.
                        return d.lastIndexOf(this, value, fromIndex); // Integer
@@ -7654,12 +7678,12 @@ dojo.provide("dojo._base.NodeList");
 
                forEach: function(callback, thisObj){
                        //      summary:
-                       //              see `dojo.forEach()`. The primary difference is that the acted-on 
+                       //              see `dojo.forEach()`. The primary difference is that the acted-on
                        //              array is implicitly this NodeList. If you want the option to break out
                        //              of the forEach loop, use every() or some() instead.
                        d.forEach(this, callback, thisObj);
                        // non-standard return to allow easier chaining
-                       return this; // dojo.NodeList 
+                       return this; // dojo.NodeList
                },
 
                /*=====
@@ -7676,7 +7700,7 @@ dojo.provide("dojo._base.NodeList");
                        //      summary:
                        //              Returns border-box objects (x/y/w/h) of all elements in a node list
                        //              as an Array (*not* a NodeList). Acts like `dojo.position`, though
-                       //              assumes the node passed is each node in this list. 
+                       //              assumes the node passed is each node in this list.
 
                        return d.map(this, d.position); // Array
                },
@@ -7699,7 +7723,7 @@ dojo.provide("dojo._base.NodeList");
                        //              Disable a group of buttons:
                        //      |       dojo.query("button.group").attr("disabled", true);
                        //      example:
-                       //              innerHTML can be assigned or retreived as well:
+                       //              innerHTML can be assigned or retrieved as well:
                        //      |       // get the innerHTML (as an array) for each list item
                        //      |       var ih = dojo.query("li.replaceable").attr("innerHTML");
                        return; // dojo.NodeList
@@ -7764,7 +7788,7 @@ dojo.provide("dojo._base.NodeList");
                        //              if 2 arguments are passed (methodName, objOrFunc), objOrFunc should
                        //              reference a function or be the name of the function in the global
                        //              namespace to attach. If 3 arguments are provided
-                       //              (methodName, objOrFunc, funcName), objOrFunc must be the scope to 
+                       //              (methodName, objOrFunc, funcName), objOrFunc must be the scope to
                        //              locate the bound function in
                        //      funcName: String?
                        //              optional. A string naming the function in objOrFunc to bind to the
@@ -7810,7 +7834,7 @@ dojo.provide("dojo._base.NodeList");
                        //              by queryOrNode. Returns the original NodeList. See: `dojo.place`
                        //      queryOrNode:
                        //              may be a string representing any valid CSS3 selector or a DOM node.
-                       //              In the selector case, only the first matching element will be used 
+                       //              In the selector case, only the first matching element will be used
                        //              for relative positioning.
                        //      position:
                        //              can be one of:
@@ -7825,18 +7849,15 @@ dojo.provide("dojo._base.NodeList");
                        return this.forEach(function(node){ d.place(node, item, position); }); // dojo.NodeList
                },
 
-               orphan: function(/*String?*/ simpleFilter){
+               orphan: function(/*String?*/ filter){
                        //      summary:
-                       //              removes elements in this list that match the simple filter
+                       //              removes elements in this list that match the filter
                        //              from their parents and returns them as a new NodeList.
-                       //      simpleFilter:
-                       //              single-expression CSS rule. For example, ".thinger" or
-                       //              "#someId[attrName='value']" but not "div > span". In short,
-                       //              anything which does not invoke a descent to evaluate but
-                       //              can instead be used to test a single node is acceptable.
+                       //      filter:
+                       //              CSS selector like ".foo" or "div > span"
                        //      returns:
-                       //              `dojo.NodeList` containing the orpahned elements 
-                       return (simpleFilter ? d._filterQueryResult(this, simpleFilter) : this).forEach(orphan); // dojo.NodeList
+                       //              `dojo.NodeList` containing the orphaned elements
+                       return (filter ? d._filterQueryResult(this, filter) : this).forEach(orphan); // dojo.NodeList
                },
 
                adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){
@@ -7863,7 +7884,7 @@ dojo.provide("dojo._base.NodeList");
                // FIXME: do we need this?
                query: function(/*String*/ queryStr){
                        //      summary:
-                       //              Returns a new list whose memebers match the passed query,
+                       //              Returns a new list whose members match the passed query,
                        //              assuming elements of the current NodeList as the root for
                        //              each search.
                        //      example:
@@ -7874,9 +7895,9 @@ dojo.provide("dojo._base.NodeList");
                        //      |               </p>
                        //      |       </div>
                        //      |       <div id="bar">
-                       //      |               <p>great commedians may not be funny <span>in person</span></p>
+                       //      |               <p>great comedians may not be funny <span>in person</span></p>
                        //      |       </div>
-                       //              If we are presented with the following defintion for a NodeList:
+                       //              If we are presented with the following definition for a NodeList:
                        //      |       var l = new dojo.NodeList(dojo.byId("foo"), dojo.byId("bar"));
                        //              it's possible to find all span elements under paragraphs
                        //              contained by these elements with this sub-query:
@@ -7891,18 +7912,14 @@ dojo.provide("dojo._base.NodeList");
                        return this._wrap(apc.apply([], ret), this);    // dojo.NodeList
                },
 
-               filter: function(/*String|Function*/ simpleFilter){
+               filter: function(/*String|Function*/ filter){
                        //      summary:
                        //              "masks" the built-in javascript filter() method (supported
                        //              in Dojo via `dojo.filter`) to support passing a simple
                        //              string filter in addition to supporting filtering function
                        //              objects.
-                       //      simpleFilter:
-                       //              If a string, a single-expression CSS rule. For example,
-                       //              ".thinger" or "#someId[attrName='value']" but not "div >
-                       //              span". In short, anything which does not invoke a descent
-                       //              to evaluate but can instead be used to test a single node
-                       //              is acceptable.
+                       //      filter:
+                       //              If a string, a CSS rule like ".thinger" or "div > span".
                        //      example:
                        //              "regular" JS filter syntax as exposed in dojo.filter:
                        //              |       dojo.query("*").filter(function(item){
@@ -7914,7 +7931,7 @@ dojo.provide("dojo._base.NodeList");
                        //              |       dojo.query("*").filter("p").styles("backgroundColor", "yellow");
 
                        var a = arguments, items = this, start = 0;
-                       if(typeof simpleFilter == "string"){ // inline'd type check
+                       if(typeof filter == "string"){ // inline'd type check
                                items = d._filterQueryResult(this, a[0]);
                                if(a.length == 1){
                                        // if we only got a string query, pass back the filtered results
@@ -7962,10 +7979,10 @@ dojo.provide("dojo._base.NodeList");
                        //              |       "before"
                        //              |       "after"
                        //              |       "replace" (replaces nodes in this NodeList with new content)
-                       //              |       "only" (removes other children of the nodes so new content is hte only child)
+                       //              |       "only" (removes other children of the nodes so new content is the only child)
                        //              or an offset in the childNodes property
                        //      example:
-                       //              appends content to the end if the position is ommitted
+                       //              appends content to the end if the position is omitted
                        //      |       dojo.query("h3 > p").addContent("hey there!");
                        //      example:
                        //              add something to the front of each element that has a
@@ -7996,7 +8013,7 @@ dojo.provide("dojo._base.NodeList");
                        //              text: "Send"
                        //      });
                        content = this._normalize(content, this[0]);
-                       for(var i = 0, node; node = this[i]; i++){
+                       for(var i = 0, node; (node = this[i]); i++){
                                this._place(content, node, position, i > 0);
                        }
                        return this; //dojo.NodeList
@@ -8025,11 +8042,11 @@ dojo.provide("dojo._base.NodeList");
                        //      index: Integer...
                        //              One or more 0-based indices of items in the current
                        //              NodeList. A negative index will start at the end of the
-                       //              list and go backwards. 
+                       //              list and go backwards.
                        //
                        //      example:
                        //      Shorten the list to the first, second, and third elements
-                       //      |       dojo.query("a").at(0, 1, 2).forEach(fn); 
+                       //      |       dojo.query("a").at(0, 1, 2).forEach(fn);
                        //
                        //      example:
                        //      Retrieve the first and last elements of a unordered list:
@@ -8039,13 +8056,13 @@ dojo.provide("dojo._base.NodeList");
                        //      Do something for the first element only, but end() out back to
                        //      the original list and continue chaining:
                        //      |       dojo.query("a").at(0).onclick(fn).end().forEach(function(n){
-                       //      |               console.log(n); // all anchors on the page. 
-                       //      |       })      
+                       //      |               console.log(n); // all anchors on the page.
+                       //      |       })
                        //
                        //      returns:
                        //              dojo.NodeList
                        var t = new this._NodeListCtor();
-                       d.forEach(arguments, function(i){ 
+                       d.forEach(arguments, function(i){
                                if(i < 0){ i = this.length + i }
                                if(this[i]){ t.push(this[i]); }
                        }, this);
@@ -8055,7 +8072,8 @@ dojo.provide("dojo._base.NodeList");
        });
 
        nl.events = [
-               // summary: list of all DOM events used in NodeList
+               // summary:
+               //              list of all DOM events used in NodeList
                "blur", "focus", "change", "click", "error", "keydown", "keypress",
                "keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove",
                "mouseout", "mouseover", "mouseup", "submit"
@@ -8068,7 +8086,7 @@ dojo.provide("dojo._base.NodeList");
                        var _oe = "on" + evt;
                        nlp[_oe] = function(a, b){
                                return this.connect(_oe, a, b);
-                       }
+                       };
                                // FIXME: should these events trigger publishes?
                                /*
                                return (a ? this.connect(_oe, a, b) :
@@ -8099,12 +8117,7 @@ dojo.provide("dojo._base.NodeList");
 
 if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo._base.query"] = true;
-if(typeof dojo != "undefined"){
-       dojo.provide("dojo._base.query");
-       
-       
-
-}
+(function(){
 
 /*
        dojo.query() architectural overview:
@@ -8138,7 +8151,7 @@ if(typeof dojo != "undefined"){
                        5.) matched nodes are pruned to ensure they are unique (if necessary)
 */
 
-;(function(d){
+var defineQuery= function(d){
        // define everything in a closure for compressability reasons. "d" is an
        // alias to "dojo" (or the toolkit alias object, e.g., "acme").
 
@@ -8146,7 +8159,7 @@ if(typeof dojo != "undefined"){
        // Toolkit aliases
        ////////////////////////////////////////////////////////////////////////
 
-       // if you are extracing dojo.query for use in your own system, you will
+       // if you are extracting dojo.query for use in your own system, you will
        // need to provide these methods and properties. No other porting should be
        // necessary, save for configuring the system to use a class other than
        // dojo.NodeList as the return instance instantiator
@@ -8157,7 +8170,7 @@ if(typeof dojo != "undefined"){
        //                                      d.isOpera; // float
        //                                      d.isWebKit; // float
        //                                      d.doc ; // document element
-       var qlc = d._NodeListCtor =             d.NodeList;
+       var qlc = (d._NodeListCtor =            d.NodeList);
 
        var getDoc = function(){ return d.doc; };
        // NOTE(alex): the spec is idiotic. CSS queries should ALWAYS be case-sensitive, but nooooooo
@@ -8188,7 +8201,7 @@ if(typeof dojo != "undefined"){
        ////////////////////////////////////////////////////////////////////////
 
        var getQueryParts = function(query){
-               //      summary: 
+               //      summary:
                //              state machine for query tokenization
                //      description:
                //              instead of using a brittle and slow regex-based CSS parser,
@@ -8197,16 +8210,16 @@ if(typeof dojo != "undefined"){
                //              the same query run multiple times or under different root nodes
                //              does not re-parse the selector expression but instead uses the
                //              cached data structure. The state machine implemented here
-               //              terminates on the last " " (space) charachter and returns an
+               //              terminates on the last " " (space) character and returns an
                //              ordered array of query component structures (or "parts"). Each
                //              part represents an operator or a simple CSS filtering
                //              expression. The structure for parts is documented in the code
                //              below.
 
 
-               // NOTE: 
+               // NOTE:
                //              this code is designed to run fast and compress well. Sacrifices
-               //              to readibility and maintainability have been made.  Your best
+               //              to readability and maintainability have been made.  Your best
                //              bet when hacking the tokenizer is to put The Donnas on *really*
                //              loud (may we recommend their "Spend The Night" release?) and
                //              just assume you're gonna make mistakes. Keep the unit tests
@@ -8222,7 +8235,7 @@ if(typeof dojo != "undefined"){
                }
 
                var ts = function(/*Integer*/ s, /*Integer*/ e){
-                       // trim and slice. 
+                       // trim and slice.
 
                        // take an index to start a string slice from and an end position
                        // and return a trimmed copy of that sub-string
@@ -8230,12 +8243,12 @@ if(typeof dojo != "undefined"){
                }
 
                // the overall data graph of the full query, as represented by queryPart objects
-               var queryParts = []; 
+               var queryParts = [];
 
 
                // state keeping vars
-               var inBrackets = -1, inParens = -1, inMatchFor = -1, 
-                       inPseudo = -1, inClass = -1, inId = -1, inTag = -1, 
+               var inBrackets = -1, inParens = -1, inMatchFor = -1,
+                       inPseudo = -1, inClass = -1, inId = -1, inTag = -1,
                        lc = "", cc = "", pStart;
 
                // iteration vars
@@ -8244,7 +8257,7 @@ if(typeof dojo != "undefined"){
                        currentPart = null, // data structure representing the entire clause
                        _cp = null; // the current pseudo or attr matcher
 
-               // several temporary variables are assigned to this structure durring a
+               // several temporary variables are assigned to this structure during a
                // potential sub-expression match:
                //              attr:
                //                      a string representing the current full attribute match in a
@@ -8299,9 +8312,9 @@ if(typeof dojo != "undefined"){
                        // needs to do any iteration. Many simple selectors don't, and
                        // we can avoid significant construction-time work by advising
                        // the system to skip them
-                       currentPart.loops = (   
-                                       currentPart.pseudos.length || 
-                                       currentPart.attrs.length || 
+                       currentPart.loops = (
+                                       currentPart.pseudos.length ||
+                                       currentPart.attrs.length ||
                                        currentPart.classes.length      );
 
                        currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string
@@ -8331,9 +8344,9 @@ if(typeof dojo != "undefined"){
                                currentPart.infixOper = queryParts.pop();
                                currentPart.query = currentPart.infixOper.query + " " + currentPart.query;
                                /*
-                               console.debug(  "swapping out the infix", 
-                                                               currentPart.infixOper, 
-                                                               "and attaching it to", 
+                               console.debug(  "swapping out the infix",
+                                                               currentPart.infixOper,
+                                                               "and attaching it to",
                                                                currentPart);
                                */
                        }
@@ -8342,15 +8355,15 @@ if(typeof dojo != "undefined"){
                        currentPart = null;
                }
 
-               // iterate over the query, charachter by charachter, building up a 
+               // iterate over the query, character by character, building up a
                // list of query part objects
                for(; lc=cc, cc=query.charAt(x), x < ql; x++){
                        //              cc: the current character in the match
-                       //              lc: the last charachter (if any)
+                       //              lc: the last character (if any)
 
                        // someone is trying to escape something, so don't try to match any
                        // fragments. We assume we're inside a literal.
-                       if(lc == "\\"){ continue; } 
+                       if(lc == "\\"){ continue; }
                        if(!currentPart){ // a part was just ended or none has yet been created
                                // NOTE: I hate all this alloc, but it's shorter than writing tons of if's
                                pStart = x;
@@ -8393,7 +8406,7 @@ if(typeof dojo != "undefined"){
                                // the beginning of a match, which should be a tag name. This
                                // might fault a little later on, but we detect that and this
                                // iteration will still be fine.
-                               inTag = x; 
+                               inTag = x;
                        }
 
                        if(inBrackets >= 0){
@@ -8401,7 +8414,7 @@ if(typeof dojo != "undefined"){
                                if(cc == "]"){ // if we're in a [...] clause and we end, do assignment
                                        if(!_cp.attr){
                                                // no attribute match was previously begun, so we
-                                               // assume this is an attribute existance match in the
+                                               // assume this is an attribute existence match in the
                                                // form of [someAttributeName]
                                                _cp.attr = ts(inBrackets+1, x);
                                        }else{
@@ -8412,19 +8425,19 @@ if(typeof dojo != "undefined"){
                                        var cmf = _cp.matchFor;
                                        if(cmf){
                                                // try to strip quotes from the matchFor value. We want
-                                               // [attrName=howdy] to match the same 
+                                               // [attrName=howdy] to match the same
                                                //      as [attrName = 'howdy' ]
                                                if(     (cmf.charAt(0) == '"') || (cmf.charAt(0)  == "'") ){
                                                        _cp.matchFor = cmf.slice(1, -1);
                                                }
                                        }
-                                       // end the attribute by adding it to the list of attributes. 
+                                       // end the attribute by adding it to the list of attributes.
                                        currentPart.attrs.push(_cp);
                                        _cp = null; // necessary?
                                        inBrackets = inMatchFor = -1;
                                }else if(cc == "="){
                                        // if the last char was an operator prefix, make sure we
-                                       // record it along with the "=" operator. 
+                                       // record it along with the "=" operator.
                                        var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : "";
                                        _cp.type = addToCc+cc;
                                        _cp.attr = ts(inBrackets+1, x-addToCc.length);
@@ -8433,7 +8446,7 @@ if(typeof dojo != "undefined"){
                                // now look for other clause parts
                        }else if(inParens >= 0){
                                // if we're in a parenthetical expression, we need to figure
-                               // out if it's attached to a pseduo-selector rule like
+                               // out if it's attached to a pseudo-selector rule like
                                // :nth-child(1)
                                if(cc == ")"){
                                        if(inPseudo >= 0){
@@ -8454,7 +8467,7 @@ if(typeof dojo != "undefined"){
                                endAll();
                                inPseudo = x;
                        }else if(cc == "["){
-                               // start of an attribute match. 
+                               // start of an attribute match.
                                endAll();
                                inBrackets = x;
                                // provide a new structure for the attribute match to fill-in
@@ -8468,15 +8481,15 @@ if(typeof dojo != "undefined"){
                                // expression if we're already inside a pseudo-selector match
                                if(inPseudo >= 0){
                                        // provide a new structure for the pseudo match to fill-in
-                                       _cp = { 
-                                               name: ts(inPseudo+1, x), 
+                                       _cp = {
+                                               name: ts(inPseudo+1, x),
                                                value: null
                                        }
                                        currentPart.pseudos.push(_cp);
                                }
                                inParens = x;
                        }else if(
-                               (cc == " ") && 
+                               (cc == " ") &&
                                // if it's a space char and the last char is too, consume the
                                // current one without doing more work
                                (lc != cc)
@@ -8496,7 +8509,7 @@ if(typeof dojo != "undefined"){
                // the basic building block of the yes/no chaining system. agree(f1,
                // f2) generates a new function which returns the boolean results of
                // both of the passed functions to a single logical-anded result. If
-               // either are not possed, the other is used exclusively.
+               // either are not passed, the other is used exclusively.
                if(!first){ return second; }
                if(!second){ return first; }
 
@@ -8548,7 +8561,7 @@ if(typeof dojo != "undefined"){
                        }
                },
                "$=": function(attr, value){
-                       // E[foo$="bar"]        
+                       // E[foo$="bar"]
                        //              an E element whose "foo" attribute value ends exactly
                        //              with the string "bar"
                        var tval = " "+value;
@@ -8558,7 +8571,7 @@ if(typeof dojo != "undefined"){
                        }
                },
                "~=": function(attr, value){
-                       // E[foo~="bar"]        
+                       // E[foo~="bar"]
                        //              an E element whose "foo" attribute value is a list of
                        //              space-separated values, one of which is exactly equal
                        //              to "bar"
@@ -8624,7 +8637,7 @@ if(typeof dojo != "undefined"){
                if(!tret){ return -1; }
                var l = tret.length;
 
-               // we calcuate the parent length as a cheap way to invalidate the
+               // we calculate the parent length as a cheap way to invalidate the
                // cache. It's not 100% accurate, but it's much more honest than what
                // other libraries do
                if( cl == l && ci >= 0 && cl >= 0 ){
@@ -8636,11 +8649,11 @@ if(typeof dojo != "undefined"){
                root["_l"] = l;
                ci = -1;
                for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){
-                       if(_simpleNodeTest(te)){ 
+                       if(_simpleNodeTest(te)){
                                te["_i"] = ++i;
-                               if(node === te){ 
+                               if(node === te){
                                        // NOTE:
-                                       //      shortcuting the return at this step in indexing works
+                                       //      shortcutting the return at this step in indexing works
                                        //      very well for benchmarking but we avoid it here since
                                        //      it leads to potential O(n^2) behavior in sequential
                                        //      getNodexIndex operations on a previously un-indexed
@@ -8671,7 +8684,7 @@ if(typeof dojo != "undefined"){
                "first-child": function(){ return _lookLeft; },
                "last-child": function(){ return _lookRight; },
                "only-child": function(name, condition){
-                       return function(node){ 
+                       return function(node){
                                if(!_lookLeft(node)){ return false; }
                                if(!_lookRight(node)){ return false; }
                                return true;
@@ -8702,7 +8715,7 @@ if(typeof dojo != "undefined"){
                },
                "not": function(name, condition){
                        var p = getQueryParts(condition)[0];
-                       var ignores = { el: 1 }; 
+                       var ignores = { el: 1 };
                        if(p.tag != "*"){
                                ignores.tag = 1;
                        }
@@ -8762,7 +8775,7 @@ if(typeof dojo != "undefined"){
                }
        };
 
-       var defaultGetter = (d.isIE) ? function(cond){
+       var defaultGetter = (d.isIE < 9 || (dojo.isIE && dojo.isQuirks)) ? function(cond){
                var clc = cond.toLowerCase();
                if(clc == "class"){ cond = "className"; }
                return function(elem){
@@ -8776,7 +8789,7 @@ if(typeof dojo != "undefined"){
 
        var getSimpleFilterFunc = function(query, ignores){
                // generates a node tester function based on the passed query part. The
-               // query part is one of the structures generatd by the query parser
+               // query part is one of the structures generated by the query parser
                // when it creates the query AST. The "ignores" object specifies which
                // (if any) tests to skip, allowing the system to avoid duplicating
                // work where it may have already been taken into account by other
@@ -8807,7 +8820,7 @@ if(typeof dojo != "undefined"){
                                if(isWildcard){
                                        cname = cname.substr(0, cname.length-1);
                                }
-                               // I dislike the regex thing, even if memozied in a cache, but it's VERY short
+                               // I dislike the regex thing, even if memoized in a cache, but it's VERY short
                                var re = new RegExp("(?:^|\\s)" + cname + (isWildcard ? ".*" : "") + "(?:\\s|$)");
                                */
                                var re = new RegExp("(?:^|\\s)" + cname + "(?:\\s|$)");
@@ -8845,7 +8858,7 @@ if(typeof dojo != "undefined"){
 
                if(!("id" in ignores)){
                        if(query.id){
-                               ff = agree(ff, function(elem){ 
+                               ff = agree(ff, function(elem){
                                        return (!!elem && (elem.id == query.id));
                                });
                        }
@@ -8853,7 +8866,7 @@ if(typeof dojo != "undefined"){
 
                if(!ff){
                        if(!("default" in ignores)){
-                               ff = yesman; 
+                               ff = yesman;
                        }
                }
                return ff;
@@ -8904,7 +8917,7 @@ if(typeof dojo != "undefined"){
                                        _simpleNodeTest(te) &&
                                        (!bag || _isUnique(te, bag)) &&
                                        (filterFunc(te, x))
-                               ){ 
+                               ){
                                        ret.push(te);
                                }
                        }
@@ -8946,7 +8959,7 @@ if(typeof dojo != "undefined"){
                //              filters them.  The search may be specialized by infix operators
                //              (">", "~", or "+") else it will default to searching all
                //              descendants (the " " selector). Once a group of children is
-               //              founde, a test function is applied to weed out the ones we
+               //              found, a test function is applied to weed out the ones we
                //              don't want. Many common cases can be fast-pathed. We spend a
                //              lot of cycles to create a dispatcher that doesn't do more work
                //              than necessary at any point since, unlike this function, the
@@ -8999,7 +9012,7 @@ if(typeof dojo != "undefined"){
                var filterFunc = getSimpleFilterFunc(query, { el: 1 });
                var qt = query.tag;
                var wildcardTag = ("*" == qt);
-               var ecs = getDoc()["getElementsByClassName"]; 
+               var ecs = getDoc()["getElementsByClassName"];
 
                if(!oper){
                        // if there's no infix operator, then it's a descendant query. ID
@@ -9009,8 +9022,8 @@ if(typeof dojo != "undefined"){
                                // testing shows that the overhead of yesman() is acceptable
                                // and can save us some bytes vs. re-defining the function
                                // everywhere.
-                               filterFunc = (!query.loops && wildcardTag) ? 
-                                       yesman : 
+                               filterFunc = (!query.loops && wildcardTag) ?
+                                       yesman :
                                        getSimpleFilterFunc(query, { el: 1, id: 1 });
 
                                retFunc = function(root, arr){
@@ -9025,9 +9038,9 @@ if(typeof dojo != "undefined"){
                                        }
                                }
                        }else if(
-                               ecs && 
+                               ecs &&
                                // isAlien check. Workaround for Prototype.js being totally evil/dumb.
-                               /\{\s*\[native code\]\s*\}/.test(String(ecs)) && 
+                               /\{\s*\[native code\]\s*\}/.test(String(ecs)) &&
                                query.classes.length &&
                                !cssCaseBug
                        ){
@@ -9193,8 +9206,8 @@ if(typeof dojo != "undefined"){
        // We need te detect the right "internal" webkit version to make this work.
        var wk = "WebKit/";
        var is525 = (
-               d.isWebKit && 
-               (nua.indexOf(wk) > 0) && 
+               d.isWebKit &&
+               (nua.indexOf(wk) > 0) &&
                (parseFloat(nua.split(wk)[1]) > 528)
        );
 
@@ -9205,7 +9218,7 @@ if(typeof dojo != "undefined"){
 
        var qsa = "querySelectorAll";
        var qsaAvail = (
-               !!getDoc()[qsa] && 
+               !!getDoc()[qsa] &&
                // see #5832
                (!d.isSafari || (d.isSafari > 3.1) || is525 )
        );
@@ -9234,7 +9247,7 @@ if(typeof dojo != "undefined"){
                var domCached = _queryFuncCacheDOM[query];
                if(domCached){ return domCached; }
 
-               // TODO: 
+               // TODO:
                //              today we're caching DOM and QSA branches separately so we
                //              recalc useQSA every time. If we had a way to tag root+query
                //              efficiently, we'd be in good shape to do a global cache.
@@ -9248,11 +9261,11 @@ if(typeof dojo != "undefined"){
                        forceDOM = true;
                }
 
-               var useQSA = ( 
+               var useQSA = (
                        qsaAvail && (!forceDOM) &&
                        // as per CSS 3, we can't currently start w/ combinator:
                        //              http://www.w3.org/TR/css3-selectors/#w3cselgrammar
-                       (specials.indexOf(qcz) == -1) && 
+                       (specials.indexOf(qcz) == -1) &&
                        // IE's QSA impl sucks on pseudos
                        (!d.isIE || (query.indexOf(":") == -1)) &&
 
@@ -9265,11 +9278,11 @@ if(typeof dojo != "undefined"){
                        //              elements, even though according to spec, selected options should
                        //              match :checked. So go nonQSA for it:
                        //              http://bugs.dojotoolkit.org/ticket/5179
-                       (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && 
+                       (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) &&
                        (query.indexOf("|=") == -1) // some browsers don't grok it
                );
 
-               // TODO: 
+               // TODO:
                //              if we've got a descendant query (e.g., "> .thinger" instead of
                //              just ".thinger") in a QSA-able doc, but are passed a child as a
                //              root, it should be possible to give the item a synthetic ID and
@@ -9278,7 +9291,7 @@ if(typeof dojo != "undefined"){
 
 
                if(useQSA){
-                       var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? 
+                       var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ?
                                                (query + " *") : query;
                        return _queryFuncCacheQSA[query] = function(root){
                                try{
@@ -9305,9 +9318,9 @@ if(typeof dojo != "undefined"){
                }else{
                        // DOM branch
                        var parts = query.split(/\s*,\s*/);
-                       return _queryFuncCacheDOM[query] = ((parts.length < 2) ? 
+                       return _queryFuncCacheDOM[query] = ((parts.length < 2) ?
                                // if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher
-                               getStepQueryFunc(query) : 
+                               getStepQueryFunc(query) :
                                // if it *is* a complex query, break it up into its
                                // constituent parts and return a dispatcher that will
                                // merge the parts when run
@@ -9337,7 +9350,7 @@ if(typeof dojo != "undefined"){
                }else{
                        return node.uniqueID;
                }
-       } : 
+       } :
        function(node){
                return (node._uid || (node._uid = ++_zipIdx));
        };
@@ -9346,7 +9359,7 @@ if(typeof dojo != "undefined"){
        // to flatten a list of unique items, but rather just tell if the item in
        // question is already in the bag. Normally we'd just use hash lookup to do
        // this for us but IE's DOM is busted so we can't really count on that. On
-       // the upside, it gives us a built in unique ID function. 
+       // the upside, it gives us a built in unique ID function.
        var _isUnique = function(node, bag){
                if(!bag){ return 1; }
                var id = _nodeUID(node);
@@ -9358,7 +9371,7 @@ if(typeof dojo != "undefined"){
        // returning a list of "uniques", hopefully in doucment order
        var _zipIdxName = "_zipIdx";
        var _zip = function(arr){
-               if(arr && arr.nozip){ 
+               if(arr && arr.nozip){
                        return (qlc._wrap) ? qlc._wrap(arr) : arr;
                }
                // var ret = new d._NodeListCtor();
@@ -9377,7 +9390,7 @@ if(typeof dojo != "undefined"){
                        var szidx = _zipIdx+"";
                        arr[0].setAttribute(_zipIdxName, szidx);
                        for(var x = 1, te; te = arr[x]; x++){
-                               if(arr[x].getAttribute(_zipIdxName) != szidx){ 
+                               if(arr[x].getAttribute(_zipIdxName) != szidx){
                                        ret.push(te);
                                }
                                te.setAttribute(_zipIdxName, szidx);
@@ -9385,7 +9398,7 @@ if(typeof dojo != "undefined"){
                }else if(d.isIE && arr.commentStrip){
                        try{
                                for(var x = 1, te; te = arr[x]; x++){
-                                       if(_isElement(te)){ 
+                                       if(_isElement(te)){
                                                ret.push(te);
                                        }
                                }
@@ -9393,7 +9406,7 @@ if(typeof dojo != "undefined"){
                }else{
                        if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; }
                        for(var x = 1, te; te = arr[x]; x++){
-                               if(arr[x][_zipIdxName] != _zipIdx){ 
+                               if(arr[x][_zipIdxName] != _zipIdx){
                                        ret.push(te);
                                }
                                te[_zipIdxName] = _zipIdx;
@@ -9423,11 +9436,11 @@ if(typeof dojo != "undefined"){
                //                      * class selectors (e.g., `.foo`)
                //                      * node type selectors like `span`
                //                      * ` ` descendant selectors
-               //                      * `>` child element selectors 
+               //                      * `>` child element selectors
                //                      * `#foo` style ID selectors
                //                      * `*` universal selector
-               //                      * `~`, the immediately preceeded-by sibling selector
-               //                      * `+`, the preceeded-by sibling selector
+               //                      * `~`, the preceded-by sibling selector
+               //                      * `+`, the immediately preceded-by sibling selector
                //                      * attribute queries:
                //                      |       * `[foo]` attribute presence selector
                //                      |       * `[foo='bar']` attribute value exact match
@@ -9448,14 +9461,14 @@ if(typeof dojo != "undefined"){
                //              palette of selectors and when combined with functions for
                //              manipulation presented by dojo.NodeList, many types of DOM
                //              manipulation operations become very straightforward.
-               //              
+               //
                //              Unsupported Selectors:
                //              ----------------------
                //
                //              While dojo.query handles many CSS3 selectors, some fall outside of
-               //              what's resaonable for a programmatic node querying engine to
+               //              what's reasonable for a programmatic node querying engine to
                //              handle. Currently unsupported selectors include:
-               //              
+               //
                //                      * namespace-differentiated selectors of any form
                //                      * all `::` pseduo-element selectors
                //                      * certain pseduo-selectors which don't get a lot of day-to-day use:
@@ -9464,10 +9477,10 @@ if(typeof dojo != "undefined"){
                //                      |       * `:root`, `:active`, `:hover`, `:visisted`, `:link`,
                //                                `:enabled`, `:disabled`
                //                      * `:*-of-type` pseudo selectors
-               //              
+               //
                //              dojo.query and XML Documents:
                //              -----------------------------
-               //              
+               //
                //              `dojo.query` (as of dojo 1.2) supports searching XML documents
                //              in a case-sensitive manner. If an HTML document is served with
                //              a doctype that forces case-sensitivity (e.g., XHTML 1.1
@@ -9577,12 +9590,12 @@ if(typeof dojo != "undefined"){
                // NOTE:
                //              Opera in XHTML mode doesn't detect case-sensitivity correctly
                //              and it's not clear that there's any way to test for it
-               caseSensitive = (root.contentType && root.contentType=="application/xml") || 
+               caseSensitive = (root.contentType && root.contentType=="application/xml") ||
                                                (d.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) ||
-                                               (!!od) && 
+                                               (!!od) &&
                                                (d.isIE ? od.xml : (root.xmlVersion||od.xmlVersion));
 
-               // NOTE: 
+               // NOTE:
                //              adding "true" as the 2nd argument to getQueryFunc is useful for
                //              testing the DOM branch without worrying about the
                //              behavior/performance of the QSA branch.
@@ -9599,16 +9612,98 @@ if(typeof dojo != "undefined"){
        // FIXME: need to add infrastructure for post-filtering pseudos, ala :last
        d.query.pseudos = pseudos;
 
-       // one-off function for filtering a NodeList based on a simple selector
-       d._filterQueryResult = function(nodeList, simpleFilter){
-               var tmpNodeList = new d._NodeListCtor();
-               var filterFunc = getSimpleFilterFunc(getQueryParts(simpleFilter)[0]);
+       // function for filtering a NodeList based on a selector, optimized for simple selectors
+       d._filterQueryResult = function(/*NodeList*/ nodeList, /*String*/ filter, /*String|DOMNode?*/ root){
+               var tmpNodeList = new d._NodeListCtor(),
+                       parts = getQueryParts(filter),
+                       filterFunc =
+                               (parts.length == 1 && !/[^\w#\.]/.test(filter)) ?
+                               getSimpleFilterFunc(parts[0]) :
+                               function(node) {
+                                       return dojo.query(filter, root).indexOf(node) != -1;
+                               };
                for(var x = 0, te; te = nodeList[x]; x++){
                        if(filterFunc(te)){ tmpNodeList.push(te); }
                }
                return tmpNodeList;
        }
-})(this["queryPortability"]||this["acme"]||dojo);
+};//end defineQuery
+
+var defineAcme= function(){
+       // a self-sufficient query impl
+       acme = {
+               trim: function(/*String*/ str){
+                       // summary:
+                       //              trims whitespaces from both sides of the string
+                       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;     // String
+               },
+               forEach: function(/*String*/ arr, /*Function*/ callback, /*Object?*/ thisObject){
+                       //      summary:
+                       //              an iterator function that passes items, indexes,
+                       //              and the array to a callback
+                       if(!arr || !arr.length){ return; }
+                       for(var i=0,l=arr.length; i<l; ++i){
+                               callback.call(thisObject||window, arr[i], i, arr);
+                       }
+               },
+               byId: function(id, doc){
+                       //      summary:
+                       //              a function that return an element by ID, but also
+                       //              accepts nodes safely
+                       if(typeof id == "string"){
+                               return (doc||document).getElementById(id); // DomNode
+                       }else{
+                               return id; // DomNode
+                       }
+               },
+               // the default document to search
+               doc: document,
+               // the constructor for node list objects returned from query()
+               NodeList: Array
+       };
+
+       // define acme.isIE, acme.isSafari, acme.isOpera, etc.
+       var n = navigator;
+       var dua = n.userAgent;
+       var dav = n.appVersion;
+       var tv = parseFloat(dav);
+       acme.isOpera = (dua.indexOf("Opera") >= 0) ? tv: undefined;
+       acme.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;
+       acme.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined;
+       acme.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined;
+       var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
+       if(index && !acme.isChrome){
+               acme.isSafari = parseFloat(dav.split("Version/")[1]);
+               if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){
+                       acme.isSafari = 2;
+               }
+       }
+       if(document.all && !acme.isOpera){
+               acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;
+       }
+
+       Array._wrap = function(arr){ return arr; };
+  return acme;
+};
+
+       //prefers queryPortability, then acme, then dojo
+       if(this["dojo"]){
+               dojo.provide("dojo._base.query");
+               
+               
+               defineQuery(this["queryPortability"]||this["acme"]||dojo);
+       }else{
+               defineQuery(this["queryPortability"]||this["acme"]||defineAcme());
+       }
+
+})();
 
 /*
 */
@@ -9623,6 +9718,7 @@ dojo.provide("dojo._base.xhr");
 
 
 
+
 (function(){
        var _d = dojo, cfg = _d.config;
 
@@ -9663,7 +9759,7 @@ dojo.provide("dojo._base.xhr");
                        var type = (item.type||"").toLowerCase();
                        if(_in && type && !item.disabled){
                                if(type == "radio" || type == "checkbox"){
-                                       if(item.checked){ ret = item.value }
+                                       if(item.checked){ ret = item.value; }
                                }else if(item.multiple){
                                        ret = [];
                                        _d.query("option", item).forEach(function(opt){
@@ -9677,7 +9773,7 @@ dojo.provide("dojo._base.xhr");
                        }
                }
                return ret; // Object
-       }
+       };
 
        dojo.formToObject = function(/*DOMNode||String*/ formNode){
                // summary:
@@ -9704,7 +9800,7 @@ dojo.provide("dojo._base.xhr");
                //              yields this object structure as the result of a call to
                //              formToObject():
                //
-               //              |       { 
+               //              |       {
                //              |               blah: "blah",
                //              |               multi: [
                //              |                       "thud",
@@ -9725,7 +9821,7 @@ dojo.provide("dojo._base.xhr");
                        }
                });
                return ret; // Object
-       }
+       };
 
        dojo.objectToQuery = function(/*Object*/ map){
                //      summary:
@@ -9734,7 +9830,7 @@ dojo.provide("dojo._base.xhr");
                //      example:
                //              this object:
                //
-               //              |       { 
+               //              |       {
                //              |               blah: "blah",
                //              |               multi: [
                //              |                       "thud",
@@ -9743,7 +9839,7 @@ dojo.provide("dojo._base.xhr");
                //              |       };
                //
                //      yields the following query string:
-               //      
+               //
                //      |       "blah=blah&multi=thud&multi=thonk"
 
                // FIXME: need to implement encodeAscii!!
@@ -9764,21 +9860,21 @@ dojo.provide("dojo._base.xhr");
                        }
                }
                return pairs.join("&"); // String
-       }
+       };
 
        dojo.formToQuery = function(/*DOMNode||String*/ formNode){
                // summary:
                //              Returns a URL-encoded string representing the form passed as either a
                //              node or string ID identifying the form to serialize
                return _d.objectToQuery(_d.formToObject(formNode)); // String
-       }
+       };
 
        dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){
                // summary:
                //              Create a serialized JSON string from a form node or string
                //              ID identifying the form to serialize
                return _d.toJson(_d.formToObject(formNode), prettyPrint); // String
-       }
+       };
 
        dojo.queryToObject = function(/*String*/ str){
                // summary:
@@ -9789,7 +9885,7 @@ dojo.provide("dojo._base.xhr");
                //              This string:
                //
                //      |               "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&"
-               //              
+               //
                //              results in this object structure:
                //
                //      |               {
@@ -9797,7 +9893,7 @@ dojo.provide("dojo._base.xhr");
                //      |                       thinger: " spaces =blah",
                //      |                       zonk: "blarg"
                //      |               }
-               //      
+               //
                //              Note that spaces and other urlencoded entities are correctly
                //              handled.
 
@@ -9822,7 +9918,7 @@ dojo.provide("dojo._base.xhr");
                        }
                });
                return ret; // Object
-       }
+       };
 
        // need to block async callbacks from snatching this thread as the result
        // of an async callback might call another sync XHR, this hangs khtml forever
@@ -9832,7 +9928,7 @@ dojo.provide("dojo._base.xhr");
 
        // MOW: remove dojo._contentHandlers alias in 2.0
        var handlers = _d._contentHandlers = dojo.contentHandlers = {
-               // summary: 
+               // summary:
                //              A map of availble XHR transport handle types. Name matches the
                //              `handleAs` attribute passed to XHR calls.
                //
@@ -9840,41 +9936,41 @@ dojo.provide("dojo._base.xhr");
                //              A map of availble XHR transport handle types. Name matches the
                //              `handleAs` attribute passed to XHR calls. Each contentHandler is
                //              called, passing the xhr object for manipulation. The return value
-               //              from the contentHandler will be passed to the `load` or `handle` 
-               //              functions defined in the original xhr call. 
-               //              
+               //              from the contentHandler will be passed to the `load` or `handle`
+               //              functions defined in the original xhr call.
+               //
                // example:
                //              Creating a custom content-handler:
                //      |       dojo.contentHandlers.makeCaps = function(xhr){
                //      |               return xhr.responseText.toUpperCase();
                //      |       }
                //      |       // and later:
-               //      |       dojo.xhrGet({ 
+               //      |       dojo.xhrGet({
                //      |               url:"foo.txt",
                //      |               handleAs:"makeCaps",
                //      |               load: function(data){ /* data is a toUpper version of foo.txt */ }
                //      |       });
 
-               text: function(xhr){ 
+               text: function(xhr){
                        // summary: A contentHandler which simply returns the plaintext response data
-                       return xhr.responseText; 
+                       return xhr.responseText;
                },
                json: function(xhr){
                        // summary: A contentHandler which returns a JavaScript object created from the response data
                        return _d.fromJson(xhr.responseText || null);
                },
-               "json-comment-filtered": function(xhr){ 
-                       // summary: A contentHandler which expects comment-filtered JSON. 
-                       // description: 
-                       //              A contentHandler which expects comment-filtered JSON. 
+               "json-comment-filtered": function(xhr){
+                       // summary: A contentHandler which expects comment-filtered JSON.
+                       // description:
+                       //              A contentHandler which expects comment-filtered JSON.
                        //              the json-comment-filtered option was implemented to prevent
                        //              "JavaScript Hijacking", but it is less secure than standard JSON. Use
                        //              standard JSON instead. JSON prefixing can be used to subvert hijacking.
-                       //              
+                       //
                        //              Will throw a notice suggesting to use application/json mimetype, as
                        //              json-commenting can introduce security issues. To decrease the chances of hijacking,
-                       //              use the standard `json` contentHandler, and prefix your "JSON" with: {}&& 
-                       //              
+                       //              use the standard `json` contentHandler, and prefix your "JSON" with: {}&&
+                       //
                        //              use djConfig.useCommentedJson = true to turn off the notice
                        if(!dojo.config.useCommentedJson){
                                console.warn("Consider using the standard mimetype:application/json."
@@ -9892,7 +9988,7 @@ dojo.provide("dojo._base.xhr");
                        }
                        return _d.fromJson(value.substring(cStartIdx+2, cEndIdx));
                },
-               javascript: function(xhr){ 
+               javascript: function(xhr){
                        // summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript
 
                        // FIXME: try Moz and IE specific eval variants?
@@ -9904,7 +10000,7 @@ dojo.provide("dojo._base.xhr");
                                                if(_d.isIE && (!result || !result.documentElement)){
                                //WARNING: this branch used by the xml handling in dojo.io.iframe,
                                //so be sure to test dojo.io.iframe if making changes below.
-                               var ms = function(n){ return "MSXML" + n + ".DOMDocument"; }
+                               var ms = function(n){ return "MSXML" + n + ".DOMDocument"; };
                                var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)];
                                _d.some(dp, function(p){
                                        try{
@@ -9919,7 +10015,7 @@ dojo.provide("dojo._base.xhr");
                                                return result; // DOMDocument
                },
                "json-comment-optional": function(xhr){
-                       // summary: A contentHandler which checks the presence of comment-filtered JSON and 
+                       // summary: A contentHandler which checks the presence of comment-filtered JSON and
                        //              alternates between the `json` and `json-comment-filtered` contentHandlers.
                        if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){
                                return handlers["json-comment-filtered"](xhr);
@@ -9951,7 +10047,7 @@ dojo.provide("dojo._base.xhr");
                //      handleAs: String?
                //              Acceptable values depend on the type of IO
                //              transport (see specific IO calls for more information).
-               //      rawBody: String?
+               //      rawBody: String?
                //              Sets the raw body for an HTTP request. If this is used, then the content
                //              property is ignored. This is mostly useful for HTTP methods that have
                //              a body to their requests, like PUT or POST. This property can be used instead
@@ -10096,7 +10192,7 @@ dojo.provide("dojo._base.xhr");
                        /*Function*/canceller,
                        /*Function*/okHandler,
                        /*Function*/errHandler){
-               //      summary: 
+               //      summary:
                //              sets up the Deferred and ioArgs property on the Deferred so it
                //              can be used in an io call.
                //      args:
@@ -10112,19 +10208,19 @@ dojo.provide("dojo._base.xhr");
                //              object returned from this function.
                //      errHandler:
                //              The first error callback to be registered with Deferred. It has the opportunity
-               //              to do cleanup on an error. It will receive two arguments: error (the 
+               //              to do cleanup on an error. It will receive two arguments: error (the
                //              Error object) and dfd, the Deferred object returned from this function.
 
                var ioArgs = {args: args, url: args.url};
 
                //Get values from form if requestd.
                var formObject = null;
-               if(args.form){ 
+               if(args.form){
                        var form = _d.byId(args.form);
-                       //IE requires going through getAttributeNode instead of just getAttribute in some form cases, 
+                       //IE requires going through getAttributeNode instead of just getAttribute in some form cases,
                        //so use it for all.  See #2844
                        var actnNode = form.getAttributeNode("action");
-                       ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); 
+                       ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null);
                        formObject = _d.formToObject(form);
                }
 
@@ -10197,7 +10293,7 @@ dojo.provide("dojo._base.xhr");
                // FIXME: need to wire up the xhr object's abort method to something
                // analagous in the Deferred
                return d;
-       }
+       };
 
        var _deferredCancel = function(/*Deferred*/dfd){
                // summary: canceller function for dojo._ioSetArgs call.
@@ -10214,13 +10310,13 @@ dojo.provide("dojo._base.xhr");
                        err.dojoType="cancel";
                }
                return err;
-       }
+       };
        var _deferredOk = function(/*Deferred*/dfd){
                // summary: okHandler function for dojo._ioSetArgs call.
 
                var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);
                return ret === undefined ? null : ret;
-       }
+       };
        var _deferError = function(/*Error*/error, /*Deferred*/dfd){
                // summary: errHandler function for dojo._ioSetArgs call.
 
@@ -10228,7 +10324,7 @@ dojo.provide("dojo._base.xhr");
                        console.error(error);
                }
                return error;
-       }
+       };
 
        // avoid setting a timer per request. It degrades performance on IE
        // something fierece if we don't use unified loops.
@@ -10252,7 +10348,7 @@ dojo.provide("dojo._base.xhr");
        };
 
        var _watchInFlight = function(){
-               //summary: 
+               //summary:
                //              internal method that checks each inflight XMLHttpRequest to see
                //              if it has completed or if the timeout situation applies.
                
@@ -10267,7 +10363,7 @@ dojo.provide("dojo._base.xhr");
                                var dfd = tif.dfd;
                                var func = function(){
                                        if(!dfd || dfd.canceled || !tif.validCheck(dfd)){
-                                               _inFlight.splice(i--, 1); 
+                                               _inFlight.splice(i--, 1);
                                                _pubCount -= 1;
                                        }else if(tif.ioCheck(dfd)){
                                                _inFlight.splice(i--, 1);
@@ -10305,7 +10401,7 @@ dojo.provide("dojo._base.xhr");
                        _inFlightIntvl = null;
                        return;
                }
-       }
+       };
 
        dojo._ioCancelAll = function(){
                //summary: Cancels all pending IO requests, regardless of IO type
@@ -10317,7 +10413,7 @@ dojo.provide("dojo._base.xhr");
                                }catch(e){/*squelch*/}
                        });
                }catch(e){/*squelch*/}
-       }
+       };
 
        //Automatically call cancel all io calls on unload
        //in IE for trac issue #2357.
@@ -10340,10 +10436,10 @@ dojo.provide("dojo._base.xhr");
                        _pubCount += 1;
                        _d.publish("/dojo/io/send", [dfd]);
                }
-       }
+       };
 
        _d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){
-               // summary: 
+               // summary:
                //              Watches the io request represented by dfd to see if it completes.
                // dfd: Deferred
                //              The Deferred object to watch.
@@ -10373,16 +10469,16 @@ dojo.provide("dojo._base.xhr");
                if(args.sync){
                        _watchInFlight();
                }
-       }
+       };
 
        var _defaultContentType = "application/x-www-form-urlencoded";
 
        var _validCheck = function(/*Deferred*/dfd){
                return dfd.ioArgs.xhr.readyState; //boolean
-       }
+       };
        var _ioCheck = function(/*Deferred*/dfd){
                return 4 == dfd.ioArgs.xhr.readyState; //boolean
-       }
+       };
        var _resHandle = function(/*Deferred*/dfd){
                var xhr = dfd.ioArgs.xhr;
                if(_d._isDocumentOk(xhr)){
@@ -10393,7 +10489,7 @@ dojo.provide("dojo._base.xhr");
                        err.responseText = xhr.responseText;
                        dfd.errback(err);
                }
-       }
+       };
 
        dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){
                //summary: Adds query params discovered by the io deferred construction to the URL.
@@ -10401,8 +10497,8 @@ dojo.provide("dojo._base.xhr");
                if(ioArgs.query.length){
                        ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query;
                        ioArgs.query = null;
-               }               
-       }
+               }
+       };
 
        /*=====
        dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, {
@@ -10503,13 +10599,13 @@ dojo.provide("dojo._base.xhr");
                _d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle);
                xhr = null;
                return dfd; // dojo.Deferred
-       }
+       };
 
        dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){
-               //      summary: 
+               //      summary:
                //              Sends an HTTP GET request to the server.
                return _d.xhr("GET", args); // dojo.Deferred
-       }
+       };
 
        dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){
                //      summary:
@@ -10518,7 +10614,7 @@ dojo.provide("dojo._base.xhr");
                //      postData:
                //              String. Send raw data in the body of the POST request.
                return _d.xhr("POST", args, true); // dojo.Deferred
-       }
+       };
 
        dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){
                //      summary:
@@ -10527,13 +10623,13 @@ dojo.provide("dojo._base.xhr");
                //      putData:
                //              String. Send raw data in the body of the PUT request.
                return _d.xhr("PUT", args, true); // dojo.Deferred
-       }
+       };
 
        dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){
                //      summary:
                //              Sends an HTTP DELETE request to the server.
                return _d.xhr("DELETE", args); //dojo.Deferred
-       }
+       };
 
        /*
        dojo.wrapForm = function(formNode){
@@ -10558,6 +10654,7 @@ dojo.provide("dojo._base.fx");
 
 
 
+
 /*
        Animation loosely package based on Dan Pupius' work, contributed under CLA:
                http://pupius.co.uk/js/Toolkit.Drawing.js
@@ -11225,14 +11322,29 @@ dojo.provide("dojo._base.browser");
 
 
 
+       //Need this to be the last code segment in base, so do not place any
+       //dojo/requireIf calls in this file/ Otherwise, due to how the build system
+       //puts all requireIf dependencies after the current file, the require calls
+       //could be called before all of base is defined/
+       dojo.forEach(dojo.config.require, function(i){
+               dojo["require"](i);
+       });
+
+}
+
+if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base"] = true;
+dojo.provide("dojo._base");
+
+
+
+
+
+
+
+
+
 
-//Need this to be the last code segment in base, so do not place any
-//dojo.requireIf calls in this file. Otherwise, due to how the build system
-//puts all requireIf dependencies after the current file, the require calls
-//could be called before all of base is defined.
-dojo.forEach(dojo.config.require, function(i){
-       dojo["require"](i);
-});
 
 }
 
index 5c70d5b9ed25c60d729fe1be3f96efcf43b80063..60782accbf453a2fdfc949261996dff7974815f5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,7 +8,9 @@
 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");
-dojo.require("dojo.fx.Toggler"); // FIXME: remove this back-compat require in 2.0 
+dojo.require("dojo.fx.Toggler");
+
+
 /*=====
 dojo.fx = {
        // summary: Effects library on top of Base animations
@@ -16,7 +18,7 @@ dojo.fx = {
 =====*/
 (function(){
        
-       var d = dojo, 
+       var d = dojo,
                _baseObj = {
                        _fire: function(evt, args){
                                if(this[evt]){
@@ -135,14 +137,14 @@ dojo.fx = {
        d.extend(_chain, _baseObj);
 
        dojo.fx.chain = function(/*dojo.Animation[]*/ animations){
-               // summary: 
+               // 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, 
+               //              onEnd of this animation means the end of the chain,
                //              not the individual animations within)
                //
                // example:
@@ -170,7 +172,7 @@ dojo.fx = {
                
                this._pseudoAnimation = new d.Animation({curve: [0, 1], duration: this.duration});
                var self = this;
-               d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"], 
+               d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"],
                        function(evt){
                                self._connects.push(d.connect(self._pseudoAnimation, evt,
                                        function(){ self._fire(evt, arguments); }
@@ -228,11 +230,11 @@ dojo.fx = {
        d.extend(_combine, _baseObj);
 
        dojo.fx.combine = function(/*dojo.Animation[]*/ animations){
-               // summary: 
+               // summary:
                //              Combine a list of `dojo.Animation`s to run in parallel
                //
                // description:
-               //              Combine an array of `dojo.Animation`s to run in parallel, 
+               //              Combine an array of `dojo.Animation`s to run in parallel,
                //              providing a new `dojo.Animation` instance encompasing each
                //              animation, firing standard animation events.
                //
@@ -303,17 +305,17 @@ dojo.fx = {
                        }
                }, args));
 
-               d.connect(anim, "onEnd", function(){ 
+               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. 
+               //              Shrink a node to nothing and hide it.
                //
                // description:
                //              Returns an animation that will shrink node defined in "args"
@@ -322,7 +324,7 @@ dojo.fx = {
                // 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()
                
@@ -348,14 +350,14 @@ dojo.fx = {
                });
 
                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" 
+               //              Returns an animation that will slide "node"
                //              defined in args Object from its current position to
                //              the position defined by (args.left, args.top).
                //
@@ -367,7 +369,7 @@ dojo.fx = {
                // example:
                //      |       dojo.fx.slideTo({ node: node, left:"40", top:"50", units:"px" }).play()
 
-               var node = args.node = d.byId(args.node), 
+               var node = args.node = d.byId(args.node),
                        top = null, left = null;
 
                var init = (function(n){
@@ -397,7 +399,7 @@ dojo.fx = {
                d.connect(anim, "beforeBegin", anim, init);
 
                return anim; // dojo.Animation
-       }
+       };
 
 })();
 
index ddc3e225deb704dbca794f527d8eff163560f1e1..dc4693d8e56ca668c05aa511de0db35298d4f79d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.fx.Toggler"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo.fx.Toggler"] = true;
 dojo.provide("dojo.fx.Toggler");
 
+
 dojo.declare("dojo.fx.Toggler", null, {
        // summary:
        //              A simple `dojo.Animation` toggler API.
@@ -16,16 +17,16 @@ dojo.declare("dojo.fx.Toggler", null, {
        // 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`). 
+       //              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, 
+       //      |               showFunc: dojo.fx.wipeIn,
        //      |               // hideFunc will default to "fadeOut"
        //      |       });
        //      |       t.show(100); // delay showing for 100ms
@@ -40,7 +41,7 @@ dojo.declare("dojo.fx.Toggler", null, {
        //              The function that returns the `dojo.Animation` to show the node
        showFunc: dojo.fadeIn,
 
-       // hideFunc: Function   
+       // hideFunc: Function
        //              The function that returns the `dojo.Animation` to hide the node
        hideFunc: dojo.fadeOut,
 
@@ -56,7 +57,7 @@ dojo.declare("dojo.fx.Toggler", null, {
        // 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. 
+       // each animation individually.
        // FIXME: also would be nice to have events from the animations exposed/bridged
 
        /*=====
index 0ce6efbfff83954e79c1144adddec06ae0d93e72..c26af89710721e95dee959aba5a83646f773fc16 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,11 +9,13 @@ if(!dojo._hasResource["dojo.fx.easing"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo.fx.easing"] = true;
 dojo.provide("dojo.fx.easing");
 
+dojo.getObject("fx.easing", true, dojo);
+
 dojo.fx.easing = {
-       // summary: 
-       //              Collection of easing functions to use beyond the default 
+       // summary:
+       //              Collection of easing functions to use beyond the default
        //              `dojo._defaultEasing` function.
-       // 
+       //
        // description:
        //
        //              Easing functions are used to manipulate the iteration through
@@ -21,22 +23,22 @@ dojo.fx.easing = {
        //              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. 
+       //              beginning and end.
        //
-       //              One does not call the easing function directly, it must be passed to 
+       //              One does not call the easing function directly, it must be passed to
        //              the `easing` property of an animation.
        //
        //      example:
        //      |       dojo.require("dojo.fx.easing");
        //      |       var anim = dojo.fadeOut({
-       //      |               node: 'node',   
+       //      |               node: 'node',
        //      |               duration: 2000,
-       //      |               //      note there is no () 
+       //      |               //      note there is no ()
        //      |               easing: dojo.fx.easing.quadIn
        //      |       }).play();
        //
@@ -151,24 +153,24 @@ dojo.fx.easing = {
        },
 
        backIn: function(/* Decimal? */n){
-               // summary: 
-               //              An easing function that starts away from the target, 
+               // 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 
+               //
+               //              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. 
+               // 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. 
+               //              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 
+               //              Use caution when the easing will cause values to become negative as some
                //              properties cannot be set to negative values.
                
                n = n - 1;
@@ -177,12 +179,12 @@ dojo.fx.easing = {
        },
 
        backInOut: function(/* Decimal? */n){
-               // summary: 
+               // 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 
+               //              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;
@@ -192,13 +194,13 @@ dojo.fx.easing = {
        },
 
        elasticIn: function(/* Decimal? */n){
-               // summary: 
+               // 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 
+               //
+               //              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;
@@ -208,7 +210,7 @@ dojo.fx.easing = {
        },
 
        elasticOut: function(/* Decimal? */n){
-               // summary: 
+               // summary:
                //              An easing function that elasticly snaps around the target value,
                //              near the end of the Animation
                //
@@ -216,7 +218,7 @@ dojo.fx.easing = {
                //              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 
+               //              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;
@@ -225,7 +227,7 @@ dojo.fx.easing = {
        },
 
        elasticInOut: function(/* Decimal? */n){
-               // summary: 
+               // summary:
                //              An easing function that elasticly snaps around the value, near
                //              the beginning and end of the Animation.
                //
@@ -233,7 +235,7 @@ dojo.fx.easing = {
                //              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 
+               //              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;
@@ -249,7 +251,7 @@ dojo.fx.easing = {
        },
 
        bounceIn: function(/* Decimal? */n){
-               // summary: 
+               // summary:
                //              An easing function that 'bounces' near the beginning of an Animation
                return (1 - dojo.fx.easing.bounceOut(1 - n)); // Decimal
        },
@@ -259,7 +261,7 @@ dojo.fx.easing = {
                //              An easing function that 'bounces' near the end of an Animation
                var s = 7.5625;
                var p = 2.75;
-               var l; 
+               var l;
                if(n < (1 / p)){
                        l = s * Math.pow(n, 2);
                }else if(n < (2 / p)){
@@ -276,7 +278,7 @@ dojo.fx.easing = {
        },
 
        bounceInOut: function(/* Decimal? */n){
-               // summary: 
+               // 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
index aca6c5a4fd9ae21adfb96cc14bdeb926bbd171a8..d5595b19168519c91698a346a7f2c25986ead7b8 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,8 +9,10 @@ if(!dojo._hasResource["dojo.gears"]){ //_hasResource checks added by build. Do n
 dojo._hasResource["dojo.gears"] = true;
 dojo.provide("dojo.gears");
 
+dojo.getObject("gears", true, dojo);
+
 dojo.gears._gearsObject = function(){
-       // summary: 
+       // summary:
        //              factory method to get a Google Gears plugin instance to
        //              expose in the browser runtime environment, if present
        var factory;
index 6ef74b5216a45abd75d010f6e3827dcc4a1414a9..e7f6a400ff71c1b868757cb8cb14b434545367f2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,6 +8,8 @@
 if(!dojo._hasResource["dojo.hash"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.hash"] = true;
 dojo.provide("dojo.hash");
+
+
 //TODOC: where does this go?
 // summary:
 //             Methods for monitoring and updating the hash in the browser URL.
@@ -27,11 +29,11 @@ dojo.provide("dojo.hash");
                //              Handles getting and setting of location.hash.
                //               - If no arguments are passed, acts as a getter.
                //               - If a string is passed, acts as a setter.
-               //      hash: 
-               //              String: the hash is set - #string.
+               //      hash:
+               //              the hash is set - #string.
                //      replace:
-               //              Boolean: If true, updates the hash value in the current history 
-               //                      state instead of creating a new history state.
+               //              If true, updates the hash value in the current history
+               //              state instead of creating a new history state.
                //      returns:
                //              when used as a getter, returns the current hash string.
                //              when used as a setter, returns the new hash string.
@@ -50,17 +52,16 @@ dojo.provide("dojo.hash");
                        location.href = "#" + hash;
                }
                return hash; // String
-       }
+       };
 
        // Global vars
-       var _recentHash = null,
-               _ieUriMonitor = null,
+       var _recentHash, _ieUriMonitor, _connect,
                _pollFrequency = dojo.config.hashPollFrequency || 100;
 
        //Internal functions
        function _getSegment(str, delimiter){
                var i = str.indexOf(delimiter);
-               return (i >= 0) ? str.substring(i+1) : "";  
+               return (i >= 0) ? str.substring(i+1) : "";
        }
        
        function _getHash(){
@@ -92,12 +93,12 @@ dojo.provide("dojo.hash");
                        return;
                }
                location.replace("#"+hash);
-               _pollLocation();
+               !_connect && _pollLocation();
        }
 
        function IEUriMonitor(){
                // summary:
-               //              Determine if the browser's URI has changed or if the user has pressed the 
+               //              Determine if the browser's URI has changed or if the user has pressed the
                //              back or forward button. If so, call _dispatchEvent.
                //
                //      description:
@@ -147,6 +148,13 @@ dojo.provide("dojo.hash");
                var ifr = document.createElement("iframe"),
                        IFRAME_ID = "dojo-hash-iframe",
                        ifrSrc = dojo.config.dojoBlankHtmlUrl || dojo.moduleUrl("dojo", "resources/blank.html");
+
+               if(dojo.config.useXDomain && !dojo.config.dojoBlankHtmlUrl){
+                       console.warn("dojo.hash: When using cross-domain Dojo builds,"
+                               + " please save dojo/resources/blank.html to your domain and set djConfig.dojoBlankHtmlUrl"
+                               + " to the path on your domain to blank.html");
+               }
+
                ifr.id = IFRAME_ID;
                ifr.src = ifrSrc + "?" + _getHash();
                ifr.style.display = "none";
@@ -165,7 +173,7 @@ dojo.provide("dojo.hash");
 
                this.isTransitioning = function(){
                        return transitioning;
-               }
+               };
                
                this.pollLocation = function(){
                        if(!ifrOffline) {
@@ -216,13 +224,13 @@ dojo.provide("dojo.hash");
                                }
                        }
                        setTimeout(dojo.hitch(this,this.pollLocation), _pollFrequency);
-               }
+               };
                resetState(); // initialize state (transition to s1)
                setTimeout(dojo.hitch(this,this.pollLocation), _pollFrequency);
        }
        dojo.addOnLoad(function(){
                if("onhashchange" in dojo.global && (!dojo.isIE || (dojo.isIE >= 8 && document.compatMode != "BackCompat"))){   //need this IE browser test because "onhashchange" exists in IE8 in IE7 mode
-                       dojo.connect(dojo.global,"onhashchange",_dispatchEvent);
+                       _connect = dojo.connect(dojo.global,"onhashchange",_dispatchEvent);
                }else{
                        if(document.addEventListener){ // Non-IE
                                _recentHash = _getHash();
@@ -230,7 +238,7 @@ dojo.provide("dojo.hash");
                        }else if(document.attachEvent){ // IE7-
                                //Use hidden iframe in versions of IE that don't have onhashchange event
                                _ieUriMonitor = new IEUriMonitor();
-                       } 
+                       }
                        // else non-supported browser, do nothing.
                }
        });
index ec5c4986e40efb88ebfb879749307de67c8989f1..f88f899cc612759f199d0d6c044955d490285e00 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,25 +8,26 @@
 if(!dojo._hasResource["dojo.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.html"] = true;
 dojo.provide("dojo.html");
+dojo.require("dojo.parser");
 
-// the parser might be needed..
-dojo.require("dojo.parser"); 
+dojo.getObject("html", true, dojo);
 
+// the parser might be needed..
 (function(){ // private scope, sort of a namespace
 
        // idCounter is incremented with each instantiation to allow asignment of a unique id for tracking, logging purposes
-       var idCounter = 0, 
+       var idCounter = 0,
                d = dojo;
        
        dojo.html._secureForInnerHtml = function(/*String*/ cont){
                // summary:
                //              removes !DOCTYPE and title elements from the html string.
-               // 
+               //
                //              khtml is picky about dom faults, you can't attach a style or <title> node as child of body
                //              must go into head, so we need to cut out those tags
                //      cont:
                //              An html string for insertion into the dom
-               //      
+               //
                return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig, ""); // String
        };
 
@@ -46,7 +47,7 @@ dojo.require("dojo.parser");
                //      node:
                //              the parent element
                //      content:
-               //              the content to be set on the parent element. 
+               //              the content to be set on the parent element.
                //              This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes
                
                // always empty
@@ -72,7 +73,7 @@ dojo.require("dojo.parser");
        };
 
        // we wrap up the content-setting operation in a object
-       dojo.declare("dojo.html._ContentSetter", null, 
+       dojo.declare("dojo.html._ContentSetter", null,
                {
                        // node: DomNode|String
                        //              An node which will be the parent element that we set content into
@@ -83,11 +84,11 @@ dojo.require("dojo.parser");
                        content: "",
                        
                        // id: String?
-                       //              Usually only used internally, and auto-generated with each instance 
+                       //              Usually only used internally, and auto-generated with each instance
                        id: "",
 
                        // cleanContent: Boolean
-                       //              Should the content be treated as a full html document, 
+                       //              Should the content be treated as a full html document,
                        //              and the real content stripped of <html>, <body> wrapper before injection
                        cleanContent: false,
                        
@@ -98,6 +99,17 @@ dojo.require("dojo.parser");
                        // parseContent: Boolean
                        //              Should the node by passed to the parser after the new content is set
                        parseContent: false,
+
+                       // parserScope: String
+                       //              Flag passed to parser.  Root for attribute names to search for.   If scopeName is dojo,
+                       //              will search for data-dojo-type (or dojoType).  For backwards compatibility
+                       //              reasons defaults to dojo._scopeName (which is "dojo" except when
+                       //              multi-version support is used, when it will be something like dojo16, dojo20, etc.)
+                       parserScope: dojo._scopeName,
+
+                       // startup: Boolean
+                       //              Start the child widgets after parsing them.   Only obeyed if parseContent is true.
+                       startup: true,
                        
                        // lifecyle methods
                        constructor: function(/* Object */params, /* String|DomNode */node){
@@ -115,14 +127,14 @@ dojo.require("dojo.parser");
                                if(!this.id){
                                        this.id = [
                                                "Setter",
-                                               (node) ? node.id || node.tagName : "", 
+                                               (node) ? node.id || node.tagName : "",
                                                idCounter++
                                        ].join("_");
                                }
                        },
                        set: function(/* String|DomNode|NodeList? */ cont, /* Object? */ params){
                                // summary:
-                               //              front-end to the set-content sequence 
+                               //              front-end to the set-content sequence
                                //      cont:
                                //              An html string, node or enumerable list of nodes for insertion into the dom
                                //              If not provided, the object's content property will be used
@@ -142,9 +154,9 @@ dojo.require("dojo.parser");
                        },
                        setContent: function(){
                                // summary:
-                               //              sets the content on the node 
+                               //              sets the content on the node
 
-                               var node = this.node; 
+                               var node = this.node;
                                if(!node) {
                                    // can't proceed
                                        throw new Error(this.declaredClass + ": setContent given no node");
@@ -156,7 +168,7 @@ dojo.require("dojo.parser");
                                        // like for instance if domNode is a UL and we try append a DIV
        
                                        // FIXME: need to allow the user to provide a content error message string
-                                       var errMess = this.onContentError(e); 
+                                       var errMess = this.onContentError(e);
                                        try{
                                                node.innerHTML = errMess;
                                        }catch(e){
@@ -172,7 +184,7 @@ dojo.require("dojo.parser");
                                //      cleanly empty out existing content
 
                                // destroy any widgets from a previous run
-                               // NOTE: if you dont want this you'll need to empty 
+                               // NOTE: if you dont want this you'll need to empty
                                // the parseResults array property yourself to avoid bad things happenning
                                if(this.parseResults && this.parseResults.length) {
                                        dojo.forEach(this.parseResults, function(w) {
@@ -182,17 +194,17 @@ dojo.require("dojo.parser");
                                        });
                                        delete this.parseResults;
                                }
-                               // this is fast, but if you know its already empty or safe, you could 
+                               // this is fast, but if you know its already empty or safe, you could
                                // override empty to skip this step
                                dojo.html._emptyNode(this.node);
                        },
        
                        onBegin: function(){
                                // summary
-                               //              Called after instantiation, but before set(); 
-                               //              It allows modification of any of the object properties 
+                               //              Called after instantiation, but before set();
+                               //              It allows modification of any of the object properties
                                //              - including the node and content provided - before the set operation actually takes place
-                               //              This default implementation checks for cleanContent and extractContent flags to 
+                               //              This default implementation checks for cleanContent and extractContent flags to
                                //              optionally pre-process html string content
                                var cont = this.content;
        
@@ -230,21 +242,21 @@ dojo.require("dojo.parser");
                                // summary
                                //              manually reset the Setter instance if its being re-used for example for another set()
                                // description
-                               //              tearDown() is not called automatically. 
+                               //              tearDown() is not called automatically.
                                //              In normal use, the Setter instance properties are simply allowed to fall out of scope
                                //              but the tearDown method can be called to explicitly reset this instance.
-                               delete this.parseResults; 
-                               delete this.node; 
-                               delete this.content; 
+                               delete this.parseResults;
+                               delete this.node;
+                               delete this.content;
                        },
   
                        onContentError: function(err){
-                               return "Error occured setting content: " + err; 
+                               return "Error occured setting content: " + err;
                        },
                        
                        _mixin: function(params){
                                // mix properties/methods into the instance
-                               // TODO: the intention with tearDown is to put the Setter's state 
+                               // TODO: the intention with tearDown is to put the Setter's state
                                // back to that of the original constructor (vs. deleting/resetting everything regardless of ctor params)
                                // so we could do something here to move the original properties aside for later restoration
                                var empty = {}, key;
@@ -252,21 +264,28 @@ dojo.require("dojo.parser");
                                        if(key in empty){ continue; }
                                        // TODO: here's our opportunity to mask the properties we dont consider configurable/overridable
                                        // .. but history shows we'll almost always guess wrong
-                                       this[key] = params[key]; 
+                                       this[key] = params[key];
                                }
                        },
                        _parse: function(){
-                               // summary: 
+                               // summary:
                                //              runs the dojo parser over the node contents, storing any results in this.parseResults
                                //              Any errors resulting from parsing are passed to _onError for handling
 
                                var rootNode = this.node;
                                try{
                                        // store the results (widgets, whatever) for potential retrieval
+                                       var inherited = {};
+                                       dojo.forEach(["dir", "lang", "textDir"], function(name){
+                                               if(this[name]){
+                                                       inherited[name] = this[name];
+                                               }
+                                       }, this);
                                        this.parseResults = dojo.parser.parse({
                                                rootNode: rootNode,
-                                               dir: this.dir,
-                                               lang: this.lang
+                                               noStart: !this.startup,
+                                               inherited: inherited,
+                                               scope: this.parserScope
                                        });
                                }catch(e){
                                        this._onError('Content', e, "Error parsing in _ContentSetter#"+this.id);
@@ -299,29 +318,29 @@ dojo.require("dojo.parser");
                        //      node:
                        //              the parent element that will receive the content
                        //      cont:
-                       //              the content to be set on the parent element. 
+                       //              the content to be set on the parent element.
                        //              This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes
-                       //      params: 
+                       //      params:
                        //              Optional flags/properties to configure the content-setting. See dojo.html._ContentSetter
                        //      example:
                        //              A safe string/node/nodelist content replacement/injection with hooks for extension
-                       //              Example Usage: 
-                       //              dojo.html.set(node, "some string"); 
-                       //              dojo.html.set(node, contentNode, {options}); 
-                       //              dojo.html.set(node, myNode.childNodes, {options}); 
+                       //              Example Usage:
+                       //              dojo.html.set(node, "some string");
+                       //              dojo.html.set(node, contentNode, {options});
+                       //              dojo.html.set(node, myNode.childNodes, {options});
                if(undefined == cont){
                        console.warn("dojo.html.set: no cont argument provided, using empty string");
                        cont = "";
-               }       
+               }
                if(!params){
                        // simple and fast
                        return dojo.html._setNodeContent(node, cont, true);
-               }else{ 
+               }else{
                        // more options but slower
                        // note the arguments are reversed in order, to match the convention for instantiation via the parser
-                       var op = new dojo.html._ContentSetter(dojo.mixin( 
-                                       params, 
-                                       { content: cont, node: node } 
+                       var op = new dojo.html._ContentSetter(dojo.mixin(
+                                       params,
+                                       { content: cont, node: node }
                        ));
                        return op.set();
                }
index d06a8f25e19ef47002a45aab6ecc3fb1c58dc0c7..893490fe07e17057ad982bee539e4102736948e6 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,13 +9,16 @@ if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do no
 dojo._hasResource["dojo.i18n"] = true;
 dojo.provide("dojo.i18n");
 
+dojo.getObject("i18n", true, dojo);
+
 /*=====
 dojo.i18n = {
        // summary: Utility classes to enable loading of resources for internationalization (i18n)
 };
 =====*/
 
-dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
+// when using a real AMD loader, dojo.i18n.getLocalization is already defined by dojo/lib/backCompat
+dojo.i18n.getLocalization = 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.
@@ -43,7 +46,7 @@ dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName
        // look for nearest locale match
        var elements = locale.split('-');
        var module = [packageName,"nls",bundleName].join('.');
-       var bundle = dojo._loadedModules[module];
+               var bundle = dojo._loadedModules[module];
        if(bundle){
                var localization;
                for(var i = elements.length; i > 0; i--){
@@ -93,7 +96,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
 
        var targetLocale = dojo.i18n.normalizeLocale(locale);
        var bundlePackage = [moduleName, "nls", bundleName].join(".");
-       // NOTE: 
+       // 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.
@@ -103,7 +106,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
        //              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){
@@ -120,7 +123,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
                }
                if(!bestLocale){
                        bestLocale = "ROOT";
-               }               
+               }
        }
 
        //See if the desired locale is already loaded.
@@ -152,6 +155,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
                                module.push(bundleName);
                                var filespec = module.join("/") + '.js';
                                loaded = dojo._loadPath(filespec, null, function(hash){
+                                       hash = hash.root || hash;
                                        // Use singleton with prototype to point to parent bundle, then mix-in result from loadPath
                                        var clazz = function(){};
                                        clazz.prototype = parent;
@@ -166,7 +170,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
                        }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.
@@ -184,8 +188,8 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
 
 (function(){
        // If other locales are used, dojo.requireLocalization should load them as
-       // well, by default. 
-       // 
+       // 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.
index 5b2af45a1cfa6e8de0f4ff4ef32857235b1d7da6..aa8ddf290ba86ada960f2cc600df2a0b0d166065 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.io.iframe"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo.io.iframe"] = true;
 dojo.provide("dojo.io.iframe");
 
+dojo.getObject("io", true, dojo);
+
 /*=====
 dojo.declare("dojo.io.iframe.__ioArgs", dojo.__IoArgs, {
        constructor: function(){
@@ -49,7 +51,7 @@ dojo.declare("dojo.io.iframe.__ioArgs", dojo.__IoArgs, {
 =====*/
 
 dojo.io.iframe = {
-       // summary: 
+       // summary:
        //              Sends an Ajax I/O call using and Iframe (for instance, to upload files)
        
        create: function(/*String*/fname, /*String*/onloadstr, /*String?*/uri){
@@ -79,30 +81,12 @@ dojo.io.iframe = {
                        }
                        turi = (dojo.config["dojoBlankHtmlUrl"]||dojo.moduleUrl("dojo", "resources/blank.html"));
                }
-               var ifrstr = dojo.isIE ? '<iframe name="'+fname+'" src="'+turi+'" onload="'+onloadstr+'">' : 'iframe';
-               cframe = dojo.doc.createElement(ifrstr);
-               with(cframe){
-                       name = fname;
-                       setAttribute("name", fname);
-                       id = fname;
-               }
-               dojo.body().appendChild(cframe);
-               window[fname] = cframe;
-       
-               with(cframe.style){
-                       if(!(dojo.isSafari < 3)){
-                               //We can't change the src in Safari 2.0.3 if absolute position. Bizarro.
-                               position = "absolute";
-                       }
-                       left = top = "1px";
-                       height = width = "1px";
-                       visibility = "hidden";
-               }
+               var cframe = dojo.place(
+                       '<iframe id="'+fname+'" name="'+fname+'" src="'+turi+'" onload="'+onloadstr+
+                       '" style="position: absolute; left: 1px; top: 1px; height: 1px; width: 1px; visibility: hidden">',
+               dojo.body());
 
-               if(!dojo.isIE){
-                       this.setSrc(cframe, turi, true);
-                       cframe.onload = new Function(onloadstr);
-               }
+               window[fname] = cframe;
 
                return cframe;
        },
@@ -122,11 +106,8 @@ dojo.io.iframe = {
                        }else{
                                // Fun with DOM 0 incompatibilities!
                                var idoc;
-                               //WebKit > 521 corresponds with Safari 3, which started with 522 WebKit version.
-                               if(dojo.isIE || dojo.isWebKit > 521){
+                               if(dojo.isIE || dojo.isWebKit){
                                        idoc = iframe.contentWindow.document;
-                               }else if(dojo.isSafari){
-                                       idoc = iframe.document;
                                }else{ //  if(d.isMozilla){
                                        idoc = iframe.contentWindow;
                                }
@@ -142,8 +123,8 @@ dojo.io.iframe = {
                                        idoc.location.replace(src);
                                }
                        }
-               }catch(e){ 
-                       console.log("dojo.io.iframe.setSrc: ", e); 
+               }catch(e){
+                       console.log("dojo.io.iframe.setSrc: ", e);
                }
        },
 
@@ -152,7 +133,7 @@ dojo.io.iframe = {
                var doc = iframeNode.contentDocument || // W3
                        (
                                (
-                                       (iframeNode.name) && (iframeNode.document) && 
+                                       (iframeNode.name) && (iframeNode.document) &&
                                        (dojo.doc.getElementsByTagName("iframe")[iframeNode.name].contentWindow) &&
                                        (dojo.doc.getElementsByTagName("iframe")[iframeNode.name].contentWindow.document)
                                )
@@ -165,7 +146,7 @@ dojo.io.iframe = {
        },
 
        send: function(/*dojo.io.iframe.__ioArgs*/args){
-               //summary: 
+               //summary:
                //              Function that sends the request to the server.
                //              This transport can only process one send() request at a time, so if send() is called
                //multiple times, it will queue up the calls and only process one at a time.
@@ -195,8 +176,8 @@ dojo.io.iframe = {
                                        if(handleAs != "html"){
                                                if(handleAs == "xml"){
                                                        //      FF, Saf 3+ and Opera all seem to be fine with ifd being xml.  We have to
-                                                       //      do it manually for IE.  Refs #6334.
-                                                       if(dojo.isIE){
+                                                       //      do it manually for IE6-8.  Refs #6334.
+                                                       if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){
                                                                dojo.query("a", dii._frame.contentWindow.document.documentElement).orphan();
                                                                var xmlText=(dii._frame.contentWindow.document).documentElement.innerText;
                                                                xmlText=xmlText.replace(/>\s+</g, "><");
@@ -218,7 +199,7 @@ dojo.io.iframe = {
                                }catch(e){
                                        value = e;
                                }finally{
-                                       ioArgs._callNext();                             
+                                       ioArgs._callNext();
                                }
                                return value;
                        },
@@ -238,7 +219,7 @@ dojo.io.iframe = {
                                dojo.io.iframe._currentDfd = null;
                                dojo.io.iframe._fireNextRequest();
                        }
-               }
+               };
 
                this._dfdQueue.push(dfd);
                this._fireNextRequest();
@@ -297,16 +278,7 @@ dojo.io.iframe = {
                                        // if we have things in content, we need to add them to the form
                                        // before submission
                                        var pHandler = function(name, value) {
-                                               var tn;
-                                               if(dojo.isIE){
-                                                       tn = dojo.doc.createElement("<input type='hidden' name='"+name+"'>");
-                                               }else{
-                                                       tn = dojo.doc.createElement("input");
-                                                       tn.type = "hidden";
-                                                       tn.name = name;
-                                               }
-                                               tn.value = value;
-                                               fn.appendChild(tn);
+                                               dojo.create("input", {type: "hidden", name: name, value: value}, fn);
                                                ioArgs._contentToClean.push(name);
                                        };
                                        for(var x in content){
@@ -325,7 +297,7 @@ dojo.io.iframe = {
                                                }
                                        }
                                }
-                               //IE requires going through getAttributeNode instead of just getAttribute in some form cases, 
+                               //IE requires going through getAttributeNode instead of just getAttribute in some form cases,
                                //so use it for all.  See #2844
                                var actnNode = fn.getAttributeNode("action");
                                var mthdNode = fn.getAttributeNode("method");
@@ -406,6 +378,6 @@ dojo.io.iframe = {
 
                ioArgs._finished = true;
        }
-}
+};
 
 }
index 9730c977dd3670b9e7b2310cb2f9bf93e6ab8581..a44e9f2ee7661bc9accb101d4ef0a10dd3666d67 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.io.script"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo.io.script"] = true;
 dojo.provide("dojo.io.script");
 
+dojo.getObject("io", true, dojo);
+
 /*=====
 dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, {
        constructor: function(){
@@ -24,13 +26,13 @@ dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, {
                //              legacy code. See notes for jsonp property.
                //      jsonp: String
                //              The URL parameter name that indicates the JSONP callback string.
-               //              For instance, when using Yahoo JSONP calls it is normally, 
-               //              jsonp: "callback". For AOL JSONP calls it is normally 
+               //              For instance, when using Yahoo JSONP calls it is normally,
+               //              jsonp: "callback". For AOL JSONP calls it is normally
                //              jsonp: "c".
                //      checkString: String
-               //              A string of JavaScript that when evaluated like so: 
+               //              A string of JavaScript that when evaluated like so:
                //              "typeof(" + checkString + ") != 'undefined'"
-               //              being true means that the script fetched has been loaded. 
+               //              being true means that the script fetched has been loaded.
                //              Do not use this if doing a JSONP type of call (use callbackParamName instead).
                //      frameDoc: Document
                //              The Document object for a child iframe. If this is passed in, the script
@@ -43,7 +45,7 @@ dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, {
        }
 });
 =====*/
-;(function(){
+(function(){
        var loadEvent = dojo.isIE ? "onreadystatechange" : "load",
                readyRegExp = /complete|loaded/;
 
@@ -105,7 +107,7 @@ dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, {
                },
        
                _makeScriptDeferred: function(/*Object*/args){
-                       //summary: 
+                       //summary:
                        //              sets up a Deferred object for an IO request.
                        var dfd = dojo._ioSetArgs(args, this._deferredCancel, this._deferredOk, this._deferredError);
        
@@ -152,7 +154,7 @@ dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, {
                        //DO NOT use "this" and expect it to be dojo.io.script.
                        var ioArgs = dfd.ioArgs;
        
-                       //Add script to list of things that can be removed.             
+                       //Add script to list of things that can be removed.
                        if(ioArgs.canDelete){
                                dojo.io.script._addDeadScript(ioArgs);
                        }
@@ -247,14 +249,14 @@ dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, {
                },
                
                _jsonpCallback: function(/*JSON Object*/json){
-                       //summary: 
+                       //summary:
                        //              generic handler for jsonp callback. A pointer to this function
                        //              is used for all jsonp callbacks.  NOTE: the "this" in this
                        //              function will be the Deferred object that represents the script
                        //              request.
                        this.ioArgs.json = json;
                }
-       }
+       };
 })();
 
 }
index fdc492f1c0a7a5d47d3479bff5655cafedaa57b2..2ac115e18228e63658f7f8c782611ebe39f2389d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.jaxer"]){ //_hasResource checks added by build. Do n
 dojo._hasResource["dojo.jaxer"] = true;
 dojo.provide("dojo.jaxer");
 
+
 if(typeof print == "function"){
        console.debug = Jaxer.Log.debug;
        console.warn = Jaxer.Log.warn;
diff --git a/lib/dojo/lib/backCompat.js b/lib/dojo/lib/backCompat.js
new file mode 100644 (file)
index 0000000..101f4e5
--- /dev/null
@@ -0,0 +1,283 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+       Available via Academic Free License >= 2.1 OR the modified BSD license.
+       see: http://dojotoolkit.org/license for details
+*/
+
+
+// AMD module id = dojo/lib/backCompat
+//
+// This module defines those dojo properties/methods that are defined by
+// dojo/_base/_loader/loader and are still needed when loading with and
+// AMD loader (when loading with an AMD loader, dojo/_base/_loader/loader
+// is never loaded).
+//
+// note: this module is relevant only when loading dojo with an AMD loader;
+// it is never evaluated otherwise.
+
+define(["require", "dojo/_base/_loader/bootstrap"], function(require, dojo){
+       // the following dojo properties do not exist in the AMD-loaded version of dojo 1.x:
+       var names= [
+               "_moduleHasPrefix",
+               "_loadPath",
+               "_loadUri",
+               "_loadUriAndCheck",
+               "loaded",
+               "_callLoaded",
+               "_getModuleSymbols",
+               "_loadModule",
+               "require",
+               "provide",
+               "platformRequire",
+               "requireIf",
+               "requireAfterIf",
+               "registerModulePath"
+       ], i, name;
+       for(i = 0; i<names.length;){
+               name = names[i++];
+               dojo[name] = (function(name) {
+                       return function(){
+                               console.warn("dojo." + name + " not available when using an AMD loader.");
+                       };
+               })(name);
+       }
+
+       // define dojo.addOnLoad in terms of the DOMContentLoaded detection available from the AMD loaders
+       // (requirejs and bdBuild). Note that the behavior of this feature is slightly different compared to the dojo
+       // v1.x sync loader. There, the onload queue is fired upon detecting both DOMContentLoaded *and* all
+       // demanded modules have arrived. It is impossible to simulate this behavior with requirejs since it does
+       // not publish its internal status (it is possible with bdLoad).
+       // TODO: consider taking ownership of this API back from the loader.
+       // TODO: consider requesting requirejs publish more enough internal state to determine if all demanded
+       // modules have been defined.
+       var
+               argsToArray = function(args) {
+                       var result = [], i;
+                       for(i = 0; i<args.length;){
+                               result.push(args[i++]);
+                       }
+                       return result;
+               },
+
+               simpleHitch = function(context, callback){
+                       if(callback){
+                               return (typeof callback=="string") ?
+                                       function(){context[callback]();} :
+                                       function(){callback.call(context);};
+                       }else{
+                               return context;
+                       }
+               };
+       dojo.ready = dojo.addOnLoad = function(context, callback){
+               require.ready(callback ? simpleHitch(context, callback) : context);
+       };
+       dojo.addOnLoad(function() {
+               dojo.postLoad = dojo.config.afterOnLoad = true;
+       });
+       var dca = dojo.config.addOnLoad;
+       if(dca){
+               dojo.addOnLoad[(dca instanceof Array ? "apply" : "call")](dojo, dca);
+       }
+
+       // TODO: in the dojo 1.x sync loader the array dojo._loaders holds the queue of callbacks to be executed
+       // upon DOMContentLoaded. This queue is manipulated directly by dojo/uacss, dojo/parser, dijit/_base/wia
+       // and others (at least in dojox). This is also impossible to simulate universally across all AMD loaders.
+       // The following will at least accept client code accessing dojo._loaders , dojo._loaders.unshift, and
+       // dojo._loaders.splice--which is all that exists in the current dojo/dijit code stacks.
+       var
+               loaders = dojo._loaders = [],
+               runLoaders = function(){
+                       var temp= loaders.slice(0);
+                       Array.prototype.splice.apply(loaders, [0, loaders.length]);
+                       while(temp.length){
+                               temp.shift().call();
+                       };
+               };
+       loaders.unshift = function() {
+               Array.prototype.unshift.apply(loaders, argsToArray(arguments));
+               require.ready(runLoaders);
+       };
+       loaders.splice = function() {
+               Array.prototype.splice.apply(loaders, argsToArray(arguments));
+               require.ready(runLoaders);
+       };
+
+       //TODO: put unload handling in a separate module
+       var unloaders = dojo._unloaders = [];
+       dojo.unloaded = function(){
+               while(unloaders.length){
+                       unloaders.pop().call();
+               }
+       };
+
+       //TODO: kill this low-value function when it is exorcised from dojo
+       dojo._onto = function(arr, obj, fn){
+               arr.push(fn ? simpleHitch(obj, fn) : obj);
+       };
+
+       //TODO: kill this when the bootstrap is rewritten to not include DOMContentLoaded detection
+       // (it should probably be just a module) for now, just sink the detection; leverage the
+       // AMD loaders to handle DOMContentLoaded detection
+       dojo._modulesLoaded = function(){};
+
+       //TODO: kill this when we understand its purpose relative to AMD
+       dojo.loadInit = function(init){
+               init();
+       };
+
+       var amdModuleName= function(moduleName){
+               return moduleName.replace(/\./g, "/");
+       };
+
+       dojo.getL10nName = function(moduleName, bundleName, locale){
+               locale = locale ? locale.toLowerCase() : dojo.locale;
+               moduleName = "i18n!" + amdModuleName(moduleName);
+               return (/root/i.test(locale)) ?
+                       (moduleName + "/nls/" + bundleName) :
+                       (moduleName + "/nls/"    + locale + "/" + bundleName);
+       };
+
+       dojo.requireLocalization = function(moduleName, bundleName, locale){
+               // NOTE: locales other than the locale specified in dojo.locale need to be specifically
+               // declared as a module dependency when using AMD.
+               if(require.vendor!="altoviso.com"){
+                       locale = !locale || locale.toLowerCase() === dojo.locale ? "root" :  locale;
+               }
+               return require(dojo.getL10nName(moduleName, bundleName, locale));
+       };
+
+       dojo.i18n= {
+               getLocalization: dojo.requireLocalization,
+               normalizeLocale: function(locale){
+                       var result = locale ? locale.toLowerCase() : dojo.locale;
+                       if(result == "root"){
+                               result = "ROOT";
+                       }
+                       return result;
+               }
+       };
+
+       //TODO: dojo._Url seems rarely used and long to be part of the boostrap; consider moving
+       //note: this routine cut and paste from dojo/_base/_loader/loader
+       var
+               ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),
+               ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$");
+       dojo._Url = function(){
+               var n = null,
+                       _a = arguments,
+                       uri = [_a[0]];
+               // resolve uri components relative to each other
+               for(var i = 1; i<_a.length; i++){
+                       if(!_a[i]){ continue; }
+
+                       // Safari doesn't support this.constructor so we have to be explicit
+                       // FIXME: Tracked (and fixed) in Webkit bug 3537.
+                       //              http://bugs.webkit.org/show_bug.cgi?id=3537
+                       var relobj = new dojo._Url(_a[i]+""),
+                               uriobj = new dojo._Url(uri[0]+"");
+
+                       if(
+                               relobj.path == "" &&
+                               !relobj.scheme &&
+                               !relobj.authority &&
+                               !relobj.query
+                       ){
+                               if(relobj.fragment != n){
+                                       uriobj.fragment = relobj.fragment;
+                               }
+                               relobj = uriobj;
+                       }else if(!relobj.scheme){
+                               relobj.scheme = uriobj.scheme;
+
+                               if(!relobj.authority){
+                                       relobj.authority = uriobj.authority;
+
+                                       if(relobj.path.charAt(0) != "/"){
+                                               var path = uriobj.path.substring(0,
+                                                       uriobj.path.lastIndexOf("/") + 1) + relobj.path;
+
+                                               var segs = path.split("/");
+                                               for(var j = 0; j < segs.length; j++){
+                                                       if(segs[j] == "."){
+                                                               // flatten "./" references
+                                                               if(j == segs.length - 1){
+                                                                       segs[j] = "";
+                                                               }else{
+                                                                       segs.splice(j, 1);
+                                                                       j--;
+                                                               }
+                                                       }else if(j > 0 && !(j == 1 && segs[0] == "") &&
+                                                               segs[j] == ".." && segs[j-1] != ".."){
+                                                               // flatten "../" references
+                                                               if(j == (segs.length - 1)){
+                                                                       segs.splice(j, 1);
+                                                                       segs[j - 1] = "";
+                                                               }else{
+                                                                       segs.splice(j - 1, 2);
+                                                                       j -= 2;
+                                                               }
+                                                       }
+                                               }
+                                               relobj.path = segs.join("/");
+                                       }
+                               }
+                       }
+
+                       uri = [];
+                       if(relobj.scheme){
+                               uri.push(relobj.scheme, ":");
+                       }
+                       if(relobj.authority){
+                               uri.push("//", relobj.authority);
+                       }
+                       uri.push(relobj.path);
+                       if(relobj.query){
+                               uri.push("?", relobj.query);
+                       }
+                       if(relobj.fragment){
+                               uri.push("#", relobj.fragment);
+                       }
+               }
+
+               this.uri = uri.join("");
+
+               // break the uri into its main components
+               var r = this.uri.match(ore);
+
+               this.scheme = r[2] || (r[1] ? "" : n);
+               this.authority = r[4] || (r[3] ? "" : n);
+               this.path = r[5]; // can never be undefined
+               this.query = r[7] || (r[6] ? "" : n);
+               this.fragment    = r[9] || (r[8] ? "" : n);
+
+               if(this.authority != n){
+                       // server based naming authority
+                       r = this.authority.match(ire);
+
+                       this.user = r[3] || n;
+                       this.password = r[4] || n;
+                       this.host = r[6] || r[7]; // ipv6 || ipv4
+                       this.port = r[9] || n;
+               }
+       };
+
+       dojo._Url.prototype.toString = function(){ return this.uri; };
+
+       dojo.moduleUrl = function(module, url){
+               if(!module){
+                //TODO: don't understand why this would ever be so, but that's the logic in loader
+                return null;
+               }
+               module = amdModuleName(module) + (url ? ("/" + url) : "");
+               var
+                       type= "",
+                       match= module.match(/(.+)(\.[^\/]*)$/);
+               if (match) {
+                       module= match[1];
+                       type= match[2];
+               }
+               return new dojo._Url(require.nameToUrl(module, type)); // dojo._Url
+       };
+
+       return dojo;
+});
diff --git a/lib/dojo/lib/kernel.js b/lib/dojo/lib/kernel.js
new file mode 100644 (file)
index 0000000..94a3fef
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+       Available via Academic Free License >= 2.1 OR the modified BSD license.
+       see: http://dojotoolkit.org/license for details
+*/
+
+
+// AMD module id = dojo/lib/kernel
+//
+// This module ensures the dojo object is initialized by...
+//
+//      * dojo/_base/_loader/bootstrap
+//      * dojo/lib/backCompat
+//      * dojo/_base/_loader/hostenv_browser
+//
+// This is roughly equivalent to the work that dojo.js does by injecting
+// bootstrap, loader, and hostenv_browser.
+//
+// note: this module is relevant only when loading dojo with an AMD loader;
+// it is never evaluated otherwise.
+
+// for now, we publish dojo into the global namespace because so many tests and apps expect it.
+define(["dojo/_base/_loader/hostenv_browser"], function(dojo_){
+       dojo= dojo_;
+       return dojo_;
+});
diff --git a/lib/dojo/lib/main-browser.js b/lib/dojo/lib/main-browser.js
new file mode 100644 (file)
index 0000000..cb5cc2a
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+       Available via Academic Free License >= 2.1 OR the modified BSD license.
+       see: http://dojotoolkit.org/license for details
+*/
+
+
+// AMD module id = dojo
+//
+// This is a package main module for the dojo package implemented so that the *absolute minimal*
+// changes are made to the dojo 1.x code. It is by no means optimal and should/will be replaced with
+// a less naive design--particularly as dojo v2.0 evolves.
+//
+// There are a few key design weaknesses in this implementation:
+//
+//      * generally, v1.x bootstrap, tests, and apps assume dojo is global
+//
+//      * the v1.x dojo/_base modules assume dojo is defined before they are defined
+//     and their factory functions go about populating dojo--which is really part of defining
+//     dojo. This leads to the appearance of a circular dependency and is a somewhat obtuse
+//     design since the dojo object must be delivered to them under a different module
+//     name (dojo/lib/kernel).
+//
+//   * bootstrap modules tend to incorporate unrelated features (e.g., hostenv_browser includes
+//     DOMContentLoad detection, thereby making it impossible to build out this feature if a
+//     particular app does not need it).
+//
+//   * The back compatibility layer requires/contains some non-optimal code that needs to be improved.
+//
+// As 1.7 and 2.0 evolve, these items will be addressed with more robust implementation.
+//
+// The boot sequence is as follows:
+//
+// dojo (this module) depends on...
+// dojo/lib/kernel which depends on...
+// dojo/_base/_loader/hostenv_browser which depends on...
+// dojo/lib/backCompat which depends on...
+// dojo/_base/_loader/bootstrap which depends on nothing
+//
+// This module further depends on the fairly ordinary modules in dojo/_base; each of these
+// modules depends on dojo/lib/kernel (at least) which provide the dojo object for them to augment.
+
+define("dojo", [
+       "dojo/lib/kernel",
+       "dojo/_base/lang",
+       "dojo/_base/array",
+       "dojo/_base/declare",
+       "dojo/_base/connect",
+       "dojo/_base/Deferred",
+       "dojo/_base/json",
+       "dojo/_base/Color",
+       "dojo/_base/window",
+       "dojo/_base/event",
+       "dojo/_base/html",
+       "dojo/_base/NodeList",
+       "dojo/_base/query",
+       "dojo/_base/xhr",
+       "dojo/_base/fx"
+], function(dojo){
+       return dojo;
+});
diff --git a/lib/dojo/lib/plugins/i18n.js b/lib/dojo/lib/plugins/i18n.js
new file mode 100644 (file)
index 0000000..93a57f7
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+       Copyright (c) 2004-2011, The 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 i18n! plugin
+//
+// We choose to include our own plugin in hopes of leveraging functionality already contained in dojo
+// and thereby reducing the size of the plugin compared to various loader implementations. Naturally, this
+// allows AMD loaders to be used without their plugins.
+
+// CAUTION, this module may return improper results if the AMD loader does not support toAbsMid and client
+// code passes relative plugin resource module ids. In that case, you should consider using the i18n! plugin
+// that comes with your loader.
+
+define(["dojo"], function(dojo) {
+       var
+               nlsRe=
+                       // regexp for reconstructing the master bundle name from parts of the regexp match
+                       // nlsRe.exec("foo/bar/baz/nls/en-ca/foo") gives:
+                       // ["foo/bar/baz/nls/en-ca/foo", "foo/bar/baz/nls/", "/", "/", "en-ca", "foo"]
+                       // nlsRe.exec("foo/bar/baz/nls/foo") gives:
+                       // ["foo/bar/baz/nls/foo", "foo/bar/baz/nls/", "/", "/", "foo", ""]
+                       // so, if match[5] is blank, it means this is the top bundle definition.
+                       // courtesy of http://requirejs.org
+                       /(^.*(^|\/)nls(\/|$))([^\/]*)\/?([^\/]*)/,
+               
+               getAvailableLocales= function(
+                       root,
+                       locale,
+                       bundlePath,
+                       bundleName
+               ){
+                       // return a vector of module ids containing all available locales with respect to the target locale
+                       // For example, assuming:
+                       //       * the root bundle indicates specific bundles for "fr" and "fr-ca",
+                       //       * bundlePath is "myPackage/nls"
+                       //       * bundleName is "myBundle"
+                       // Then a locale argument of "fr-ca" would return
+                       //       ["myPackage/nls/myBundle", "myPackage/nls/fr/myBundle", "myPackage/nls/fr-ca/myBundle"]
+                       // Notice that bundles are returned least-specific to most-specific, starting with the root.
+
+                       for(var result= [bundlePath + bundleName], localeParts= locale.split("-"), current= "", i= 0; i<localeParts.length; i++){
+                               current+= localeParts[i];
+                               if(root[current]){
+                                       result.push(bundlePath + current + "/" + bundleName);
+                               }
+                       }
+                       return result;
+               },
+
+               cache= {};
+
+       return {
+               load: function(id, require, load){
+                       // note: id may be relative
+                       var
+                               match= nlsRe.exec(id),
+                               bundlePath= (require.toAbsMid && require.toAbsMid(match[1])) || match[1],
+                               bundleName= match[5] || match[4],
+                               bundlePathAndName= bundlePath + bundleName,
+                               locale= (match[5] && match[4]) || dojo.locale,
+                               target= bundlePathAndName + "/" + locale;
+
+                       // if we've already resolved this request, just return it
+                       if (cache[target]) {
+                               load(cache[target]);
+                               return;
+                       }
+
+                       // get the root bundle which instructs which other bundles are required to contruct the localized bundle
+                       require([bundlePathAndName], function(root){
+                               var
+                                       current= cache[bundlePathAndName + "/"]= dojo.clone(root.root),
+                                       availableLocales= getAvailableLocales(root, locale, bundlePath, bundleName);
+                               require(availableLocales, function(){
+                                       for (var i= 1; i<availableLocales.length; i++){
+                                               cache[bundlePathAndName + "/" + availableLocales[i]]= current= dojo.mixin(dojo.clone(current), arguments[i]);
+                                       }
+                                       // target may not have been resolve (e.g., maybe only "fr" exists when "fr-ca" was requested)
+                                       cache[target]= current;
+                                       load(current);
+                               });
+                       });
+               },
+
+               cache: function(mid, value){
+                       cache[mid]= value;
+               }
+       };
+});
diff --git a/lib/dojo/lib/plugins/text.js b/lib/dojo/lib/plugins/text.js
new file mode 100644 (file)
index 0000000..75894a3
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+       Copyright (c) 2004-2011, The 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 text! plugin
+//
+// We choose to include our own plugin in hopes of leveraging functionality already contained in dojo
+// and thereby reducing the size of the plugin compared to various loader implementations. Naturally, this
+// allows AMD loaders to be used without their plugins.
+
+// CAUTION, this module may return improper results if the AMD loader does not support toAbsMid and client
+// code passes relative plugin resource module ids. In that case, you should consider using the text! plugin
+// that comes with your loader.
+
+define(["dojo", "dojo/cache"], function(dojo){
+       var
+               cached= {},
+
+               cache= function(cacheId, url, value){
+                       cached[cacheId]= value;
+                       dojo.cache({toString:function(){return url;}}, value);
+               },
+
+               strip= function(text){
+                       //note: this function courtesy of James Burke (https://github.com/jrburke/requirejs)
+                       //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.
+                       if(text){
+                               text= text.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
+                               var matches= text.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+                               if(matches){
+                                       text= matches[1];
+                               }
+                       }else{
+                               text = "";
+                       }
+                       return text;
+               };
+
+       return {
+               load:function(id, require, load){
+                       var match, cacheId, url, parts= id.split("!");
+                       if(require.toAbsMid){
+                               match= parts[0].match(/(.+)(\.[^\/]*)$/);
+                               cacheId= match ? require.toAbsMid(match[1]) + match[2] : require.toAbsMid(parts[0]);
+                               if(cacheId in cached){
+                                       load(parts[1]=="strip" ? strip(cached[cacheId]) : cached[cacheId]);
+                                       return;
+                               }
+                       }
+                       url= require.toUrl(parts[0]);
+                       dojo.xhrGet({
+                               url:url,
+                               load:function(text){
+                                       cacheId && cache(cacheId, url, text);
+                                       load(parts[1]=="strip" ? strip(text) : text);
+                               }
+                       });
+               },
+
+               cache:function(cacheId, mid, type, value) {
+                       cache(cacheId, require.nameToUrl(mid) + type, value);
+               }
+       };
+});
index 454e644e46ed7bf2cefbaffde64f9d916be7c48d..17cdf16845632abbeb25f76824d9ab40a4ff0a64 100644 (file)
@@ -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
+({"lightsteelblue":"vaalea teräksensininen","orangered":"oranssinpunainen","midnightblue":"yönsininen","cadetblue":"meren vihreä","seashell":"simpukankuori","slategrey":"savenharmaa","coral":"koralli","darkturquoise":"tumma turkoosi","antiquewhite":"antiikinvalkoinen","mediumspringgreen":"keskivaalea keväänvihreä","salmon":"lohenpunainen","darkgrey":"tummanharmaa","ivory":"norsunluu","greenyellow":"vihreänkeltainen","mistyrose":"utuinen ruusu","lightsalmon":"vaalea lohenpunainen","silver":"hopea","dimgrey":"himmeänharmaa","orange":"oranssi","white":"valkoinen","navajowhite":"navajonvalkoinen","royalblue":"syvänsininen","deeppink":"syvä vaaleanpunainen","lime":"vaaleanvihreä","oldlace":"vanha pitsi","chartreuse":"kellanvihreä","darkcyan":"tumma turkoosi","yellow":"keltainen","linen":"pellavanvaalea","olive":"oliivinvihreä","gold":"kulta","lawngreen":"ruohonvihreä","lightyellow":"vaaleankeltainen","tan":"kellanruskea","darkviolet":"tummanvioletti","lightslategrey":"vaaleanharmaa","grey":"harmaa","darkkhaki":"tumma khaki","green":"vihreä","deepskyblue":"tumma taivaansininen","aqua":"sinivihreä","sienna":"siena","mintcream":"minttukreemi","rosybrown":"punertavanruskea","mediumslateblue":"keskivaalea siniharmaa","magenta":"magenta","lightseagreen":"vaalea merenvihreä","cyan":"syaani","olivedrab":"oliivinruskea","darkgoldenrod":"tumma kultapiisku","slateblue":"savensininen","mediumaquamarine":"keskivaalea vedenvihreä","lavender":"laventeli","mediumseagreen":"keskivaalea merenvihreä","maroon":"kastanjanruskea","darkslategray":"tummanharmaa","mediumturquoise":"keskivaalea turkoosi","ghostwhite":"lakananvalkoinen","darkblue":"tummansininen","mediumvioletred":"keskivaalea lila","brown":"ruskea","lightgray":"vaaleanharmaa","sandybrown":"hiekanruskea","pink":"vaaleanpunainen","firebrick":"poltetun tiilen punainen","indigo":"indigo","snow":"lumivalkoinen","darkorchid":"tumma orkidea","turquoise":"turkoosi","chocolate":"suklaanruskea","springgreen":"keväänvihreä","moccasin":"nahanruskea","navy":"laivastonsininen","lemonchiffon":"sitruunankeltainen","teal":"sinivihreä","floralwhite":"kukanvalkoinen","cornflowerblue":"syvänsininen","paleturquoise":"haalea turkoosi","purple":"violetti","gainsboro":"gainsboro","plum":"luumunpunainen","red":"punainen","blue":"sininen","forestgreen":"metsänvihreä","darkgreen":"tummanvihreä","honeydew":"hunajameloninvihreä","darkseagreen":"tumma merenvihreä","lightcoral":"vaalea koralli","palevioletred":"haalea lila","mediumpurple":"keskivaalea violetti","saddlebrown":"satulanruskea","darkmagenta":"tumma magenta","thistle":"ohdake","whitesmoke":"savunvalkea","wheat":"vehnänkeltainen","violet":"violetti","lightskyblue":"vaalea taivaansininen","goldenrod":"kullanruskea","mediumblue":"keskisininen","skyblue":"taivaansininen","crimson":"karmiininpunainen","darksalmon":"tumma lohenpunainen","darkred":"tummanpunainen","darkslategrey":"tummanharmaa","peru":"peru","lightgrey":"vaaleanharmaa","lightgoldenrodyellow":"vaalea kultapiiskunkeltainen","blanchedalmond":"kuorittu manteli","aliceblue":"vaaleanharmaansininen","bisque":"vaaleanruskea","slategray":"savenharmaa","palegoldenrod":"haalea kultapiisku","darkorange":"tummanoranssi","aquamarine":"vedenvihreä","lightgreen":"vaaleanvihreä","burlywood":"puunruskea","dodgerblue":"Dodger-sininen","darkgray":"tummanharmaa","lightcyan":"vaalea syaani","powderblue":"harmaansininen","blueviolet":"sinivioletti","orchid":"orkidea","dimgray":"himmeänharmaa","beige":"vaaleanruskea","fuchsia":"purppura","lavenderblush":"laventelinpunainen","hotpink":"pinkki","steelblue":"teräksensininen","tomato":"tomaatinpunainen","lightpink":"vaaleanpunainen","limegreen":"limetinvihreä","indianred":"kirkkaanpunainen","papayawhip":"papaijavaahto","lightslategray":"vaaleanharmaa","gray":"harmaa","mediumorchid":"keskivaalea orkidea","cornsilk":"maissinkeltainen","black":"musta","seagreen":"merenvihreä","darkslateblue":"tumma siniharmaa","khaki":"khaki","lightblue":"vaaleansininen","palegreen":"haalea vihreä","azure":"taivaansininen","peachpuff":"persikka","darkolivegreen":"tummanoliivinvihreä","yellowgreen":"kellanvihreä"})
\ No newline at end of file
diff --git a/lib/dojo/nls/kk/colors.js b/lib/dojo/nls/kk/colors.js
new file mode 100644 (file)
index 0000000..19b9067
--- /dev/null
@@ -0,0 +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":"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
index 852268c429a24d029472db71e5e53d1be0363825..2fa71bd1bad9abf7e949960e8096ab6ed3e0651f 100644 (file)
@@ -1 +1 @@
-({"lightsteelblue":"jasny stalowoniebieski","orangered":"pomarańczowoczerwony","midnightblue":"ciemnogranatowy","cadetblue":"niebieskoszary","seashell":"muszla","slategrey":"łupkowy szary","coral":"koralowy","darkturquoise":"ciemnoturkusowy","antiquewhite":"biel antyczna","mediumspringgreen":"średnia wiosenna zieleń","salmon":"łososiowy","darkgrey":"ciemnoszary","ivory":"kość słoniowa","greenyellow":"zielonożółty","mistyrose":"bladoróżany","lightsalmon":"jasnołososiowy","silver":"srebrny","dimgrey":"przytłumiony szary","orange":"pomarańczowy","white":"biały","navajowhite":"piaskowy","royalblue":"błękit królewski","deeppink":"głęboki różowy","lime":"limetkowy","oldlace":"bladopomarańczowy","chartreuse":"jaskrawozielony","darkcyan":"ciemny cyjan","yellow":"żółty","linen":"lniany","olive":"oliwkowy","gold":"złoty","lawngreen":"trawiasty","lightyellow":"jasnożółty","tan":"kawowy","darkviolet":"ciemnofioletowy","lightslategrey":"jasny łupkowy szary","grey":"szary","darkkhaki":"ciemny khaki","green":"zielony","deepskyblue":"intensywny błękit nieba","aqua":"wodny","sienna":"siena","mintcream":"jasnomiętowy","rosybrown":"różowobrązowy","mediumslateblue":"średni łupkowy niebieski","magenta":"magenta","lightseagreen":"jasna morska zieleń","cyan":"cyjan","olivedrab":"oliwkowa zieleń","darkgoldenrod":"ciemnogliniany","slateblue":"łupkowy niebieski","mediumaquamarine":"średnia akwamaryna","lavender":"lawendowy","mediumseagreen":"średnia morska zieleń","maroon":"bordowy","darkslategray":"ciemny łupkowy szary","mediumturquoise":"średni turkusowy","ghostwhite":"bladobiały","darkblue":"ciemnoniebieski","mediumvioletred":"średni fioletowoczerwony","brown":"brązowy","lightgray":"jasnoszary","sandybrown":"piaskowy brąz","pink":"różowy","firebrick":"ceglasty","indigo":"indygo","snow":"śnieżny","darkorchid":"ciemna orchidea","turquoise":"turkusowy","chocolate":"czekoladowy","springgreen":"wiosenna zieleń","moccasin":"mokasynowy","navy":"granatowy","lemonchiffon":"cytrynowy","teal":"cyrankowy","floralwhite":"kwiatowa biel","cornflowerblue":"chabrowy","paleturquoise":"bladoturkusowy","purple":"purpurowy","gainsboro":"bladoszary","plum":"śliwkowy","red":"czerwony","blue":"niebieski","forestgreen":"leśna zieleń","darkgreen":"ciemnozielony","honeydew":"melon","darkseagreen":"ciemna morska zieleń","lightcoral":"jasnokoralowy","palevioletred":"blady fioletowoczerwony","mediumpurple":"średnia purpura","saddlebrown":"skórzany brązowy","darkmagenta":"ciemna magenta","thistle":"bladofioletowy","whitesmoke":"przydymiony biały","wheat":"pszeniczny","violet":"fioletowy","lightskyblue":"jasny błękit nieba","goldenrod":"gliniany","mediumblue":"średni niebieski","skyblue":"błękit nieba","crimson":"karmazynowy","darksalmon":"ciemnołososiowy","darkred":"ciemnoczerwony","darkslategrey":"ciemny łupkowy szary","peru":"jasnobrązowy","lightgrey":"jasnoszary","lightgoldenrodyellow":"jasnogliniana żółć","blanchedalmond":"migdałowy","aliceblue":"bladoniebieski","bisque":"biszkoptowy","slategray":"łupkowy szary","palegoldenrod":"bladogliniany","darkorange":"ciemnopomarańczowy","aquamarine":"akwamaryna","lightgreen":"jasnozielony","burlywood":"kolor drewna","dodgerblue":"błękit Dodgers","darkgray":"ciemnoszary","lightcyan":"jasny cyjan","powderblue":"pudrowy niebieski","blueviolet":"niebieskofioletowy","orchid":"orchidea","dimgray":"przytłumiony szary","beige":"beżowy","fuchsia":"fuksja","lavenderblush":"lawendoworóżowy","hotpink":"intensywny różowy","steelblue":"stalowy niebieski","tomato":"pomidorowy","lightpink":"jasnoróżowy","limegreen":"limetkowozielony","indianred":"kasztanowy","papayawhip":"papaja","lightslategray":"jasny łupkowy szary","gray":"szary","mediumorchid":"średnia orchidea","cornsilk":"kukurydziany","black":"czarny","seagreen":"morska zieleń","darkslateblue":"ciemny łupkowy niebieski","khaki":"khaki","lightblue":"jasnoniebieski","palegreen":"bladozielony","azure":"lazur","peachpuff":"brzoskwiniowy","darkolivegreen":"ciemnooliwkowy","yellowgreen":"żółtozielony"})
\ No newline at end of file
+({"lightsteelblue":"jasnostalowoniebieski","orangered":"pomarańczowoczerwony","midnightblue":"granatowoczarny","cadetblue":"niebieskoszary","seashell":"matowoliliowy","slategrey":"mysi","coral":"koralowy","darkturquoise":"mlecznoturkusowy","antiquewhite":"biel antyczna","mediumspringgreen":"średnia wiosenna zieleń","salmon":"łososiowy","darkgrey":"ciemnoszary","ivory":"kość słoniowa","greenyellow":"zielonożółty","mistyrose":"bladoróżany","lightsalmon":"jasnołososiowy","silver":"srebrny","dimgrey":"przyciemniony szary","orange":"pomarańczowy","white":"biały","navajowhite":"piaskowy","royalblue":"królewski błękit","deeppink":"głęboki różowy","lime":"limonkowy","oldlace":"bladopomarańczowy","chartreuse":"żółtooliwkowy","darkcyan":"ciemnoniebieskozielony","yellow":"żółty","linen":"lniany","olive":"oliwkowy","gold":"złoty","lawngreen":"trawiasty","lightyellow":"jasnożółty","tan":"śniady","darkviolet":"ciemnofiołkowy","lightslategrey":"jasny mysi","grey":"szary","darkkhaki":"ciemny khaki","green":"zielony","deepskyblue":"intensywny błękit nieba","aqua":"morski","sienna":"siena","mintcream":"jasnomiętowy","rosybrown":"różowobrązowy","mediumslateblue":"średni gołębi","magenta":"amarantowy","lightseagreen":"jasna zieleń morska","cyan":"niebieskozielony","olivedrab":"oliwkowa zieleń","darkgoldenrod":"ciemne stare złoto","slateblue":"gołębi","mediumaquamarine":"średnia akwamaryna","lavender":"lawendowy","mediumseagreen":"średnia zieleń morska","maroon":"kasztanowy","darkslategray":"ciemny mysi","mediumturquoise":"średni turkusowy","ghostwhite":"bladobiały","darkblue":"ciemnoniebieski","mediumvioletred":"średni fiołkowowoczerwony","brown":"brązowy","lightgray":"jasnoszary","sandybrown":"piaskowy brąz","pink":"różowy","firebrick":"ceglasty","indigo":"indygo","snow":"śnieżny","darkorchid":"ciemna orchidea","turquoise":"turkusowy","chocolate":"czekoladowy","springgreen":"wiosenna zieleń","moccasin":"mokasynowy","navy":"granatowy","lemonchiffon":"cytrynowy","teal":"zielonomodry","floralwhite":"kwiatowa biel","cornflowerblue":"chabrowy","paleturquoise":"bladoturkusowy","purple":"fioletowy","gainsboro":"bladoszary","plum":"śliwkowy","red":"czerwony","blue":"niebieski","forestgreen":"leśna zieleń","darkgreen":"ciemnozielony","honeydew":"miodowy","darkseagreen":"ciemna zieleń morska","lightcoral":"jasnokoralowy","palevioletred":"blady fiołkowoczerwony","mediumpurple":"średni fioletowy","saddlebrown":"brąz skórzany","darkmagenta":"ciemnoamarantowy","thistle":"bladofioletowy","whitesmoke":"przydymiony biały","wheat":"pszeniczny","violet":"fiołkowy","lightskyblue":"jasny błękit nieba","goldenrod":"stare złoto","mediumblue":"ciemnochabrowy","skyblue":"błękit nieba","crimson":"karmazynowy","darksalmon":"ciemnołososiowy","darkred":"ciemnoczerwony","darkslategrey":"ciemny mysi","peru":"jasnobrązowy","lightgrey":"jasnoszary","lightgoldenrodyellow":"jasnożółte stare złoto","blanchedalmond":"migdałowy","aliceblue":"bladoniebieski","bisque":"biszkoptowy","slategray":"mysi","palegoldenrod":"blade stare złoto","darkorange":"ciemnopomarańczowy","aquamarine":"akwamaryna","lightgreen":"jasnozielony","burlywood":"kolor drewna","dodgerblue":"błękit Dodgers","darkgray":"ciemnoszary","lightcyan":"jasnoniebieskozielony","powderblue":"jasnobladobłękitny","blueviolet":"błękitnofiołkowy","orchid":"orchidea","dimgray":"przyciemniony szary","beige":"beżowy","fuchsia":"fuksjowy","lavenderblush":"lawendowocielisty","hotpink":"odblaskoworóżowy","steelblue":"stalowoniebieski","tomato":"pomidorowy","lightpink":"jasnoróżowy","limegreen":"zielony limonkowy","indianred":"kasztanowy","papayawhip":"papaja","lightslategray":"jasny mysi","gray":"szary","mediumorchid":"średnia orchidea","cornsilk":"kukurydziany","black":"czarny","seagreen":"zieleń morska","darkslateblue":"ciemny gołębi","khaki":"khaki","lightblue":"jasnoniebieski","palegreen":"bladozielony","azure":"lazurowy","peachpuff":"brzoskwiniowy","darkolivegreen":"ciemnooliwkowy","yellowgreen":"żółtozielony"})
\ No newline at end of file
index e01afd2c1de5a892068a1cebda252b762989a768..5038b537e1ee61f126e8980784cb1691ff9589f7 100644 (file)
@@ -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
+({"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 esbatido","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 esbatido","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
index 897efc3c1fea386f0905369511b1234806e05328..0695a0ff61f339704f4dc75fd2385cb0b170792e 100644 (file)
@@ -1 +1 @@
-({"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"})
\ No newline at end of file
+({"lightsteelblue":"azul aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul ardósia","mediumaquamarine":"água marinha médio","lavender":"lavanda","mediumseagreen":"verde marinho médio","maroon":"castanho","darkslategray":"cinza ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul talco","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"})
\ No newline at end of file
index e009ce9f7ccb4ef3442a6eccc2eacbc711e755ae..15d3ac7ba0df5adb561cd87b0810736fb0714b76 100644 (file)
@@ -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
+({"lightsteelblue":"svetlo kovinsko modra","orangered":"oranžno-rdeča","midnightblue":"polnočno modra","cadetblue":"kadetsko modra","seashell":"morska lupina","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":"pepelnato siva","orange":"oranžna","white":"bela","navajowhite":"navajo bela","royalblue":"kraljevsko modra","deeppink":"temno rožnata","lime":"limetasta","oldlace":"stara čipka","chartreuse":"chartreuse","darkcyan":"temno cijan","yellow":"rumena","linen":"lanena","olive":"olivna","gold":"zlata","lawngreen":"travniško zelena","lightyellow":"svetlo rumena","tan":"rumeno-rjava","darkviolet":"temno vijolična","lightslategrey":"svetlo skrilasto siva","grey":"siva","darkkhaki":"temno kaki","green":"zelena","deepskyblue":"temno nebeško modra","aqua":"akva","sienna":"sienna","mintcream":"metina krema","rosybrown":"rožnato rjava","mediumslateblue":"srednje skrilasto modra","magenta":"magenta","lightseagreen":"svetlo morsko zelena","cyan":"cijan","olivedrab":"umazano olivna","darkgoldenrod":"temna zlata rozga","slateblue":"skrilasto modra","mediumaquamarine":"srednji akvamarin","lavender":"sivka","mediumseagreen":"srednje morsko zelena","maroon":"kostanjeva","darkslategray":"temno skrilasto siva","mediumturquoise":"srednje turkizna","ghostwhite":"senčnato bela","darkblue":"temno modra","mediumvioletred":"srednje vijolično rdeča","brown":"rjava","lightgray":"svetlo siva","sandybrown":"peščeno rjava","pink":"rožnata","firebrick":"opečnata","indigo":"indigo","snow":"snežena","darkorchid":"temno orhidejasta","turquoise":"turkizna","chocolate":"čokoladna","springgreen":"pomladno zelena","moccasin":"mokasinasta","navy":"mornarska","lemonchiffon":"limonast šifon","teal":"modrozelena","floralwhite":"cvetno bela","cornflowerblue":"plavičasto modra","paleturquoise":"bledo turkizna","purple":"škrlatna","gainsboro":"gainsboro","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":"temna magenta","thistle":"osatna","whitesmoke":"megleno bela","wheat":"pšenična","violet":"vijolična","lightskyblue":"svetlo nebeško modra","goldenrod":"zlata rozga","mediumblue":"srednje modra","skyblue":"nebeško 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":"obledelo mandljeva","aliceblue":"alice blue modra","bisque":"porcelanasta","slategray":"skrilasto siva","palegoldenrod":"bleda zlata rozga","darkorange":"temno oranžna","aquamarine":"akvamarin","lightgreen":"svetlo zelena","burlywood":"peščeno sivo-rjava","dodgerblue":"dodgersko modra","darkgray":"temno siva","lightcyan":"svetlo cijan","powderblue":"kobaltovo modra","blueviolet":"modro vijolična","orchid":"orhidejasta","dimgray":"pepelnato siva","beige":"bež","fuchsia":"fuksija","lavenderblush":"rožnato sivka","hotpink":"kričeče rožnata","steelblue":"kovinsko modra","tomato":"paradižnikova","lightpink":"svetlo rožnata","limegreen":"apneno zelena","indianred":"indijansko rdeča","papayawhip":"papaja","lightslategray":"svetlo skrilasto siva","gray":"siva","mediumorchid":"srednje orhidejasta","cornsilk":"koruzna","black":"črna","seagreen":"morsko zelena","darkslateblue":"temno skrilasto modra","khaki":"kaki","lightblue":"svetlo modra","palegreen":"bledo zelena","azure":"azurno modra","peachpuff":"breskova","darkolivegreen":"temna olivno zelena","yellowgreen":"rumeno-zelena"})
\ No newline at end of file
index 1b351daf4a977ddf25947643aeef4d4fbd3c5782..5cd71420ff3dbbda5758df07939fecd07fac01fd 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_ROOT");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ROOT");dojo.nls.colors.ROOT={"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.ROOT");dijit.nls.loading.ROOT={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ROOT");dijit.nls.common.ROOT={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ROOT");dijit.form.nls.validate.ROOT={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ROOT");dijit.form.nls.ComboBox.ROOT={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ROOT");dojo.cldr.nls.number.ROOT={"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:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
+dojo.provide("dojo.nls.tt-rss-layer_ROOT");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ROOT");dojo.nls.colors.ROOT={"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.ROOT");dijit.nls.loading.ROOT={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ROOT");dijit.nls.common.ROOT={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ROOT");dijit.form.nls.validate.ROOT={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ROOT");dijit.form.nls.ComboBox.ROOT={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ROOT");dojo.cldr.nls.number.ROOT={"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
index 6a19c6d6a2b24e045040771ed8ccadfae6e3dcbe..464e316468c623e21204eaaa0743c0a58d771604 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ar");dijit.form.nls.ComboBox.ar={"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"};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("dojo.nls.tt-rss-layer_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.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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ar");dijit.form.nls.ComboBox.ar={"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"};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":"∞","minusSign":"-","decimal":"٫","nan":"ليس رقم","perMille":"؉","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nativeZeroDigit":"0","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};
index 0f56ef882ad56bcf66fedff9c28d0d95f15f3df1..4cc759041401c962f33145a01bd34d33d4920ef8 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_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.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("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"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 93ed7c8f1a05dc74e80c3ea8184e42f0ac28c834..8c008a467b085ae3acd72da8aa34489162ed97c8 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_cs");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.cs");dojo.nls.colors.cs={"lightsteelblue":"světlá ocelová modrá","orangered":"oranžovočervená","midnightblue":"temně modrá","cadetblue":"šedomodrá","seashell":"lasturová","slategrey":"břidlicová šedá","coral":"korálová červená","darkturquoise":"tmavě tyrkysová","antiquewhite":"krémově bílá","mediumspringgreen":"střední jarní zelená","salmon":"lososová","darkgrey":"tmavě šedá","ivory":"slonovinová","greenyellow":"zelenožlutá","mistyrose":"růžovobílá","lightsalmon":"světle lososová","silver":"stříbrná","dimgrey":"kouřově šedá","orange":"oranžová","white":"bílá","navajowhite":"světle krémová","royalblue":"královská modrá","deeppink":"sytě růžová","lime":"limetková","oldlace":"světle béžová","chartreuse":"chartreuska","darkcyan":"tmavě azurová","yellow":"žlutá","linen":"bledě šedobéžová","olive":"olivová","gold":"zlatá","lawngreen":"jasně zelená","lightyellow":"bledě žlutá","tan":"šedobéžová","darkviolet":"tmavě fialová","lightslategrey":"světlá břidlicová šedá","grey":"šedá","darkkhaki":"pískově hnědá","green":"zelená","deepskyblue":"sytá nebeská modrá","aqua":"azurová","sienna":"siena","mintcream":"mentolová","rosybrown":"růžovohnědá","mediumslateblue":"střední břidlicová modrá","magenta":"purpurová","lightseagreen":"světlá mořská zelená","cyan":"azurová","olivedrab":"khaki","darkgoldenrod":"tmavě béžová","slateblue":"břidlicová modrá","mediumaquamarine":"střední akvamarínová","lavender":"levandulová","mediumseagreen":"střední mořská zelená","maroon":"kaštanová","darkslategray":"tmavá břidlicová šedá","mediumturquoise":"středně tyrkysová","ghostwhite":"modravě bílá","darkblue":"tmavě modrá","mediumvioletred":"středně fialovočervená","brown":"červenohnědá","lightgray":"světle šedá","sandybrown":"oranžovohnědá","pink":"růžová","firebrick":"cihlová","indigo":"indigově modrá","snow":"sněhobílá","darkorchid":"tmavě orchidejová","turquoise":"tyrkysová","chocolate":"hnědobéžová","springgreen":"jarní zelená","moccasin":"bledě krémová","navy":"námořnická modrá","lemonchiffon":"světle citrónová","teal":"šedozelená","floralwhite":"květinově bílá","cornflowerblue":"chrpově modrá","paleturquoise":"bledě tyrkysová","purple":"nachová","gainsboro":"bledě šedá","plum":"švestková","red":"červená","blue":"modrá","forestgreen":"lesní zelená","darkgreen":"tmavě zelená","honeydew":"nazelenalá","darkseagreen":"tmavá mořská zelená","lightcoral":"světle korálová","palevioletred":"bledě fialovočervená","mediumpurple":"středně nachová","saddlebrown":"hnědá","darkmagenta":"tmavě purpurová","thistle":"bodláková","whitesmoke":"kouřově bílá","wheat":"zlatohnědá","violet":"fialová","lightskyblue":"světlá nebeská modrá","goldenrod":"béžová","mediumblue":"středně modrá","skyblue":"nebeská modrá","crimson":"karmínová","darksalmon":"tmavě lososová","darkred":"tmavě červená","darkslategrey":"tmavá břidlicová šedá","peru":"karamelová","lightgrey":"světle šedá","lightgoldenrodyellow":"světle žlutá","blanchedalmond":"mandlová","aliceblue":"modravá","bisque":"bledě oranžová","slategray":"břidlicová šedá","palegoldenrod":"bledě písková","darkorange":"tmavě oranžová","aquamarine":"akvamarínová","lightgreen":"světle zelená","burlywood":"krémová","dodgerblue":"jasně modrá","darkgray":"tmavě šedá","lightcyan":"světle azurová","powderblue":"bledě modrá","blueviolet":"modrofialová","orchid":"orchidejová","dimgray":"kouřově šedá","beige":"bledě béžová","fuchsia":"fuchsiová","lavenderblush":"levandulová růžová","hotpink":"jasně růžová","steelblue":"ocelová modrá","tomato":"tomatová","lightpink":"světle růžová","limegreen":"limetkově zelená","indianred":"indiánská červená","papayawhip":"papájová","lightslategray":"světlá břidlicová šedá","gray":"šedá","mediumorchid":"středně orchidejová","cornsilk":"režná","black":"černá","seagreen":"mořská zelená","darkslateblue":"tmavá břidlicová modrá","khaki":"písková","lightblue":"světle modrá","palegreen":"bledě zelená","azure":"bledě azurová","peachpuff":"broskvová","darkolivegreen":"tmavě olivová","yellowgreen":"žlutozelená"};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ě"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.cs");dijit.nls.common.cs={"buttonOk":"OK","buttonCancel":"Storno","buttonSave":"Uložit","itemClose":"Zavřít"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.cs");dijit.form.nls.validate.cs={"rangeMessage":"Tato hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota není platná.","missingMessage":"Tato hodnota je vyžadována."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.cs");dijit.form.nls.ComboBox.cs={"previousMessage":"Předchozí volby","nextMessage":"Další volby"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.cs");dojo.cldr.nls.number.cs={"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("dojo.nls.tt-rss-layer_cs");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.cs");dojo.nls.colors.cs={"lightsteelblue":"světlá ocelová modrá","orangered":"oranžovočervená","midnightblue":"temně modrá","cadetblue":"šedomodrá","seashell":"lasturová","slategrey":"břidlicová šedá","coral":"korálová červená","darkturquoise":"tmavě tyrkysová","antiquewhite":"krémově bílá","mediumspringgreen":"střední jarní zelená","salmon":"lososová","darkgrey":"tmavě šedá","ivory":"slonovinová","greenyellow":"zelenožlutá","mistyrose":"růžovobílá","lightsalmon":"světle lososová","silver":"stříbrná","dimgrey":"kouřově šedá","orange":"oranžová","white":"bílá","navajowhite":"světle krémová","royalblue":"královská modrá","deeppink":"sytě růžová","lime":"limetková","oldlace":"světle béžová","chartreuse":"chartreuska","darkcyan":"tmavě azurová","yellow":"žlutá","linen":"bledě šedobéžová","olive":"olivová","gold":"zlatá","lawngreen":"jasně zelená","lightyellow":"bledě žlutá","tan":"šedobéžová","darkviolet":"tmavě fialová","lightslategrey":"světlá břidlicová šedá","grey":"šedá","darkkhaki":"pískově hnědá","green":"zelená","deepskyblue":"sytá nebeská modrá","aqua":"azurová","sienna":"siena","mintcream":"mentolová","rosybrown":"růžovohnědá","mediumslateblue":"střední břidlicová modrá","magenta":"purpurová","lightseagreen":"světlá mořská zelená","cyan":"azurová","olivedrab":"khaki","darkgoldenrod":"tmavě béžová","slateblue":"břidlicová modrá","mediumaquamarine":"střední akvamarínová","lavender":"levandulová","mediumseagreen":"střední mořská zelená","maroon":"kaštanová","darkslategray":"tmavá břidlicová šedá","mediumturquoise":"středně tyrkysová","ghostwhite":"modravě bílá","darkblue":"tmavě modrá","mediumvioletred":"středně fialovočervená","brown":"červenohnědá","lightgray":"světle šedá","sandybrown":"oranžovohnědá","pink":"růžová","firebrick":"cihlová","indigo":"indigově modrá","snow":"sněhobílá","darkorchid":"tmavě orchidejová","turquoise":"tyrkysová","chocolate":"hnědobéžová","springgreen":"jarní zelená","moccasin":"bledě krémová","navy":"námořnická modrá","lemonchiffon":"světle citrónová","teal":"šedozelená","floralwhite":"květinově bílá","cornflowerblue":"chrpově modrá","paleturquoise":"bledě tyrkysová","purple":"nachová","gainsboro":"bledě šedá","plum":"švestková","red":"červená","blue":"modrá","forestgreen":"lesní zelená","darkgreen":"tmavě zelená","honeydew":"nazelenalá","darkseagreen":"tmavá mořská zelená","lightcoral":"světle korálová","palevioletred":"bledě fialovočervená","mediumpurple":"středně nachová","saddlebrown":"hnědá","darkmagenta":"tmavě purpurová","thistle":"bodláková","whitesmoke":"kouřově bílá","wheat":"zlatohnědá","violet":"fialová","lightskyblue":"světlá nebeská modrá","goldenrod":"béžová","mediumblue":"středně modrá","skyblue":"nebeská modrá","crimson":"karmínová","darksalmon":"tmavě lososová","darkred":"tmavě červená","darkslategrey":"tmavá břidlicová šedá","peru":"karamelová","lightgrey":"světle šedá","lightgoldenrodyellow":"světle žlutá","blanchedalmond":"mandlová","aliceblue":"modravá","bisque":"bledě oranžová","slategray":"břidlicová šedá","palegoldenrod":"bledě písková","darkorange":"tmavě oranžová","aquamarine":"akvamarínová","lightgreen":"světle zelená","burlywood":"krémová","dodgerblue":"jasně modrá","darkgray":"tmavě šedá","lightcyan":"světle azurová","powderblue":"bledě modrá","blueviolet":"modrofialová","orchid":"orchidejová","dimgray":"kouřově šedá","beige":"bledě béžová","fuchsia":"fuchsiová","lavenderblush":"levandulová růžová","hotpink":"jasně růžová","steelblue":"ocelová modrá","tomato":"tomatová","lightpink":"světle růžová","limegreen":"limetkově zelená","indianred":"indiánská červená","papayawhip":"papájová","lightslategray":"světlá břidlicová šedá","gray":"šedá","mediumorchid":"středně orchidejová","cornsilk":"režná","black":"černá","seagreen":"mořská zelená","darkslateblue":"tmavá břidlicová modrá","khaki":"písková","lightblue":"světle modrá","palegreen":"bledě zelená","azure":"bledě azurová","peachpuff":"broskvová","darkolivegreen":"tmavě olivová","yellowgreen":"žlutozelená"};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ě"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.cs");dijit.nls.common.cs={"buttonOk":"OK","buttonCancel":"Storno","buttonSave":"Uložit","itemClose":"Zavřít"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.cs");dijit.form.nls.validate.cs={"rangeMessage":"Tato hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota není platná.","missingMessage":"Tato hodnota je vyžadována."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.cs");dijit.form.nls.ComboBox.cs={"previousMessage":"Předchozí volby","nextMessage":"Další volby"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.cs");dojo.cldr.nls.number.cs={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 7f8be8c68fb8315ce415c378e1a6251938eb0dad..365eb98dafe97d9944af8bea3350b74933abe035 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_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.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 ikke gyldig.","missingMessage":"Værdien er påkrævet."};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"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index e5bb92237bd8a999556f471fdb6ccb74114d4e87..f43af10d154656438084ca6ddc7897d29be4bb73 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_de-de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de_de");dojo.nls.colors.de_de={"lightsteelblue":"Helles Stahlblau","orangered":"Orangerot","midnightblue":"Mitternachtblau","cadetblue":"Kadettenblau","seashell":"Muschelweiß","slategrey":"Schiefergrau","coral":"Koralle","darkturquoise":"Dunkeltürkis","antiquewhite":"Antikweiß","mediumspringgreen":"Mittelfrühlingsgrün","salmon":"Lachs","darkgrey":"Dunkelgrau","ivory":"Elfenbein","greenyellow":"Grüngelb","mistyrose":"Blassrose","lightsalmon":"Helllachs","silver":"Silbergrau","dimgrey":"Blassgrau","orange":"Orange","white":"Weiß","navajowhite":"Navajo-weiß","royalblue":"Königsblau","deeppink":"Tiefrosa","lime":"Limone","oldlace":"Alte Spitze","chartreuse":"Helles Gelbgrün","darkcyan":"Dunkelzyan","yellow":"Gelb","linen":"Leinen","olive":"Oliv","gold":"Gold","lawngreen":"Grasgrün","lightyellow":"Hellgelb","tan":"Hautfarben","darkviolet":"Dunkelviolett","lightslategrey":"Helles Schiefergrau","grey":"Grau","darkkhaki":"Dunkelkhaki","green":"Grün","deepskyblue":"Dunkles Himmelblau","aqua":"Wasserblau","sienna":"Sienna","mintcream":"Mintcreme","rosybrown":"Rosigbraun","mediumslateblue":"Mittelschieferblau ","magenta":"Magenta","lightseagreen":"Helles Meergrün","cyan":"Zyan","olivedrab":"Olivgrau","darkgoldenrod":"Dunkelgoldgelb","slateblue":"Schieferblau","mediumaquamarine":"Mittelaquamarin","lavender":"Lavendelblau","mediumseagreen":"Mittelmeeresgrün","maroon":"Kastanienbraun","darkslategray":"Dunkelschiefergrau","mediumturquoise":"Mitteltürkis ","ghostwhite":"Geisterweiß","darkblue":"Dunkelblau","mediumvioletred":"Mittelviolettrot ","brown":"Braun","lightgray":"Hellgrau","sandybrown":"Sandbraun","pink":"Rosa","firebrick":"Schamottestein","indigo":"Indigoblau","snow":"Schneeweiß","darkorchid":"Dunkelorchidee","turquoise":"Türkis","chocolate":"Schokoladenbraun","springgreen":"Frühlingsgrün","moccasin":"Mokassin","navy":"Marineblau","lemonchiffon":"Zitronenchiffon","teal":"Smaragdgrün","floralwhite":"Blütenweiß","cornflowerblue":"Kornblumenblau","paleturquoise":"Blasstürkis","purple":"Purpurrot","gainsboro":"Gainsboro","plum":"Pflaume","red":"Rot","blue":"Blau","forestgreen":"Forstgrün","darkgreen":"Dunkelgrün","honeydew":"Honigtau","darkseagreen":"Dunkles Meergrün","lightcoral":"Hellkoralle","palevioletred":"Blassviolettrot ","mediumpurple":"Mittelpurpur","saddlebrown":"Sattelbraun","darkmagenta":"Dunkelmagenta","thistle":"Distel","whitesmoke":"Rauchweiß","wheat":"Weizen","violet":"Violett","lightskyblue":"Helles Himmelblau","goldenrod":"Goldgelb","mediumblue":"Mittelblau","skyblue":"Himmelblau","crimson":"Karmesinrot","darksalmon":"Dunkellachs","darkred":"Dunkelrot","darkslategrey":"Dunkelschiefergrau","peru":"Peru","lightgrey":"Hellgrau","lightgoldenrodyellow":"Hellgoldgelb","blanchedalmond":"Mandelweiß","aliceblue":"Alice-blau","bisque":"Bisquit","slategray":"Schiefergrau","palegoldenrod":"Blassgoldgelb","darkorange":"Dunkelorange","aquamarine":"Aquamarin","lightgreen":"Hellgrün","burlywood":"Burlywood","dodgerblue":"Dodger-blau","darkgray":"Dunkelgrau","lightcyan":"Hellzyan","powderblue":"Pulverblau","blueviolet":"Blauviolett","orchid":"Orchidee","dimgray":"Blassgrau","beige":"Beige","fuchsia":"Fuchsia","lavenderblush":"Lavendelhauch","hotpink":"Knallrosa","steelblue":"Stahlblau","tomato":"Tomatenrot","lightpink":"Hellrosa","limegreen":"Limonengrün","indianred":"Indischrot","papayawhip":"Papayacreme","lightslategray":"Helles Schiefergrau","gray":"Grau","mediumorchid":"Mittelorchidee","cornsilk":"Kornseide","black":"Schwarz","seagreen":"Meeresgrün","darkslateblue":"Dunkelschieferblau","khaki":"Khaki","lightblue":"Hellblau","palegreen":"Blassgrün","azure":"Azur","peachpuff":"Pfirsich","darkolivegreen":"Dunkelolivgrün","yellowgreen":"Gelbgrün"};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."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de_de");dijit.nls.common.de_de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de_de");dijit.form.nls.validate.de_de={"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de_de");dijit.form.nls.ComboBox.de_de={"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de_de");dojo.cldr.nls.number.de_de={"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("dojo.nls.tt-rss-layer_de-de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de_de");dojo.nls.colors.de_de={"lightsteelblue":"Helles Stahlblau","orangered":"Orangerot","midnightblue":"Mitternachtblau","cadetblue":"Kadettenblau","seashell":"Muschelweiß","slategrey":"Schiefergrau","coral":"Koralle","darkturquoise":"Dunkeltürkis","antiquewhite":"Antikweiß","mediumspringgreen":"Mittelfrühlingsgrün","salmon":"Lachs","darkgrey":"Dunkelgrau","ivory":"Elfenbein","greenyellow":"Grüngelb","mistyrose":"Blassrose","lightsalmon":"Helllachs","silver":"Silbergrau","dimgrey":"Blassgrau","orange":"Orange","white":"Weiß","navajowhite":"Navajo-weiß","royalblue":"Königsblau","deeppink":"Tiefrosa","lime":"Limone","oldlace":"Alte Spitze","chartreuse":"Helles Gelbgrün","darkcyan":"Dunkelzyan","yellow":"Gelb","linen":"Leinen","olive":"Oliv","gold":"Gold","lawngreen":"Grasgrün","lightyellow":"Hellgelb","tan":"Hautfarben","darkviolet":"Dunkelviolett","lightslategrey":"Helles Schiefergrau","grey":"Grau","darkkhaki":"Dunkelkhaki","green":"Grün","deepskyblue":"Dunkles Himmelblau","aqua":"Wasserblau","sienna":"Sienna","mintcream":"Mintcreme","rosybrown":"Rosigbraun","mediumslateblue":"Mittelschieferblau ","magenta":"Magenta","lightseagreen":"Helles Meergrün","cyan":"Zyan","olivedrab":"Olivgrau","darkgoldenrod":"Dunkelgoldgelb","slateblue":"Schieferblau","mediumaquamarine":"Mittelaquamarin","lavender":"Lavendelblau","mediumseagreen":"Mittelmeeresgrün","maroon":"Kastanienbraun","darkslategray":"Dunkelschiefergrau","mediumturquoise":"Mitteltürkis ","ghostwhite":"Geisterweiß","darkblue":"Dunkelblau","mediumvioletred":"Mittelviolettrot ","brown":"Braun","lightgray":"Hellgrau","sandybrown":"Sandbraun","pink":"Rosa","firebrick":"Schamottestein","indigo":"Indigoblau","snow":"Schneeweiß","darkorchid":"Dunkelorchidee","turquoise":"Türkis","chocolate":"Schokoladenbraun","springgreen":"Frühlingsgrün","moccasin":"Mokassin","navy":"Marineblau","lemonchiffon":"Zitronenchiffon","teal":"Smaragdgrün","floralwhite":"Blütenweiß","cornflowerblue":"Kornblumenblau","paleturquoise":"Blasstürkis","purple":"Purpurrot","gainsboro":"Gainsboro","plum":"Pflaume","red":"Rot","blue":"Blau","forestgreen":"Forstgrün","darkgreen":"Dunkelgrün","honeydew":"Honigtau","darkseagreen":"Dunkles Meergrün","lightcoral":"Hellkoralle","palevioletred":"Blassviolettrot ","mediumpurple":"Mittelpurpur","saddlebrown":"Sattelbraun","darkmagenta":"Dunkelmagenta","thistle":"Distel","whitesmoke":"Rauchweiß","wheat":"Weizen","violet":"Violett","lightskyblue":"Helles Himmelblau","goldenrod":"Goldgelb","mediumblue":"Mittelblau","skyblue":"Himmelblau","crimson":"Karmesinrot","darksalmon":"Dunkellachs","darkred":"Dunkelrot","darkslategrey":"Dunkelschiefergrau","peru":"Peru","lightgrey":"Hellgrau","lightgoldenrodyellow":"Hellgoldgelb","blanchedalmond":"Mandelweiß","aliceblue":"Alice-blau","bisque":"Bisquit","slategray":"Schiefergrau","palegoldenrod":"Blassgoldgelb","darkorange":"Dunkelorange","aquamarine":"Aquamarin","lightgreen":"Hellgrün","burlywood":"Burlywood","dodgerblue":"Dodger-blau","darkgray":"Dunkelgrau","lightcyan":"Hellzyan","powderblue":"Pulverblau","blueviolet":"Blauviolett","orchid":"Orchidee","dimgray":"Blassgrau","beige":"Beige","fuchsia":"Fuchsia","lavenderblush":"Lavendelhauch","hotpink":"Knallrosa","steelblue":"Stahlblau","tomato":"Tomatenrot","lightpink":"Hellrosa","limegreen":"Limonengrün","indianred":"Indischrot","papayawhip":"Papayacreme","lightslategray":"Helles Schiefergrau","gray":"Grau","mediumorchid":"Mittelorchidee","cornsilk":"Kornseide","black":"Schwarz","seagreen":"Meeresgrün","darkslateblue":"Dunkelschieferblau","khaki":"Khaki","lightblue":"Hellblau","palegreen":"Blassgrün","azure":"Azur","peachpuff":"Pfirsich","darkolivegreen":"Dunkelolivgrün","yellowgreen":"Gelbgrün"};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."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de_de");dijit.nls.common.de_de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de_de");dijit.form.nls.validate.de_de={"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de_de");dijit.form.nls.ComboBox.de_de={"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de_de");dojo.cldr.nls.number.de_de={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 5500fc19b17c399796842b0099cde89d37fcaf79..9d0939e4a6af092431e6b70d061a397e10018f09 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de");dojo.nls.colors.de={"lightsteelblue":"Helles Stahlblau","orangered":"Orangerot","midnightblue":"Mitternachtblau","cadetblue":"Kadettenblau","seashell":"Muschelweiß","slategrey":"Schiefergrau","coral":"Koralle","darkturquoise":"Dunkeltürkis","antiquewhite":"Antikweiß","mediumspringgreen":"Mittelfrühlingsgrün","salmon":"Lachs","darkgrey":"Dunkelgrau","ivory":"Elfenbein","greenyellow":"Grüngelb","mistyrose":"Blassrose","lightsalmon":"Helllachs","silver":"Silbergrau","dimgrey":"Blassgrau","orange":"Orange","white":"Weiß","navajowhite":"Navajo-weiß","royalblue":"Königsblau","deeppink":"Tiefrosa","lime":"Limone","oldlace":"Alte Spitze","chartreuse":"Helles Gelbgrün","darkcyan":"Dunkelzyan","yellow":"Gelb","linen":"Leinen","olive":"Oliv","gold":"Gold","lawngreen":"Grasgrün","lightyellow":"Hellgelb","tan":"Hautfarben","darkviolet":"Dunkelviolett","lightslategrey":"Helles Schiefergrau","grey":"Grau","darkkhaki":"Dunkelkhaki","green":"Grün","deepskyblue":"Dunkles Himmelblau","aqua":"Wasserblau","sienna":"Sienna","mintcream":"Mintcreme","rosybrown":"Rosigbraun","mediumslateblue":"Mittelschieferblau ","magenta":"Magenta","lightseagreen":"Helles Meergrün","cyan":"Zyan","olivedrab":"Olivgrau","darkgoldenrod":"Dunkelgoldgelb","slateblue":"Schieferblau","mediumaquamarine":"Mittelaquamarin","lavender":"Lavendelblau","mediumseagreen":"Mittelmeeresgrün","maroon":"Kastanienbraun","darkslategray":"Dunkelschiefergrau","mediumturquoise":"Mitteltürkis ","ghostwhite":"Geisterweiß","darkblue":"Dunkelblau","mediumvioletred":"Mittelviolettrot ","brown":"Braun","lightgray":"Hellgrau","sandybrown":"Sandbraun","pink":"Rosa","firebrick":"Schamottestein","indigo":"Indigoblau","snow":"Schneeweiß","darkorchid":"Dunkelorchidee","turquoise":"Türkis","chocolate":"Schokoladenbraun","springgreen":"Frühlingsgrün","moccasin":"Mokassin","navy":"Marineblau","lemonchiffon":"Zitronenchiffon","teal":"Smaragdgrün","floralwhite":"Blütenweiß","cornflowerblue":"Kornblumenblau","paleturquoise":"Blasstürkis","purple":"Purpurrot","gainsboro":"Gainsboro","plum":"Pflaume","red":"Rot","blue":"Blau","forestgreen":"Forstgrün","darkgreen":"Dunkelgrün","honeydew":"Honigtau","darkseagreen":"Dunkles Meergrün","lightcoral":"Hellkoralle","palevioletred":"Blassviolettrot ","mediumpurple":"Mittelpurpur","saddlebrown":"Sattelbraun","darkmagenta":"Dunkelmagenta","thistle":"Distel","whitesmoke":"Rauchweiß","wheat":"Weizen","violet":"Violett","lightskyblue":"Helles Himmelblau","goldenrod":"Goldgelb","mediumblue":"Mittelblau","skyblue":"Himmelblau","crimson":"Karmesinrot","darksalmon":"Dunkellachs","darkred":"Dunkelrot","darkslategrey":"Dunkelschiefergrau","peru":"Peru","lightgrey":"Hellgrau","lightgoldenrodyellow":"Hellgoldgelb","blanchedalmond":"Mandelweiß","aliceblue":"Alice-blau","bisque":"Bisquit","slategray":"Schiefergrau","palegoldenrod":"Blassgoldgelb","darkorange":"Dunkelorange","aquamarine":"Aquamarin","lightgreen":"Hellgrün","burlywood":"Burlywood","dodgerblue":"Dodger-blau","darkgray":"Dunkelgrau","lightcyan":"Hellzyan","powderblue":"Pulverblau","blueviolet":"Blauviolett","orchid":"Orchidee","dimgray":"Blassgrau","beige":"Beige","fuchsia":"Fuchsia","lavenderblush":"Lavendelhauch","hotpink":"Knallrosa","steelblue":"Stahlblau","tomato":"Tomatenrot","lightpink":"Hellrosa","limegreen":"Limonengrün","indianred":"Indischrot","papayawhip":"Papayacreme","lightslategray":"Helles Schiefergrau","gray":"Grau","mediumorchid":"Mittelorchidee","cornsilk":"Kornseide","black":"Schwarz","seagreen":"Meeresgrün","darkslateblue":"Dunkelschieferblau","khaki":"Khaki","lightblue":"Hellblau","palegreen":"Blassgrün","azure":"Azur","peachpuff":"Pfirsich","darkolivegreen":"Dunkelolivgrün","yellowgreen":"Gelbgrün"};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."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de");dijit.nls.common.de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de");dijit.form.nls.validate.de={"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de");dijit.form.nls.ComboBox.de={"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de");dojo.cldr.nls.number.de={"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("dojo.nls.tt-rss-layer_de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de");dojo.nls.colors.de={"lightsteelblue":"Helles Stahlblau","orangered":"Orangerot","midnightblue":"Mitternachtblau","cadetblue":"Kadettenblau","seashell":"Muschelweiß","slategrey":"Schiefergrau","coral":"Koralle","darkturquoise":"Dunkeltürkis","antiquewhite":"Antikweiß","mediumspringgreen":"Mittelfrühlingsgrün","salmon":"Lachs","darkgrey":"Dunkelgrau","ivory":"Elfenbein","greenyellow":"Grüngelb","mistyrose":"Blassrose","lightsalmon":"Helllachs","silver":"Silbergrau","dimgrey":"Blassgrau","orange":"Orange","white":"Weiß","navajowhite":"Navajo-weiß","royalblue":"Königsblau","deeppink":"Tiefrosa","lime":"Limone","oldlace":"Alte Spitze","chartreuse":"Helles Gelbgrün","darkcyan":"Dunkelzyan","yellow":"Gelb","linen":"Leinen","olive":"Oliv","gold":"Gold","lawngreen":"Grasgrün","lightyellow":"Hellgelb","tan":"Hautfarben","darkviolet":"Dunkelviolett","lightslategrey":"Helles Schiefergrau","grey":"Grau","darkkhaki":"Dunkelkhaki","green":"Grün","deepskyblue":"Dunkles Himmelblau","aqua":"Wasserblau","sienna":"Sienna","mintcream":"Mintcreme","rosybrown":"Rosigbraun","mediumslateblue":"Mittelschieferblau ","magenta":"Magenta","lightseagreen":"Helles Meergrün","cyan":"Zyan","olivedrab":"Olivgrau","darkgoldenrod":"Dunkelgoldgelb","slateblue":"Schieferblau","mediumaquamarine":"Mittelaquamarin","lavender":"Lavendelblau","mediumseagreen":"Mittelmeeresgrün","maroon":"Kastanienbraun","darkslategray":"Dunkelschiefergrau","mediumturquoise":"Mitteltürkis ","ghostwhite":"Geisterweiß","darkblue":"Dunkelblau","mediumvioletred":"Mittelviolettrot ","brown":"Braun","lightgray":"Hellgrau","sandybrown":"Sandbraun","pink":"Rosa","firebrick":"Schamottestein","indigo":"Indigoblau","snow":"Schneeweiß","darkorchid":"Dunkelorchidee","turquoise":"Türkis","chocolate":"Schokoladenbraun","springgreen":"Frühlingsgrün","moccasin":"Mokassin","navy":"Marineblau","lemonchiffon":"Zitronenchiffon","teal":"Smaragdgrün","floralwhite":"Blütenweiß","cornflowerblue":"Kornblumenblau","paleturquoise":"Blasstürkis","purple":"Purpurrot","gainsboro":"Gainsboro","plum":"Pflaume","red":"Rot","blue":"Blau","forestgreen":"Forstgrün","darkgreen":"Dunkelgrün","honeydew":"Honigtau","darkseagreen":"Dunkles Meergrün","lightcoral":"Hellkoralle","palevioletred":"Blassviolettrot ","mediumpurple":"Mittelpurpur","saddlebrown":"Sattelbraun","darkmagenta":"Dunkelmagenta","thistle":"Distel","whitesmoke":"Rauchweiß","wheat":"Weizen","violet":"Violett","lightskyblue":"Helles Himmelblau","goldenrod":"Goldgelb","mediumblue":"Mittelblau","skyblue":"Himmelblau","crimson":"Karmesinrot","darksalmon":"Dunkellachs","darkred":"Dunkelrot","darkslategrey":"Dunkelschiefergrau","peru":"Peru","lightgrey":"Hellgrau","lightgoldenrodyellow":"Hellgoldgelb","blanchedalmond":"Mandelweiß","aliceblue":"Alice-blau","bisque":"Bisquit","slategray":"Schiefergrau","palegoldenrod":"Blassgoldgelb","darkorange":"Dunkelorange","aquamarine":"Aquamarin","lightgreen":"Hellgrün","burlywood":"Burlywood","dodgerblue":"Dodger-blau","darkgray":"Dunkelgrau","lightcyan":"Hellzyan","powderblue":"Pulverblau","blueviolet":"Blauviolett","orchid":"Orchidee","dimgray":"Blassgrau","beige":"Beige","fuchsia":"Fuchsia","lavenderblush":"Lavendelhauch","hotpink":"Knallrosa","steelblue":"Stahlblau","tomato":"Tomatenrot","lightpink":"Hellrosa","limegreen":"Limonengrün","indianred":"Indischrot","papayawhip":"Papayacreme","lightslategray":"Helles Schiefergrau","gray":"Grau","mediumorchid":"Mittelorchidee","cornsilk":"Kornseide","black":"Schwarz","seagreen":"Meeresgrün","darkslateblue":"Dunkelschieferblau","khaki":"Khaki","lightblue":"Hellblau","palegreen":"Blassgrün","azure":"Azur","peachpuff":"Pfirsich","darkolivegreen":"Dunkelolivgrün","yellowgreen":"Gelbgrün"};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."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de");dijit.nls.common.de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de");dijit.form.nls.validate.de={"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de");dijit.form.nls.ComboBox.de={"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de");dojo.cldr.nls.number.de={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 0a4594e3c49a3243002c3459d41f1c25ee70a20a..37975974640b557dceae9887ab8517d4f5c93489 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.el");dijit.form.nls.ComboBox.el={"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"};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("dojo.nls.tt-rss-layer_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.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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.el");dijit.form.nls.ComboBox.el={"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","decimalFormat":"#,##0.###","currencySpacing-beforeCurrency-insertBetween":" "};
index 382f404137b3b876184228cbf95b711eee459a87..729bd63b5d19e1dcd66c4feb557fc46c31f25548 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_en-gb");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_gb");dojo.nls.colors.en_gb={"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.en_gb");dijit.nls.loading.en_gb={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_gb");dijit.nls.common.en_gb={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_gb");dijit.form.nls.validate.en_gb={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_gb");dijit.form.nls.ComboBox.en_gb={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_gb");dojo.cldr.nls.number.en_gb={"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("dojo.nls.tt-rss-layer_en-gb");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_gb");dojo.nls.colors.en_gb={"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.en_gb");dijit.nls.loading.en_gb={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_gb");dijit.nls.common.en_gb={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_gb");dijit.form.nls.validate.en_gb={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_gb");dijit.form.nls.ComboBox.en_gb={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_gb");dojo.cldr.nls.number.en_gb={"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","decimalFormat-short":"000T","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index af4f269ee32ba35c933f641662ff31081eb8faf6..d8be077fe6f4b8c2fe034e2bb35f488fa6b4a2db 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_en-us");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_us");dojo.nls.colors.en_us={"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.en_us");dijit.nls.loading.en_us={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_us");dijit.nls.common.en_us={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_us");dijit.form.nls.validate.en_us={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_us");dijit.form.nls.ComboBox.en_us={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_us");dojo.cldr.nls.number.en_us={"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("dojo.nls.tt-rss-layer_en-us");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_us");dojo.nls.colors.en_us={"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.en_us");dijit.nls.loading.en_us={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_us");dijit.nls.common.en_us={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_us");dijit.form.nls.validate.en_us={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_us");dijit.form.nls.ComboBox.en_us={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_us");dojo.cldr.nls.number.en_us={"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":"+","decimalFormat-short":"000T","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index b1eac5b9d17ca43de670f15f0942ffcab4d35d82..2cb4b5732df515337b4dd84769dfcfbc4559ca80 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_en");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en");dojo.nls.colors.en={"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.en");dijit.nls.loading.en={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en");dijit.nls.common.en={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en");dijit.form.nls.validate.en={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en");dijit.form.nls.ComboBox.en={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en");dojo.cldr.nls.number.en={"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("dojo.nls.tt-rss-layer_en");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en");dojo.nls.colors.en={"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.en");dijit.nls.loading.en={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en");dijit.nls.common.en={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en");dijit.form.nls.validate.en={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en");dijit.form.nls.ComboBox.en={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en");dojo.cldr.nls.number.en={"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":"+","decimalFormat-short":"000T","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 971c82e9691f7df572a5b1bee72015d1ba08f78f..832d1fbba953319c7aa8e5fed4783fb7cb8bec10 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_es-es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es_es");dojo.nls.colors.es_es={"lightsteelblue":"azul acero claro","orangered":"rojo anaranjado","midnightblue":"azul medianoche","cadetblue":"azul cadete","seashell":"blanco marfil","slategrey":"gris pizarra","coral":"coral","darkturquoise":"turquesa oscuro","antiquewhite":"blanco antiguo","mediumspringgreen":"verde primavera medio","salmon":"salmón","darkgrey":"gris oscuro","ivory":"marfil","greenyellow":"amarillo verdoso","mistyrose":"rosa difuminado","lightsalmon":"salmón claro","silver":"plateado","dimgrey":"gris marengo","orange":"naranja","white":"blanco","navajowhite":"blanco navajo","royalblue":"azul real","deeppink":"rosa fuerte","lime":"lima","oldlace":"encaje antiguo","chartreuse":"verde pálido 2","darkcyan":"cian oscuro","yellow":"amarillo","linen":"blanco arena","olive":"verde oliva","gold":"oro","lawngreen":"verde césped","lightyellow":"amarillo claro","tan":"canela","darkviolet":"violeta oscuro","lightslategrey":"gris pizarra claro","grey":"gris","darkkhaki":"caqui oscuro","green":"verde","deepskyblue":"azul cielo fuerte","aqua":"aguamarina","sienna":"siena","mintcream":"crema menta","rosybrown":"marrón rosáceo","mediumslateblue":"azul pizarra medio","magenta":"magenta","lightseagreen":"verde mar claro","cyan":"cian","olivedrab":"verde oliva pardusco","darkgoldenrod":"ocre oscuro","slateblue":"azul pizarra","mediumaquamarine":"aguamarina medio","lavender":"lavanda","mediumseagreen":"verde mar medio","maroon":"granate","darkslategray":"gris pizarra oscuro","mediumturquoise":"turquesa medio","ghostwhite":"blanco ligero","darkblue":"azul oscuro","mediumvioletred":"rojo violáceo medio","brown":"marrón","lightgray":"gris claro","sandybrown":"marrón arcilla","pink":"rosa","firebrick":"teja","indigo":"añil","snow":"nieve","darkorchid":"orquídea oscuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde fuerte","moccasin":"arena","navy":"azul marino","lemonchiffon":"amarillo pastel","teal":"verde azulado","floralwhite":"blanco manteca","cornflowerblue":"azul aciano","paleturquoise":"turquesa pálido","purple":"púrpura","gainsboro":"azul gainsboro","plum":"ciruela","red":"rojo","blue":"azul","forestgreen":"verde pino","darkgreen":"verde oscuro","honeydew":"flor de rocío","darkseagreen":"verde mar oscuro","lightcoral":"coral claro","palevioletred":"rojo violáceo pálido","mediumpurple":"púrpura medio","saddlebrown":"cuero","darkmagenta":"magenta oscuro","thistle":"cardo","whitesmoke":"blanco ahumado","wheat":"trigo","violet":"violeta","lightskyblue":"azul cielo claro","goldenrod":"ocre","mediumblue":"azul medio","skyblue":"azul cielo","crimson":"carmesí","darksalmon":"salmón oscuro","darkred":"rojo oscuro","darkslategrey":"gris pizarra oscuro","peru":"perú","lightgrey":"gris claro","lightgoldenrodyellow":"ocre claro","blanchedalmond":"almendra pálido","aliceblue":"blanco azulado","bisque":"miel","slategray":"gris pizarra","palegoldenrod":"ocre pálido","darkorange":"naranja oscuro","aquamarine":"aguamarina 2","lightgreen":"verde claro","burlywood":"madera","dodgerblue":"azul fuerte","darkgray":"gris oscuro","lightcyan":"cian claro","powderblue":"azul suave","blueviolet":"azul violáceo","orchid":"orquídea","dimgray":"gris marengo","beige":"beige","fuchsia":"fucsia","lavenderblush":"lavanda rosácea","hotpink":"rosa oscuro","steelblue":"azul acero","tomato":"tomate","lightpink":"rosa claro","limegreen":"lima limón","indianred":"rojo teja","papayawhip":"papaya claro","lightslategray":"gris pizarra claro","gray":"gris","mediumorchid":"orquídea medio","cornsilk":"crudo","black":"negro","seagreen":"verde mar","darkslateblue":"azul pizarra oscuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"blanco cielo","peachpuff":"melocotón","darkolivegreen":"verde oliva oscuro","yellowgreen":"verde amarillento"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es_es");dijit.nls.common.es_es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es_es");dijit.form.nls.validate.es_es={"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es_es");dijit.form.nls.ComboBox.es_es={"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es_es");dojo.cldr.nls.number.es_es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","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:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};
+dojo.provide("dojo.nls.tt-rss-layer_es-es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es_es");dojo.nls.colors.es_es={"lightsteelblue":"azul acero claro","orangered":"rojo anaranjado","midnightblue":"azul medianoche","cadetblue":"azul cadete","seashell":"blanco marfil","slategrey":"gris pizarra","coral":"coral","darkturquoise":"turquesa oscuro","antiquewhite":"blanco antiguo","mediumspringgreen":"verde primavera medio","salmon":"salmón","darkgrey":"gris oscuro","ivory":"marfil","greenyellow":"amarillo verdoso","mistyrose":"rosa difuminado","lightsalmon":"salmón claro","silver":"plateado","dimgrey":"gris marengo","orange":"naranja","white":"blanco","navajowhite":"blanco navajo","royalblue":"azul real","deeppink":"rosa fuerte","lime":"lima","oldlace":"encaje antiguo","chartreuse":"verde pálido 2","darkcyan":"cian oscuro","yellow":"amarillo","linen":"blanco arena","olive":"verde oliva","gold":"oro","lawngreen":"verde césped","lightyellow":"amarillo claro","tan":"canela","darkviolet":"violeta oscuro","lightslategrey":"gris pizarra claro","grey":"gris","darkkhaki":"caqui oscuro","green":"verde","deepskyblue":"azul cielo fuerte","aqua":"aguamarina","sienna":"siena","mintcream":"crema menta","rosybrown":"marrón rosáceo","mediumslateblue":"azul pizarra medio","magenta":"magenta","lightseagreen":"verde mar claro","cyan":"cian","olivedrab":"verde oliva pardusco","darkgoldenrod":"ocre oscuro","slateblue":"azul pizarra","mediumaquamarine":"aguamarina medio","lavender":"lavanda","mediumseagreen":"verde mar medio","maroon":"granate","darkslategray":"gris pizarra oscuro","mediumturquoise":"turquesa medio","ghostwhite":"blanco ligero","darkblue":"azul oscuro","mediumvioletred":"rojo violáceo medio","brown":"marrón","lightgray":"gris claro","sandybrown":"marrón arcilla","pink":"rosa","firebrick":"teja","indigo":"añil","snow":"nieve","darkorchid":"orquídea oscuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde fuerte","moccasin":"arena","navy":"azul marino","lemonchiffon":"amarillo pastel","teal":"verde azulado","floralwhite":"blanco manteca","cornflowerblue":"azul aciano","paleturquoise":"turquesa pálido","purple":"púrpura","gainsboro":"azul gainsboro","plum":"ciruela","red":"rojo","blue":"azul","forestgreen":"verde pino","darkgreen":"verde oscuro","honeydew":"flor de rocío","darkseagreen":"verde mar oscuro","lightcoral":"coral claro","palevioletred":"rojo violáceo pálido","mediumpurple":"púrpura medio","saddlebrown":"cuero","darkmagenta":"magenta oscuro","thistle":"cardo","whitesmoke":"blanco ahumado","wheat":"trigo","violet":"violeta","lightskyblue":"azul cielo claro","goldenrod":"ocre","mediumblue":"azul medio","skyblue":"azul cielo","crimson":"carmesí","darksalmon":"salmón oscuro","darkred":"rojo oscuro","darkslategrey":"gris pizarra oscuro","peru":"perú","lightgrey":"gris claro","lightgoldenrodyellow":"ocre claro","blanchedalmond":"almendra pálido","aliceblue":"blanco azulado","bisque":"miel","slategray":"gris pizarra","palegoldenrod":"ocre pálido","darkorange":"naranja oscuro","aquamarine":"aguamarina 2","lightgreen":"verde claro","burlywood":"madera","dodgerblue":"azul fuerte","darkgray":"gris oscuro","lightcyan":"cian claro","powderblue":"azul suave","blueviolet":"azul violáceo","orchid":"orquídea","dimgray":"gris marengo","beige":"beige","fuchsia":"fucsia","lavenderblush":"lavanda rosácea","hotpink":"rosa oscuro","steelblue":"azul acero","tomato":"tomate","lightpink":"rosa claro","limegreen":"lima limón","indianred":"rojo teja","papayawhip":"papaya claro","lightslategray":"gris pizarra claro","gray":"gris","mediumorchid":"orquídea medio","cornsilk":"crudo","black":"negro","seagreen":"verde mar","darkslateblue":"azul pizarra oscuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"blanco cielo","peachpuff":"melocotón","darkolivegreen":"verde oliva oscuro","yellowgreen":"verde amarillento"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es_es");dijit.nls.common.es_es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es_es");dijit.form.nls.validate.es_es={"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es_es");dijit.form.nls.ComboBox.es_es={"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es_es");dojo.cldr.nls.number.es_es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};
index d9c37c058d902836ef1686a78fc7cee031c170ad..daec5d53d5bfc24ac0b41005c183e9d1da8d7931 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es");dojo.nls.colors.es={"lightsteelblue":"azul acero claro","orangered":"rojo anaranjado","midnightblue":"azul medianoche","cadetblue":"azul cadete","seashell":"blanco marfil","slategrey":"gris pizarra","coral":"coral","darkturquoise":"turquesa oscuro","antiquewhite":"blanco antiguo","mediumspringgreen":"verde primavera medio","salmon":"salmón","darkgrey":"gris oscuro","ivory":"marfil","greenyellow":"amarillo verdoso","mistyrose":"rosa difuminado","lightsalmon":"salmón claro","silver":"plateado","dimgrey":"gris marengo","orange":"naranja","white":"blanco","navajowhite":"blanco navajo","royalblue":"azul real","deeppink":"rosa fuerte","lime":"lima","oldlace":"encaje antiguo","chartreuse":"verde pálido 2","darkcyan":"cian oscuro","yellow":"amarillo","linen":"blanco arena","olive":"verde oliva","gold":"oro","lawngreen":"verde césped","lightyellow":"amarillo claro","tan":"canela","darkviolet":"violeta oscuro","lightslategrey":"gris pizarra claro","grey":"gris","darkkhaki":"caqui oscuro","green":"verde","deepskyblue":"azul cielo fuerte","aqua":"aguamarina","sienna":"siena","mintcream":"crema menta","rosybrown":"marrón rosáceo","mediumslateblue":"azul pizarra medio","magenta":"magenta","lightseagreen":"verde mar claro","cyan":"cian","olivedrab":"verde oliva pardusco","darkgoldenrod":"ocre oscuro","slateblue":"azul pizarra","mediumaquamarine":"aguamarina medio","lavender":"lavanda","mediumseagreen":"verde mar medio","maroon":"granate","darkslategray":"gris pizarra oscuro","mediumturquoise":"turquesa medio","ghostwhite":"blanco ligero","darkblue":"azul oscuro","mediumvioletred":"rojo violáceo medio","brown":"marrón","lightgray":"gris claro","sandybrown":"marrón arcilla","pink":"rosa","firebrick":"teja","indigo":"añil","snow":"nieve","darkorchid":"orquídea oscuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde fuerte","moccasin":"arena","navy":"azul marino","lemonchiffon":"amarillo pastel","teal":"verde azulado","floralwhite":"blanco manteca","cornflowerblue":"azul aciano","paleturquoise":"turquesa pálido","purple":"púrpura","gainsboro":"azul gainsboro","plum":"ciruela","red":"rojo","blue":"azul","forestgreen":"verde pino","darkgreen":"verde oscuro","honeydew":"flor de rocío","darkseagreen":"verde mar oscuro","lightcoral":"coral claro","palevioletred":"rojo violáceo pálido","mediumpurple":"púrpura medio","saddlebrown":"cuero","darkmagenta":"magenta oscuro","thistle":"cardo","whitesmoke":"blanco ahumado","wheat":"trigo","violet":"violeta","lightskyblue":"azul cielo claro","goldenrod":"ocre","mediumblue":"azul medio","skyblue":"azul cielo","crimson":"carmesí","darksalmon":"salmón oscuro","darkred":"rojo oscuro","darkslategrey":"gris pizarra oscuro","peru":"perú","lightgrey":"gris claro","lightgoldenrodyellow":"ocre claro","blanchedalmond":"almendra pálido","aliceblue":"blanco azulado","bisque":"miel","slategray":"gris pizarra","palegoldenrod":"ocre pálido","darkorange":"naranja oscuro","aquamarine":"aguamarina 2","lightgreen":"verde claro","burlywood":"madera","dodgerblue":"azul fuerte","darkgray":"gris oscuro","lightcyan":"cian claro","powderblue":"azul suave","blueviolet":"azul violáceo","orchid":"orquídea","dimgray":"gris marengo","beige":"beige","fuchsia":"fucsia","lavenderblush":"lavanda rosácea","hotpink":"rosa oscuro","steelblue":"azul acero","tomato":"tomate","lightpink":"rosa claro","limegreen":"lima limón","indianred":"rojo teja","papayawhip":"papaya claro","lightslategray":"gris pizarra claro","gray":"gris","mediumorchid":"orquídea medio","cornsilk":"crudo","black":"negro","seagreen":"verde mar","darkslateblue":"azul pizarra oscuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"blanco cielo","peachpuff":"melocotón","darkolivegreen":"verde oliva oscuro","yellowgreen":"verde amarillento"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es");dijit.nls.common.es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es");dijit.form.nls.validate.es={"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es");dijit.form.nls.ComboBox.es={"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es");dojo.cldr.nls.number.es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","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:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};
+dojo.provide("dojo.nls.tt-rss-layer_es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es");dojo.nls.colors.es={"lightsteelblue":"azul acero claro","orangered":"rojo anaranjado","midnightblue":"azul medianoche","cadetblue":"azul cadete","seashell":"blanco marfil","slategrey":"gris pizarra","coral":"coral","darkturquoise":"turquesa oscuro","antiquewhite":"blanco antiguo","mediumspringgreen":"verde primavera medio","salmon":"salmón","darkgrey":"gris oscuro","ivory":"marfil","greenyellow":"amarillo verdoso","mistyrose":"rosa difuminado","lightsalmon":"salmón claro","silver":"plateado","dimgrey":"gris marengo","orange":"naranja","white":"blanco","navajowhite":"blanco navajo","royalblue":"azul real","deeppink":"rosa fuerte","lime":"lima","oldlace":"encaje antiguo","chartreuse":"verde pálido 2","darkcyan":"cian oscuro","yellow":"amarillo","linen":"blanco arena","olive":"verde oliva","gold":"oro","lawngreen":"verde césped","lightyellow":"amarillo claro","tan":"canela","darkviolet":"violeta oscuro","lightslategrey":"gris pizarra claro","grey":"gris","darkkhaki":"caqui oscuro","green":"verde","deepskyblue":"azul cielo fuerte","aqua":"aguamarina","sienna":"siena","mintcream":"crema menta","rosybrown":"marrón rosáceo","mediumslateblue":"azul pizarra medio","magenta":"magenta","lightseagreen":"verde mar claro","cyan":"cian","olivedrab":"verde oliva pardusco","darkgoldenrod":"ocre oscuro","slateblue":"azul pizarra","mediumaquamarine":"aguamarina medio","lavender":"lavanda","mediumseagreen":"verde mar medio","maroon":"granate","darkslategray":"gris pizarra oscuro","mediumturquoise":"turquesa medio","ghostwhite":"blanco ligero","darkblue":"azul oscuro","mediumvioletred":"rojo violáceo medio","brown":"marrón","lightgray":"gris claro","sandybrown":"marrón arcilla","pink":"rosa","firebrick":"teja","indigo":"añil","snow":"nieve","darkorchid":"orquídea oscuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde fuerte","moccasin":"arena","navy":"azul marino","lemonchiffon":"amarillo pastel","teal":"verde azulado","floralwhite":"blanco manteca","cornflowerblue":"azul aciano","paleturquoise":"turquesa pálido","purple":"púrpura","gainsboro":"azul gainsboro","plum":"ciruela","red":"rojo","blue":"azul","forestgreen":"verde pino","darkgreen":"verde oscuro","honeydew":"flor de rocío","darkseagreen":"verde mar oscuro","lightcoral":"coral claro","palevioletred":"rojo violáceo pálido","mediumpurple":"púrpura medio","saddlebrown":"cuero","darkmagenta":"magenta oscuro","thistle":"cardo","whitesmoke":"blanco ahumado","wheat":"trigo","violet":"violeta","lightskyblue":"azul cielo claro","goldenrod":"ocre","mediumblue":"azul medio","skyblue":"azul cielo","crimson":"carmesí","darksalmon":"salmón oscuro","darkred":"rojo oscuro","darkslategrey":"gris pizarra oscuro","peru":"perú","lightgrey":"gris claro","lightgoldenrodyellow":"ocre claro","blanchedalmond":"almendra pálido","aliceblue":"blanco azulado","bisque":"miel","slategray":"gris pizarra","palegoldenrod":"ocre pálido","darkorange":"naranja oscuro","aquamarine":"aguamarina 2","lightgreen":"verde claro","burlywood":"madera","dodgerblue":"azul fuerte","darkgray":"gris oscuro","lightcyan":"cian claro","powderblue":"azul suave","blueviolet":"azul violáceo","orchid":"orquídea","dimgray":"gris marengo","beige":"beige","fuchsia":"fucsia","lavenderblush":"lavanda rosácea","hotpink":"rosa oscuro","steelblue":"azul acero","tomato":"tomate","lightpink":"rosa claro","limegreen":"lima limón","indianred":"rojo teja","papayawhip":"papaya claro","lightslategray":"gris pizarra claro","gray":"gris","mediumorchid":"orquídea medio","cornsilk":"crudo","black":"negro","seagreen":"verde mar","darkslateblue":"azul pizarra oscuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"blanco cielo","peachpuff":"melocotón","darkolivegreen":"verde oliva oscuro","yellowgreen":"verde amarillento"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es");dijit.nls.common.es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es");dijit.form.nls.validate.es={"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es");dijit.form.nls.ComboBox.es={"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es");dojo.cldr.nls.number.es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};
index 0a78dd3c912e2b8c135a863e7664cea4ea4aae1e..29f0b1a4090597c311f0921a23d762950c98999e 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_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":"vaalea teräksensininen","orangered":"oranssinpunainen","midnightblue":"yönsininen","cadetblue":"meren vihreä","seashell":"simpukankuori","slategrey":"savenharmaa","coral":"koralli","darkturquoise":"tumma turkoosi","antiquewhite":"antiikinvalkoinen","mediumspringgreen":"keskivaalea keväänvihreä","salmon":"lohenpunainen","darkgrey":"tummanharmaa","ivory":"norsunluu","greenyellow":"vihreänkeltainen","mistyrose":"utuinen ruusu","lightsalmon":"vaalea lohenpunainen","silver":"hopea","dimgrey":"himmeänharmaa","orange":"oranssi","white":"valkoinen","navajowhite":"navajonvalkoinen","royalblue":"syvänsininen","deeppink":"syvä vaaleanpunainen","lime":"vaaleanvihreä","oldlace":"vanha pitsi","chartreuse":"kellanvihreä","darkcyan":"tumma turkoosi","yellow":"keltainen","linen":"pellavanvaalea","olive":"oliivinvihreä","gold":"kulta","lawngreen":"ruohonvihreä","lightyellow":"vaaleankeltainen","tan":"kellanruskea","darkviolet":"tummanvioletti","lightslategrey":"vaaleanharmaa","grey":"harmaa","darkkhaki":"tumma khaki","green":"vihreä","deepskyblue":"tumma taivaansininen","aqua":"sinivihreä","sienna":"siena","mintcream":"minttukreemi","rosybrown":"punertavanruskea","mediumslateblue":"keskivaalea siniharmaa","magenta":"magenta","lightseagreen":"vaalea merenvihreä","cyan":"syaani","olivedrab":"oliivinruskea","darkgoldenrod":"tumma kultapiisku","slateblue":"savensininen","mediumaquamarine":"keskivaalea vedenvihreä","lavender":"laventeli","mediumseagreen":"keskivaalea merenvihreä","maroon":"kastanjanruskea","darkslategray":"tummanharmaa","mediumturquoise":"keskivaalea turkoosi","ghostwhite":"lakananvalkoinen","darkblue":"tummansininen","mediumvioletred":"keskivaalea lila","brown":"ruskea","lightgray":"vaaleanharmaa","sandybrown":"hiekanruskea","pink":"vaaleanpunainen","firebrick":"poltetun tiilen punainen","indigo":"indigo","snow":"lumivalkoinen","darkorchid":"tumma orkidea","turquoise":"turkoosi","chocolate":"suklaanruskea","springgreen":"keväänvihreä","moccasin":"nahanruskea","navy":"laivastonsininen","lemonchiffon":"sitruunankeltainen","teal":"sinivihreä","floralwhite":"kukanvalkoinen","cornflowerblue":"syvänsininen","paleturquoise":"haalea turkoosi","purple":"violetti","gainsboro":"gainsboro","plum":"luumunpunainen","red":"punainen","blue":"sininen","forestgreen":"metsänvihreä","darkgreen":"tummanvihreä","honeydew":"hunajameloninvihreä","darkseagreen":"tumma merenvihreä","lightcoral":"vaalea koralli","palevioletred":"haalea lila","mediumpurple":"keskivaalea violetti","saddlebrown":"satulanruskea","darkmagenta":"tumma magenta","thistle":"ohdake","whitesmoke":"savunvalkea","wheat":"vehnänkeltainen","violet":"violetti","lightskyblue":"vaalea taivaansininen","goldenrod":"kullanruskea","mediumblue":"keskisininen","skyblue":"taivaansininen","crimson":"karmiininpunainen","darksalmon":"tumma lohenpunainen","darkred":"tummanpunainen","darkslategrey":"tummanharmaa","peru":"peru","lightgrey":"vaaleanharmaa","lightgoldenrodyellow":"vaalea kultapiiskunkeltainen","blanchedalmond":"kuorittu manteli","aliceblue":"vaaleanharmaansininen","bisque":"vaaleanruskea","slategray":"savenharmaa","palegoldenrod":"haalea kultapiisku","darkorange":"tummanoranssi","aquamarine":"vedenvihreä","lightgreen":"vaaleanvihreä","burlywood":"puunruskea","dodgerblue":"Dodger-sininen","darkgray":"tummanharmaa","lightcyan":"vaalea syaani","powderblue":"harmaansininen","blueviolet":"sinivioletti","orchid":"orkidea","dimgray":"himmeänharmaa","beige":"vaaleanruskea","fuchsia":"purppura","lavenderblush":"laventelinpunainen","hotpink":"pinkki","steelblue":"teräksensininen","tomato":"tomaatinpunainen","lightpink":"vaaleanpunainen","limegreen":"limetinvihreä","indianred":"kirkkaanpunainen","papayawhip":"papaijavaahto","lightslategray":"vaaleanharmaa","gray":"harmaa","mediumorchid":"keskivaalea orkidea","cornsilk":"maissinkeltainen","black":"musta","seagreen":"merenvihreä","darkslateblue":"tumma siniharmaa","khaki":"khaki","lightblue":"vaaleansininen","palegreen":"haalea vihreä","azure":"taivaansininen","peachpuff":"persikka","darkolivegreen":"tummanoliivinvihreä","yellowgreen":"kellanvihreä"};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.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("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"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 3932b987398c2196f97f1561a095981740167b77..86fc0bcb78ab5fbef2d347064f362ee96bfc21a6 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_fi");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fi");dojo.nls.colors.fi={"lightsteelblue":"vaalea teräksensininen","orangered":"oranssinpunainen","midnightblue":"yönsininen","cadetblue":"meren vihreä","seashell":"simpukankuori","slategrey":"savenharmaa","coral":"koralli","darkturquoise":"tumma turkoosi","antiquewhite":"antiikinvalkoinen","mediumspringgreen":"keskivaalea keväänvihreä","salmon":"lohenpunainen","darkgrey":"tummanharmaa","ivory":"norsunluu","greenyellow":"vihreänkeltainen","mistyrose":"utuinen ruusu","lightsalmon":"vaalea lohenpunainen","silver":"hopea","dimgrey":"himmeänharmaa","orange":"oranssi","white":"valkoinen","navajowhite":"navajonvalkoinen","royalblue":"syvänsininen","deeppink":"syvä vaaleanpunainen","lime":"vaaleanvihreä","oldlace":"vanha pitsi","chartreuse":"kellanvihreä","darkcyan":"tumma turkoosi","yellow":"keltainen","linen":"pellavanvaalea","olive":"oliivinvihreä","gold":"kulta","lawngreen":"ruohonvihreä","lightyellow":"vaaleankeltainen","tan":"kellanruskea","darkviolet":"tummanvioletti","lightslategrey":"vaaleanharmaa","grey":"harmaa","darkkhaki":"tumma khaki","green":"vihreä","deepskyblue":"tumma taivaansininen","aqua":"sinivihreä","sienna":"siena","mintcream":"minttukreemi","rosybrown":"punertavanruskea","mediumslateblue":"keskivaalea siniharmaa","magenta":"magenta","lightseagreen":"vaalea merenvihreä","cyan":"syaani","olivedrab":"oliivinruskea","darkgoldenrod":"tumma kultapiisku","slateblue":"savensininen","mediumaquamarine":"keskivaalea vedenvihreä","lavender":"laventeli","mediumseagreen":"keskivaalea merenvihreä","maroon":"kastanjanruskea","darkslategray":"tummanharmaa","mediumturquoise":"keskivaalea turkoosi","ghostwhite":"lakananvalkoinen","darkblue":"tummansininen","mediumvioletred":"keskivaalea lila","brown":"ruskea","lightgray":"vaaleanharmaa","sandybrown":"hiekanruskea","pink":"vaaleanpunainen","firebrick":"poltetun tiilen punainen","indigo":"indigo","snow":"lumivalkoinen","darkorchid":"tumma orkidea","turquoise":"turkoosi","chocolate":"suklaanruskea","springgreen":"keväänvihreä","moccasin":"nahanruskea","navy":"laivastonsininen","lemonchiffon":"sitruunankeltainen","teal":"sinivihreä","floralwhite":"kukanvalkoinen","cornflowerblue":"syvänsininen","paleturquoise":"haalea turkoosi","purple":"violetti","gainsboro":"gainsboro","plum":"luumunpunainen","red":"punainen","blue":"sininen","forestgreen":"metsänvihreä","darkgreen":"tummanvihreä","honeydew":"hunajameloninvihreä","darkseagreen":"tumma merenvihreä","lightcoral":"vaalea koralli","palevioletred":"haalea lila","mediumpurple":"keskivaalea violetti","saddlebrown":"satulanruskea","darkmagenta":"tumma magenta","thistle":"ohdake","whitesmoke":"savunvalkea","wheat":"vehnänkeltainen","violet":"violetti","lightskyblue":"vaalea taivaansininen","goldenrod":"kullanruskea","mediumblue":"keskisininen","skyblue":"taivaansininen","crimson":"karmiininpunainen","darksalmon":"tumma lohenpunainen","darkred":"tummanpunainen","darkslategrey":"tummanharmaa","peru":"peru","lightgrey":"vaaleanharmaa","lightgoldenrodyellow":"vaalea kultapiiskunkeltainen","blanchedalmond":"kuorittu manteli","aliceblue":"vaaleanharmaansininen","bisque":"vaaleanruskea","slategray":"savenharmaa","palegoldenrod":"haalea kultapiisku","darkorange":"tummanoranssi","aquamarine":"vedenvihreä","lightgreen":"vaaleanvihreä","burlywood":"puunruskea","dodgerblue":"Dodger-sininen","darkgray":"tummanharmaa","lightcyan":"vaalea syaani","powderblue":"harmaansininen","blueviolet":"sinivioletti","orchid":"orkidea","dimgray":"himmeänharmaa","beige":"vaaleanruskea","fuchsia":"purppura","lavenderblush":"laventelinpunainen","hotpink":"pinkki","steelblue":"teräksensininen","tomato":"tomaatinpunainen","lightpink":"vaaleanpunainen","limegreen":"limetinvihreä","indianred":"kirkkaanpunainen","papayawhip":"papaijavaahto","lightslategray":"vaaleanharmaa","gray":"harmaa","mediumorchid":"keskivaalea orkidea","cornsilk":"maissinkeltainen","black":"musta","seagreen":"merenvihreä","darkslateblue":"tumma siniharmaa","khaki":"khaki","lightblue":"vaaleansininen","palegreen":"haalea vihreä","azure":"taivaansininen","peachpuff":"persikka","darkolivegreen":"tummanoliivinvihreä","yellowgreen":"kellanvihreä"};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.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("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"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index e46a35a24aed7d20222ad93edfbea49e0781f2cd..1fba0709cc78b8f7011d9c901a681ac415aae74e 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_fr-fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr_fr");dojo.nls.colors.fr_fr={"lightsteelblue":"bleu acier clair","orangered":"rouge orangé","midnightblue":"bleu nuit","cadetblue":"bleu pétrole","seashell":"coquillage","slategrey":"gris ardoise","coral":"corail","darkturquoise":"turquoise foncé","antiquewhite":"blanc antique","mediumspringgreen":"vert printemps moyen","salmon":"saumon","darkgrey":"gris foncé","ivory":"ivoire","greenyellow":"vert-jaune","mistyrose":"rose pâle","lightsalmon":"saumon clair","silver":"argent","dimgrey":"gris soutenu","orange":"orange","white":"blanc","navajowhite":"chair","royalblue":"bleu roi","deeppink":"rose soutenu","lime":"vert citron","oldlace":"blanc cassé","chartreuse":"vert vif","darkcyan":"cyan foncé","yellow":"jaune","linen":"écru","olive":"olive","gold":"or","lawngreen":"vert prairie","lightyellow":"jaune clair","tan":"grège","darkviolet":"violet foncé","lightslategrey":"gris ardoise clair","grey":"gris","darkkhaki":"kaki foncé","green":"vert","deepskyblue":"bleu ciel soutenu","aqua":"bleu-vert","sienna":"terre de sienne","mintcream":"crème de menthe","rosybrown":"vieux rose","mediumslateblue":"bleu ardoise moyen","magenta":"magenta","lightseagreen":"vert d'eau clair","cyan":"cyan","olivedrab":"brun verdâtre","darkgoldenrod":"jaune paille foncé","slateblue":"bleu ardoise","mediumaquamarine":"aigue-marine moyen","lavender":"lavande","mediumseagreen":"vert d'eau moyen","maroon":"marron","darkslategray":"gris ardoise foncé","mediumturquoise":"turquoise moyen","ghostwhite":"blanc laiteux","darkblue":"bleu foncé","mediumvioletred":"rouge violacé moyen","brown":"brun","lightgray":"gris clair","sandybrown":"sable","pink":"rose","firebrick":"rouge brique","indigo":"indigo","snow":"neige","darkorchid":"lilas foncé","turquoise":"turquoise","chocolate":"chocolat","springgreen":"vert printemps","moccasin":"chamois","navy":"bleu marine","lemonchiffon":"mousse de citron","teal":"sarcelle","floralwhite":"lys","cornflowerblue":"bleuet","paleturquoise":"turquoise pâle","purple":"pourpre","gainsboro":"gris souris","plum":"prune","red":"rouge","blue":"bleu","forestgreen":"vert sapin","darkgreen":"vert foncé","honeydew":"opalin","darkseagreen":"vert d'eau foncé","lightcoral":"corail clair","palevioletred":"rouge violacé pâle","mediumpurple":"pourpre moyen","saddlebrown":"brun cuir","darkmagenta":"magenta foncé","thistle":"chardon","whitesmoke":"blanc cendré","wheat":"blé","violet":"violet","lightskyblue":"bleu ciel clair","goldenrod":"jaune paille","mediumblue":"bleu moyen","skyblue":"bleu ciel","crimson":"cramoisi","darksalmon":"saumon foncé","darkred":"rouge foncé","darkslategrey":"gris ardoise foncé","peru":"caramel","lightgrey":"gris clair","lightgoldenrodyellow":"jaune paille clair","blanchedalmond":"coquille d'oeuf","aliceblue":"bleu gris","bisque":"beige rosé","slategray":"gris ardoise","palegoldenrod":"jaune paille pâle","darkorange":"orange foncé","aquamarine":"aigue-marine","lightgreen":"vert clair","burlywood":"bois précieux","dodgerblue":"bleu France","darkgray":"gris foncé","lightcyan":"cyan clair","powderblue":"bleu de smalt","blueviolet":"bleu-violet","orchid":"lilas","dimgray":"gris soutenu","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavandin","hotpink":"rose intense","steelblue":"bleu acier","tomato":"tomate","lightpink":"rose clair","limegreen":"citron vert","indianred":"rose indien","papayawhip":"crème de papaye","lightslategray":"gris ardoise clair","gray":"gris","mediumorchid":"lilas moyen","cornsilk":"vanille","black":"noir","seagreen":"vert d'eau","darkslateblue":"bleu ardoise foncé","khaki":"kaki","lightblue":"bleu clair","palegreen":"vert pâle","azure":"bleu azur","peachpuff":"pêche","darkolivegreen":"olive foncé","yellowgreen":"vert jaunâtre"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr_fr");dijit.nls.common.fr_fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr_fr");dijit.form.nls.validate.fr_fr={"rangeMessage":"Cette valeur n'est pas comprise dans la plage autorisée.","invalidMessage":"La valeur indiquée n'est pas correcte.","missingMessage":"Cette valeur est requise."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr_fr");dijit.form.nls.ComboBox.fr_fr={"previousMessage":"Choix précédents","nextMessage":"Plus de choix"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr_fr");dojo.cldr.nls.number.fr_fr={"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("dojo.nls.tt-rss-layer_fr-fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr_fr");dojo.nls.colors.fr_fr={"lightsteelblue":"bleu acier clair","orangered":"rouge orangé","midnightblue":"bleu nuit","cadetblue":"bleu pétrole","seashell":"coquillage","slategrey":"gris ardoise","coral":"corail","darkturquoise":"turquoise foncé","antiquewhite":"blanc antique","mediumspringgreen":"vert printemps moyen","salmon":"saumon","darkgrey":"gris foncé","ivory":"ivoire","greenyellow":"vert-jaune","mistyrose":"rose pâle","lightsalmon":"saumon clair","silver":"argent","dimgrey":"gris soutenu","orange":"orange","white":"blanc","navajowhite":"chair","royalblue":"bleu roi","deeppink":"rose soutenu","lime":"vert citron","oldlace":"blanc cassé","chartreuse":"vert vif","darkcyan":"cyan foncé","yellow":"jaune","linen":"écru","olive":"olive","gold":"or","lawngreen":"vert prairie","lightyellow":"jaune clair","tan":"grège","darkviolet":"violet foncé","lightslategrey":"gris ardoise clair","grey":"gris","darkkhaki":"kaki foncé","green":"vert","deepskyblue":"bleu ciel soutenu","aqua":"bleu-vert","sienna":"terre de sienne","mintcream":"crème de menthe","rosybrown":"vieux rose","mediumslateblue":"bleu ardoise moyen","magenta":"magenta","lightseagreen":"vert d'eau clair","cyan":"cyan","olivedrab":"brun verdâtre","darkgoldenrod":"jaune paille foncé","slateblue":"bleu ardoise","mediumaquamarine":"aigue-marine moyen","lavender":"lavande","mediumseagreen":"vert d'eau moyen","maroon":"marron","darkslategray":"gris ardoise foncé","mediumturquoise":"turquoise moyen","ghostwhite":"blanc laiteux","darkblue":"bleu foncé","mediumvioletred":"rouge violacé moyen","brown":"brun","lightgray":"gris clair","sandybrown":"sable","pink":"rose","firebrick":"rouge brique","indigo":"indigo","snow":"neige","darkorchid":"lilas foncé","turquoise":"turquoise","chocolate":"chocolat","springgreen":"vert printemps","moccasin":"chamois","navy":"bleu marine","lemonchiffon":"mousse de citron","teal":"sarcelle","floralwhite":"lys","cornflowerblue":"bleuet","paleturquoise":"turquoise pâle","purple":"pourpre","gainsboro":"gris souris","plum":"prune","red":"rouge","blue":"bleu","forestgreen":"vert sapin","darkgreen":"vert foncé","honeydew":"opalin","darkseagreen":"vert d'eau foncé","lightcoral":"corail clair","palevioletred":"rouge violacé pâle","mediumpurple":"pourpre moyen","saddlebrown":"brun cuir","darkmagenta":"magenta foncé","thistle":"chardon","whitesmoke":"blanc cendré","wheat":"blé","violet":"violet","lightskyblue":"bleu ciel clair","goldenrod":"jaune paille","mediumblue":"bleu moyen","skyblue":"bleu ciel","crimson":"cramoisi","darksalmon":"saumon foncé","darkred":"rouge foncé","darkslategrey":"gris ardoise foncé","peru":"caramel","lightgrey":"gris clair","lightgoldenrodyellow":"jaune paille clair","blanchedalmond":"coquille d'oeuf","aliceblue":"bleu gris","bisque":"beige rosé","slategray":"gris ardoise","palegoldenrod":"jaune paille pâle","darkorange":"orange foncé","aquamarine":"aigue-marine","lightgreen":"vert clair","burlywood":"bois précieux","dodgerblue":"bleu France","darkgray":"gris foncé","lightcyan":"cyan clair","powderblue":"bleu de smalt","blueviolet":"bleu-violet","orchid":"lilas","dimgray":"gris soutenu","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavandin","hotpink":"rose intense","steelblue":"bleu acier","tomato":"tomate","lightpink":"rose clair","limegreen":"citron vert","indianred":"rose indien","papayawhip":"crème de papaye","lightslategray":"gris ardoise clair","gray":"gris","mediumorchid":"lilas moyen","cornsilk":"vanille","black":"noir","seagreen":"vert d'eau","darkslateblue":"bleu ardoise foncé","khaki":"kaki","lightblue":"bleu clair","palegreen":"vert pâle","azure":"bleu azur","peachpuff":"pêche","darkolivegreen":"olive foncé","yellowgreen":"vert jaunâtre"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr_fr");dijit.nls.common.fr_fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr_fr");dijit.form.nls.validate.fr_fr={"rangeMessage":"Cette valeur n'est pas comprise dans la plage autorisée.","invalidMessage":"La valeur indiquée n'est pas correcte.","missingMessage":"Cette valeur est requise."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr_fr");dijit.form.nls.ComboBox.fr_fr={"previousMessage":"Choix précédents","nextMessage":"Plus de choix"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr_fr");dojo.cldr.nls.number.fr_fr={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 8595a42d0c49dd2fe2a4659096b9f3f6abc9b710..7d5f281e25e39504843b4b98b03987fdaab71177 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr");dojo.nls.colors.fr={"lightsteelblue":"bleu acier clair","orangered":"rouge orangé","midnightblue":"bleu nuit","cadetblue":"bleu pétrole","seashell":"coquillage","slategrey":"gris ardoise","coral":"corail","darkturquoise":"turquoise foncé","antiquewhite":"blanc antique","mediumspringgreen":"vert printemps moyen","salmon":"saumon","darkgrey":"gris foncé","ivory":"ivoire","greenyellow":"vert-jaune","mistyrose":"rose pâle","lightsalmon":"saumon clair","silver":"argent","dimgrey":"gris soutenu","orange":"orange","white":"blanc","navajowhite":"chair","royalblue":"bleu roi","deeppink":"rose soutenu","lime":"vert citron","oldlace":"blanc cassé","chartreuse":"vert vif","darkcyan":"cyan foncé","yellow":"jaune","linen":"écru","olive":"olive","gold":"or","lawngreen":"vert prairie","lightyellow":"jaune clair","tan":"grège","darkviolet":"violet foncé","lightslategrey":"gris ardoise clair","grey":"gris","darkkhaki":"kaki foncé","green":"vert","deepskyblue":"bleu ciel soutenu","aqua":"bleu-vert","sienna":"terre de sienne","mintcream":"crème de menthe","rosybrown":"vieux rose","mediumslateblue":"bleu ardoise moyen","magenta":"magenta","lightseagreen":"vert d'eau clair","cyan":"cyan","olivedrab":"brun verdâtre","darkgoldenrod":"jaune paille foncé","slateblue":"bleu ardoise","mediumaquamarine":"aigue-marine moyen","lavender":"lavande","mediumseagreen":"vert d'eau moyen","maroon":"marron","darkslategray":"gris ardoise foncé","mediumturquoise":"turquoise moyen","ghostwhite":"blanc laiteux","darkblue":"bleu foncé","mediumvioletred":"rouge violacé moyen","brown":"brun","lightgray":"gris clair","sandybrown":"sable","pink":"rose","firebrick":"rouge brique","indigo":"indigo","snow":"neige","darkorchid":"lilas foncé","turquoise":"turquoise","chocolate":"chocolat","springgreen":"vert printemps","moccasin":"chamois","navy":"bleu marine","lemonchiffon":"mousse de citron","teal":"sarcelle","floralwhite":"lys","cornflowerblue":"bleuet","paleturquoise":"turquoise pâle","purple":"pourpre","gainsboro":"gris souris","plum":"prune","red":"rouge","blue":"bleu","forestgreen":"vert sapin","darkgreen":"vert foncé","honeydew":"opalin","darkseagreen":"vert d'eau foncé","lightcoral":"corail clair","palevioletred":"rouge violacé pâle","mediumpurple":"pourpre moyen","saddlebrown":"brun cuir","darkmagenta":"magenta foncé","thistle":"chardon","whitesmoke":"blanc cendré","wheat":"blé","violet":"violet","lightskyblue":"bleu ciel clair","goldenrod":"jaune paille","mediumblue":"bleu moyen","skyblue":"bleu ciel","crimson":"cramoisi","darksalmon":"saumon foncé","darkred":"rouge foncé","darkslategrey":"gris ardoise foncé","peru":"caramel","lightgrey":"gris clair","lightgoldenrodyellow":"jaune paille clair","blanchedalmond":"coquille d'oeuf","aliceblue":"bleu gris","bisque":"beige rosé","slategray":"gris ardoise","palegoldenrod":"jaune paille pâle","darkorange":"orange foncé","aquamarine":"aigue-marine","lightgreen":"vert clair","burlywood":"bois précieux","dodgerblue":"bleu France","darkgray":"gris foncé","lightcyan":"cyan clair","powderblue":"bleu de smalt","blueviolet":"bleu-violet","orchid":"lilas","dimgray":"gris soutenu","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavandin","hotpink":"rose intense","steelblue":"bleu acier","tomato":"tomate","lightpink":"rose clair","limegreen":"citron vert","indianred":"rose indien","papayawhip":"crème de papaye","lightslategray":"gris ardoise clair","gray":"gris","mediumorchid":"lilas moyen","cornsilk":"vanille","black":"noir","seagreen":"vert d'eau","darkslateblue":"bleu ardoise foncé","khaki":"kaki","lightblue":"bleu clair","palegreen":"vert pâle","azure":"bleu azur","peachpuff":"pêche","darkolivegreen":"olive foncé","yellowgreen":"vert jaunâtre"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr");dijit.nls.common.fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr");dijit.form.nls.validate.fr={"rangeMessage":"Cette valeur n'est pas comprise dans la plage autorisée.","invalidMessage":"La valeur indiquée n'est pas correcte.","missingMessage":"Cette valeur est requise."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr");dijit.form.nls.ComboBox.fr={"previousMessage":"Choix précédents","nextMessage":"Plus de choix"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr");dojo.cldr.nls.number.fr={"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("dojo.nls.tt-rss-layer_fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr");dojo.nls.colors.fr={"lightsteelblue":"bleu acier clair","orangered":"rouge orangé","midnightblue":"bleu nuit","cadetblue":"bleu pétrole","seashell":"coquillage","slategrey":"gris ardoise","coral":"corail","darkturquoise":"turquoise foncé","antiquewhite":"blanc antique","mediumspringgreen":"vert printemps moyen","salmon":"saumon","darkgrey":"gris foncé","ivory":"ivoire","greenyellow":"vert-jaune","mistyrose":"rose pâle","lightsalmon":"saumon clair","silver":"argent","dimgrey":"gris soutenu","orange":"orange","white":"blanc","navajowhite":"chair","royalblue":"bleu roi","deeppink":"rose soutenu","lime":"vert citron","oldlace":"blanc cassé","chartreuse":"vert vif","darkcyan":"cyan foncé","yellow":"jaune","linen":"écru","olive":"olive","gold":"or","lawngreen":"vert prairie","lightyellow":"jaune clair","tan":"grège","darkviolet":"violet foncé","lightslategrey":"gris ardoise clair","grey":"gris","darkkhaki":"kaki foncé","green":"vert","deepskyblue":"bleu ciel soutenu","aqua":"bleu-vert","sienna":"terre de sienne","mintcream":"crème de menthe","rosybrown":"vieux rose","mediumslateblue":"bleu ardoise moyen","magenta":"magenta","lightseagreen":"vert d'eau clair","cyan":"cyan","olivedrab":"brun verdâtre","darkgoldenrod":"jaune paille foncé","slateblue":"bleu ardoise","mediumaquamarine":"aigue-marine moyen","lavender":"lavande","mediumseagreen":"vert d'eau moyen","maroon":"marron","darkslategray":"gris ardoise foncé","mediumturquoise":"turquoise moyen","ghostwhite":"blanc laiteux","darkblue":"bleu foncé","mediumvioletred":"rouge violacé moyen","brown":"brun","lightgray":"gris clair","sandybrown":"sable","pink":"rose","firebrick":"rouge brique","indigo":"indigo","snow":"neige","darkorchid":"lilas foncé","turquoise":"turquoise","chocolate":"chocolat","springgreen":"vert printemps","moccasin":"chamois","navy":"bleu marine","lemonchiffon":"mousse de citron","teal":"sarcelle","floralwhite":"lys","cornflowerblue":"bleuet","paleturquoise":"turquoise pâle","purple":"pourpre","gainsboro":"gris souris","plum":"prune","red":"rouge","blue":"bleu","forestgreen":"vert sapin","darkgreen":"vert foncé","honeydew":"opalin","darkseagreen":"vert d'eau foncé","lightcoral":"corail clair","palevioletred":"rouge violacé pâle","mediumpurple":"pourpre moyen","saddlebrown":"brun cuir","darkmagenta":"magenta foncé","thistle":"chardon","whitesmoke":"blanc cendré","wheat":"blé","violet":"violet","lightskyblue":"bleu ciel clair","goldenrod":"jaune paille","mediumblue":"bleu moyen","skyblue":"bleu ciel","crimson":"cramoisi","darksalmon":"saumon foncé","darkred":"rouge foncé","darkslategrey":"gris ardoise foncé","peru":"caramel","lightgrey":"gris clair","lightgoldenrodyellow":"jaune paille clair","blanchedalmond":"coquille d'oeuf","aliceblue":"bleu gris","bisque":"beige rosé","slategray":"gris ardoise","palegoldenrod":"jaune paille pâle","darkorange":"orange foncé","aquamarine":"aigue-marine","lightgreen":"vert clair","burlywood":"bois précieux","dodgerblue":"bleu France","darkgray":"gris foncé","lightcyan":"cyan clair","powderblue":"bleu de smalt","blueviolet":"bleu-violet","orchid":"lilas","dimgray":"gris soutenu","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavandin","hotpink":"rose intense","steelblue":"bleu acier","tomato":"tomate","lightpink":"rose clair","limegreen":"citron vert","indianred":"rose indien","papayawhip":"crème de papaye","lightslategray":"gris ardoise clair","gray":"gris","mediumorchid":"lilas moyen","cornsilk":"vanille","black":"noir","seagreen":"vert d'eau","darkslateblue":"bleu ardoise foncé","khaki":"kaki","lightblue":"bleu clair","palegreen":"vert pâle","azure":"bleu azur","peachpuff":"pêche","darkolivegreen":"olive foncé","yellowgreen":"vert jaunâtre"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr");dijit.nls.common.fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr");dijit.form.nls.validate.fr={"rangeMessage":"Cette valeur n'est pas comprise dans la plage autorisée.","invalidMessage":"La valeur indiquée n'est pas correcte.","missingMessage":"Cette valeur est requise."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr");dijit.form.nls.ComboBox.fr={"previousMessage":"Choix précédents","nextMessage":"Plus de choix"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr");dojo.cldr.nls.number.fr={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 59bc21f1fd8816a8b77dd7d93d21ecde276b4e37..bc4572cc24876fa536d69d44500ab92001fcdeaf 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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":"אפשרויות נוספות"};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("dojo.nls.tt-rss-layer_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.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("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":"אפשרויות נוספות"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index a30b4434c0e3a9366bd146e509f451f59f8b41b4..3efc22fc578857ee499e6a88812cc0e9f5dd50f1 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he");dijit.form.nls.ComboBox.he={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};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("dojo.nls.tt-rss-layer_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.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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he");dijit.form.nls.ComboBox.he={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 3e7728585f2c6ed125b0da25605d14c9e9e5174e..2567d68340fb34a0cc3f24baabc9688c881e0004 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_hu");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.hu");dojo.nls.colors.hu={"lightsteelblue":"világos acélkék","orangered":"narancsvörös","midnightblue":"éjkék","cadetblue":"kadétkék","seashell":"kagyló","slategrey":"palaszürke","coral":"korall","darkturquoise":"sötét türkizkék","antiquewhite":"antik fehér","mediumspringgreen":"közepes tavaszzöld","salmon":"lazacszín","darkgrey":"sötétszürke","ivory":"elefántcsont","greenyellow":"zöldessárga","mistyrose":"halvány rózsaszín","lightsalmon":"világos lazacszín","silver":"ezüst","dimgrey":"halványszürke","orange":"narancssárga","white":"fehér","navajowhite":"navajo fehér","royalblue":"királykék","deeppink":"sötétrózsaszín","lime":"lime","oldlace":"régi csipke","chartreuse":"chartreuse","darkcyan":"sötét ciánkék","yellow":"sárga","linen":"vászonfehér","olive":"olajzöld","gold":"arany","lawngreen":"fűzöld","lightyellow":"világossárga","tan":"rozsdabarna","darkviolet":"sötét ibolyaszín","lightslategrey":"világos palaszürke","grey":"szürke","darkkhaki":"sötét khakiszín","green":"zöld","deepskyblue":"sötét égszínkék","aqua":"vízszín","sienna":"vörösesbarna","mintcream":"mentaszósz","rosybrown":"barnásrózsaszín","mediumslateblue":"közepes palakék","magenta":"bíbor","lightseagreen":"világos tengerzöld","cyan":"ciánkék","olivedrab":"olajzöld drapp","darkgoldenrod":"sötét aranyvessző","slateblue":"palakék","mediumaquamarine":"közepes akvamarin","lavender":"levendula","mediumseagreen":"közepes tengerzöld","maroon":"gesztenyebarna","darkslategray":"sötét palaszürke","mediumturquoise":"közepes türkizkék","ghostwhite":"szellemfehér","darkblue":"sötétkék","mediumvioletred":"közepes ibolyavörös","brown":"barna","lightgray":"világosszürke","sandybrown":"homokbarna","pink":"rózsaszín","firebrick":"téglavörös","indigo":"indigó","snow":"hó","darkorchid":"sötét orchidea","turquoise":"türkizkék","chocolate":"csokoládé","springgreen":"tavaszzöld","moccasin":"mokkaszín","navy":"tengerészkék","lemonchiffon":"sárga műselyem","teal":"pávakék","floralwhite":"virágfehér","cornflowerblue":"búzavirágkék","paleturquoise":"halvány türkizkék","purple":"lila","gainsboro":"gainsboro","plum":"szilvakék","red":"vörös","blue":"kék","forestgreen":"erdőzöld","darkgreen":"sötétzöld","honeydew":"mézharmat","darkseagreen":"sötét tengerzöld","lightcoral":"világos korall","palevioletred":"halvány ibolyavörös","mediumpurple":"közepes lila","saddlebrown":"nyeregbarna","darkmagenta":"sötétbíbor","thistle":"bogáncs","whitesmoke":"fehér füst","wheat":"búza","violet":"ibolyaszín","lightskyblue":"világos égszínkék","goldenrod":"aranyvessző","mediumblue":"közepes kék","skyblue":"égszínkék","crimson":"karmazsinvörös","darksalmon":"sötét lazacszín","darkred":"sötétvörös","darkslategrey":"sötét palaszürke","peru":"peru","lightgrey":"világosszürke","lightgoldenrodyellow":"világos aranyvessző sárga","blanchedalmond":"hámozott mandula","aliceblue":"Alice kék","bisque":"porcelán","slategray":"palaszürke","palegoldenrod":"halvány aranyvessző","darkorange":"sötét narancssárga","aquamarine":"akvamarin","lightgreen":"világoszöld","burlywood":"nyersfa","dodgerblue":"dodger kék","darkgray":"sötétszürke","lightcyan":"világos ciánkék","powderblue":"púderkék","blueviolet":"ibolyakék","orchid":"orchidea","dimgray":"halványszürke","beige":"bézs","fuchsia":"fukszia","lavenderblush":"pirosas levendula","hotpink":"meleg rózsaszín","steelblue":"acélkék","tomato":"paradicsom","lightpink":"világos rózsaszín","limegreen":"limezöld","indianred":"indiánvörös","papayawhip":"papayahab","lightslategray":"világos palaszürke","gray":"szürke","mediumorchid":"közepes orchidea","cornsilk":"kukoricahaj","black":"fekete","seagreen":"tengerzöld","darkslateblue":"sötét palakék","khaki":"khakiszín","lightblue":"világoskék","palegreen":"halványzöld","azure":"azúrkék","peachpuff":"barackszín","darkolivegreen":"sötét olajzöld","yellowgreen":"sárgászöld"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.hu");dijit.nls.common.hu={"buttonOk":"OK","buttonCancel":"Mégse","buttonSave":"Mentés","itemClose":"Bezárás"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.hu");dijit.form.nls.validate.hu={"rangeMessage":"Az érték kívül van a megengedett tartományon.","invalidMessage":"A megadott érték érvénytelen.","missingMessage":"Meg kell adni egy értéket."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.hu");dijit.form.nls.ComboBox.hu={"previousMessage":"Előző menüpontok","nextMessage":"További menüpontok"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.hu");dojo.cldr.nls.number.hu={"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":" "};
+dojo.provide("dojo.nls.tt-rss-layer_hu");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.hu");dojo.nls.colors.hu={"lightsteelblue":"világos acélkék","orangered":"narancsvörös","midnightblue":"éjkék","cadetblue":"kadétkék","seashell":"kagyló","slategrey":"palaszürke","coral":"korall","darkturquoise":"sötét türkizkék","antiquewhite":"antik fehér","mediumspringgreen":"közepes tavaszzöld","salmon":"lazacszín","darkgrey":"sötétszürke","ivory":"elefántcsont","greenyellow":"zöldessárga","mistyrose":"halvány rózsaszín","lightsalmon":"világos lazacszín","silver":"ezüst","dimgrey":"halványszürke","orange":"narancssárga","white":"fehér","navajowhite":"navajo fehér","royalblue":"királykék","deeppink":"sötétrózsaszín","lime":"lime","oldlace":"régi csipke","chartreuse":"chartreuse","darkcyan":"sötét ciánkék","yellow":"sárga","linen":"vászonfehér","olive":"olajzöld","gold":"arany","lawngreen":"fűzöld","lightyellow":"világossárga","tan":"rozsdabarna","darkviolet":"sötét ibolyaszín","lightslategrey":"világos palaszürke","grey":"szürke","darkkhaki":"sötét khakiszín","green":"zöld","deepskyblue":"sötét égszínkék","aqua":"vízszín","sienna":"vörösesbarna","mintcream":"mentaszósz","rosybrown":"barnásrózsaszín","mediumslateblue":"közepes palakék","magenta":"bíbor","lightseagreen":"világos tengerzöld","cyan":"ciánkék","olivedrab":"olajzöld drapp","darkgoldenrod":"sötét aranyvessző","slateblue":"palakék","mediumaquamarine":"közepes akvamarin","lavender":"levendula","mediumseagreen":"közepes tengerzöld","maroon":"gesztenyebarna","darkslategray":"sötét palaszürke","mediumturquoise":"közepes türkizkék","ghostwhite":"szellemfehér","darkblue":"sötétkék","mediumvioletred":"közepes ibolyavörös","brown":"barna","lightgray":"világosszürke","sandybrown":"homokbarna","pink":"rózsaszín","firebrick":"téglavörös","indigo":"indigó","snow":"hó","darkorchid":"sötét orchidea","turquoise":"türkizkék","chocolate":"csokoládé","springgreen":"tavaszzöld","moccasin":"mokkaszín","navy":"tengerészkék","lemonchiffon":"sárga műselyem","teal":"pávakék","floralwhite":"virágfehér","cornflowerblue":"búzavirágkék","paleturquoise":"halvány türkizkék","purple":"lila","gainsboro":"gainsboro","plum":"szilvakék","red":"vörös","blue":"kék","forestgreen":"erdőzöld","darkgreen":"sötétzöld","honeydew":"mézharmat","darkseagreen":"sötét tengerzöld","lightcoral":"világos korall","palevioletred":"halvány ibolyavörös","mediumpurple":"közepes lila","saddlebrown":"nyeregbarna","darkmagenta":"sötétbíbor","thistle":"bogáncs","whitesmoke":"fehér füst","wheat":"búza","violet":"ibolyaszín","lightskyblue":"világos égszínkék","goldenrod":"aranyvessző","mediumblue":"közepes kék","skyblue":"égszínkék","crimson":"karmazsinvörös","darksalmon":"sötét lazacszín","darkred":"sötétvörös","darkslategrey":"sötét palaszürke","peru":"peru","lightgrey":"világosszürke","lightgoldenrodyellow":"világos aranyvessző sárga","blanchedalmond":"hámozott mandula","aliceblue":"Alice kék","bisque":"porcelán","slategray":"palaszürke","palegoldenrod":"halvány aranyvessző","darkorange":"sötét narancssárga","aquamarine":"akvamarin","lightgreen":"világoszöld","burlywood":"nyersfa","dodgerblue":"dodger kék","darkgray":"sötétszürke","lightcyan":"világos ciánkék","powderblue":"púderkék","blueviolet":"ibolyakék","orchid":"orchidea","dimgray":"halványszürke","beige":"bézs","fuchsia":"fukszia","lavenderblush":"pirosas levendula","hotpink":"meleg rózsaszín","steelblue":"acélkék","tomato":"paradicsom","lightpink":"világos rózsaszín","limegreen":"limezöld","indianred":"indiánvörös","papayawhip":"papayahab","lightslategray":"világos palaszürke","gray":"szürke","mediumorchid":"közepes orchidea","cornsilk":"kukoricahaj","black":"fekete","seagreen":"tengerzöld","darkslateblue":"sötét palakék","khaki":"khakiszín","lightblue":"világoskék","palegreen":"halványzöld","azure":"azúrkék","peachpuff":"barackszín","darkolivegreen":"sötét olajzöld","yellowgreen":"sárgászöld"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.hu");dijit.nls.common.hu={"buttonOk":"OK","buttonCancel":"Mégse","buttonSave":"Mentés","itemClose":"Bezárás"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.hu");dijit.form.nls.validate.hu={"rangeMessage":"Az érték kívül van a megengedett tartományon.","invalidMessage":"A megadott érték érvénytelen.","missingMessage":"Meg kell adni egy értéket."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.hu");dijit.form.nls.ComboBox.hu={"previousMessage":"Előző menüpontok","nextMessage":"További menüpontok"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.hu");dojo.cldr.nls.number.hu={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "};
index ad0d6549c56e7ab8fa86ea41ef77eb1830e8a02b..d2df8f60a51cabc67141ba4aee566c068b748e8f 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_it-it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it_it");dojo.nls.colors.it_it={"lightsteelblue":"blu acciao chiaro","orangered":"vermiglio","midnightblue":"blu melanzana scuro","cadetblue":"verde acqua","seashell":"sabbia rosa","slategrey":"grigio ardesia","coral":"corallo","darkturquoise":"turchese scuro","antiquewhite":"bianco antico","mediumspringgreen":"verde primavera medio","salmon":"salmone","darkgrey":"grigio scuro","ivory":"avorio","greenyellow":"giallo verde","mistyrose":"rosa pallido","lightsalmon":"salmone chiaro","silver":"grigio 25%","dimgrey":"grigio 80%","orange":"arancione","white":"bianco","navajowhite":"pesca chiaro","royalblue":"blu reale","deeppink":"ciclamino","lime":"verde fluorescente","oldlace":"mandorla","chartreuse":"verde brillante","darkcyan":"ciano scuro","yellow":"giallo","linen":"lino","olive":"verde oliva","gold":"oro","lawngreen":"verde prato","lightyellow":"giallo chiaro","tan":"grigio bruno","darkviolet":"viola scuro","lightslategrey":"grigio ardesia chiaro","grey":"grigio","darkkhaki":"kaki scuro","green":"verde","deepskyblue":"azzurro cielo scuro","aqua":"acqua","sienna":"cuoio","mintcream":"bianco nuvola","rosybrown":"marrone rosato","mediumslateblue":"blu ardesia medio","magenta":"magenta","lightseagreen":"verde mare chiaro","cyan":"ciano","olivedrab":"marrone oliva","darkgoldenrod":"ocra scuro","slateblue":"blu ardesia","mediumaquamarine":"acquamarina medio","lavender":"lavanda","mediumseagreen":"verde mare medio","maroon":"scarlatto","darkslategray":"grigio ardesia scuro","mediumturquoise":"turchese medio","ghostwhite":"bianco gesso","darkblue":"blu scuro","mediumvioletred":"vinaccia","brown":"marrone","lightgray":"grigio chiaro","sandybrown":"marrone sabbia","pink":"rosa","firebrick":"rosso mattone","indigo":"indaco","snow":"neve","darkorchid":"orchidea scuro","turquoise":"turchese","chocolate":"cioccolato","springgreen":"verde primavera","moccasin":"mocassino","navy":"blu notte","lemonchiffon":"caffelatte chiaro","teal":"verde turchese","floralwhite":"bianco giglio","cornflowerblue":"blu fiordaliso","paleturquoise":"turchese pallido","purple":"porpora","gainsboro":"grigio 10%","plum":"prugna","red":"rosso","blue":"blu","forestgreen":"verde foresta","darkgreen":"verde scuro","honeydew":"bianco germoglio","darkseagreen":"verde mare scuro","lightcoral":"rosa corallo","palevioletred":"vinaccia chiaro","mediumpurple":"porpora medio","saddlebrown":"cacao","darkmagenta":"magenta scuro","thistle":"rosa cenere","whitesmoke":"bianco fumo","wheat":"sabbia","violet":"viola","lightskyblue":"azzurro cielo chiaro","goldenrod":"ocra gialla","mediumblue":"blu medio","skyblue":"azzurro cielo","crimson":"cremisi","darksalmon":"salmone scuro","darkred":"rosso scuro","darkslategrey":"grigio ardesia scuro","peru":"marrone terra bruciata","lightgrey":"grigio chiaro","lightgoldenrodyellow":"giallo tenue","blanchedalmond":"mandorla chiaro","aliceblue":"blu alice","bisque":"incarnato","slategray":"grigio ardesia","palegoldenrod":"giallo zolfo chiaro","darkorange":"arancione scuro","aquamarine":"acquamarina","lightgreen":"verde chiaro","burlywood":"tabacco","dodgerblue":"blu d'oriente","darkgray":"grigio scuro","lightcyan":"ciano chiaro","powderblue":"azzurro polvere","blueviolet":"blu violetto","orchid":"orchidea","dimgray":"grigio 80%","beige":"beige","fuchsia":"fucsia","lavenderblush":"bianco rosato","hotpink":"rosa acceso","steelblue":"blu acciao","tomato":"pomodoro","lightpink":"rosa chiaro","limegreen":"verde lime","indianred":"terra indiana","papayawhip":"cipria","lightslategray":"grigio ardesia chiaro","gray":"grigio","mediumorchid":"orchidea medio","cornsilk":"crema","black":"nero","seagreen":"verde mare","darkslateblue":"blu ardesia scuro","khaki":"kaki","lightblue":"azzurro","palegreen":"verde pallido","azure":"azzurro ghiaccio","peachpuff":"pesca","darkolivegreen":"verde oliva scuro","yellowgreen":"giallo verde"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it_it");dijit.nls.common.it_it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it_it");dijit.form.nls.validate.it_it={"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it_it");dijit.form.nls.ComboBox.it_it={"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it_it");dojo.cldr.nls.number.it_it={"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"};
+dojo.provide("dojo.nls.tt-rss-layer_it-it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it_it");dojo.nls.colors.it_it={"lightsteelblue":"blu acciao chiaro","orangered":"vermiglio","midnightblue":"blu melanzana scuro","cadetblue":"verde acqua","seashell":"sabbia rosa","slategrey":"grigio ardesia","coral":"corallo","darkturquoise":"turchese scuro","antiquewhite":"bianco antico","mediumspringgreen":"verde primavera medio","salmon":"salmone","darkgrey":"grigio scuro","ivory":"avorio","greenyellow":"giallo verde","mistyrose":"rosa pallido","lightsalmon":"salmone chiaro","silver":"grigio 25%","dimgrey":"grigio 80%","orange":"arancione","white":"bianco","navajowhite":"pesca chiaro","royalblue":"blu reale","deeppink":"ciclamino","lime":"verde fluorescente","oldlace":"mandorla","chartreuse":"verde brillante","darkcyan":"ciano scuro","yellow":"giallo","linen":"lino","olive":"verde oliva","gold":"oro","lawngreen":"verde prato","lightyellow":"giallo chiaro","tan":"grigio bruno","darkviolet":"viola scuro","lightslategrey":"grigio ardesia chiaro","grey":"grigio","darkkhaki":"kaki scuro","green":"verde","deepskyblue":"azzurro cielo scuro","aqua":"acqua","sienna":"cuoio","mintcream":"bianco nuvola","rosybrown":"marrone rosato","mediumslateblue":"blu ardesia medio","magenta":"magenta","lightseagreen":"verde mare chiaro","cyan":"ciano","olivedrab":"marrone oliva","darkgoldenrod":"ocra scuro","slateblue":"blu ardesia","mediumaquamarine":"acquamarina medio","lavender":"lavanda","mediumseagreen":"verde mare medio","maroon":"scarlatto","darkslategray":"grigio ardesia scuro","mediumturquoise":"turchese medio","ghostwhite":"bianco gesso","darkblue":"blu scuro","mediumvioletred":"vinaccia","brown":"marrone","lightgray":"grigio chiaro","sandybrown":"marrone sabbia","pink":"rosa","firebrick":"rosso mattone","indigo":"indaco","snow":"neve","darkorchid":"orchidea scuro","turquoise":"turchese","chocolate":"cioccolato","springgreen":"verde primavera","moccasin":"mocassino","navy":"blu notte","lemonchiffon":"caffelatte chiaro","teal":"verde turchese","floralwhite":"bianco giglio","cornflowerblue":"blu fiordaliso","paleturquoise":"turchese pallido","purple":"porpora","gainsboro":"grigio 10%","plum":"prugna","red":"rosso","blue":"blu","forestgreen":"verde foresta","darkgreen":"verde scuro","honeydew":"bianco germoglio","darkseagreen":"verde mare scuro","lightcoral":"rosa corallo","palevioletred":"vinaccia chiaro","mediumpurple":"porpora medio","saddlebrown":"cacao","darkmagenta":"magenta scuro","thistle":"rosa cenere","whitesmoke":"bianco fumo","wheat":"sabbia","violet":"viola","lightskyblue":"azzurro cielo chiaro","goldenrod":"ocra gialla","mediumblue":"blu medio","skyblue":"azzurro cielo","crimson":"cremisi","darksalmon":"salmone scuro","darkred":"rosso scuro","darkslategrey":"grigio ardesia scuro","peru":"marrone terra bruciata","lightgrey":"grigio chiaro","lightgoldenrodyellow":"giallo tenue","blanchedalmond":"mandorla chiaro","aliceblue":"blu alice","bisque":"incarnato","slategray":"grigio ardesia","palegoldenrod":"giallo zolfo chiaro","darkorange":"arancione scuro","aquamarine":"acquamarina","lightgreen":"verde chiaro","burlywood":"tabacco","dodgerblue":"blu d'oriente","darkgray":"grigio scuro","lightcyan":"ciano chiaro","powderblue":"azzurro polvere","blueviolet":"blu violetto","orchid":"orchidea","dimgray":"grigio 80%","beige":"beige","fuchsia":"fucsia","lavenderblush":"bianco rosato","hotpink":"rosa acceso","steelblue":"blu acciao","tomato":"pomodoro","lightpink":"rosa chiaro","limegreen":"verde lime","indianred":"terra indiana","papayawhip":"cipria","lightslategray":"grigio ardesia chiaro","gray":"grigio","mediumorchid":"orchidea medio","cornsilk":"crema","black":"nero","seagreen":"verde mare","darkslateblue":"blu ardesia scuro","khaki":"kaki","lightblue":"azzurro","palegreen":"verde pallido","azure":"azzurro ghiaccio","peachpuff":"pesca","darkolivegreen":"verde oliva scuro","yellowgreen":"giallo verde"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it_it");dijit.nls.common.it_it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it_it");dijit.form.nls.validate.it_it={"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it_it");dijit.form.nls.ComboBox.it_it={"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it_it");dojo.cldr.nls.number.it_it={"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
index 640baacbc05540c319c1636bacdcec196bb69b00..e34368d153f303b88e1462cd461bb170ac9fcd1c 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it");dojo.nls.colors.it={"lightsteelblue":"blu acciao chiaro","orangered":"vermiglio","midnightblue":"blu melanzana scuro","cadetblue":"verde acqua","seashell":"sabbia rosa","slategrey":"grigio ardesia","coral":"corallo","darkturquoise":"turchese scuro","antiquewhite":"bianco antico","mediumspringgreen":"verde primavera medio","salmon":"salmone","darkgrey":"grigio scuro","ivory":"avorio","greenyellow":"giallo verde","mistyrose":"rosa pallido","lightsalmon":"salmone chiaro","silver":"grigio 25%","dimgrey":"grigio 80%","orange":"arancione","white":"bianco","navajowhite":"pesca chiaro","royalblue":"blu reale","deeppink":"ciclamino","lime":"verde fluorescente","oldlace":"mandorla","chartreuse":"verde brillante","darkcyan":"ciano scuro","yellow":"giallo","linen":"lino","olive":"verde oliva","gold":"oro","lawngreen":"verde prato","lightyellow":"giallo chiaro","tan":"grigio bruno","darkviolet":"viola scuro","lightslategrey":"grigio ardesia chiaro","grey":"grigio","darkkhaki":"kaki scuro","green":"verde","deepskyblue":"azzurro cielo scuro","aqua":"acqua","sienna":"cuoio","mintcream":"bianco nuvola","rosybrown":"marrone rosato","mediumslateblue":"blu ardesia medio","magenta":"magenta","lightseagreen":"verde mare chiaro","cyan":"ciano","olivedrab":"marrone oliva","darkgoldenrod":"ocra scuro","slateblue":"blu ardesia","mediumaquamarine":"acquamarina medio","lavender":"lavanda","mediumseagreen":"verde mare medio","maroon":"scarlatto","darkslategray":"grigio ardesia scuro","mediumturquoise":"turchese medio","ghostwhite":"bianco gesso","darkblue":"blu scuro","mediumvioletred":"vinaccia","brown":"marrone","lightgray":"grigio chiaro","sandybrown":"marrone sabbia","pink":"rosa","firebrick":"rosso mattone","indigo":"indaco","snow":"neve","darkorchid":"orchidea scuro","turquoise":"turchese","chocolate":"cioccolato","springgreen":"verde primavera","moccasin":"mocassino","navy":"blu notte","lemonchiffon":"caffelatte chiaro","teal":"verde turchese","floralwhite":"bianco giglio","cornflowerblue":"blu fiordaliso","paleturquoise":"turchese pallido","purple":"porpora","gainsboro":"grigio 10%","plum":"prugna","red":"rosso","blue":"blu","forestgreen":"verde foresta","darkgreen":"verde scuro","honeydew":"bianco germoglio","darkseagreen":"verde mare scuro","lightcoral":"rosa corallo","palevioletred":"vinaccia chiaro","mediumpurple":"porpora medio","saddlebrown":"cacao","darkmagenta":"magenta scuro","thistle":"rosa cenere","whitesmoke":"bianco fumo","wheat":"sabbia","violet":"viola","lightskyblue":"azzurro cielo chiaro","goldenrod":"ocra gialla","mediumblue":"blu medio","skyblue":"azzurro cielo","crimson":"cremisi","darksalmon":"salmone scuro","darkred":"rosso scuro","darkslategrey":"grigio ardesia scuro","peru":"marrone terra bruciata","lightgrey":"grigio chiaro","lightgoldenrodyellow":"giallo tenue","blanchedalmond":"mandorla chiaro","aliceblue":"blu alice","bisque":"incarnato","slategray":"grigio ardesia","palegoldenrod":"giallo zolfo chiaro","darkorange":"arancione scuro","aquamarine":"acquamarina","lightgreen":"verde chiaro","burlywood":"tabacco","dodgerblue":"blu d'oriente","darkgray":"grigio scuro","lightcyan":"ciano chiaro","powderblue":"azzurro polvere","blueviolet":"blu violetto","orchid":"orchidea","dimgray":"grigio 80%","beige":"beige","fuchsia":"fucsia","lavenderblush":"bianco rosato","hotpink":"rosa acceso","steelblue":"blu acciao","tomato":"pomodoro","lightpink":"rosa chiaro","limegreen":"verde lime","indianred":"terra indiana","papayawhip":"cipria","lightslategray":"grigio ardesia chiaro","gray":"grigio","mediumorchid":"orchidea medio","cornsilk":"crema","black":"nero","seagreen":"verde mare","darkslateblue":"blu ardesia scuro","khaki":"kaki","lightblue":"azzurro","palegreen":"verde pallido","azure":"azzurro ghiaccio","peachpuff":"pesca","darkolivegreen":"verde oliva scuro","yellowgreen":"giallo verde"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it");dijit.nls.common.it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it");dijit.form.nls.validate.it={"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it");dijit.form.nls.ComboBox.it={"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it");dojo.cldr.nls.number.it={"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"};
+dojo.provide("dojo.nls.tt-rss-layer_it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it");dojo.nls.colors.it={"lightsteelblue":"blu acciao chiaro","orangered":"vermiglio","midnightblue":"blu melanzana scuro","cadetblue":"verde acqua","seashell":"sabbia rosa","slategrey":"grigio ardesia","coral":"corallo","darkturquoise":"turchese scuro","antiquewhite":"bianco antico","mediumspringgreen":"verde primavera medio","salmon":"salmone","darkgrey":"grigio scuro","ivory":"avorio","greenyellow":"giallo verde","mistyrose":"rosa pallido","lightsalmon":"salmone chiaro","silver":"grigio 25%","dimgrey":"grigio 80%","orange":"arancione","white":"bianco","navajowhite":"pesca chiaro","royalblue":"blu reale","deeppink":"ciclamino","lime":"verde fluorescente","oldlace":"mandorla","chartreuse":"verde brillante","darkcyan":"ciano scuro","yellow":"giallo","linen":"lino","olive":"verde oliva","gold":"oro","lawngreen":"verde prato","lightyellow":"giallo chiaro","tan":"grigio bruno","darkviolet":"viola scuro","lightslategrey":"grigio ardesia chiaro","grey":"grigio","darkkhaki":"kaki scuro","green":"verde","deepskyblue":"azzurro cielo scuro","aqua":"acqua","sienna":"cuoio","mintcream":"bianco nuvola","rosybrown":"marrone rosato","mediumslateblue":"blu ardesia medio","magenta":"magenta","lightseagreen":"verde mare chiaro","cyan":"ciano","olivedrab":"marrone oliva","darkgoldenrod":"ocra scuro","slateblue":"blu ardesia","mediumaquamarine":"acquamarina medio","lavender":"lavanda","mediumseagreen":"verde mare medio","maroon":"scarlatto","darkslategray":"grigio ardesia scuro","mediumturquoise":"turchese medio","ghostwhite":"bianco gesso","darkblue":"blu scuro","mediumvioletred":"vinaccia","brown":"marrone","lightgray":"grigio chiaro","sandybrown":"marrone sabbia","pink":"rosa","firebrick":"rosso mattone","indigo":"indaco","snow":"neve","darkorchid":"orchidea scuro","turquoise":"turchese","chocolate":"cioccolato","springgreen":"verde primavera","moccasin":"mocassino","navy":"blu notte","lemonchiffon":"caffelatte chiaro","teal":"verde turchese","floralwhite":"bianco giglio","cornflowerblue":"blu fiordaliso","paleturquoise":"turchese pallido","purple":"porpora","gainsboro":"grigio 10%","plum":"prugna","red":"rosso","blue":"blu","forestgreen":"verde foresta","darkgreen":"verde scuro","honeydew":"bianco germoglio","darkseagreen":"verde mare scuro","lightcoral":"rosa corallo","palevioletred":"vinaccia chiaro","mediumpurple":"porpora medio","saddlebrown":"cacao","darkmagenta":"magenta scuro","thistle":"rosa cenere","whitesmoke":"bianco fumo","wheat":"sabbia","violet":"viola","lightskyblue":"azzurro cielo chiaro","goldenrod":"ocra gialla","mediumblue":"blu medio","skyblue":"azzurro cielo","crimson":"cremisi","darksalmon":"salmone scuro","darkred":"rosso scuro","darkslategrey":"grigio ardesia scuro","peru":"marrone terra bruciata","lightgrey":"grigio chiaro","lightgoldenrodyellow":"giallo tenue","blanchedalmond":"mandorla chiaro","aliceblue":"blu alice","bisque":"incarnato","slategray":"grigio ardesia","palegoldenrod":"giallo zolfo chiaro","darkorange":"arancione scuro","aquamarine":"acquamarina","lightgreen":"verde chiaro","burlywood":"tabacco","dodgerblue":"blu d'oriente","darkgray":"grigio scuro","lightcyan":"ciano chiaro","powderblue":"azzurro polvere","blueviolet":"blu violetto","orchid":"orchidea","dimgray":"grigio 80%","beige":"beige","fuchsia":"fucsia","lavenderblush":"bianco rosato","hotpink":"rosa acceso","steelblue":"blu acciao","tomato":"pomodoro","lightpink":"rosa chiaro","limegreen":"verde lime","indianred":"terra indiana","papayawhip":"cipria","lightslategray":"grigio ardesia chiaro","gray":"grigio","mediumorchid":"orchidea medio","cornsilk":"crema","black":"nero","seagreen":"verde mare","darkslateblue":"blu ardesia scuro","khaki":"kaki","lightblue":"azzurro","palegreen":"verde pallido","azure":"azzurro ghiaccio","peachpuff":"pesca","darkolivegreen":"verde oliva scuro","yellowgreen":"giallo verde"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it");dijit.nls.common.it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it");dijit.form.nls.validate.it={"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it");dijit.form.nls.ComboBox.it={"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it");dojo.cldr.nls.number.it={"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
index 84aa8786bac737bd27907877cec713b40a78b327..016cf5d5ca4c4116915c29582461fa6aa6e744c8 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_ja-jp");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja_jp");dojo.nls.colors.ja_jp={"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.ja_jp");dijit.nls.loading.ja_jp={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja_jp");dijit.nls.common.ja_jp={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja_jp");dijit.form.nls.validate.ja_jp={"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja_jp");dijit.form.nls.ComboBox.ja_jp={"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja_jp");dojo.cldr.nls.number.ja_jp={"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"};
+dojo.provide("dojo.nls.tt-rss-layer_ja-jp");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja_jp");dojo.nls.colors.ja_jp={"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.ja_jp");dijit.nls.loading.ja_jp={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja_jp");dijit.nls.common.ja_jp={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja_jp");dijit.form.nls.validate.ja_jp={"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja_jp");dijit.form.nls.ComboBox.ja_jp={"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja_jp");dojo.cldr.nls.number.ja_jp={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
index d71241d29007a66cdb583f9feecdb307aa21d26b..13da053da702459448208c77c2334aaa38fd8714 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_ja");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja");dojo.nls.colors.ja={"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.ja");dijit.nls.loading.ja={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja");dijit.nls.common.ja={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja");dijit.form.nls.validate.ja={"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja");dijit.form.nls.ComboBox.ja={"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja");dojo.cldr.nls.number.ja={"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"};
+dojo.provide("dojo.nls.tt-rss-layer_ja");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja");dojo.nls.colors.ja={"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.ja");dijit.nls.loading.ja={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja");dijit.nls.common.ja={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja");dijit.form.nls.validate.ja={"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja");dijit.form.nls.ComboBox.ja={"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja");dojo.cldr.nls.number.ja={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
index a79a5e02d844d961452de9c412c64fbd37755af9..36e6ab5bf6245ced8513361627537aad6b7eb7b6 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_ko-kr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko_kr");dojo.nls.colors.ko_kr={"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.ko_kr");dijit.nls.loading.ko_kr={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko_kr");dijit.nls.common.ko_kr={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko_kr");dijit.form.nls.validate.ko_kr={"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko_kr");dijit.form.nls.ComboBox.ko_kr={"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko_kr");dojo.cldr.nls.number.ko_kr={"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("dojo.nls.tt-rss-layer_ko-kr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko_kr");dojo.nls.colors.ko_kr={"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.ko_kr");dijit.nls.loading.ko_kr={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko_kr");dijit.nls.common.ko_kr={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko_kr");dijit.form.nls.validate.ko_kr={"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko_kr");dijit.form.nls.ComboBox.ko_kr={"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko_kr");dojo.cldr.nls.number.ko_kr={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index da86270d5eef4c220b48be3ce98c1d55b34df566..a919765c007d1c4d7b3e8383bd1ae416ae36f96d 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_ko");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko");dojo.nls.colors.ko={"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.ko");dijit.nls.loading.ko={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko");dijit.nls.common.ko={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko");dijit.form.nls.validate.ko={"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko");dijit.form.nls.ComboBox.ko={"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko");dojo.cldr.nls.number.ko={"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("dojo.nls.tt-rss-layer_ko");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko");dojo.nls.colors.ko={"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.ko");dijit.nls.loading.ko={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko");dijit.nls.common.ko={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko");dijit.form.nls.validate.ko={"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko");dijit.form.nls.ComboBox.ko={"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko");dojo.cldr.nls.number.ko={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index c6ca50890a1c37465dfeebe06fc848b12b8e5617..d4c87d2037c609077cec37f3ddd6395edd1e5e0c 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_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.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("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"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index bbafa6a2feb53b8b374ac1fc0a7392889c2f612b..6b5f10a11c1b9cc0b4a29eedc9d1e5a959b5fe59 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_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.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("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"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 4ba9f5ee47e2f50316e9641a60d523d1a33c6524..78bfcfca6bc675018ec388a652f7efc372ccb4bc 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_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.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("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"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index d69dca84c0797eb098c7dbf01a8cebb7b23f523a..dd78bb0fb585edab6d6989bee3f20a704c089a36 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_pl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pl");dojo.nls.colors.pl={"lightsteelblue":"jasny stalowoniebieski","orangered":"pomarańczowoczerwony","midnightblue":"ciemnogranatowy","cadetblue":"niebieskoszary","seashell":"muszla","slategrey":"łupkowy szary","coral":"koralowy","darkturquoise":"ciemnoturkusowy","antiquewhite":"biel antyczna","mediumspringgreen":"średnia wiosenna zieleń","salmon":"łososiowy","darkgrey":"ciemnoszary","ivory":"kość słoniowa","greenyellow":"zielonożółty","mistyrose":"bladoróżany","lightsalmon":"jasnołososiowy","silver":"srebrny","dimgrey":"przytłumiony szary","orange":"pomarańczowy","white":"biały","navajowhite":"piaskowy","royalblue":"błękit królewski","deeppink":"głęboki różowy","lime":"limetkowy","oldlace":"bladopomarańczowy","chartreuse":"jaskrawozielony","darkcyan":"ciemny cyjan","yellow":"żółty","linen":"lniany","olive":"oliwkowy","gold":"złoty","lawngreen":"trawiasty","lightyellow":"jasnożółty","tan":"kawowy","darkviolet":"ciemnofioletowy","lightslategrey":"jasny łupkowy szary","grey":"szary","darkkhaki":"ciemny khaki","green":"zielony","deepskyblue":"intensywny błękit nieba","aqua":"wodny","sienna":"siena","mintcream":"jasnomiętowy","rosybrown":"różowobrązowy","mediumslateblue":"średni łupkowy niebieski","magenta":"magenta","lightseagreen":"jasna morska zieleń","cyan":"cyjan","olivedrab":"oliwkowa zieleń","darkgoldenrod":"ciemnogliniany","slateblue":"łupkowy niebieski","mediumaquamarine":"średnia akwamaryna","lavender":"lawendowy","mediumseagreen":"średnia morska zieleń","maroon":"bordowy","darkslategray":"ciemny łupkowy szary","mediumturquoise":"średni turkusowy","ghostwhite":"bladobiały","darkblue":"ciemnoniebieski","mediumvioletred":"średni fioletowoczerwony","brown":"brązowy","lightgray":"jasnoszary","sandybrown":"piaskowy brąz","pink":"różowy","firebrick":"ceglasty","indigo":"indygo","snow":"śnieżny","darkorchid":"ciemna orchidea","turquoise":"turkusowy","chocolate":"czekoladowy","springgreen":"wiosenna zieleń","moccasin":"mokasynowy","navy":"granatowy","lemonchiffon":"cytrynowy","teal":"cyrankowy","floralwhite":"kwiatowa biel","cornflowerblue":"chabrowy","paleturquoise":"bladoturkusowy","purple":"purpurowy","gainsboro":"bladoszary","plum":"śliwkowy","red":"czerwony","blue":"niebieski","forestgreen":"leśna zieleń","darkgreen":"ciemnozielony","honeydew":"melon","darkseagreen":"ciemna morska zieleń","lightcoral":"jasnokoralowy","palevioletred":"blady fioletowoczerwony","mediumpurple":"średnia purpura","saddlebrown":"skórzany brązowy","darkmagenta":"ciemna magenta","thistle":"bladofioletowy","whitesmoke":"przydymiony biały","wheat":"pszeniczny","violet":"fioletowy","lightskyblue":"jasny błękit nieba","goldenrod":"gliniany","mediumblue":"średni niebieski","skyblue":"błękit nieba","crimson":"karmazynowy","darksalmon":"ciemnołososiowy","darkred":"ciemnoczerwony","darkslategrey":"ciemny łupkowy szary","peru":"jasnobrązowy","lightgrey":"jasnoszary","lightgoldenrodyellow":"jasnogliniana żółć","blanchedalmond":"migdałowy","aliceblue":"bladoniebieski","bisque":"biszkoptowy","slategray":"łupkowy szary","palegoldenrod":"bladogliniany","darkorange":"ciemnopomarańczowy","aquamarine":"akwamaryna","lightgreen":"jasnozielony","burlywood":"kolor drewna","dodgerblue":"błękit Dodgers","darkgray":"ciemnoszary","lightcyan":"jasny cyjan","powderblue":"pudrowy niebieski","blueviolet":"niebieskofioletowy","orchid":"orchidea","dimgray":"przytłumiony szary","beige":"beżowy","fuchsia":"fuksja","lavenderblush":"lawendoworóżowy","hotpink":"intensywny różowy","steelblue":"stalowy niebieski","tomato":"pomidorowy","lightpink":"jasnoróżowy","limegreen":"limetkowozielony","indianred":"kasztanowy","papayawhip":"papaja","lightslategray":"jasny łupkowy szary","gray":"szary","mediumorchid":"średnia orchidea","cornsilk":"kukurydziany","black":"czarny","seagreen":"morska zieleń","darkslateblue":"ciemny łupkowy niebieski","khaki":"khaki","lightblue":"jasnoniebieski","palegreen":"bladozielony","azure":"lazur","peachpuff":"brzoskwiniowy","darkolivegreen":"ciemnooliwkowy","yellowgreen":"żółtozielony"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pl");dijit.nls.common.pl={"buttonOk":"OK","buttonCancel":"Anuluj","buttonSave":"Zapisz","itemClose":"Zamknij"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pl");dijit.form.nls.validate.pl={"rangeMessage":"Ta wartość jest spoza zakresu.","invalidMessage":"Wprowadzona wartość jest niepoprawna.","missingMessage":"Ta wartość jest wymagana."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pl");dijit.form.nls.ComboBox.pl={"previousMessage":"Poprzednie wybory","nextMessage":"Więcej wyborów"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pl");dojo.cldr.nls.number.pl={"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("dojo.nls.tt-rss-layer_pl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pl");dojo.nls.colors.pl={"lightsteelblue":"jasnostalowoniebieski","orangered":"pomarańczowoczerwony","midnightblue":"granatowoczarny","cadetblue":"niebieskoszary","seashell":"matowoliliowy","slategrey":"mysi","coral":"koralowy","darkturquoise":"mlecznoturkusowy","antiquewhite":"biel antyczna","mediumspringgreen":"średnia wiosenna zieleń","salmon":"łososiowy","darkgrey":"ciemnoszary","ivory":"kość słoniowa","greenyellow":"zielonożółty","mistyrose":"bladoróżany","lightsalmon":"jasnołososiowy","silver":"srebrny","dimgrey":"przyciemniony szary","orange":"pomarańczowy","white":"biały","navajowhite":"piaskowy","royalblue":"królewski błękit","deeppink":"głęboki różowy","lime":"limonkowy","oldlace":"bladopomarańczowy","chartreuse":"żółtooliwkowy","darkcyan":"ciemnoniebieskozielony","yellow":"żółty","linen":"lniany","olive":"oliwkowy","gold":"złoty","lawngreen":"trawiasty","lightyellow":"jasnożółty","tan":"śniady","darkviolet":"ciemnofiołkowy","lightslategrey":"jasny mysi","grey":"szary","darkkhaki":"ciemny khaki","green":"zielony","deepskyblue":"intensywny błękit nieba","aqua":"morski","sienna":"siena","mintcream":"jasnomiętowy","rosybrown":"różowobrązowy","mediumslateblue":"średni gołębi","magenta":"amarantowy","lightseagreen":"jasna zieleń morska","cyan":"niebieskozielony","olivedrab":"oliwkowa zieleń","darkgoldenrod":"ciemne stare złoto","slateblue":"gołębi","mediumaquamarine":"średnia akwamaryna","lavender":"lawendowy","mediumseagreen":"średnia zieleń morska","maroon":"kasztanowy","darkslategray":"ciemny mysi","mediumturquoise":"średni turkusowy","ghostwhite":"bladobiały","darkblue":"ciemnoniebieski","mediumvioletred":"średni fiołkowowoczerwony","brown":"brązowy","lightgray":"jasnoszary","sandybrown":"piaskowy brąz","pink":"różowy","firebrick":"ceglasty","indigo":"indygo","snow":"śnieżny","darkorchid":"ciemna orchidea","turquoise":"turkusowy","chocolate":"czekoladowy","springgreen":"wiosenna zieleń","moccasin":"mokasynowy","navy":"granatowy","lemonchiffon":"cytrynowy","teal":"zielonomodry","floralwhite":"kwiatowa biel","cornflowerblue":"chabrowy","paleturquoise":"bladoturkusowy","purple":"fioletowy","gainsboro":"bladoszary","plum":"śliwkowy","red":"czerwony","blue":"niebieski","forestgreen":"leśna zieleń","darkgreen":"ciemnozielony","honeydew":"miodowy","darkseagreen":"ciemna zieleń morska","lightcoral":"jasnokoralowy","palevioletred":"blady fiołkowoczerwony","mediumpurple":"średni fioletowy","saddlebrown":"brąz skórzany","darkmagenta":"ciemnoamarantowy","thistle":"bladofioletowy","whitesmoke":"przydymiony biały","wheat":"pszeniczny","violet":"fiołkowy","lightskyblue":"jasny błękit nieba","goldenrod":"stare złoto","mediumblue":"ciemnochabrowy","skyblue":"błękit nieba","crimson":"karmazynowy","darksalmon":"ciemnołososiowy","darkred":"ciemnoczerwony","darkslategrey":"ciemny mysi","peru":"jasnobrązowy","lightgrey":"jasnoszary","lightgoldenrodyellow":"jasnożółte stare złoto","blanchedalmond":"migdałowy","aliceblue":"bladoniebieski","bisque":"biszkoptowy","slategray":"mysi","palegoldenrod":"blade stare złoto","darkorange":"ciemnopomarańczowy","aquamarine":"akwamaryna","lightgreen":"jasnozielony","burlywood":"kolor drewna","dodgerblue":"błękit Dodgers","darkgray":"ciemnoszary","lightcyan":"jasnoniebieskozielony","powderblue":"jasnobladobłękitny","blueviolet":"błękitnofiołkowy","orchid":"orchidea","dimgray":"przyciemniony szary","beige":"beżowy","fuchsia":"fuksjowy","lavenderblush":"lawendowocielisty","hotpink":"odblaskoworóżowy","steelblue":"stalowoniebieski","tomato":"pomidorowy","lightpink":"jasnoróżowy","limegreen":"zielony limonkowy","indianred":"kasztanowy","papayawhip":"papaja","lightslategray":"jasny mysi","gray":"szary","mediumorchid":"średnia orchidea","cornsilk":"kukurydziany","black":"czarny","seagreen":"zieleń morska","darkslateblue":"ciemny gołębi","khaki":"khaki","lightblue":"jasnoniebieski","palegreen":"bladozielony","azure":"lazurowy","peachpuff":"brzoskwiniowy","darkolivegreen":"ciemnooliwkowy","yellowgreen":"żółtozielony"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pl");dijit.nls.common.pl={"buttonOk":"OK","buttonCancel":"Anuluj","buttonSave":"Zapisz","itemClose":"Zamknij"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pl");dijit.form.nls.validate.pl={"rangeMessage":"Ta wartość jest spoza zakresu.","invalidMessage":"Wprowadzona wartość jest niepoprawna.","missingMessage":"Ta wartość jest wymagana."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pl");dijit.form.nls.ComboBox.pl={"previousMessage":"Poprzednie wybory","nextMessage":"Więcej wyborów"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pl");dojo.cldr.nls.number.pl={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index a35c5bb52dec06c4b85a08e67305f16398d66fc0..c78390e9beb1052e580793b47a7621c18f10d4e9 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_pt-br");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt_br");dojo.nls.colors.pt_br={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_br");dijit.nls.common.pt_br={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt_br");dijit.form.nls.validate.pt_br={"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt_br");dijit.form.nls.ComboBox.pt_br={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_br");dojo.cldr.nls.number.pt_br={"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("dojo.nls.tt-rss-layer_pt-br");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt_br");dojo.nls.colors.pt_br={"lightsteelblue":"azul aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul ardósia","mediumaquamarine":"água marinha médio","lavender":"lavanda","mediumseagreen":"verde marinho médio","maroon":"castanho","darkslategray":"cinza ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul talco","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_br");dijit.nls.common.pt_br={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt_br");dijit.form.nls.validate.pt_br={"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt_br");dijit.form.nls.ComboBox.pt_br={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_br");dojo.cldr.nls.number.pt_br={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index a54df6dbf5c92d92534577b1cf785d5d93e262e9..7e805cd006f9debb33b7555a732847bafd339499 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_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 esbatido","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 esbatido","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.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("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"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 2e2d70bbbea4e23cddb6839c84e7bc311c435b14..8cc90f5cc1e88ddd24f35c5ae3bdae2b162f2272 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt");dojo.nls.colors.pt={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt");dijit.nls.common.pt={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt");dijit.form.nls.validate.pt={"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt");dijit.form.nls.ComboBox.pt={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt");dojo.cldr.nls.number.pt={"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("dojo.nls.tt-rss-layer_pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt");dojo.nls.colors.pt={"lightsteelblue":"azul aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul ardósia","mediumaquamarine":"água marinha médio","lavender":"lavanda","mediumseagreen":"verde marinho médio","maroon":"castanho","darkslategray":"cinza ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul talco","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};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"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt");dijit.nls.common.pt={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt");dijit.form.nls.validate.pt={"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt");dijit.form.nls.ComboBox.pt={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt");dojo.cldr.nls.number.pt={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 19e4d548bd356878576ad3093759eb99d68d5004..293429a4ab4b60668923e64b5b6a623d995c534e 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_ru");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ru");dojo.nls.colors.ru={"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.ru");dijit.nls.loading.ru={"loadingState":"Загрузка...","errorState":"Извините, возникла ошибка"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ru");dijit.nls.common.ru={"buttonOk":"ОК","buttonCancel":"Отмена","buttonSave":"Сохранить","itemClose":"Закрыть"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ru");dijit.form.nls.validate.ru={"rangeMessage":"Это значение вне диапазона.","invalidMessage":"Указано недопустимое значение.","missingMessage":"Это обязательное значение."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ru");dijit.form.nls.ComboBox.ru={"previousMessage":"Предыдущие варианты","nextMessage":"Следующие варианты"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ru");dojo.cldr.nls.number.ru={"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":" "};
+dojo.provide("dojo.nls.tt-rss-layer_ru");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ru");dojo.nls.colors.ru={"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.ru");dijit.nls.loading.ru={"loadingState":"Загрузка...","errorState":"Извините, возникла ошибка"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ru");dijit.nls.common.ru={"buttonOk":"ОК","buttonCancel":"Отмена","buttonSave":"Сохранить","itemClose":"Закрыть"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ru");dijit.form.nls.validate.ru={"rangeMessage":"Это значение вне диапазона.","invalidMessage":"Указано недопустимое значение.","missingMessage":"Это обязательное значение."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ru");dijit.form.nls.ComboBox.ru={"previousMessage":"Предыдущие варианты","nextMessage":"Следующие варианты"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ru");dojo.cldr.nls.number.ru={"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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 7b3b6d1a5018512741abdaa6b582bd4348ac7f14..273f6203060a0cb7eebcac9ac0736ba5f451b33c 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_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.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("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"};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:]","decimalFormat-short":"000T","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"};
index f76c70841e4dcf2cab871ce5b270d58537ae00ff..b9697650b6c45d4343e38db20c69578da9075744 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_sl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sl");dojo.nls.colors.sl={"lightsteelblue":"svetlo kovinsko modra","orangered":"oranžno-rdeča","midnightblue":"polnočno modra","cadetblue":"kadetsko modra","seashell":"morska lupina","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":"pepelnato siva","orange":"oranžna","white":"bela","navajowhite":"navajo bela","royalblue":"kraljevsko modra","deeppink":"temno rožnata","lime":"limetasta","oldlace":"stara čipka","chartreuse":"chartreuse","darkcyan":"temno cijan","yellow":"rumena","linen":"lanena","olive":"olivna","gold":"zlata","lawngreen":"travniško zelena","lightyellow":"svetlo rumena","tan":"rumeno-rjava","darkviolet":"temno vijolična","lightslategrey":"svetlo skrilasto siva","grey":"siva","darkkhaki":"temno kaki","green":"zelena","deepskyblue":"temno nebeško modra","aqua":"akva","sienna":"sienna","mintcream":"metina krema","rosybrown":"rožnato rjava","mediumslateblue":"srednje skrilasto modra","magenta":"magenta","lightseagreen":"svetlo morsko zelena","cyan":"cijan","olivedrab":"umazano olivna","darkgoldenrod":"temna zlata rozga","slateblue":"skrilasto modra","mediumaquamarine":"srednji akvamarin","lavender":"sivka","mediumseagreen":"srednje morsko zelena","maroon":"kostanjeva","darkslategray":"temno skrilasto siva","mediumturquoise":"srednje turkizna","ghostwhite":"senčnato bela","darkblue":"temno modra","mediumvioletred":"srednje vijolično rdeča","brown":"rjava","lightgray":"svetlo siva","sandybrown":"peščeno rjava","pink":"rožnata","firebrick":"opečnata","indigo":"indigo","snow":"snežena","darkorchid":"temno orhidejasta","turquoise":"turkizna","chocolate":"čokoladna","springgreen":"pomladno zelena","moccasin":"mokasinasta","navy":"mornarska","lemonchiffon":"limonast šifon","teal":"modrozelena","floralwhite":"cvetno bela","cornflowerblue":"plavičasto modra","paleturquoise":"bledo turkizna","purple":"škrlatna","gainsboro":"gainsboro","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":"temna magenta","thistle":"osatna","whitesmoke":"megleno bela","wheat":"pšenična","violet":"vijolična","lightskyblue":"svetlo nebeško modra","goldenrod":"zlata rozga","mediumblue":"srednje modra","skyblue":"nebeško 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":"obledelo mandljeva","aliceblue":"alice blue modra","bisque":"porcelanasta","slategray":"skrilasto siva","palegoldenrod":"bleda zlata rozga","darkorange":"temno oranžna","aquamarine":"akvamarin","lightgreen":"svetlo zelena","burlywood":"peščeno sivo-rjava","dodgerblue":"dodgersko modra","darkgray":"temno siva","lightcyan":"svetlo cijan","powderblue":"kobaltovo modra","blueviolet":"modro vijolična","orchid":"orhidejasta","dimgray":"pepelnato siva","beige":"bež","fuchsia":"fuksija","lavenderblush":"rožnato sivka","hotpink":"kričeče rožnata","steelblue":"kovinsko modra","tomato":"paradižnikova","lightpink":"svetlo rožnata","limegreen":"apneno zelena","indianred":"indijansko rdeča","papayawhip":"papaja","lightslategray":"svetlo skrilasto siva","gray":"siva","mediumorchid":"srednje orhidejasta","cornsilk":"koruzna","black":"črna","seagreen":"morsko zelena","darkslateblue":"temno skrilasto modra","khaki":"kaki","lightblue":"svetlo modra","palegreen":"bledo zelena","azure":"azurno modra","peachpuff":"breskova","darkolivegreen":"temna 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.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 izven območja.","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."};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 izbire","nextMessage":"Dodatne izbire"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index b8ea0caf6f208c15fa2b3924de1d3e42e452ea15..d52287cf1158c483959fcf4df348de32904d3bc8 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_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.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("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"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 0189c3fb9f85aae165b4a1c55f03c77d92d85af8..95820b7bb3cf02a6c21a32ad14dbef316c857326 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.th");dijit.form.nls.ComboBox.th={"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"};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("dojo.nls.tt-rss-layer_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.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("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.th");dijit.form.nls.ComboBox.th={"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index 73e5d81260fe50f96e682c4897300228ef910446..163130bf4f78ecd22ae03234f1aac841770701c9 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_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.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("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"};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("dojo.nls.tt-rss-layer_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.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("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"};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:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
index c54e6ea35a7d9ee3a0843e670e98d29eab58ef0b..a4f0b85354c816a79920fb4fc2ad2d0844ce40e9 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_xx");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.xx");dojo.nls.colors.xx={"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.xx");dijit.nls.loading.xx={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.xx");dijit.nls.common.xx={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.xx");dijit.form.nls.validate.xx={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.xx");dijit.form.nls.ComboBox.xx={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.xx");dojo.cldr.nls.number.xx={"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:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
+dojo.provide("dojo.nls.tt-rss-layer_xx");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.xx");dojo.nls.colors.xx={"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.xx");dijit.nls.loading.xx={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.xx");dijit.nls.common.xx={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.xx");dijit.form.nls.validate.xx={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.xx");dijit.form.nls.ComboBox.xx={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.xx");dojo.cldr.nls.number.xx={"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
index 05243b8acc8334e2eff18dce5576c16b2caab81a..e16eeb4be070455a8be1a4774dbba8b6913cc258 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_zh-cn");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_cn");dojo.nls.colors.zh_cn={"lightsteelblue":"æµ\85é\92¢è\93\9dè\89²","orangered":"æ©\99红è\89²","midnightblue":"æ·±è\93\9dè\89²","cadetblue":"ç\81°è\93\9dè\89²","seashell":"æµ·è´\9dè\89²","slategrey":"ç\81°ç\9f³è\89²","coral":"ç\8f\8aç\91\9aè\89²","darkturquoise":"æ·±ç²\89è\93\9d","antiquewhite":"å\8f¤è\91£ç\99½","mediumspringgreen":"é\97´æ\98¥ç»¿è\89²","salmon":"æ©\99红","darkgrey":"æ·±ç\81°è\89²","ivory":"象ç\89\99è\89²","greenyellow":"绿é»\84è\89²","mistyrose":"æµ\85ç\8e«ç\91°è\89²","lightsalmon":"æ·¡æ©\99è\89²","silver":"é\93¶ç\99½è\89²","dimgrey":"æ\9a\97ç\81°è\89²","orange":"æ©\99è\89²","white":"ç\99½è\89²","navajowhite":"纳ç\93¦ç\99½","royalblue":"å\93\81è\93\9d","deeppink":"æ·±ç²\89红è\89²","lime":"æ·¡é»\84绿è\89²","oldlace":"è\80\81ç\99½è\89²","chartreuse":"é»\84绿è\89²","darkcyan":"æ·±é\9d\92绿","yellow":"é»\84è\89²","linen":"äº\9a麻è\89²","olive":"æ©\84æ¦\84绿","gold":"é\87\91é»\84è\89²","lawngreen":"è\8d\89绿è\89²","lightyellow":"æµ\85é»\84è\89²","tan":"æ£\95è¤\90è\89²","darkviolet":"深紫è\89²","lightslategrey":"æµ\85é\9d\92ç\81°","grey":"ç\81°è\89²","darkkhaki":"æ·±å\8d¡å\85¶è\89²","green":"绿è\89²","deepskyblue":"深天è\93\9dè\89²","aqua":"æµ\85绿è\89²","sienna":"èµ­è\89²","mintcream":"è\96\84è\8d·è\89²","rosybrown":"è¤\90ç\8e«ç\91°çº¢","mediumslateblue":"é\97´æ\9a\97è\93\9dè\89²","magenta":"æ´\8b红è\89²","lightseagreen":"æµ\85æµ·è\97»ç»¿","cyan":"é\9d\92è\93\9dè\89²","olivedrab":"è\8d\89绿è\89²","darkgoldenrod":"æ·±é\87\91é»\84","slateblue":"ç\9f³è\93\9dè\89²","mediumaquamarine":"é\97´ç»¿è\89²","lavender":"æ·¡ç´«è\89²","mediumseagreen":"é\97´æµ·è\93\9dè\89²","maroon":"æ \97è\89²","darkslategray":"æ·±é\9d\92ç\81°","mediumturquoise":"é\97´ç»¿å®\9dç\9f³è\89²","ghostwhite":"è\8b\8dç\99½","darkblue":"æ·±è\93\9d","mediumvioletred":"é\97´ç´«ç½\97å\85°è\89²","brown":"æ£\95è\89²","lightgray":"æµ\85ç\81°è\89²","sandybrown":"æ²\99è¤\90è\89²","pink":"ç²\89红è\89²","firebrick":"ç \96红","indigo":"é\9d\9bé\9d\92","snow":"é\9bªç\99½è\89²","darkorchid":"深紫è\89²","turquoise":"绿å®\9dç\9f³è\89²","chocolate":"å·§å\85\8bå\8a\9bè\89²","springgreen":"æ\98¥ç»¿è\89²","moccasin":"鹿ç\9a®è\89²","navy":"è\97\8fé\9d\92è\89²","lemonchiffon":"æ\9f æª¬ç»¸è\89²","teal":"水鸭è\89²","floralwhite":"è\8a±ç\99½è\89²","cornflowerblue":"æµ\85è\93\9dè\89²","paleturquoise":"è\8b\8d绿è\89²","purple":"ç´«è\89²","gainsboro":"æ·¡ç\81°è\89²","plum":"æ\9d¨æ\9d\8eè\89²","red":"红è\89²","blue":"è\93\9dè\89²","forestgreen":"森æ\9e\97绿","darkgreen":"深绿è\89²","honeydew":"è\9c\9cæ±\81è\89²","darkseagreen":"深海è\97»ç»¿","lightcoral":"æµ\85ç\8f\8aç\91\9aè\89²","palevioletred":"è\8b\8dç´«ç½\97å\85°è\89²","mediumpurple":"é\97´ç´«è\89²","saddlebrown":"é\87\8dè¤\90è\89²","darkmagenta":"æ·±æ´\8b红è\89²","thistle":"è\93\9fè\89²","whitesmoke":"ç\83\9fç\99½è\89²","wheat":"æµ\85é»\84è\89²","violet":"ç´«è\89²","lightskyblue":"æµ\85天è\93\9dè\89²","goldenrod":"é\87\91éº\92éº\9fè\89²","mediumblue":"é\97´è\93\9dè\89²","skyblue":"天è\93\9dè\89²","crimson":"绯红è\89²","darksalmon":"æ·±æ©\99红","darkred":"深红è\89²","darkslategrey":"æ·±é\9d\92ç\81°","peru":"ç§\98é²\81è\89²","lightgrey":"æµ\85ç\81°è\89²","lightgoldenrodyellow":"æµ\85é\87\91é»\84è\89²","blanchedalmond":"ç\99½æ\9d\8fè\89²","aliceblue":"ç\88±ä¸½ä¸\9dè\93\9d","bisque":"æ¡\94é»\84è\89²","slategray":"ç\81°ç\9f³è\89²","palegoldenrod":"æ·¡é\87\91é»\84è\89²","darkorange":"æ·±æ©\99è\89²","aquamarine":"碧绿è\89²","lightgreen":"æµ\85绿è\89²","burlywood":"å®\9eæ\9c¨è\89²","dodgerblue":"é\97ªè\93\9dè\89²","darkgray":"æ·±ç\81°è\89²","lightcyan":"æµ\85é\9d\92è\89²","powderblue":"é\93\81è\93\9d","blueviolet":"è\93\9dç´«è\89²","orchid":"ç´«è\89²","dimgray":"æ\9a\97ç\81°è\89²","beige":"ç±³è\89²","fuchsia":"紫红è\89²","lavenderblush":"淡紫红","hotpink":"æ·±ç²\89红","steelblue":"é\92¢è\93\9dè\89²","tomato":"西红æ\9f¿è\89²","lightpink":"æµ\85ç²\89红è\89²","limegreen":"æ©\99绿è\89²","indianred":"å\8d°åº¦çº¢","papayawhip":"æ\9c¨ç\93\9cè\89²","lightslategray":"æµ\85é\9d\92ç\81°","gray":"ç\81°è\89²","mediumorchid":"é\97´ç´«è\89²","cornsilk":"米绸è\89²","black":"é»\91è\89²","seagreen":"海绿è\89²","darkslateblue":"æ·±é\9d\92è\93\9d","khaki":"å\8d¡å\85¶è\89²","lightblue":"æ·¡è\93\9dè\89²","palegreen":"淡绿è\89²","azure":"天è\93\9dè\89²","peachpuff":"æ¡\83è\89²","darkolivegreen":"æ·±æ©\84æ¦\84绿","yellowgreen":"é»\84绿è\89²"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_cn");dijit.nls.loading.zh_cn={"loadingState":"æ­£å\9c¨å\8a è½½...","errorState":"对ä¸\8dèµ·ï¼\8cå\8f\91ç\94\9fäº\86é\94\99误"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_cn");dijit.nls.common.zh_cn={"buttonOk":"ç¡®å®\9a","buttonCancel":"å\8f\96æ¶\88","buttonSave":"ä¿\9då­\98","itemClose":"å\85³é\97­"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_cn");dijit.form.nls.validate.zh_cn={"rangeMessage":"æ­¤å\80¼è¶\85å\87ºè\8c\83å\9b´ã\80\82","invalidMessage":"è¾\93å\85¥ç\9a\84å\80¼æ\97 æ\95\88ã\80\82","missingMessage":"æ­¤å\80¼æ\98¯å¿\85é\9c\80å\80¼ã\80\82"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_cn");dijit.form.nls.ComboBox.zh_cn={"previousMessage":"å\85\88å\89\8dé\80\89项","nextMessage":"æ\9b´å¤\9aé\80\89项"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_cn");dojo.cldr.nls.number.zh_cn={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"â\88\9e","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"};
+dojo.provide("dojo.nls.tt-rss-layer_zh-cn");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_cn");dojo.nls.colors.zh_cn={"lightsteelblue":"æµ\85é\92¢è\93\9dè\89²","orangered":"æ¡\94红è\89²","midnightblue":"è\93\9dé»\91è\89²","cadetblue":"å\86\9bé\98\9fè\93\9d","seashell":"è´\9d壳ç\99½","slategrey":"ç\9f³æ\9d¿ç\81°","coral":"ç\8f\8aç\91\9a红","darkturquoise":"æ·±é\9d\92绿è\89²","antiquewhite":"å\8f¤è\91£ç\99½","mediumspringgreen":"æ·¡è\8d\89绿è\89²","salmon":"æ©\99红è\89²","darkgrey":"æ·±ç\81°è\89²","ivory":"象ç\89\99è\89²","greenyellow":"绿é»\84è\89²","mistyrose":"ç²\89红ç\8e«ç\91°","lightsalmon":"æµ\85æ©\99红è\89²","silver":"é\93¶ç\99½è\89²","dimgrey":"æ\9a\97ç\81°è\89²","orange":"æ©\99è\89²","white":"ç\99½è\89²","navajowhite":"å\8d°å\9c°å®\89é»\84","royalblue":"亮è\93\9dè\89²","deeppink":"æ·±ç²\89è\89²","lime":"é\85¸æ©\99è\89²","oldlace":"æ\97§å¸\83é»\84","chartreuse":"æµ\85é»\84绿è\89²","darkcyan":"æ·±é\9d\92è\89²","yellow":"é»\84è\89²","linen":"äº\9a麻å¸\83è\89²","olive":"æ©\84æ¦\84è\89²","gold":"é\87\91é»\84è\89²","lawngreen":"è\8d\89绿è\89²","lightyellow":"æµ\85é»\84è\89²","tan":"è\8c¶è\89²","darkviolet":"深紫ç½\97å\85°","lightslategrey":"æµ\85ç\9f³æ\9d¿ç\81°","grey":"ç\81°è\89²","darkkhaki":"æ·±è¤\90è\89²","green":"绿è\89²","deepskyblue":"深天è\93\9dè\89²","aqua":"水绿è\89²","sienna":"èµ­è\89²","mintcream":"è\96\84è\8d·ä¹³ç\99½","rosybrown":"ç\8e«ç\91°è¤\90è\89²","mediumslateblue":"æ·¡ç\81°è\93\9dè\89²","magenta":"æ´\8b红è\89²","lightseagreen":"æµ\85海绿è\89²","cyan":"é\9d\92è\89²","olivedrab":"æ\9a\97æ©\84æ¦\84è\89²","darkgoldenrod":"æ·±é\87\91é»\84è\89²","slateblue":"ç\9f³æ\9d¿è\93\9d","mediumaquamarine":"淡碧绿è\89²","lavender":"æ·¡ç´«è\89²","mediumseagreen":"淡海绿è\89²","maroon":"è¤\90紫红è\89²","darkslategray":"æ·±ç\9f³æ\9d¿ç\81°","mediumturquoise":"æ·¡é\9d\92绿è\89²","ghostwhite":"è\8b\8dç\99½","darkblue":"æ·±è\93\9dè\89²","mediumvioletred":"æ·¡ç´«ç½\97å\85°","brown":"è¤\90è\89²","lightgray":"æµ\85ç\81°è\89²","sandybrown":"æµ\85è¤\90è\89²","pink":"ç²\89红è\89²","firebrick":"ç \96红è\89²","indigo":"é\9d\9bè\93\9dè\89²","snow":"é\9bªç\99½","darkorchid":"æ\9a\97å\85°è\8a±ç´«","turquoise":"é\9d\92绿è\89²","chocolate":"å·§å\85\8bå\8a\9bè\89²","springgreen":"æµ\85è\8d\89绿è\89²","moccasin":"鹿ç\9a®é»\84","navy":"è\97\8fé\9d\92è\89²","lemonchiffon":"æ\9f æª¬è\89²","teal":"é\9d\92è\89²","floralwhite":"è\8a±ç\99½","cornflowerblue":"è\97\8fè\93\9dè\89²","paleturquoise":"æ·¡é\9d\92绿è\89²","purple":"ç´«è\89²","gainsboro":"亮ç\81°è\89²","plum":"æ¢\85红è\89²","red":"红è\89²","blue":"è\93\9dè\89²","forestgreen":"森æ\9e\97绿","darkgreen":"深绿è\89²","honeydew":"è\9c\9cè\89²","darkseagreen":"深海绿è\89²","lightcoral":"æµ\85ç\8f\8aç\91\9a红","palevioletred":"æµ\85ç´«ç½\97å\85°","mediumpurple":"æ·¡ç´«è\89²","saddlebrown":"é\9e\8då\85·è¤\90è\89²","darkmagenta":"æ·±æ´\8b红è\89²","thistle":"è\93\9fè\89²","whitesmoke":"ç\83\9fç\99½è\89²","wheat":"æ·¡é»\84è\89²","violet":"ç´«ç½\97å\85°è\89²","lightskyblue":"æµ\85天è\93\9dè\89²","goldenrod":"é²\9cé»\84","mediumblue":"æ·¡è\93\9dè\89²","skyblue":"天è\93\9dè\89²","crimson":"绯红è\89²","darksalmon":"æ·±æ©\99红","darkred":"深红è\89²","darkslategrey":"æ·±ç\9f³æ\9d¿ç\81°","peru":"ç§\98é²\81æ£\95","lightgrey":"æµ\85ç\81°è\89²","lightgoldenrodyellow":"æµ\85é\87\91é»\84è\89²","blanchedalmond":"æ\9d\8fä»\81ç\99½","aliceblue":"è\89¾è\8e\89æ\96¯è\93\9d","bisque":"ä¹³é»\84è\89²","slategray":"ç\9f³æ\9d¿ç\81°","palegoldenrod":"æµ\85é\87\91é»\84è\89²","darkorange":"æ·±æ©\99è\89²","aquamarine":"碧绿è\89²","lightgreen":"æµ\85绿è\89²","burlywood":"å\8e\9fæ\9c¨è\89²","dodgerblue":"å®\9dè\93\9d","darkgray":"æ·±ç\81°è\89²","lightcyan":"æµ\85é\9d\92è\89²","powderblue":"ç²\89è\93\9dè\89²","blueviolet":"è\93\9dç´«è\89²","orchid":"å\85°è\8a±ç´«","dimgray":"æ\9a\97ç\81°è\89²","beige":"ç±³è\89²","fuchsia":"紫红è\89²","lavenderblush":"淡紫红è\89²","hotpink":"æ\9a\97ç²\89","steelblue":"é\92¢è\93\9dè\89²","tomato":"ç\95ªè\8c\84è\89²","lightpink":"æµ\85ç²\89è\89²","limegreen":"æ\9a\97é»\84绿è\89²","indianred":"å\8d°åº¦çº¢","papayawhip":"ç²\89æ\9c¨ç\93\9cæ©\99","lightslategray":"æµ\85ç\9f³æ\9d¿ç\81°","gray":"ç\81°è\89²","mediumorchid":"æ·¡å\85°è\8a±ç´«","cornsilk":"ç\8e\89ç±³é»\84","black":"é»\91è\89²","seagreen":"海绿è\89²","darkslateblue":"æ·±ç\9f³æ\9d¿è\93\9d","khaki":"é»\84è¤\90è\89²","lightblue":"æ·¡è\93\9dè\89²","palegreen":"淡绿è\89²","azure":"æµ\85天è\93\9d","peachpuff":"ç²\89æ¡\83红","darkolivegreen":"æ·±æ©\84æ¦\84绿è\89²","yellowgreen":"é»\84绿è\89²"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_cn");dijit.nls.loading.zh_cn={"loadingState":"æ­£å\9c¨å\8a è½½...","errorState":"对ä¸\8dèµ·ï¼\8cå\8f\91ç\94\9fäº\86é\94\99误"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_cn");dijit.nls.common.zh_cn={"buttonOk":"ç¡®å®\9a","buttonCancel":"å\8f\96æ¶\88","buttonSave":"ä¿\9då­\98","itemClose":"å\85³é\97­"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_cn");dijit.form.nls.validate.zh_cn={"rangeMessage":"æ­¤å\80¼è¶\85å\87ºè\8c\83å\9b´ã\80\82","invalidMessage":"è¾\93å\85¥ç\9a\84å\80¼æ\97 æ\95\88ã\80\82","missingMessage":"æ­¤å\80¼æ\98¯å¿\85é\9c\80å\80¼ã\80\82"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_cn");dijit.form.nls.ComboBox.zh_cn={"previousMessage":"å\85\88å\89\8dé\80\89项","nextMessage":"æ\9b´å¤\9aé\80\89项"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_cn");dojo.cldr.nls.number.zh_cn={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"â\88\9e","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
index 4925db23c0c3c2fcc250d98d28140308235eb8c8..9ac816dd9278f81de97172e78ac12f1f1485575e 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_zh-tw");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_tw");dojo.nls.colors.zh_tw={"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.zh_tw");dijit.nls.loading.zh_tw={"loadingState":"載入中...","errorState":"抱歉,發生錯誤"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_tw");dijit.nls.common.zh_tw={"buttonOk":"確定","buttonCancel":"取消","buttonSave":"儲存","itemClose":"關閉"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_tw");dijit.form.nls.validate.zh_tw={"rangeMessage":"此值超出範圍。","invalidMessage":"輸入的值無效。","missingMessage":"必須提供此值。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_tw");dijit.form.nls.ComboBox.zh_tw={"previousMessage":"前一個選擇項","nextMessage":"其他選擇項"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_tw");dojo.cldr.nls.number.zh_tw={"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"};
+dojo.provide("dojo.nls.tt-rss-layer_zh-tw");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_tw");dojo.nls.colors.zh_tw={"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.zh_tw");dijit.nls.loading.zh_tw={"loadingState":"載入中...","errorState":"抱歉,發生錯誤"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_tw");dijit.nls.common.zh_tw={"buttonOk":"確定","buttonCancel":"取消","buttonSave":"儲存","itemClose":"關閉"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_tw");dijit.form.nls.validate.zh_tw={"rangeMessage":"此值超出範圍。","invalidMessage":"輸入的值無效。","missingMessage":"必須提供此值。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_tw");dijit.form.nls.ComboBox.zh_tw={"previousMessage":"前一個選擇項","nextMessage":"其他選擇項"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_tw");dojo.cldr.nls.number.zh_tw={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
index ed7ddffdf46f03933fd192dc086d38e66d2314ef..0b391dbbb1d2b801ed5b6b97ac2fdbf3b247eca5 100644 (file)
@@ -1 +1 @@
-dojo.provide("dojo.nls.tt-rss-layer_zh");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh");dojo.nls.colors.zh={"lightsteelblue":"æµ\85é\92¢è\93\9dè\89²","orangered":"æ©\99红è\89²","midnightblue":"æ·±è\93\9dè\89²","cadetblue":"ç\81°è\93\9dè\89²","seashell":"æµ·è´\9dè\89²","slategrey":"ç\81°ç\9f³è\89²","coral":"ç\8f\8aç\91\9aè\89²","darkturquoise":"æ·±ç²\89è\93\9d","antiquewhite":"å\8f¤è\91£ç\99½","mediumspringgreen":"é\97´æ\98¥ç»¿è\89²","salmon":"æ©\99红","darkgrey":"æ·±ç\81°è\89²","ivory":"象ç\89\99è\89²","greenyellow":"绿é»\84è\89²","mistyrose":"æµ\85ç\8e«ç\91°è\89²","lightsalmon":"æ·¡æ©\99è\89²","silver":"é\93¶ç\99½è\89²","dimgrey":"æ\9a\97ç\81°è\89²","orange":"æ©\99è\89²","white":"ç\99½è\89²","navajowhite":"纳ç\93¦ç\99½","royalblue":"å\93\81è\93\9d","deeppink":"æ·±ç²\89红è\89²","lime":"æ·¡é»\84绿è\89²","oldlace":"è\80\81ç\99½è\89²","chartreuse":"é»\84绿è\89²","darkcyan":"æ·±é\9d\92绿","yellow":"é»\84è\89²","linen":"äº\9a麻è\89²","olive":"æ©\84æ¦\84绿","gold":"é\87\91é»\84è\89²","lawngreen":"è\8d\89绿è\89²","lightyellow":"æµ\85é»\84è\89²","tan":"æ£\95è¤\90è\89²","darkviolet":"深紫è\89²","lightslategrey":"æµ\85é\9d\92ç\81°","grey":"ç\81°è\89²","darkkhaki":"æ·±å\8d¡å\85¶è\89²","green":"绿è\89²","deepskyblue":"深天è\93\9dè\89²","aqua":"æµ\85绿è\89²","sienna":"èµ­è\89²","mintcream":"è\96\84è\8d·è\89²","rosybrown":"è¤\90ç\8e«ç\91°çº¢","mediumslateblue":"é\97´æ\9a\97è\93\9dè\89²","magenta":"æ´\8b红è\89²","lightseagreen":"æµ\85æµ·è\97»ç»¿","cyan":"é\9d\92è\93\9dè\89²","olivedrab":"è\8d\89绿è\89²","darkgoldenrod":"æ·±é\87\91é»\84","slateblue":"ç\9f³è\93\9dè\89²","mediumaquamarine":"é\97´ç»¿è\89²","lavender":"æ·¡ç´«è\89²","mediumseagreen":"é\97´æµ·è\93\9dè\89²","maroon":"æ \97è\89²","darkslategray":"æ·±é\9d\92ç\81°","mediumturquoise":"é\97´ç»¿å®\9dç\9f³è\89²","ghostwhite":"è\8b\8dç\99½","darkblue":"æ·±è\93\9d","mediumvioletred":"é\97´ç´«ç½\97å\85°è\89²","brown":"æ£\95è\89²","lightgray":"æµ\85ç\81°è\89²","sandybrown":"æ²\99è¤\90è\89²","pink":"ç²\89红è\89²","firebrick":"ç \96红","indigo":"é\9d\9bé\9d\92","snow":"é\9bªç\99½è\89²","darkorchid":"深紫è\89²","turquoise":"绿å®\9dç\9f³è\89²","chocolate":"å·§å\85\8bå\8a\9bè\89²","springgreen":"æ\98¥ç»¿è\89²","moccasin":"鹿ç\9a®è\89²","navy":"è\97\8fé\9d\92è\89²","lemonchiffon":"æ\9f æª¬ç»¸è\89²","teal":"水鸭è\89²","floralwhite":"è\8a±ç\99½è\89²","cornflowerblue":"æµ\85è\93\9dè\89²","paleturquoise":"è\8b\8d绿è\89²","purple":"ç´«è\89²","gainsboro":"æ·¡ç\81°è\89²","plum":"æ\9d¨æ\9d\8eè\89²","red":"红è\89²","blue":"è\93\9dè\89²","forestgreen":"森æ\9e\97绿","darkgreen":"深绿è\89²","honeydew":"è\9c\9cæ±\81è\89²","darkseagreen":"深海è\97»ç»¿","lightcoral":"æµ\85ç\8f\8aç\91\9aè\89²","palevioletred":"è\8b\8dç´«ç½\97å\85°è\89²","mediumpurple":"é\97´ç´«è\89²","saddlebrown":"é\87\8dè¤\90è\89²","darkmagenta":"æ·±æ´\8b红è\89²","thistle":"è\93\9fè\89²","whitesmoke":"ç\83\9fç\99½è\89²","wheat":"æµ\85é»\84è\89²","violet":"ç´«è\89²","lightskyblue":"æµ\85天è\93\9dè\89²","goldenrod":"é\87\91éº\92éº\9fè\89²","mediumblue":"é\97´è\93\9dè\89²","skyblue":"天è\93\9dè\89²","crimson":"绯红è\89²","darksalmon":"æ·±æ©\99红","darkred":"深红è\89²","darkslategrey":"æ·±é\9d\92ç\81°","peru":"ç§\98é²\81è\89²","lightgrey":"æµ\85ç\81°è\89²","lightgoldenrodyellow":"æµ\85é\87\91é»\84è\89²","blanchedalmond":"ç\99½æ\9d\8fè\89²","aliceblue":"ç\88±ä¸½ä¸\9dè\93\9d","bisque":"æ¡\94é»\84è\89²","slategray":"ç\81°ç\9f³è\89²","palegoldenrod":"æ·¡é\87\91é»\84è\89²","darkorange":"æ·±æ©\99è\89²","aquamarine":"碧绿è\89²","lightgreen":"æµ\85绿è\89²","burlywood":"å®\9eæ\9c¨è\89²","dodgerblue":"é\97ªè\93\9dè\89²","darkgray":"æ·±ç\81°è\89²","lightcyan":"æµ\85é\9d\92è\89²","powderblue":"é\93\81è\93\9d","blueviolet":"è\93\9dç´«è\89²","orchid":"ç´«è\89²","dimgray":"æ\9a\97ç\81°è\89²","beige":"ç±³è\89²","fuchsia":"紫红è\89²","lavenderblush":"淡紫红","hotpink":"æ·±ç²\89红","steelblue":"é\92¢è\93\9dè\89²","tomato":"西红æ\9f¿è\89²","lightpink":"æµ\85ç²\89红è\89²","limegreen":"æ©\99绿è\89²","indianred":"å\8d°åº¦çº¢","papayawhip":"æ\9c¨ç\93\9cè\89²","lightslategray":"æµ\85é\9d\92ç\81°","gray":"ç\81°è\89²","mediumorchid":"é\97´ç´«è\89²","cornsilk":"米绸è\89²","black":"é»\91è\89²","seagreen":"海绿è\89²","darkslateblue":"æ·±é\9d\92è\93\9d","khaki":"å\8d¡å\85¶è\89²","lightblue":"æ·¡è\93\9dè\89²","palegreen":"淡绿è\89²","azure":"天è\93\9dè\89²","peachpuff":"æ¡\83è\89²","darkolivegreen":"æ·±æ©\84æ¦\84绿","yellowgreen":"é»\84绿è\89²"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh");dijit.nls.loading.zh={"loadingState":"æ­£å\9c¨å\8a è½½...","errorState":"对ä¸\8dèµ·ï¼\8cå\8f\91ç\94\9fäº\86é\94\99误"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh");dijit.nls.common.zh={"buttonOk":"ç¡®å®\9a","buttonCancel":"å\8f\96æ¶\88","buttonSave":"ä¿\9då­\98","itemClose":"å\85³é\97­"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh");dijit.form.nls.validate.zh={"rangeMessage":"æ­¤å\80¼è¶\85å\87ºè\8c\83å\9b´ã\80\82","invalidMessage":"è¾\93å\85¥ç\9a\84å\80¼æ\97 æ\95\88ã\80\82","missingMessage":"æ­¤å\80¼æ\98¯å¿\85é\9c\80å\80¼ã\80\82"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh");dijit.form.nls.ComboBox.zh={"previousMessage":"å\85\88å\89\8dé\80\89项","nextMessage":"æ\9b´å¤\9aé\80\89项"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh");dojo.cldr.nls.number.zh={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"â\88\9e","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"};
+dojo.provide("dojo.nls.tt-rss-layer_zh");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh");dojo.nls.colors.zh={"lightsteelblue":"æµ\85é\92¢è\93\9dè\89²","orangered":"æ¡\94红è\89²","midnightblue":"è\93\9dé»\91è\89²","cadetblue":"å\86\9bé\98\9fè\93\9d","seashell":"è´\9d壳ç\99½","slategrey":"ç\9f³æ\9d¿ç\81°","coral":"ç\8f\8aç\91\9a红","darkturquoise":"æ·±é\9d\92绿è\89²","antiquewhite":"å\8f¤è\91£ç\99½","mediumspringgreen":"æ·¡è\8d\89绿è\89²","salmon":"æ©\99红è\89²","darkgrey":"æ·±ç\81°è\89²","ivory":"象ç\89\99è\89²","greenyellow":"绿é»\84è\89²","mistyrose":"ç²\89红ç\8e«ç\91°","lightsalmon":"æµ\85æ©\99红è\89²","silver":"é\93¶ç\99½è\89²","dimgrey":"æ\9a\97ç\81°è\89²","orange":"æ©\99è\89²","white":"ç\99½è\89²","navajowhite":"å\8d°å\9c°å®\89é»\84","royalblue":"亮è\93\9dè\89²","deeppink":"æ·±ç²\89è\89²","lime":"é\85¸æ©\99è\89²","oldlace":"æ\97§å¸\83é»\84","chartreuse":"æµ\85é»\84绿è\89²","darkcyan":"æ·±é\9d\92è\89²","yellow":"é»\84è\89²","linen":"äº\9a麻å¸\83è\89²","olive":"æ©\84æ¦\84è\89²","gold":"é\87\91é»\84è\89²","lawngreen":"è\8d\89绿è\89²","lightyellow":"æµ\85é»\84è\89²","tan":"è\8c¶è\89²","darkviolet":"深紫ç½\97å\85°","lightslategrey":"æµ\85ç\9f³æ\9d¿ç\81°","grey":"ç\81°è\89²","darkkhaki":"æ·±è¤\90è\89²","green":"绿è\89²","deepskyblue":"深天è\93\9dè\89²","aqua":"水绿è\89²","sienna":"èµ­è\89²","mintcream":"è\96\84è\8d·ä¹³ç\99½","rosybrown":"ç\8e«ç\91°è¤\90è\89²","mediumslateblue":"æ·¡ç\81°è\93\9dè\89²","magenta":"æ´\8b红è\89²","lightseagreen":"æµ\85海绿è\89²","cyan":"é\9d\92è\89²","olivedrab":"æ\9a\97æ©\84æ¦\84è\89²","darkgoldenrod":"æ·±é\87\91é»\84è\89²","slateblue":"ç\9f³æ\9d¿è\93\9d","mediumaquamarine":"淡碧绿è\89²","lavender":"æ·¡ç´«è\89²","mediumseagreen":"淡海绿è\89²","maroon":"è¤\90紫红è\89²","darkslategray":"æ·±ç\9f³æ\9d¿ç\81°","mediumturquoise":"æ·¡é\9d\92绿è\89²","ghostwhite":"è\8b\8dç\99½","darkblue":"æ·±è\93\9dè\89²","mediumvioletred":"æ·¡ç´«ç½\97å\85°","brown":"è¤\90è\89²","lightgray":"æµ\85ç\81°è\89²","sandybrown":"æµ\85è¤\90è\89²","pink":"ç²\89红è\89²","firebrick":"ç \96红è\89²","indigo":"é\9d\9bè\93\9dè\89²","snow":"é\9bªç\99½","darkorchid":"æ\9a\97å\85°è\8a±ç´«","turquoise":"é\9d\92绿è\89²","chocolate":"å·§å\85\8bå\8a\9bè\89²","springgreen":"æµ\85è\8d\89绿è\89²","moccasin":"鹿ç\9a®é»\84","navy":"è\97\8fé\9d\92è\89²","lemonchiffon":"æ\9f æª¬è\89²","teal":"é\9d\92è\89²","floralwhite":"è\8a±ç\99½","cornflowerblue":"è\97\8fè\93\9dè\89²","paleturquoise":"æ·¡é\9d\92绿è\89²","purple":"ç´«è\89²","gainsboro":"亮ç\81°è\89²","plum":"æ¢\85红è\89²","red":"红è\89²","blue":"è\93\9dè\89²","forestgreen":"森æ\9e\97绿","darkgreen":"深绿è\89²","honeydew":"è\9c\9cè\89²","darkseagreen":"深海绿è\89²","lightcoral":"æµ\85ç\8f\8aç\91\9a红","palevioletred":"æµ\85ç´«ç½\97å\85°","mediumpurple":"æ·¡ç´«è\89²","saddlebrown":"é\9e\8då\85·è¤\90è\89²","darkmagenta":"æ·±æ´\8b红è\89²","thistle":"è\93\9fè\89²","whitesmoke":"ç\83\9fç\99½è\89²","wheat":"æ·¡é»\84è\89²","violet":"ç´«ç½\97å\85°è\89²","lightskyblue":"æµ\85天è\93\9dè\89²","goldenrod":"é²\9cé»\84","mediumblue":"æ·¡è\93\9dè\89²","skyblue":"天è\93\9dè\89²","crimson":"绯红è\89²","darksalmon":"æ·±æ©\99红","darkred":"深红è\89²","darkslategrey":"æ·±ç\9f³æ\9d¿ç\81°","peru":"ç§\98é²\81æ£\95","lightgrey":"æµ\85ç\81°è\89²","lightgoldenrodyellow":"æµ\85é\87\91é»\84è\89²","blanchedalmond":"æ\9d\8fä»\81ç\99½","aliceblue":"è\89¾è\8e\89æ\96¯è\93\9d","bisque":"ä¹³é»\84è\89²","slategray":"ç\9f³æ\9d¿ç\81°","palegoldenrod":"æµ\85é\87\91é»\84è\89²","darkorange":"æ·±æ©\99è\89²","aquamarine":"碧绿è\89²","lightgreen":"æµ\85绿è\89²","burlywood":"å\8e\9fæ\9c¨è\89²","dodgerblue":"å®\9dè\93\9d","darkgray":"æ·±ç\81°è\89²","lightcyan":"æµ\85é\9d\92è\89²","powderblue":"ç²\89è\93\9dè\89²","blueviolet":"è\93\9dç´«è\89²","orchid":"å\85°è\8a±ç´«","dimgray":"æ\9a\97ç\81°è\89²","beige":"ç±³è\89²","fuchsia":"紫红è\89²","lavenderblush":"淡紫红è\89²","hotpink":"æ\9a\97ç²\89","steelblue":"é\92¢è\93\9dè\89²","tomato":"ç\95ªè\8c\84è\89²","lightpink":"æµ\85ç²\89è\89²","limegreen":"æ\9a\97é»\84绿è\89²","indianred":"å\8d°åº¦çº¢","papayawhip":"ç²\89æ\9c¨ç\93\9cæ©\99","lightslategray":"æµ\85ç\9f³æ\9d¿ç\81°","gray":"ç\81°è\89²","mediumorchid":"æ·¡å\85°è\8a±ç´«","cornsilk":"ç\8e\89ç±³é»\84","black":"é»\91è\89²","seagreen":"海绿è\89²","darkslateblue":"æ·±ç\9f³æ\9d¿è\93\9d","khaki":"é»\84è¤\90è\89²","lightblue":"æ·¡è\93\9dè\89²","palegreen":"淡绿è\89²","azure":"æµ\85天è\93\9d","peachpuff":"ç²\89æ¡\83红","darkolivegreen":"æ·±æ©\84æ¦\84绿è\89²","yellowgreen":"é»\84绿è\89²"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh");dijit.nls.loading.zh={"loadingState":"æ­£å\9c¨å\8a è½½...","errorState":"对ä¸\8dèµ·ï¼\8cå\8f\91ç\94\9fäº\86é\94\99误"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh");dijit.nls.common.zh={"buttonOk":"ç¡®å®\9a","buttonCancel":"å\8f\96æ¶\88","buttonSave":"ä¿\9då­\98","itemClose":"å\85³é\97­"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh");dijit.form.nls.validate.zh={"rangeMessage":"æ­¤å\80¼è¶\85å\87ºè\8c\83å\9b´ã\80\82","invalidMessage":"è¾\93å\85¥ç\9a\84å\80¼æ\97 æ\95\88ã\80\82","missingMessage":"æ­¤å\80¼æ\98¯å¿\85é\9c\80å\80¼ã\80\82"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh");dijit.form.nls.ComboBox.zh={"previousMessage":"å\85\88å\89\8dé\80\89项","nextMessage":"æ\9b´å¤\9aé\80\89项"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh");dojo.cldr.nls.number.zh={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"â\88\9e","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
index 35368f3943574fae556a5fdc4db36ee165a24e56..0ffb2d8f9894ad834f528ef891620052ef8057e4 100644 (file)
@@ -1 +1 @@
-({"lightsteelblue":"æµ\85é\92¢è\93\9dè\89²","orangered":"æ©\99红è\89²","midnightblue":"æ·±è\93\9dè\89²","cadetblue":"ç\81°è\93\9dè\89²","seashell":"æµ·è´\9dè\89²","slategrey":"ç\81°ç\9f³è\89²","coral":"ç\8f\8aç\91\9aè\89²","darkturquoise":"æ·±ç²\89è\93\9d","antiquewhite":"å\8f¤è\91£ç\99½","mediumspringgreen":"é\97´æ\98¥ç»¿è\89²","salmon":"æ©\99红","darkgrey":"æ·±ç\81°è\89²","ivory":"象ç\89\99è\89²","greenyellow":"绿é»\84è\89²","mistyrose":"æµ\85ç\8e«ç\91°è\89²","lightsalmon":"æ·¡æ©\99è\89²","silver":"é\93¶ç\99½è\89²","dimgrey":"æ\9a\97ç\81°è\89²","orange":"æ©\99è\89²","white":"ç\99½è\89²","navajowhite":"纳ç\93¦ç\99½","royalblue":"å\93\81è\93\9d","deeppink":"æ·±ç²\89红è\89²","lime":"æ·¡é»\84绿è\89²","oldlace":"è\80\81ç\99½è\89²","chartreuse":"é»\84绿è\89²","darkcyan":"æ·±é\9d\92绿","yellow":"é»\84è\89²","linen":"äº\9a麻è\89²","olive":"æ©\84æ¦\84绿","gold":"é\87\91é»\84è\89²","lawngreen":"è\8d\89绿è\89²","lightyellow":"æµ\85é»\84è\89²","tan":"æ£\95è¤\90è\89²","darkviolet":"深紫è\89²","lightslategrey":"æµ\85é\9d\92ç\81°","grey":"ç\81°è\89²","darkkhaki":"æ·±å\8d¡å\85¶è\89²","green":"绿è\89²","deepskyblue":"深天è\93\9dè\89²","aqua":"æµ\85绿è\89²","sienna":"èµ­è\89²","mintcream":"è\96\84è\8d·è\89²","rosybrown":"è¤\90ç\8e«ç\91°çº¢","mediumslateblue":"é\97´æ\9a\97è\93\9dè\89²","magenta":"æ´\8b红è\89²","lightseagreen":"æµ\85æµ·è\97»ç»¿","cyan":"é\9d\92è\93\9dè\89²","olivedrab":"è\8d\89绿è\89²","darkgoldenrod":"æ·±é\87\91é»\84","slateblue":"ç\9f³è\93\9dè\89²","mediumaquamarine":"é\97´ç»¿è\89²","lavender":"æ·¡ç´«è\89²","mediumseagreen":"é\97´æµ·è\93\9dè\89²","maroon":"æ \97è\89²","darkslategray":"æ·±é\9d\92ç\81°","mediumturquoise":"é\97´ç»¿å®\9dç\9f³è\89²","ghostwhite":"è\8b\8dç\99½","darkblue":"æ·±è\93\9d","mediumvioletred":"é\97´ç´«ç½\97å\85°è\89²","brown":"æ£\95è\89²","lightgray":"æµ\85ç\81°è\89²","sandybrown":"æ²\99è¤\90è\89²","pink":"ç²\89红è\89²","firebrick":"ç \96红","indigo":"é\9d\9bé\9d\92","snow":"é\9bªç\99½è\89²","darkorchid":"深紫è\89²","turquoise":"绿å®\9dç\9f³è\89²","chocolate":"å·§å\85\8bå\8a\9bè\89²","springgreen":"æ\98¥ç»¿è\89²","moccasin":"鹿ç\9a®è\89²","navy":"è\97\8fé\9d\92è\89²","lemonchiffon":"æ\9f æª¬ç»¸è\89²","teal":"水鸭è\89²","floralwhite":"è\8a±ç\99½è\89²","cornflowerblue":"æµ\85è\93\9dè\89²","paleturquoise":"è\8b\8d绿è\89²","purple":"ç´«è\89²","gainsboro":"æ·¡ç\81°è\89²","plum":"æ\9d¨æ\9d\8eè\89²","red":"红è\89²","blue":"è\93\9dè\89²","forestgreen":"森æ\9e\97绿","darkgreen":"深绿è\89²","honeydew":"è\9c\9cæ±\81è\89²","darkseagreen":"深海è\97»ç»¿","lightcoral":"æµ\85ç\8f\8aç\91\9aè\89²","palevioletred":"è\8b\8dç´«ç½\97å\85°è\89²","mediumpurple":"é\97´ç´«è\89²","saddlebrown":"é\87\8dè¤\90è\89²","darkmagenta":"æ·±æ´\8b红è\89²","thistle":"è\93\9fè\89²","whitesmoke":"ç\83\9fç\99½è\89²","wheat":"æµ\85é»\84è\89²","violet":"ç´«è\89²","lightskyblue":"æµ\85天è\93\9dè\89²","goldenrod":"é\87\91éº\92éº\9fè\89²","mediumblue":"é\97´è\93\9dè\89²","skyblue":"天è\93\9dè\89²","crimson":"绯红è\89²","darksalmon":"æ·±æ©\99红","darkred":"深红è\89²","darkslategrey":"æ·±é\9d\92ç\81°","peru":"ç§\98é²\81è\89²","lightgrey":"æµ\85ç\81°è\89²","lightgoldenrodyellow":"æµ\85é\87\91é»\84è\89²","blanchedalmond":"ç\99½æ\9d\8fè\89²","aliceblue":"ç\88±ä¸½ä¸\9dè\93\9d","bisque":"æ¡\94é»\84è\89²","slategray":"ç\81°ç\9f³è\89²","palegoldenrod":"æ·¡é\87\91é»\84è\89²","darkorange":"æ·±æ©\99è\89²","aquamarine":"碧绿è\89²","lightgreen":"æµ\85绿è\89²","burlywood":"å®\9eæ\9c¨è\89²","dodgerblue":"é\97ªè\93\9dè\89²","darkgray":"æ·±ç\81°è\89²","lightcyan":"æµ\85é\9d\92è\89²","powderblue":"é\93\81è\93\9d","blueviolet":"è\93\9dç´«è\89²","orchid":"ç´«è\89²","dimgray":"æ\9a\97ç\81°è\89²","beige":"ç±³è\89²","fuchsia":"紫红è\89²","lavenderblush":"淡紫红","hotpink":"æ·±ç²\89红","steelblue":"é\92¢è\93\9dè\89²","tomato":"西红æ\9f¿è\89²","lightpink":"æµ\85ç²\89红è\89²","limegreen":"æ©\99绿è\89²","indianred":"å\8d°åº¦çº¢","papayawhip":"æ\9c¨ç\93\9cè\89²","lightslategray":"æµ\85é\9d\92ç\81°","gray":"ç\81°è\89²","mediumorchid":"é\97´ç´«è\89²","cornsilk":"米绸è\89²","black":"é»\91è\89²","seagreen":"海绿è\89²","darkslateblue":"æ·±é\9d\92è\93\9d","khaki":"å\8d¡å\85¶è\89²","lightblue":"æ·¡è\93\9dè\89²","palegreen":"淡绿è\89²","azure":"天è\93\9dè\89²","peachpuff":"æ¡\83è\89²","darkolivegreen":"æ·±æ©\84æ¦\84绿","yellowgreen":"黄绿色"})
\ No newline at end of file
+({"lightsteelblue":"æµ\85é\92¢è\93\9dè\89²","orangered":"æ¡\94红è\89²","midnightblue":"è\93\9dé»\91è\89²","cadetblue":"å\86\9bé\98\9fè\93\9d","seashell":"è´\9d壳ç\99½","slategrey":"ç\9f³æ\9d¿ç\81°","coral":"ç\8f\8aç\91\9a红","darkturquoise":"æ·±é\9d\92绿è\89²","antiquewhite":"å\8f¤è\91£ç\99½","mediumspringgreen":"æ·¡è\8d\89绿è\89²","salmon":"æ©\99红è\89²","darkgrey":"æ·±ç\81°è\89²","ivory":"象ç\89\99è\89²","greenyellow":"绿é»\84è\89²","mistyrose":"ç²\89红ç\8e«ç\91°","lightsalmon":"æµ\85æ©\99红è\89²","silver":"é\93¶ç\99½è\89²","dimgrey":"æ\9a\97ç\81°è\89²","orange":"æ©\99è\89²","white":"ç\99½è\89²","navajowhite":"å\8d°å\9c°å®\89é»\84","royalblue":"亮è\93\9dè\89²","deeppink":"æ·±ç²\89è\89²","lime":"é\85¸æ©\99è\89²","oldlace":"æ\97§å¸\83é»\84","chartreuse":"æµ\85é»\84绿è\89²","darkcyan":"æ·±é\9d\92è\89²","yellow":"é»\84è\89²","linen":"äº\9a麻å¸\83è\89²","olive":"æ©\84æ¦\84è\89²","gold":"é\87\91é»\84è\89²","lawngreen":"è\8d\89绿è\89²","lightyellow":"æµ\85é»\84è\89²","tan":"è\8c¶è\89²","darkviolet":"深紫ç½\97å\85°","lightslategrey":"æµ\85ç\9f³æ\9d¿ç\81°","grey":"ç\81°è\89²","darkkhaki":"æ·±è¤\90è\89²","green":"绿è\89²","deepskyblue":"深天è\93\9dè\89²","aqua":"水绿è\89²","sienna":"èµ­è\89²","mintcream":"è\96\84è\8d·ä¹³ç\99½","rosybrown":"ç\8e«ç\91°è¤\90è\89²","mediumslateblue":"æ·¡ç\81°è\93\9dè\89²","magenta":"æ´\8b红è\89²","lightseagreen":"æµ\85海绿è\89²","cyan":"é\9d\92è\89²","olivedrab":"æ\9a\97æ©\84æ¦\84è\89²","darkgoldenrod":"æ·±é\87\91é»\84è\89²","slateblue":"ç\9f³æ\9d¿è\93\9d","mediumaquamarine":"淡碧绿è\89²","lavender":"æ·¡ç´«è\89²","mediumseagreen":"淡海绿è\89²","maroon":"è¤\90紫红è\89²","darkslategray":"æ·±ç\9f³æ\9d¿ç\81°","mediumturquoise":"æ·¡é\9d\92绿è\89²","ghostwhite":"è\8b\8dç\99½","darkblue":"æ·±è\93\9dè\89²","mediumvioletred":"æ·¡ç´«ç½\97å\85°","brown":"è¤\90è\89²","lightgray":"æµ\85ç\81°è\89²","sandybrown":"æµ\85è¤\90è\89²","pink":"ç²\89红è\89²","firebrick":"ç \96红è\89²","indigo":"é\9d\9bè\93\9dè\89²","snow":"é\9bªç\99½","darkorchid":"æ\9a\97å\85°è\8a±ç´«","turquoise":"é\9d\92绿è\89²","chocolate":"å·§å\85\8bå\8a\9bè\89²","springgreen":"æµ\85è\8d\89绿è\89²","moccasin":"鹿ç\9a®é»\84","navy":"è\97\8fé\9d\92è\89²","lemonchiffon":"æ\9f æª¬è\89²","teal":"é\9d\92è\89²","floralwhite":"è\8a±ç\99½","cornflowerblue":"è\97\8fè\93\9dè\89²","paleturquoise":"æ·¡é\9d\92绿è\89²","purple":"ç´«è\89²","gainsboro":"亮ç\81°è\89²","plum":"æ¢\85红è\89²","red":"红è\89²","blue":"è\93\9dè\89²","forestgreen":"森æ\9e\97绿","darkgreen":"深绿è\89²","honeydew":"è\9c\9cè\89²","darkseagreen":"深海绿è\89²","lightcoral":"æµ\85ç\8f\8aç\91\9a红","palevioletred":"æµ\85ç´«ç½\97å\85°","mediumpurple":"æ·¡ç´«è\89²","saddlebrown":"é\9e\8då\85·è¤\90è\89²","darkmagenta":"æ·±æ´\8b红è\89²","thistle":"è\93\9fè\89²","whitesmoke":"ç\83\9fç\99½è\89²","wheat":"æ·¡é»\84è\89²","violet":"ç´«ç½\97å\85°è\89²","lightskyblue":"æµ\85天è\93\9dè\89²","goldenrod":"é²\9cé»\84","mediumblue":"æ·¡è\93\9dè\89²","skyblue":"天è\93\9dè\89²","crimson":"绯红è\89²","darksalmon":"æ·±æ©\99红","darkred":"深红è\89²","darkslategrey":"æ·±ç\9f³æ\9d¿ç\81°","peru":"ç§\98é²\81æ£\95","lightgrey":"æµ\85ç\81°è\89²","lightgoldenrodyellow":"æµ\85é\87\91é»\84è\89²","blanchedalmond":"æ\9d\8fä»\81ç\99½","aliceblue":"è\89¾è\8e\89æ\96¯è\93\9d","bisque":"ä¹³é»\84è\89²","slategray":"ç\9f³æ\9d¿ç\81°","palegoldenrod":"æµ\85é\87\91é»\84è\89²","darkorange":"æ·±æ©\99è\89²","aquamarine":"碧绿è\89²","lightgreen":"æµ\85绿è\89²","burlywood":"å\8e\9fæ\9c¨è\89²","dodgerblue":"å®\9dè\93\9d","darkgray":"æ·±ç\81°è\89²","lightcyan":"æµ\85é\9d\92è\89²","powderblue":"ç²\89è\93\9dè\89²","blueviolet":"è\93\9dç´«è\89²","orchid":"å\85°è\8a±ç´«","dimgray":"æ\9a\97ç\81°è\89²","beige":"ç±³è\89²","fuchsia":"紫红è\89²","lavenderblush":"淡紫红è\89²","hotpink":"æ\9a\97ç²\89","steelblue":"é\92¢è\93\9dè\89²","tomato":"ç\95ªè\8c\84è\89²","lightpink":"æµ\85ç²\89è\89²","limegreen":"æ\9a\97é»\84绿è\89²","indianred":"å\8d°åº¦çº¢","papayawhip":"ç²\89æ\9c¨ç\93\9cæ©\99","lightslategray":"æµ\85ç\9f³æ\9d¿ç\81°","gray":"ç\81°è\89²","mediumorchid":"æ·¡å\85°è\8a±ç´«","cornsilk":"ç\8e\89ç±³é»\84","black":"é»\91è\89²","seagreen":"海绿è\89²","darkslateblue":"æ·±ç\9f³æ\9d¿è\93\9d","khaki":"é»\84è¤\90è\89²","lightblue":"æ·¡è\93\9dè\89²","palegreen":"淡绿è\89²","azure":"æµ\85天è\93\9d","peachpuff":"ç²\89æ¡\83红","darkolivegreen":"æ·±æ©\84æ¦\84绿è\89²","yellowgreen":"黄绿色"})
\ No newline at end of file
index 33aa6dd52753791a7b763ae8367ed3181fea19ce..30fcb6142bc04214884caf8d833ae0ee626ca9dd 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,12 +8,12 @@
 if(!dojo._hasResource["dojo.number"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.number"] = true;
 dojo.provide("dojo.number");
-
 dojo.require("dojo.i18n");
-dojo.requireLocalization("dojo.cldr", "number", null, "ROOT,ar,ca,cs,da,de,el,en,en-au,en-gb,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh");
+dojo.requireLocalization("dojo.cldr", "number", null, "ROOT,ar,ca,cs,da,de,el,en,en-au,en-gb,es,fi,fr,fr-ch,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-hant,zh-hk");
 dojo.require("dojo.string");
 dojo.require("dojo.regexp");
 
+dojo.getObject("number", true, dojo);
 
 /*=====
 dojo.number = {
@@ -118,7 +118,7 @@ dojo.number._applyPattern = function(/*Number*/value, /*String*/pattern, /*dojo.
        if(options.fractional === false){ options.places = 0; }
        return pattern.replace(numberPatternRE,
                dojo.number._formatAbsolute(value, numberPattern[0], {decimal: decimal, group: group, places: options.places, round: options.round}));
-}
+};
 
 dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/increment){
        //      summary:
@@ -144,7 +144,7 @@ dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/incr
        //              10.75
        var factor = 10 / (increment || 10);
        return (factor * +value).toFixed(places) / factor; // Number
-}
+};
 
 if((0.9).toFixed() == 0){
        // (isIE) toFixed() bug workaround: Rounding fails on IE when most significant digit
@@ -157,7 +157,7 @@ if((0.9).toFixed() == 0){
                                d = 0;
                        }
                        return round(v, p, m) + (v > 0 ? d : -d);
-               }
+               };
        })();
 }
 
@@ -180,7 +180,7 @@ dojo.number.__FormatAbsoluteOptions = function(){
 =====*/
 
 dojo.number._formatAbsolute = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatAbsoluteOptions?*/options){
-       // summary: 
+       // summary:
        //              Apply numeric pattern to absolute value using options. Gives no
        //              consideration to local customs.
        // value:
@@ -295,7 +295,7 @@ dojo.number.regexp = function(/*dojo.number.__RegexpOptions?*/options){
        //              Returns regular expression with positive and negative match, group
        //              and decimal separators
        return dojo.number._parseInfo(options).regexp; // String
-}
+};
 
 dojo.number._parseInfo = function(/*Object?*/options){
        options = options || {};
@@ -383,7 +383,7 @@ dojo.number._parseInfo = function(/*Object?*/options){
 
        // normalize whitespace and return
        return {regexp: re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group: group, decimal: decimal, factor: factor}; // Object
-}
+};
 
 /*=====
 dojo.number.__ParseOptions = function(){
@@ -494,10 +494,10 @@ dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?*
                        var re = "";
                        if(q && (flags.places!==0)){
                                re = "\\" + flags.decimal;
-                               if(flags.places == Infinity){ 
-                                       re = "(?:" + re + "\\d+)?"; 
+                               if(flags.places == Infinity){
+                                       re = "(?:" + re + "\\d+)?";
                                }else{
-                                       re += "\\d{" + flags.places + "}"; 
+                                       re += "\\d{" + flags.places + "}";
                                }
                        }
                        return re;
@@ -506,9 +506,9 @@ dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?*
        );
 
        var exponentRE = dojo.regexp.buildGroupRE(flags.exponent,
-               function(q){ 
+               function(q){
                        if(q){ return "([eE]" + dojo.number._integerRegexp({ signed: flags.eSigned}) + ")"; }
-                       return ""; 
+                       return "";
                }
        );
 
@@ -540,7 +540,7 @@ dojo.number.__IntegerRegexpFlags = function(){
 =====*/
 
 dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags){
-       // summary: 
+       // summary:
        //              Builds a regular expression that matches an integer
 
        // assign default values to missing parameters
@@ -579,6 +579,6 @@ dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags
        );
 
        return signRE + numberRE; // String
-}
+};
 
 }
diff --git a/lib/dojo/package.json b/lib/dojo/package.json
new file mode 100644 (file)
index 0000000..5855be5
--- /dev/null
@@ -0,0 +1,21 @@
+{
+  "name": "dojo",
+  "directories": {
+    "lib": "."
+  },
+  "main":"./lib/main-browser",
+  "description": "Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.",
+  "licenses": [
+     {
+         "type": "AFLv2.1",
+         "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L43"
+     },
+     {
+         "type": "BSD",
+         "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L13"
+     }
+  ],
+  "bugs": "http://bugs.dojotoolkit.org/",
+  "keywords": ["JavaScript", "Dojo", "Toolkit"],
+  "homepage": "http://dojotoolkit.org/"
+}
\ No newline at end of file
index 7ae0356917bf9b2c413e79b8d1088831dfda7594..bd52030e005c4e84e0aa7734165d4e26733c9e48 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,14 +10,14 @@ dojo._hasResource["dojo.parser"] = true;
 dojo.provide("dojo.parser");
 dojo.require("dojo.date.stamp");
 
+
 new Date("X"); // workaround for #11279, new Date("") == NaN
 
 dojo.parser = new function(){
-       // summary: The Dom/Widget parsing package
+       // summary:
+       //              The Dom/Widget parsing package
 
        var d = dojo;
-       this._attrName = d._scopeName + "Type";
-       this._query = "[" + this._attrName + "]";
 
        function val2type(/*Object*/ value){
                // summary:
@@ -42,13 +42,13 @@ dojo.parser = new function(){
                        case "number":
                                return value.length ? Number(value) : NaN;
                        case "boolean":
-                               // for checked/disabled value might be "" or "checked".  interpret as true.
+                               // 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
+                                       // (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));
                                }
@@ -77,7 +77,7 @@ dojo.parser = new function(){
                }
        }
 
-       var instanceClasses = {
+       var dummyClass = {}, instanceClasses = {
                // map from fully qualified name (like "dijit.Button") to structure like
                // { cls: dijit.Button, params: {label: "string", disabled: "boolean"} }
        };
@@ -85,45 +85,70 @@ dojo.parser = new function(){
        // 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(){
+       // TODO: remove this in 2.0, when we stop caching parameters.
+       d.connect(d, "extend", function(){
                instanceClasses = {};
        });
 
-       function getClassInfo(/*String*/ className){
+       function getProtoInfo(cls, params){
+               // cls: A prototype
+               //              The prototype of the class to check props on
+               // params: Object
+               //              The parameters object to mix found parameters onto.
+               for(var name in cls){
+                       if(name.charAt(0)=="_"){ continue; }    // skip internal properties
+                       if(name in dummyClass){ continue; }             // skip "constructor" and "toString"
+                       params[name] = val2type(cls[name]);
+               }
+               return params;
+       }
+
+       function getClassInfo(/*String*/ className, /*Boolean*/ skipParamsLookup){
+               // summary:
+               //              Maps a widget name string like "dijit.form.Button" to the widget constructor itself,
+               //              and a list of that widget's parameters and their types
                // className:
                //              fully qualified name (like "dijit.form.Button")
                // returns:
                //              structure like
-               //                      { 
-               //                              cls: dijit.Button, 
+               //                      {
+               //                              cls: dijit.Button,
                //                              params: { label: "string", disabled: "boolean"}
                //                      }
 
-               if(!instanceClasses[className]){
+               var c = instanceClasses[className];
+               if(!c){
                        // get pointer to widget class
-                       var cls = d.getObject(className);
+                       var cls = d.getObject(className), params = null;
                        if(!cls){ return null; }                // class not defined [yet]
-
-                       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);
+                       if(!skipParamsLookup){ // from fastpath, we don't need to lookup the attrs on the proto because they are explicit
+                               params = getProtoInfo(cls.prototype, {})
                        }
-
-                       instanceClasses[className] = { cls: cls, params: params };
+                       c = { cls: cls, params: params };
+                       
+               }else if(!skipParamsLookup && !c.params){
+                       // if we're calling getClassInfo and have a cls proto, but no params info, scan that cls for params now
+                       // and update the pointer in instanceClasses[className]. This happens when a widget appears in another
+                       // widget's template which still uses dojoType, but an instance of the widget appears prior with a data-dojo-type,
+                       // skipping this lookup the first time.
+                       c.params = getProtoInfo(c.cls.prototype, {});
                }
-               return instanceClasses[className];
+               
+               return c;
        }
 
-       this._functionFromScript = function(script){
+       this._functionFromScript = function(script, attrData){
+               // summary:
+               //              Convert a <script type="dojo/method" args="a, b, c"> ... </script>
+               //              into a function
+               // script: DOMNode
+               //              The <script> DOMNode
+               // attrData: String
+               //              For HTML5 compliance, searches for attrData + "args" (typically
+               //              "data-dojo-args") instead of "args"
                var preamble = "";
                var suffix = "";
-               var argsStr = script.getAttribute("args");
+               var argsStr = (script.getAttribute(attrData + "args") || script.getAttribute("args"));
                if(argsStr){
                        d.forEach(argsStr.split(/\s*,\s*/), function(part, idx){
                                preamble += "var "+part+" = arguments["+idx+"]; ";
@@ -137,7 +162,7 @@ dojo.parser = new function(){
                        });
                }
                return new Function(preamble+script.innerHTML+suffix);
-       }
+       };
 
        this.instantiate = function(/* Array */nodes, /* Object? */mixin, /* Object? */args){
                // summary:
@@ -158,69 +183,106 @@ dojo.parser = new function(){
                //              exist.
                // args: Object?
                //              An object used to hold kwArgs for instantiation.
-               //              Supports 'noStart' and inherited.
-               var thelist = [], dp = dojo.parser;
+               //              See parse.args argument for details.
+
+               var thelist = [],
                mixin = mixin||{};
                args = args||{};
-               
+
+               // TODO: for 2.0 default to data-dojo- regardless of scopeName (or maybe scopeName won't exist in 2.0)
+               var attrName = (args.scope || d._scopeName) + "Type",   // typically "dojoType"
+                       attrData = "data-" + (args.scope || d._scopeName) + "-";        // typically "data-dojo-"
+
                d.forEach(nodes, function(obj){
                        if(!obj){ return; }
 
-                       // Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc.s
-                       var node, type, clsInfo, clazz, scripts;
+                       // Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc.
+                       var node, type, clsInfo, clazz, scripts, fastpath;
                        if(obj.node){
                                // new format of nodes[] array, object w/lots of properties pre-computed for me
                                node = obj.node;
                                type = obj.type;
-                               clsInfo = obj.clsInfo || (type && getClassInfo(type));
+                               fastpath = obj.fastpath;
+                               clsInfo = obj.clsInfo || (type && getClassInfo(type, fastpath));
                                clazz = clsInfo && clsInfo.cls;
                                scripts = obj.scripts;
                        }else{
-                               // old (backwards compatible) format of nodes[] array, simple array of DOMNodes
+                               // old (backwards compatible) format of nodes[] array, simple array of DOMNodes. no fastpath/data-dojo-type support here.
                                node = obj;
-                               type = dp._attrName in mixin ? mixin[dp._attrName] : node.getAttribute(dp._attrName);
+                               type = attrName in mixin ? mixin[attrName] : node.getAttribute(attrName);
                                clsInfo = type && getClassInfo(type);
                                clazz = clsInfo && clsInfo.cls;
-                               scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] : 
+                               scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] :
                                                        d.query("> script[type^='dojo/']", node));
                        }
                        if(!clsInfo){
                                throw new Error("Could not load class '" + type);
                        }
 
-                       // Setup hash to hold parameter settings for this widget.   Start with the parameter
+                       // Setup hash to hold parameter settings for this widget.       Start with the parameter
                        // settings inherited from ancestors ("dir" and "lang").
                        // Inherited setting may later be overridden by explicit settings on node itself.
-                       var params = {},
-                               attributes = node.attributes;
+                       var params = {};
+                               
                        if(args.defaults){
                                // settings for the document itself (or whatever subtree is being parsed)
-                               dojo.mixin(params, args.defaults);
+                               d._mixin(params, args.defaults);
                        }
                        if(obj.inherited){
                                // settings from dir=rtl or lang=... on a node above this node
-                               dojo.mixin(params, obj.inherited);
+                               d._mixin(params, obj.inherited);
                        }
+                       
+                       // mix things found in data-dojo-props into the params
+                       if(fastpath){
+                               var extra = node.getAttribute(attrData + "props");
+                               if(extra && extra.length){
+                                       try{
+                                               extra = d.fromJson.call(args.propsThis, "{" + extra + "}");
+                                               d._mixin(params, extra);
+                                       }catch(e){
+                                               // give the user a pointer to their invalid parameters. FIXME: can we kill this in production?
+                                               throw new Error(e.toString() + " in data-dojo-props='" + extra + "'");
+                                       }
+                               }
 
-                       // read parameters (ie, attributes) specified on DOMNode
-                       // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
-                       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?
+                               // For the benefit of _Templated, check if node has data-dojo-attach-point/data-dojo-attach-event
+                               // and mix those in as though they were parameters
+                               var attachPoint = node.getAttribute(attrData + "attach-point");
+                               if(attachPoint){
+                                       params.dojoAttachPoint = attachPoint;
                                }
-                               var _type = clsInfo.params[name];
-                               if(typeof value == "string"){
-                                       params[name] = str2obj(value, _type);
-                               }else{
-                                       params[name] = value;
+                               var attachEvent = node.getAttribute(attrData + "attach-event");
+                               if(attachEvent){
+                                       params.dojoAttachEvent = attachEvent;
+                               }
+                               dojo.mixin(params, mixin);
+                       }else{
+                               // FIXME: we need something like "deprecateOnce()" to throw dojo.deprecation for something.
+                               // remove this logic in 2.0
+                               // read parameters (ie, attributes) specified on DOMNode
+
+                               var attributes = node.attributes;
+
+                               // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
+                               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;
+                                       }
                                }
                        }
 
@@ -235,9 +297,10 @@ dojo.parser = new function(){
 
                        d.forEach(scripts, function(script){
                                node.removeChild(script);
-                               var event = script.getAttribute("event"),
+                               // FIXME: drop event="" support in 2.0. use data-dojo-event="" instead
+                               var event = (script.getAttribute(attrData + "event") || script.getAttribute("event")),
                                        type = script.getAttribute("type"),
-                                       nf = d.parser._functionFromScript(script);
+                                       nf = d.parser._functionFromScript(script, attrData);
                                if(event){
                                        if(type == "dojo/connect"){
                                                connects.push({event: event, func: nf});
@@ -255,7 +318,8 @@ dojo.parser = new function(){
                        thelist.push(instance);
 
                        // map it to the JS namespace if that makes sense
-                       var jsname = node.getAttribute("jsId");
+                       // FIXME: in 2.0, drop jsId support. use data-dojo-id instead
+                       var jsname = (node.getAttribute(attrData + "id") || node.getAttribute("jsId"));
                        if(jsname){
                                d.setObject(jsname, instance);
                        }
@@ -279,9 +343,9 @@ dojo.parser = new function(){
                        // ContentPane is the parent widget (so that the parse doesn't call startup() on the
                        // ContentPane's children)
                        d.forEach(thelist, function(instance){
-                               if(     !args.noStart && instance  && 
-                                       instance.startup &&
-                                       !instance._started && 
+                               if( !args.noStart && instance  &&
+                                       dojo.isFunction(instance.startup) &&
+                                       !instance._started &&
                                        (!instance.getParent || !instance.getParent())
                                ){
                                        instance.startup();
@@ -291,34 +355,57 @@ dojo.parser = new function(){
                return thelist;
        };
 
-       this.parse = function(/*DomNode?*/ rootNode, /* Object? */ args){
+       this.parse = function(rootNode, 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"
+               //              and instantiate them. Searches for either data-dojo-type="Class" or
+               //              dojoType="Class" where "Class" is a a fully qualified class name,
+               //              like `dijit.form.Button`
+               //
+               //              Using `data-dojo-type`:
+               //              Attributes using can be mixed into the parameters used to instantitate the
+               //              Class by using a `data-dojo-props` attribute on the node being converted.
+               //              `data-dojo-props` should be a string attribute to be converted from JSON.
+               //
+               //              Using `dojoType`:
+               //              Attributes are read from the original domNode and converted to appropriate
+               //              types by looking up the Class prototype values. This is the default behavior
+               //              from Dojo 1.0 to Dojo 1.5. `dojoType` support is deprecated, and will
+               //              go away in Dojo 2.0.
                //
                // 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 
+               //              object can be passed in this place. If the `args` object has a
                //              `rootNode` member, that is used.
                //
-               // args:
+               // args: Object
                //              a kwArgs object passed along to instantiate()
-               //              
+               //
                //                      * noStart: Boolean?
                //                              when set will prevent the parser from calling .startup()
-               //                              when locating the nodes. 
+               //                              when locating the nodes.
                //                      * rootNode: DomNode?
                //                              identical to the function's `rootNode` argument, though
-               //                              allowed to be passed in via this `args object. 
+               //                              allowed to be passed in via this `args object.
+               //                      * template: Boolean
+               //                              If true, ignores ContentPane's stopParser flag and parses contents inside of
+               //                              a ContentPane inside of a template.   This allows dojoAttachPoint on widgets/nodes
+               //                              nested inside the ContentPane to work.
                //                      * inherited: Object
                //                              Hash possibly containing dir and lang settings to be applied to
                //                              parsed widgets, unless there's another setting on a sub-node that overrides
-               //
+               //                      * scope: String
+               //                              Root for attribute names to search for.   If scopeName is dojo,
+               //                              will search for data-dojo-type (or dojoType).   For backwards compatibility
+               //                              reasons defaults to dojo._scopeName (which is "dojo" except when
+               //                              multi-version support is used, when it will be something like dojo16, dojo20, etc.)
+               //                      * propsThis: Object
+               //                              If specified, "this" referenced from data-dojo-props will refer to propsThis.
+               //                              Intended for use from the widgets-in-template feature of `dijit._Templated`
                //
                // example:
                //              Parse all widgets on a page:
@@ -326,10 +413,10 @@ dojo.parser = new function(){
                //
                // example:
                //              Parse all classes within the node with id="foo"
-               //      |               dojo.parser.parse(dojo.byId(foo));
+               //      |               dojo.parser.parse(dojo.byId('foo'));
                //
                // example:
-               //              Parse all classes in a page, but do not call .startup() on any 
+               //              Parse all classes in a page, but do not call .startup() on any
                //              child
                //      |               dojo.parser.parse({ noStart: true })
                //
@@ -337,7 +424,7 @@ dojo.parser = new function(){
                //              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 });
+               //      |               dojo.parser.parse({ noStart:true, rootNode: someNode });
 
                // determine the root node based on the passed arguments.
                var root;
@@ -347,8 +434,12 @@ dojo.parser = new function(){
                }else{
                        root = rootNode;
                }
+               root = root ? dojo.byId(root) : dojo.body();
+               args = args || {};
+
+               var attrName = (args.scope || d._scopeName) + "Type",           // typically "dojoType"
+                       attrData = "data-" + (args.scope || d._scopeName) + "-";        // typically "data-dojo-"
 
-               var attrName = this._attrName;
                function scan(parent, list){
                        // summary:
                        //              Parent is an Object representing a DOMNode, with or without a dojoType specified.
@@ -357,7 +448,7 @@ dojo.parser = new function(){
                        // parent: Object
                        //              Object representing the parent node, like
                        //      |       {
-                       //      |               node: DomNode,                  // scan children of this node
+                       //      |               node: DomNode,                  // scan children of this node
                        //      |               inherited: {dir: "rtl"},        // dir/lang setting inherited from above node
                        //      |
                        //      |               // attributes only set if node has dojoType specified
@@ -370,6 +461,7 @@ dojo.parser = new function(){
                        // Effective dir and lang settings on parent node, either set directly or inherited from grandparent
                        var inherited = dojo.clone(parent.inherited);
                        dojo.forEach(["dir", "lang"], function(name){
+                               // TODO: what if this is a widget and dir/lang are declared in data-dojo-props?
                                var val = parent.node.getAttribute(name);
                                if(val){
                                        inherited[name] = val;
@@ -377,20 +469,31 @@ dojo.parser = new function(){
                        });
 
                        // if parent is a widget, then search for <script type=dojo/*> tags and put them in scripts[].
-                       var scripts = parent.scripts;
+                       var scripts = parent.clsInfo && !parent.clsInfo.cls.prototype._noScript ? parent.scripts : null;
 
                        // unless parent is a widget with the stopParser flag set, continue search for dojoType, recursively
-                       var recurse = !parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser;
+                       var recurse = (!parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser) || (args && args.template);
 
                        // scan parent's children looking for dojoType and <script type=dojo/*>
                        for(var child = parent.node.firstChild; child; child = child.nextSibling){
                                if(child.nodeType == 1){
-                                       var type = recurse && child.getAttribute(attrName);
+                                       // FIXME: desupport dojoType in 2.0. use data-dojo-type instead
+                                       var type, html5 = recurse && child.getAttribute(attrData + "type");
+                                       if(html5){
+                                               type = html5;
+                                       }else{
+                                               // fallback to backward compatible mode, using dojoType. remove in 2.0
+                                               type = recurse && child.getAttribute(attrName);
+                                       }
+                                       
+                                       var fastpath = html5 == type;
+
                                        if(type){
-                                               // if dojoType specified, add to output array of nodes to instantiate
+                                               // if dojoType/data-dojo-type specified, add to output array of nodes to instantiate
                                                var params = {
                                                        "type": type,
-                                                       clsInfo: getClassInfo(type),    // note: won't find classes declared via dojo.Declaration
+                                                       fastpath: fastpath,
+                                                       clsInfo: getClassInfo(type, fastpath), // note: won't find classes declared via dojo.Declaration
                                                        node: child,
                                                        scripts: [], // <script> nodes that are parent's children
                                                        inherited: inherited // dir & lang attributes inherited from parent
@@ -403,7 +506,7 @@ dojo.parser = new function(){
                                        }else if(scripts && child.nodeName.toLowerCase() == "script"){
                                                // if <script type="dojo/...">, save in scripts[]
                                                type = child.getAttribute("type");
-                                               if (type && /^dojo\//i.test(type)) {
+                                               if (type && /^dojo\/\w/i.test(type)) {
                                                        scripts.push(child);
                                                }
                                        }else if(recurse){
@@ -417,17 +520,24 @@ dojo.parser = new function(){
                        }
                }
 
+               // Ignore bogus entries in inherited hash like {dir: ""}
+               var inherited = {};
+               if(args && args.inherited){
+                       for(var key in args.inherited){
+                               if(args.inherited[key]){ inherited[key] = args.inherited[key]; }
+                       }
+               }
+
                // Make list of all nodes on page w/dojoType specified
                var list = [];
                scan({
-                       node: root ? dojo.byId(root) : dojo.body(),
-                       inherited: (args && args.inherited) || {
-                               dir: dojo._isBodyLtr() ? "ltr" : "rtl"
-                       }
+                       node: root,
+                       inherited: inherited
                }, list);
 
                // go build the object instances
-               return this.instantiate(list, null, args); // Array
+               var mixin = args && args.template ? {template: true} : null;
+               return this.instantiate(list, mixin, args); // Array
        };
 }();
 
@@ -435,14 +545,14 @@ dojo.parser = new function(){
 //after the a11y test.
 
 (function(){
-       var parseRunner = function(){ 
+       var parseRunner = function(){
                if(dojo.config.parseOnLoad){
-                       dojo.parser.parse(); 
+                       dojo.parser.parse();
                }
        };
 
        // FIXME: need to clobber cross-dependency!!
-       if(dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])){
+       if(dojo.getObject("dijit.wai.onload") === dojo._loaders[0]){
                dojo._loaders.splice(1, 0, parseRunner);
        }else{
                dojo._loaders.unshift(parseRunner);
index 1da68f4525ff59c57e020fe0308db76d4047c730..947ecf1d5f3f49364935058345a77c925fa62796 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.regexp"]){ //_hasResource checks added by build. Do
 dojo._hasResource["dojo.regexp"] = true;
 dojo.provide("dojo.regexp");
 
+dojo.getObject("regexp", true, dojo);
+
 /*=====
 dojo.regexp = {
        // summary: Regular expressions and Builder resources
@@ -27,7 +29,7 @@ dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){
                }
                return "\\" + ch;
        }); // String
-}
+};
 
 dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){
        //      summary:
@@ -42,7 +44,7 @@ dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boole
        //              A single value or an array of values.
        // re:
        //              A function. Takes one parameter and converts it to a regular
-       //              expression. 
+       //              expression.
        // nonCapture:
        //              If true, uses non-capturing match, otherwise matches are retained
        //              by regular expression. Defaults to false
@@ -61,15 +63,15 @@ dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boole
 
         // join the REs as alternatives in a RE group.
        return dojo.regexp.group(b.join("|"), nonCapture); // String
-}
+};
 
 dojo.regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){
        // summary:
        //              adds group match to expression
        // nonCapture:
        //              If true, uses non-capturing match, otherwise matches are retained
-       //              by regular expression. 
+       //              by regular expression.
        return "(" + (nonCapture ? "?:":"") + expression + ")"; // String
-}
+};
 
 }
index ecfd266c42635682f58a858cec372935517791e9..2afef9a6c57993167d75335b247fd1daec4ce461 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -36,7 +36,7 @@ dojo.rpc = {
 
 dojo.baseUrl = {
        // summary: The root relative path to dojo.js (as a string)
-       // example: 
+       // example:
        //      if(typeof dojo != "undefined"){ console.log(dojo.baseUrl); }
 };
 
index 6cbe0bebc48793a81a5138e32d2f5ff1ff1e6b32..40bc746eed6f44c83a682b7258818626ac6c7a05 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -8,10 +8,12 @@
 if(!dojo._hasResource["dojo.robot"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.robot"] = true;
 dojo.provide("dojo.robot");
-dojo.experimental("dojo.robot");
 dojo.require("doh.robot");
 dojo.require("dojo.window");
 
+
+dojo.experimental("dojo.robot");
+
 (function(){
 // users who use doh+dojo get the added convenience of dojo.mouseMoveAt,
 // instead of computing the absolute coordinates of their elements themselves
index 7f49b64a038cde6c8c098e62603d2b2e3d899197..3a07c6903108bf94c2f8bce52615e0308091f030 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.robotx"]){ //_hasResource checks added by build. Do
 dojo._hasResource["dojo.robotx"] = true;
 dojo.provide("dojo.robotx");
 dojo.require("dojo.robot");
+
+
 dojo.experimental("dojo.robotx");
 
 // loads an external app into an iframe and points dojo.doc to the iframe document, allowing the robot to control it
@@ -16,18 +18,48 @@ dojo.experimental("dojo.robotx");
 // dojo.require this file
 
 (function(){
-// have to wait for test page to load before testing!
-doh.robot._runsemaphore.lock.push("dojo.robotx.lock");
 
-var iframe = document.getElementById('robotapplication');
+var iframe = null;
 
 var groupStarted=dojo.connect(doh, '_groupStarted', function(){
        dojo.disconnect(groupStarted);
        iframe.style.visibility="visible";
 });
 
+var attachIframe = function(){
+       dojo.addOnLoad(function(){
+               var emptyStyle = {
+                       overflow: dojo.isWebKit? 'hidden' : 'visible',
+                       margin: '0px',
+                       borderWidth: '0px',
+                       height: '100%',
+                       width: '100%'
+               };
+               dojo.style(document.documentElement, emptyStyle);
+               dojo.style(document.body, emptyStyle);
+               document.body.appendChild(iframe);
+               var base=document.createElement('base');
+               base.href=iframe.src;
+               document.getElementsByTagName("head")[0].appendChild(base);
+       });
+};
+
+// Prevent race conditions between iframe loading and robot init.
+// If iframe is allowed to load while the robot is typing, sync XHRs can prevent the robot from completing its initialization.
+var robotReady=false;
+var robotFrame=null;
+var _run=doh.robot._run;
+doh.robot._run=function(frame){
+       // Called from robot when the robot completed its initialization.
+       robotReady = true;
+       robotFrame = frame;
+       doh.robot._run=_run;
+       // If initRobot was already called, then attach the iframe.
+       if(iframe.src){ attachIframe(); }
+}
+
 var onIframeLoad=function(){
-       //iframe = document.getElementById('robotapplication');
+       // initial load handler: update the document and start the tests
        doh.robot._updateDocument();
        onIframeLoad = null;
        var scrollRoot = (document.compatMode == 'BackCompat')? document.body : document.documentElement;
@@ -35,7 +67,15 @@ var onIframeLoad=function(){
        if(consoleHeight){
                iframe.style.height = (scrollRoot.clientHeight - consoleHeight)+"px";
        }
-       doh.run();
+       // If dojo is present in the test case, then at least make a best effort to wait for it to load.
+       // The test must handle other race conditions like initial data queries by itself.
+       if(iframe.contentWindow.dojo){
+               iframe.contentWindow.dojo.addOnLoad(function(){
+                       doh.robot._run(robotFrame);
+               });
+       }else{
+               doh.robot._run(robotFrame);
+       }
 };
 
 var iframeLoad=function(){
@@ -66,6 +106,9 @@ if(iframe['attachEvent'] !== undefined){
        dojo.connect(iframe, 'onload', iframeLoad);
 }
 
+
+
+
 dojo.mixin(doh.robot,{
        _updateDocument: function(){
                dojo.setContext(iframe.contentWindow, iframe.contentWindow.document);
@@ -84,22 +127,13 @@ dojo.mixin(doh.robot,{
                // url:
                //              URL to open. Any of the test's dojo.doc calls (e.g. dojo.byId()), and any dijit.registry calls (e.g. dijit.byId()) will point to elements and widgets inside this application.
                //
+
                iframe.src=url;
-               dojo.addOnLoad(function(){
-                       var emptyStyle = {
-                               overflow: dojo.isWebKit? 'hidden' : 'visible',
-                               margin: '0px',
-                               borderWidth: '0px',
-                               height: '100%',
-                               width: '100%'
-                       };
-                       dojo.style(document.documentElement, emptyStyle);
-                       dojo.style(document.body, emptyStyle);
-                       document.body.appendChild(iframe);
-                       var base=document.createElement('base');
-                       base.href=url;
-                       document.getElementsByTagName("head")[0].appendChild(base);
-               });
+               // see above note about race conditions
+               if(robotReady){
+                       attachIframe();
+                       
+               }
        },
 
        waitForPageToLoad: function(/*Function*/ submitActions){
@@ -134,7 +168,6 @@ dojo.mixin(doh.robot,{
        }
 
 });
-
 })();
 
 }
index 757e328bebc2584a624976abcf0f283a8e43ee19..064fd0fee5528a0c0458d5aba5d324b1b06243c2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -10,6 +10,7 @@ dojo._hasResource["dojo.rpc.JsonService"] = true;
 dojo.provide("dojo.rpc.JsonService");
 dojo.require("dojo.rpc.RpcService");
 
+
 dojo.declare("dojo.rpc.JsonService", dojo.rpc.RpcService, {
                bustCache: false,
                contentType: "application/json-rpc",
@@ -45,7 +46,7 @@ dojo.declare("dojo.rpc.JsonService", dojo.rpc.RpcService, {
                                url: url||this.serviceUrl,
                                postData: this.createRequest(method, parameters),
                                contentType: this.contentType,
-                               timeout: this.timeout, 
+                               timeout: this.timeout,
                                handleAs: "json-comment-optional"
                        });
                        def.addCallbacks(this.resultCallback(deferredRequestHandler), this.errorCallback(deferredRequestHandler));
index 31e95077b1d1e74ae82c7364b608f1b402b4cce4..ecdadc7fcc08bdfa570821e11f2ce2be2361427c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -11,9 +11,10 @@ dojo.provide("dojo.rpc.JsonpService");
 dojo.require("dojo.rpc.RpcService");
 dojo.require("dojo.io.script");
 
+
 dojo.declare("dojo.rpc.JsonpService", dojo.rpc.RpcService, {
        // summary:
-       //      Generic JSONP service.  Minimally extends RpcService to allow 
+       //      Generic JSONP service.  Minimally extends RpcService to allow
        //      easy definition of nearly any JSONP style service. Example
        //      SMD files exist in dojox.data
 
@@ -25,10 +26,10 @@ dojo.declare("dojo.rpc.JsonpService", dojo.rpc.RpcService, {
 
                        dojo.forEach(this.required, function(req){
                                if(req=="" || req==undefined){
-                                       throw new Error("Required Service Argument not found: "+req); 
+                                       throw new Error("Required Service Argument not found: "+req);
                                }
                        });
-               }               
+               }
        },
 
        strictArgChecks: false,
@@ -50,7 +51,7 @@ dojo.declare("dojo.rpc.JsonpService", dojo.rpc.RpcService, {
                        callbackParamName: this.callbackParamName||"callback",
                        content: this.createRequest(parameters),
                        timeout: this.timeout,
-                       handleAs: "json",       
+                       handleAs: "json",
                        preventCache: true
                });
                def.addCallbacks(this.resultCallback(deferredRequestHandler), this.errorCallback(deferredRequestHandler));
index 7ff71415e1a742dd30f56cc515eebfe872997170..5ef5dae7fa0080cd7f3f747653867acfc5f227ac 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.rpc.RpcService"]){ //_hasResource checks added by bu
 dojo._hasResource["dojo.rpc.RpcService"] = true;
 dojo.provide("dojo.rpc.RpcService");
 
+
 dojo.declare("dojo.rpc.RpcService", null, {
        constructor: function(args){
                //summary:
@@ -25,7 +26,7 @@ dojo.declare("dojo.rpc.RpcService", null, {
                //              matches those defined in the smd.  smdString allows a developer to pass
                //              a jsonString directly, which will be converted into an object or alternatively
                //              smdObject is accepts an smdObject directly.
-               //                              
+               //
                if(args){
                        //if the arg is a string, we assume it is a url to retrieve an smd definition from
                        if( (dojo.isString(args)) || (args instanceof dojo._Url)){
@@ -99,7 +100,7 @@ dojo.declare("dojo.rpc.RpcService", null, {
                //      deferredRequestHandler: Deferred
                //              The deferred object handling a request.
 
-               var tf = dojo.hitch(this, 
+               var tf = dojo.hitch(this,
                        function(obj){
                                if(obj.error!=null){
                                        var err;
@@ -114,7 +115,7 @@ dojo.declare("dojo.rpc.RpcService", null, {
                                        err.errorObject = obj;
                                        deferredRequestHandler.errback(err);
                                }else{
-                                       deferredRequestHandler.callback(this.parseResults(obj)); 
+                                       deferredRequestHandler.callback(this.parseResults(obj));
                                }
                        }
                );
@@ -160,7 +161,7 @@ dojo.declare("dojo.rpc.RpcService", null, {
                        dojo.forEach(object.methods, function(m){
                                if(m && m.name){
                                        this[m.name] = this.generateMethod(     m.name,
-                                                                               m.parameters, 
+                                                                               m.parameters,
                                                                                m.url||m.serviceUrl||m.serviceURL);
                                        if(!dojo.isFunction(this[m.name])){
                                                throw new Error("RpcService: Failed to create" + m.name + "()");
diff --git a/lib/dojo/store/Cache.js b/lib/dojo/store/Cache.js
new file mode 100644 (file)
index 0000000..d08d170
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.store.Cache"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.store.Cache"] = true;
+dojo.provide("dojo.store.Cache");
+
+dojo.getObject("store", true, dojo);
+
+/*=====
+dojo.declare("dojo.store.__CacheArgs", null, {
+       constructor: function(){
+               // summary:
+               //              These are additional options for how caching is handled.
+               // isLoaded: Function?
+               //              This is a function that will be called for each item in a query response to determine
+               //              if it is cacheable. If isLoaded returns true, the item will be cached, otherwise it
+               //              will not be cached. If isLoaded is not provided, all items will be cached.
+               this.isLoaded = isLoaded;
+       }
+});
+=====*/
+dojo.store.Cache = function(masterStore, cachingStore, /*dojo.store.__CacheArgs*/ options){
+       // summary:
+       //              The Cache store wrapper takes a master store and a caching store,
+       //              caches data from the master into the caching store for faster
+       //              lookup. Normally one would use a memory store for the caching
+       //              store and a server store like JsonRest for the master store.
+       // masterStore:
+       //              This is the authoritative store, all uncached requests or non-safe requests will
+       //              be made against this store.
+       // cachingStore:
+       //              This is the caching store that will be used to store responses for quick access.
+       //              Typically this should be a local store.
+       // options:
+       //              These are additional options for how caching is handled.
+       options = options || {};
+       return dojo.delegate(masterStore, {
+               query: function(query, directives){
+                       var results = masterStore.query(query, directives);
+                       results.forEach(function(object){
+                               if(!options.isLoaded || options.isLoaded(object)){
+                                       cachingStore.put(object);
+                               }
+                       });
+                       return results;
+               },
+               // look for a queryEngine in either store
+               queryEngine: masterStore.queryEngine || cachingStore.queryEngine,
+               get: function(id, directives){
+                       return dojo.when(cachingStore.get(id), function(result){
+                               return result || dojo.when(masterStore.get(id, directives), function(result){
+                                       if(result){
+                                               cachingStore.put(result, {id: id});
+                                       }
+                                       return result;
+                               });
+                       });
+               },
+               add: function(object, directives){
+            return dojo.when(masterStore.add(object, directives), function(result){
+               // now put result in cache
+                return cachingStore.add(typeof result == "object" ? result : object, directives);
+            });
+        },
+               put: function(object, directives){
+                       // first remove from the cache, so it is empty until we get a response from the master store
+            cachingStore.remove((directives && directives.id) || this.getIdentity(object));
+            return dojo.when(masterStore.put(object, directives), function(result){
+               // now put result in cache
+                return cachingStore.put(typeof result == "object" ? result : object, directives);
+            });
+        },
+               remove: function(id, directives){
+            return dojo.when(masterStore.remove(id, directives), function(result){
+                return cachingStore.remove(id, directives);
+            });
+        },
+               evict: function(id){
+                       return cachingStore.remove(id);
+               }
+       });
+};
+/*=====
+dojo.declare("dojo.store.Cache", null, {
+       // example:
+       //      |       var master = new dojo.store.Memory(data);
+       //      |       var cacher = new dojo.store.Memory();
+       //      |       var store = new dojo.store.Cache(master, cacher);
+       //
+       query: function(query, directives){
+               // summary:
+               //              Query the underlying master store and cache any results.
+               // query: Object|String
+               //              The object or string containing query information. Dependent on the query engine used.
+               // directives: dojo.store.util.SimpleQueryEngine.__queryOptions?
+               //              An optional keyword arguments object with additional parameters describing the query.
+               // returns: dojo.store.util.QueryResults
+               //              A QueryResults object that can be used to iterate over.
+       },
+       get: function(id, directives){
+               // summary:
+               //              Get the object with the specific id.
+               // id: Number
+               //              The identifier for the object in question.
+               // directives: dojo.store.__GetOptions?
+               //              Any additional parameters needed to describe how the get should be performed.
+               // returns: dojo.store.util.QueryResults
+               //              A QueryResults object.
+       },
+       add: function(object, directives){
+               // summary:
+               //              Add the given object to the store.
+               // object: Object
+               //              The object to add to the store.
+               // directives: dojo.store.__AddOptions?
+               //              Any additional parameters needed to describe how the add should be performed.
+               // returns: Number
+               //              The new id for the object.
+       },
+       put: function(object, directives){
+               // summary:
+               //              Put the object into the store (similar to an HTTP PUT).
+               // object: Object
+               //              The object to put to the store.
+               // directives: dojo.store.__PutOptions?
+               //              Any additional parameters needed to describe how the put should be performed.
+               // returns: Number
+               //              The new id for the object.
+       },
+       remove: function(id, directives){
+               // summary:
+               //              Remove the object with the specific id.
+               // id: Number
+               //              The identifier for the object in question.
+               // directives: dojo.store.__RemoveOptions?
+               //              Any additional parameters needed to describe how the remove should be performed.
+       },
+       evict: function(id){
+               // summary:
+               //              Remove the object with the given id from the underlying caching store.
+               // id: Number
+               //              The identifier for the object in question.
+       }
+});
+=====*/
+
+}
diff --git a/lib/dojo/store/DataStore.js b/lib/dojo/store/DataStore.js
new file mode 100644 (file)
index 0000000..99c81fd
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.store.DataStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.store.DataStore"] = true;
+dojo.provide("dojo.store.DataStore");
+dojo.require("dojo.store.util.QueryResults");
+
+
+dojo.declare("dojo.store.DataStore", null, {
+       target: "",
+       constructor: function(options){
+               // summary:
+               //              This is an adapter for using Dojo Data stores with an object store consumer.
+               //              You can provide a Dojo data store and use this adapter to interact with it through
+               //              the Dojo object store API
+               // options: Object?
+               //              This provides any configuration information that will be mixed into the store,
+               //              including a reference to the Dojo data store under the property "store".
+               dojo.mixin(this, options);
+       },
+       _objectConverter: function(callback){
+               var store = this.store;
+               return function(item){
+                       var object = {};
+                       var attributes = store.getAttributes(item);
+                       for(var i = 0; i < attributes.length; i++){
+                               object[attributes[i]] = store.getValue(item, attributes[i]);
+                       }
+                       return callback(object);
+               };
+       },
+       get: function(id, options){
+               // summary:
+               //              Retrieves an object by it's identity. This will trigger a fetchItemByIdentity
+               // id: Object?
+               //              The identity to use to lookup the object
+               var returnedObject, returnedError;
+               var deferred = new dojo.Deferred();
+               this.store.fetchItemByIdentity({
+                       identity: id,
+                       onItem: this._objectConverter(function(object){
+                               deferred.resolve(returnedObject = object);
+                       }),
+                       onError: function(error){
+                               deferred.reject(returnedError = error);
+                       }
+               });
+               if(returnedObject){
+                       // if it was returned synchronously
+                       return returnedObject;
+               }
+               if(returnedError){
+                       throw returnedError;
+               }
+               return deferred.promise;
+       },
+       put: function(object, options){
+               // summary:
+               //              Stores an object by its identity.
+               // object: Object
+               //              The object to store.
+               // options: Object?
+               //              Additional metadata for storing the data.  Includes a reference to an id
+               //              that the object may be stored with (i.e. { id: "foo" }).
+               var id = options && typeof options.id != "undefined" || this.getIdentity(object);
+               var store = this.store;
+               if(typeof id == "undefined"){
+                       store.newItem(object);
+               }else{
+                       store.fetchItemByIdentity({
+                               identity: id,
+                               onItem: function(item){
+                                       if(item){
+                                               for(var i in object){
+                                                       if(store.getValue(item, i) != object[i]){
+                                                               store.setValue(item, i, object[i]);
+                                                       }
+                                               }
+                                       }else{
+                                               store.newItem(object);
+                                       }
+                               }
+                       });
+               }
+       },
+       remove: function(id){
+               // summary:
+               //              Deletes an object by its identity.
+               // id: Object
+               //              The identity to use to delete the object
+               var store = this.store;
+               this.store.fetchItemByIdentity({
+                       identity: id,
+                       onItem: function(item){
+                               store.deleteItem(item);
+                       }
+               });
+       },
+       query: function(query, options){
+               // summary:
+               //              Queries the store for objects.
+               // query: Object
+               //              The query to use for retrieving objects from the store
+               // options: Object?
+               //              Optional options object as used by the underlying dojo.data Store.
+               // returns: dojo.store.util.QueryResults
+               //              A query results object that can be used to iterate over results.
+               var returnedObject, returnedError;
+               var deferred = new dojo.Deferred();
+               deferred.total = new dojo.Deferred();
+               var converter = this._objectConverter(function(object){return object;});
+               this.store.fetch(dojo.mixin({
+                       query: query,
+                       onBegin: function(count){
+                               deferred.total.resolve(count);
+                       },
+                       onComplete: function(results){
+                               deferred.resolve(dojo.map(results, converter));
+                       },
+                       onError: function(error){
+                               deferred.reject(error);
+                       }
+               }, options));
+               return dojo.store.util.QueryResults(deferred);
+       },
+       getIdentity: function(object){
+               // summary:
+               //              Fetch the identity for the given object.
+               // object: Object
+               //              The data object to get the identity from.
+               // returns: Number
+               //              The id of the given object.
+               return object[this.idProperty || this.store.getIdentityAttributes()[0]];
+       }
+});
+
+}
diff --git a/lib/dojo/store/JsonRest.js b/lib/dojo/store/JsonRest.js
new file mode 100644 (file)
index 0000000..5f9254c
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.store.JsonRest"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.store.JsonRest"] = true;
+dojo.provide("dojo.store.JsonRest");
+dojo.require("dojo.store.util.QueryResults");
+
+
+dojo.declare("dojo.store.JsonRest", null, {
+       constructor: function(/*dojo.store.JsonRest*/ options){
+               // summary:
+               //              This is a basic store for RESTful communicating with a server through JSON
+               //              formatted data.
+               // options:
+               //              This provides any configuration information that will be mixed into the store
+               dojo.mixin(this, options);
+       },
+       // target: String
+       //              The target base URL to use for all requests to the server. This string will be
+       //      prepended to the id to generate the URL (relative or absolute) for requests
+       //      sent to the server
+       target: "",
+       // idProperty: String
+       //              Indicates the property to use as the identity property. The values of this
+       //              property should be unique.
+       idProperty: "id",
+
+       get: function(id, options){
+               //      summary:
+               //              Retrieves an object by its identity. This will trigger a GET request to the server using
+               //              the url `this.target + id`.
+               //      id: Number
+               //              The identity to use to lookup the object
+               //      returns: Object
+               //              The object in the store that matches the given id.
+               var headers = options || {};
+               headers.Accept = "application/javascript, application/json";
+               return dojo.xhrGet({
+                       url:this.target + id,
+                       handleAs: "json",
+                       headers: headers
+               });
+       },
+       getIdentity: function(object){
+               // summary:
+               //              Returns an object's identity
+               // object: Object
+               //              The object to get the identity from
+               //      returns: Number
+               return object[this.idProperty];
+       },
+       put: function(object, options){
+               // summary:
+               //              Stores an object. This will trigger a PUT request to the server
+               //              if the object has an id, otherwise it will trigger a POST request.
+               // object: Object
+               //              The object to store.
+               // options: dojo.store.api.Store.PutDirectives?
+               //              Additional metadata for storing the data.  Includes an "id"
+               //              property if a specific id is to be used.
+               //      returns: Number
+               options = options || {};
+               var id = ("id" in options) ? options.id : this.getIdentity(object);
+               var hasId = typeof id != "undefined";
+               return dojo.xhr(hasId && !options.incremental ? "PUT" : "POST", {
+                               url: hasId ? this.target + id : this.target,
+                               postData: dojo.toJson(object),
+                               handleAs: "json",
+                               headers:{
+                                       "Content-Type": "application/json",
+                                       "If-Match": options.overwrite === true ? "*" : null,
+                                       "If-None-Match": options.overwrite === false ? "*" : null
+                               }
+                       });
+       },
+       add: function(object, options){
+               // summary:
+               //              Adds an object. This will trigger a PUT request to the server
+               //              if the object has an id, otherwise it will trigger a POST request.
+               // object: Object
+               //              The object to store.
+               // options: dojo.store.api.Store.PutDirectives?
+               //              Additional metadata for storing the data.  Includes an "id"
+               //              property if a specific id is to be used.
+               options = options || {};
+               options.overwrite = false;
+               return this.put(object, options);
+       },
+       remove: function(id){
+               // summary:
+               //              Deletes an object by its identity. This will trigger a DELETE request to the server.
+               // id: Number
+               //              The identity to use to delete the object
+               return dojo.xhrDelete({
+                       url:this.target + id
+               });
+       },
+       query: function(query, options){
+               // summary:
+               //              Queries the store for objects. This will trigger a GET request to the server, with the
+               //              query added as a query string.
+               // query: Object
+               //              The query to use for retrieving objects from the store.
+               // options: dojo.store.api.Store.QueryOptions?
+               //              The optional arguments to apply to the resultset.
+               //      returns: dojo.store.api.Store.QueryResults
+               //              The results of the query, extended with iterative methods.
+               var headers = {Accept: "application/javascript, application/json"};
+               options = options || {};
+
+               if(options.start >= 0 || options.count >= 0){
+                       headers.Range = "items=" + (options.start || '0') + '-' +
+                               (("count" in options && options.count != Infinity) ?
+                                       (options.count + (options.start || 0) - 1) : '');
+               }
+               if(dojo.isObject(query)){
+                       query = dojo.objectToQuery(query);
+                       query = query ? "?" + query: "";
+               }
+               if(options && options.sort){
+                       query += (query ? "&" : "?") + "sort(";
+                       for(var i = 0; i<options.sort.length; i++){
+                               var sort = options.sort[i];
+                               query += (i > 0 ? "," : "") + (sort.descending ? '-' : '+') + encodeURIComponent(sort.attribute);
+                       }
+                       query += ")";
+               }
+               var results = dojo.xhrGet({
+                       url: this.target + (query || ""),
+                       handleAs: "json",
+                       headers: headers
+               });
+               results.total = results.then(function(){
+                       var range = results.ioArgs.xhr.getResponseHeader("Content-Range");
+                       return range && (range=range.match(/\/(.*)/)) && +range[1];
+               });
+               return dojo.store.util.QueryResults(results);
+       }
+});
+
+}
diff --git a/lib/dojo/store/Memory.js b/lib/dojo/store/Memory.js
new file mode 100644 (file)
index 0000000..b9001cd
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.store.Memory"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.store.Memory"] = true;
+dojo.provide("dojo.store.Memory");
+dojo.require("dojo.store.util.QueryResults");
+dojo.require("dojo.store.util.SimpleQueryEngine");
+
+
+dojo.declare("dojo.store.Memory", null, {
+       // summary:
+       //              This is a basic in-memory object store. It implements dojo.store.api.Store.
+       constructor: function(/*dojo.store.Memory*/ options){
+               // summary:
+               //              Creates a memory object store.
+               // options:
+               //              This provides any configuration information that will be mixed into the store.
+               //              This should generally include the data property to provide the starting set of data.
+               this.index = {};
+               dojo.mixin(this, options);
+               this.setData(this.data || []);
+       },
+       // data: Array
+       //              The array of all the objects in the memory store
+       data:null,
+
+       // idProperty: String
+       //              Indicates the property to use as the identity property. The values of this
+       //              property should be unique.
+       idProperty: "id",
+
+       // index: Object
+       //              An index of data by id
+       index:null,
+
+       // queryEngine: Function
+       //              Defines the query engine to use for querying the data store
+       queryEngine: dojo.store.util.SimpleQueryEngine,
+       get: function(id){
+               //      summary:
+               //              Retrieves an object by its identity
+               //      id: Number
+               //              The identity to use to lookup the object
+               //      returns: Object
+               //              The object in the store that matches the given id.
+               return this.index[id];
+       },
+       getIdentity: function(object){
+               //      summary:
+               //              Returns an object's identity
+               //      object: Object
+               //              The object to get the identity from
+               //      returns: Number
+               return object[this.idProperty];
+       },
+       put: function(object, options){
+               //      summary:
+               //              Stores an object
+               //      object: Object
+               //              The object to store.
+               //      options: dojo.store.api.Store.PutDirectives??
+               //              Additional metadata for storing the data.  Includes an "id"
+               //              property if a specific id is to be used.
+               //      returns: Number
+               var id = options && options.id || object[this.idProperty] || Math.random();
+               this.index[id] = object;
+               var data = this.data,
+                       idProperty = this.idProperty;
+               for(var i = 0, l = data.length; i < l; i++){
+                       if(data[i][idProperty] == id){
+                               data[i] = object;
+                               return id;
+                       }
+               }
+               this.data.push(object);
+               return id;
+       },
+       add: function(object, options){
+               //      summary:
+               //              Creates an object, throws an error if the object already exists
+               //      object: Object
+               //              The object to store.
+               //      options: dojo.store.api.Store.PutDirectives??
+               //              Additional metadata for storing the data.  Includes an "id"
+               //              property if a specific id is to be used.
+               //      returns: Number
+               if(this.index[options && options.id || object[this.idProperty]]){
+                       throw new Error("Object already exists");
+               }
+               return this.put(object, options);
+       },
+       remove: function(id){
+               //      summary:
+               //              Deletes an object by its identity
+               //      id: Number
+               //              The identity to use to delete the object
+               delete this.index[id];
+               var data = this.data,
+                       idProperty = this.idProperty;
+               for(var i = 0, l = data.length; i < l; i++){
+                       if(data[i][idProperty] == id){
+                               data.splice(i, 1);
+                               return;
+                       }
+               }
+       },
+       query: function(query, options){
+               //      summary:
+               //              Queries the store for objects.
+               //      query: Object
+               //              The query to use for retrieving objects from the store.
+               //      options: dojo.store.api.Store.QueryOptions?
+               //              The optional arguments to apply to the resultset.
+               //      returns: dojo.store.api.Store.QueryResults
+               //              The results of the query, extended with iterative methods.
+               //
+               //      example:
+               //              Given the following store:
+               //
+               //      |       var store = new dojo.store.Memory({
+               //      |               data: [
+               //      |                       {id: 1, name: "one", prime: false },
+               //      |                       {id: 2, name: "two", even: true, prime: true},
+               //      |                       {id: 3, name: "three", prime: true},
+               //      |                       {id: 4, name: "four", even: true, prime: false},
+               //      |                       {id: 5, name: "five", prime: true}
+               //      |               ]
+               //      |       });
+               //
+               //      ...find all items where "prime" is true:
+               //
+               //      |       var results = store.query({ prime: true });
+               //
+               //      ...or find all items where "even" is true:
+               //
+               //      |       var results = store.query({ even: true });
+               return dojo.store.util.QueryResults(this.queryEngine(query, options)(this.data));
+       },
+       setData: function(data){
+               //      summary:
+               //              Sets the given data as the source for this store, and indexes it
+               //      data: Object[]
+               //              An array of objects to use as the source of data.
+               if(data.items){
+                       // just for convenience with the data format IFRS expects
+                       this.idProperty = data.identifier;
+                       data = this.data = data.items;
+               }else{
+                       this.data = data;
+               }
+
+               for(var i = 0, l = data.length; i < l; i++){
+                       var object = data[i];
+                       this.index[object[this.idProperty]] = object;
+               }
+       }
+});
+
+}
diff --git a/lib/dojo/store/Observable.js b/lib/dojo/store/Observable.js
new file mode 100644 (file)
index 0000000..f231e03
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.store.Observable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.store.Observable"] = true;
+dojo.provide("dojo.store.Observable");
+
+dojo.getObject("store", true, dojo);
+
+dojo.store.Observable = function(store){
+       // summary:
+       //              The Observable store wrapper takes a store and sets an observe method on query()
+       //              results that can be used to monitor results for changes.
+       //
+       // description:
+       //              Observable wraps an existing store so that notifications can be made when a query
+       //              is performed.
+       //
+       // example:
+       //              Create a Memory store that returns an observable query, and then log some
+       //              information about that query.
+       //
+       //      |       var store = dojo.store.Observable(new dojo.store.Memory({
+       //      |               data: [
+       //      |                       {id: 1, name: "one", prime: false},
+       //      |                       {id: 2, name: "two", even: true, prime: true},
+       //      |                       {id: 3, name: "three", prime: true},
+       //      |                       {id: 4, name: "four", even: true, prime: false},
+       //      |                       {id: 5, name: "five", prime: true}
+       //      |               ]
+       //      |       }));
+       //      |       var changes = [], results = store.query({ prime: true });
+       //      |       var observer = results.observe(function(object, previousIndex, newIndex){
+       //      |               changes.push({previousIndex:previousIndex, newIndex:newIndex, object:object});
+       //      |       });
+       //
+       //              See the Observable tests for more information.
+
+       var queryUpdaters = [], revision = 0;
+       // a Comet driven store could directly call notify to notify observers when data has
+       // changed on the backend
+       store.notify = function(object, existingId){
+               revision++;
+               var updaters = queryUpdaters.slice();
+               for(var i = 0, l = updaters.length; i < l; i++){
+                       updaters[i](object, existingId);
+               }
+       };
+       var originalQuery = store.query;
+       store.query = function(query, options){
+               options = options || {};
+               var results = originalQuery.apply(this, arguments);
+               if(results && results.forEach){
+                       var nonPagedOptions = dojo.mixin({}, options);
+                       delete nonPagedOptions.start;
+                       delete nonPagedOptions.count;
+
+                       var queryExecutor = store.queryEngine && store.queryEngine(query, nonPagedOptions);
+                       var queryRevision = revision;
+                       var listeners = [], queryUpdater;
+                       results.observe = function(listener, includeObjectUpdates){
+                               if(listeners.push(listener) == 1){
+                                       // first listener was added, create the query checker and updater
+                                       queryUpdaters.push(queryUpdater = function(changed, existingId){
+                                               dojo.when(results, function(resultsArray){
+                                                       var atEnd = resultsArray.length != options.count;
+                                                       var i;
+                                                       if(++queryRevision != revision){
+                                                               throw new Error("Query is out of date, you must observe() the query prior to any data modifications");
+                                                       }
+                                                       var removedObject, removedFrom = -1, insertedInto = -1;
+                                                       if(existingId){
+                                                               // remove the old one
+                                                               for(i = 0, l = resultsArray.length; i < l; i++){
+                                                                       var object = resultsArray[i];
+                                                                       if(store.getIdentity(object) == existingId){
+                                                                               removedObject = object;
+                                                                               removedFrom = i;
+                                                                               if(queryExecutor || !changed){// if it was changed and we don't have a queryExecutor, we shouldn't remove it because updated objects would be eliminated
+                                                                                       resultsArray.splice(i, 1);
+                                                                               }
+                                                                               break;
+                                                                       }
+                                                               }
+                                                       }
+                                                       if(queryExecutor){
+                                                               // add the new one
+                                                               if(changed &&
+                                                                               // if a matches function exists, use that (probably more efficient)
+                                                                               (queryExecutor.matches ? queryExecutor.matches(changed) : queryExecutor([changed]).length)){
+
+                                                                       if(removedFrom > -1){
+                                                                               // put back in the original slot so it doesn't move unless it needs to (relying on a stable sort below)
+                                                                               resultsArray.splice(removedFrom, 0, changed);
+                                                                       }else{
+                                                                               resultsArray.push(changed);
+                                                                       }
+                                                                       insertedInto = dojo.indexOf(queryExecutor(resultsArray), changed);
+                                                                       if((options.start && insertedInto == 0) ||
+                                                                               (!atEnd && insertedInto == resultsArray.length -1)){
+                                                                               // if it is at the end of the page, assume it goes into the prev or next page
+                                                                               insertedInto = -1;
+                                                                       }
+                                                               }
+                                                       }else if(changed){
+                                                               // we don't have a queryEngine, so we can't provide any information
+                                                               // about where it was inserted, but we can at least indicate a new object
+                                                               insertedInto = removedFrom >= 0 ? removedFrom : (store.defaultIndex || 0);
+                                                       }
+                                                       if((removedFrom > -1 || insertedInto > -1) &&
+                                                                       (includeObjectUpdates || !queryExecutor || (removedFrom != insertedInto))){
+                                                               var copyListeners = listeners.slice();
+                                                               for(i = 0;listener = copyListeners[i]; i++){
+                                                                       listener(changed || removedObject, removedFrom, insertedInto);
+                                                               }
+                                                       }
+                                               });
+                                       });
+                               }
+                               return {
+                                       cancel: function(){
+                                               // remove this listener
+                                               listeners.splice(dojo.indexOf(listeners, listener), 1);
+                                               if(!listeners.length){
+                                                       // no more listeners, remove the query updater too
+                                                       queryUpdaters.splice(dojo.indexOf(queryUpdaters, queryUpdater), 1);
+                                               }
+                                       }
+                               };
+                       };
+               }
+               return results;
+       };
+       var inMethod;
+       function whenFinished(method, action){
+               var original = store[method];
+               if(original){
+                       store[method] = function(value){
+                               if(inMethod){
+                                       // if one method calls another (like add() calling put()) we don't want two events
+                                       return original.apply(this, arguments);
+                               }
+                               inMethod = true;
+                               try{
+                                       return dojo.when(original.apply(this, arguments), function(results){
+                                               action((typeof results == "object" && results) || value);
+                                               return results;
+                                       });
+                               }finally{
+                                       inMethod = false;
+                               }
+                       };
+               }
+       }
+       // monitor for updates by listening to these methods
+       whenFinished("put", function(object){
+               store.notify(object, store.getIdentity(object));
+       });
+       whenFinished("add", function(object){
+               store.notify(object);
+       });
+       whenFinished("remove", function(id){
+               store.notify(undefined, id);
+       });
+
+       return store;
+};
+
+}
diff --git a/lib/dojo/store/README b/lib/dojo/store/README
new file mode 100644 (file)
index 0000000..cb33da0
--- /dev/null
@@ -0,0 +1,10 @@
+This folder contains the stores and utilities implementing the proposed new Dojo Object Store API,
+a successor and unifier to Dojo Data, Dojo Storage, and potentially Dojo Model. These
+stores are brand new, and designed to provide simple lightweight implementations 
+providing core functionality for typical applications. These modules are under active 
+development, and exist here at this time to provide maximum visibility to the 
+efforts to design and develop this new API and set of base stores. The goal is 
+to have these stores ready for Dojo 1.6. In the meantime, these stores are likely to
+have API changes, may be missing some functionality, tests, and/or documentation.
+If these modules are not deemed suitably stable by the 1.6 release, this directory (or
+individual modules) will be removed and be given a later release target.  
\ No newline at end of file
diff --git a/lib/dojo/store/api/Store.js b/lib/dojo/store/api/Store.js
new file mode 100644 (file)
index 0000000..ca26226
--- /dev/null
@@ -0,0 +1,304 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+       Available via Academic Free License >= 2.1 OR the modified BSD license.
+       see: http://dojotoolkit.org/license for details
+*/
+
+
+define([], function() {
+  //  module:
+  //    dojo/store/api/Store
+  //  summary:
+  //    The module defines the Dojo object store interface.
+
+dojo.declare("dojo.store.api.Store", null, {
+       //      summary:
+       //              This is an abstract API that data provider implementations conform to.
+       //              This file defines methods signatures and intentionally leaves all the
+       //              methods unimplemented.  For more information on the dojo.store APIs,
+       //              please visit: http://dojotoolkit.org/reference-guide/dojo/store.html
+       //              Every method and property is optional, and is only needed if the functionality
+       //              it provides is required.
+       //              Every method may return a promise for the specified return value if the 
+       //              execution of the operation is asynchronous (except
+       //              for query() which already defines an async return value).
+
+       // idProperty: String
+       //              If the store has a single primary key, this tndicates the property to use as the 
+       //              identity property. The values of this property should be unique.
+       idProperty: "id",
+
+       // queryEngine: Function
+       //              If the store can be queried locally (on the client side in JS), this defines 
+       //              the query engine to use for querying the data store. 
+       //              This takes a query and query options and returns a function that can execute 
+       //              the provided query on a JavaScript array. The queryEngine may be replace to 
+       //              provide more sophisticated querying capabilities. For example:
+       //              | var query = store.queryEngine({foo:"bar"}, {count:10});
+       //              | query(someArray) -> filtered array
+       //              The returned query function may have a "matches" property that can be 
+       //              used to determine if an object matches the query. For example:
+       //              | query.matches({id:"some-object", foo:"bar"}) -> true
+       //              | query.matches({id:"some-object", foo:"something else"}) -> false
+       queryEngine: null,
+
+       get: function(id){
+               //      summary:
+               //              Retrieves an object by its identity
+               //      id: Number
+               //              The identity to use to lookup the object
+               //      returns: Object
+               //              The object in the store that matches the given id.
+       },
+       getIdentity: function(object){
+               //      summary:
+               //              Returns an object's identity
+               //      object: Object
+               //              The object to get the identity from
+               //      returns: String|Number
+       },
+       put: function(object, directives){
+               //      summary:
+               //              Stores an object
+               //      object: Object
+               //              The object to store.
+               // directives: dojo.store.api.Store.PutDirectives?
+               //              Additional directives for storing objects.
+               //      returns: Number|String
+       },
+       add: function(object, directives){
+               //      summary:
+               //              Creates an object, throws an error if the object already exists
+               //      object: Object
+               //              The object to store.
+               // directives: dojo.store.api.Store.PutDirectives?
+               //              Additional directives for creating objects.
+               //      returns: Number|String
+       },
+       remove: function(id){
+               //      summary:
+               //              Deletes an object by its identity
+               //      id: Number
+               //              The identity to use to delete the object
+               delete this.index[id];
+               var data = this.data,
+                       idProperty = this.idProperty;
+               for(var i = 0, l = data.length; i < l; i++){
+                       if(data[i][idProperty] == id){
+                               data.splice(i, 1);
+                               return;
+                       }
+               }
+       },
+       query: function(query, options){
+               //      summary:
+               //              Queries the store for objects. This does not alter the store, but returns a 
+               //              set of data from the store.
+               //      query: String|Object|Function
+               //              The query to use for retrieving objects from the store.
+               //      options: dojo.store.api.Store.QueryOptions
+               //              The optional arguments to apply to the resultset.
+               //      returns: dojo.store.api.Store.QueryResults
+               //              The results of the query, extended with iterative methods.
+               //
+               //      example:
+               //              Given the following store:
+               //
+               //      ...find all items where "prime" is true:
+               //
+               //      |       store.query({ prime: true }).forEach(function(object){
+               //      |               // handle each object
+               //      |       });
+       },
+       transaction: function(){
+               // summary:
+               //              Starts a new transaction.
+               //              Note that a store user might not call transaction() prior to using put, 
+               //              delete, etc. in which case these operations effectively could be thought of 
+               //              as "auto-commit" style actions.
+               //      returns: dojo.store.api.Store.Transaction
+               //              This represents the new current transaction.
+       },
+       getChildren: function(parent, options){
+               //      summary:
+               //              Retrieves the children of an object.
+               // parent: Object
+               //              The object to find the children of.
+               // options: dojo.store.api.Store.QueryOptions?
+               //              Additional options to apply to the retrieval of the children.
+               // returns: dojo.store.api.Store.QueryResults
+               //              A result set of the children of the parent object. 
+       },
+       getMetadata: function(object){
+               // summary:
+               //              Returns any metadata about the object. This may include attribution, 
+               //              cache directives, history, or version information.
+               //      object: Object
+               //              The object to return metadata for.
+               //      returns: Object
+               //              An object containing metadata.
+       }
+});
+
+dojo.store.api.Store.PutDirectives = function(id, before, parent, overwrite){
+       // summary:
+       //              Directives passed to put() and add() handlers for guiding the update and 
+       //              creation of stored objects.  
+       // id: String|Number?
+       //              Indicates the identity of the object if a new object is created
+       // before: Object?
+       //              If the collection of objects in the store has a natural ordering, 
+       //              this indicates that the created or updated object should be placed before the 
+       //              object specified by the value of this property. A value of null indicates that the 
+       //              object should be last.
+       // parent: Object?,
+       //              If the store is hierarchical (with single parenting) this property indicates the 
+       //              new parent of the created or updated object.
+       // overwrite: Boolean?
+       //              If this is provided as a boolean it indicates that the object should or should not 
+       //              overwrite an existing object. A value of true indicates that a new object 
+       //              should not be created, the operation should update an existing object. A 
+       //              value of false indicates that an existing object should not be updated, a new 
+       //              object should be created (which is the same as an add() operation). When 
+       //              this property is not provided, either an update or creation is acceptable.
+       this.id = id;
+       this.before = before;
+       this.parent = parent;
+       this.overwrite = overwrite;
+};
+
+dojo.store.api.Store.SortInformation = function(attribute, descending){
+       // summary:
+       //              An object describing what attribute to sort on, and the direction of the sort.
+       // attribute: String
+       //              The name of the attribute to sort on.
+       // descending: Boolean
+       //              The direction of the sort.  Default is false.
+       this.attribute = attribute;
+       this.descending = descending;
+};
+
+dojo.store.api.Store.QueryOptions = function(sort, start, count){
+       // summary:
+       //              Optional object with additional parameters for query results.
+       // sort: dojo.store.api.Store.SortInformation[]?
+       //              A list of attributes to sort on, as well as direction
+       //              For example: 
+       //              | [{attribute:"price, descending: true}]. 
+       //              If the sort parameter is omitted, then the natural order of the store may be 
+       //              applied if there is a natural order.    
+       // start: Number?
+       //              The first result to begin iteration on
+       // count: Number?
+       //              The number of how many results should be returned.
+       this.sort = sort;
+       this.start = start;
+       this.count = count;
+};
+
+dojo.declare("dojo.store.api.Store.QueryResults", null, {
+       // summary:
+       //              This is an object returned from query() calls that provides access to the results 
+       //              of a query. Queries may be executed asynchronously.
+       
+       forEach: function(callback, thisObject){
+               // summary:
+               //              Iterates over the query results, based on 
+               //              https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach.
+               //              Note that this may executed asynchronously. The callback may be called
+               //              after this function returns.
+               //      callback:
+               //              Function that is called for each object in the query results
+               //      thisObject:
+               //              The object to use as |this| in the callback.
+               
+       },
+       filter: function(callback, thisObject){
+               // summary:
+               //              Filters the query results, based on 
+               //              https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter.
+               //              Note that this may executed asynchronously. The callback may be called
+               //              after this function returns.
+               //      callback:
+               //              Function that is called for each object in the query results
+               //      thisObject:
+               //              The object to use as |this| in the callback.
+               //      returns: dojo.store.api.Store.QueryResults
+       },
+       map: function(callback, thisObject){
+               // summary:
+               //              Maps the query results, based on 
+               //              https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map.
+               //              Note that this may executed asynchronously. The callback may be called
+               //              after this function returns.
+               //      callback:
+               //              Function that is called for each object in the query results
+               //      thisObject:
+               //              The object to use as |this| in the callback.
+               //      returns: dojo.store.api.Store.QueryResults
+       },
+       then: function(callback, errorHandler){
+               // summary:
+               //              This registers a callback for when the query is complete, if the query is asynchronous.
+               //              This is an optional method, and may not be present for synchronous queries.
+               //      callback:
+               //              This is called when the query is completed successfully, and is passed a single argument 
+               //              that is an array representing the query results.
+               //      errorHandler:
+               //              This is called if the query failed, and is passed a single argument that is the error
+               //              for the failure.
+       },
+       observe: function(listener, includeAllUpdates){
+               // summary:
+               //              This registers a callback for notification of when data is modified in the query results.
+               //              This is an optional method, and is usually provided by dojo.store.Observable.
+               //      listener: Function
+               //              The listener function is called when objects in the query results are modified 
+               //              to affect the query result. The listener function is called with the following 
+               //              arguments: 
+               //              | listener(object, removedFrom, insertedInto);
+               //              * The object parameter indicates the object that was create, modified, or deleted.
+               //              * The removedFrom parameter indicates the index in the result array where 
+               //              the object used to be. If the value is -1, then the object is an addition to 
+               //              this result set (due to a new object being created, or changed such that it 
+               //              is a part of the result set).
+               //              * The insertedInto parameter indicates the index in the result array where 
+               //              the object should be now. If the value is -1, then the object is a removal 
+               //              from this result set (due to an object being deleted, or changed such that it 
+               //              is not a part of the result set).
+               //      includeAllUpdates:
+               //              This indicates whether or not to include object updates that do not affect
+               //              the inclusion or order of the object in the query results. By default this is false,
+               //              which means that if any object is updated in such a way that it remains
+               //              in the result set and it's position in result sets is not affected, then the listener 
+               //              will not be fired. 
+               
+       },
+       // total: Number|Promise?
+       //              This property should be included in if the query options included the "count" 
+       //              property limiting the result set. This property indicates the total number of objects
+       //              matching the query (as if "start" and "count" weren't present). This may be
+       //              a promise if the query is asynchronous.
+       total: 0 
+});
+
+dojo.declare("dojo.store.api.Store.Transaction", null, {
+       // summary:
+       //              This is an object returned from transaction() calls that represents the current
+       //              transaction.
+       
+       commit: function(){
+               // summary:
+               //              Commits the transaction. This may throw an error if it fails. Of if the operation
+               //              is asynchronous, it may return a promise that represents the eventual success
+               //              or failure of the commit.               
+       },
+       abort: function(callback, thisObject){
+               // summary:
+               //              Aborts the transaction. This may throw an error if it fails. Of if the operation
+               //              is asynchronous, it may return a promise that represents the eventual success
+               //              or failure of the abort.
+       }
+});
+       
+});
diff --git a/lib/dojo/store/util/QueryResults.js b/lib/dojo/store/util/QueryResults.js
new file mode 100644 (file)
index 0000000..a237d1d
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.store.util.QueryResults"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.store.util.QueryResults"] = true;
+dojo.provide("dojo.store.util.QueryResults");
+
+dojo.getObject("store.util", true, dojo);
+
+dojo.store.util.QueryResults = function(results){
+       // summary:
+       //              A function that wraps the results of a store query with additional
+       //              methods.
+       //
+       // description:
+       //              QueryResults is a basic wrapper that allows for array-like iteration
+       //              over any kind of returned data from a query.  While the simplest store
+       //              will return a plain array of data, other stores may return deferreds or
+       //              promises; this wrapper makes sure that *all* results can be treated
+       //              the same.
+       //
+       //              Additional methods include `forEach`, `filter` and `map`.
+       //
+       // returns: Object
+       //              An array-like object that can be used for iterating over.
+       //
+       // example:
+       //              Query a store and iterate over the results.
+       //
+       //      |       store.query({ prime: true }).forEach(function(item){
+       //      |               //      do something
+       //      |       });
+       
+       if(!results){
+               return results;
+       }
+       // if it is a promise it may be frozen
+       if(results.then){
+               results = dojo.delegate(results);
+       }
+       function addIterativeMethod(method){
+               if(!results[method]){
+                       results[method] = function(){
+                               var args = arguments;
+                               return dojo.when(results, function(results){
+                                       Array.prototype.unshift.call(args, results);
+                                       return dojo.store.util.QueryResults(dojo[method].apply(dojo, args));
+                               });
+                       };
+               }
+       }
+       addIterativeMethod("forEach");
+       addIterativeMethod("filter");
+       addIterativeMethod("map");
+       if(!results.total){
+               results.total = dojo.when(results, function(results){
+                       return results.length;
+               });
+       }
+       return results;
+};
+
+}
diff --git a/lib/dojo/store/util/SimpleQueryEngine.js b/lib/dojo/store/util/SimpleQueryEngine.js
new file mode 100644 (file)
index 0000000..4b29f20
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+       Copyright (c) 2004-2011, The Dojo Foundation All 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.store.util.SimpleQueryEngine"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.store.util.SimpleQueryEngine"] = true;
+dojo.provide("dojo.store.util.SimpleQueryEngine");
+
+dojo.getObject("store.util", true, dojo);
+
+dojo.store.util.SimpleQueryEngine = function(query, options){
+       // summary:
+       //              Simple query engine that matches using filter functions, named filter
+       //              functions or objects by name-value on a query object hash
+       //
+       // description:
+       //              The SimpleQueryEngine provides a way of getting a QueryResults through
+       //              the use of a simple object hash as a filter.  The hash will be used to
+       //              match properties on data objects with the corresponding value given. In
+       //              other words, only exact matches will be returned.
+       //
+       //              This function can be used as a template for more complex query engines;
+       //              for example, an engine can be created that accepts an object hash that
+       //              contains filtering functions, or a string that gets evaluated, etc.
+       //
+       //              When creating a new dojo.store, simply set the store's queryEngine
+       //              field as a reference to this function.
+       //
+       // query: Object
+       //              An object hash with fields that may match fields of items in the store.
+       //              Values in the hash will be compared by normal == operator, but regular expressions
+       //              or any object that provides a test() method are also supported and can be
+       //              used to match strings by more complex expressions
+       //              (and then the regex's or object's test() method will be used to match values).
+       //
+       // options: dojo.store.util.SimpleQueryEngine.__queryOptions?
+       //              An object that contains optional information such as sort, start, and count.
+       //
+       // returns: Function
+       //              A function that caches the passed query under the field "matches".  See any
+       //              of the "query" methods on dojo.stores.
+       //
+       // example:
+       //              Define a store with a reference to this engine, and set up a query method.
+       //
+       //      |       var myStore = function(options){
+       //      |               //      ...more properties here
+       //      |               this.queryEngine = dojo.store.util.SimpleQueryEngine;
+       //      |               //      define our query method
+       //      |               this.query = function(query, options){
+       //      |                       return dojo.store.util.QueryResults(this.queryEngine(query, options)(this.data));
+       //      |               };
+       //      |       };
+
+       // create our matching query function
+       switch(typeof query){
+               default:
+                       throw new Error("Can not query with a " + typeof query);
+               case "object": case "undefined":
+                       var queryObject = query;
+                       query = function(object){
+                               for(var key in queryObject){
+                                       var required = queryObject[key];
+                                       if(required && required.test){
+                                               if(!required.test(object[key])){
+                                                       return false;
+                                               }
+                                       }else if(required != object[key]){
+                                               return false;
+                                       }
+                               }
+                               return true;
+                       };
+                       break;
+               case "string":
+                       // named query
+                       if(!this[query]){
+                               throw new Error("No filter function " + query + " was found in store");
+                       }
+                       query = this[query];
+                       // fall through
+               case "function":
+                       // fall through
+       }
+       function execute(array){
+               // execute the whole query, first we filter
+               var results = dojo.filter(array, query);
+               // next we sort
+               if(options && options.sort){
+                       results.sort(function(a, b){
+                               for(var sort, i=0; sort = options.sort[i]; i++){
+                                       var aValue = a[sort.attribute];
+                                       var bValue = b[sort.attribute];
+                                       if (aValue != bValue) {
+                                               return !!sort.descending == aValue > bValue ? -1 : 1;
+                                       }
+                               }
+                               return 0;
+                       });
+               }
+               // now we paginate
+               if(options && (options.start || options.count)){
+                       var total = results.length;
+                       results = results.slice(options.start || 0, (options.start || 0) + (options.count || Infinity));
+                       results.total = total;
+               }
+               return results;
+       }
+       execute.matches = query;
+       return execute;
+};
+
+}
index 1eba340433e92e48a7a8fd35d216d745d4fdc7ff..2e1cc5015b172a42769faef875b02e7f92e4f5f3 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,8 +9,10 @@ if(!dojo._hasResource["dojo.string"]){ //_hasResource checks added by build. Do
 dojo._hasResource["dojo.string"] = true;
 dojo.provide("dojo.string");
 
+dojo.getObject("string", true, dojo);
+
 /*=====
-dojo.string = { 
+dojo.string = {
        // summary: String utilities for Dojo
 };
 =====*/
@@ -61,22 +63,22 @@ dojo.string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boo
        return end ? out + pad : pad + out;     // String
 };
 
-dojo.string.substitute = function(     /*String*/              template, 
-                                                                       /*Object|Array*/map, 
-                                                                       /*Function?*/   transform, 
+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: 
+       //      template:
        //              a string with expressions in the form `${key}` to be replaced or
-       //              `${key:format}` which specifies a format function. keys are case-sensitive. 
+       //              `${key:format}` which specifies a format function. keys are case-sensitive.
        //      map:
        //              hash to search for substitutions
-       //      transform: 
+       //      transform:
        //              a function to process all parameters before substitution takes
        //              place, e.g. mylib.encodeXML
-       //      thisObject: 
+       //      thisObject:
        //              where to look for optional format function; default to the global
        //              namespace
        //      example:
@@ -119,7 +121,7 @@ dojo.string.substitute = function(  /*String*/              template,
        //      |       );
 
        thisObject = thisObject || dojo.global;
-       transform = transform ? 
+       transform = transform ?
                dojo.hitch(thisObject, transform) : function(v){ return v; };
 
        return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,
index 295fd957a3e7d51e9fcabe3af8787943e2c5d701..2c0f3489d58dab4a81a0a0fb521c99004b9dc022 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -11,4 +11,4 @@
                http://dojotoolkit.org
 */
 
-dojo.provide("tt-rss-layer");if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.date.stamp.fromISOString=function(_1,_2){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 _3=dojo.date.stamp._isoRegExp.exec(_1),_4=null;if(_3){_3.shift();if(_3[1]){_3[1]--;}if(_3[6]){_3[6]*=1000;}if(_2){_2=new Date(_2);dojo.forEach(dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_5){return _2["get"+_5]();}),function(_6,_7){_3[_7]=_3[_7]||_6;});}_4=new Date(_3[0]||1970,_3[1]||0,_3[2]||1,_3[3]||0,_3[4]||0,_3[5]||0,_3[6]||0);if(_3[0]<100){_4.setFullYear(_3[0]||1970);}var _8=0,_9=_3[7]&&_3[7].charAt(0);if(_9!="Z"){_8=((_3[8]||0)*60)+(Number(_3[9])||0);if(_9!="-"){_8*=-1;}}if(_9){_8-=_4.getTimezoneOffset();}if(_8){_4.setTime(_4.getTime()+_8*60000);}}return _4;};dojo.date.stamp.toISOString=function(_a,_b){var _c=function(n){return (n<10)?"0"+n:n;};_b=_b||{};var _d=[],_e=_b.zulu?"getUTC":"get",_f="";if(_b.selector!="time"){var _10=_a[_e+"FullYear"]();_f=["0000".substr((_10+"").length)+_10,_c(_a[_e+"Month"]()+1),_c(_a[_e+"Date"]())].join("-");}_d.push(_f);if(_b.selector!="date"){var _11=[_c(_a[_e+"Hours"]()),_c(_a[_e+"Minutes"]()),_c(_a[_e+"Seconds"]())].join(":");var _12=_a[_e+"Milliseconds"]();if(_b.milliseconds){_11+="."+(_12<100?"0":"")+_c(_12);}if(_b.zulu){_11+="Z";}else{if(_b.selector!="time"){var _13=_a.getTimezoneOffset();var _14=Math.abs(_13);_11+=(_13>0?"-":"+")+_c(Math.floor(_14/60))+":"+_c(_14%60);}}_d.push(_11);}return _d.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");new Date("X");dojo.parser=new function(){var d=dojo;this._attrName=d._scopeName+"Type";this._query="["+this._attrName+"]";function _15(_16){if(d.isString(_16)){return "string";}if(typeof _16=="number"){return "number";}if(typeof _16=="boolean"){return "boolean";}if(d.isFunction(_16)){return "function";}if(d.isArray(_16)){return "array";}if(_16 instanceof Date){return "date";}if(_16 instanceof d._Url){return "url";}return "object";};function _17(_18,_19){switch(_19){case "string":return _18;case "number":return _18.length?Number(_18):NaN;case "boolean":return typeof _18=="boolean"?_18:!(_18.toLowerCase()=="false");case "function":if(d.isFunction(_18)){_18=_18.toString();_18=d.trim(_18.substring(_18.indexOf("{")+1,_18.length-1));}try{if(_18===""||_18.search(/[^\w\.]+/i)!=-1){return new Function(_18);}else{return d.getObject(_18,false)||new Function(_18);}}catch(e){return new Function();}case "array":return _18?_18.split(/\s*,\s*/):[];case "date":switch(_18){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_18);}case "url":return d.baseUrl+_18;default:return d.fromJson(_18);}};var _1a={};dojo.connect(dojo,"extend",function(){_1a={};});function _1b(_1c){if(!_1a[_1c]){var cls=d.getObject(_1c);if(!cls){return null;}var _1d=cls.prototype;var _1e={},_1f={};for(var _20 in _1d){if(_20.charAt(0)=="_"){continue;}if(_20 in _1f){continue;}var _21=_1d[_20];_1e[_20]=_15(_21);}_1a[_1c]={cls:cls,params:_1e};}return _1a[_1c];};this._functionFromScript=function(_22){var _23="";var _24="";var _25=_22.getAttribute("args");if(_25){d.forEach(_25.split(/\s*,\s*/),function(_26,idx){_23+="var "+_26+" = arguments["+idx+"]; ";});}var _27=_22.getAttribute("with");if(_27&&_27.length){d.forEach(_27.split(/\s*,\s*/),function(_28){_23+="with("+_28+"){";_24+="}";});}return new Function(_23+_22.innerHTML+_24);};this.instantiate=function(_29,_2a,_2b){var _2c=[],dp=dojo.parser;_2a=_2a||{};_2b=_2b||{};d.forEach(_29,function(obj){if(!obj){return;}var _2d,_2e,_2f,_30,_31;if(obj.node){_2d=obj.node;_2e=obj.type;_2f=obj.clsInfo||(_2e&&_1b(_2e));_30=_2f&&_2f.cls;_31=obj.scripts;}else{_2d=obj;_2e=dp._attrName in _2a?_2a[dp._attrName]:_2d.getAttribute(dp._attrName);_2f=_2e&&_1b(_2e);_30=_2f&&_2f.cls;_31=(_30&&(_30._noScript||_30.prototype._noScript)?[]:d.query("> script[type^='dojo/']",_2d));}if(!_2f){throw new Error("Could not load class '"+_2e);}var _32={},_33=_2d.attributes;if(_2b.defaults){dojo.mixin(_32,_2b.defaults);}if(obj.inherited){dojo.mixin(_32,obj.inherited);}for(var _34 in _2f.params){var _35=_34 in _2a?{value:_2a[_34],specified:true}:_33.getNamedItem(_34);if(!_35||(!_35.specified&&(!dojo.isIE||_34.toLowerCase()!="value"))){continue;}var _36=_35.value;switch(_34){case "class":_36="className" in _2a?_2a.className:_2d.className;break;case "style":_36="style" in _2a?_2a.style:(_2d.style&&_2d.style.cssText);}var _37=_2f.params[_34];if(typeof _36=="string"){_32[_34]=_17(_36,_37);}else{_32[_34]=_36;}}var _38=[],_39=[];d.forEach(_31,function(_3a){_2d.removeChild(_3a);var _3b=_3a.getAttribute("event"),_2e=_3a.getAttribute("type"),nf=d.parser._functionFromScript(_3a);if(_3b){if(_2e=="dojo/connect"){_38.push({event:_3b,func:nf});}else{_32[_3b]=nf;}}else{_39.push(nf);}});var _3c=_30.markupFactory||_30.prototype&&_30.prototype.markupFactory;var _3d=_3c?_3c(_32,_2d,_30):new _30(_32,_2d);_2c.push(_3d);var _3e=_2d.getAttribute("jsId");if(_3e){d.setObject(_3e,_3d);}d.forEach(_38,function(_3f){d.connect(_3d,_3f.event,null,_3f.func);});d.forEach(_39,function(_40){_40.call(_3d);});});if(!_2a._started){d.forEach(_2c,function(_41){if(!_2b.noStart&&_41&&_41.startup&&!_41._started&&(!_41.getParent||!_41.getParent())){_41.startup();}});}return _2c;};this.parse=function(_42,_43){var _44;if(!_43&&_42&&_42.rootNode){_43=_42;_44=_43.rootNode;}else{_44=_42;}var _45=this._attrName;function _46(_47,_48){var _49=dojo.clone(_47.inherited);dojo.forEach(["dir","lang"],function(_4a){var val=_47.node.getAttribute(_4a);if(val){_49[_4a]=val;}});var _4b=_47.scripts;var _4c=!_47.clsInfo||!_47.clsInfo.cls.prototype.stopParser;for(var _4d=_47.node.firstChild;_4d;_4d=_4d.nextSibling){if(_4d.nodeType==1){var _4e=_4c&&_4d.getAttribute(_45);if(_4e){var _4f={"type":_4e,clsInfo:_1b(_4e),node:_4d,scripts:[],inherited:_49};_48.push(_4f);_46(_4f,_48);}else{if(_4b&&_4d.nodeName.toLowerCase()=="script"){_4e=_4d.getAttribute("type");if(_4e&&/^dojo\//i.test(_4e)){_4b.push(_4d);}}else{if(_4c){_46({node:_4d,inherited:_49},_48);}}}}}};var _50=[];_46({node:_44?dojo.byId(_44):dojo.body(),inherited:(_43&&_43.inherited)||{dir:dojo._isBodyLtr()?"ltr":"rtl"}},_50);return this.instantiate(_50,null,_43);};}();(function(){var _51=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,_51);}else{dojo._loaders.unshift(_51);}})();}if(!dojo._hasResource["dojo.window"]){dojo._hasResource["dojo.window"]=true;dojo.provide("dojo.window");dojo.window.getBox=function(){var _52=(dojo.doc.compatMode=="BackCompat")?dojo.body():dojo.doc.documentElement;var _53=dojo._docScroll();return {w:_52.clientWidth,h:_52.clientHeight,l:_53.x,t:_53.y};};dojo.window.get=function(doc){if(dojo.isIE&&window!==document.parentWindow){doc.parentWindow.execScript("document._parentWindow = window;","Javascript");var win=doc._parentWindow;doc._parentWindow=null;return win;}return doc.parentWindow||doc.defaultView;};dojo.window.scrollIntoView=function(_54,pos){try{_54=dojo.byId(_54);var doc=_54.ownerDocument||dojo.doc,_55=doc.body||dojo.body(),_56=doc.documentElement||_55.parentNode,_57=dojo.isIE,_58=dojo.isWebKit;if((!(dojo.isMoz||_57||_58||dojo.isOpera)||_54==_55||_54==_56)&&(typeof _54.scrollIntoView!="undefined")){_54.scrollIntoView(false);return;}var _59=doc.compatMode=="BackCompat",_5a=_59?_55:_56,_5b=_58?_55:_5a,_5c=_5a.clientWidth,_5d=_5a.clientHeight,rtl=!dojo._isBodyLtr(),_5e=pos||dojo.position(_54),el=_54.parentNode,_5f=function(el){return ((_57<=6||(_57&&_59))?false:(dojo.style(el,"position").toLowerCase()=="fixed"));};if(_5f(_54)){return;}while(el){if(el==_55){el=_5b;}var _60=dojo.position(el),_61=_5f(el);if(el==_5b){_60.w=_5c;_60.h=_5d;if(_5b==_56&&_57&&rtl){_60.x+=_5b.offsetWidth-_60.w;}if(_60.x<0||!_57){_60.x=0;}if(_60.y<0||!_57){_60.y=0;}}else{var pb=dojo._getPadBorderExtents(el);_60.w-=pb.w;_60.h-=pb.h;_60.x+=pb.l;_60.y+=pb.t;}if(el!=_5b){var _62=el.clientWidth,_63=_60.w-_62;if(_62>0&&_63>0){_60.w=_62;if(_57&&rtl){_60.x+=_63;}}_62=el.clientHeight;_63=_60.h-_62;if(_62>0&&_63>0){_60.h=_62;}}if(_61){if(_60.y<0){_60.h+=_60.y;_60.y=0;}if(_60.x<0){_60.w+=_60.x;_60.x=0;}if(_60.y+_60.h>_5d){_60.h=_5d-_60.y;}if(_60.x+_60.w>_5c){_60.w=_5c-_60.x;}}var l=_5e.x-_60.x,t=_5e.y-Math.max(_60.y,0),r=l+_5e.w-_60.w,bot=t+_5e.h-_60.h;if(r*l>0){var s=Math[l<0?"max":"min"](l,r);_5e.x+=el.scrollLeft;el.scrollLeft+=(_57>=8&&!_59&&rtl)?-s:s;_5e.x-=el.scrollLeft;}if(bot*t>0){_5e.y+=el.scrollTop;el.scrollTop+=Math[t<0?"max":"min"](t,bot);_5e.y-=el.scrollTop;}el=(el!=_5b)&&!_61&&el.parentNode;}}catch(error){console.error("scrollIntoView: "+error);_54.scrollIntoView(false);}};}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(_64){if(this._hash[_64.id]){throw new Error("Tried to register widget with id=="+_64.id+" but that id is already registered");}this._hash[_64.id]=_64;this.length++;},remove:function(id){if(this._hash[id]){delete this._hash[id];this.length--;}},forEach:function(_65,_66){_66=_66||dojo.global;var i=0,id;for(id in this._hash){_65.call(_66,this._hash[id],i++,this._hash);}return this;},filter:function(_67,_68){_68=_68||dojo.global;var res=new dijit.WidgetSet(),i=0,id;for(id in this._hash){var w=this._hash[id];if(_67.call(_68,w,i++,this._hash)){res.add(w);}}return res;},byId:function(id){return this._hash[id];},byClass:function(cls){var res=new dijit.WidgetSet(),id,_69;for(id in this._hash){_69=this._hash[id];if(_69.declaredClass==cls){res.add(_69);}}return res;},toArray:function(){var ar=[];for(var id in this._hash){ar.push(this._hash[id]);}return ar;},map:function(_6a,_6b){return dojo.map(this.toArray(),_6a,_6b);},every:function(_6c,_6d){_6d=_6d||dojo.global;var x=0,i;for(i in this._hash){if(!_6c.call(_6d,this._hash[i],x++,this._hash)){return false;}}return true;},some:function(_6e,_6f){_6f=_6f||dojo.global;var x=0,i;for(i in this._hash){if(_6e.call(_6f,this._hash[i],x++,this._hash)){return true;}}return false;}});(function(){dijit.registry=new dijit.WidgetSet();var _70=dijit.registry._hash,_71=dojo.attr,_72=dojo.hasAttr,_73=dojo.style;dijit.byId=function(id){return typeof id=="string"?_70[id]:id;};var _74={};dijit.getUniqueId=function(_75){var id;do{id=_75+"_"+(_75 in _74?++_74[_75]:_74[_75]=0);}while(_70[id]);return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;};dijit.findWidgets=function(_76){var _77=[];function _78(_79){for(var _7a=_79.firstChild;_7a;_7a=_7a.nextSibling){if(_7a.nodeType==1){var _7b=_7a.getAttribute("widgetId");if(_7b){_77.push(_70[_7b]);}else{_78(_7a);}}}};_78(_76);return _77;};dijit._destroyAll=function(){dijit._curFocus=null;dijit._prevFocus=null;dijit._activeStack=[];dojo.forEach(dijit.findWidgets(dojo.body()),function(_7c){if(!_7c._destroyed){if(_7c.destroyRecursive){_7c.destroyRecursive();}else{if(_7c.destroy){_7c.destroy();}}}});};if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit._destroyAll();});}dijit.byNode=function(_7d){return _70[_7d.getAttribute("widgetId")];};dijit.getEnclosingWidget=function(_7e){while(_7e){var id=_7e.getAttribute&&_7e.getAttribute("widgetId");if(id){return _70[id];}_7e=_7e.parentNode;}return null;};var _7f=(dijit._isElementShown=function(_80){var s=_73(_80);return (s.visibility!="hidden")&&(s.visibility!="collapsed")&&(s.display!="none")&&(_71(_80,"type")!="hidden");});dijit.hasDefaultTabStop=function(_81){switch(_81.nodeName.toLowerCase()){case "a":return _72(_81,"href");case "area":case "button":case "input":case "object":case "select":case "textarea":return true;case "iframe":if(dojo.isMoz){try{return _81.contentDocument.designMode=="on";}catch(err){return false;}}else{if(dojo.isWebKit){var doc=_81.contentDocument,_82=doc&&doc.body;return _82&&_82.contentEditable=="true";}else{try{doc=_81.contentWindow.document;_82=doc&&doc.body;return _82&&_82.firstChild&&_82.firstChild.contentEditable=="true";}catch(e){return false;}}}default:return _81.contentEditable=="true";}};var _83=(dijit.isTabNavigable=function(_84){if(_71(_84,"disabled")){return false;}else{if(_72(_84,"tabIndex")){return _71(_84,"tabIndex")>=0;}else{return dijit.hasDefaultTabStop(_84);}}});dijit._getTabNavigable=function(_85){var _86,_87,_88,_89,_8a,_8b;var _8c=function(_8d){dojo.query("> *",_8d).forEach(function(_8e){if((dojo.isIE&&_8e.scopeName!=="HTML")||!_7f(_8e)){return;}if(_83(_8e)){var _8f=_71(_8e,"tabIndex");if(!_72(_8e,"tabIndex")||_8f==0){if(!_86){_86=_8e;}_87=_8e;}else{if(_8f>0){if(!_88||_8f<_89){_89=_8f;_88=_8e;}if(!_8a||_8f>=_8b){_8b=_8f;_8a=_8e;}}}}if(_8e.nodeName.toUpperCase()!="SELECT"){_8c(_8e);}});};if(_7f(_85)){_8c(_85);}return {first:_86,last:_87,lowest:_88,highest:_8a};};dijit.getFirstInTabbingOrder=function(_90){var _91=dijit._getTabNavigable(dojo.byId(_90));return _91.lowest?_91.lowest:_91.first;};dijit.getLastInTabbingOrder=function(_92){var _93=dijit._getTabNavigable(dojo.byId(_92));return _93.last?_93.last:_93.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(_94){var _95=dojo.doc,_96=_94.mark;if(_96){if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.removeAllRanges){if(_96.pRange){var r=_96;var n=r.node;n.selectionStart=r.start;n.selectionEnd=r.end;}else{sel.removeAllRanges();sel.addRange(_96);}}else{console.warn("No idea how to restore selection for this browser!");}}else{if(_95.selection&&_96){var rg;if(_96.pRange){rg=_96.range;}else{if(dojo.isArray(_96)){rg=_95.body.createControlRange();dojo.forEach(_96,function(n){rg.addElement(n);});}else{rg=_95.body.createTextRange();rg.moveToBookmark(_96);}}rg.select();}}}},getFocus:function(_97,_98){var _99=!dijit._curFocus||(_97&&dojo.isDescendant(dijit._curFocus,_97.domNode))?dijit._prevFocus:dijit._curFocus;return {node:_99,bookmark:(_99==dijit._curFocus)&&dojo.withGlobal(_98||dojo.global,dijit.getBookmark),openedForWindow:_98};},focus:function(_9a){if(!_9a){return;}var _9b="node" in _9a?_9a.node:_9a,_9c=_9a.bookmark,_9d=_9a.openedForWindow,_9e=_9c?_9c.isCollapsed:false;if(_9b){var _9f=(_9b.tagName.toLowerCase()=="iframe")?_9b.contentWindow:_9b;if(_9f&&_9f.focus){try{_9f.focus();}catch(e){}}dijit._onFocusNode(_9b);}if(_9c&&dojo.withGlobal(_9d||dojo.global,dijit.isCollapsed)&&!_9e){if(_9d){_9d.focus();}try{dojo.withGlobal(_9d||dojo.global,dijit.moveToBookmark,null,[_9c]);}catch(e2){}}},_activeStack:[],registerIframe:function(_a0){return dijit.registerWin(_a0.contentWindow,_a0);},unregisterIframe:function(_a1){dijit.unregisterWin(_a1);},registerWin:function(_a2,_a3){var _a4=function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){return;}dijit._onTouchNode(_a3||evt.target||evt.srcElement,"mouse");};var doc=dojo.isIE?_a2.document.documentElement:_a2.document;if(doc){if(dojo.isIE){doc.attachEvent("onmousedown",_a4);var _a5=function(evt){if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){dijit._onFocusNode(_a3||evt.srcElement);}else{dijit._onTouchNode(_a3||evt.srcElement);}};doc.attachEvent("onactivate",_a5);var _a6=function(evt){dijit._onBlurNode(_a3||evt.srcElement);};doc.attachEvent("ondeactivate",_a6);return function(){doc.detachEvent("onmousedown",_a4);doc.detachEvent("onactivate",_a5);doc.detachEvent("ondeactivate",_a6);doc=null;};}else{doc.addEventListener("mousedown",_a4,true);var _a7=function(evt){dijit._onFocusNode(_a3||evt.target);};doc.addEventListener("focus",_a7,true);var _a8=function(evt){dijit._onBlurNode(_a3||evt.target);};doc.addEventListener("blur",_a8,true);return function(){doc.removeEventListener("mousedown",_a4,true);doc.removeEventListener("focus",_a7,true);doc.removeEventListener("blur",_a8,true);doc=null;};}}},unregisterWin:function(_a9){_a9&&_a9();},_onBlurNode:function(_aa){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(_ab,by){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _ac=[];try{while(_ab){var _ad=dojo.attr(_ab,"dijitPopupParent");if(_ad){_ab=dijit.byId(_ad).domNode;}else{if(_ab.tagName&&_ab.tagName.toLowerCase()=="body"){if(_ab===dojo.body()){break;}_ab=dojo.window.get(_ab.ownerDocument).frameElement;}else{var id=_ab.getAttribute&&_ab.getAttribute("widgetId"),_ae=id&&dijit.byId(id);if(_ae&&!(by=="mouse"&&_ae.get("disabled"))){_ac.unshift(id);}_ab=_ab.parentNode;}}}}catch(e){}dijit._setStack(_ac,by);},_onFocusNode:function(_af){if(!_af){return;}if(_af.nodeType==9){return;}dijit._onTouchNode(_af);if(_af==dijit._curFocus){return;}if(dijit._curFocus){dijit._prevFocus=dijit._curFocus;}dijit._curFocus=_af;dojo.publish("focusNode",[_af]);},_setStack:function(_b0,by){var _b1=dijit._activeStack;dijit._activeStack=_b0;for(var _b2=0;_b2<Math.min(_b1.length,_b0.length);_b2++){if(_b1[_b2]!=_b0[_b2]){break;}}var _b3;for(var i=_b1.length-1;i>=_b2;i--){_b3=dijit.byId(_b1[i]);if(_b3){_b3._focused=false;_b3._hasBeenBlurred=true;if(_b3._onBlur){_b3._onBlur(by);}dojo.publish("widgetBlur",[_b3,by]);}}for(i=_b2;i<_b0.length;i++){_b3=dijit.byId(_b0[i]);if(_b3){_b3._focused=true;if(_b3._onFocus){_b3._onFocus(by);}dojo.publish("widgetFocus",[_b3,by]);}}}});dojo.addOnLoad(function(){var _b4=dijit.registerWin(window);if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit.unregisterWin(_b4);_b4=null;});}});}if(!dojo._hasResource["dojo.AdapterRegistry"]){dojo._hasResource["dojo.AdapterRegistry"]=true;dojo.provide("dojo.AdapterRegistry");dojo.AdapterRegistry=function(_b5){this.pairs=[];this.returnWrappers=_b5||false;};dojo.extend(dojo.AdapterRegistry,{register:function(_b6,_b7,_b8,_b9,_ba){this.pairs[((_ba)?"unshift":"push")]([_b6,_b7,_b8,_b9]);},match:function(){for(var i=0;i<this.pairs.length;i++){var _bb=this.pairs[i];if(_bb[1].apply(this,arguments)){if((_bb[3])||(this.returnWrappers)){return _bb[2];}else{return _bb[2].apply(this,arguments);}}}throw new Error("No match found");},unregister:function(_bc){for(var i=0;i<this.pairs.length;i++){var _bd=this.pairs[i];if(_bd[0]==_bc){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(){return dojo.window.getBox();};dijit.placeOnScreen=function(_be,pos,_bf,_c0){var _c1=dojo.map(_bf,function(_c2){var c={corner:_c2,pos:{x:pos.x,y:pos.y}};if(_c0){c.pos.x+=_c2.charAt(1)=="L"?_c0.x:-_c0.x;c.pos.y+=_c2.charAt(0)=="T"?_c0.y:-_c0.y;}return c;});return dijit._place(_be,_c1);};dijit._place=function(_c3,_c4,_c5){var _c6=dojo.window.getBox();if(!_c3.parentNode||String(_c3.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_c3);}var _c7=null;dojo.some(_c4,function(_c8){var _c9=_c8.corner;var pos=_c8.pos;if(_c5){_c5(_c3,_c8.aroundCorner,_c9);}var _ca=_c3.style;var _cb=_ca.display;var _cc=_ca.visibility;_ca.visibility="hidden";_ca.display="";var mb=dojo.marginBox(_c3);_ca.display=_cb;_ca.visibility=_cc;var _cd=Math.max(_c6.l,_c9.charAt(1)=="L"?pos.x:(pos.x-mb.w)),_ce=Math.max(_c6.t,_c9.charAt(0)=="T"?pos.y:(pos.y-mb.h)),_cf=Math.min(_c6.l+_c6.w,_c9.charAt(1)=="L"?(_cd+mb.w):pos.x),_d0=Math.min(_c6.t+_c6.h,_c9.charAt(0)=="T"?(_ce+mb.h):pos.y),_d1=_cf-_cd,_d2=_d0-_ce,_d3=(mb.w-_d1)+(mb.h-_d2);if(_c7==null||_d3<_c7.overflow){_c7={corner:_c9,aroundCorner:_c8.aroundCorner,x:_cd,y:_ce,w:_d1,h:_d2,overflow:_d3};}return !_d3;});_c3.style.left=_c7.x+"px";_c3.style.top=_c7.y+"px";if(_c7.overflow&&_c5){_c5(_c3,_c7.aroundCorner,_c7.corner);}return _c7;};dijit.placeOnScreenAroundNode=function(_d4,_d5,_d6,_d7){_d5=dojo.byId(_d5);var _d8=_d5.style.display;_d5.style.display="";var _d9=dojo.position(_d5,true);_d5.style.display=_d8;return dijit._placeOnScreenAroundRect(_d4,_d9.x,_d9.y,_d9.w,_d9.h,_d6,_d7);};dijit.placeOnScreenAroundRectangle=function(_da,_db,_dc,_dd){return dijit._placeOnScreenAroundRect(_da,_db.x,_db.y,_db.width,_db.height,_dc,_dd);};dijit._placeOnScreenAroundRect=function(_de,x,y,_df,_e0,_e1,_e2){var _e3=[];for(var _e4 in _e1){_e3.push({aroundCorner:_e4,corner:_e1[_e4],pos:{x:x+(_e4.charAt(1)=="L"?0:_df),y:y+(_e4.charAt(0)=="T"?0:_e0)}});}return dijit._place(_de,_e3,_e2);};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(_e5,_e6,_e7,_e8){return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);};dijit.getPopupAroundAlignment=function(_e9,_ea){var _eb={};dojo.forEach(_e9,function(pos){switch(pos){case "after":_eb[_ea?"BR":"BL"]=_ea?"BL":"BR";break;case "before":_eb[_ea?"BL":"BR"]=_ea?"BR":"BL";break;case "below":_eb[_ea?"BL":"BR"]=_ea?"TL":"TR";_eb[_ea?"BR":"BL"]=_ea?"TR":"TL";break;case "above":default:_eb[_ea?"TL":"TR"]=_ea?"BL":"BR";_eb[_ea?"TR":"TL"]=_ea?"BR":"BL";break;}});return _eb;};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){return dojo.window.get(doc);};}if(!dojo._hasResource["dijit._base.popup"]){dojo._hasResource["dijit._base.popup"]=true;dojo.provide("dijit._base.popup");dijit.popup={_stack:[],_beginZIndex:1000,_idGen:1,moveOffScreen:function(_ec){var _ed=_ec.parentNode;if(!_ed||!dojo.hasClass(_ed,"dijitPopup")){_ed=dojo.create("div",{"class":"dijitPopup",style:{visibility:"hidden",top:"-9999px"}},dojo.body());dijit.setWaiRole(_ed,"presentation");_ed.appendChild(_ec);}var s=_ec.style;s.display="";s.visibility="";s.position="";s.top="0px";dojo.style(_ed,{visibility:"hidden",top:"-9999px"});},getTopPopup:function(){var _ee=this._stack;for(var pi=_ee.length-1;pi>0&&_ee[pi].parent===_ee[pi-1].widget;pi--){}return _ee[pi];},open:function(_ef){var _f0=this._stack,_f1=_ef.popup,_f2=_ef.orient||((_ef.parent?_ef.parent.isLeftToRight():dojo._isBodyLtr())?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_f3=_ef.around,id=(_ef.around&&_ef.around.id)?(_ef.around.id+"_dropdown"):("popup_"+this._idGen++);var _f4=_f1.domNode.parentNode;if(!_f4||!dojo.hasClass(_f4,"dijitPopup")){this.moveOffScreen(_f1.domNode);_f4=_f1.domNode.parentNode;}dojo.attr(_f4,{id:id,style:{zIndex:this._beginZIndex+_f0.length},"class":"dijitPopup "+(_f1.baseClass||_f1["class"]||"").split(" ")[0]+"Popup",dijitPopupParent:_ef.parent?_ef.parent.id:""});if(dojo.isIE||dojo.isMoz){var _f5=_f4.childNodes[1];if(!_f5){_f5=new dijit.BackgroundIframe(_f4);}}var _f6=_f3?dijit.placeOnScreenAroundElement(_f4,_f3,_f2,_f1.orient?dojo.hitch(_f1,"orient"):null):dijit.placeOnScreen(_f4,_ef,_f2=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],_ef.padding);_f4.style.visibility="visible";_f1.domNode.style.visibility="visible";var _f7=[];_f7.push(dojo.connect(_f4,"onkeypress",this,function(evt){if(evt.charOrCode==dojo.keys.ESCAPE&&_ef.onCancel){dojo.stopEvent(evt);_ef.onCancel();}else{if(evt.charOrCode===dojo.keys.TAB){dojo.stopEvent(evt);var _f8=this.getTopPopup();if(_f8&&_f8.onCancel){_f8.onCancel();}}}}));if(_f1.onCancel){_f7.push(dojo.connect(_f1,"onCancel",_ef.onCancel));}_f7.push(dojo.connect(_f1,_f1.onExecute?"onExecute":"onChange",this,function(){var _f9=this.getTopPopup();if(_f9&&_f9.onExecute){_f9.onExecute();}}));_f0.push({wrapper:_f4,iframe:_f5,widget:_f1,parent:_ef.parent,onExecute:_ef.onExecute,onCancel:_ef.onCancel,onClose:_ef.onClose,handlers:_f7});if(_f1.onOpen){_f1.onOpen(_f6);}return _f6;},close:function(_fa){var _fb=this._stack;while(dojo.some(_fb,function(_fc){return _fc.widget==_fa;})){var top=_fb.pop(),_fd=top.wrapper,_fe=top.iframe,_ff=top.widget,_100=top.onClose;if(_ff.onClose){_ff.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(_ff&&_ff.domNode){this.moveOffScreen(_ff.domNode);}else{dojo.destroy(_fd);}if(_100){_100();}}}};dijit._frames=new function(){var _101=[];this.pop=function(){var _102;if(_101.length){_102=_101.pop();_102.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\");'>";_102=dojo.doc.createElement(html);}else{_102=dojo.create("iframe");_102.src="javascript:\"\"";_102.className="dijitBackgroundIframe";dojo.style(_102,"opacity",0.1);}_102.tabIndex=-1;dijit.setWaiRole(_102,"presentation");}return _102;};this.push=function(_103){_103.style.display="none";_101.push(_103);};}();dijit.BackgroundIframe=function(node){if(!node.id){throw new Error("no id");}if(dojo.isIE||dojo.isMoz){var _104=dijit._frames.pop();node.appendChild(_104);if(dojo.isIE<7){this.resize(node);this._conn=dojo.connect(node,"onresize",this,function(){this.resize(node);});}else{dojo.style(_104,{width:"100%",height:"100%"});}this.iframe=_104;}};dojo.extend(dijit.BackgroundIframe,{resize:function(node){if(this.iframe&&dojo.isIE<7){dojo.style(this.iframe,{width:node.offsetWidth+"px",height:node.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(node,pos){dojo.window.scrollIntoView(node,pos);};}if(!dojo._hasResource["dojo.uacss"]){dojo._hasResource["dojo.uacss"]=true;dojo.provide("dojo.uacss");(function(){var d=dojo,html=d.doc.documentElement,ie=d.isIE,_105=d.isOpera,maj=Math.floor,ff=d.isFF,_106=d.boxModel.replace(/-/,""),_107={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_ie8:maj(ie)==8,dj_quirks:d.isQuirks,dj_iequirks:ie&&d.isQuirks,dj_opera:_105,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};_107["dj_"+_106]=true;var _108="";for(var clz in _107){if(_107[clz]){_108+=clz+" ";}}html.className=d.trim(html.className+" "+_108);dojo._loaders.unshift(function(){if(!dojo._isBodyLtr()){var _109="dj_rtl dijitRtl "+_108.replace(/ /g,"-rtl ");html.className=d.trim(html.className+" "+_109);}});})();}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");}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)),this._minDelay);this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_10a,node,_10b,obj,_10c,_10d,_10e){if(obj!=this._obj){this.stop();this._initialDelay=_10d||500;this._subsequentDelay=_10c||0.9;this._minDelay=_10e||10;this._obj=obj;this._evt=evt;this._node=node;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_10a,_10b);this._fireEventAndReload();this._evt=dojo.mixin({faux:true},evt);}},stop:function(){if(this._timer){clearTimeout(this._timer);this._timer=null;}if(this._obj){this._callback(-1,this._node,this._evt);this._obj=null;}},addKeyListener:function(node,_10f,_110,_111,_112,_113,_114){if(_10f.keyCode){_10f.charOrCode=_10f.keyCode;dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}else{if(_10f.charCode){_10f.charOrCode=String.fromCharCode(_10f.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==_10f.charOrCode&&(_10f.ctrlKey===undefined||_10f.ctrlKey==evt.ctrlKey)&&(_10f.altKey===undefined||_10f.altKey==evt.altKey)&&(_10f.metaKey===undefined||_10f.metaKey==(evt.metaKey||false))&&(_10f.shiftKey===undefined||_10f.shiftKey==evt.shiftKey)){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_110,node,_111,_10f,_112,_113,_114);}else{if(dijit.typematic._obj==_10f){dijit.typematic.stop();}}}),dojo.connect(node,"onkeyup",this,function(evt){if(dijit.typematic._obj==_10f){dijit.typematic.stop();}})];},addMouseListener:function(node,_115,_116,_117,_118,_119){var dc=dojo.connect;return [dc(node,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_115,node,_116,node,_117,_118,_119);}),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){evt.preventDefault();}),dc(node,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_115,node,_116,node,_117,_118,_119);setTimeout(dojo.hitch(this,dijit.typematic.stop),50);}})];},addListener:function(_11a,_11b,_11c,_11d,_11e,_11f,_120,_121){return this.addKeyListener(_11b,_11c,_11d,_11e,_11f,_120,_121).concat(this.addMouseListener(_11a,_11d,_11e,_11f,_120,_121));}};}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 _122=cs.backgroundImage;var _123=(cs.borderTopColor==cs.borderRightColor)||(_122!=null&&(_122=="none"||_122=="url(invalid-url:)"));dojo[_123?"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(elem,role){var _124=this.getWaiRole(elem);return role?(_124.indexOf(role)>-1):(_124.length>0);},getWaiRole:function(elem){return dojo.trim((dojo.attr(elem,"role")||"").replace(this._XhtmlRoles,"").replace("wairole:",""));},setWaiRole:function(elem,role){var _125=dojo.attr(elem,"role")||"";if(!this._XhtmlRoles.test(_125)){dojo.attr(elem,"role",role);}else{if((" "+_125+" ").indexOf(" "+role+" ")<0){var _126=dojo.trim(_125.replace(this._XhtmlRoles,""));var _127=dojo.trim(_125.replace(_126,""));dojo.attr(elem,"role",_127+(_127?" ":"")+role);}}},removeWaiRole:function(elem,role){var _128=dojo.attr(elem,"role");if(!_128){return;}if(role){var t=dojo.trim((" "+_128+" ").replace(" "+role+" "," "));dojo.attr(elem,"role",t);}else{elem.removeAttribute("role");}},hasWaiState:function(elem,_129){return elem.hasAttribute?elem.hasAttribute("aria-"+_129):!!elem.getAttribute("aria-"+_129);},getWaiState:function(elem,_12a){return elem.getAttribute("aria-"+_12a)||"";},setWaiState:function(elem,_12b,_12c){elem.setAttribute("aria-"+_12b,_12c);},removeWaiState:function(elem,_12d){elem.removeAttribute("aria-"+_12d);}});}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.require("dijit._base");dojo.connect(dojo,"_connect",function(_12e,_12f){if(_12e&&dojo.isFunction(_12e._onConnect)){_12e._onConnect(_12f);}});dijit._connectOnUseEventHandler=function(_130){};dijit._lastKeyDownNode=null;if(dojo.isIE){(function(){var _131=function(evt){dijit._lastKeyDownNode=evt.srcElement;};dojo.doc.attachEvent("onkeydown",_131);dojo.addOnWindowUnload(function(){dojo.doc.detachEvent("onkeydown",_131);});})();}else{dojo.doc.addEventListener("keydown",function(evt){dijit._lastKeyDownNode=evt.target;},true);}(function(){var _132={},_133=function(_134){var dc=_134.declaredClass;if(!_132[dc]){var r=[],_135,_136=_134.constructor.prototype;for(var _137 in _136){if(dojo.isFunction(_136[_137])&&(_135=_137.match(/^_set([a-zA-Z]*)Attr$/))&&_135[1]){r.push(_135[1].charAt(0).toLowerCase()+_135[1].substr(1));}}_132[dc]=r;}return _132[dc]||[];};dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",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(_138,_139){this.create(_138,_139);},create:function(_13a,_13b){this.srcNodeRef=dojo.byId(_13b);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(_13a){this.params=_13a;dojo.mixin(this,_13a);}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 _13c=this.srcNodeRef;if(_13c&&_13c.parentNode){_13c.parentNode.replaceChild(this.domNode,_13c);}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 _13d=function(attr,_13e){if((_13e.params&&attr in _13e.params)||_13e[attr]){_13e.set(attr,_13e[attr]);}};for(var attr in this.attributeMap){_13d(attr,this);}dojo.forEach(_133(this),function(a){if(!(a in this.attributeMap)){_13d(a,this);}},this);},postMixInProperties:function(){},buildRendering:function(){this.domNode=this.srcNodeRef||dojo.create("div");},postCreate:function(){if(this.baseClass){var _13f=this.baseClass.split(" ");if(!this.isLeftToRight()){_13f=_13f.concat(dojo.map(_13f,function(name){return name+"Rtl";}));}dojo.addClass(this.domNode,_13f);}},startup:function(){this._started=true;},destroyRecursive:function(_140){this._beingDestroyed=true;this.destroyDescendants(_140);this.destroy(_140);},destroy:function(_141){this._beingDestroyed=true;this.uninitialize();var d=dojo,dfe=d.forEach,dun=d.unsubscribe;dfe(this._connects,function(_142){dfe(_142,d.disconnect);});dfe(this._subscribes,function(_143){dun(_143);});dfe(this._supportingWidgets||[],function(w){if(w.destroyRecursive){w.destroyRecursive();}else{if(w.destroy){w.destroy();}}});this.destroyRendering(_141);dijit.registry.remove(this.id);this._destroyed=true;},destroyRendering:function(_144){if(this.bgIframe){this.bgIframe.destroy(_144);delete this.bgIframe;}if(this.domNode){if(_144){dojo.removeAttr(this.domNode,"widgetId");}else{dojo.destroy(this.domNode);}delete this.domNode;}if(this.srcNodeRef){if(!_144){dojo.destroy(this.srcNodeRef);}delete this.srcNodeRef;}},destroyDescendants:function(_145){dojo.forEach(this.getChildren(),function(_146){if(_146.destroyRecursive){_146.destroyRecursive(_145);}});},uninitialize:function(){return false;},onFocus:function(){},onBlur:function(){},_onFocus:function(e){this.onFocus();},_onBlur:function(){this.onBlur();},_onConnect:function(_147){if(_147 in this._deferredConnects){var _148=this[this._deferredConnects[_147]||"domNode"];this.connect(_148,_147.toLowerCase(),_147);delete this._deferredConnects[_147];}},_setClassAttr:function(_149){var _14a=this[this.attributeMap["class"]||"domNode"];dojo.removeClass(_14a,this["class"]);this["class"]=_149;dojo.addClass(_14a,_149);},_setStyleAttr:function(_14b){var _14c=this[this.attributeMap.style||"domNode"];if(dojo.isObject(_14b)){dojo.style(_14c,_14b);}else{if(_14c.style.cssText){_14c.style.cssText+="; "+_14b;}else{_14c.style.cssText=_14b;}}this.style=_14b;},setAttribute:function(attr,_14d){dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");this.set(attr,_14d);},_attrToDom:function(attr,_14e){var _14f=this.attributeMap[attr];dojo.forEach(dojo.isArray(_14f)?_14f:[_14f],function(_150){var _151=this[_150.node||_150||"domNode"];var type=_150.type||"attribute";switch(type){case "attribute":if(dojo.isFunction(_14e)){_14e=dojo.hitch(this,_14e);}var _152=_150.attribute?_150.attribute:(/^on[A-Z][a-zA-Z]*$/.test(attr)?attr.toLowerCase():attr);dojo.attr(_151,_152,_14e);break;case "innerText":_151.innerHTML="";_151.appendChild(dojo.doc.createTextNode(_14e));break;case "innerHTML":_151.innerHTML=_14e;break;case "class":dojo.removeClass(_151,this[attr]);dojo.addClass(_151,_14e);break;}},this);this[attr]=_14e;},attr:function(name,_153){if(dojo.config.isDebug){var _154=arguments.callee._ach||(arguments.callee._ach={}),_155=(arguments.callee.caller||"unknown caller").toString();if(!_154[_155]){dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_155,"","2.0");_154[_155]=true;}}var args=arguments.length;if(args>=2||typeof name==="object"){return this.set.apply(this,arguments);}else{return this.get(name);}},get:function(name){var _156=this._getAttrNames(name);return this[_156.g]?this[_156.g]():this[name];},set:function(name,_157){if(typeof name==="object"){for(var x in name){this.set(x,name[x]);}return this;}var _158=this._getAttrNames(name);if(this[_158.s]){var _159=this[_158.s].apply(this,Array.prototype.slice.call(arguments,1));}else{if(name in this.attributeMap){this._attrToDom(name,_157);}var _15a=this[name];this[name]=_157;}return _159||this;},_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,_15b,_15c){var d=dojo,dc=d._connect,_15d=[];if(_15b=="ondijitclick"){if(dojo.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){var m=d.hitch(this,_15c);_15d.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;e.preventDefault();}}),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);}}));}_15b="onclick";}_15d.push(dc(obj,_15b,this,_15c));this._connects.push(_15d);return _15d;},disconnect:function(_15e){for(var i=0;i<this._connects.length;i++){if(this._connects[i]==_15e){dojo.forEach(_15e,dojo.disconnect);this._connects.splice(i,1);return;}}},subscribe:function(_15f,_160){var d=dojo,_161=d.subscribe(_15f,this,_160);this._subscribes.push(_161);return _161;},unsubscribe:function(_162){for(var i=0;i<this._subscribes.length;i++){if(this._subscribes[i]==_162){dojo.unsubscribe(_162);this._subscribes.splice(i,1);return;}}},isLeftToRight:function(){return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();},isFocusable:function(){return this.focus&&(dojo.style(this.domNode,"display")!="none");},placeAt:function(_163,_164){if(_163.declaredClass&&_163.addChild){_163.addChild(this,_164);}else{dojo.place(this.domNode,_163,_164);}return this;},_onShow:function(){this.onShow();},onShow:function(){},onHide:function(){},onClose:function(){return true;}});})();}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(_165,map,_166,_167){_167=_167||dojo.global;_166=_166?dojo.hitch(_167,_166):function(v){return v;};return _165.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_168,key,_169){var _16a=dojo.getObject(key,false,map);if(_169){_16a=dojo.getObject(_169,false,_167).call(_167,_16a,key);}return _166(_16a,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 _16b={};dojo.cache=function(_16c,url,_16d){if(typeof _16c=="string"){var _16e=dojo.moduleUrl(_16c,url);}else{_16e=_16c;_16d=url;}var key=_16e.toString();var val=_16d;if(_16d!=undefined&&!dojo.isString(_16d)){val=("value" in _16d?_16d.value:undefined);}var _16f=_16d&&_16d.sanitize?true:false;if(typeof val=="string"){val=_16b[key]=_16f?dojo.cache._sanitize(val):val;}else{if(val===null){delete _16b[key];}else{if(!(key in _16b)){val=dojo._getText(key);_16b[key]=_16f?dojo.cache._sanitize(val):val;}val=_16b[key];}}return val;};dojo.cache._sanitize=function(val){if(val){val=val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _170=val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_170){val=_170[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 _171=this.declaredClass,_172=this;return dojo.string.substitute(tmpl,this,function(_173,key){if(key.charAt(0)=="!"){_173=dojo.getObject(key.substr(1),false,_172);}if(typeof _173=="undefined"){throw new Error(_171+" template:"+key);}if(_173==null){return "";}return key.charAt(0)=="!"?_173:_173.toString().replace(/"/g,"&quot;");},this);},buildRendering:function(){var _174=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);var node;if(dojo.isString(_174)){node=dojo._toDom(this._stringRepl(_174));if(node.nodeType!=1){throw new Error("Invalid template: "+_174);}}else{node=_174.cloneNode(true);}this.domNode=node;this._attachTemplateNodes(node);if(this.widgetsInTemplate){var _175=dojo.parser,qry,attr;if(_175._query!="[dojoType]"){qry=_175._query;attr=_175._attrName;_175._query="[dojoType]";_175._attrName="dojoType";}var cw=(this._startupWidgets=dojo.parser.parse(node,{noStart:!this._earlyTemplatedStartup,inherited:{dir:this.dir,lang:this.lang}}));if(qry){_175._query=qry;_175._attrName=attr;}this._supportingWidgets=dijit.findWidgets(node);this._attachTemplateNodes(cw,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_176){var dest=this.containerNode;if(_176&&dest){while(_176.hasChildNodes()){dest.appendChild(_176.firstChild);}}},_attachTemplateNodes:function(_177,_178){_178=_178||function(n,p){return n.getAttribute(p);};var _179=dojo.isArray(_177)?_177:(_177.all||_177.getElementsByTagName("*"));var x=dojo.isArray(_177)?0:-1;for(;x<_179.length;x++){var _17a=(x==-1)?_177:_179[x];if(this.widgetsInTemplate&&_178(_17a,"dojoType")){continue;}var _17b=_178(_17a,"dojoAttachPoint");if(_17b){var _17c,_17d=_17b.split(/\s*,\s*/);while((_17c=_17d.shift())){if(dojo.isArray(this[_17c])){this[_17c].push(_17a);}else{this[_17c]=_17a;}this._attachPoints.push(_17c);}}var _17e=_178(_17a,"dojoAttachEvent");if(_17e){var _17f,_180=_17e.split(/\s*,\s*/);var trim=dojo.trim;while((_17f=_180.shift())){if(_17f){var _181=null;if(_17f.indexOf(":")!=-1){var _182=_17f.split(":");_17f=trim(_182[0]);_181=trim(_182[1]);}else{_17f=trim(_17f);}if(!_181){_181=_17f;}this.connect(_17a,_17f,_181);}}}var role=_178(_17a,"waiRole");if(role){dijit.setWaiRole(_17a,role);}var _183=_178(_17a,"waiState");if(_183){dojo.forEach(_183.split(/\s*,\s*/),function(_184){if(_184.indexOf("-")!=-1){var pair=_184.split("-");dijit.setWaiState(_17a,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(_185){delete this[_185];},this);this._attachPoints=[];this.inherited(arguments);}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_186,_187,_188){var _189=dijit._Templated._templateCache;var key=_187||_186;var _18a=_189[key];if(_18a){try{if(!_18a.ownerDocument||_18a.ownerDocument==dojo.doc){return _18a;}}catch(e){}dojo.destroy(_18a);}if(!_187){_187=dojo.cache(_186,{sanitize:true});}_187=dojo.string.trim(_187);if(_188||_187.match(/\$\{([^\}]+)\}/g)){return (_189[key]=_187);}else{var node=dojo._toDom(_187);if(node.nodeType!=1){throw new Error("Invalid template: "+_187);}return (_189[key]=node);}};if(dojo.isIE){dojo.addOnWindowUnload(function(){var _18b=dijit._Templated._templateCache;for(var key in _18b){var _18c=_18b[key];if(typeof _18c=="object"){dojo.destroy(_18c);}delete _18b[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(_18d,_18e){var _18f=this.containerNode;if(_18e&&typeof _18e=="number"){var _190=this.getChildren();if(_190&&_190.length>=_18e){_18f=_190[_18e-1].domNode;_18e="after";}}dojo.place(_18d.domNode,_18f,_18e);if(this._started&&!_18d._started){_18d.startup();}},removeChild:function(_191){if(typeof _191=="number"&&_191>0){_191=this.getChildren()[_191];}if(_191){var node=_191.domNode;if(node&&node.parentNode){node.parentNode.removeChild(node);}}},hasChildren:function(){return this.getChildren().length>0;},destroyDescendants:function(_192){dojo.forEach(this.getChildren(),function(_193){_193.destroyRecursive(_192);});},_getSiblingOfChild:function(_194,dir){var node=_194.domNode,_195=(dir>0?"nextSibling":"previousSibling");do{node=node[_195];}while(node&&(node.nodeType!=1||!dijit.byNode(node)));return node&&dijit.byNode(node);},getIndexOfChild:function(_196){return dojo.indexOf(this.getChildren(),_196);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_197){_197.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 _198=dijit.getEnclosingWidget(this.domNode.parentNode);return _198&&_198.isContainer?_198:null;},_getSibling:function(_199){var node=this.domNode;do{node=node[_199+"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");this.inherited(arguments);},startup:function(){if(this._started){return;}this.inherited(arguments);var _19a=this.getParent&&this.getParent();if(!(_19a&&_19a.isLayoutContainer)){this.resize();this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){this.resize();});}},resize:function(_19b,_19c){var node=this.domNode;if(_19b){dojo.marginBox(node,_19b);if(_19b.t){node.style.top=_19b.t+"px";}if(_19b.l){node.style.left=_19b.l+"px";}}var mb=_19c||{};dojo.mixin(mb,_19b||{});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(_19d){dojo.addClass(_19d.domNode,this.baseClass+"-child");if(_19d.baseClass){dojo.addClass(_19d.domNode,this.baseClass+"-"+_19d.baseClass);}},addChild:function(_19e,_19f){this.inherited(arguments);if(this._started){this._setupChild(_19e);}},removeChild:function(_1a0){dojo.removeClass(_1a0.domNode,this.baseClass+"-child");if(_1a0.baseClass){dojo.removeClass(_1a0.domNode,this.baseClass+"-"+_1a0.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 _1a1=function(word){return word.substring(0,1).toUpperCase()+word.substring(1);};var size=function(_1a2,dim){_1a2.resize?_1a2.resize(dim):dojo.marginBox(_1a2.domNode,dim);dojo.mixin(_1a2,dojo.marginBox(_1a2.domNode));dojo.mixin(_1a2,dim);};dijit.layout.layoutChildren=function(_1a3,dim,_1a4){dim=dojo.mixin({},dim);dojo.addClass(_1a3,"dijitLayoutContainer");_1a4=dojo.filter(_1a4,function(item){return item.layoutAlign!="client";}).concat(dojo.filter(_1a4,function(item){return item.layoutAlign=="client";}));dojo.forEach(_1a4,function(_1a5){var elm=_1a5.domNode,pos=_1a5.layoutAlign;var _1a6=elm.style;_1a6.left=dim.l+"px";_1a6.top=dim.t+"px";_1a6.bottom=_1a6.right="auto";dojo.addClass(elm,"dijitAlign"+_1a1(pos));if(pos=="top"||pos=="bottom"){size(_1a5,{w:dim.w});dim.h-=_1a5.h;if(pos=="top"){dim.t+=_1a5.h;}else{_1a6.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){size(_1a5,{h:dim.h});dim.w-=_1a5.w;if(pos=="left"){dim.l+=_1a5.w;}else{_1a6.left=dim.l+dim.w+"px";}}else{if(pos=="client"){size(_1a5,dim);}}}});};})();}if(!dojo._hasResource["dijit._CssStateMixin"]){dojo._hasResource["dijit._CssStateMixin"]=true;dojo.provide("dijit._CssStateMixin");dojo.declare("dijit._CssStateMixin",[],{cssStateNodes:{},postCreate:function(){this.inherited(arguments);dojo.forEach(["onmouseenter","onmouseleave","onmousedown"],function(e){this.connect(this.domNode,e,"_cssMouseEvent");},this);this.connect(this,"set",function(name,_1a7){if(arguments.length>=2&&{disabled:true,readOnly:true,checked:true,selected:true}[name]){this._setStateClass();}});dojo.forEach(["_onFocus","_onBlur"],function(ap){this.connect(this,ap,"_setStateClass");},this);for(var ap in this.cssStateNodes){this._trackMouseState(this[ap],this.cssStateNodes[ap]);}this._setStateClass();},_cssMouseEvent:function(_1a8){if(!this.disabled){switch(_1a8.type){case "mouseenter":case "mouseover":this._hovering=true;this._active=this._mouseDown;break;case "mouseleave":case "mouseout":this._hovering=false;this._active=false;break;case "mousedown":this._active=true;this._mouseDown=true;var _1a9=this.connect(dojo.body(),"onmouseup",function(){this._active=false;this._mouseDown=false;this._setStateClass();this.disconnect(_1a9);});break;}this._setStateClass();}},_setStateClass:function(){var _1aa=this.baseClass.split(" ");function _1ab(_1ac){_1aa=_1aa.concat(dojo.map(_1aa,function(c){return c+_1ac;}),"dijit"+_1ac);};if(!this.isLeftToRight()){_1ab("Rtl");}if(this.checked){_1ab("Checked");}if(this.state){_1ab(this.state);}if(this.selected){_1ab("Selected");}if(this.disabled){_1ab("Disabled");}else{if(this.readOnly){_1ab("ReadOnly");}else{if(this._active){_1ab("Active");}else{if(this._hovering){_1ab("Hover");}}}}if(this._focused){_1ab("Focused");}var tn=this.stateNode||this.domNode,_1ad={};dojo.forEach(tn.className.split(" "),function(c){_1ad[c]=true;});if("_stateClasses" in this){dojo.forEach(this._stateClasses,function(c){delete _1ad[c];});}dojo.forEach(_1aa,function(c){_1ad[c]=true;});var _1ae=[];for(var c in _1ad){_1ae.push(c);}tn.className=_1ae.join(" ");this._stateClasses=_1aa;},_trackMouseState:function(node,_1af){var _1b0=false,_1b1=false,_1b2=false;var self=this,cn=dojo.hitch(this,"connect",node);function _1b3(){var _1b4=("disabled" in self&&self.disabled)||("readonly" in self&&self.readonly);dojo.toggleClass(node,_1af+"Hover",_1b0&&!_1b1&&!_1b4);dojo.toggleClass(node,_1af+"Active",_1b1&&!_1b4);dojo.toggleClass(node,_1af+"Focused",_1b2&&!_1b4);};cn("onmouseenter",function(){_1b0=true;_1b3();});cn("onmouseleave",function(){_1b0=false;_1b1=false;_1b3();});cn("onmousedown",function(){_1b1=true;_1b3();});cn("onmouseup",function(){_1b1=false;_1b3();});cn("onfocus",function(){_1b2=true;_1b3();});cn("onblur",function(){_1b2=false;_1b3();});this.connect(this,"set",function(name,_1b5){if(name=="disabled"||name=="readOnly"){_1b3();}});}});}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,dijit._CssStateMixin],{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.replace(/'/g,"&quot;")+"\""):"";this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousedown","_onMouseDown");},_setDisabledAttr:function(_1b6){this.disabled=_1b6;dojo.attr(this.focusNode,"disabled",_1b6);if(this.valueNode){dojo.attr(this.valueNode,"disabled",_1b6);}dijit.setWaiState(this.focusNode,"disabled",_1b6);if(_1b6){this._hovering=false;this._active=false;var _1b7="tabIndex" in this.attributeMap?this.attributeMap.tabIndex:"focusNode";dojo.forEach(dojo.isArray(_1b7)?_1b7:[_1b7],function(_1b8){var node=this[_1b8];if(dojo.isWebKit||dijit.hasDefaultTabStop(node)){node.setAttribute("tabIndex","-1");}else{node.removeAttribute("tabIndex");}},this);}else{this.focusNode.setAttribute("tabIndex",this.tabIndex);}},setDisabled:function(_1b9){dojo.deprecated("setDisabled("+_1b9+") is deprecated. Use set('disabled',"+_1b9+") instead.","","2.0");this.set("disabled",_1b9);},_onFocus:function(e){if(this.scrollOnFocus){dojo.window.scrollIntoView(this.domNode);}this.inherited(arguments);},isFocusable:function(){return !this.disabled&&!this.readOnly&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");},focus:function(){dijit.focus(this.focusNode);},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(_1ba){},_onChangeActive:false,_handleOnChange:function(_1bb,_1bc){this._lastValue=_1bb;if(this._lastValueReported==undefined&&(_1bc===null||!this._onChangeActive)){this._resetValue=this._lastValueReported=_1bb;}if((this.intermediateChanges||_1bc||_1bc===undefined)&&((typeof _1bb!=typeof this._lastValueReported)||this.compare(_1bb,this._lastValueReported)!=0)){this._lastValueReported=_1bb;if(this._onChangeActive){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);}this._onChangeHandle=setTimeout(dojo.hitch(this,function(){this._onChangeHandle=null;this.onChange(_1bb);}),0);}}},create:function(){this.inherited(arguments);this._onChangeActive=true;},destroy:function(){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);this.onChange(this._lastValueReported);}this.inherited(arguments);},setValue:function(_1bd){dojo.deprecated("dijit.form._FormWidget:setValue("+_1bd+") is deprecated.  Use set('value',"+_1bd+") instead.","","2.0");this.set("value",_1bd);},getValue:function(){dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_onMouseDown:function(e){if(!e.ctrlKey&&this.isFocusable()){var _1be=this.connect(dojo.body(),"onmouseup",function(){if(this.isFocusable()){this.focus();}this.disconnect(_1be);});}}});dojo.declare("dijit.form._FormValueWidget",dijit.form._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_1bf){this.readOnly=_1bf;dojo.attr(this.focusNode,"readOnly",_1bf);dijit.setWaiState(this.focusNode,"readonly",_1bf);},postCreate:function(){this.inherited(arguments);if(dojo.isIE){this.connect(this.focusNode||this.domNode,"onkeydown",this._onKeyDown);}if(this._resetValue===undefined){this._resetValue=this.value;}},_setValueAttr:function(_1c0,_1c1){this.value=_1c0;this._handleOnChange(_1c0,_1c1);},_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 _1c2=this.domNode;var _1c3=_1c2.parentNode;var _1c4=_1c2.firstChild||_1c2;var _1c5=_1c4.style.filter;var _1c6=this;while(_1c3&&_1c3.clientHeight==0){(function ping(){var _1c7=_1c6.connect(_1c3,"onscroll",function(e){_1c6.disconnect(_1c7);_1c4.style.filter=(new Date()).getMilliseconds();setTimeout(function(){_1c4.style.filter=_1c5;},0);});})();_1c3=_1c3.parentNode;}}}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");}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(args){var _1c8=this;dojo.mixin(_1c8,args);_1c8.node=args.node;_1c8._showArgs=dojo.mixin({},args);_1c8._showArgs.node=_1c8.node;_1c8._showArgs.duration=_1c8.showDuration;_1c8.showAnim=_1c8.showFunc(_1c8._showArgs);_1c8._hideArgs=dojo.mixin({},args);_1c8._hideArgs.node=_1c8.node;_1c8._hideArgs.duration=_1c8.hideDuration;_1c8.hideAnim=_1c8.hideFunc(_1c8._hideArgs);dojo.connect(_1c8.showAnim,"beforeBegin",dojo.hitch(_1c8.hideAnim,"stop",true));dojo.connect(_1c8.hideAnim,"beforeBegin",dojo.hitch(_1c8.showAnim,"stop",true));},show:function(_1c9){return this.showAnim.play(_1c9||0);},hide:function(_1ca){return this.hideAnim.play(_1ca||0);}});}if(!dojo._hasResource["dojo.fx"]){dojo._hasResource["dojo.fx"]=true;dojo.provide("dojo.fx");(function(){var d=dojo,_1cb={_fire:function(evt,args){if(this[evt]){this[evt].apply(this,args||[]);}return this;}};var _1cc=function(_1cd){this._index=-1;this._animations=_1cd||[];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(_1cc,{_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{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(_1ce,_1cf){if(!this._current){this._current=this._animations[this._index=0];}if(!_1cf&&this._current.status()=="playing"){return this;}var _1d0=d.connect(this._current,"beforeBegin",this,function(){this._fire("beforeBegin");}),_1d1=d.connect(this._current,"onBegin",this,function(arg){this._fire("onBegin",arguments);}),_1d2=d.connect(this._current,"onPlay",this,function(arg){this._fire("onPlay",arguments);d.disconnect(_1d0);d.disconnect(_1d1);d.disconnect(_1d2);});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(_1d3,_1d4){this.pause();var _1d5=this.duration*_1d3;this._current=null;d.some(this._animations,function(a){if(a.duration<=_1d5){this._current=a;return true;}_1d5-=a.duration;return false;});if(this._current){this._current.gotoPercent(_1d5/this._current.duration,_1d4);}return this;},stop:function(_1d6){if(this._current){if(_1d6){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(_1cc,_1cb);dojo.fx.chain=function(_1d7){return new _1cc(_1d7);};var _1d8=function(_1d9){this._animations=_1d9||[];this._connects=[];this._finished=0;this.duration=0;d.forEach(_1d9,function(a){var _1da=a.duration;if(a.delay){_1da+=a.delay;}if(this.duration<_1da){this.duration=_1da;}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(_1d8,{_doAction:function(_1db,args){d.forEach(this._animations,function(a){a[_1db].apply(a,args);});return this;},_onEnd:function(){if(++this._finished>this._animations.length){this._fire("onEnd");}},_call:function(_1dc,args){var t=this._pseudoAnimation;t[_1dc].apply(t,args);},play:function(_1dd,_1de){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(_1df,_1e0){var ms=this.duration*_1df;d.forEach(this._animations,function(a){a.gotoPercent(a.duration<ms?1:(ms/a.duration),_1e0);});this._call("gotoPercent",arguments);return this;},stop:function(_1e1){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(_1d8,_1cb);dojo.fx.combine=function(_1e2){return new _1d8(_1e2);};dojo.fx.wipeIn=function(args){var node=args.node=d.byId(args.node),s=node.style,o;var anim=d.animateProperty(d.mixin({properties:{height:{start:function(){o=s.overflow;s.overflow="hidden";if(s.visibility=="hidden"||s.display=="none"){s.height="1px";s.display="";s.visibility="";return 1;}else{var _1e3=d.style(node,"height");return Math.max(_1e3,1);}},end:function(){return node.scrollHeight;}}}},args));d.connect(anim,"onEnd",function(){s.height="auto";s.overflow=o;});return anim;};dojo.fx.wipeOut=function(args){var node=args.node=d.byId(args.node),s=node.style,o;var anim=d.animateProperty(d.mixin({properties:{height:{end:1}}},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.fx.slideTo=function(args){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;};})();}if(!dojo._hasResource["dojo.NodeList-fx"]){dojo._hasResource["dojo.NodeList-fx"]=true;dojo.provide("dojo.NodeList-fx");dojo.extend(dojo.NodeList,{_anim:function(obj,_1e4,args){args=args||{};var a=dojo.fx.combine(this.map(function(item){var _1e5={node:item};dojo.mixin(_1e5,args);return obj[_1e4](_1e5);}));return args.auto?a.play()&&this:a;},wipeIn:function(args){return this._anim(dojo.fx,"wipeIn",args);},wipeOut:function(args){return this._anim(dojo.fx,"wipeOut",args);},slideTo:function(args){return this._anim(dojo.fx,"slideTo",args);},fadeIn:function(args){return this._anim(dojo,"fadeIn",args);},fadeOut:function(args){return this._anim(dojo,"fadeOut",args);},animateProperty:function(args){return this._anim(dojo,"animateProperty",args);},anim:function(_1e6,_1e7,_1e8,_1e9,_1ea){var _1eb=dojo.fx.combine(this.map(function(item){return dojo.animateProperty({node:item,properties:_1e6,duration:_1e7||350,easing:_1e8});}));if(_1e9){dojo.connect(_1eb,"onEnd",_1e9);}return _1eb.play(_1ea||0);}});}if(!dojo._hasResource["dojo.colors"]){dojo._hasResource["dojo.colors"]=true;dojo.provide("dojo.colors");(function(){var _1ec=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(_1ed,obj){var m=_1ed.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)=="%"){a=dojo.map(c,function(x){return parseFloat(x)*2.56;});if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,obj);}return dojo.colorFromArray(c,obj);}if((t=="hsl"&&l==3)||(t=="hsla"&&l==4)){var H=((parseFloat(c[0])%360)+360)%360/360,S=parseFloat(c[1])/100,L=parseFloat(c[2])/100,m2=L<=0.5?L*(S+1):L+S-L*S,m1=2*L-m2;a=[_1ec(m1,m2,H+1/3)*256,_1ec(m1,m2,H)*256,_1ec(m1,m2,H-1/3)*256,1];if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,obj);}}return null;};var _1ee=function(c,low,high){c=Number(c);return isNaN(c)?high:c<low?low:c>high?high:c;};dojo.Color.prototype.sanitize=function(){var t=this;t.r=Math.round(_1ee(t.r,0,255));t.g=Math.round(_1ee(t.g,0,255));t.b=Math.round(_1ee(t.b,0,255));t.a=_1ee(t.a,0,1);return this;};})();dojo.colors.makeGrey=function(g,a){return dojo.colorFromArray([g,g,g,a]);};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["dojo.i18n"]){dojo._hasResource["dojo.i18n"]=true;dojo.provide("dojo.i18n");dojo.i18n.getLocalization=function(_1ef,_1f0,_1f1){_1f1=dojo.i18n.normalizeLocale(_1f1);var _1f2=_1f1.split("-");var _1f3=[_1ef,"nls",_1f0].join(".");var _1f4=dojo._loadedModules[_1f3];if(_1f4){var _1f5;for(var i=_1f2.length;i>0;i--){var loc=_1f2.slice(0,i).join("_");if(_1f4[loc]){_1f5=_1f4[loc];break;}}if(!_1f5){_1f5=_1f4.ROOT;}if(_1f5){var _1f6=function(){};_1f6.prototype=_1f5;return new _1f6();}}throw new Error("Bundle not found: "+_1f0+" in "+_1ef+" , locale="+_1f1);};dojo.i18n.normalizeLocale=function(_1f7){var _1f8=_1f7?_1f7.toLowerCase():dojo.locale;if(_1f8=="root"){_1f8="ROOT";}return _1f8;};dojo.i18n._requireLocalization=function(_1f9,_1fa,_1fb,_1fc){var _1fd=dojo.i18n.normalizeLocale(_1fb);var _1fe=[_1f9,"nls",_1fa].join(".");var _1ff="";if(_1fc){var _200=_1fc.split(",");for(var i=0;i<_200.length;i++){if(_1fd["indexOf"](_200[i])==0){if(_200[i].length>_1ff.length){_1ff=_200[i];}}}if(!_1ff){_1ff="ROOT";}}var _201=_1fc?_1ff:_1fd;var _202=dojo._loadedModules[_1fe];var _203=null;if(_202){if(dojo.config.localizationComplete&&_202._built){return;}var _204=_201.replace(/-/g,"_");var _205=_1fe+"."+_204;_203=dojo._loadedModules[_205];}if(!_203){_202=dojo["provide"](_1fe);var syms=dojo._getModuleSymbols(_1f9);var _206=syms.concat("nls").join("/");var _207;dojo.i18n._searchLocalePath(_201,_1fc,function(loc){var _208=loc.replace(/-/g,"_");var _209=_1fe+"."+_208;var _20a=false;if(!dojo._loadedModules[_209]){dojo["provide"](_209);var _20b=[_206];if(loc!="ROOT"){_20b.push(loc);}_20b.push(_1fa);var _20c=_20b.join("/")+".js";_20a=dojo._loadPath(_20c,null,function(hash){var _20d=function(){};_20d.prototype=_207;_202[_208]=new _20d();for(var j in hash){_202[_208][j]=hash[j];}});}else{_20a=true;}if(_20a&&_202[_208]){_207=_202[_208];}else{_202[_208]=_207;}if(_1fc){return true;}});}if(_1fc&&_1fd!=_1ff){_202[_1fd.replace(/-/g,"_")]=_202[_1ff.replace(/-/g,"_")];}};(function(){var _20e=dojo.config.extraLocale;if(_20e){if(!_20e instanceof Array){_20e=[_20e];}var req=dojo.i18n._requireLocalization;dojo.i18n._requireLocalization=function(m,b,_20f,_210){req(m,b,_20f,_210);if(_20f){return;}for(var i=0;i<_20e.length;i++){req(m,b,_20e[i],_210);}};}})();dojo.i18n._searchLocalePath=function(_211,down,_212){_211=dojo.i18n.normalizeLocale(_211);var _213=_211.split("-");var _214=[];for(var i=_213.length;i>0;i--){_214.push(_213.slice(0,i).join("-"));}_214.push(false);if(down){_214.reverse();}for(var j=_214.length-1;j>=0;j--){var loc=_214[j]||"ROOT";var stop=_212(loc);if(stop){break;}}};dojo.i18n._preloadLocalizations=function(_215,_216){function _217(_218){_218=dojo.i18n.normalizeLocale(_218);dojo.i18n._searchLocalePath(_218,true,function(loc){for(var i=0;i<_216.length;i++){if(_216[i]==loc){dojo["require"](_215+"_"+loc);return true;}}return false;});};_217();var _219=dojo.config.extraLocale||[];for(var i=0;i<_219.length;i++){_217(_219[i]);}};}if(!dojo._hasResource["dijit._PaletteMixin"]){dojo._hasResource["dijit._PaletteMixin"]=true;dojo.provide("dijit._PaletteMixin");dojo.declare("dijit._PaletteMixin",[dijit._CssStateMixin],{defaultTimeout:500,timeoutChangeRate:0.9,value:null,_selectedCell:-1,tabIndex:"0",cellClass:"dijitPaletteCell",dyeClass:"",_preparePalette:function(_21a,_21b){this._cells=[];var url=this._blankGif;var _21c=dojo.getObject(this.dyeClass);for(var row=0;row<_21a.length;row++){var _21d=dojo.create("tr",{tabIndex:"-1"},this.gridNode);for(var col=0;col<_21a[row].length;col++){var _21e=_21a[row][col];if(_21e){var _21f=new _21c(_21e);var _220=dojo.create("td",{"class":this.cellClass,tabIndex:"-1",title:_21b[_21e]});_21f.fillCell(_220,url);this.connect(_220,"ondijitclick","_onCellClick");this._trackMouseState(_220,this.cellClass);dojo.place(_220,_21d);_220.index=this._cells.length;this._cells.push({node:_220,dye:_21f});}}}this._xDim=_21a[0].length;this._yDim=_21a.length;var _221={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:this.isLeftToRight()?1:-1,LEFT_ARROW:this.isLeftToRight()?-1:1};for(var key in _221){this._connects.push(dijit.typematic.addKeyListener(this.domNode,{charOrCode:dojo.keys[key],ctrlKey:false,altKey:false,shiftKey:false},this,function(){var _222=_221[key];return function(_223){this._navigateByKey(_222,_223);};}(),this.timeoutChangeRate,this.defaultTimeout));}},postCreate:function(){this.inherited(arguments);this._setCurrent(this._cells[0].node);},focus:function(){dijit.focus(this._currentFocus);},_onCellClick:function(evt){var _224=evt.currentTarget,_225=this._getDye(_224).getValue();this._setCurrent(_224);setTimeout(dojo.hitch(this,function(){dijit.focus(_224);this._setValueAttr(_225,true);}));dojo.removeClass(_224,"dijitPaletteCellHover");dojo.stopEvent(evt);},_setCurrent:function(node){if("_currentFocus" in this){dojo.attr(this._currentFocus,"tabIndex","-1");}this._currentFocus=node;if(node){dojo.attr(node,"tabIndex",this.tabIndex);}},_setValueAttr:function(_226,_227){this.value=null;if(this._selectedCell>=0){dojo.removeClass(this._cells[this._selectedCell].node,"dijitPaletteCellSelected");}this._selectedCell=-1;if(_226){for(var i=0;i<this._cells.length;i++){if(_226==this._cells[i].dye.getValue()){this._selectedCell=i;this.value=_226;dojo.addClass(this._cells[i].node,"dijitPaletteCellSelected");if(_227||_227===undefined){this.onChange(_226);}break;}}}},onChange:function(_228){},_navigateByKey:function(_229,_22a){if(_22a==-1){return;}var _22b=this._currentFocus.index+_229;if(_22b<this._cells.length&&_22b>-1){var _22c=this._cells[_22b].node;this._setCurrent(_22c);setTimeout(dojo.hitch(dijit,"focus",_22c),0);}},_getDye:function(cell){return this._cells[cell.index].dye;}});}if(!dojo._hasResource["dijit.ColorPalette"]){dojo._hasResource["dijit.ColorPalette"]=true;dojo.provide("dijit.ColorPalette");dojo.declare("dijit.ColorPalette",[dijit._Widget,dijit._Templated,dijit._PaletteMixin],{palette:"7x10",_palettes:{"7x10":[["white","seashell","cornsilk","lemonchiffon","lightyellow","palegreen","paleturquoise","lightcyan","lavender","plum"],["lightgray","pink","bisque","moccasin","khaki","lightgreen","lightseagreen","lightskyblue","cornflowerblue","violet"],["silver","lightcoral","sandybrown","orange","palegoldenrod","chartreuse","mediumturquoise","skyblue","mediumslateblue","orchid"],["gray","red","orangered","darkorange","yellow","limegreen","darkseagreen","royalblue","slateblue","mediumorchid"],["dimgray","crimson","chocolate","coral","gold","forestgreen","seagreen","blue","blueviolet","darkorchid"],["darkslategray","firebrick","saddlebrown","sienna","olive","green","darkcyan","mediumblue","darkslateblue","darkmagenta"],["black","darkred","maroon","brown","darkolivegreen","darkgreen","midnightblue","navy","indigo","purple"]],"3x4":[["white","lime","green","blue"],["silver","yellow","fuchsia","navy"],["gray","red","purple","black"]]},_imagePaths:{"7x10":dojo.moduleUrl("dijit.themes","a11y/colors7x10.png"),"3x4":dojo.moduleUrl("dijit.themes","a11y/colors3x4.png"),"7x10-rtl":dojo.moduleUrl("dijit.themes","a11y/colors7x10-rtl.png"),"3x4-rtl":dojo.moduleUrl("dijit.themes","a11y/colors3x4-rtl.png")},templateString:dojo.cache("dijit","templates/ColorPalette.html","<div class=\"dijitInline dijitColorPalette\">\n\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\"/>\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),baseClass:"dijitColorPalette",dyeClass:"dijit._Color",buildRendering:function(){this.inherited(arguments);this.imageNode.setAttribute("src",this._imagePaths[this.palette+(this.isLeftToRight()?"":"-rtl")].toString());var _22d=dojo.i18n.getLocalization("dojo","colors",this.lang);this._preparePalette(this._palettes[this.palette],_22d);}});dojo.declare("dijit._Color",dojo.Color,{constructor:function(_22e){this._alias=_22e;this.setColor(dojo.Color.named[_22e]);},getValue:function(){return this.toHex();},fillCell:function(cell,_22f){dojo.create("img",{src:_22f,"class":"dijitPaletteImg",alt:this._alias},cell);}});}if(!dojo._hasResource["dojo.dnd.common"]){dojo._hasResource["dojo.dnd.common"]=true;dojo.provide("dojo.dnd.common");dojo.dnd.getCopyKeyState=dojo.isCopyKey;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 _230=n.scrollLeft,_231=n.scrollTop;n.scrollLeft=n.scrollLeft+dx;n.scrollTop=n.scrollTop+dy;if(_230!=n.scrollLeft||_231!=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,_232=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),_232];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},e);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(e){var s=this.node.style,l,t,h=this.host;switch(s.position){case "relative":case "absolute":l=Math.round(parseFloat(s.left))||0;t=Math.round(parseFloat(s.top))||0;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,e);}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,_233){this.node=dojo.byId(node);if(!_233){_233={};}this.handle=_233.handle?dojo.byId(_233.handle):null;if(!this.handle){this.handle=this.node;}this.delay=_233.delay>0?_233.delay:0;this.skip=_233.skip;this.mover=_233.mover?_233.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(_234,node){return new dojo.dnd.Moveable(node,_234);},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(_235){dojo.publish("/dnd/move/start",[_235]);dojo.addClass(dojo.body(),"dojoMove");dojo.addClass(this.node,"dojoMoveItem");},onMoveStop:function(_236){dojo.publish("/dnd/move/stop",[_236]);dojo.removeClass(dojo.body(),"dojoMove");dojo.removeClass(this.node,"dojoMoveItem");},onFirstMove:function(_237,e){},onMove:function(_238,_239,e){this.onMoving(_238,_239);var s=_238.node.style;s.left=_239.l+"px";s.top=_239.t+"px";this.onMoved(_238,_239);},onMoving:function(_23a,_23b){},onMoved:function(_23c,_23d){}});}if(!dojo._hasResource["dojo.dnd.move"]){dojo._hasResource["dojo.dnd.move"]=true;dojo.provide("dojo.dnd.move");dojo.declare("dojo.dnd.move.constrainedMoveable",dojo.dnd.Moveable,{constraints:function(){},within:false,markupFactory:function(_23e,node){return new dojo.dnd.move.constrainedMoveable(node,_23e);},constructor:function(node,_23f){if(!_23f){_23f={};}this.constraints=_23f.constraints;this.within=_23f.within;},onFirstMove:function(_240){var c=this.constraintBox=this.constraints.call(this,_240);c.r=c.l+c.w;c.b=c.t+c.h;if(this.within){var mb=dojo.marginBox(_240.node);c.r-=mb.w;c.b-=mb.h;}},onMove:function(_241,_242){var c=this.constraintBox,s=_241.node.style;s.left=(_242.l<c.l?c.l:c.r<_242.l?c.r:_242.l)+"px";s.top=(_242.t<c.t?c.t:c.b<_242.t?c.b:_242.t)+"px";}});dojo.declare("dojo.dnd.move.boxConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{box:{},markupFactory:function(_243,node){return new dojo.dnd.move.boxConstrainedMoveable(node,_243);},constructor:function(node,_244){var box=_244&&_244.box;this.constraints=function(){return box;};}});dojo.declare("dojo.dnd.move.parentConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{area:"content",markupFactory:function(_245,node){return new dojo.dnd.move.parentConstrainedMoveable(node,_245);},constructor:function(node,_246){var area=_246&&_246.area;this.constraints=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(area=="margin"){return mb;}var t=dojo._getMarginExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(area=="border"){return mb;}t=dojo._getBorderExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(area=="padding"){return mb;}t=dojo._getPadExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;return mb;};}});dojo.dnd.move.constrainedMover=function(fun,_247){dojo.deprecated("dojo.dnd.move.constrainedMover, use dojo.dnd.move.constrainedMoveable instead");var _248=function(node,e,_249){dojo.dnd.Mover.call(this,node,e,_249);};dojo.extend(_248,dojo.dnd.Mover.prototype);dojo.extend(_248,{onMouseMove:function(e){dojo.dnd.autoScroll(e);var m=this.marginBox,c=this.constraintBox,l=m.l+e.pageX,t=m.t+e.pageY;l=l<c.l?c.l:c.r<l?c.r:l;t=t<c.t?c.t:c.b<t?c.b:t;this.host.onMove(this,{l:l,t:t});},onFirstMove:function(){dojo.dnd.Mover.prototype.onFirstMove.call(this);var c=this.constraintBox=fun.call(this);c.r=c.l+c.w;c.b=c.t+c.h;if(_247){var mb=dojo.marginBox(this.node);c.r-=mb.w;c.b-=mb.h;}}});return _248;};dojo.dnd.move.boxConstrainedMover=function(box,_24a){dojo.deprecated("dojo.dnd.move.boxConstrainedMover, use dojo.dnd.move.boxConstrainedMoveable instead");return dojo.dnd.move.constrainedMover(function(){return box;},_24a);};dojo.dnd.move.parentConstrainedMover=function(area,_24b){dojo.deprecated("dojo.dnd.move.parentConstrainedMover, use dojo.dnd.move.parentConstrainedMoveable instead");var fun=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(area=="margin"){return mb;}var t=dojo._getMarginExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(area=="border"){return mb;}t=dojo._getBorderExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(area=="padding"){return mb;}t=dojo._getPadExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;return mb;};return dojo.dnd.move.constrainedMover(fun,_24b);};dojo.dnd.constrainedMover=dojo.dnd.move.constrainedMover;dojo.dnd.boxConstrainedMover=dojo.dnd.move.boxConstrainedMover;dojo.dnd.parentConstrainedMover=dojo.dnd.move.parentConstrainedMover;}if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){dojo._hasResource["dojo.dnd.TimedMoveable"]=true;dojo.provide("dojo.dnd.TimedMoveable");(function(){var _24c=dojo.dnd.Moveable.prototype.onMove;dojo.declare("dojo.dnd.TimedMoveable",dojo.dnd.Moveable,{timeout:40,constructor:function(node,_24d){if(!_24d){_24d={};}if(_24d.timeout&&typeof _24d.timeout=="number"&&_24d.timeout>=0){this.timeout=_24d.timeout;}},markupFactory:function(_24e,node){return new dojo.dnd.TimedMoveable(node,_24e);},onMoveStop:function(_24f){if(_24f._timer){clearTimeout(_24f._timer);_24c.call(this,_24f,_24f._leftTop);}dojo.dnd.Moveable.prototype.onMoveStop.apply(this,arguments);},onMove:function(_250,_251){_250._leftTop=_251;if(!_250._timer){var _252=this;_250._timer=setTimeout(function(){_250._timer=null;_24c.call(_252,_250,_250._leftTop);},this.timeout);}}});})();}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(_253){if(_253.reset){_253.reset();}});},validate:function(){var _254=false;return dojo.every(dojo.map(this.getDescendants(),function(_255){_255._hasBeenBlurred=true;var _256=_255.disabled||!_255.validate||_255.validate();if(!_256&&!_254){dojo.window.scrollIntoView(_255.containerNode||_255.domNode);_255.focus();_254=true;}return _256;}),function(item){return item;});},setValues:function(val){dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(obj){var map={};dojo.forEach(this.getDescendants(),function(_257){if(!_257.name){return;}var _258=map[_257.name]||(map[_257.name]=[]);_258.push(_257);});for(var name in map){if(!map.hasOwnProperty(name)){continue;}var _259=map[name],_25a=dojo.getObject(name,false,obj);if(_25a===undefined){continue;}if(!dojo.isArray(_25a)){_25a=[_25a];}if(typeof _259[0].checked=="boolean"){dojo.forEach(_259,function(w,i){w.set("value",dojo.indexOf(_25a,w.value)!=-1);});}else{if(_259[0].multiple){_259[0].set("value",_25a);}else{dojo.forEach(_259,function(w,i){w.set("value",_25a[i]);});}}}},getValues:function(){dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_getValueAttr:function(){var obj={};dojo.forEach(this.getDescendants(),function(_25b){var name=_25b.name;if(!name||_25b.disabled){return;}var _25c=_25b.get("value");if(typeof _25b.checked=="boolean"){if(/Radio/.test(_25b.declaredClass)){if(_25c!==false){dojo.setObject(name,_25c,obj);}else{_25c=dojo.getObject(name,false,obj);if(_25c===undefined){dojo.setObject(name,null,obj);}}}else{var ary=dojo.getObject(name,false,obj);if(!ary){ary=[];dojo.setObject(name,ary,obj);}if(_25c!==false){ary.push(_25c);}}}else{var prev=dojo.getObject(name,false,obj);if(typeof prev!="undefined"){if(dojo.isArray(prev)){prev.push(_25c);}else{dojo.setObject(name,[prev,_25c],obj);}}else{dojo.setObject(name,_25c,obj);}}});return obj;},isValid:function(){this._invalidWidgets=dojo.filter(this.getDescendants(),function(_25d){return !_25d.disabled&&_25d.isValid&&!_25d.isValid();});return !this._invalidWidgets.length;},onValidStateChange:function(_25e){},_widgetChange:function(_25f){var _260=this._lastValidState;if(!_25f||this._lastValidState===undefined){_260=this.isValid();if(this._lastValidState===undefined){this._lastValidState=_260;}}else{if(_25f.isValid){this._invalidWidgets=dojo.filter(this._invalidWidgets||[],function(w){return (w!=_25f);},this);if(!_25f.isValid()&&!_25f.get("disabled")){this._invalidWidgets.push(_25f);}_260=(this._invalidWidgets.length===0);}}if(_260!==this._lastValidState){this._lastValidState=_260;this.onValidStateChange(_260);}},connectChildren:function(){dojo.forEach(this._changeConnections,dojo.hitch(this,"disconnect"));var _261=this;var _262=(this._changeConnections=[]);dojo.forEach(dojo.filter(this.getDescendants(),function(item){return item.validate;}),function(_263){_262.push(_261.connect(_263,"validate",dojo.hitch(_261,"_widgetChange",_263)));_262.push(_261.connect(_263,"_setDisabledAttr",dojo.hitch(_261,"_widgetChange",_263)));});this._widgetChange(null);},startup:function(){this.inherited(arguments);this._changeConnections=[];this.connectChildren();}});}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(_264){},onCancel:function(){},onExecute:function(){},_onSubmit:function(){this.onExecute();this.execute(this.get("value"));},_getFocusItems:function(_265){var _266=dijit._getTabNavigable(dojo.byId(_265));this._firstFocusItem=_266.lowest||_266.first||_265;this._lastFocusItem=_266.last||_266.highest||this._firstFocusItem;if(dojo.isMoz&&this._firstFocusItem.tagName.toLowerCase()=="input"&&dojo.getNodeProp(this._firstFocusItem,"type").toLowerCase()=="file"){dojo.attr(_265,"tabIndex","0");this._firstFocusItem=_265;}}});}if(!dojo._hasResource["dijit.DialogUnderlay"]){dojo._hasResource["dijit.DialogUnderlay"]=true;dojo.provide("dijit.DialogUnderlay");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(_267){this.node.className="dijitDialogUnderlay "+_267;},postCreate:function(){dojo.body().appendChild(this.domNode);},layout:function(){var is=this.node.style,os=this.domNode.style;os.display="none";var _268=dojo.window.getBox();os.top=_268.t+"px";os.left=_268.l+"px";is.width=_268.w+"px";is.height=_268.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);}});}if(!dojo._hasResource["dojo.html"]){dojo._hasResource["dojo.html"]=true;dojo.provide("dojo.html");(function(){var _269=0,d=dojo;dojo.html._secureForInnerHtml=function(cont){return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig,"");};dojo.html._emptyNode=dojo.empty;dojo.html._setNodeContent=function(node,cont){d.empty(node);if(cont){if(typeof cont=="string"){cont=d._toDom(cont,node.ownerDocument);}if(!cont.nodeType&&d.isArrayLike(cont)){for(var _26a=cont.length,i=0;i<cont.length;i=_26a==cont.length?i+1:0){d.place(cont[i],node,"last");}}else{d.place(cont,node,"last");}}return node;};dojo.declare("dojo.html._ContentSetter",null,{node:"",content:"",id:"",cleanContent:false,extractContent:false,parseContent:false,constructor:function(_26b,node){dojo.mixin(this,_26b||{});node=this.node=dojo.byId(this.node||node);if(!this.id){this.id=["Setter",(node)?node.id||node.tagName:"",_269++].join("_");}},set:function(cont,_26c){if(undefined!==cont){this.content=cont;}if(_26c){this._mixin(_26c);}this.onBegin();this.setContent();this.onEnd();return this.node;},setContent:function(){var node=this.node;if(!node){throw new Error(this.declaredClass+": setContent given no node");}try{node=dojo.html._setNodeContent(node,this.content);}catch(e){var _26d=this.onContentError(e);try{node.innerHTML=_26d;}catch(e){console.error("Fatal "+this.declaredClass+".setContent could not change content due to "+e.message,e);}}this.node=node;},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 cont=this.content;if(dojo.isString(cont)){if(this.cleanContent){cont=dojo.html._secureForInnerHtml(cont);}if(this.extractContent){var _26e=cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_26e){cont=_26e[1];}}}this.empty();this.content=cont;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(err){return "Error occured setting content: "+err;},_mixin:function(_26f){var _270={},key;for(key in _26f){if(key in _270){continue;}this[key]=_26f[key];}},_parse:function(){var _271=this.node;try{this.parseResults=dojo.parser.parse({rootNode:_271,dir:this.dir,lang:this.lang});}catch(e){this._onError("Content",e,"Error parsing in _ContentSetter#"+this.id);}},_onError:function(type,err,_272){var _273=this["on"+type+"Error"].call(this,err);if(_272){console.error(_272,err);}else{if(_273){dojo.html._setNodeContent(this.node,_273,true);}}}});dojo.html.set=function(node,cont,_274){if(undefined==cont){console.warn("dojo.html.set: no cont argument provided, using empty string");cont="";}if(!_274){return dojo.html._setNodeContent(node,cont,true);}else{var op=new dojo.html._ContentSetter(dojo.mixin(_274,{content:cont,node:node}));return op.set();}};})();}if(!dojo._hasResource["dijit.layout.ContentPane"]){dojo._hasResource["dijit.layout.ContentPane"]=true;dojo.provide("dijit.layout.ContentPane");dojo.declare("dijit.layout.ContentPane",dijit._Widget,{href:"",extractContent:false,parseOnLoad:true,preventCache:false,preload:false,refreshOnShow:false,loadingMessage:"<span class='dijitContentPaneLoading'>${loadingState}</span>",errorMessage:"<span class='dijitContentPaneError'>${errorState}</span>",isLoaded:false,baseClass:"dijitContentPane",doLayout:true,ioArgs:{},isContainer:true,isLayoutContainer:true,onLoadDeferred:null,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[]}),postMixInProperties:function(){this.inherited(arguments);var _275=dojo.i18n.getLocalization("dijit","loading",this.lang);this.loadingMessage=dojo.string.substitute(this.loadingMessage,_275);this.errorMessage=dojo.string.substitute(this.errorMessage,_275);if(!this.href&&this.srcNodeRef&&this.srcNodeRef.innerHTML){this.isLoaded=true;}},buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}},postCreate:function(){this.domNode.title="";if(!dojo.attr(this.domNode,"role")){dijit.setWaiRole(this.domNode,"group");}dojo.addClass(this.domNode,this.baseClass);},startup:function(){if(this._started){return;}var _276=dijit._Contained.prototype.getParent.call(this);this._childOfLayoutWidget=_276&&_276.isLayoutContainer;this._needLayout=!this._childOfLayoutWidget;if(this.isLoaded){dojo.forEach(this.getChildren(),function(_277){_277.startup();});}if(this._isShown()||this.preload){this._onShow();}this.inherited(arguments);},_checkIfSingleChild:function(){var _278=dojo.query("> *",this.containerNode).filter(function(node){return node.tagName!=="SCRIPT";}),_279=_278.filter(function(node){return dojo.hasAttr(node,"dojoType")||dojo.hasAttr(node,"widgetId");}),_27a=dojo.filter(_279.map(dijit.byNode),function(_27b){return _27b&&_27b.domNode&&_27b.resize;});if(_278.length==_279.length&&_27a.length==1){this._singleChild=_27a[0];}else{delete this._singleChild;}dojo.toggleClass(this.containerNode,this.baseClass+"SingleChild",!!this._singleChild);},setHref:function(href){dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.","","2.0");return this.set("href",href);},_setHrefAttr:function(href){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this.href=href;if(this._created&&(this.preload||this._isShown())){this._load();}else{this._hrefChanged=true;}return this.onLoadDeferred;},setContent:function(data){dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated.  Use set('content', ...) instead.","","2.0");this.set("content",data);},_setContentAttr:function(data){this.href="";this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this._setContent(data||"");this._isDownloaded=false;return this.onLoadDeferred;},_getContentAttr:function(){return this.containerNode.innerHTML;},cancel:function(){if(this._xhrDfd&&(this._xhrDfd.fired==-1)){this._xhrDfd.cancel();}delete this._xhrDfd;this.onLoadDeferred=null;},uninitialize:function(){if(this._beingDestroyed){this.cancel();}this.inherited(arguments);},destroyRecursive:function(_27c){if(this._beingDestroyed){return;}this.inherited(arguments);},resize:function(_27d,_27e){if(!this._wasShown){this._onShow();}this._resizeCalled=true;if(_27d){dojo.marginBox(this.domNode,_27d);}var cn=this.containerNode;if(cn===this.domNode){var mb=_27e||{};dojo.mixin(mb,_27d||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(cn),mb);}this._contentBox=dijit.layout.marginBox2contentBox(cn,mb);}else{this._contentBox=dojo.contentBox(cn);}this._layoutChildren();},_isShown:function(){if(this._childOfLayoutWidget){if(this._resizeCalled&&"open" in this){return this.open;}return this._resizeCalled;}else{if("open" in this){return this.open;}else{var node=this.domNode;return (node.style.display!="none")&&(node.style.visibility!="hidden")&&!dojo.hasClass(node,"dijitHidden");}}},_onShow:function(){if(this.href){if(!this._xhrDfd&&(!this.isLoaded||this._hrefChanged||this.refreshOnShow)){this.refresh();}}else{if(!this._childOfLayoutWidget&&this._needLayout){this._layoutChildren();}}this.inherited(arguments);this._wasShown=true;},refresh:function(){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this._load();return this.onLoadDeferred;},_load:function(){this._setContent(this.onDownloadStart(),true);var self=this;var _27f={preventCache:(this.preventCache||this.refreshOnShow),url:this.href,handleAs:"text"};if(dojo.isObject(this.ioArgs)){dojo.mixin(_27f,this.ioArgs);}var hand=(this._xhrDfd=(this.ioMethod||dojo.xhrGet)(_27f));hand.addCallback(function(html){try{self._isDownloaded=true;self._setContent(html,false);self.onDownloadEnd();}catch(err){self._onError("Content",err);}delete self._xhrDfd;return html;});hand.addErrback(function(err){if(!hand.canceled){self._onError("Download",err);}delete self._xhrDfd;return err;});delete this._hrefChanged;},_onLoadHandler:function(data){this.isLoaded=true;try{this.onLoadDeferred.callback(data);this.onLoad(data);}catch(e){console.error("Error "+this.widgetId+" running custom onLoad code: "+e.message);}},_onUnloadHandler:function(){this.isLoaded=false;try{this.onUnload();}catch(e){console.error("Error "+this.widgetId+" running custom onUnload code: "+e.message);}},destroyDescendants:function(){if(this.isLoaded){this._onUnloadHandler();}var _280=this._contentSetter;dojo.forEach(this.getChildren(),function(_281){if(_281.destroyRecursive){_281.destroyRecursive();}});if(_280){dojo.forEach(_280.parseResults,function(_282){if(_282.destroyRecursive&&_282.domNode&&_282.domNode.parentNode==dojo.body()){_282.destroyRecursive();}});delete _280.parseResults;}dojo.html._emptyNode(this.containerNode);delete this._singleChild;},_setContent:function(cont,_283){this.destroyDescendants();var _284=this._contentSetter;if(!(_284&&_284 instanceof dojo.html._ContentSetter)){_284=this._contentSetter=new dojo.html._ContentSetter({node:this.containerNode,_onError:dojo.hitch(this,this._onError),onContentError:dojo.hitch(this,function(e){var _285=this.onContentError(e);try{this.containerNode.innerHTML=_285;}catch(e){console.error("Fatal "+this.id+" could not change content due to "+e.message,e);}})});}var _286=dojo.mixin({cleanContent:this.cleanContent,extractContent:this.extractContent,parseContent:this.parseOnLoad,dir:this.dir,lang:this.lang},this._contentSetterParams||{});dojo.mixin(_284,_286);_284.set((dojo.isObject(cont)&&cont.domNode)?cont.domNode:cont);delete this._contentSetterParams;if(!_283){dojo.forEach(this.getChildren(),function(_287){if(!this.parseOnLoad||_287.getParent){_287.startup();}},this);this._scheduleLayout();this._onLoadHandler(cont);}},_onError:function(type,err,_288){this.onLoadDeferred.errback(err);var _289=this["on"+type+"Error"].call(this,err);if(_288){console.error(_288,err);}else{if(_289){this._setContent(_289,true);}}},_scheduleLayout:function(){if(this._isShown()){this._layoutChildren();}else{this._needLayout=true;}},_layoutChildren:function(){if(this.doLayout){this._checkIfSingleChild();}if(this._singleChild&&this._singleChild.resize){var cb=this._contentBox||dojo.contentBox(this.containerNode);this._singleChild.resize({w:cb.w,h:cb.h});}else{dojo.forEach(this.getChildren(),function(_28a){if(_28a.resize){_28a.resize();}});}delete this._needLayout;},onLoad:function(data){},onUnload:function(){},onDownloadStart:function(){return this.loadingMessage;},onContentError:function(_28b){},onDownloadError:function(_28c){return this.errorMessage;},onDownloadEnd:function(){}});}if(!dojo._hasResource["dijit.TooltipDialog"]){dojo._hasResource["dijit.TooltipDialog"]=true;dojo.provide("dijit.TooltipDialog");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(node,_28d,_28e){var c=this._currentOrientClass;if(c){dojo.removeClass(this.domNode,c);}c="dijitTooltipAB"+(_28e.charAt(1)=="L"?"Left":"Right")+" dijitTooltip"+(_28e.charAt(0)=="T"?"Below":"Above");dojo.addClass(this.domNode,c);this._currentOrientClass=c;},onOpen:function(pos){this.orient(this.domNode,pos.aroundCorner,pos.corner);this._onShow();if(this.autofocus){this._getFocusItems(this.containerNode);dijit.focus(this._firstFocusItem);}},onClose:function(){this.onHide();},_onKey:function(evt){var node=evt.target;var dk=dojo.keys;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.containerNode);}var _28f=(this._firstFocusItem==this._lastFocusItem);if(evt.charOrCode==dk.ESCAPE){setTimeout(dojo.hitch(this,"onCancel"),0);dojo.stopEvent(evt);}else{if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_28f){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_28f){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{if(evt.charOrCode===dk.TAB){evt.stopPropagation();}}}}}});}if(!dojo._hasResource["dijit.Dialog"]){dojo._hasResource["dijit.Dialog"]=true;dojo.provide("dijit.Dialog");dojo.declare("dijit._DialogBase",[dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/Dialog.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\"></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\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),baseClass:"dijitDialog",cssStateNodes:{closeButtonNode:"dijitDialogCloseIcon"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[{node:"titleNode",type:"innerHTML"},{node:"titleBar",type:"attribute"}],"aria-describedby":""}),open:false,duration:dijit.defaultDuration,refocus:true,autofocus:true,_firstFocusItem:null,_lastFocusItem:null,doLayout:false,draggable:true,"aria-describedby":"",postMixInProperties:function(){var _290=dojo.i18n.getLocalization("dijit","common");dojo.mixin(this,_290);this.inherited(arguments);},postCreate:function(){dojo.style(this.domNode,{display:"none",position:"absolute"});dojo.body().appendChild(this.domNode);this.inherited(arguments);this.connect(this,"onExecute","hide");this.connect(this,"onCancel","hide");this._modalconnects=[];},onLoad:function(){this._position();if(this.autofocus){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}this.inherited(arguments);},_endDrag:function(e){if(e&&e.node&&e.node===this.domNode){this._relativePosition=dojo.position(e.node);}},_setup:function(){var node=this.domNode;if(this.titleBar&&this.draggable){this._moveable=(dojo.isIE==6)?new dojo.dnd.TimedMoveable(node,{handle:this.titleBar}):new dojo.dnd.Moveable(node,{handle:this.titleBar,timeout:0});dojo.subscribe("/dnd/move/stop",this,"_endDrag");}else{dojo.addClass(node,"dijitDialogFixed");}this.underlayAttrs={dialogId:this.id,"class":dojo.map(this["class"].split(/\s/),function(s){return s+"_underlay";}).join(" ")};this._fadeIn=dojo.fadeIn({node:node,duration:this.duration,beforeBegin:dojo.hitch(this,function(){var _291=dijit._underlay;if(!_291){_291=dijit._underlay=new dijit.DialogUnderlay(this.underlayAttrs);}else{_291.set(this.underlayAttrs);}var ds=dijit._dialogStack,_292=948+ds.length*2;if(ds.length==1){_291.show();}dojo.style(dijit._underlay.domNode,"zIndex",_292);dojo.style(this.domNode,"zIndex",_292+1);}),onEnd:dojo.hitch(this,function(){if(this.autofocus){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}})});this._fadeOut=dojo.fadeOut({node:node,duration:this.duration,onEnd:dojo.hitch(this,function(){node.style.display="none";var ds=dijit._dialogStack;if(ds.length==0){dijit._underlay.hide();}else{dojo.style(dijit._underlay.domNode,"zIndex",948+ds.length*2);dijit._underlay.set(ds[ds.length-1].underlayAttrs);}if(this.refocus){var _293=this._savedFocus;if(ds.length>0){var pd=ds[ds.length-1];if(!dojo.isDescendant(_293.node,pd.domNode)){pd._getFocusItems(pd.domNode);_293=pd._firstFocusItem;}}dijit.focus(_293);}})});},uninitialize:function(){var _294=false;if(this._fadeIn&&this._fadeIn.status()=="playing"){_294=true;this._fadeIn.stop();}if(this._fadeOut&&this._fadeOut.status()=="playing"){_294=true;this._fadeOut.stop();}if((this.open||_294)&&!dijit._underlay._destroyed){dijit._underlay.hide();}if(this._moveable){this._moveable.destroy();}this.inherited(arguments);},_size:function(){this._checkIfSingleChild();if(this._singleChild){if(this._singleChildOriginalStyle){this._singleChild.domNode.style.cssText=this._singleChildOriginalStyle;}delete this._singleChildOriginalStyle;}else{dojo.style(this.containerNode,{width:"auto",height:"auto"});}var mb=dojo.marginBox(this.domNode);var _295=dojo.window.getBox();if(mb.w>=_295.w||mb.h>=_295.h){var w=Math.min(mb.w,Math.floor(_295.w*0.75)),h=Math.min(mb.h,Math.floor(_295.h*0.75));if(this._singleChild&&this._singleChild.resize){this._singleChildOriginalStyle=this._singleChild.domNode.style.cssText;this._singleChild.resize({w:w,h:h});}else{dojo.style(this.containerNode,{width:w+"px",height:h+"px",overflow:"auto",position:"relative"});}}else{if(this._singleChild&&this._singleChild.resize){this._singleChild.resize();}}},_position:function(){if(!dojo.hasClass(dojo.body(),"dojoMove")){var node=this.domNode,_296=dojo.window.getBox(),p=this._relativePosition,bb=p?null:dojo._getBorderBox(node),l=Math.floor(_296.l+(p?p.x:(_296.w-bb.w)/2)),t=Math.floor(_296.t+(p?p.y:(_296.h-bb.h)/2));dojo.style(node,{left:l+"px",top:t+"px"});}},_onKey:function(evt){var ds=dijit._dialogStack;if(ds[ds.length-1]!=this){return;}if(evt.charOrCode){var dk=dojo.keys;var node=evt.target;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.domNode);}var _297=(this._firstFocusItem==this._lastFocusItem);if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_297){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_297){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{while(node){if(node==this.domNode||dojo.hasClass(node,"dijitPopup")){if(evt.charOrCode==dk.ESCAPE){this.onCancel();}else{return;}}node=node.parentNode;}if(evt.charOrCode!==dk.TAB){dojo.stopEvent(evt);}else{if(!dojo.isOpera){try{this._firstFocusItem.focus();}catch(e){}}}}}}},show:function(){if(this.open){return;}if(!this._alreadyInitialized){this._setup();this._alreadyInitialized=true;}if(this._fadeOut.status()=="playing"){this._fadeOut.stop();}this._modalconnects.push(dojo.connect(window,"onscroll",this,"layout"));this._modalconnects.push(dojo.connect(window,"onresize",this,function(){var _298=dojo.window.getBox();if(!this._oldViewport||_298.h!=this._oldViewport.h||_298.w!=this._oldViewport.w){this.layout();this._oldViewport=_298;}}));this._modalconnects.push(dojo.connect(dojo.doc.documentElement,"onkeypress",this,"_onKey"));dojo.style(this.domNode,{opacity:0,display:""});this.open=true;this._onShow();this._size();this._position();dijit._dialogStack.push(this);this._fadeIn.play();this._savedFocus=dijit.getFocus(this);},hide:function(){var ds=dijit._dialogStack;if(!this._alreadyInitialized||this!=ds[ds.length-1]){return;}if(this._fadeIn.status()=="playing"){this._fadeIn.stop();}ds.pop();this._fadeOut.play();if(this._scrollConnected){this._scrollConnected=false;}dojo.forEach(this._modalconnects,dojo.disconnect);this._modalconnects=[];if(this._relativePosition){delete this._relativePosition;}this.open=false;this.onHide();},layout:function(){if(this.domNode.style.display!="none"){if(dijit._underlay){dijit._underlay.layout();}this._position();}},destroy:function(){dojo.forEach(this._modalconnects,dojo.disconnect);if(this.refocus&&this.open){setTimeout(dojo.hitch(dijit,"focus",this._savedFocus),25);}this.inherited(arguments);}});dojo.declare("dijit.Dialog",[dijit.layout.ContentPane,dijit._DialogBase],{});dijit._dialogStack=[];}if(!dojo._hasResource["dijit._HasDropDown"]){dojo._hasResource["dijit._HasDropDown"]=true;dojo.provide("dijit._HasDropDown");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,_onDropDownMouseDown:function(e){if(this.disabled||this.readOnly){return;}this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseUp");this.toggleDropDown();},_onDropDownMouseUp:function(e){if(e&&this._docHandler){this.disconnect(this._docHandler);}var _299=this.dropDown,_29a=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&&!_29a){if(dojo.hasClass(t,"dijitPopup")){_29a=true;}else{t=t.parentNode;}}if(_29a){t=e.target;if(_299.onItemClick){var _29b;while(t&&!(_29b=dijit.byNode(t))){t=t.parentNode;}if(_29b&&_29b.onClick&&_29b.getParent){_29b.getParent().onItemClick(_29b,e);}}return;}}}if(this._opened&&_299.focus){window.setTimeout(dojo.hitch(_299,"focus"),1);}},_onDropDownClick:function(e){if(this._stopClickEvents){dojo.stopEvent(e);}},_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","_onDropDownMouseDown");this.connect(this._buttonNode,"onclick","_onDropDownClick");this.connect(this._buttonNode,"onkeydown","_onDropDownKeydown");this.connect(this._buttonNode,"onkeyup","_onKey");if(this._setStateClass){this.connect(this,"openDropDown","_setStateClass");this.connect(this,"closeDropDown","_setStateClass");}var _29c={"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"+_29c+"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){if(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE){e.preventDefault();}},_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();}else{if(d&&!this._opened&&(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE)){this.toggleDropDown();if(d.focus){setTimeout(dojo.hitch(d,"focus"),1);}}}},_onBlur:function(){this.closeDropDown();this.inherited(arguments);},isLoaded:function(){return true;},loadDropDown:function(_29d){_29d();},toggleDropDown:function(){if(this.disabled||this.readOnly){return;}this.focus();var _29e=this.dropDown;if(!_29e){return;}if(!this._opened){if(!this.isLoaded()){this.loadDropDown(dojo.hitch(this,"openDropDown"));return;}else{this.openDropDown();}}else{this.closeDropDown();}},openDropDown:function(){var _29f=this.dropDown;var _2a0=_29f.domNode;var self=this;if(!this._preparedNode){dijit.popup.moveOffScreen(_2a0);this._preparedNode=true;if(_2a0.style.width){this._explicitDDWidth=true;}if(_2a0.style.height){this._explicitDDHeight=true;}}if(this.maxHeight||this.forceWidth||this.autoWidth){var _2a1={display:"",visibility:"hidden"};if(!this._explicitDDWidth){_2a1.width="";}if(!this._explicitDDHeight){_2a1.height="";}dojo.style(_2a0,_2a1);var mb=dojo.marginBox(_2a0);var _2a2=(this.maxHeight&&mb.h>this.maxHeight);dojo.style(_2a0,{overflowX:"hidden",overflowY:_2a2?"auto":"hidden"});if(_2a2){mb.h=this.maxHeight;if("w" in mb){mb.w+=16;}}else{delete mb.h;}delete mb.t;delete mb.l;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(dojo.isFunction(_29f.resize)){_29f.resize(mb);}else{dojo.marginBox(_2a0,mb);}}var _2a3=dijit.popup.open({parent:this,popup:_29f,around:this._aroundNode,orient:dijit.getPopupAroundAlignment((this.dropDownPosition&&this.dropDownPosition.length)?this.dropDownPosition:["below"],this.isLeftToRight()),onExecute:function(){self.closeDropDown(true);},onCancel:function(){self.closeDropDown(true);},onClose:function(){dojo.attr(self._popupStateNode,"popupActive",false);dojo.removeClass(self._popupStateNode,"dijitHasDropDownOpen");self._opened=false;self.state="";}});dojo.attr(this._popupStateNode,"popupActive","true");dojo.addClass(self._popupStateNode,"dijitHasDropDownOpen");this._opened=true;this.state="Opened";return _2a3;},closeDropDown:function(_2a4){if(this._opened){if(_2a4){this.focus();}dijit.popup.close(this.dropDown);this._opened=false;this.state="";}}});}if(!dojo._hasResource["dijit.form.Button"]){dojo._hasResource["dijit.form.Button"]=true;dojo.provide("dijit.form.Button");dojo.declare("dijit.form.Button",dijit.form._FormWidget,{label:"",showLabel:true,iconClass:"",type:"button",baseClass:"dijitButton",templateString:dojo.cache("dijit.form","templates/Button.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"valueNode",iconClass:{node:"iconNode",type:"class"}}),_onClick:function(e){if(this.disabled){return false;}this._clicked();return this.onClick(e);},_onButtonClick:function(e){if(this._onClick(e)===false){e.preventDefault();}else{if(this.type=="submit"&&!(this.valueNode||this.focusNode).form){for(var node=this.domNode;node.parentNode;node=node.parentNode){var _2a5=dijit.byNode(node);if(_2a5&&typeof _2a5._onSubmit=="function"){_2a5._onSubmit(e);break;}}}else{if(this.valueNode){this.valueNode.click();e.preventDefault();}}}},_fillContent:function(_2a6){if(_2a6&&(!this.params||!("label" in this.params))){this.set("label",_2a6.innerHTML);}},postCreate:function(){dojo.setSelectable(this.focusNode,false);this.inherited(arguments);},_setShowLabelAttr:function(val){if(this.containerNode){dojo.toggleClass(this.containerNode,"dijitDisplayNone",!val);}this.showLabel=val;},onClick:function(e){return true;},_clicked:function(e){},setLabel:function(_2a7){dojo.deprecated("dijit.form.Button.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");this.set("label",_2a7);},_setLabelAttr:function(_2a8){this.containerNode.innerHTML=this.label=_2a8;if(this.showLabel==false&&!this.params.title){this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}}});dojo.declare("dijit.form.DropDownButton",[dijit.form.Button,dijit._Container,dijit._HasDropDown],{baseClass:"dijitDropDownButton",templateString:dojo.cache("dijit.form","templates/DropDownButton.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),_fillContent:function(){if(this.srcNodeRef){var _2a9=dojo.query("*",this.srcNodeRef);dijit.form.DropDownButton.superclass._fillContent.call(this,_2a9[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}if(!this.dropDown){var _2aa=dojo.query("[widgetId]",this.dropDownContainer)[0];this.dropDown=dijit.byNode(_2aa);delete this.dropDownContainer;}dijit.popup.moveOffScreen(this.dropDown.domNode);this.inherited(arguments);},isLoaded:function(){var _2ab=this.dropDown;return (!_2ab.href||_2ab.isLoaded);},loadDropDown:function(){var _2ac=this.dropDown;if(!_2ac){return;}if(!this.isLoaded()){var _2ad=dojo.connect(_2ac,"onLoad",this,function(){dojo.disconnect(_2ad);this.openDropDown();});_2ac.refresh();}else{this.openDropDown();}},isFocusable:function(){return this.inherited(arguments)&&!this._mouseDown;}});dojo.declare("dijit.form.ComboButton",dijit.form.DropDownButton,{templateString:dojo.cache("dijit.form","templates/ComboButton.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{id:"",tabIndex:["focusNode","titleNode"],title:"titleNode"}),optionsTitle:"",baseClass:"dijitComboButton",cssStateNodes:{"buttonNode":"dijitButtonNode","titleNode":"dijitButtonContents","_popupStateNode":"dijitDownArrowButton"},_focusedNode:null,_onButtonKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"RIGHT_ARROW":"LEFT_ARROW"]){dijit.focus(this._popupStateNode);dojo.stopEvent(evt);}},_onArrowKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"LEFT_ARROW":"RIGHT_ARROW"]){dijit.focus(this.titleNode);dojo.stopEvent(evt);}},focus:function(_2ae){dijit.focus(_2ae=="start"?this.titleNode:this._popupStateNode);}});dojo.declare("dijit.form.ToggleButton",dijit.form.Button,{baseClass:"dijitToggleButton",checked:false,attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{checked:"focusNode"}),_clicked:function(evt){this.set("checked",!this.checked);},_setCheckedAttr:function(_2af,_2b0){this.checked=_2af;dojo.attr(this.focusNode||this.domNode,"checked",_2af);dijit.setWaiState(this.focusNode||this.domNode,"pressed",_2af);this._handleOnChange(_2af,_2b0);},setChecked:function(_2b1){dojo.deprecated("setChecked("+_2b1+") is deprecated. Use set('checked',"+_2b1+") instead.","","2.0");this.set("checked",_2b1);},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);}});}if(!dojo._hasResource["dijit.form.ToggleButton"]){dojo._hasResource["dijit.form.ToggleButton"]=true;dojo.provide("dijit.form.ToggleButton");}if(!dojo._hasResource["dijit.form.CheckBox"]){dojo._hasResource["dijit.form.CheckBox"]=true;dojo.provide("dijit.form.CheckBox");dojo.declare("dijit.form.CheckBox",dijit.form.ToggleButton,{templateString:dojo.cache("dijit.form","templates/CheckBox.html","<div class=\"dijit dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),baseClass:"dijitCheckBox",type:"checkbox",value:"on",readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{readOnly:"focusNode"}),_setReadOnlyAttr:function(_2b2){this.readOnly=_2b2;dojo.attr(this.focusNode,"readOnly",_2b2);dijit.setWaiState(this.focusNode,"readonly",_2b2);},_setValueAttr:function(_2b3,_2b4){if(typeof _2b3=="string"){this.value=_2b3;dojo.attr(this.focusNode,"value",_2b3);_2b3=true;}if(this._created){this.set("checked",_2b3,_2b4);}},_getValueAttr:function(){return (this.checked?this.value:false);},_setLabelAttr:undefined,postMixInProperties:function(){if(this.value==""){this.value="on";}this.checkedAttrSetting=this.checked?"checked":"";this.inherited(arguments);},_fillContent:function(_2b5){},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);this.value=this.params.value||"on";dojo.attr(this.focusNode,"value",this.value);},_onFocus:function(){if(this.id){dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");}this.inherited(arguments);},_onBlur:function(){if(this.id){dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");}this.inherited(arguments);},_onClick:function(e){if(this.readOnly){return false;}return this.inherited(arguments);}});dojo.declare("dijit.form.RadioButton",dijit.form.CheckBox,{type:"radio",baseClass:"dijitRadio",_setCheckedAttr:function(_2b6){this.inherited(arguments);if(!this._created){return;}if(_2b6){var _2b7=this;dojo.query("INPUT[type=radio]",this.focusNode.form||dojo.doc).forEach(function(_2b8){if(_2b8.name==_2b7.name&&_2b8!=_2b7.focusNode&&_2b8.form==_2b7.focusNode.form){var _2b9=dijit.getEnclosingWidget(_2b8);if(_2b9&&_2b9.checked){_2b9.set("checked",false);}}});}},_clicked:function(e){if(!this.checked){this.set("checked",true);}}});}if(!dojo._hasResource["dijit.form.DropDownButton"]){dojo._hasResource["dijit.form.DropDownButton"]=true;dojo.provide("dijit.form.DropDownButton");}if(!dojo._hasResource["dojo.regexp"]){dojo._hasResource["dojo.regexp"]=true;dojo.provide("dojo.regexp");dojo.regexp.escapeString=function(str,_2ba){return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(ch){if(_2ba&&_2ba.indexOf(ch)!=-1){return ch;}return "\\"+ch;});};dojo.regexp.buildGroupRE=function(arr,re,_2bb){if(!(arr instanceof Array)){return re(arr);}var b=[];for(var i=0;i<arr.length;i++){b.push(re(arr[i]));}return dojo.regexp.group(b.join("|"),_2bb);};dojo.regexp.group=function(_2bc,_2bd){return "("+(_2bd?"?:":"")+_2bc+")";};}if(!dojo._hasResource["dojo.data.util.sorter"]){dojo._hasResource["dojo.data.util.sorter"]=true;dojo.provide("dojo.data.util.sorter");dojo.data.util.sorter.basicComparator=function(a,b){var r=-1;if(a===null){a=undefined;}if(b===null){b=undefined;}if(a==b){r=0;}else{if(a>b||a==null){r=1;}}return r;};dojo.data.util.sorter.createSortFunction=function(_2be,_2bf){var _2c0=[];function _2c1(attr,dir,comp,s){return function(_2c2,_2c3){var a=s.getValue(_2c2,attr);var b=s.getValue(_2c3,attr);return dir*comp(a,b);};};var _2c4;var map=_2bf.comparatorMap;var bc=dojo.data.util.sorter.basicComparator;for(var i=0;i<_2be.length;i++){_2c4=_2be[i];var attr=_2c4.attribute;if(attr){var dir=(_2c4.descending)?-1:1;var comp=bc;if(map){if(typeof attr!=="string"&&("toString" in attr)){attr=attr.toString();}comp=map[attr]||bc;}_2c0.push(_2c1(attr,dir,comp,_2bf));}}return function(rowA,rowB){var i=0;while(i<_2c0.length){var ret=_2c0[i++](rowA,rowB);if(ret!==0){return ret;}}return 0;};};}if(!dojo._hasResource["dojo.data.util.simpleFetch"]){dojo._hasResource["dojo.data.util.simpleFetch"]=true;dojo.provide("dojo.data.util.simpleFetch");dojo.data.util.simpleFetch.fetch=function(_2c5){_2c5=_2c5||{};if(!_2c5.store){_2c5.store=this;}var self=this;var _2c6=function(_2c7,_2c8){if(_2c8.onError){var _2c9=_2c8.scope||dojo.global;_2c8.onError.call(_2c9,_2c7,_2c8);}};var _2ca=function(_2cb,_2cc){var _2cd=_2cc.abort||null;var _2ce=false;var _2cf=_2cc.start?_2cc.start:0;var _2d0=(_2cc.count&&(_2cc.count!==Infinity))?(_2cf+_2cc.count):_2cb.length;_2cc.abort=function(){_2ce=true;if(_2cd){_2cd.call(_2cc);}};var _2d1=_2cc.scope||dojo.global;if(!_2cc.store){_2cc.store=self;}if(_2cc.onBegin){_2cc.onBegin.call(_2d1,_2cb.length,_2cc);}if(_2cc.sort){_2cb.sort(dojo.data.util.sorter.createSortFunction(_2cc.sort,self));}if(_2cc.onItem){for(var i=_2cf;(i<_2cb.length)&&(i<_2d0);++i){var item=_2cb[i];if(!_2ce){_2cc.onItem.call(_2d1,item,_2cc);}}}if(_2cc.onComplete&&!_2ce){var _2d2=null;if(!_2cc.onItem){_2d2=_2cb.slice(_2cf,_2d0);}_2cc.onComplete.call(_2d1,_2d2,_2cc);}};this._fetchItems(_2c5,_2ca,_2c6);return _2c5;};}if(!dojo._hasResource["dojo.data.util.filter"]){dojo._hasResource["dojo.data.util.filter"]=true;dojo.provide("dojo.data.util.filter");dojo.data.util.filter.patternToRegExp=function(_2d3,_2d4){var rxp="^";var c=null;for(var i=0;i<_2d3.length;i++){c=_2d3.charAt(i);switch(c){case "\\":rxp+=c;i++;rxp+=_2d3.charAt(i);break;case "*":rxp+=".*";break;case "?":rxp+=".";break;case "$":case "^":case "/":case "+":case ".":case "|":case "(":case ")":case "{":case "}":case "[":case "]":rxp+="\\";default:rxp+=c;}}rxp+="$";if(_2d4){return new RegExp(rxp,"mi");}else{return new RegExp(rxp,"m");}};}if(!dojo._hasResource["dijit.form.TextBox"]){dojo._hasResource["dijit.form.TextBox"]=true;dojo.provide("dijit.form.TextBox");dojo.declare("dijit.form.TextBox",dijit.form._FormValueWidget,{trim:false,uppercase:false,lowercase:false,propercase:false,maxLength:"",selectOnClick:false,placeHolder:"",templateString:dojo.cache("dijit.form","templates/TextBox.html","<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),_singleNodeTemplate:"<input class=\"dijit dijitReset dijitLeft dijitInputField\" dojoAttachPoint=\"textbox,focusNode\" autocomplete=\"off\" type=\"${type}\" ${!nameAttrSetting} />",_buttonInputDisabled:dojo.isIE?"disabled":"",baseClass:"dijitTextBox",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{maxLength:"focusNode"}),postMixInProperties:function(){var type=this.type.toLowerCase();if(this.templateString.toLowerCase()=="input"||((type=="hidden"||type=="file")&&this.templateString==dijit.form.TextBox.prototype.templateString)){this.templateString=this._singleNodeTemplate;}this.inherited(arguments);},_setPlaceHolderAttr:function(v){this.placeHolder=v;if(!this._phspan){this._attachPoints.push("_phspan");this._phspan=dojo.create("span",{className:"dijitPlaceHolder dijitInputField"},this.textbox,"after");}this._phspan.innerHTML="";this._phspan.appendChild(document.createTextNode(v));this._updatePlaceHolder();},_updatePlaceHolder:function(){if(this._phspan){this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";}},_getValueAttr:function(){return this.parse(this.get("displayedValue"),this.constraints);},_setValueAttr:function(_2d5,_2d6,_2d7){var _2d8;if(_2d5!==undefined){_2d8=this.filter(_2d5);if(typeof _2d7!="string"){if(_2d8!==null&&((typeof _2d8!="number")||!isNaN(_2d8))){_2d7=this.filter(this.format(_2d8,this.constraints));}else{_2d7="";}}}if(_2d7!=null&&_2d7!=undefined&&((typeof _2d7)!="number"||!isNaN(_2d7))&&this.textbox.value!=_2d7){this.textbox.value=_2d7;}this._updatePlaceHolder();this.inherited(arguments,[_2d8,_2d6]);},displayedValue:"",getDisplayedValue:function(){dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.","","2.0");return this.get("displayedValue");},_getDisplayedValueAttr:function(){return this.filter(this.textbox.value);},setDisplayedValue:function(_2d9){dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.","","2.0");this.set("displayedValue",_2d9);},_setDisplayedValueAttr:function(_2da){if(_2da===null||_2da===undefined){_2da="";}else{if(typeof _2da!="string"){_2da=String(_2da);}}this.textbox.value=_2da;this._setValueAttr(this.get("value"),undefined,_2da);},format:function(_2db,_2dc){return ((_2db==null||_2db==undefined)?"":(_2db.toString?_2db.toString():_2db));},parse:function(_2dd,_2de){return _2dd;},_refreshState:function(){},_onInput:function(e){if(e&&e.type&&/key/i.test(e.type)&&e.keyCode){switch(e.keyCode){case dojo.keys.SHIFT:case dojo.keys.ALT:case dojo.keys.CTRL:case dojo.keys.TAB:return;}}if(this.intermediateChanges){var _2df=this;setTimeout(function(){_2df._handleOnChange(_2df.get("value"),false);},0);}this._refreshState();},postCreate:function(){if(dojo.isIE){var s=dojo.getComputedStyle(this.domNode);if(s){var ff=s.fontFamily;if(ff){var _2e0=this.domNode.getElementsByTagName("INPUT");if(_2e0){for(var i=0;i<_2e0.length;i++){_2e0[i].style.fontFamily=ff;}}}}}this.textbox.setAttribute("value",this.textbox.value);this.inherited(arguments);if(dojo.isMoz||dojo.isOpera){this.connect(this.textbox,"oninput",this._onInput);}else{this.connect(this.textbox,"onkeydown",this._onInput);this.connect(this.textbox,"onkeyup",this._onInput);this.connect(this.textbox,"onpaste",this._onInput);this.connect(this.textbox,"oncut",this._onInput);}},_blankValue:"",filter:function(val){if(val===null){return this._blankValue;}if(typeof val!="string"){return val;}if(this.trim){val=dojo.trim(val);}if(this.uppercase){val=val.toUpperCase();}if(this.lowercase){val=val.toLowerCase();}if(this.propercase){val=val.replace(/[^\s]+/g,function(word){return word.substring(0,1).toUpperCase()+word.substring(1);});}return val;},_setBlurValue:function(){this._setValueAttr(this.get("value"),true);},_onBlur:function(e){if(this.disabled){return;}this._setBlurValue();this.inherited(arguments);if(this._selectOnClickHandle){this.disconnect(this._selectOnClickHandle);}if(this.selectOnClick&&dojo.isMoz){this.textbox.selectionStart=this.textbox.selectionEnd=undefined;}this._updatePlaceHolder();},_onFocus:function(by){if(this.disabled||this.readOnly){return;}if(this.selectOnClick&&by=="mouse"){this._selectOnClickHandle=this.connect(this.domNode,"onmouseup",function(){this.disconnect(this._selectOnClickHandle);var _2e1;if(dojo.isIE){var _2e2=dojo.doc.selection.createRange();var _2e3=_2e2.parentElement();_2e1=_2e3==this.textbox&&_2e2.text.length==0;}else{_2e1=this.textbox.selectionStart==this.textbox.selectionEnd;}if(_2e1){dijit.selectInputText(this.textbox);}});}this._updatePlaceHolder();this._refreshState();this.inherited(arguments);},reset:function(){this.textbox.value="";this.inherited(arguments);}});dijit.selectInputText=function(_2e4,_2e5,stop){var _2e6=dojo.global;var _2e7=dojo.doc;_2e4=dojo.byId(_2e4);if(isNaN(_2e5)){_2e5=0;}if(isNaN(stop)){stop=_2e4.value?_2e4.value.length:0;}dijit.focus(_2e4);if(_2e7["selection"]&&dojo.body()["createTextRange"]){if(_2e4.createTextRange){var _2e8=_2e4.createTextRange();with(_2e8){collapse(true);moveStart("character",-99999);moveStart("character",_2e5);moveEnd("character",stop-_2e5);select();}}}else{if(_2e6["getSelection"]){if(_2e4.setSelectionRange){_2e4.setSelectionRange(_2e5,stop);}}}};}if(!dojo._hasResource["dijit.Tooltip"]){dojo._hasResource["dijit.Tooltip"]=true;dojo.provide("dijit.Tooltip");dojo.declare("dijit._MasterTooltip",[dijit._Widget,dijit._Templated],{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);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(_2e9,_2ea,_2eb,rtl){if(this.aroundNode&&this.aroundNode===_2ea){return;}if(this.fadeOut.status()=="playing"){this._onDeck=arguments;return;}this.containerNode.innerHTML=_2e9;var pos=dijit.placeOnScreenAroundElement(this.domNode,_2ea,dijit.getPopupAroundAlignment((_2eb&&_2eb.length)?_2eb:dijit.Tooltip.defaultPosition,!rtl),dojo.hitch(this,"orient"));dojo.style(this.domNode,"opacity",0);this.fadeIn.play();this.isShowingNow=true;this.aroundNode=_2ea;},orient:function(node,_2ec,_2ed){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"}[_2ec+"-"+_2ed];},_onShow:function(){if(dojo.isIE){this.domNode.style.filter="";}},hide:function(_2ee){if(this._onDeck&&this._onDeck[1]==_2ee){this._onDeck=null;}else{if(this.aroundNode===_2ee){this.fadeIn.stop();this.isShowingNow=false;this.aroundNode=null;this.fadeOut.play();}else{}}},_onHide:function(){this.domNode.style.cssText="";this.containerNode.innerHTML="";if(this._onDeck){this.show.apply(this,this._onDeck);this._onDeck=null;}}});dijit.showTooltip=function(_2ef,_2f0,_2f1,rtl){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.show(_2ef,_2f0,_2f1,rtl);};dijit.hideTooltip=function(_2f2){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.hide(_2f2);};dojo.declare("dijit.Tooltip",dijit._Widget,{label:"",showDelay:400,connectId:[],position:[],constructor:function(){this._nodeConnectionsById={};},_setConnectIdAttr:function(_2f3){for(var _2f4 in this._nodeConnectionsById){this.removeTarget(_2f4);}dojo.forEach(dojo.isArrayLike(_2f3)?_2f3:[_2f3],this.addTarget,this);},_getConnectIdAttr:function(){var ary=[];for(var id in this._nodeConnectionsById){ary.push(id);}return ary;},addTarget:function(id){var node=dojo.byId(id);if(!node){return;}if(node.id in this._nodeConnectionsById){return;}this._nodeConnectionsById[node.id]=[this.connect(node,"onmouseenter","_onTargetMouseEnter"),this.connect(node,"onmouseleave","_onTargetMouseLeave"),this.connect(node,"onfocus","_onTargetFocus"),this.connect(node,"onblur","_onTargetBlur")];},removeTarget:function(node){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);var ids=this.connectId;dojo.forEach(dojo.isArrayLike(ids)?ids:[ids],this.addTarget,this);},_onTargetMouseEnter:function(e){this._onHover(e);},_onTargetMouseLeave:function(e){this._onUnHover(e);},_onTargetFocus:function(e){this._focus=true;this._onHover(e);},_onTargetBlur:function(e){this._focus=false;this._onUnHover(e);},_onHover:function(e){if(!this._showTimer){var _2f5=e.target;this._showTimer=setTimeout(dojo.hitch(this,function(){this.open(_2f5);}),this.showDelay);}},_onUnHover:function(e){if(this._focus){return;}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}this.close();},open:function(_2f6){if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}dijit.showTooltip(this.label||this.domNode.innerHTML,_2f6,this.position,!this.isLeftToRight());this._connectNode=_2f6;this.onShow(_2f6,this.position);},close:function(){if(this._connectNode){dijit.hideTooltip(this._connectNode);delete this._connectNode;this.onHide();}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}},onShow:function(_2f7,_2f8){},onHide:function(){},uninitialize:function(){this.close();this.inherited(arguments);}});dijit.Tooltip.defaultPosition=["after","before"];}if(!dojo._hasResource["dijit.form.ValidationTextBox"]){dojo._hasResource["dijit.form.ValidationTextBox"]=true;dojo.provide("dijit.form.ValidationTextBox");dojo.declare("dijit.form.ValidationTextBox",dijit.form.TextBox,{templateString:dojo.cache("dijit.form","templates/ValidationTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitValidationTextBox",required:false,promptMessage:"",invalidMessage:"$_unset_$",missingMessage:"$_unset_$",constraints:{},regExp:".*",regExpGen:function(_2f9){return this.regExp;},state:"",tooltipPosition:[],_setValueAttr:function(){this.inherited(arguments);this.validate(this._focused);},validator:function(_2fa,_2fb){return (new RegExp("^(?:"+this.regExpGen(_2fb)+")"+(this.required?"":"?")+"$")).test(_2fa)&&(!this.required||!this._isEmpty(_2fa))&&(this._isEmpty(_2fa)||this.parse(_2fa,_2fb)!==undefined);},_isValidSubset:function(){return this.textbox.value.search(this._partialre)==0;},isValid:function(_2fc){return this.validator(this.textbox.value,this.constraints);},_isEmpty:function(_2fd){return /^\s*$/.test(_2fd);},getErrorMessage:function(_2fe){return (this.required&&this._isEmpty(this.textbox.value))?this.missingMessage:this.invalidMessage;},getPromptMessage:function(_2ff){return this.promptMessage;},_maskValidSubsetError:true,validate:function(_300){var _301="";var _302=this.disabled||this.isValid(_300);if(_302){this._maskValidSubsetError=true;}var _303=this._isEmpty(this.textbox.value);var _304=!_302&&!_303&&_300&&this._isValidSubset();this.state=((_302||((!this._hasBeenBlurred||_300)&&_303)||_304)&&this._maskValidSubsetError)?"":"Error";if(this.state=="Error"){this._maskValidSubsetError=_300;}this._setStateClass();dijit.setWaiState(this.focusNode,"invalid",_302?"false":"true");if(_300){if(this.state=="Error"){_301=this.getErrorMessage(true);}else{_301=this.getPromptMessage(true);}this._maskValidSubsetError=true;}this.displayMessage(_301);return _302;},_message:"",displayMessage:function(_305){if(this._message==_305){return;}this._message=_305;dijit.hideTooltip(this.domNode);if(_305){dijit.showTooltip(_305,this.domNode,this.tooltipPosition,!this.isLeftToRight());}},_refreshState:function(){this.validate(this._focused);this.inherited(arguments);},constructor:function(){this.constraints={};},_setConstraintsAttr:function(_306){if(!_306.locale&&this.lang){_306.locale=this.lang;}this.constraints=_306;this._computePartialRE();},_computePartialRE:function(){var p=this.regExpGen(this.constraints);this.regExp=p;var _307="";if(p!=".*"){this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,function(re){switch(re.charAt(0)){case "{":case "+":case "?":case "*":case "^":case "$":case "|":case "(":_307+=re;break;case ")":_307+="|$)";break;default:_307+="(?:"+re+"|$)";break;}});}try{"".search(_307);}catch(e){_307=this.regExp;console.warn("RegExp error in "+this.declaredClass+": "+this.regExp);}this._partialre="^(?:"+_307+")$";},postMixInProperties:function(){this.inherited(arguments);this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);if(this.invalidMessage=="$_unset_$"){this.invalidMessage=this.messages.invalidMessage;}if(!this.invalidMessage){this.invalidMessage=this.promptMessage;}if(this.missingMessage=="$_unset_$"){this.missingMessage=this.messages.missingMessage;}if(!this.missingMessage){this.missingMessage=this.invalidMessage;}this._setConstraintsAttr(this.constraints);},_setDisabledAttr:function(_308){this.inherited(arguments);this._refreshState();},_setRequiredAttr:function(_309){this.required=_309;dijit.setWaiState(this.focusNode,"required",_309);this._refreshState();},reset:function(){this._maskValidSubsetError=true;this.inherited(arguments);},_onBlur:function(){this.displayMessage("");this.inherited(arguments);}});dojo.declare("dijit.form.MappedTextBox",dijit.form.ValidationTextBox,{postMixInProperties:function(){this.inherited(arguments);this.nameAttrSetting="";},serialize:function(val,_30a){return val.toString?val.toString():"";},toString:function(){var val=this.filter(this.get("value"));return val!=null?(typeof val=="string"?val:this.serialize(val,this.constraints)):"";},validate:function(){this.valueNode.value=this.toString();return this.inherited(arguments);},buildRendering:function(){this.inherited(arguments);this.valueNode=dojo.place("<input type='hidden'"+(this.name?" name='"+this.name+"'":"")+">",this.textbox,"after");},reset:function(){this.valueNode.value="";this.inherited(arguments);}});dojo.declare("dijit.form.RangeBoundTextBox",dijit.form.MappedTextBox,{rangeMessage:"",rangeCheck:function(_30b,_30c){return ("min" in _30c?(this.compare(_30b,_30c.min)>=0):true)&&("max" in _30c?(this.compare(_30b,_30c.max)<=0):true);},isInRange:function(_30d){return this.rangeCheck(this.get("value"),this.constraints);},_isDefinitelyOutOfRange:function(){var val=this.get("value");var _30e=false;var _30f=false;if("min" in this.constraints){var min=this.constraints.min;min=this.compare(val,((typeof min=="number")&&min>=0&&val!=0)?0:min);_30e=(typeof min=="number")&&min<0;}if("max" in this.constraints){var max=this.constraints.max;max=this.compare(val,((typeof max!="number")||max>0)?max:0);_30f=(typeof max=="number")&&max>0;}return _30e||_30f;},_isValidSubset:function(){return this.inherited(arguments)&&!this._isDefinitelyOutOfRange();},isValid:function(_310){return this.inherited(arguments)&&((this._isEmpty(this.textbox.value)&&!this.required)||this.isInRange(_310));},getErrorMessage:function(_311){var v=this.get("value");if(v!==null&&v!==""&&v!==undefined&&(typeof v!="number"||!isNaN(v))&&!this.isInRange(_311)){return this.rangeMessage;}return this.inherited(arguments);},postMixInProperties:function(){this.inherited(arguments);if(!this.rangeMessage){this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);this.rangeMessage=this.messages.rangeMessage;}},_setConstraintsAttr:function(_312){this.inherited(arguments);if(this.focusNode){if(this.constraints.min!==undefined){dijit.setWaiState(this.focusNode,"valuemin",this.constraints.min);}else{dijit.removeWaiState(this.focusNode,"valuemin");}if(this.constraints.max!==undefined){dijit.setWaiState(this.focusNode,"valuemax",this.constraints.max);}else{dijit.removeWaiState(this.focusNode,"valuemax");}}},_setValueAttr:function(_313,_314){dijit.setWaiState(this.focusNode,"valuenow",_313);this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.ComboBox"]){dojo._hasResource["dijit.form.ComboBox"]=true;dojo.provide("dijit.form.ComboBox");dojo.declare("dijit.form.ComboBoxMixin",null,{item:null,pageSize:Infinity,store:null,fetchProperties:{},query:{},autoComplete:true,highlightMatch:"first",searchDelay:100,searchAttr:"name",labelAttr:"",labelType:"text",queryExpr:"${0}*",ignoreCase:true,hasDownArrow:true,templateString:dojo.cache("dijit.form","templates/ComboBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitComboBox",cssStateNodes:{"downArrowNode":"dijitDownArrowButton"},_getCaretPos:function(_315){var pos=0;if(typeof (_315.selectionStart)=="number"){pos=_315.selectionStart;}else{if(dojo.isIE){var tr=dojo.doc.selection.createRange().duplicate();var ntr=_315.createTextRange();tr.move("character",0);ntr.move("character",0);try{ntr.setEndPoint("EndToEnd",tr);pos=String(ntr.text).replace(/\r/g,"").length;}catch(e){}}}return pos;},_setCaretPos:function(_316,_317){_317=parseInt(_317);dijit.selectInputText(_316,_317,_317);},_setDisabledAttr:function(_318){this.inherited(arguments);dijit.setWaiState(this.comboNode,"disabled",_318);},_abortQuery:function(){if(this.searchTimer){clearTimeout(this.searchTimer);this.searchTimer=null;}if(this._fetchHandle){if(this._fetchHandle.abort){this._fetchHandle.abort();}this._fetchHandle=null;}},_onInput:function(evt){if(!this.searchTimer&&(evt.type=="paste"||evt.type=="input")&&this._lastInput!=this.textbox.value){this.searchTimer=setTimeout(dojo.hitch(this,function(){this._onKeyPress({charOrCode:229});}),100);}this.inherited(arguments);},_onKeyPress:function(evt){var key=evt.charOrCode;if(evt.altKey||((evt.ctrlKey||evt.metaKey)&&(key!="x"&&key!="v"))||key==dojo.keys.SHIFT){return;}var _319=false;var _31a="_startSearchFromInput";var pw=this._popupWidget;var dk=dojo.keys;var _31b=null;this._prev_key_backspace=false;this._abortQuery();if(this._isShowingNow){pw.handleKey(key);_31b=pw.getHighlightedOption();}switch(key){case dk.PAGE_DOWN:case dk.DOWN_ARROW:case dk.PAGE_UP:case dk.UP_ARROW:if(!this._isShowingNow){_319=true;_31a="_startSearchAll";}else{this._announceOption(_31b);}dojo.stopEvent(evt);break;case dk.ENTER:if(_31b){if(_31b==pw.nextButton){this._nextSearch(1);dojo.stopEvent(evt);break;}else{if(_31b==pw.previousButton){this._nextSearch(-1);dojo.stopEvent(evt);break;}}}else{this._setBlurValue();this._setCaretPos(this.focusNode,this.focusNode.value.length);}evt.preventDefault();case dk.TAB:var _31c=this.get("displayedValue");if(pw&&(_31c==pw._messages["previousMessage"]||_31c==pw._messages["nextMessage"])){break;}if(_31b){this._selectOption();}if(this._isShowingNow){this._lastQuery=null;this._hideResultList();}break;case " ":if(_31b){dojo.stopEvent(evt);this._selectOption();this._hideResultList();}else{_319=true;}break;case dk.ESCAPE:if(this._isShowingNow){dojo.stopEvent(evt);this._hideResultList();}break;case dk.DELETE:case dk.BACKSPACE:this._prev_key_backspace=true;_319=true;break;default:_319=typeof key=="string"||key==229;}if(_319){this.item=undefined;this.searchTimer=setTimeout(dojo.hitch(this,_31a),1);}},_autoCompleteText:function(text){var fn=this.focusNode;dijit.selectInputText(fn,fn.value.length);var _31d=this.ignoreCase?"toLowerCase":"substr";if(text[_31d](0).indexOf(this.focusNode.value[_31d](0))==0){var cpos=this._getCaretPos(fn);if((cpos+1)>fn.value.length){fn.value=text;dijit.selectInputText(fn,cpos);}}else{fn.value=text;dijit.selectInputText(fn);}},_openResultList:function(_31e,_31f){this._fetchHandle=null;if(this.disabled||this.readOnly||(_31f.query[this.searchAttr]!=this._lastQuery)){return;}this._popupWidget.clearResultList();if(!_31e.length&&!this._maxOptions){this._hideResultList();return;}_31f._maxOptions=this._maxOptions;var _320=this._popupWidget.createOptions(_31e,_31f,dojo.hitch(this,"_getMenuLabelFromItem"));this._showResultList();if(_31f.direction){if(1==_31f.direction){this._popupWidget.highlightFirstOption();}else{if(-1==_31f.direction){this._popupWidget.highlightLastOption();}}this._announceOption(this._popupWidget.getHighlightedOption());}else{if(this.autoComplete&&!this._prev_key_backspace&&!/^[*]+$/.test(_31f.query[this.searchAttr])){this._announceOption(_320[1]);}}},_showResultList:function(){this._hideResultList();this.displayMessage("");dojo.style(this._popupWidget.domNode,{width:"",height:""});var best=this.open();var _321=dojo.marginBox(this._popupWidget.domNode);this._popupWidget.domNode.style.overflow=((best.h==_321.h)&&(best.w==_321.w))?"hidden":"auto";var _322=best.w;if(best.h<this._popupWidget.domNode.scrollHeight){_322+=16;}dojo.marginBox(this._popupWidget.domNode,{h:best.h,w:Math.max(_322,this.domNode.offsetWidth)});if(_322<this.domNode.offsetWidth){this._popupWidget.domNode.parentNode.style.left=dojo.position(this.domNode,true).x+"px";}dijit.setWaiState(this.comboNode,"expanded","true");},_hideResultList:function(){this._abortQuery();if(this._isShowingNow){dijit.popup.close(this._popupWidget);this._isShowingNow=false;dijit.setWaiState(this.comboNode,"expanded","false");dijit.removeWaiState(this.focusNode,"activedescendant");}},_setBlurValue:function(){var _323=this.get("displayedValue");var pw=this._popupWidget;if(pw&&(_323==pw._messages["previousMessage"]||_323==pw._messages["nextMessage"])){this._setValueAttr(this._lastValueReported,true);}else{if(typeof this.item=="undefined"){this.item=null;this.set("displayedValue",_323);}else{if(this.value!=this._lastValueReported){dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);}this._refreshState();}}},_onBlur:function(){this._hideResultList();this.inherited(arguments);},_setItemAttr:function(item,_324,_325){if(!_325){_325=this.labelFunc(item,this.store);}this.value=this._getValueField()!=this.searchAttr?this.store.getIdentity(item):_325;this.item=item;dijit.form.ComboBox.superclass._setValueAttr.call(this,this.value,_324,_325);},_announceOption:function(node){if(!node){return;}var _326;if(node==this._popupWidget.nextButton||node==this._popupWidget.previousButton){_326=node.innerHTML;this.item=undefined;this.value="";}else{_326=this.labelFunc(node.item,this.store);this.set("item",node.item,false,_326);}this.focusNode.value=this.focusNode.value.substring(0,this._lastInput.length);dijit.setWaiState(this.focusNode,"activedescendant",dojo.attr(node,"id"));this._autoCompleteText(_326);},_selectOption:function(evt){if(evt){this._announceOption(evt.target);}this._hideResultList();this._setCaretPos(this.focusNode,this.focusNode.value.length);dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);},_onArrowMouseDown:function(evt){if(this.disabled||this.readOnly){return;}dojo.stopEvent(evt);this.focus();if(this._isShowingNow){this._hideResultList();}else{this._startSearchAll();}},_startSearchAll:function(){this._startSearch("");},_startSearchFromInput:function(){this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g,"\\$1"));},_getQueryString:function(text){return dojo.string.substitute(this.queryExpr,[text]);},_startSearch:function(key){if(!this._popupWidget){var _327=this.id+"_popup";this._popupWidget=new dijit.form._ComboBoxMenu({onChange:dojo.hitch(this,this._selectOption),id:_327,dir:this.dir});dijit.removeWaiState(this.focusNode,"activedescendant");dijit.setWaiState(this.textbox,"owns",_327);}var _328=dojo.clone(this.query);this._lastInput=key;this._lastQuery=_328[this.searchAttr]=this._getQueryString(key);this.searchTimer=setTimeout(dojo.hitch(this,function(_329,_32a){this.searchTimer=null;var _32b={queryOptions:{ignoreCase:this.ignoreCase,deep:true},query:_329,onBegin:dojo.hitch(this,"_setMaxOptions"),onComplete:dojo.hitch(this,"_openResultList"),onError:function(_32c){_32a._fetchHandle=null;console.error("dijit.form.ComboBox: "+_32c);dojo.hitch(_32a,"_hideResultList")();},start:0,count:this.pageSize};dojo.mixin(_32b,_32a.fetchProperties);this._fetchHandle=_32a.store.fetch(_32b);var _32d=function(_32e,_32f){_32e.start+=_32e.count*_32f;_32e.direction=_32f;this._fetchHandle=this.store.fetch(_32e);};this._nextSearch=this._popupWidget.onPage=dojo.hitch(this,_32d,this._fetchHandle);},_328,this),this.searchDelay);},_setMaxOptions:function(size,_330){this._maxOptions=size;},_getValueField:function(){return this.searchAttr;},compositionend:function(evt){this._onKeyPress({charOrCode:229});},constructor:function(){this.query={};this.fetchProperties={};},postMixInProperties:function(){if(!this.store){var _331=this.srcNodeRef;this.store=new dijit.form._ComboBoxDataStore(_331);if(!("value" in this.params)){var item=this.store.fetchSelectedItem();if(item){var _332=this._getValueField();this.value=_332!=this.searchAttr?this.store.getValue(item,_332):this.labelFunc(item,this.store);}}}this.inherited(arguments);},postCreate:function(){if(!this.hasDownArrow){this.downArrowNode.style.display="none";}var _333=dojo.query("label[for=\""+this.id+"\"]");if(_333.length){_333[0].id=(this.id+"_label");var cn=this.comboNode;dijit.setWaiState(cn,"labelledby",_333[0].id);}this.inherited(arguments);},uninitialize:function(){if(this._popupWidget&&!this._popupWidget._destroyed){this._hideResultList();this._popupWidget.destroy();}this.inherited(arguments);},_getMenuLabelFromItem:function(item){var _334=this.labelAttr?this.store.getValue(item,this.labelAttr):this.labelFunc(item,this.store);var _335=this.labelType;if(this.highlightMatch!="none"&&this.labelType=="text"&&this._lastInput){_334=this.doHighlight(_334,this._escapeHtml(this._lastInput));_335="html";}return {html:_335=="html",label:_334};},doHighlight:function(_336,find){var _337="i"+(this.highlightMatch=="all"?"g":"");var _338=this._escapeHtml(_336);find=dojo.regexp.escapeString(find);var ret=_338.replace(new RegExp("(^|\\s)("+find+")",_337),"$1<span class=\"dijitComboBoxHighlightMatch\">$2</span>");return ret;},_escapeHtml:function(str){str=String(str).replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");return str;},open:function(){this._isShowingNow=true;return dijit.popup.open({popup:this._popupWidget,around:this.domNode,parent:this});},reset:function(){this.item=null;this.inherited(arguments);},labelFunc:function(item,_339){return _339.getValue(item,this.searchAttr).toString();}});dojo.declare("dijit.form._ComboBoxMenu",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:"<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"+"</ul>",_messages:null,baseClass:"dijitComboBoxMenu",postMixInProperties:function(){this._messages=dojo.i18n.getLocalization("dijit.form","ComboBox",this.lang);this.inherited(arguments);},_setValueAttr:function(_33a){this.value=_33a;this.onChange(_33a);},onChange:function(_33b){},onPage:function(_33c){},postCreate:function(){this.previousButton.innerHTML=this._messages["previousMessage"];this.nextButton.innerHTML=this._messages["nextMessage"];this.inherited(arguments);},onClose:function(){this._blurOptionNode();},_createOption:function(item,_33d){var _33e=_33d(item);var _33f=dojo.doc.createElement("li");dijit.setWaiRole(_33f,"option");if(_33e.html){_33f.innerHTML=_33e.label;}else{_33f.appendChild(dojo.doc.createTextNode(_33e.label));}if(_33f.innerHTML==""){_33f.innerHTML="&nbsp;";}_33f.item=item;return _33f;},createOptions:function(_340,_341,_342){this.previousButton.style.display=(_341.start==0)?"none":"";dojo.attr(this.previousButton,"id",this.id+"_prev");dojo.forEach(_340,function(item,i){var _343=this._createOption(item,_342);_343.className="dijitReset dijitMenuItem"+(this.isLeftToRight()?"":" dijitMenuItemRtl");dojo.attr(_343,"id",this.id+i);this.domNode.insertBefore(_343,this.nextButton);},this);var _344=false;if(_341._maxOptions&&_341._maxOptions!=-1){if((_341.start+_341.count)<_341._maxOptions){_344=true;}else{if((_341.start+_341.count)>_341._maxOptions&&_341.count==_340.length){_344=true;}}}else{if(_341.count==_340.length){_344=true;}}this.nextButton.style.display=_344?"":"none";dojo.attr(this.nextButton,"id",this.id+"_next");return this.domNode.childNodes;},clearResultList:function(){while(this.domNode.childNodes.length>2){this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);}},_onMouseDown:function(evt){dojo.stopEvent(evt);},_onMouseUp:function(evt){if(evt.target===this.domNode||!this._highlighted_option){return;}else{if(evt.target==this.previousButton){this.onPage(-1);}else{if(evt.target==this.nextButton){this.onPage(1);}else{var tgt=evt.target;while(!tgt.item){tgt=tgt.parentNode;}this._setValueAttr({target:tgt},true);}}}},_onMouseOver:function(evt){if(evt.target===this.domNode){return;}var tgt=evt.target;if(!(tgt==this.previousButton||tgt==this.nextButton)){while(!tgt.item){tgt=tgt.parentNode;}}this._focusOptionNode(tgt);},_onMouseOut:function(evt){if(evt.target===this.domNode){return;}this._blurOptionNode();},_focusOptionNode:function(node){if(this._highlighted_option!=node){this._blurOptionNode();this._highlighted_option=node;dojo.addClass(this._highlighted_option,"dijitMenuItemSelected");}},_blurOptionNode:function(){if(this._highlighted_option){dojo.removeClass(this._highlighted_option,"dijitMenuItemSelected");this._highlighted_option=null;}},_highlightNextOption:function(){if(!this.getHighlightedOption()){var fc=this.domNode.firstChild;this._focusOptionNode(fc.style.display=="none"?fc.nextSibling:fc);}else{var ns=this._highlighted_option.nextSibling;if(ns&&ns.style.display!="none"){this._focusOptionNode(ns);}else{this.highlightFirstOption();}}dojo.window.scrollIntoView(this._highlighted_option);},highlightFirstOption:function(){var _345=this.domNode.firstChild;var _346=_345.nextSibling;this._focusOptionNode(_346.style.display=="none"?_345:_346);dojo.window.scrollIntoView(this._highlighted_option);},highlightLastOption:function(){this._focusOptionNode(this.domNode.lastChild.previousSibling);dojo.window.scrollIntoView(this._highlighted_option);},_highlightPrevOption:function(){if(!this.getHighlightedOption()){var lc=this.domNode.lastChild;this._focusOptionNode(lc.style.display=="none"?lc.previousSibling:lc);}else{var ps=this._highlighted_option.previousSibling;if(ps&&ps.style.display!="none"){this._focusOptionNode(ps);}else{this.highlightLastOption();}}dojo.window.scrollIntoView(this._highlighted_option);},_page:function(up){var _347=0;var _348=this.domNode.scrollTop;var _349=dojo.style(this.domNode,"height");if(!this.getHighlightedOption()){this._highlightNextOption();}while(_347<_349){if(up){if(!this.getHighlightedOption().previousSibling||this._highlighted_option.previousSibling.style.display=="none"){break;}this._highlightPrevOption();}else{if(!this.getHighlightedOption().nextSibling||this._highlighted_option.nextSibling.style.display=="none"){break;}this._highlightNextOption();}var _34a=this.domNode.scrollTop;_347+=(_34a-_348)*(up?-1:1);_348=_34a;}},pageUp:function(){this._page(true);},pageDown:function(){this._page(false);},getHighlightedOption:function(){var ho=this._highlighted_option;return (ho&&ho.parentNode)?ho:null;},handleKey:function(key){switch(key){case dojo.keys.DOWN_ARROW:this._highlightNextOption();break;case dojo.keys.PAGE_DOWN:this.pageDown();break;case dojo.keys.UP_ARROW:this._highlightPrevOption();break;case dojo.keys.PAGE_UP:this.pageUp();break;}}});dojo.declare("dijit.form.ComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{_setValueAttr:function(_34b,_34c,_34d){this.item=null;if(!_34b){_34b="";}dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,_34b,_34c,_34d);}});dojo.declare("dijit.form._ComboBoxDataStore",null,{constructor:function(root){this.root=root;if(root.tagName!="SELECT"&&root.firstChild){root=dojo.query("select",root);if(root.length>0){root=root[0];}else{this.root.innerHTML="<SELECT>"+this.root.innerHTML+"</SELECT>";root=this.root.firstChild;}this.root=root;}dojo.query("> option",root).forEach(function(node){node.innerHTML=dojo.trim(node.innerHTML);});},getValue:function(item,_34e,_34f){return (_34e=="value")?item.value:(item.innerText||item.textContent||"");},isItemLoaded:function(_350){return true;},getFeatures:function(){return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};},_fetchItems:function(args,_351,_352){if(!args.query){args.query={};}if(!args.query.name){args.query.name="";}if(!args.queryOptions){args.queryOptions={};}var _353=dojo.data.util.filter.patternToRegExp(args.query.name,args.queryOptions.ignoreCase),_354=dojo.query("> option",this.root).filter(function(_355){return (_355.innerText||_355.textContent||"").match(_353);});if(args.sort){_354.sort(dojo.data.util.sorter.createSortFunction(args.sort,this));}_351(_354,args);},close:function(_356){return;},getLabel:function(item){return item.innerHTML;},getIdentity:function(item){return dojo.attr(item,"value");},fetchItemByIdentity:function(args){var item=dojo.query("> option[value='"+args.identity+"']",this.root)[0];args.onItem(item);},fetchSelectedItem:function(){var root=this.root,si=root.selectedIndex;return typeof si=="number"?dojo.query("> option:nth-child("+(si!=-1?si+1:1)+")",root)[0]:null;}});dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);}if(!dojo._hasResource["dijit.form.FilteringSelect"]){dojo._hasResource["dijit.form.FilteringSelect"]=true;dojo.provide("dijit.form.FilteringSelect");dojo.declare("dijit.form.FilteringSelect",[dijit.form.MappedTextBox,dijit.form.ComboBoxMixin],{_isvalid:true,required:true,_lastDisplayedValue:"",isValid:function(){return this._isvalid||(!this.required&&this.get("displayedValue")=="");},_refreshState:function(){if(!this.searchTimer){this.inherited(arguments);}},_callbackSetLabel:function(_357,_358,_359){if((_358&&_358.query[this.searchAttr]!=this._lastQuery)||(!_358&&_357.length&&this.store.getIdentity(_357[0])!=this._lastQuery)){return;}if(!_357.length){this.valueNode.value="";dijit.form.TextBox.superclass._setValueAttr.call(this,"",_359||(_359===undefined&&!this._focused));this._isvalid=false;this.validate(this._focused);this.item=null;}else{this.set("item",_357[0],_359);}},_openResultList:function(_35a,_35b){if(_35b.query[this.searchAttr]!=this._lastQuery){return;}if(this.item===undefined){this._isvalid=_35a.length!=0||this._maxOptions!=0;this.validate(true);}dijit.form.ComboBoxMixin.prototype._openResultList.apply(this,arguments);},_getValueAttr:function(){return this.valueNode.value;},_getValueField:function(){return "value";},_setValueAttr:function(_35c,_35d){if(!this._onChangeActive){_35d=null;}this._lastQuery=_35c;if(_35c===null||_35c===""){this._setDisplayedValueAttr("",_35d);return;}var self=this;this.store.fetchItemByIdentity({identity:_35c,onItem:function(item){self._callbackSetLabel(item?[item]:[],undefined,_35d);}});},_setItemAttr:function(item,_35e,_35f){this._isvalid=true;this.inherited(arguments);this.valueNode.value=this.value;this._lastDisplayedValue=this.textbox.value;},_getDisplayQueryString:function(text){return text.replace(/([\\\*\?])/g,"\\$1");},_setDisplayedValueAttr:function(_360,_361){if(!this._created){_361=false;}if(this.store){this._hideResultList();var _362=dojo.clone(this.query);this._lastQuery=_362[this.searchAttr]=this._getDisplayQueryString(_360);this.textbox.value=_360;this._lastDisplayedValue=_360;var _363=this;var _364={query:_362,queryOptions:{ignoreCase:this.ignoreCase,deep:true},onComplete:function(_365,_366){_363._fetchHandle=null;dojo.hitch(_363,"_callbackSetLabel")(_365,_366,_361);},onError:function(_367){_363._fetchHandle=null;console.error("dijit.form.FilteringSelect: "+_367);dojo.hitch(_363,"_callbackSetLabel")([],undefined,false);}};dojo.mixin(_364,this.fetchProperties);this._fetchHandle=this.store.fetch(_364);}},postMixInProperties:function(){this.inherited(arguments);this._isvalid=!this.required;},undo:function(){this.set("displayedValue",this._lastDisplayedValue);}});}if(!dojo._hasResource["dijit.form.Form"]){dojo._hasResource["dijit.form.Form"]=true;dojo.provide("dijit.form.Form");dojo.declare("dijit.form.Form",[dijit._Widget,dijit._Templated,dijit.form._FormMixin],{name:"",action:"",method:"",encType:"","accept-charset":"",accept:"",target:"",templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{action:"",method:"",encType:"","accept-charset":"",accept:"",target:""}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name='"+this.name+"'"):"";this.inherited(arguments);},execute:function(_368){},onExecute:function(){},_setEncTypeAttr:function(_369){this.encType=_369;dojo.attr(this.domNode,"encType",_369);if(dojo.isIE){this.domNode.encoding=_369;}},postCreate:function(){if(dojo.isIE&&this.srcNodeRef&&this.srcNodeRef.attributes){var item=this.srcNodeRef.attributes.getNamedItem("encType");if(item&&!item.specified&&(typeof item.value=="string")){this.set("encType",item.value);}}this.inherited(arguments);},reset:function(e){var faux={returnValue:true,preventDefault:function(){this.returnValue=false;},stopPropagation:function(){},currentTarget:e?e.target:this.domNode,target:e?e.target:this.domNode};if(!(this.onReset(faux)===false)&&faux.returnValue){this.inherited(arguments,[]);}},onReset:function(e){return true;},_onReset:function(e){this.reset(e);dojo.stopEvent(e);return false;},_onSubmit:function(e){var fp=dijit.form.Form.prototype;if(this.execute!=fp.execute||this.onExecute!=fp.onExecute){dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.","","2.0");this.onExecute();this.execute(this.getValues());}if(this.onSubmit(e)===false){dojo.stopEvent(e);}},onSubmit:function(e){return this.isValid();},submit:function(){if(!(this.onSubmit()===false)){this.containerNode.submit();}}});}if(!dojo._hasResource["dijit.form.RadioButton"]){dojo._hasResource["dijit.form.RadioButton"]=true;dojo.provide("dijit.form.RadioButton");}if(!dojo._hasResource["dijit.form._FormSelectWidget"]){dojo._hasResource["dijit.form._FormSelectWidget"]=true;dojo.provide("dijit.form._FormSelectWidget");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(_36a){var _36b=_36a,opts=this.options||[],l=opts.length;if(_36b===undefined){return opts;}if(dojo.isArray(_36b)){return dojo.map(_36b,"return this.getOptions(item);",this);}if(dojo.isObject(_36a)){if(!dojo.some(this.options,function(o,idx){if(o===_36b||(o.value&&o.value===_36b.value)){_36b=idx;return true;}return false;})){_36b=-1;}}if(typeof _36b=="string"){for(var i=0;i<l;i++){if(opts[i].value===_36b){_36b=i;break;}}}if(typeof _36b=="number"&&_36b>=0&&_36b<l){return this.options[_36b];}return null;},addOption:function(_36c){if(!dojo.isArray(_36c)){_36c=[_36c];}dojo.forEach(_36c,function(i){if(i&&dojo.isObject(i)){this.options.push(i);}},this);this._loadChildren();},removeOption:function(_36d){if(!dojo.isArray(_36d)){_36d=[_36d];}var _36e=this.getOptions(_36d);dojo.forEach(_36e,function(i){if(i){this.options=dojo.filter(this.options,function(node,idx){return (node.value!==i.value);});this._removeOptionItem(i);}},this);this._loadChildren();},updateOption:function(_36f){if(!dojo.isArray(_36f)){_36f=[_36f];}dojo.forEach(_36f,function(i){var _370=this.getOptions(i),k;if(_370){for(k in i){_370[k]=i[k];}}},this);this._loadChildren();},setStore:function(_371,_372,_373){var _374=this.store;_373=_373||{};if(_374!==_371){dojo.forEach(this._notifyConnections||[],dojo.disconnect);delete this._notifyConnections;if(_371&&_371.getFeatures()["dojo.data.api.Notification"]){this._notifyConnections=[dojo.connect(_371,"onNew",this,"_onNewItem"),dojo.connect(_371,"onDelete",this,"_onDeleteItem"),dojo.connect(_371,"onSet",this,"_onSetItem")];}this.store=_371;}this._onChangeActive=false;if(this.options&&this.options.length){this.removeOption(this.options);}if(_371){var cb=function(_375){if(this.sortByLabel&&!_373.sort&&_375.length){_375.sort(dojo.data.util.sorter.createSortFunction([{attribute:_371.getLabelAttributes(_375[0])[0]}],_371));}if(_373.onFetch){_375=_373.onFetch(_375);}dojo.forEach(_375,function(i){this._addOptionForItem(i);},this);this._loadingStore=false;this.set("value",(("_pendingValue" in this)?this._pendingValue:_372));delete this._pendingValue;if(!this.loadChildrenOnOpen){this._loadChildren();}else{this._pseudoLoadChildren(_375);}this._fetchedWith=opts;this._lastValueReported=this.multiple?[]:null;this._onChangeActive=true;this.onSetStore();this._handleOnChange(this.value);};var opts=dojo.mixin({onComplete:cb,scope:this},_373);this._loadingStore=true;_371.fetch(opts);}else{delete this._fetchedWith;}return _374;},_setValueAttr:function(_376,_377){if(this._loadingStore){this._pendingValue=_376;return;}var opts=this.getOptions()||[];if(!dojo.isArray(_376)){_376=[_376];}dojo.forEach(_376,function(i,idx){if(!dojo.isObject(i)){i=i+"";}if(typeof i==="string"){_376[idx]=dojo.filter(opts,function(node){return node.value===i;})[0]||{value:"",label:""};}},this);_376=dojo.filter(_376,function(i){return i&&i.value;});if(!this.multiple&&(!_376[0]||!_376[0].value)&&opts.length){_376[0]=opts[0];}dojo.forEach(opts,function(i){i.selected=dojo.some(_376,function(v){return v.value===i.value;});});var val=dojo.map(_376,function(i){return i.value;}),disp=dojo.map(_376,function(i){return i.label;});this.value=this.multiple?val:val[0];this._setDisplay(this.multiple?disp:disp[0]);this._updateSelection();this._handleOnChange(this.value,_377);},_getDisplayedValueAttr:function(){var val=this.get("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(_378){_378.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(_379){var _37a=dojo.some(val,function(v){return _379.option&&(v===_379.option.value);});dojo.toggleClass(_379.domNode,this.baseClass+"SelectedOption",_37a);dijit.setWaiState(_379.domNode,"selected",_37a);},this);}this._handleOnChange(this.value);},_getValueFromOpts:function(){var opts=this.getOptions()||[];if(!this.multiple&&opts.length){var opt=dojo.filter(opts,function(i){return i.selected;})[0];if(opt&&opt.value){return opt.value;}else{opts[0].selected=true;return opts[0].value;}}else{if(this.multiple){return dojo.map(dojo.filter(opts,function(i){return i.selected;}),function(i){return i.value;})||[];}}return "";},_onNewItem:function(item,_37b){if(!_37b||!_37b.parent){this._addOptionForItem(item);}},_onDeleteItem:function(item){var _37c=this.store;this.removeOption(_37c.getIdentity(item));},_onSetItem:function(item){this.updateOption(this._getOptionObjForItem(item));},_getOptionObjForItem:function(item){var _37d=this.store,_37e=_37d.getLabel(item),_37f=(_37e?_37d.getIdentity(item):null);return {value:_37f,label:_37e,item:item};},_addOptionForItem:function(item){var _380=this.store;if(!_380.isItemLoaded(item)){_380.loadItem({item:item,onComplete:function(i){this._addOptionForItem(item);},scope:this});return;}var _381=this._getOptionObjForItem(item);this.addOption(_381);},constructor:function(_382){this._oValue=(_382||{}).value||null;},_fillContent:function(){var opts=this.options;if(!opts){opts=this.options=this.srcNodeRef?dojo.query(">",this.srcNodeRef).map(function(node){if(node.getAttribute("type")==="separator"){return {value:"",label:"",selected:false,disabled:false};}return {value:node.getAttribute("value"),label:String(node.innerHTML),selected:node.getAttribute("selected")||false,disabled:node.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 _383=this.store,_384={};dojo.forEach(["query","queryOptions","onFetch"],function(i){if(this[i]){_384[i]=this[i];}delete this[i];},this);if(_383&&_383.getFeatures()["dojo.data.api.Identity"]){this.store=null;this.setStore(_383,this._oValue,_384);}},destroy:function(){dojo.forEach(this._notifyConnections||[],dojo.disconnect);this.inherited(arguments);},_addOptionItem:function(_385){},_removeOptionItem:function(_386){},_setDisplay:function(_387){},_getChildren:function(){return [];},_getSelectedOptionsAttr:function(){return this.getOptions(this.get("value"));},_pseudoLoadChildren:function(_388){},onSetStore:function(){}});}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(_389,_38a){var _38b=(this._keyNavCodes={});var prev=dojo.hitch(this,this.focusPrev);var next=dojo.hitch(this,this.focusNext);dojo.forEach(_389,function(code){_38b[code]=prev;});dojo.forEach(_38a,function(code){_38b[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(_38c,_38d){dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);this._startupChild(_38c);},focus:function(){this.focusFirstChild();},focusFirstChild:function(){var _38e=this._getFirstFocusableChild();if(_38e){this.focusChild(_38e);}},focusNext:function(){var _38f=this._getNextFocusableChild(this.focusedChild,1);this.focusChild(_38f);},focusPrev:function(){var _390=this._getNextFocusableChild(this.focusedChild,-1);this.focusChild(_390,true);},focusChild:function(_391,last){if(this.focusedChild&&_391!==this.focusedChild){this._onChildBlur(this.focusedChild);}_391.focus(last?"end":"start");this.focusedChild=_391;},_startupChild:function(_392){_392.set("tabIndex","-1");this.connect(_392,"_onFocus",function(){_392.set("tabIndex",this.tabIndex);});this.connect(_392,"_onBlur",function(){_392.set("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(_393){},_getFirstFocusableChild:function(){return this._getNextFocusableChild(null,1);},_getNextFocusableChild:function(_394,dir){if(_394){_394=this._getSiblingOfChild(_394,dir);}var _395=this.getChildren();for(var i=0;i<_395.length;i++){if(!_394){_394=_395[(dir>0)?0:(_395.length-1)];}if(_394.isFocusable()){return _394;}_394=this._getSiblingOfChild(_394,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,dijit._CssStateMixin],{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 dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon 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"}}),baseClass:"dijitMenuItem",label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_396){if(_396&&!("label" in this.params)){this.set("label",_396.innerHTML);}},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);var _397=this.id+"_text";dojo.attr(this.containerNode,"id",_397);if(this.accelKeyNode){dojo.attr(this.accelKeyNode,"id",this.id+"_accel");_397+=" "+this.id+"_accel";}dijit.setWaiState(this.domNode,"labelledby",_397);},_onHover:function(){this.getParent().onItemHover(this);},_onUnhover:function(){this.getParent().onItemUnhover(this);this._hovering=false;this._setStateClass();},_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(_398){dojo.toggleClass(this.domNode,"dijitMenuItemSelected",_398);},setLabel:function(_399){dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");this.set("label",_399);},setDisabled:function(_39a){dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");this.set("disabled",_39a);},_setDisabledAttr:function(_39b){this.disabled=_39b;dijit.setWaiState(this.focusNode,"disabled",_39b?"true":"false");},_setAccelKeyAttr:function(_39c){this.accelKey=_39c;this.accelKeyNode.style.display=_39c?"":"none";this.accelKeyNode.innerHTML=_39c;dojo.attr(this.containerNode,"colSpan",_39c?"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 _39d=dojo.query("*",this.srcNodeRef);dijit.PopupMenuItem.superclass._fillContent.call(this,_39d[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.startup();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 dijitMenuItemIconCell\" 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\">&nbsp;</td>\n</tr>\n"),checked:false,_setCheckedAttr:function(_39e){dojo.toggleClass(this.domNode,"dijitCheckedMenuItemChecked",_39e);dijit.setWaiState(this.domNode,"checked",_39e);this.checked=_39e;},onChange:function(_39f){},_onClick:function(e){if(!this.disabled){this.set("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 class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></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(_3a0){_3a0.startup();});this.startupKeyNavChildren();this.inherited(arguments);},onExecute:function(){},onCancel:function(_3a1){},_moveToPopup:function(evt){if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){this.focusedChild._onClick(evt);}else{var _3a2=this._getTopMenu();if(_3a2&&_3a2._isMenuBar){_3a2.focusNext();}}},_onPopupHover:function(evt){if(this.currentPopup&&this.currentPopup._pendingClose_timer){var _3a3=this.currentPopup.parentMenu;if(_3a3.focusedChild){_3a3.focusedChild._setSelected(false);}_3a3.focusedChild=this.currentPopup.from_item;_3a3.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 _3a4=item.popup;if(_3a4){this._stopPendingCloseTimer(_3a4);_3a4._pendingClose_timer=setTimeout(function(){_3a4._pendingClose_timer=null;if(_3a4.parentMenu){_3a4.parentMenu.currentPopup=null;}dijit.popup.close(_3a4);},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(_3a5){if(_3a5._pendingClose_timer){clearTimeout(_3a5._pendingClose_timer);_3a5._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(typeof this.isShowingNow=="undefined"){this._markActive();}this.focusChild(item);if(item.disabled){return false;}if(item.popup){this._openPopup();}else{this.onExecute();item.onClick(evt);}},_openPopup:function(){this._stopPopupTimer();var _3a6=this.focusedChild;if(!_3a6){return;}var _3a7=_3a6.popup;if(_3a7.isShowingNow){return;}if(this.currentPopup){this._stopPendingCloseTimer(this.currentPopup);dijit.popup.close(this.currentPopup);}_3a7.parentMenu=this;_3a7.from_item=_3a6;var self=this;dijit.popup.open({parent:this,popup:_3a7,around:_3a6.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(_3a6);self._cleanUp();_3a6._setSelected(true);self.focusedChild=_3a6;},onExecute:dojo.hitch(this,"_cleanUp")});this.currentPopup=_3a7;_3a7.connect(_3a7.domNode,"onmouseenter",dojo.hitch(self,"_onPopupHover"));if(_3a7.focus){_3a7._focus_timer=setTimeout(dojo.hitch(_3a7,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\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),baseClass:"dijitMenu",targetNodeIds:[],contextMenuForWindow:false,leftClickToOpen:false,refocus:true,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(_3a8){var win=dojo.window.get(this._iframeContentDocument(_3a8))||this._iframeContentDocument(_3a8)["__parent__"]||(_3a8.name&&dojo.doc.frames[_3a8.name])||null;return win;},_iframeContentDocument:function(_3a9){var doc=_3a9.contentDocument||(_3a9.contentWindow&&_3a9.contentWindow.document)||(_3a9.name&&dojo.doc.frames[_3a9.name]&&dojo.doc.frames[_3a9.name].document)||null;return doc;},bindDomNode:function(node){node=dojo.byId(node);var cn;if(node.tagName.toLowerCase()=="iframe"){var _3aa=node,win=this._iframeContentWindow(_3aa);cn=dojo.withGlobal(win,dojo.body);}else{cn=(node==dojo.body()?dojo.doc.documentElement:node);}var _3ab={node:node,iframe:_3aa};dojo.attr(node,"_dijitMenu"+this.id,this._bindings.push(_3ab));var _3ac=dojo.hitch(this,function(cn){return [dojo.connect(cn,this.leftClickToOpen?"onclick":"oncontextmenu",this,function(evt){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_3aa,{x:evt.pageX,y:evt.pageY});}),dojo.connect(cn,"onkeydown",this,function(evt){if(evt.shiftKey&&evt.keyCode==dojo.keys.F10){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_3aa);}})];});_3ab.connects=cn?_3ac(cn):[];if(_3aa){_3ab.onloadHandler=dojo.hitch(this,function(){var win=this._iframeContentWindow(_3aa);cn=dojo.withGlobal(win,dojo.body);_3ab.connects=_3ac(cn);});if(_3aa.addEventListener){_3aa.addEventListener("load",_3ab.onloadHandler,false);}else{_3aa.attachEvent("onload",_3ab.onloadHandler);}}},unBindDomNode:function(_3ad){var node;try{node=dojo.byId(_3ad);}catch(e){return;}var _3ae="_dijitMenu"+this.id;if(node&&dojo.hasAttr(node,_3ae)){var bid=dojo.attr(node,_3ae)-1,b=this._bindings[bid];dojo.forEach(b.connects,dojo.disconnect);var _3af=b.iframe;if(_3af){if(_3af.removeEventListener){_3af.removeEventListener("load",b.onloadHandler,false);}else{_3af.detachEvent("onload",b.onloadHandler);}}dojo.removeAttr(node,_3ae);delete this._bindings[bid];}},_scheduleOpen:function(_3b0,_3b1,_3b2){if(!this._openTimer){this._openTimer=setTimeout(dojo.hitch(this,function(){delete this._openTimer;this._openMyself({target:_3b0,iframe:_3b1,coords:_3b2});}),1);}},_openMyself:function(args){var _3b3=args.target,_3b4=args.iframe,_3b5=args.coords;if(_3b5){if(_3b4){var od=_3b3.ownerDocument,ifc=dojo.position(_3b4,true),win=this._iframeContentWindow(_3b4),_3b6=dojo.withGlobal(win,"_docScroll",dojo);var cs=dojo.getComputedStyle(_3b4),tp=dojo._toPixelValue,left=(dojo.isIE&&dojo.isQuirks?0:tp(_3b4,cs.paddingLeft))+(dojo.isIE&&dojo.isQuirks?tp(_3b4,cs.borderLeftWidth):0),top=(dojo.isIE&&dojo.isQuirks?0:tp(_3b4,cs.paddingTop))+(dojo.isIE&&dojo.isQuirks?tp(_3b4,cs.borderTopWidth):0);_3b5.x+=ifc.x+left-_3b6.x;_3b5.y+=ifc.y+top-_3b6.y;}}else{_3b5=dojo.position(_3b3,true);_3b5.x+=10;_3b5.y+=10;}var self=this;var _3b7=dijit.getFocus(this);function _3b8(){if(self.refocus){dijit.focus(_3b7);}dijit.popup.close(self);};dijit.popup.open({popup:this,x:_3b5.x,y:_3b5.y,onExecute:_3b8,onCancel:_3b8,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["dijit.form.Select"]){dojo._hasResource["dijit.form.Select"]=true;dojo.provide("dijit.form.Select");dojo.declare("dijit.form._SelectMenu",dijit.Menu,{buildRendering:function(){this.inherited(arguments);var o=(this.menuTableNode=this.domNode);var n=(this.domNode=dojo.create("div",{style:{overflowX:"hidden",overflowY:"scroll"}}));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);},resize:function(mb){if(mb){dojo.marginBox(this.domNode,mb);if("w" in mb){this.menuTableNode.style.width="100%";}}}});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,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\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\"></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({id:this.id+"_menu"});dojo.addClass(this.dropDown.domNode,this.baseClass+"Menu");},_getMenuItemForOption:function(_3b9){if(!_3b9.value){return new dijit.MenuSeparator();}else{var _3ba=dojo.hitch(this,"_setValueAttr",_3b9);var item=new dijit.MenuItem({option:_3b9,label:_3b9.label,onClick:_3ba,disabled:_3b9.disabled||false});dijit.setWaiRole(item.focusNode,"listitem");return item;}},_addOptionItem:function(_3bb){if(this.dropDown){this.dropDown.addChild(this._getMenuItemForOption(_3bb));}},_getChildren:function(){if(!this.dropDown){return [];}return this.dropDown.getChildren();},_loadChildren:function(_3bc){if(_3bc===true){if(this.dropDown){delete this.dropDown.focusedChild;}if(this.options.length){this.inherited(arguments);}else{dojo.forEach(this._getChildren(),function(_3bd){_3bd.destroyRecursive();});var item=new dijit.MenuItem({label:"&nbsp;"});this.dropDown.addChild(item);}}else{this._updateSelection();}var len=this.options.length;this._isLoaded=false;this._childrenLoaded=true;if(!this._loadingStore){this._setValueAttr(this.value);}},_setValueAttr:function(_3be){this.inherited(arguments);dojo.attr(this.valueNode,"value",this.get("value"));},_setDisplay:function(_3bf){this.containerNode.innerHTML="<span class=\"dijitReset dijitInline "+this.baseClass+"Label\">"+(_3bf||this.emptyLabel||"&nbsp;")+"</span>";dijit.setWaiState(this.focusNode,"valuetext",(_3bf||this.emptyLabel||"&nbsp;"));},validate:function(_3c0){var _3c1=this.isValid(_3c0);this.state=_3c1?"":"Error";this._setStateClass();dijit.setWaiState(this.focusNode,"invalid",_3c1?"false":"true");var _3c2=_3c1?"":this._missingMsg;if(this._message!==_3c2){this._message=_3c2;dijit.hideTooltip(this.domNode);if(_3c2){dijit.showTooltip(_3c2,this.domNode,this.tooltipPosition,!this.isLeftToRight());}}return _3c1;},isValid:function(_3c3){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(_3c4){this._loadChildren(true);this._isLoaded=true;_3c4();},closeDropDown:function(){this.inherited(arguments);if(this.dropDown&&this.dropDown.menuTableNode){this.dropDown.menuTableNode.style.width="";}},uninitialize:function(_3c5){if(this.dropDown&&!this.dropDown._destroyed){this.dropDown.destroyRecursive(_3c5);delete this.dropDown;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.SimpleTextarea"]){dojo._hasResource["dijit.form.SimpleTextarea"]=true;dojo.provide("dijit.form.SimpleTextarea");dojo.declare("dijit.form.SimpleTextarea",dijit.form.TextBox,{baseClass:"dijitTextBox 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(_3c6){if(_3c6){_3c6=_3c6.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 _3c7=parseInt(this.maxLength);var _3c8=this.textbox.value.replace(/\r/g,"");var _3c9=_3c8.length-_3c7;if(_3c9>0){if(e){dojo.stopEvent(e);}var _3ca=this.textbox;if(_3ca.selectionStart){var pos=_3ca.selectionStart;var cr=0;if(dojo.isOpera){cr=(this.textbox.value.substring(0,pos).match(/\r/g)||[]).length;}this.textbox.value=_3c8.substring(0,pos-_3c9-cr)+_3c8.substring(pos-cr);_3ca.setSelectionRange(pos-_3c9,pos-_3c9);}else{if(dojo.doc.selection){_3ca.focus();var _3cb=dojo.doc.selection.createRange();_3cb.moveStart("character",-_3c9);_3cb.text="";_3cb.select();}}}this._previousValue=this.textbox.value;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.InlineEditBox"]){dojo._hasResource["dijit.InlineEditBox"]=true;dojo.provide("dijit.InlineEditBox");dojo.declare("dijit.InlineEditBox",dijit._Widget,{editing:false,autoSave:true,buttonSave:"",buttonCancel:"",renderAsHtml:false,editor:"dijit.form.TextBox",editorWrapper:"dijit._InlineEditor",editorParams:{},onChange:function(_3cc){},onCancel:function(){},width:"100%",value:"",noValueIndicator:dojo.isIE<=6?"<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>":"<span style='text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",constructor:function(){this.editorParams={};},postMixInProperties:function(){this.inherited(arguments);this.displayNode=this.srcNodeRef;var _3cd={ondijitclick:"_onClick",onmouseover:"_onMouseOver",onmouseout:"_onMouseOut",onfocus:"_onMouseOver",onblur:"_onMouseOut"};for(var name in _3cd){this.connect(this.displayNode,name,_3cd[name]);}dijit.setWaiRole(this.displayNode,"button");if(!this.displayNode.getAttribute("tabIndex")){this.displayNode.setAttribute("tabIndex",0);}if(!this.value&&!("value" in this.params)){this.value=dojo.trim(this.renderAsHtml?this.displayNode.innerHTML:(this.displayNode.innerText||this.displayNode.textContent||""));}if(!this.value){this.displayNode.innerHTML=this.noValueIndicator;}dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayMode");},setDisabled:function(_3ce){dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");this.set("disabled",_3ce);},_setDisabledAttr:function(_3cf){this.disabled=_3cf;dijit.setWaiState(this.domNode,"disabled",_3cf);if(_3cf){this.displayNode.removeAttribute("tabIndex");}else{this.displayNode.setAttribute("tabIndex",0);}dojo.toggleClass(this.displayNode,"dijitInlineEditBoxDisplayModeDisabled",_3cf);},_onMouseOver:function(){if(!this.disabled){dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");}},_onMouseOut:function(){dojo.removeClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");},_onClick:function(e){if(this.disabled){return;}if(e){dojo.stopEvent(e);}this._onMouseOut();setTimeout(dojo.hitch(this,"edit"),0);},edit:function(){if(this.disabled||this.editing){return;}this.editing=true;this._savedPosition=dojo.style(this.displayNode,"position")||"static";this._savedOpacity=dojo.style(this.displayNode,"opacity")||"1";this._savedTabIndex=dojo.attr(this.displayNode,"tabIndex")||"0";if(this.wrapperWidget){var ew=this.wrapperWidget.editWidget;ew.set("displayedValue" in ew?"displayedValue":"value",this.value);}else{var _3d0=dojo.create("span",null,this.domNode,"before");var ewc=dojo.getObject(this.editorWrapper);this.wrapperWidget=new ewc({value:this.value,buttonSave:this.buttonSave,buttonCancel:this.buttonCancel,dir:this.dir,lang:this.lang,tabIndex:this._savedTabIndex,editor:this.editor,inlineEditBox:this,sourceStyle:dojo.getComputedStyle(this.displayNode),save:dojo.hitch(this,"save"),cancel:dojo.hitch(this,"cancel")},_3d0);}var ww=this.wrapperWidget;if(dojo.isIE){dijit.focus(dijit.getFocus());}dojo.style(this.displayNode,{position:"absolute",opacity:"0",display:"none"});dojo.style(ww.domNode,{position:this._savedPosition,visibility:"visible",opacity:"1"});dojo.attr(this.displayNode,"tabIndex","-1");setTimeout(dojo.hitch(this,function(){ww.focus();ww._resetValue=ww.getValue();}),0);},_onBlur:function(){this.inherited(arguments);if(!this.editing){}},destroy:function(){if(this.wrapperWidget){this.wrapperWidget.destroy();delete this.wrapperWidget;}this.inherited(arguments);},_showText:function(_3d1){var ww=this.wrapperWidget;dojo.style(ww.domNode,{position:"absolute",visibility:"hidden",opacity:"0"});dojo.style(this.displayNode,{position:this._savedPosition,opacity:this._savedOpacity,display:""});dojo.attr(this.displayNode,"tabIndex",this._savedTabIndex);if(_3d1){dijit.focus(this.displayNode);}},save:function(_3d2){if(this.disabled||!this.editing){return;}this.editing=false;var ww=this.wrapperWidget;var _3d3=ww.getValue();this.set("value",_3d3);setTimeout(dojo.hitch(this,"onChange",_3d3),0);this._showText(_3d2);},setValue:function(val){dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated.  Use set('value', ...) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(val){this.value=val=dojo.trim(val);if(!this.renderAsHtml){val=val.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;").replace(/\n/g,"<br>");}this.displayNode.innerHTML=val||this.noValueIndicator;},getValue:function(){dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated.  Use get('value') instead.","","2.0");return this.get("value");},cancel:function(_3d4){if(this.disabled||!this.editing){return;}this.editing=false;setTimeout(dojo.hitch(this,"onCancel"),0);this._showText(_3d4);}});dojo.declare("dijit._InlineEditor",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/InlineEditBox.html","<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"),widgetsInTemplate:true,postMixInProperties:function(){this.inherited(arguments);this.messages=dojo.i18n.getLocalization("dijit","common",this.lang);dojo.forEach(["buttonSave","buttonCancel"],function(prop){if(!this[prop]){this[prop]=this.messages[prop];}},this);},postCreate:function(){var cls=dojo.getObject(this.editor);var _3d5=this.sourceStyle,_3d6="line-height:"+_3d5.lineHeight+";",_3d7=dojo.getComputedStyle(this.domNode);dojo.forEach(["Weight","Family","Size","Style"],function(prop){var _3d8=_3d5["font"+prop],_3d9=_3d7["font"+prop];if(_3d9!=_3d8){_3d6+="font-"+prop+":"+_3d5["font"+prop]+";";}},this);dojo.forEach(["marginTop","marginBottom","marginLeft","marginRight"],function(prop){this.domNode.style[prop]=_3d5[prop];},this);var _3da=this.inlineEditBox.width;if(_3da=="100%"){_3d6+="width:100%;";this.domNode.style.display="block";}else{_3d6+="width:"+(_3da+(Number(_3da)==_3da?"px":""))+";";}var _3db=dojo.delegate(this.inlineEditBox.editorParams,{style:_3d6,dir:this.dir,lang:this.lang});_3db["displayedValue" in cls.prototype?"displayedValue":"value"]=this.value;var ew=(this.editWidget=new cls(_3db,this.editorPlaceholder));if(this.inlineEditBox.autoSave){dojo.destroy(this.buttonContainer);this.connect(ew,"onChange","_onChange");this.connect(ew,"onKeyPress","_onKeyPress");}else{if("intermediateChanges" in cls.prototype){ew.set("intermediateChanges",true);this.connect(ew,"onChange","_onIntermediateChange");this.saveButton.set("disabled",true);}}},_onIntermediateChange:function(val){this.saveButton.set("disabled",(this.getValue()==this._resetValue)||!this.enableSave());},destroy:function(){this.editWidget.destroy(true);this.inherited(arguments);},getValue:function(){var ew=this.editWidget;return String(ew.get("displayedValue" in ew?"displayedValue":"value"));},_onKeyPress:function(e){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(e.altKey||e.ctrlKey){return;}if(e.charOrCode==dojo.keys.ESCAPE){dojo.stopEvent(e);this.cancel(true);}else{if(e.charOrCode==dojo.keys.ENTER&&e.target.tagName=="INPUT"){dojo.stopEvent(e);this._onChange();}}}},_onBlur:function(){this.inherited(arguments);if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(this.getValue()==this._resetValue){this.cancel(false);}else{if(this.enableSave()){this.save(false);}}}},_onChange:function(){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing&&this.enableSave()){dojo.style(this.inlineEditBox.displayNode,{display:""});dijit.focus(this.inlineEditBox.displayNode);}},enableSave:function(){return (this.editWidget.isValid?this.editWidget.isValid():true);},focus:function(){this.editWidget.focus();setTimeout(dojo.hitch(this,function(){if(this.editWidget.focusNode&&this.editWidget.focusNode.tagName=="INPUT"){dijit.selectInputText(this.editWidget.focusNode);}}),0);}});}if(!dojo._hasResource["dojo.cookie"]){dojo._hasResource["dojo.cookie"]=true;dojo.provide("dojo.cookie");dojo.cookie=function(name,_3dc,_3dd){var c=document.cookie;if(arguments.length==1){var _3de=c.match(new RegExp("(?:^|; )"+dojo.regexp.escapeString(name)+"=([^;]*)"));return _3de?decodeURIComponent(_3de[1]):undefined;}else{_3dd=_3dd||{};var exp=_3dd.expires;if(typeof exp=="number"){var d=new Date();d.setTime(d.getTime()+exp*24*60*60*1000);exp=_3dd.expires=d;}if(exp&&exp.toUTCString){_3dd.expires=exp.toUTCString();}_3dc=encodeURIComponent(_3dc);var _3df=name+"="+_3dc,_3e0;for(_3e0 in _3dd){_3df+="; "+_3e0;var _3e1=_3dd[_3e0];if(_3e1!==true){_3df+="="+_3e1;}}document.cookie=_3df;}};dojo.cookie.isSupported=function(){if(!("cookieEnabled" in navigator)){this("__djCookieTest__","CookiesAllowed");navigator.cookieEnabled=this("__djCookieTest__")=="CookiesAllowed";if(navigator.cookieEnabled){this("__djCookieTest__","",{expires:-1});}}return navigator.cookieEnabled;};}if(!dojo._hasResource["dijit.layout.StackController"]){dojo._hasResource["dijit.layout.StackController"]=true;dojo.provide("dijit.layout.StackController");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(info){dojo.forEach(info.children,this.onAddChild,this);if(info.selected){this.onSelectChild(info.selected);}},destroy:function(){for(var pane in this.pane2button){this.onRemoveChild(dijit.byId(pane));}this.inherited(arguments);},onAddChild:function(page,_3e2){var cls=dojo.getObject(this.buttonWidget);var _3e3=new cls({id:this.id+"_"+page.id,label:page.title,dir:page.dir,lang:page.lang,showLabel:page.showTitle,iconClass:page.iconClass,closeButton:page.closable,title:page.tooltip});dijit.setWaiState(_3e3.focusNode,"selected","false");this.pane2handles[page.id]=[this.connect(page,"set",function(name,_3e4){var _3e5={title:"label",showTitle:"showLabel",iconClass:"iconClass",closable:"closeButton",tooltip:"title"}[name];if(_3e5){_3e3.set(_3e5,_3e4);}}),this.connect(_3e3,"onClick",dojo.hitch(this,"onButtonClick",page)),this.connect(_3e3,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",page))];this.addChild(_3e3,_3e2);this.pane2button[page.id]=_3e3;page.controlButton=_3e3;if(!this._currentChild){_3e3.focusNode.setAttribute("tabIndex","0");dijit.setWaiState(_3e3.focusNode,"selected","true");this._currentChild=page;}if(!this.isLeftToRight()&&dojo.isIE&&this._rectifyRtlTabList){this._rectifyRtlTabList();}},onRemoveChild:function(page){if(this._currentChild===page){this._currentChild=null;}dojo.forEach(this.pane2handles[page.id],this.disconnect,this);delete this.pane2handles[page.id];var _3e6=this.pane2button[page.id];if(_3e6){this.removeChild(_3e6);delete this.pane2button[page.id];_3e6.destroy();}delete page.controlButton;},onSelectChild:function(page){if(!page){return;}if(this._currentChild){var _3e7=this.pane2button[this._currentChild.id];_3e7.set("checked",false);dijit.setWaiState(_3e7.focusNode,"selected","false");_3e7.focusNode.setAttribute("tabIndex","-1");}var _3e8=this.pane2button[page.id];_3e8.set("checked",true);dijit.setWaiState(_3e8.focusNode,"selected","true");this._currentChild=page;_3e8.focusNode.setAttribute("tabIndex","0");var _3e9=dijit.byId(this.containerId);dijit.setWaiState(_3e9.containerNode,"labelledby",_3e8.id);},onButtonClick:function(page){var _3ea=dijit.byId(this.containerId);_3ea.selectChild(page);},onCloseButtonClick:function(page){var _3eb=dijit.byId(this.containerId);_3eb.closeChild(page);if(this._currentChild){var b=this.pane2button[this._currentChild.id];if(b){dijit.focus(b.focusNode||b.domNode);}}},adjacent:function(_3ec){if(!this.isLeftToRight()&&(!this.tabPosition||/top|bottom/.test(this.tabPosition))){_3ec=!_3ec;}var _3ed=this.getChildren();var _3ee=dojo.indexOf(_3ed,this.pane2button[this._currentChild.id]);var _3ef=_3ec?1:_3ed.length-1;return _3ed[(_3ee+_3ef)%_3ed.length];},onkeypress:function(e){if(this.disabled||e.altKey){return;}var _3f0=null;if(e.ctrlKey||!e._djpage){var k=dojo.keys;switch(e.charOrCode){case k.LEFT_ARROW:case k.UP_ARROW:if(!e._djpage){_3f0=false;}break;case k.PAGE_UP:if(e.ctrlKey){_3f0=false;}break;case k.RIGHT_ARROW:case k.DOWN_ARROW:if(!e._djpage){_3f0=true;}break;case k.PAGE_DOWN:if(e.ctrlKey){_3f0=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(_3f0!==null){this.adjacent(_3f0).onClick();dojo.stopEvent(e);}}},onContainerKeyPress:function(info){info.e._djpage=info.page;this.onkeypress(info.e);}});dojo.declare("dijit.layout._StackButton",dijit.form.ToggleButton,{tabIndex:"-1",postCreate:function(evt){dijit.setWaiRole((this.focusNode||this.domNode),"tab");this.inherited(arguments);},onClick:function(evt){dijit.focus(this.focusNode);},onClickCloseButton:function(evt){evt.stopPropagation();}});}if(!dojo._hasResource["dijit.layout.StackContainer"]){dojo._hasResource["dijit.layout.StackContainer"]=true;dojo.provide("dijit.layout.StackContainer");dojo.declare("dijit.layout.StackContainer",dijit.layout._LayoutWidget,{doLayout:true,persist:false,baseClass:"dijitStackContainer",postCreate:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitLayoutContainer");dijit.setWaiRole(this.containerNode,"tabpanel");this.connect(this.domNode,"onkeypress",this._onKeyPress);},startup:function(){if(this._started){return;}var _3f1=this.getChildren();dojo.forEach(_3f1,this._setupChild,this);if(this.persist){this.selectedChildWidget=dijit.byId(dojo.cookie(this.id+"_selectedChild"));}else{dojo.some(_3f1,function(_3f2){if(_3f2.selected){this.selectedChildWidget=_3f2;}return _3f2.selected;},this);}var _3f3=this.selectedChildWidget;if(!_3f3&&_3f1[0]){_3f3=this.selectedChildWidget=_3f1[0];_3f3.selected=true;}dojo.publish(this.id+"-startup",[{children:_3f1,selected:_3f3}]);this.inherited(arguments);},resize:function(){var _3f4=this.selectedChildWidget;if(_3f4&&!this._hasBeenShown){this._hasBeenShown=true;this._showChild(_3f4);}this.inherited(arguments);},_setupChild:function(_3f5){this.inherited(arguments);dojo.removeClass(_3f5.domNode,"dijitVisible");dojo.addClass(_3f5.domNode,"dijitHidden");_3f5.domNode.title="";},addChild:function(_3f6,_3f7){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-addChild",[_3f6,_3f7]);this.layout();if(!this.selectedChildWidget){this.selectChild(_3f6);}}},removeChild:function(page){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-removeChild",[page]);}if(this._beingDestroyed){return;}if(this.selectedChildWidget===page){this.selectedChildWidget=undefined;if(this._started){var _3f8=this.getChildren();if(_3f8.length){this.selectChild(_3f8[0]);}}}if(this._started){this.layout();}},selectChild:function(page,_3f9){page=dijit.byId(page);if(this.selectedChildWidget!=page){this._transition(page,this.selectedChildWidget,_3f9);this.selectedChildWidget=page;dojo.publish(this.id+"-selectChild",[page]);if(this.persist){dojo.cookie(this.id+"_selectedChild",this.selectedChildWidget.id);}}},_transition:function(_3fa,_3fb){if(_3fb){this._hideChild(_3fb);}this._showChild(_3fa);if(_3fa.resize){if(this.doLayout){_3fa.resize(this._containerContentBox||this._contentBox);}else{_3fa.resize();}}},_adjacent:function(_3fc){var _3fd=this.getChildren();var _3fe=dojo.indexOf(_3fd,this.selectedChildWidget);_3fe+=_3fc?1:_3fd.length-1;return _3fd[_3fe%_3fd.length];},forward:function(){this.selectChild(this._adjacent(true),true);},back:function(){this.selectChild(this._adjacent(false),true);},_onKeyPress:function(e){dojo.publish(this.id+"-containerKeyPress",[{e:e,page:this}]);},layout:function(){if(this.doLayout&&this.selectedChildWidget&&this.selectedChildWidget.resize){this.selectedChildWidget.resize(this._containerContentBox||this._contentBox);}},_showChild:function(page){var _3ff=this.getChildren();page.isFirstChild=(page==_3ff[0]);page.isLastChild=(page==_3ff[_3ff.length-1]);page.selected=true;dojo.removeClass(page.domNode,"dijitHidden");dojo.addClass(page.domNode,"dijitVisible");page._onShow();},_hideChild:function(page){page.selected=false;dojo.removeClass(page.domNode,"dijitVisible");dojo.addClass(page.domNode,"dijitHidden");page.onHide();},closeChild:function(page){var _400=page.onClose(this,page);if(_400){this.removeChild(page);page.destroyRecursive();}},destroyDescendants:function(_401){dojo.forEach(this.getChildren(),function(_402){this.removeChild(_402);_402.destroyRecursive(_401);},this);}});dojo.extend(dijit._Widget,{selected:false,closable:false,iconClass:"",showTitle:true});}if(!dojo._hasResource["dijit.layout.AccordionPane"]){dojo._hasResource["dijit.layout.AccordionPane"]=true;dojo.provide("dijit.layout.AccordionPane");dojo.declare("dijit.layout.AccordionPane",dijit.layout.ContentPane,{constructor:function(){dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead","","2.0");},onSelected:function(){}});}if(!dojo._hasResource["dijit.layout.AccordionContainer"]){dojo._hasResource["dijit.layout.AccordionContainer"]=true;dojo.provide("dijit.layout.AccordionContainer");dojo.declare("dijit.layout.AccordionContainer",dijit.layout.StackContainer,{duration:dijit.defaultDuration,buttonWidget:"dijit.layout._AccordionButton",_verticalSpace:0,baseClass:"dijitAccordionContainer",postCreate:function(){this.domNode.style.overflow="hidden";this.inherited(arguments);dijit.setWaiRole(this.domNode,"tablist");},startup:function(){if(this._started){return;}this.inherited(arguments);if(this.selectedChildWidget){var _403=this.selectedChildWidget.containerNode.style;_403.display="";_403.overflow="auto";this.selectedChildWidget._wrapperWidget.set("selected",true);}},_getTargetHeight:function(node){var cs=dojo.getComputedStyle(node);return Math.max(this._verticalSpace-dojo._getPadBorderExtents(node,cs).h-dojo._getMarginExtents(node,cs).h,0);},layout:function(){var _404=this.selectedChildWidget;if(!_404){return;}var _405=_404._wrapperWidget.domNode,_406=dojo._getMarginExtents(_405),_407=dojo._getPadBorderExtents(_405),_408=this._contentBox;var _409=0;dojo.forEach(this.getChildren(),function(_40a){if(_40a!=_404){_409+=dojo.marginBox(_40a._wrapperWidget.domNode).h;}});this._verticalSpace=_408.h-_409-_406.h-_407.h-_404._buttonWidget.getTitleHeight();this._containerContentBox={h:this._verticalSpace,w:this._contentBox.w-_406.w-_407.w};if(_404){_404.resize(this._containerContentBox);}},_setupChild:function(_40b){_40b._wrapperWidget=new dijit.layout._AccordionInnerContainer({contentWidget:_40b,buttonWidget:this.buttonWidget,id:_40b.id+"_wrapper",dir:_40b.dir,lang:_40b.lang,parent:this});this.inherited(arguments);},addChild:function(_40c,_40d){if(this._started){dojo.place(_40c.domNode,this.containerNode,_40d);if(!_40c._started){_40c.startup();}this._setupChild(_40c);dojo.publish(this.id+"-addChild",[_40c,_40d]);this.layout();if(!this.selectedChildWidget){this.selectChild(_40c);}}else{this.inherited(arguments);}},removeChild:function(_40e){_40e._wrapperWidget.destroy();delete _40e._wrapperWidget;dojo.removeClass(_40e.domNode,"dijitHidden");this.inherited(arguments);},getChildren:function(){return dojo.map(this.inherited(arguments),function(_40f){return _40f.declaredClass=="dijit.layout._AccordionInnerContainer"?_40f.contentWidget:_40f;},this);},destroy:function(){dojo.forEach(this.getChildren(),function(_410){_410._wrapperWidget.destroy();});this.inherited(arguments);},_transition:function(_411,_412,_413){if(this._inTransition){return;}var _414=[];var _415=this._verticalSpace;if(_411){_411._wrapperWidget.set("selected",true);this._showChild(_411);if(this.doLayout&&_411.resize){_411.resize(this._containerContentBox);}var _416=_411.domNode;dojo.addClass(_416,"dijitVisible");dojo.removeClass(_416,"dijitHidden");if(_413){var _417=_416.style.overflow;_416.style.overflow="hidden";_414.push(dojo.animateProperty({node:_416,duration:this.duration,properties:{height:{start:1,end:this._getTargetHeight(_416)}},onEnd:function(){_416.style.overflow=_417;if(dojo.isIE){setTimeout(function(){dojo.removeClass(_416.parentNode,"dijitAccordionInnerContainerFocused");setTimeout(function(){dojo.addClass(_416.parentNode,"dijitAccordionInnerContainerFocused");},0);},0);}}}));}}if(_412){_412._wrapperWidget.set("selected",false);var _418=_412.domNode;if(_413){var _419=_418.style.overflow;_418.style.overflow="hidden";_414.push(dojo.animateProperty({node:_418,duration:this.duration,properties:{height:{start:this._getTargetHeight(_418),end:1}},onEnd:function(){dojo.addClass(_418,"dijitHidden");dojo.removeClass(_418,"dijitVisible");_418.style.overflow=_419;if(_412.onHide){_412.onHide();}}}));}else{dojo.addClass(_418,"dijitHidden");dojo.removeClass(_418,"dijitVisible");if(_412.onHide){_412.onHide();}}}if(_413){this._inTransition=true;var _41a=dojo.fx.combine(_414);_41a.onEnd=dojo.hitch(this,function(){delete this._inTransition;});_41a.play();}},_onKeyPress:function(e,_41b){if(this._inTransition||this.disabled||e.altKey||!(_41b||e.ctrlKey)){if(this._inTransition){dojo.stopEvent(e);}return;}var k=dojo.keys,c=e.charOrCode;if((_41b&&(c==k.LEFT_ARROW||c==k.UP_ARROW))||(e.ctrlKey&&c==k.PAGE_UP)){this._adjacent(false)._buttonWidget._onTitleClick();dojo.stopEvent(e);}else{if((_41b&&(c==k.RIGHT_ARROW||c==k.DOWN_ARROW))||(e.ctrlKey&&(c==k.PAGE_DOWN||c==k.TAB))){this._adjacent(true)._buttonWidget._onTitleClick();dojo.stopEvent(e);}}}});dojo.declare("dijit.layout._AccordionInnerContainer",[dijit._Widget,dijit._CssStateMixin],{baseClass:"dijitAccordionInnerContainer",isContainer:true,isLayoutContainer:true,buildRendering:function(){this.domNode=dojo.place("<div class='"+this.baseClass+"'>",this.contentWidget.domNode,"after");var _41c=this.contentWidget,cls=dojo.getObject(this.buttonWidget);this.button=_41c._buttonWidget=(new cls({contentWidget:_41c,label:_41c.title,title:_41c.tooltip,dir:_41c.dir,lang:_41c.lang,iconClass:_41c.iconClass,id:_41c.id+"_button",parent:this.parent})).placeAt(this.domNode);dojo.place(this.contentWidget.domNode,this.domNode);},postCreate:function(){this.inherited(arguments);this.connect(this.contentWidget,"set",function(name,_41d){var _41e={title:"label",tooltip:"title",iconClass:"iconClass"}[name];if(_41e){this.button.set(_41e,_41d);}},this);},_setSelectedAttr:function(_41f){this.selected=_41f;this.button.set("selected",_41f);if(_41f){var cw=this.contentWidget;if(cw.onSelected){cw.onSelected();}}},startup:function(){this.contentWidget.startup();},destroy:function(){this.button.destroyRecursive();delete this.contentWidget._buttonWidget;delete this.contentWidget._wrapperWidget;this.inherited(arguments);},destroyDescendants:function(){this.contentWidget.destroyRecursive();}});dojo.declare("dijit.layout._AccordionButton",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:dojo.cache("dijit.layout","templates/AccordionButton.html","<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap),{label:{node:"titleTextNode",type:"innerHTML"},title:{node:"titleTextNode",type:"attribute",attribute:"title"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitAccordionTitle",getParent:function(){return this.parent;},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);var _420=dojo.attr(this.domNode,"id").replace(" ","_");dojo.attr(this.titleTextNode,"id",_420+"_title");dijit.setWaiState(this.focusNode,"labelledby",dojo.attr(this.titleTextNode,"id"));},getTitleHeight:function(){return dojo.marginBox(this.domNode).h;},_onTitleClick:function(){var _421=this.getParent();if(!_421._inTransition){_421.selectChild(this.contentWidget,true);dijit.focus(this.focusNode);}},_onTitleKeyPress:function(evt){return this.getParent()._onKeyPress(evt,this.contentWidget);},_setSelectedAttr:function(_422){this.selected=_422;dijit.setWaiState(this.focusNode,"expanded",_422);dijit.setWaiState(this.focusNode,"selected",_422);this.focusNode.setAttribute("tabIndex",_422?"0":"-1");}});}if(!dojo._hasResource["dijit.layout.BorderContainer"]){dojo._hasResource["dijit.layout.BorderContainer"]=true;dojo.provide("dijit.layout.BorderContainer");dojo.declare("dijit.layout.BorderContainer",dijit.layout._LayoutWidget,{design:"headline",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(_423){var _424=_423.region;if(_424){this.inherited(arguments);dojo.addClass(_423.domNode,this.baseClass+"Pane");var ltr=this.isLeftToRight();if(_424=="leading"){_424=ltr?"left":"right";}if(_424=="trailing"){_424=ltr?"right":"left";}this["_"+_424]=_423.domNode;this["_"+_424+"Widget"]=_423;if((_423.splitter||this.gutters)&&!this._splitters[_424]){var _425=dojo.getObject(_423.splitter?this._splitterClass:"dijit.layout._Gutter");var _426=new _425({id:_423.id+"_splitter",container:this,child:_423,region:_424,live:this.liveSplitters});_426.isSplitter=true;this._splitters[_424]=_426.domNode;dojo.place(this._splitters[_424],_423.domNode,"after");_426.startup();}_423.region=_424;}},_computeSplitterThickness:function(_427){this._splitterThickness[_427]=this._splitterThickness[_427]||dojo.marginBox(this._splitters[_427])[(/top|bottom/.test(_427)?"h":"w")];},layout:function(){for(var _428 in this._splitters){this._computeSplitterThickness(_428);}this._layoutChildren();},addChild:function(_429,_42a){this.inherited(arguments);if(this._started){this.layout();}},removeChild:function(_42b){var _42c=_42b.region;var _42d=this._splitters[_42c];if(_42d){dijit.byNode(_42d).destroy();delete this._splitters[_42c];delete this._splitterThickness[_42c];}this.inherited(arguments);delete this["_"+_42c];delete this["_"+_42c+"Widget"];if(this._started){this._layoutChildren();}dojo.removeClass(_42b.domNode,this.baseClass+"Pane");},getChildren:function(){return dojo.filter(this.inherited(arguments),function(_42e){return !_42e.isSplitter;});},getSplitter:function(_42f){var _430=this._splitters[_42f];return _430?dijit.byNode(_430):null;},resize:function(_431,_432){if(!this.cs||!this.pe){var node=this.domNode;this.cs=dojo.getComputedStyle(node);this.pe=dojo._getPadExtents(node,this.cs);this.pe.r=dojo._toPixelValue(node,this.cs.paddingRight);this.pe.b=dojo._toPixelValue(node,this.cs.paddingBottom);dojo.style(node,"padding","0px");}this.inherited(arguments);},_layoutChildren:function(_433,_434){if(!this._borderBox||!this._borderBox.h){return;}var _435=(this.design=="sidebar");var _436=0,_437=0,_438=0,_439=0;var _43a={},_43b={},_43c={},_43d={},_43e=(this._center&&this._center.style)||{};var _43f=/left|right/.test(_433);var _440=!_433||(!_43f&&!_435);var _441=!_433||(_43f&&_435);if(this._top){_43a=(_433=="top"||_441)&&this._top.style;_436=_433=="top"?_434:dojo.marginBox(this._top).h;}if(this._left){_43b=(_433=="left"||_440)&&this._left.style;_438=_433=="left"?_434:dojo.marginBox(this._left).w;}if(this._right){_43c=(_433=="right"||_440)&&this._right.style;_439=_433=="right"?_434:dojo.marginBox(this._right).w;}if(this._bottom){_43d=(_433=="bottom"||_441)&&this._bottom.style;_437=_433=="bottom"?_434:dojo.marginBox(this._bottom).h;}var _442=this._splitters;var _443=_442.top,_444=_442.bottom,_445=_442.left,_446=_442.right;var _447=this._splitterThickness;var _448=_447.top||0,_449=_447.left||0,_44a=_447.right||0,_44b=_447.bottom||0;if(_449>50||_44a>50){setTimeout(dojo.hitch(this,function(){this._splitterThickness={};for(var _44c in this._splitters){this._computeSplitterThickness(_44c);}this._layoutChildren();}),50);return false;}var pe=this.pe;var _44d={left:(_435?_438+_449:0)+pe.l+"px",right:(_435?_439+_44a:0)+pe.r+"px"};if(_443){dojo.mixin(_443.style,_44d);_443.style.top=_436+pe.t+"px";}if(_444){dojo.mixin(_444.style,_44d);_444.style.bottom=_437+pe.b+"px";}_44d={top:(_435?0:_436+_448)+pe.t+"px",bottom:(_435?0:_437+_44b)+pe.b+"px"};if(_445){dojo.mixin(_445.style,_44d);_445.style.left=_438+pe.l+"px";}if(_446){dojo.mixin(_446.style,_44d);_446.style.right=_439+pe.r+"px";}dojo.mixin(_43e,{top:pe.t+_436+_448+"px",left:pe.l+_438+_449+"px",right:pe.r+_439+_44a+"px",bottom:pe.b+_437+_44b+"px"});var _44e={top:_435?pe.t+"px":_43e.top,bottom:_435?pe.b+"px":_43e.bottom};dojo.mixin(_43b,_44e);dojo.mixin(_43c,_44e);_43b.left=pe.l+"px";_43c.right=pe.r+"px";_43a.top=pe.t+"px";_43d.bottom=pe.b+"px";if(_435){_43a.left=_43d.left=_438+_449+pe.l+"px";_43a.right=_43d.right=_439+_44a+pe.r+"px";}else{_43a.left=_43d.left=pe.l+"px";_43a.right=_43d.right=pe.r+"px";}var _44f=this._borderBox.h-pe.t-pe.b,_450=_44f-(_436+_448+_437+_44b),_451=_435?_44f:_450;var _452=this._borderBox.w-pe.l-pe.r,_453=_452-(_438+_449+_439+_44a),_454=_435?_453:_452;var dim={top:{w:_454,h:_436},bottom:{w:_454,h:_437},left:{w:_438,h:_451},right:{w:_439,h:_451},center:{h:_450,w:_453}};if(_433){var _455=this["_"+_433+"Widget"],mb={};mb[/top|bottom/.test(_433)?"h":"w"]=_434;_455.resize?_455.resize(mb,dim[_455.region]):dojo.marginBox(_455.domNode,mb);}var _456=dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.some(this.getChildren(),function(_457){return _457.domNode.tagName=="TEXTAREA"||_457.domNode.tagName=="INPUT";});if(_456){var _458=function(_459,_45a,_45b){if(_459){(_459.resize?_459.resize(_45a,_45b):dojo.marginBox(_459.domNode,_45a));}};if(_445){_445.style.height=_451;}if(_446){_446.style.height=_451;}_458(this._leftWidget,{h:_451},dim.left);_458(this._rightWidget,{h:_451},dim.right);if(_443){_443.style.width=_454;}if(_444){_444.style.width=_454;}_458(this._topWidget,{w:_454},dim.top);_458(this._bottomWidget,{w:_454},dim.bottom);_458(this._centerWidget,dim.center);}else{var _45c=!_433||(/top|bottom/.test(_433)&&this.design!="sidebar"),_45d=!_433||(/left|right/.test(_433)&&this.design=="sidebar"),_45e={center:true,left:_45c,right:_45c,top:_45d,bottom:_45d};dojo.forEach(this.getChildren(),function(_45f){if(_45f.resize&&_45e[_45f.region]){_45f.resize(null,dim[_45f.region]);}},this);}},destroy:function(){for(var _460 in this._splitters){var _461=this._splitters[_460];dijit.byNode(_461).destroy();dojo.destroy(_461);}delete this._splitters;delete this._splitterThickness;this.inherited(arguments);}});dojo.extend(dijit._Widget,{region:"",splitter:false,minSize:0,maxSize:Infinity});dojo.declare("dijit.layout._Splitter",[dijit._Widget,dijit._Templated],{live:true,templateString:"<div class=\"dijitSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_startDrag,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 _462=dojo.cookie(this._cookieName);if(_462){this.child.domNode.style[this.horizontal?"height":"width"]=_462;}}},_computeMaxSize:function(){var dim=this.horizontal?"h":"w",_463=this.container._splitterThickness[this.region];var flip={left:"right",right:"left",top:"bottom",bottom:"top",leading:"trailing",trailing:"leading"},_464=this.container["_"+flip[this.region]];var _465=dojo.contentBox(this.container.domNode)[dim]-(_464?dojo.marginBox(_464)[dim]:0)-20-_463*2;return Math.min(this.child.maxSize,_465);},_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 _466=this._factor,max=this._computeMaxSize(),min=this.child.minSize||20,_467=this.horizontal,axis=_467?"pageY":"pageX",_468=e[axis],_469=this.domNode.style,dim=_467?"h":"w",_46a=dojo.marginBox(this.child.domNode)[dim],_46b=this.region,_46c=parseInt(this.domNode.style[_46b],10),_46d=this._resize,_46e=this.child.domNode,_46f=dojo.hitch(this.container,this.container._layoutChildren),de=dojo.doc;this._handlers=(this._handlers||[]).concat([dojo.connect(de,"onmousemove",this._drag=function(e,_470){var _471=e[axis]-_468,_472=_466*_471+_46a,_473=Math.max(Math.min(_472,max),min);if(_46d||_470){_46f(_46b,_473);}_469[_46b]=_466*_471+_46c+(_473-_472)+"px";}),dojo.connect(de,"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 _474=this.horizontal;var tick=1;var dk=dojo.keys;switch(e.charOrCode){case _474?dk.UP_ARROW:dk.LEFT_ARROW:tick*=-1;case _474?dk.DOWN_ARROW:dk.RIGHT_ARROW:break;default:return;}var _475=dojo.marginBox(this.child.domNode)[_474?"h":"w"]+this._factor*tick;this.container._layoutChildren(this.region,Math.max(Math.min(_475,this._computeMaxSize()),this.child.minSize));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"));}});}if(!dojo._hasResource["dijit.layout._TabContainerBase"]){dojo._hasResource["dijit.layout._TabContainerBase"]=true;dojo.provide("dijit.layout._TabContainerBase");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(tab){dojo.addClass(tab.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 _476=this.tabPosition.replace(/-h/,"");this.tablist.layoutAlign=_476;var _477=[this.tablist,{domNode:this.tablistSpacer,layoutAlign:_476},{domNode:this.containerNode,layoutAlign:"client"}];dijit.layout.layoutChildren(this.domNode,this._contentBox,_477);this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_477[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);}});}if(!dojo._hasResource["dijit.layout.TabController"]){dojo._hasResource["dijit.layout.TabController"]=true;dojo.provide("dijit.layout.TabController");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 _478=0;for(var pane in this.pane2button){var ow=this.pane2button[pane].innerDiv.scrollWidth;_478=Math.max(_478,ow);}for(pane in this.pane2button){this.pane2button[pane].innerDiv.style.width=_478+"px";}}});dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",cssStateNodes:{closeNode:"dijitTabCloseButton"},templateString:dojo.cache("dijit.layout","templates/_TabButton.html","<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div waiRole=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' waiRole=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>x</span\n\t\t        ></span>\n\t\t\t</div>\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(disp){this.closeButton=disp;dojo.toggleClass(this.innerDiv,"dijitClosable",disp);this.closeNode.style.display=disp?"":"none";if(disp){var _479=dojo.i18n.getLocalization("dijit","common");if(this.closeNode){dojo.attr(this.closeNode,"title",_479.itemClose);}var _479=dojo.i18n.getLocalization("dijit","common");this._closeMenu=new dijit.Menu({id:this.id+"_Menu",dir:this.dir,lang:this.lang,targetNodeIds:[this.domNode]});this._closeMenu.addChild(new dijit.MenuItem({label:_479.itemClose,dir:this.dir,lang:this.lang,onClick:dojo.hitch(this,"onClickCloseButton")}));}else{if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}}},_setLabelAttr:function(_47a){this.inherited(arguments);if(this.showLabel==false&&!this.params.title){this.iconNode.alt=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}},destroy:function(){if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){dojo._hasResource["dijit.layout.ScrollingTabController"]=true;dojo.provide("dijit.layout.ScrollingTabController");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\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=false>&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>&#9654;</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'></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(page,_47b){this.inherited(arguments);var _47c;if(this.useMenu){var _47d=this.containerId;_47c=new dijit.MenuItem({id:page.id+"_stcMi",label:page.title,dir:page.dir,lang:page.lang,onClick:dojo.hitch(this,function(){var _47e=dijit.byId(_47d);_47e.selectChild(page);})});this._menuChildren[page.id]=_47c;this._menu.addChild(_47c,_47b);}this.pane2handles[page.id].push(this.connect(this.pane2button[page.id],"set",function(name,_47f){if(this._postStartup){if(name=="label"){if(_47c){_47c.set(name,_47f);}if(this._dim){this.resize(this._dim);}}}}));dojo.style(this.containerNode,"width",(dojo.style(this.containerNode,"width")+200)+"px");},onRemoveChild:function(page,_480){var _481=this.pane2button[page.id];if(this._selectedTab===_481.domNode){this._selectedTab=null;}if(this.useMenu&&page&&page.id&&this._menuChildren[page.id]){this._menu.removeChild(this._menuChildren[page.id]);this._menuChildren[page.id].destroy();delete this._menuChildren[page.id];}this.inherited(arguments);},_initButtons:function(){this._menuChildren={};this._btnWidth=0;this._buttons=dojo.query("> .tabStripButton",this.domNode).filter(function(btn){if((this.useMenu&&btn==this._menuBtn.domNode)||(this.useSlider&&(btn==this._rightBtn.domNode||btn==this._leftBtn.domNode))){this._btnWidth+=dojo.marginBox(btn).w;return true;}else{dojo.style(btn,"display","none");return false;}},this);if(this.useMenu){this._menu=new dijit.Menu({id:this.id+"_menu",dir:this.dir,lang:this.lang,targetNodeIds:[this._menuBtn.domNode],leftClickToOpen:true,refocus:false});this._supportingWidgets.push(this._menu);}},_getTabsWidth:function(){var _482=this.getChildren();if(_482.length){var _483=_482[this.isLeftToRight()?0:_482.length-1].domNode,_484=_482[this.isLeftToRight()?_482.length-1:0].domNode;return _484.offsetLeft+dojo.style(_484,"width")-_483.offsetLeft;}else{return 0;}},_enableBtn:function(_485){var _486=this._getTabsWidth();_485=_485||dojo.style(this.scrollNode,"width");return _486>0&&_485<_486;},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 _487=this._enableBtn(this._contentBox.w);this._buttons.style("display",_487?"":"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){if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var w=this.scrollNode,sl=this._convertToScrollLeft(this._getScrollForSelectedTab());w.scrollLeft=sl;}this._setButtonClass(this._getScroll());this._postResize=true;},_getScroll:function(){var sl=(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&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.isIE&&dojo.isQuirks)||dojo.isWebKit){return val;}else{var _488=dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width");return (dojo.isIE==8?-1:1)*(val-_488);}},onSelectChild:function(page){var tab=this.pane2button[page.id];if(!tab||!page){return;}var node=tab.domNode;if(this._postResize&&node!=this._selectedTab){this._selectedTab=node;var sl=this._getScroll();if(sl>node.offsetLeft||sl+dojo.style(this.scrollNode,"width")<node.offsetLeft+dojo.style(node,"width")){this.createSmoothScroll().play();}}this.inherited(arguments);},_getScrollBounds:function(){var _489=this.getChildren(),_48a=dojo.style(this.scrollNode,"width"),_48b=dojo.style(this.containerNode,"width"),_48c=_48b-_48a,_48d=this._getTabsWidth();if(_489.length&&_48d>_48a){return {min:this.isLeftToRight()?0:_489[_489.length-1].domNode.offsetLeft,max:this.isLeftToRight()?(_489[_489.length-1].domNode.offsetLeft+dojo.style(_489[_489.length-1].domNode,"width"))-_48a:_48c};}else{var _48e=this.isLeftToRight()?0:_48c;return {min:_48e,max:_48e};}},_getScrollForSelectedTab:function(){var w=this.scrollNode,n=this._selectedTab,_48f=dojo.style(this.scrollNode,"width"),_490=this._getScrollBounds();var pos=(n.offsetLeft+dojo.style(n,"width")/2)-_48f/2;pos=Math.min(Math.max(pos,_490.min),_490.max);return pos;},createSmoothScroll:function(x){if(arguments.length>0){var _491=this._getScrollBounds();x=Math.min(Math.max(x,_491.min),_491.max);}else{x=this._getScrollForSelectedTab();}if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var self=this,w=this.scrollNode,anim=new dojo._Animation({beforeBegin:function(){if(this.curve){delete this.curve;}var oldS=w.scrollLeft,newS=self._convertToScrollLeft(x);anim.curve=new dojo._Line(oldS,newS);},onAnimate:function(val){w.scrollLeft=val;}});this._anim=anim;this._setButtonClass(x);return anim;},_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(_492,node){if(node&&dojo.hasClass(node,"dijitTabDisabled")){return;}var _493=dojo.style(this.scrollNode,"width");var d=(_493*0.75)*_492;var to=this._getScroll()+d;this._setButtonClass(to);this.createSmoothScroll(to).play();},_setButtonClass:function(_494){var _495=this._getScrollBounds();this._leftBtn.set("disabled",_494<=_495.min);this._rightBtn.set("disabled",_494>=_495.max);}});dojo.declare("dijit.layout._ScrollingTabControllerButton",dijit.form.Button,{baseClass:"dijitTab tabStripButton",templateString:dojo.cache("dijit.layout","templates/_ScrollingTabControllerButton.html","<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div waiRole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div waiRole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img waiRole=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),tabIndex:"-1"});}if(!dojo._hasResource["dijit.layout.TabContainer"]){dojo._hasResource["dijit.layout.TabContainer"]=true;dojo.provide("dijit.layout.TabContainer");dojo.declare("dijit.layout.TabContainer",dijit.layout._TabContainerBase,{useMenu:true,useSlider:true,controllerWidget:"",_makeController:function(_496){var cls=this.baseClass+"-tabs"+(this.doLayout?"":" dijitTabNoLayout"),_497=dojo.getObject(this.controllerWidget);return new _497({id:this.id+"_tablist",dir:this.dir,lang:this.lang,tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id,"class":cls,nested:this.nested,useMenu:this.useMenu,useSlider:this.useSlider,tabStripClass:this.tabStrip?this.baseClass+(this.tabStrip?"":"No")+"Strip":null},_496);},postMixInProperties:function(){this.inherited(arguments);if(!this.controllerWidget){this.controllerWidget=(this.tabPosition=="top"||this.tabPosition=="bottom")&&!this.nested?"dijit.layout.ScrollingTabController":"dijit.layout.TabController";}}});}if(!dojo._hasResource["dojo.number"]){dojo._hasResource["dojo.number"]=true;dojo.provide("dojo.number");dojo.number.format=function(_498,_499){_499=dojo.mixin({},_499||{});var _49a=dojo.i18n.normalizeLocale(_499.locale),_49b=dojo.i18n.getLocalization("dojo.cldr","number",_49a);_499.customs=_49b;var _49c=_499.pattern||_49b[(_499.type||"decimal")+"Format"];if(isNaN(_498)||Math.abs(_498)==Infinity){return null;}return dojo.number._applyPattern(_498,_49c,_499);};dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;dojo.number._applyPattern=function(_49d,_49e,_49f){_49f=_49f||{};var _4a0=_49f.customs.group,_4a1=_49f.customs.decimal,_4a2=_49e.split(";"),_4a3=_4a2[0];_49e=_4a2[(_49d<0)?1:0]||("-"+_4a3);if(_49e.indexOf("%")!=-1){_49d*=100;}else{if(_49e.indexOf("‰")!=-1){_49d*=1000;}else{if(_49e.indexOf("¤")!=-1){_4a0=_49f.customs.currencyGroup||_4a0;_4a1=_49f.customs.currencyDecimal||_4a1;_49e=_49e.replace(/\u00a4{1,3}/,function(_4a4){var prop=["symbol","currency","displayName"][_4a4.length-1];return _49f[prop]||_49f.currency||"";});}else{if(_49e.indexOf("E")!=-1){throw new Error("exponential notation not supported");}}}}var _4a5=dojo.number._numberPatternRE;var _4a6=_4a3.match(_4a5);if(!_4a6){throw new Error("unable to find a number expression in pattern: "+_49e);}if(_49f.fractional===false){_49f.places=0;}return _49e.replace(_4a5,dojo.number._formatAbsolute(_49d,_4a6[0],{decimal:_4a1,group:_4a0,places:_49f.places,round:_49f.round}));};dojo.number.round=function(_4a7,_4a8,_4a9){var _4aa=10/(_4a9||10);return (_4aa*+_4a7).toFixed(_4a8)/_4aa;};if((0.9).toFixed()==0){(function(){var _4ab=dojo.number.round;dojo.number.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 _4ab(v,p,m)+(v>0?d:-d);};})();}dojo.number._formatAbsolute=function(_4ac,_4ad,_4ae){_4ae=_4ae||{};if(_4ae.places===true){_4ae.places=0;}if(_4ae.places===Infinity){_4ae.places=6;}var _4af=_4ad.split("."),_4b0=typeof _4ae.places=="string"&&_4ae.places.indexOf(","),_4b1=_4ae.places;if(_4b0){_4b1=_4ae.places.substring(_4b0+1);}else{if(!(_4b1>=0)){_4b1=(_4af[1]||[]).length;}}if(!(_4ae.round<0)){_4ac=dojo.number.round(_4ac,_4b1,_4ae.round);}var _4b2=String(Math.abs(_4ac)).split("."),_4b3=_4b2[1]||"";if(_4af[1]||_4ae.places){if(_4b0){_4ae.places=_4ae.places.substring(0,_4b0);}var pad=_4ae.places!==undefined?_4ae.places:(_4af[1]&&_4af[1].lastIndexOf("0")+1);if(pad>_4b3.length){_4b2[1]=dojo.string.pad(_4b3,pad,"0",true);}if(_4b1<_4b3.length){_4b2[1]=_4b3.substr(0,_4b1);}}else{if(_4b2[1]){_4b2.pop();}}var _4b4=_4af[0].replace(",","");pad=_4b4.indexOf("0");if(pad!=-1){pad=_4b4.length-pad;if(pad>_4b2[0].length){_4b2[0]=dojo.string.pad(_4b2[0],pad);}if(_4b4.indexOf("#")==-1){_4b2[0]=_4b2[0].substr(_4b2[0].length-pad);}}var _4b5=_4af[0].lastIndexOf(","),_4b6,_4b7;if(_4b5!=-1){_4b6=_4af[0].length-_4b5-1;var _4b8=_4af[0].substr(0,_4b5);_4b5=_4b8.lastIndexOf(",");if(_4b5!=-1){_4b7=_4b8.length-_4b5-1;}}var _4b9=[];for(var _4ba=_4b2[0];_4ba;){var off=_4ba.length-_4b6;_4b9.push((off>0)?_4ba.substr(off):_4ba);_4ba=(off>0)?_4ba.slice(0,off):"";if(_4b7){_4b6=_4b7;delete _4b7;}}_4b2[0]=_4b9.reverse().join(_4ae.group||",");return _4b2.join(_4ae.decimal||".");};dojo.number.regexp=function(_4bb){return dojo.number._parseInfo(_4bb).regexp;};dojo.number._parseInfo=function(_4bc){_4bc=_4bc||{};var _4bd=dojo.i18n.normalizeLocale(_4bc.locale),_4be=dojo.i18n.getLocalization("dojo.cldr","number",_4bd),_4bf=_4bc.pattern||_4be[(_4bc.type||"decimal")+"Format"],_4c0=_4be.group,_4c1=_4be.decimal,_4c2=1;if(_4bf.indexOf("%")!=-1){_4c2/=100;}else{if(_4bf.indexOf("‰")!=-1){_4c2/=1000;}else{var _4c3=_4bf.indexOf("¤")!=-1;if(_4c3){_4c0=_4be.currencyGroup||_4c0;_4c1=_4be.currencyDecimal||_4c1;}}}var _4c4=_4bf.split(";");if(_4c4.length==1){_4c4.push("-"+_4c4[0]);}var re=dojo.regexp.buildGroupRE(_4c4,function(_4c5){_4c5="(?:"+dojo.regexp.escapeString(_4c5,".")+")";return _4c5.replace(dojo.number._numberPatternRE,function(_4c6){var _4c7={signed:false,separator:_4bc.strict?_4c0:[_4c0,""],fractional:_4bc.fractional,decimal:_4c1,exponent:false},_4c8=_4c6.split("."),_4c9=_4bc.places;if(_4c8.length==1&&_4c2!=1){_4c8[1]="###";}if(_4c8.length==1||_4c9===0){_4c7.fractional=false;}else{if(_4c9===undefined){_4c9=_4bc.pattern?_4c8[1].lastIndexOf("0")+1:Infinity;}if(_4c9&&_4bc.fractional==undefined){_4c7.fractional=true;}if(!_4bc.places&&(_4c9<_4c8[1].length)){_4c9+=","+_4c8[1].length;}_4c7.places=_4c9;}var _4ca=_4c8[0].split(",");if(_4ca.length>1){_4c7.groupSize=_4ca.pop().length;if(_4ca.length>1){_4c7.groupSize2=_4ca.pop().length;}}return "("+dojo.number._realNumberRegexp(_4c7)+")";});},true);if(_4c3){re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_4cb,_4cc,_4cd,_4ce){var prop=["symbol","currency","displayName"][_4cd.length-1],_4cf=dojo.regexp.escapeString(_4bc[prop]||_4bc.currency||"");_4cc=_4cc?"[\\s\\xa0]":"";_4ce=_4ce?"[\\s\\xa0]":"";if(!_4bc.strict){if(_4cc){_4cc+="*";}if(_4ce){_4ce+="*";}return "(?:"+_4cc+_4cf+_4ce+")?";}return _4cc+_4cf+_4ce;});}return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_4c0,decimal:_4c1,factor:_4c2};};dojo.number.parse=function(_4d0,_4d1){var info=dojo.number._parseInfo(_4d1),_4d2=(new RegExp("^"+info.regexp+"$")).exec(_4d0);if(!_4d2){return NaN;}var _4d3=_4d2[1];if(!_4d2[1]){if(!_4d2[2]){return NaN;}_4d3=_4d2[2];info.factor*=-1;}_4d3=_4d3.replace(new RegExp("["+info.group+"\\s\\xa0"+"]","g"),"").replace(info.decimal,".");return _4d3*info.factor;};dojo.number._realNumberRegexp=function(_4d4){_4d4=_4d4||{};if(!("places" in _4d4)){_4d4.places=Infinity;}if(typeof _4d4.decimal!="string"){_4d4.decimal=".";}if(!("fractional" in _4d4)||/^0/.test(_4d4.places)){_4d4.fractional=[true,false];}if(!("exponent" in _4d4)){_4d4.exponent=[true,false];}if(!("eSigned" in _4d4)){_4d4.eSigned=[true,false];}var _4d5=dojo.number._integerRegexp(_4d4),_4d6=dojo.regexp.buildGroupRE(_4d4.fractional,function(q){var re="";if(q&&(_4d4.places!==0)){re="\\"+_4d4.decimal;if(_4d4.places==Infinity){re="(?:"+re+"\\d+)?";}else{re+="\\d{"+_4d4.places+"}";}}return re;},true);var _4d7=dojo.regexp.buildGroupRE(_4d4.exponent,function(q){if(q){return "([eE]"+dojo.number._integerRegexp({signed:_4d4.eSigned})+")";}return "";});var _4d8=_4d5+_4d6;if(_4d6){_4d8="(?:(?:"+_4d8+")|(?:"+_4d6+"))";}return _4d8+_4d7;};dojo.number._integerRegexp=function(_4d9){_4d9=_4d9||{};if(!("signed" in _4d9)){_4d9.signed=[true,false];}if(!("separator" in _4d9)){_4d9.separator="";}else{if(!("groupSize" in _4d9)){_4d9.groupSize=3;}}var _4da=dojo.regexp.buildGroupRE(_4d9.signed,function(q){return q?"[-+]":"";},true);var _4db=dojo.regexp.buildGroupRE(_4d9.separator,function(sep){if(!sep){return "(?:\\d+)";}sep=dojo.regexp.escapeString(sep);if(sep==" "){sep="\\s";}else{if(sep==" "){sep="\\s\\xa0";}}var grp=_4d9.groupSize,grp2=_4d9.groupSize2;if(grp2){var _4dc="(?:0|[1-9]\\d{0,"+(grp2-1)+"}(?:["+sep+"]\\d{"+grp2+"})*["+sep+"]\\d{"+grp+"})";return ((grp-grp2)>0)?"(?:"+_4dc+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_4dc;}return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";},true);return _4da+_4db;};}if(!dojo._hasResource["dijit.ProgressBar"]){dojo._hasResource["dijit.ProgressBar"]=true;dojo.provide("dijit.ProgressBar");dojo.declare("dijit.ProgressBar",[dijit._Widget,dijit._Templated],{progress:"0",maximum:100,places:0,indeterminate:false,name:"",templateString:dojo.cache("dijit","templates/ProgressBar.html","<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),_indeterminateHighContrastImagePath:dojo.moduleUrl("dijit","themes/a11y/indeterminate_progress.gif"),postCreate:function(){this.inherited(arguments);this.indeterminateHighContrastImage.setAttribute("src",this._indeterminateHighContrastImagePath.toString());this.update();},update:function(_4dd){dojo.mixin(this,_4dd||{});var tip=this.internalProgress;var _4de=1,_4df;if(this.indeterminate){_4df="addClass";dijit.removeWaiState(tip,"valuenow");dijit.removeWaiState(tip,"valuemin");dijit.removeWaiState(tip,"valuemax");}else{_4df="removeClass";if(String(this.progress).indexOf("%")!=-1){_4de=Math.min(parseFloat(this.progress)/100,1);this.progress=_4de*this.maximum;}else{this.progress=Math.min(this.progress,this.maximum);_4de=this.progress/this.maximum;}var text=this.report(_4de);this.label.firstChild.nodeValue=text;dijit.setWaiState(tip,"describedby",this.label.id);dijit.setWaiState(tip,"valuenow",this.progress);dijit.setWaiState(tip,"valuemin",0);dijit.setWaiState(tip,"valuemax",this.maximum);}dojo[_4df](this.domNode,"dijitProgressBarIndeterminate");tip.style.width=(_4de*100)+"%";this.onChange();},_setValueAttr:function(v){if(v==Infinity){this.update({indeterminate:true});}else{this.update({indeterminate:false,progress:v});}},_getValueAttr:function(){return this.progress;},report:function(_4e0){return dojo.number.format(_4e0,{type:"percent",places:this.places,locale:this.lang});},onChange:function(){}});}if(!dojo._hasResource["dijit.ToolbarSeparator"]){dojo._hasResource["dijit.ToolbarSeparator"]=true;dojo.provide("dijit.ToolbarSeparator");dojo.declare("dijit.ToolbarSeparator",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitToolbarSeparator dijitInline\" waiRole=\"presentation\"></div>",postCreate:function(){dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dijit.Toolbar"]){dojo._hasResource["dijit.Toolbar"]=true;dojo.provide("dijit.Toolbar");dojo.declare("dijit.Toolbar",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{templateString:"<div class=\"dijit\" waiRole=\"toolbar\" tabIndex=\"${tabIndex}\" dojoAttachPoint=\"containerNode\">"+"</div>",baseClass:"dijitToolbar",postCreate:function(){this.connectKeyNavHandlers(this.isLeftToRight()?[dojo.keys.LEFT_ARROW]:[dojo.keys.RIGHT_ARROW],this.isLeftToRight()?[dojo.keys.RIGHT_ARROW]:[dojo.keys.LEFT_ARROW]);this.inherited(arguments);},startup:function(){if(this._started){return;}this.startupKeyNavChildren();this.inherited(arguments);}});}if(!dojo._hasResource["dojo.DeferredList"]){dojo._hasResource["dojo.DeferredList"]=true;dojo.provide("dojo.DeferredList");dojo.DeferredList=function(list,_4e1,_4e2,_4e3,_4e4){var _4e5=[];dojo.Deferred.call(this);var self=this;if(list.length===0&&!_4e1){this.resolve([0,[]]);}var _4e6=0;dojo.forEach(list,function(item,i){item.then(function(_4e7){if(_4e1){self.resolve([i,_4e7]);}else{_4e8(true,_4e7);}},function(_4e9){if(_4e2){self.reject(_4e9);}else{_4e8(false,_4e9);}if(_4e3){return null;}throw _4e9;});function _4e8(_4ea,_4eb){_4e5[i]=[_4ea,_4eb];_4e6++;if(_4e6===list.length){self.resolve(_4e5);}};});};dojo.DeferredList.prototype=new dojo.Deferred();dojo.DeferredList.prototype.gatherResults=function(_4ec){var d=new dojo.DeferredList(_4ec,false,true,false);d.addCallback(function(_4ed){var ret=[];dojo.forEach(_4ed,function(_4ee){ret.push(_4ee[1]);});return ret;});return d;};}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(args){dojo.mixin(this,args);this.connects=[];var _4ef=this.store;if(!_4ef.getFeatures()["dojo.data.api.Identity"]){throw new Error("dijit.Tree: store must support dojo.data.Identity");}if(_4ef.getFeatures()["dojo.data.api.Notification"]){this.connects=this.connects.concat([dojo.connect(_4ef,"onNew",this,"onNewItem"),dojo.connect(_4ef,"onDelete",this,"onDeleteItem"),dojo.connect(_4ef,"onSet",this,"onSetItem")]);}},destroy:function(){dojo.forEach(this.connects,dojo.disconnect);},getRoot:function(_4f0,_4f1){if(this.root){_4f0(this.root);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_4f2){if(_4f2.length!=1){throw new Error(this.declaredClass+": query "+dojo.toJson(this.query)+" returned "+_4f2.length+" items, but must return exactly one item");}this.root=_4f2[0];_4f0(this.root);}),onError:_4f1});}},mayHaveChildren:function(item){return dojo.some(this.childrenAttrs,function(attr){return this.store.hasAttribute(item,attr);},this);},getChildren:function(_4f3,_4f4,_4f5){var _4f6=this.store;if(!_4f6.isItemLoaded(_4f3)){var _4f7=dojo.hitch(this,arguments.callee);_4f6.loadItem({item:_4f3,onItem:function(_4f8){_4f7(_4f8,_4f4,_4f5);},onError:_4f5});return;}var _4f9=[];for(var i=0;i<this.childrenAttrs.length;i++){var vals=_4f6.getValues(_4f3,this.childrenAttrs[i]);_4f9=_4f9.concat(vals);}var _4fa=0;if(!this.deferItemLoadingUntilExpand){dojo.forEach(_4f9,function(item){if(!_4f6.isItemLoaded(item)){_4fa++;}});}if(_4fa==0){_4f4(_4f9);}else{dojo.forEach(_4f9,function(item,idx){if(!_4f6.isItemLoaded(item)){_4f6.loadItem({item:item,onItem:function(item){_4f9[idx]=item;if(--_4fa==0){_4f4(_4f9);}},onError:_4f5});}});}},isItem:function(_4fb){return this.store.isItem(_4fb);},fetchItemByIdentity:function(_4fc){this.store.fetchItemByIdentity(_4fc);},getIdentity:function(item){return this.store.getIdentity(item);},getLabel:function(item){if(this.labelAttr){return this.store.getValue(item,this.labelAttr);}else{return this.store.getLabel(item);}},newItem:function(args,_4fd,_4fe){var _4ff={parent:_4fd,attribute:this.childrenAttrs[0],insertIndex:_4fe};if(this.newItemIdAttr&&args[this.newItemIdAttr]){this.fetchItemByIdentity({identity:args[this.newItemIdAttr],scope:this,onItem:function(item){if(item){this.pasteItem(item,null,_4fd,true,_4fe);}else{this.store.newItem(args,_4ff);}}});}else{this.store.newItem(args,_4ff);}},pasteItem:function(_500,_501,_502,_503,_504){var _505=this.store,_506=this.childrenAttrs[0];if(_501){dojo.forEach(this.childrenAttrs,function(attr){if(_505.containsValue(_501,attr,_500)){if(!_503){var _507=dojo.filter(_505.getValues(_501,attr),function(x){return x!=_500;});_505.setValues(_501,attr,_507);}_506=attr;}});}if(_502){if(typeof _504=="number"){var _508=_505.getValues(_502,_506).slice();_508.splice(_504,0,_500);_505.setValues(_502,_506,_508);}else{_505.setValues(_502,_506,_505.getValues(_502,_506).concat(_500));}}},onChange:function(item){},onChildrenChange:function(_509,_50a){},onDelete:function(_50b,_50c){},onNewItem:function(item,_50d){if(!_50d){return;}this.getChildren(_50d.item,dojo.hitch(this,function(_50e){this.onChildrenChange(_50d.item,_50e);}));},onDeleteItem:function(item){this.onDelete(item);},onSetItem:function(item,_50f,_510,_511){if(dojo.indexOf(this.childrenAttrs,_50f)!=-1){this.getChildren(item,dojo.hitch(this,function(_512){this.onChildrenChange(item,_512);}));}else{this.onChange(item);}}});}if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){dojo._hasResource["dijit.tree.ForestStoreModel"]=true;dojo.provide("dijit.tree.ForestStoreModel");dojo.declare("dijit.tree.ForestStoreModel",dijit.tree.TreeStoreModel,{rootId:"$root$",rootLabel:"ROOT",query:null,constructor:function(_513){this.root={store:this,root:true,id:_513.rootId,label:_513.rootLabel,children:_513.rootChildren};},mayHaveChildren:function(item){return item===this.root||this.inherited(arguments);},getChildren:function(_514,_515,_516){if(_514===this.root){if(this.root.children){_515(this.root.children);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_517){this.root.children=_517;_515(_517);}),onError:_516});}}else{this.inherited(arguments);}},isItem:function(_518){return (_518===this.root)?true:this.inherited(arguments);},fetchItemByIdentity:function(_519){if(_519.identity==this.root.id){var _51a=_519.scope?_519.scope:dojo.global;if(_519.onItem){_519.onItem.call(_51a,this.root);}}else{this.inherited(arguments);}},getIdentity:function(item){return (item===this.root)?this.root.id:this.inherited(arguments);},getLabel:function(item){return (item===this.root)?this.root.label:this.inherited(arguments);},newItem:function(args,_51b,_51c){if(_51b===this.root){this.onNewRootItem(args);return this.store.newItem(args);}else{return this.inherited(arguments);}},onNewRootItem:function(args){},pasteItem:function(_51d,_51e,_51f,_520,_521){if(_51e===this.root){if(!_520){this.onLeaveRoot(_51d);}}dijit.tree.TreeStoreModel.prototype.pasteItem.call(this,_51d,_51e===this.root?null:_51e,_51f===this.root?null:_51f,_520,_521);if(_51f===this.root){this.onAddToRoot(_51d);}},onAddToRoot:function(item){console.log(this,": item ",item," added to root");},onLeaveRoot:function(item){console.log(this,": item ",item," removed from root");},_requeryTop:function(){var _522=this.root.children||[];this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_523){this.root.children=_523;if(_522.length!=_523.length||dojo.some(_522,function(item,idx){return _523[idx]!=item;})){this.onChildrenChange(this.root,_523);}})});},onNewItem:function(item,_524){this._requeryTop();this.inherited(arguments);},onDeleteItem:function(item){if(dojo.indexOf(this.root.children,item)!=-1){this._requeryTop();}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.Tree"]){dojo._hasResource["dijit.Tree"]=true;dojo.provide("dijit.Tree");dojo.declare("dijit._TreeNode",[dijit._Widget,dijit._Templated,dijit._Container,dijit._Contained,dijit._CssStateMixin],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:dojo.cache("dijit","templates/TreeNode.html","<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),baseClass:"dijitTreeNode",cssStateNodes:{rowNode:"dijitTreeRow",labelNode:"dijitTreeLabel"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"labelNode",type:"innerText"},tooltip:{node:"rowNode",type:"attribute",attribute:"title"}}),postCreate:function(){this.inherited(arguments);this._setExpando();this._updateItemClasses(this.item);if(this.isExpandable){dijit.setWaiState(this.labelNode,"expanded",this.isExpanded);}},_setIndentAttr:function(_525){this.indent=_525;var _526=(Math.max(_525,0)*this.tree._nodePixelIndent)+"px";dojo.style(this.domNode,"backgroundPosition",_526+" 0px");dojo.style(this.rowNode,this.isLeftToRight()?"paddingLeft":"paddingRight",_526);dojo.forEach(this.getChildren(),function(_527){_527.set("indent",_525+1);});},markProcessing:function(){this.state="LOADING";this._setExpando(true);},unmarkProcessing:function(){this._setExpando(false);},_updateItemClasses:function(item){var tree=this.tree,_528=tree.model;if(tree._v10Compat&&item===_528.root){item=null;}this._applyClassAndStyle(item,"icon","Icon");this._applyClassAndStyle(item,"label","Label");this._applyClassAndStyle(item,"row","Row");},_applyClassAndStyle:function(item,_529,_52a){var _52b="_"+_529+"Class";var _52c=_529+"Node";if(this[_52b]){dojo.removeClass(this[_52c],this[_52b]);}this[_52b]=this.tree["get"+_52a+"Class"](item,this.isExpanded);if(this[_52b]){dojo.addClass(this[_52c],this[_52b]);}dojo.style(this[_52c],this.tree["get"+_52a+"Style"](item,this.isExpanded)||{});},_updateLayout:function(){var _52d=this.getParent();if(!_52d||_52d.rowNode.style.display=="none"){dojo.addClass(this.domNode,"dijitTreeIsRoot");}else{dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling());}},_setExpando:function(_52e){var _52f=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"],_530=["*","-","+","*"],idx=_52e?0:(this.isExpandable?(this.isExpanded?1:2):3);dojo.removeClass(this.expandoNode,_52f);dojo.addClass(this.expandoNode,_52f[idx]);this.expandoNodeText.innerHTML=_530[idx];},expand:function(){if(this._expandDeferred){return this._expandDeferred;}this._wipeOut&&this._wipeOut.stop();this.isExpanded=true;dijit.setWaiState(this.labelNode,"expanded","true");dijit.setWaiRole(this.containerNode,"group");dojo.addClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","true");}var def,_531=dojo.fx.wipeIn({node:this.containerNode,duration:dijit.defaultDuration,onEnd:function(){def.callback(true);}});def=(this._expandDeferred=new dojo.Deferred(function(){_531.stop();}));_531.play();return def;},collapse:function(){if(!this.isExpanded){return;}if(this._expandDeferred){this._expandDeferred.cancel();delete this._expandDeferred;}this.isExpanded=false;dijit.setWaiState(this.labelNode,"expanded","false");if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","false");}dojo.removeClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(!this._wipeOut){this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:dijit.defaultDuration});}this._wipeOut.play();},indent:0,setChildItems:function(_532){var tree=this.tree,_533=tree.model,defs=[];dojo.forEach(this.getChildren(),function(_534){dijit._Container.prototype.removeChild.call(this,_534);},this);this.state="LOADED";if(_532&&_532.length>0){this.isExpandable=true;dojo.forEach(_532,function(item){var id=_533.getIdentity(item),_535=tree._itemNodesMap[id],node;if(_535){for(var i=0;i<_535.length;i++){if(_535[i]&&!_535[i].getParent()){node=_535[i];node.set("indent",this.indent+1);break;}}}if(!node){node=this.tree._createTreeNode({item:item,tree:tree,isExpandable:_533.mayHaveChildren(item),label:tree.getLabel(item),tooltip:tree.getTooltip(item),dir:tree.dir,lang:tree.lang,indent:this.indent+1});if(_535){_535.push(node);}else{tree._itemNodesMap[id]=[node];}}this.addChild(node);if(this.tree.autoExpand||this.tree._state(item)){defs.push(tree._expandNode(node));}},this);dojo.forEach(this.getChildren(),function(_536,idx){_536._updateLayout();});}else{this.isExpandable=false;}if(this._setExpando){this._setExpando(false);}this._updateItemClasses(this.item);if(this==tree.rootNode){var fc=this.tree.showRoot?this:this.getChildren()[0];if(fc){fc.setFocusable(true);tree.lastFocused=fc;}else{tree.domNode.setAttribute("tabIndex","0");}}return new dojo.DeferredList(defs);},removeChild:function(node){this.inherited(arguments);var _537=this.getChildren();if(_537.length==0){this.isExpandable=false;this.collapse();}dojo.forEach(_537,function(_538){_538._updateLayout();});},makeExpandable:function(){this.isExpandable=true;this._setExpando(false);},_onLabelFocus:function(evt){this.tree._onNodeFocus(this);},setSelected:function(_539){dijit.setWaiState(this.labelNode,"selected",_539);dojo.toggleClass(this.rowNode,"dijitTreeRowSelected",_539);},setFocusable:function(_53a){this.labelNode.setAttribute("tabIndex",_53a?"0":"-1");},_onClick:function(evt){this.tree._onClick(this,evt);},_onDblClick:function(evt){this.tree._onDblClick(this,evt);},_onMouseEnter:function(evt){this.tree._onNodeMouseEnter(this,evt);},_onMouseLeave:function(evt){this.tree._onNodeMouseLeave(this,evt);}});dojo.declare("dijit.Tree",[dijit._Widget,dijit._Templated],{store:null,model:null,query:null,label:"",showRoot:true,childrenAttr:["children"],path:[],selectedItem:null,openOnClick:false,openOnDblClick:false,templateString:dojo.cache("dijit","templates/Tree.html","<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),persist:true,autoExpand:false,dndController:null,dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance","dragThreshold","betweenThreshold"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,dragThreshold:5,betweenThreshold:0,_nodePixelIndent:19,_publish:function(_53b,_53c){dojo.publish(this.id,[dojo.mixin({tree:this,event:_53b},_53c||{})]);},postMixInProperties:function(){this.tree=this;if(this.autoExpand){this.persist=false;}this._itemNodesMap={};if(!this.cookieName){this.cookieName=this.id+"SaveStateCookie";}this._loadDeferred=new dojo.Deferred();this.inherited(arguments);},postCreate:function(){this._initState();if(!this.model){this._store2model();}this.connect(this.model,"onChange","_onItemChange");this.connect(this.model,"onChildrenChange","_onItemChildrenChange");this.connect(this.model,"onDelete","_onItemDelete");this._load();this.inherited(arguments);if(this.dndController){if(dojo.isString(this.dndController)){this.dndController=dojo.getObject(this.dndController);}var _53d={};for(var i=0;i<this.dndParams.length;i++){if(this[this.dndParams[i]]){_53d[this.dndParams[i]]=this[this.dndParams[i]];}}this.dndController=new this.dndController(this,_53d);}},_store2model:function(){this._v10Compat=true;dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");var _53e={id:this.id+"_ForestStoreModel",store:this.store,query:this.query,childrenAttrs:this.childrenAttr};if(this.params.mayHaveChildren){_53e.mayHaveChildren=dojo.hitch(this,"mayHaveChildren");}if(this.params.getItemChildren){_53e.getChildren=dojo.hitch(this,function(item,_53f,_540){this.getItemChildren((this._v10Compat&&item===this.model.root)?null:item,_53f,_540);});}this.model=new dijit.tree.ForestStoreModel(_53e);this.showRoot=Boolean(this.label);},onLoad:function(){},_load:function(){this.model.getRoot(dojo.hitch(this,function(item){var rn=(this.rootNode=this.tree._createTreeNode({item:item,tree:this,isExpandable:true,label:this.label||this.getLabel(item),indent:this.showRoot?0:-1}));if(!this.showRoot){rn.rowNode.style.display="none";}this.domNode.appendChild(rn.domNode);var _541=this.model.getIdentity(item);if(this._itemNodesMap[_541]){this._itemNodesMap[_541].push(rn);}else{this._itemNodesMap[_541]=[rn];}rn._updateLayout();this._expandNode(rn).addCallback(dojo.hitch(this,function(){this._loadDeferred.callback(true);this.onLoad();}));}),function(err){console.error(this,": error loading root: ",err);});},getNodesByItem:function(item){if(!item){return [];}var _542=dojo.isString(item)?item:this.model.getIdentity(item);return [].concat(this._itemNodesMap[_542]);},_setSelectedItemAttr:function(item){var _543=this.get("selectedItem");var _544=(!item||dojo.isString(item))?item:this.model.getIdentity(item);if(_544==_543?this.model.getIdentity(_543):null){return;}var _545=this._itemNodesMap[_544];this._selectNode((_545&&_545[0])||null);},_getSelectedItemAttr:function(){return this.selectedNode&&this.selectedNode.item;},_setPathAttr:function(path){var d=new dojo.Deferred();this._selectNode(null);if(!path||!path.length){d.resolve(true);return d;}this._loadDeferred.addCallback(dojo.hitch(this,function(){if(!this.rootNode){d.reject(new Error("!this.rootNode"));return;}if(path[0]!==this.rootNode.item&&(dojo.isString(path[0])&&path[0]!=this.model.getIdentity(this.rootNode.item))){d.reject(new Error(this.id+":path[0] doesn't match this.rootNode.item.  Maybe you are using the wrong tree."));return;}path.shift();var node=this.rootNode;function _546(){var item=path.shift(),_547=dojo.isString(item)?item:this.model.getIdentity(item);dojo.some(this._itemNodesMap[_547],function(n){if(n.getParent()==node){node=n;return true;}return false;});if(path.length){this._expandNode(node).addCallback(dojo.hitch(this,_546));}else{this._selectNode(node);d.resolve(true);}};this._expandNode(node).addCallback(dojo.hitch(this,_546));}));return d;},_getPathAttr:function(){if(!this.selectedNode){return;}var res=[];var _548=this.selectedNode;while(_548&&_548!==this.rootNode){res.unshift(_548.item);_548=_548.getParent();}res.unshift(this.rootNode.item);return res;},mayHaveChildren:function(item){},getItemChildren:function(_549,_54a){},getLabel:function(item){return this.model.getLabel(item);},getIconClass:function(item,_54b){return (!item||this.model.mayHaveChildren(item))?(_54b?"dijitFolderOpened":"dijitFolderClosed"):"dijitLeaf";},getLabelClass:function(item,_54c){},getRowClass:function(item,_54d){},getIconStyle:function(item,_54e){},getLabelStyle:function(item,_54f){},getRowStyle:function(item,_550){},getTooltip:function(item){return "";},_onKeyPress:function(e){if(e.altKey){return;}var dk=dojo.keys;var _551=dijit.getEnclosingWidget(e.target);if(!_551){return;}var key=e.charOrCode;if(typeof key=="string"){if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){this._onLetterKeyNav({node:_551,key:key.toLowerCase()});dojo.stopEvent(e);}}else{if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}var map=this._keyHandlerMap;if(!map){map={};map[dk.ENTER]="_onEnterKey";map[this.isLeftToRight()?dk.LEFT_ARROW:dk.RIGHT_ARROW]="_onLeftArrow";map[this.isLeftToRight()?dk.RIGHT_ARROW:dk.LEFT_ARROW]="_onRightArrow";map[dk.UP_ARROW]="_onUpArrow";map[dk.DOWN_ARROW]="_onDownArrow";map[dk.HOME]="_onHomeKey";map[dk.END]="_onEndKey";this._keyHandlerMap=map;}if(this._keyHandlerMap[key]){this[this._keyHandlerMap[key]]({node:_551,item:_551.item,evt:e});dojo.stopEvent(e);}}},_onEnterKey:function(_552,evt){this._publish("execute",{item:_552.item,node:_552.node});this._selectNode(_552.node);this.onClick(_552.item,_552.node,evt);},_onDownArrow:function(_553){var node=this._getNextNode(_553.node);if(node&&node.isTreeNode){this.focusNode(node);}},_onUpArrow:function(_554){var node=_554.node;var _555=node.getPreviousSibling();if(_555){node=_555;while(node.isExpandable&&node.isExpanded&&node.hasChildren()){var _556=node.getChildren();node=_556[_556.length-1];}}else{var _557=node.getParent();if(!(!this.showRoot&&_557===this.rootNode)){node=_557;}}if(node&&node.isTreeNode){this.focusNode(node);}},_onRightArrow:function(_558){var node=_558.node;if(node.isExpandable&&!node.isExpanded){this._expandNode(node);}else{if(node.hasChildren()){node=node.getChildren()[0];if(node&&node.isTreeNode){this.focusNode(node);}}}},_onLeftArrow:function(_559){var node=_559.node;if(node.isExpandable&&node.isExpanded){this._collapseNode(node);}else{var _55a=node.getParent();if(_55a&&_55a.isTreeNode&&!(!this.showRoot&&_55a===this.rootNode)){this.focusNode(_55a);}}},_onHomeKey:function(){var node=this._getRootOrFirstNode();if(node){this.focusNode(node);}},_onEndKey:function(_55b){var node=this.rootNode;while(node.isExpanded){var c=node.getChildren();node=c[c.length-1];}if(node&&node.isTreeNode){this.focusNode(node);}},multiCharSearchDuration:250,_onLetterKeyNav:function(_55c){var cs=this._curSearch;if(cs){cs.pattern=cs.pattern+_55c.key;clearTimeout(cs.timer);}else{cs=this._curSearch={pattern:_55c.key,startNode:_55c.node};}var self=this;cs.timer=setTimeout(function(){delete self._curSearch;},this.multiCharSearchDuration);var node=cs.startNode;do{node=this._getNextNode(node);if(!node){node=this._getRootOrFirstNode();}}while(node!==cs.startNode&&(node.label.toLowerCase().substr(0,cs.pattern.length)!=cs.pattern));if(node&&node.isTreeNode){if(node!==cs.startNode){this.focusNode(node);}}},_onClick:function(_55d,e){var _55e=e.target,_55f=(_55e==_55d.expandoNode||_55e==_55d.expandoNodeText);if((this.openOnClick&&_55d.isExpandable)||_55f){if(_55d.isExpandable){this._onExpandoClick({node:_55d});}}else{this._publish("execute",{item:_55d.item,node:_55d,evt:e});this.onClick(_55d.item,_55d,e);this.focusNode(_55d);}if(!_55f){this._selectNode(_55d);}dojo.stopEvent(e);},_onDblClick:function(_560,e){var _561=e.target,_562=(_561==_560.expandoNode||_561==_560.expandoNodeText);if((this.openOnDblClick&&_560.isExpandable)||_562){if(_560.isExpandable){this._onExpandoClick({node:_560});}}else{this._publish("execute",{item:_560.item,node:_560,evt:e});this.onDblClick(_560.item,_560,e);this.focusNode(_560);}if(!_562){this._selectNode(_560);}dojo.stopEvent(e);},_onExpandoClick:function(_563){var node=_563.node;this.focusNode(node);if(node.isExpanded){this._collapseNode(node);}else{this._expandNode(node);}},onClick:function(item,node,evt){},onDblClick:function(item,node,evt){},onOpen:function(item,node){},onClose:function(item,node){},_getNextNode:function(node){if(node.isExpandable&&node.isExpanded&&node.hasChildren()){return node.getChildren()[0];}else{while(node&&node.isTreeNode){var _564=node.getNextSibling();if(_564){return _564;}node=node.getParent();}return null;}},_getRootOrFirstNode:function(){return this.showRoot?this.rootNode:this.rootNode.getChildren()[0];},_collapseNode:function(node){if(node._expandNodeDeferred){delete node._expandNodeDeferred;}if(node.isExpandable){if(node.state=="LOADING"){return;}node.collapse();this.onClose(node.item,node);if(node.item){this._state(node.item,false);this._saveState();}}},_expandNode:function(node,_565){if(node._expandNodeDeferred&&!_565){return node._expandNodeDeferred;}var _566=this.model,item=node.item,_567=this;switch(node.state){case "UNCHECKED":node.markProcessing();var def=(node._expandNodeDeferred=new dojo.Deferred());_566.getChildren(item,function(_568){node.unmarkProcessing();var scid=node.setChildItems(_568);var ed=_567._expandNode(node,true);scid.addCallback(function(){ed.addCallback(function(){def.callback();});});},function(err){console.error(_567,": error loading root children: ",err);});break;default:def=(node._expandNodeDeferred=node.expand());this.onOpen(node.item,node);if(item){this._state(item,true);this._saveState();}}return def;},focusNode:function(node){dijit.focus(node.labelNode);},_selectNode:function(node){if(this.selectedNode&&!this.selectedNode._destroyed){this.selectedNode.setSelected(false);}if(node){node.setSelected(true);}this.selectedNode=node;},_onNodeFocus:function(node){if(node&&node!=this.lastFocused){if(this.lastFocused&&!this.lastFocused._destroyed){this.lastFocused.setFocusable(false);}node.setFocusable(true);this.lastFocused=node;}},_onNodeMouseEnter:function(node){},_onNodeMouseLeave:function(node){},_onItemChange:function(item){var _569=this.model,_56a=_569.getIdentity(item),_56b=this._itemNodesMap[_56a];if(_56b){var _56c=this.getLabel(item),_56d=this.getTooltip(item);dojo.forEach(_56b,function(node){node.set({item:item,label:_56c,tooltip:_56d});node._updateItemClasses(item);});}},_onItemChildrenChange:function(_56e,_56f){var _570=this.model,_571=_570.getIdentity(_56e),_572=this._itemNodesMap[_571];if(_572){dojo.forEach(_572,function(_573){_573.setChildItems(_56f);});}},_onItemDelete:function(item){var _574=this.model,_575=_574.getIdentity(item),_576=this._itemNodesMap[_575];if(_576){dojo.forEach(_576,function(node){var _577=node.getParent();if(_577){_577.removeChild(node);}node.destroyRecursive();});delete this._itemNodesMap[_575];}},_initState:function(){if(this.persist){var _578=dojo.cookie(this.cookieName);this._openedItemIds={};if(_578){dojo.forEach(_578.split(","),function(item){this._openedItemIds[item]=true;},this);}}},_state:function(item,_579){if(!this.persist){return false;}var id=this.model.getIdentity(item);if(arguments.length===1){return this._openedItemIds[id];}if(_579){this._openedItemIds[id]=true;}else{delete this._openedItemIds[id];}},_saveState:function(){if(!this.persist){return;}var ary=[];for(var id in this._openedItemIds){ary.push(id);}dojo.cookie(this.cookieName,ary.join(","),{expires:365});},destroy:function(){if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}if(this.rootNode){this.rootNode.destroyRecursive();}if(this.dndController&&!dojo.isString(this.dndController)){this.dndController.destroy();}this.rootNode=null;this.inherited(arguments);},destroyRecursive:function(){this.destroy();},resize:function(_57a){if(_57a){dojo.marginBox(this.domNode,_57a);dojo.style(this.domNode,"overflow","auto");}this._nodePixelIndent=dojo.marginBox(this.tree.indentDetector).w;if(this.tree.rootNode){this.tree.rootNode.set("indent",this.showRoot?0:-1);}},_createTreeNode:function(args){return new dijit._TreeNode(args);}});}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,_57b){this.node=dojo.byId(node);if(!_57b){_57b={};}this.creator=_57b.creator||null;this.skipForm=_57b.skipForm;this.parent=_57b.dropParent&&dojo.byId(_57b.dropParent);this.map={};this.current=null;this.containerState="";dojo.addClass(this.node,"dojoDndContainer");if(!(_57b&&_57b._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,_57c,_57d){if(!this.parent.firstChild){_57d=null;}else{if(_57c){if(!_57d){_57d=this.parent.firstChild;}}else{if(_57d){_57d=_57d.nextSibling;}}}if(_57d){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,_57d);}}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(_57e,node){_57e._skipStartup=true;return new dojo.dnd.Container(node,_57e);},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,_57f){var _580="dojoDnd"+type;var _581=type.toLowerCase()+"State";dojo.removeClass(this.node,_580+this[_581]);dojo.addClass(this.node,_580+_57f);this[_581]=_57f;},_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 _582=node.parentNode;_582;node=_582,_582=node.parentNode){if(_582==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 _583=item&&dojo.isObject(item),data,type,n;if(_583&&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=(_583&&item.data)?item.data:item;type=(_583&&item.type)?item.type:["text"];n=(hint=="avatar"?dojo.dnd._createSpan:c)(String(data));}if(!n.id){n.id=dojo.dnd.getUniqueId();}return {node:n,data:data,type:type};};};}if(!dojo._hasResource["dijit.tree._dndContainer"]){dojo._hasResource["dijit.tree._dndContainer"]=true;dojo.provide("dijit.tree._dndContainer");dojo.declare("dijit.tree._dndContainer",null,{constructor:function(tree,_584){this.tree=tree;this.node=tree.domNode;dojo.mixin(this,_584);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(key){var node=this.selection[key],ret={data:dijit.getEnclosingWidget(node),type:["treeNode"]};return ret;},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.node=this.parent=null;},onMouseOver:function(_585,evt){this.current=_585.rowNode;this.currentWidget=_585;},onMouseOut:function(_586,evt){this.current=null;this.currentWidget=null;},_changeState:function(type,_587){var _588="dojoDnd"+type;var _589=type.toLowerCase()+"State";dojo.removeClass(this.node,_588+this[_589]);dojo.addClass(this.node,_588+_587);this[_589]=_587;},_addItemClass:function(node,type){dojo.addClass(node,"dojoDndItem"+type);},_removeItemClass:function(node,type){dojo.removeClass(node,"dojoDndItem"+type);},onOverEvent:function(){this._changeState("Container","Over");},onOutEvent:function(){this._changeState("Container","");}});}if(!dojo._hasResource["dijit.tree._dndSelector"]){dojo._hasResource["dijit.tree._dndSelector"]=true;dojo.provide("dijit.tree._dndSelector");dojo.declare("dijit.tree._dndSelector",dijit.tree._dndContainer,{constructor:function(tree,_58a){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 _58b=dijit.getEnclosingWidget(this.current),id=_58b.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 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;},forInSelectedItems:function(f,o){o=o||dojo.global;for(var id in this.selection){console.log("selected item id: "+id);f.call(o,this.getItem(id),id,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(_58c){this.manager=_58c;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"}}),_58d=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:_58d.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(_58d.creator){node=_58d._normalizedCreator(_58d.getItem(this.manager.nodes[i].id).data,"avatar").node;}else{node=this.manager.nodes[i].cloneNode(true);if(node.tagName.toLowerCase()=="tr"){var _58e=dojo.create("table"),_58f=dojo.create("tbody",null,_58e);_58f.appendChild(node);node=_58e;}}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(_590){if(this.avatar){this.target=(_590&&_590.targetState!="Disabled")?_590:null;this.canDropFlag=Boolean(this.target);this.avatar.update();}dojo.publish("/dnd/source/over",[_590]);},outSource:function(_591){if(this.avatar){if(this.target==_591){this.target=null;this.canDropFlag=false;this.avatar.update();dojo.publish("/dnd/source/over",[null]);}}else{dojo.publish("/dnd/source/over",[null]);}},startDrag:function(_592,_593,copy){this.source=_592;this.nodes=_593;this.copy=Boolean(copy);this.avatar=this.makeAvatar();dojo.body().appendChild(this.avatar.node);dojo.publish("/dnd/start",[_592,_593,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 _594=Boolean(this.target&&flag);if(this.canDropFlag!=_594){this.canDropFlag=_594;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))),_595=[this.source,this.nodes,copy,this.target,e];dojo.publish("/dnd/drop/before",_595);dojo.publish("/dnd/drop",_595);}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["dijit.tree.dndSource"]){dojo._hasResource["dijit.tree.dndSource"]=true;dojo.provide("dijit.tree.dndSource");dojo.declare("dijit.tree.dndSource",dijit.tree._dndSelector,{isSource:true,accept:["text","treeNode"],copyOnly:false,dragThreshold:5,betweenThreshold:0,constructor:function(tree,_596){if(!_596){_596={};}dojo.mixin(this,_596);this.isSource=typeof _596.isSource=="undefined"?true:_596.isSource;var type=_596.accept instanceof Array?_596.accept:["text","treeNode"];this.accept=null;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.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(_597,_598){return true;},copyState:function(_599){return this.copyOnly||_599;},destroy:function(){this.inherited("destroy",arguments);dojo.forEach(this.topics,dojo.unsubscribe);this.targetAnchor=null;},_onDragMouse:function(e){var m=dojo.dnd.manager(),_59a=this.targetAnchor,_59b=this.current,_59c=this.currentWidget,_59d=this.dropPosition;var _59e="Over";if(_59b&&this.betweenThreshold>0){if(!this.targetBox||_59a!=_59b){this.targetBox=dojo.position(_59b,true);}if((e.pageY-this.targetBox.y)<=this.betweenThreshold){_59e="Before";}else{if((e.pageY-this.targetBox.y)>=(this.targetBox.h-this.betweenThreshold)){_59e="After";}}}if(_59b!=_59a||_59e!=_59d){if(_59a){this._removeItemClass(_59a,_59d);}if(_59b){this._addItemClass(_59b,_59e);}if(!_59b){m.canDrop(false);}else{if(_59c==this.tree.rootNode&&_59e!="Over"){m.canDrop(false);}else{if(m.source==this&&(_59b.id in this.selection)){m.canDrop(false);}else{if(this.checkItemAcceptance(_59b,m.source,_59e.toLowerCase())&&!this._isParentChildDrop(m.source,_59b)){m.canDrop(true);}else{m.canDrop(false);}}}}this.targetAnchor=_59b;this.dropPosition=_59e;}},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 _59f=[];for(var i in n){_59f.push(n[i]);}if(_59f.length){m.startDrag(this,_59f,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(_5a0,_5a1,_5a2){return true;},onDndSourceOver:function(_5a3){if(this!=_5a3){this.mouseDown=false;this._unmarkTargetAnchor();}else{if(this.isDragging){var m=dojo.dnd.manager();m.canDrop(false);}}},onDndStart:function(_5a4,_5a5,copy){if(this.isSource){this._changeState("Source",this==_5a4?(copy?"Copied":"Moved"):"");}var _5a6=this.checkAcceptance(_5a4,_5a5);this._changeState("Target",_5a6?"":"Disabled");if(this==_5a4){dojo.dnd.manager().overSource(this);}this.isDragging=true;},itemCreator:function(_5a7,_5a8,_5a9){return dojo.map(_5a7,function(node){return {"id":node.id,"name":node.textContent||node.innerText||""};});},onDndDrop:function(_5aa,_5ab,copy){if(this.containerState=="Over"){var tree=this.tree,_5ac=tree.model,_5ad=this.targetAnchor,_5ae=false;this.isDragging=false;var _5af=dijit.getEnclosingWidget(_5ad);var _5b0;var _5b1;_5b0=(_5af&&_5af.item)||tree.item;if(this.dropPosition=="Before"||this.dropPosition=="After"){_5b0=(_5af.getParent()&&_5af.getParent().item)||tree.item;_5b1=_5af.getIndexInParent();if(this.dropPosition=="After"){_5b1=_5af.getIndexInParent()+1;}}else{_5b0=(_5af&&_5af.item)||tree.item;}var _5b2;dojo.forEach(_5ab,function(node,idx){var _5b3=_5aa.getItem(node.id);if(dojo.indexOf(_5b3.type,"treeNode")!=-1){var _5b4=_5b3.data,_5b5=_5b4.item,_5b6=_5b4.getParent().item;}if(_5aa==this){if(typeof _5b1=="number"){if(_5b0==_5b6&&_5b4.getIndexInParent()<_5b1){_5b1-=1;}}_5ac.pasteItem(_5b5,_5b6,_5b0,copy,_5b1);}else{if(_5ac.isItem(_5b5)){_5ac.pasteItem(_5b5,_5b6,_5b0,copy,_5b1);}else{if(!_5b2){_5b2=this.itemCreator(_5ab,_5ad,_5aa);}_5ac.newItem(_5b2[idx],_5b0,_5b1);}}},this);this.tree._expandNode(_5af);}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(_5b7,_5b8){if(!_5b7.tree||_5b7.tree!=this.tree){return false;}var root=_5b7.tree.domNode;var ids={};for(var x in _5b7.selection){ids[_5b7.selection[x].parentNode.id]=true;}var node=_5b8.parentNode;while(node!=root&&(!node.id||!ids[node.id])){node=node.parentNode;}return node.id&&ids[node.id];},_unmarkTargetAnchor:function(){if(!this.targetAnchor){return;}this._removeItemClass(this.targetAnchor,this.dropPosition);this.targetAnchor=null;this.targetBox=null;this.dropPosition=null;},_markDndStatus:function(copy){this._changeState("Source",copy?"Copied":"Moved");}});}if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){dojo._hasResource["dojo.data.ItemFileReadStore"]=true;dojo.provide("dojo.data.ItemFileReadStore");dojo.declare("dojo.data.ItemFileReadStore",null,{constructor:function(_5b9){this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._jsonFileUrl=_5b9.url;this._ccUrl=_5b9.url;this.url=_5b9.url;this._jsonData=_5b9.data;this.data=null;this._datatypeMap=_5b9.typeMap||{};if(!this._datatypeMap["Date"]){this._datatypeMap["Date"]={type:Date,deserialize:function(_5ba){return dojo.date.stamp.fromISOString(_5ba);}};}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(_5b9.urlPreventCache!==undefined){this.urlPreventCache=_5b9.urlPreventCache?true:false;}if(_5b9.hierarchical!==undefined){this.hierarchical=_5b9.hierarchical?true:false;}if(_5b9.clearOnClose){this.clearOnClose=true;}if("failOk" in _5b9){this.failOk=_5b9.failOk?true:false;}},url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,failOk:false,hierarchical:true,_assertIsItem:function(item){if(!this.isItem(item)){throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");}},_assertIsAttribute:function(_5bb){if(typeof _5bb!=="string"){throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");}},getValue:function(item,_5bc,_5bd){var _5be=this.getValues(item,_5bc);return (_5be.length>0)?_5be[0]:_5bd;},getValues:function(item,_5bf){this._assertIsItem(item);this._assertIsAttribute(_5bf);return (item[_5bf]||[]).slice(0);},getAttributes:function(item){this._assertIsItem(item);var _5c0=[];for(var key in item){if((key!==this._storeRefPropName)&&(key!==this._itemNumPropName)&&(key!==this._rootItemPropName)&&(key!==this._reverseRefMap)){_5c0.push(key);}}return _5c0;},hasAttribute:function(item,_5c1){this._assertIsItem(item);this._assertIsAttribute(_5c1);return (_5c1 in item);},containsValue:function(item,_5c2,_5c3){var _5c4=undefined;if(typeof _5c3==="string"){_5c4=dojo.data.util.filter.patternToRegExp(_5c3,false);}return this._containsValue(item,_5c2,_5c3,_5c4);},_containsValue:function(item,_5c5,_5c6,_5c7){return dojo.some(this.getValues(item,_5c5),function(_5c8){if(_5c8!==null&&!dojo.isObject(_5c8)&&_5c7){if(_5c8.toString().match(_5c7)){return true;}}else{if(_5c6===_5c8){return true;}}});},isItem:function(_5c9){if(_5c9&&_5c9[this._storeRefPropName]===this){if(this._arrayOfAllItems[_5c9[this._itemNumPropName]]===_5c9){return true;}}return false;},isItemLoaded:function(_5ca){return this.isItem(_5ca);},loadItem:function(_5cb){this._assertIsItem(_5cb.item);},getFeatures:function(){return this._features;},getLabel:function(item){if(this._labelAttr&&this.isItem(item)){return this.getValue(item,this._labelAttr);}return undefined;},getLabelAttributes:function(item){if(this._labelAttr){return [this._labelAttr];}return null;},_fetchItems:function(_5cc,_5cd,_5ce){var self=this,_5cf=function(_5d0,_5d1){var _5d2=[],i,key;if(_5d0.query){var _5d3,_5d4=_5d0.queryOptions?_5d0.queryOptions.ignoreCase:false;var _5d5={};for(key in _5d0.query){_5d3=_5d0.query[key];if(typeof _5d3==="string"){_5d5[key]=dojo.data.util.filter.patternToRegExp(_5d3,_5d4);}else{if(_5d3 instanceof RegExp){_5d5[key]=_5d3;}}}for(i=0;i<_5d1.length;++i){var _5d6=true;var _5d7=_5d1[i];if(_5d7===null){_5d6=false;}else{for(key in _5d0.query){_5d3=_5d0.query[key];if(!self._containsValue(_5d7,key,_5d3,_5d5[key])){_5d6=false;}}}if(_5d6){_5d2.push(_5d7);}}_5cd(_5d2,_5d0);}else{for(i=0;i<_5d1.length;++i){var item=_5d1[i];if(item!==null){_5d2.push(item);}}_5cd(_5d2,_5d0);}};if(this._loadFinished){_5cf(_5cc,this._getItemsArray(_5cc.queryOptions));}else{if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","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:_5cc,filter:_5cf});}else{this._loadInProgress=true;var _5d8={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _5d9=dojo.xhrGet(_5d8);_5d9.addCallback(function(data){try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;_5cf(_5cc,self._getItemsArray(_5cc.queryOptions));self._handleQueuedFetches();}catch(e){self._loadFinished=true;self._loadInProgress=false;_5ce(e,_5cc);}});_5d9.addErrback(function(_5da){self._loadInProgress=false;_5ce(_5da,_5cc);});var _5db=null;if(_5cc.abort){_5db=_5cc.abort;}_5cc.abort=function(){var df=_5d9;if(df&&df.fired===-1){df.cancel();df=null;}if(_5db){_5db.call(_5cc);}};}}else{if(this._jsonData){try{this._loadFinished=true;this._getItemsFromLoadedData(this._jsonData);this._jsonData=null;_5cf(_5cc,this._getItemsArray(_5cc.queryOptions));}catch(e){_5ce(e,_5cc);}}else{_5ce(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_5cc);}}}},_handleQueuedFetches:function(){if(this._queuedFetches.length>0){for(var i=0;i<this._queuedFetches.length;i++){var _5dc=this._queuedFetches[i],_5dd=_5dc.args,_5de=_5dc.filter;if(_5de){_5de(_5dd,this._getItemsArray(_5dd.queryOptions));}else{this.fetchItemByIdentity(_5dd);}}this._queuedFetches=[];}},_getItemsArray:function(_5df){if(_5df&&_5df.deep){return this._arrayOfAllItems;}return this._arrayOfTopLevelItems;},close:function(_5e0){if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){console.debug("dojo.data.ItemFileReadStore: WARNING!  Data reload "+" information has not been provided."+"  Please set 'url' or 'data' to the appropriate value before"+" the next fetch");}this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._itemsByIdentity=null;this._loadInProgress=false;this._queuedFetches=[];}},_getItemsFromLoadedData:function(_5e1){var _5e2=false,self=this;function _5e3(_5e4){var _5e5=((_5e4!==null)&&(typeof _5e4==="object")&&(!dojo.isArray(_5e4)||_5e2)&&(!dojo.isFunction(_5e4))&&(_5e4.constructor==Object||dojo.isArray(_5e4))&&(typeof _5e4._reference==="undefined")&&(typeof _5e4._type==="undefined")&&(typeof _5e4._value==="undefined")&&self.hierarchical);return _5e5;};function _5e6(_5e7){self._arrayOfAllItems.push(_5e7);for(var _5e8 in _5e7){var _5e9=_5e7[_5e8];if(_5e9){if(dojo.isArray(_5e9)){var _5ea=_5e9;for(var k=0;k<_5ea.length;++k){var _5eb=_5ea[k];if(_5e3(_5eb)){_5e6(_5eb);}}}else{if(_5e3(_5e9)){_5e6(_5e9);}}}}};this._labelAttr=_5e1.label;var i,item;this._arrayOfAllItems=[];this._arrayOfTopLevelItems=_5e1.items;for(i=0;i<this._arrayOfTopLevelItems.length;++i){item=this._arrayOfTopLevelItems[i];if(dojo.isArray(item)){_5e2=true;}_5e6(item);item[this._rootItemPropName]=true;}var _5ec={},key;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){if(key!==this._rootItemPropName){var _5ed=item[key];if(_5ed!==null){if(!dojo.isArray(_5ed)){item[key]=[_5ed];}}else{item[key]=[null];}}_5ec[key]=key;}}while(_5ec[this._storeRefPropName]){this._storeRefPropName+="_";}while(_5ec[this._itemNumPropName]){this._itemNumPropName+="_";}while(_5ec[this._reverseRefMap]){this._reverseRefMap+="_";}var _5ee;var _5ef=_5e1.identifier;if(_5ef){this._itemsByIdentity={};this._features["dojo.data.api.Identity"]=_5ef;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];_5ee=item[_5ef];var _5f0=_5ee[0];if(!this._itemsByIdentity[_5f0]){this._itemsByIdentity[_5f0]=item;}else{if(this._jsonFileUrl){throw new Error("dojo.data.ItemFileReadStore:  The json data as specified by: ["+this._jsonFileUrl+"] is malformed.  Items within the list have identifier: ["+_5ef+"].  Value collided: ["+_5f0+"]");}else{if(this._jsonData){throw new Error("dojo.data.ItemFileReadStore:  The json data provided by the creation arguments is malformed.  Items within the list have identifier: ["+_5ef+"].  Value collided: ["+_5f0+"]");}}}}}else{this._features["dojo.data.api.Identity"]=Number;}for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];item[this._storeRefPropName]=this;item[this._itemNumPropName]=i;}for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){_5ee=item[key];for(var j=0;j<_5ee.length;++j){_5ed=_5ee[j];if(_5ed!==null&&typeof _5ed=="object"){if(("_type" in _5ed)&&("_value" in _5ed)){var type=_5ed._type;var _5f1=this._datatypeMap[type];if(!_5f1){throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+type+"'");}else{if(dojo.isFunction(_5f1)){_5ee[j]=new _5f1(_5ed._value);}else{if(dojo.isFunction(_5f1.deserialize)){_5ee[j]=_5f1.deserialize(_5ed._value);}else{throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");}}}}if(_5ed._reference){var _5f2=_5ed._reference;if(!dojo.isObject(_5f2)){_5ee[j]=this._getItemByIdentity(_5f2);}else{for(var k=0;k<this._arrayOfAllItems.length;++k){var _5f3=this._arrayOfAllItems[k],_5f4=true;for(var _5f5 in _5f2){if(_5f3[_5f5]!=_5f2[_5f5]){_5f4=false;}}if(_5f4){_5ee[j]=_5f3;}}}if(this.referenceIntegrity){var _5f6=_5ee[j];if(this.isItem(_5f6)){this._addReferenceToMap(_5f6,item,key);}}}else{if(this.isItem(_5ed)){if(this.referenceIntegrity){this._addReferenceToMap(_5ed,item,key);}}}}}}}},_addReferenceToMap:function(_5f7,_5f8,_5f9){},getIdentity:function(item){var _5fa=this._features["dojo.data.api.Identity"];if(_5fa===Number){return item[this._itemNumPropName];}else{var _5fb=item[_5fa];if(_5fb){return _5fb[0];}}return null;},fetchItemByIdentity:function(_5fc){var item,_5fd;if(!this._loadFinished){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","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:_5fc});}else{this._loadInProgress=true;var _5fe={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _5ff=dojo.xhrGet(_5fe);_5ff.addCallback(function(data){var _600=_5fc.scope?_5fc.scope:dojo.global;try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;item=self._getItemByIdentity(_5fc.identity);if(_5fc.onItem){_5fc.onItem.call(_600,item);}self._handleQueuedFetches();}catch(error){self._loadInProgress=false;if(_5fc.onError){_5fc.onError.call(_600,error);}}});_5ff.addErrback(function(_601){self._loadInProgress=false;if(_5fc.onError){var _602=_5fc.scope?_5fc.scope:dojo.global;_5fc.onError.call(_602,_601);}});}}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;item=self._getItemByIdentity(_5fc.identity);if(_5fc.onItem){_5fd=_5fc.scope?_5fc.scope:dojo.global;_5fc.onItem.call(_5fd,item);}}}}else{item=this._getItemByIdentity(_5fc.identity);if(_5fc.onItem){_5fd=_5fc.scope?_5fc.scope:dojo.global;_5fc.onItem.call(_5fd,item);}}},_getItemByIdentity:function(_603){var item=null;if(this._itemsByIdentity){item=this._itemsByIdentity[_603];}else{item=this._arrayOfAllItems[_603];}if(item===undefined){item=null;}return item;},getIdentityAttributes:function(item){var _604=this._features["dojo.data.api.Identity"];if(_604===Number){return null;}else{return [_604];}},_forceLoad:function(){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","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 _605={url:this._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk,sync:true};var _606=dojo.xhrGet(_605);_606.addCallback(function(data){try{if(self._loadInProgress!==true&&!self._loadFinished){self._getItemsFromLoadedData(data);self._loadFinished=true;}else{if(self._loadInProgress){throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress.");}}}catch(e){console.log(e);throw e;}});_606.addErrback(function(_607){throw _607;});}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;}}}});dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);}if(!dojo._hasResource["dojo.data.ItemFileWriteStore"]){dojo._hasResource["dojo.data.ItemFileWriteStore"]=true;dojo.provide("dojo.data.ItemFileWriteStore");dojo.declare("dojo.data.ItemFileWriteStore",dojo.data.ItemFileReadStore,{constructor:function(_608){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(obj){return dojo.date.stamp.toISOString(obj,{zulu:true});};}if(_608&&(_608.referenceIntegrity===false)){this.referenceIntegrity=false;}this._saveInProgress=false;},referenceIntegrity:true,_assert:function(_609){if(!_609){throw new Error("assertion failed in ItemFileWriteStore");}},_getIdentifierAttribute:function(){var _60a=this.getFeatures()["dojo.data.api.Identity"];return _60a;},newItem:function(_60b,_60c){this._assert(!this._saveInProgress);if(!this._loadFinished){this._forceLoad();}if(typeof _60b!="object"&&typeof _60b!="undefined"){throw new Error("newItem() was passed something other than an object");}var _60d=null;var _60e=this._getIdentifierAttribute();if(_60e===Number){_60d=this._arrayOfAllItems.length;}else{_60d=_60b[_60e];if(typeof _60d==="undefined"){throw new Error("newItem() was not passed an identity for the new item");}if(dojo.isArray(_60d)){throw new Error("newItem() was not passed an single-valued identity");}}if(this._itemsByIdentity){this._assert(typeof this._itemsByIdentity[_60d]==="undefined");}this._assert(typeof this._pending._newItems[_60d]==="undefined");this._assert(typeof this._pending._deletedItems[_60d]==="undefined");var _60f={};_60f[this._storeRefPropName]=this;_60f[this._itemNumPropName]=this._arrayOfAllItems.length;if(this._itemsByIdentity){this._itemsByIdentity[_60d]=_60f;_60f[_60e]=[_60d];}this._arrayOfAllItems.push(_60f);var _610=null;if(_60c&&_60c.parent&&_60c.attribute){_610={item:_60c.parent,attribute:_60c.attribute,oldValue:undefined};var _611=this.getValues(_60c.parent,_60c.attribute);if(_611&&_611.length>0){var _612=_611.slice(0,_611.length);if(_611.length===1){_610.oldValue=_611[0];}else{_610.oldValue=_611.slice(0,_611.length);}_612.push(_60f);this._setValueOrValues(_60c.parent,_60c.attribute,_612,false);_610.newValue=this.getValues(_60c.parent,_60c.attribute);}else{this._setValueOrValues(_60c.parent,_60c.attribute,_60f,false);_610.newValue=_60f;}}else{_60f[this._rootItemPropName]=true;this._arrayOfTopLevelItems.push(_60f);}this._pending._newItems[_60d]=_60f;for(var key in _60b){if(key===this._storeRefPropName||key===this._itemNumPropName){throw new Error("encountered bug in ItemFileWriteStore.newItem");}var _613=_60b[key];if(!dojo.isArray(_613)){_613=[_613];}_60f[key]=_613;if(this.referenceIntegrity){for(var i=0;i<_613.length;i++){var val=_613[i];if(this.isItem(val)){this._addReferenceToMap(val,_60f,key);}}}}this.onNew(_60f,_610);return _60f;},_removeArrayElement:function(_614,_615){var _616=dojo.indexOf(_614,_615);if(_616!=-1){_614.splice(_616,1);return true;}return false;},deleteItem:function(item){this._assert(!this._saveInProgress);this._assertIsItem(item);var _617=item[this._itemNumPropName];var _618=this.getIdentity(item);if(this.referenceIntegrity){var _619=this.getAttributes(item);if(item[this._reverseRefMap]){item["backup_"+this._reverseRefMap]=dojo.clone(item[this._reverseRefMap]);}dojo.forEach(_619,function(_61a){dojo.forEach(this.getValues(item,_61a),function(_61b){if(this.isItem(_61b)){if(!item["backupRefs_"+this._reverseRefMap]){item["backupRefs_"+this._reverseRefMap]=[];}item["backupRefs_"+this._reverseRefMap].push({id:this.getIdentity(_61b),attr:_61a});this._removeReferenceFromMap(_61b,item,_61a);}},this);},this);var _61c=item[this._reverseRefMap];if(_61c){for(var _61d in _61c){var _61e=null;if(this._itemsByIdentity){_61e=this._itemsByIdentity[_61d];}else{_61e=this._arrayOfAllItems[_61d];}if(_61e){for(var _61f in _61c[_61d]){var _620=this.getValues(_61e,_61f)||[];var _621=dojo.filter(_620,function(_622){return !(this.isItem(_622)&&this.getIdentity(_622)==_618);},this);this._removeReferenceFromMap(item,_61e,_61f);if(_621.length<_620.length){this._setValueOrValues(_61e,_61f,_621,true);}}}}}}this._arrayOfAllItems[_617]=null;item[this._storeRefPropName]=null;if(this._itemsByIdentity){delete this._itemsByIdentity[_618];}this._pending._deletedItems[_618]=item;if(item[this._rootItemPropName]){this._removeArrayElement(this._arrayOfTopLevelItems,item);}this.onDelete(item);return true;},setValue:function(item,_623,_624){return this._setValueOrValues(item,_623,_624,true);},setValues:function(item,_625,_626){return this._setValueOrValues(item,_625,_626,true);},unsetAttribute:function(item,_627){return this._setValueOrValues(item,_627,[],true);},_setValueOrValues:function(item,_628,_629,_62a){this._assert(!this._saveInProgress);this._assertIsItem(item);this._assert(dojo.isString(_628));this._assert(typeof _629!=="undefined");var _62b=this._getIdentifierAttribute();if(_628==_62b){throw new Error("ItemFileWriteStore does not have support for changing the value of an item's identifier.");}var _62c=this._getValueOrValues(item,_628);var _62d=this.getIdentity(item);if(!this._pending._modifiedItems[_62d]){var _62e={};for(var key in item){if((key===this._storeRefPropName)||(key===this._itemNumPropName)||(key===this._rootItemPropName)){_62e[key]=item[key];}else{if(key===this._reverseRefMap){_62e[key]=dojo.clone(item[key]);}else{_62e[key]=item[key].slice(0,item[key].length);}}}this._pending._modifiedItems[_62d]=_62e;}var _62f=false;if(dojo.isArray(_629)&&_629.length===0){_62f=delete item[_628];_629=undefined;if(this.referenceIntegrity&&_62c){var _630=_62c;if(!dojo.isArray(_630)){_630=[_630];}for(var i=0;i<_630.length;i++){var _631=_630[i];if(this.isItem(_631)){this._removeReferenceFromMap(_631,item,_628);}}}}else{var _632;if(dojo.isArray(_629)){var _633=_629;_632=_629.slice(0,_629.length);}else{_632=[_629];}if(this.referenceIntegrity){if(_62c){var _630=_62c;if(!dojo.isArray(_630)){_630=[_630];}var map={};dojo.forEach(_630,function(_634){if(this.isItem(_634)){var id=this.getIdentity(_634);map[id.toString()]=true;}},this);dojo.forEach(_632,function(_635){if(this.isItem(_635)){var id=this.getIdentity(_635);if(map[id.toString()]){delete map[id.toString()];}else{this._addReferenceToMap(_635,item,_628);}}},this);for(var rId in map){var _636;if(this._itemsByIdentity){_636=this._itemsByIdentity[rId];}else{_636=this._arrayOfAllItems[rId];}this._removeReferenceFromMap(_636,item,_628);}}else{for(var i=0;i<_632.length;i++){var _631=_632[i];if(this.isItem(_631)){this._addReferenceToMap(_631,item,_628);}}}}item[_628]=_632;_62f=true;}if(_62a){this.onSet(item,_628,_62c,_629);}return _62f;},_addReferenceToMap:function(_637,_638,_639){var _63a=this.getIdentity(_638);var _63b=_637[this._reverseRefMap];if(!_63b){_63b=_637[this._reverseRefMap]={};}var _63c=_63b[_63a];if(!_63c){_63c=_63b[_63a]={};}_63c[_639]=true;},_removeReferenceFromMap:function(_63d,_63e,_63f){var _640=this.getIdentity(_63e);var _641=_63d[this._reverseRefMap];var _642;if(_641){for(_642 in _641){if(_642==_640){delete _641[_642][_63f];if(this._isEmpty(_641[_642])){delete _641[_642];}}}if(this._isEmpty(_641)){delete _63d[this._reverseRefMap];}}},_dumpReferenceMap:function(){var i;for(i=0;i<this._arrayOfAllItems.length;i++){var item=this._arrayOfAllItems[i];if(item&&item[this._reverseRefMap]){console.log("Item: ["+this.getIdentity(item)+"] is referenced by: "+dojo.toJson(item[this._reverseRefMap]));}}},_getValueOrValues:function(item,_643){var _644=undefined;if(this.hasAttribute(item,_643)){var _645=this.getValues(item,_643);if(_645.length==1){_644=_645[0];}else{_644=_645;}}return _644;},_flatten:function(_646){if(this.isItem(_646)){var item=_646;var _647=this.getIdentity(item);var _648={_reference:_647};return _648;}else{if(typeof _646==="object"){for(var type in this._datatypeMap){var _649=this._datatypeMap[type];if(dojo.isObject(_649)&&!dojo.isFunction(_649)){if(_646 instanceof _649.type){if(!_649.serialize){throw new Error("ItemFileWriteStore:  No serializer defined for type mapping: ["+type+"]");}return {_type:type,_value:_649.serialize(_646)};}}else{if(_646 instanceof _649){return {_type:type,_value:_646.toString()};}}}}return _646;}},_getNewFileContentString:function(){var _64a={};var _64b=this._getIdentifierAttribute();if(_64b!==Number){_64a.identifier=_64b;}if(this._labelAttr){_64a.label=this._labelAttr;}_64a.items=[];for(var i=0;i<this._arrayOfAllItems.length;++i){var item=this._arrayOfAllItems[i];if(item!==null){var _64c={};for(var key in item){if(key!==this._storeRefPropName&&key!==this._itemNumPropName&&key!==this._reverseRefMap&&key!==this._rootItemPropName){var _64d=key;var _64e=this.getValues(item,_64d);if(_64e.length==1){_64c[_64d]=this._flatten(_64e[0]);}else{var _64f=[];for(var j=0;j<_64e.length;++j){_64f.push(this._flatten(_64e[j]));_64c[_64d]=_64f;}}}}_64a.items.push(_64c);}}var _650=true;return dojo.toJson(_64a,_650);},_isEmpty:function(_651){var _652=true;if(dojo.isObject(_651)){var i;for(i in _651){_652=false;break;}}else{if(dojo.isArray(_651)){if(_651.length>0){_652=false;}}}return _652;},save:function(_653){this._assert(!this._saveInProgress);this._saveInProgress=true;var self=this;var _654=function(){self._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};self._saveInProgress=false;if(_653&&_653.onComplete){var _655=_653.scope||dojo.global;_653.onComplete.call(_655);}};var _656=function(err){self._saveInProgress=false;if(_653&&_653.onError){var _657=_653.scope||dojo.global;_653.onError.call(_657,err);}};if(this._saveEverything){var _658=this._getNewFileContentString();this._saveEverything(_654,_656,_658);}if(this._saveCustom){this._saveCustom(_654,_656);}if(!this._saveEverything&&!this._saveCustom){_654();}},revert:function(){this._assert(!this._saveInProgress);var _659;for(_659 in this._pending._modifiedItems){var _65a=this._pending._modifiedItems[_659];var _65b=null;if(this._itemsByIdentity){_65b=this._itemsByIdentity[_659];}else{_65b=this._arrayOfAllItems[_659];}_65a[this._storeRefPropName]=this;for(key in _65b){delete _65b[key];}dojo.mixin(_65b,_65a);}var _65c;for(_659 in this._pending._deletedItems){_65c=this._pending._deletedItems[_659];_65c[this._storeRefPropName]=this;var _65d=_65c[this._itemNumPropName];if(_65c["backup_"+this._reverseRefMap]){_65c[this._reverseRefMap]=_65c["backup_"+this._reverseRefMap];delete _65c["backup_"+this._reverseRefMap];}this._arrayOfAllItems[_65d]=_65c;if(this._itemsByIdentity){this._itemsByIdentity[_659]=_65c;}if(_65c[this._rootItemPropName]){this._arrayOfTopLevelItems.push(_65c);}}for(_659 in this._pending._deletedItems){_65c=this._pending._deletedItems[_659];if(_65c["backupRefs_"+this._reverseRefMap]){dojo.forEach(_65c["backupRefs_"+this._reverseRefMap],function(_65e){var _65f;if(this._itemsByIdentity){_65f=this._itemsByIdentity[_65e.id];}else{_65f=this._arrayOfAllItems[_65e.id];}this._addReferenceToMap(_65f,_65c,_65e.attr);},this);delete _65c["backupRefs_"+this._reverseRefMap];}}for(_659 in this._pending._newItems){var _660=this._pending._newItems[_659];_660[this._storeRefPropName]=null;this._arrayOfAllItems[_660[this._itemNumPropName]]=null;if(_660[this._rootItemPropName]){this._removeArrayElement(this._arrayOfTopLevelItems,_660);}if(this._itemsByIdentity){delete this._itemsByIdentity[_659];}}this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};return true;},isDirty:function(item){if(item){var _661=this.getIdentity(item);return new Boolean(this._pending._newItems[_661]||this._pending._modifiedItems[_661]||this._pending._deletedItems[_661]).valueOf();}else{if(!this._isEmpty(this._pending._newItems)||!this._isEmpty(this._pending._modifiedItems)||!this._isEmpty(this._pending._deletedItems)){return true;}return false;}},onSet:function(item,_662,_663,_664){},onNew:function(_665,_666){},onDelete:function(_667){},close:function(_668){if(this.clearOnClose){if(!this.isDirty()){this.inherited(arguments);}else{throw new Error("dojo.data.ItemFileWriteStore: There are unsaved changes present in the store.  Please save or revert the changes before invoking close.");}}}});}dojo.i18n._preloadLocalizations("dojo.nls.tt-rss-layer",["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"]);
+dojo.provide("tt-rss-layer");if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.getObject("date.stamp",true,dojo);dojo.date.stamp.fromISOString=function(_1,_2){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 _3=dojo.date.stamp._isoRegExp.exec(_1),_4=null;if(_3){_3.shift();if(_3[1]){_3[1]--;}if(_3[6]){_3[6]*=1000;}if(_2){_2=new Date(_2);dojo.forEach(dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_5){return _2["get"+_5]();}),function(_6,_7){_3[_7]=_3[_7]||_6;});}_4=new Date(_3[0]||1970,_3[1]||0,_3[2]||1,_3[3]||0,_3[4]||0,_3[5]||0,_3[6]||0);if(_3[0]<100){_4.setFullYear(_3[0]||1970);}var _8=0,_9=_3[7]&&_3[7].charAt(0);if(_9!="Z"){_8=((_3[8]||0)*60)+(Number(_3[9])||0);if(_9!="-"){_8*=-1;}}if(_9){_8-=_4.getTimezoneOffset();}if(_8){_4.setTime(_4.getTime()+_8*60000);}}return _4;};dojo.date.stamp.toISOString=function(_a,_b){var _c=function(n){return (n<10)?"0"+n:n;};_b=_b||{};var _d=[],_e=_b.zulu?"getUTC":"get",_f="";if(_b.selector!="time"){var _10=_a[_e+"FullYear"]();_f=["0000".substr((_10+"").length)+_10,_c(_a[_e+"Month"]()+1),_c(_a[_e+"Date"]())].join("-");}_d.push(_f);if(_b.selector!="date"){var _11=[_c(_a[_e+"Hours"]()),_c(_a[_e+"Minutes"]()),_c(_a[_e+"Seconds"]())].join(":");var _12=_a[_e+"Milliseconds"]();if(_b.milliseconds){_11+="."+(_12<100?"0":"")+_c(_12);}if(_b.zulu){_11+="Z";}else{if(_b.selector!="time"){var _13=_a.getTimezoneOffset();var _14=Math.abs(_13);_11+=(_13>0?"-":"+")+_c(Math.floor(_14/60))+":"+_c(_14%60);}}_d.push(_11);}return _d.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");new Date("X");dojo.parser=new function(){var d=dojo;function _15(_16){if(d.isString(_16)){return "string";}if(typeof _16=="number"){return "number";}if(typeof _16=="boolean"){return "boolean";}if(d.isFunction(_16)){return "function";}if(d.isArray(_16)){return "array";}if(_16 instanceof Date){return "date";}if(_16 instanceof d._Url){return "url";}return "object";};function _17(_18,_19){switch(_19){case "string":return _18;case "number":return _18.length?Number(_18):NaN;case "boolean":return typeof _18=="boolean"?_18:!(_18.toLowerCase()=="false");case "function":if(d.isFunction(_18)){_18=_18.toString();_18=d.trim(_18.substring(_18.indexOf("{")+1,_18.length-1));}try{if(_18===""||_18.search(/[^\w\.]+/i)!=-1){return new Function(_18);}else{return d.getObject(_18,false)||new Function(_18);}}catch(e){return new Function();}case "array":return _18?_18.split(/\s*,\s*/):[];case "date":switch(_18){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_18);}case "url":return d.baseUrl+_18;default:return d.fromJson(_18);}};var _1a={},_1b={};d.connect(d,"extend",function(){_1b={};});function _1c(cls,_1d){for(var _1e in cls){if(_1e.charAt(0)=="_"){continue;}if(_1e in _1a){continue;}_1d[_1e]=_15(cls[_1e]);}return _1d;};function _1f(_20,_21){var c=_1b[_20];if(!c){var cls=d.getObject(_20),_22=null;if(!cls){return null;}if(!_21){_22=_1c(cls.prototype,{});}c={cls:cls,params:_22};}else{if(!_21&&!c.params){c.params=_1c(c.cls.prototype,{});}}return c;};this._functionFromScript=function(_23,_24){var _25="";var _26="";var _27=(_23.getAttribute(_24+"args")||_23.getAttribute("args"));if(_27){d.forEach(_27.split(/\s*,\s*/),function(_28,idx){_25+="var "+_28+" = arguments["+idx+"]; ";});}var _29=_23.getAttribute("with");if(_29&&_29.length){d.forEach(_29.split(/\s*,\s*/),function(_2a){_25+="with("+_2a+"){";_26+="}";});}return new Function(_25+_23.innerHTML+_26);};this.instantiate=function(_2b,_2c,_2d){var _2e=[],_2c=_2c||{};_2d=_2d||{};var _2f=(_2d.scope||d._scopeName)+"Type",_30="data-"+(_2d.scope||d._scopeName)+"-";d.forEach(_2b,function(obj){if(!obj){return;}var _31,_32,_33,_34,_35,_36;if(obj.node){_31=obj.node;_32=obj.type;_36=obj.fastpath;_33=obj.clsInfo||(_32&&_1f(_32,_36));_34=_33&&_33.cls;_35=obj.scripts;}else{_31=obj;_32=_2f in _2c?_2c[_2f]:_31.getAttribute(_2f);_33=_32&&_1f(_32);_34=_33&&_33.cls;_35=(_34&&(_34._noScript||_34.prototype._noScript)?[]:d.query("> script[type^='dojo/']",_31));}if(!_33){throw new Error("Could not load class '"+_32);}var _37={};if(_2d.defaults){d._mixin(_37,_2d.defaults);}if(obj.inherited){d._mixin(_37,obj.inherited);}if(_36){var _38=_31.getAttribute(_30+"props");if(_38&&_38.length){try{_38=d.fromJson.call(_2d.propsThis,"{"+_38+"}");d._mixin(_37,_38);}catch(e){throw new Error(e.toString()+" in data-dojo-props='"+_38+"'");}}var _39=_31.getAttribute(_30+"attach-point");if(_39){_37.dojoAttachPoint=_39;}var _3a=_31.getAttribute(_30+"attach-event");if(_3a){_37.dojoAttachEvent=_3a;}dojo.mixin(_37,_2c);}else{var _3b=_31.attributes;for(var _3c in _33.params){var _3d=_3c in _2c?{value:_2c[_3c],specified:true}:_3b.getNamedItem(_3c);if(!_3d||(!_3d.specified&&(!dojo.isIE||_3c.toLowerCase()!="value"))){continue;}var _3e=_3d.value;switch(_3c){case "class":_3e="className" in _2c?_2c.className:_31.className;break;case "style":_3e="style" in _2c?_2c.style:(_31.style&&_31.style.cssText);}var _3f=_33.params[_3c];if(typeof _3e=="string"){_37[_3c]=_17(_3e,_3f);}else{_37[_3c]=_3e;}}}var _40=[],_41=[];d.forEach(_35,function(_42){_31.removeChild(_42);var _43=(_42.getAttribute(_30+"event")||_42.getAttribute("event")),_32=_42.getAttribute("type"),nf=d.parser._functionFromScript(_42,_30);if(_43){if(_32=="dojo/connect"){_40.push({event:_43,func:nf});}else{_37[_43]=nf;}}else{_41.push(nf);}});var _44=_34.markupFactory||_34.prototype&&_34.prototype.markupFactory;var _45=_44?_44(_37,_31,_34):new _34(_37,_31);_2e.push(_45);var _46=(_31.getAttribute(_30+"id")||_31.getAttribute("jsId"));if(_46){d.setObject(_46,_45);}d.forEach(_40,function(_47){d.connect(_45,_47.event,null,_47.func);});d.forEach(_41,function(_48){_48.call(_45);});});if(!_2c._started){d.forEach(_2e,function(_49){if(!_2d.noStart&&_49&&dojo.isFunction(_49.startup)&&!_49._started&&(!_49.getParent||!_49.getParent())){_49.startup();}});}return _2e;};this.parse=function(_4a,_4b){var _4c;if(!_4b&&_4a&&_4a.rootNode){_4b=_4a;_4c=_4b.rootNode;}else{_4c=_4a;}_4c=_4c?dojo.byId(_4c):dojo.body();_4b=_4b||{};var _4d=(_4b.scope||d._scopeName)+"Type",_4e="data-"+(_4b.scope||d._scopeName)+"-";function _4f(_50,_51){var _52=dojo.clone(_50.inherited);dojo.forEach(["dir","lang"],function(_53){var val=_50.node.getAttribute(_53);if(val){_52[_53]=val;}});var _54=_50.clsInfo&&!_50.clsInfo.cls.prototype._noScript?_50.scripts:null;var _55=(!_50.clsInfo||!_50.clsInfo.cls.prototype.stopParser)||(_4b&&_4b.template);for(var _56=_50.node.firstChild;_56;_56=_56.nextSibling){if(_56.nodeType==1){var _57,_58=_55&&_56.getAttribute(_4e+"type");if(_58){_57=_58;}else{_57=_55&&_56.getAttribute(_4d);}var _59=_58==_57;if(_57){var _5a={"type":_57,fastpath:_59,clsInfo:_1f(_57,_59),node:_56,scripts:[],inherited:_52};_51.push(_5a);_4f(_5a,_51);}else{if(_54&&_56.nodeName.toLowerCase()=="script"){_57=_56.getAttribute("type");if(_57&&/^dojo\/\w/i.test(_57)){_54.push(_56);}}else{if(_55){_4f({node:_56,inherited:_52},_51);}}}}}};var _5b={};if(_4b&&_4b.inherited){for(var key in _4b.inherited){if(_4b.inherited[key]){_5b[key]=_4b.inherited[key];}}}var _5c=[];_4f({node:_4c,inherited:_5b},_5c);var _5d=_4b&&_4b.template?{template:true}:null;return this.instantiate(_5c,_5d,_4b);};}();(function(){var _5e=function(){if(dojo.config.parseOnLoad){dojo.parser.parse();}};if(dojo.getObject("dijit.wai.onload")===dojo._loaders[0]){dojo._loaders.splice(1,0,_5e);}else{dojo._loaders.unshift(_5e);}})();}if(!dojo._hasResource["dojo.window"]){dojo._hasResource["dojo.window"]=true;dojo.provide("dojo.window");dojo.getObject("window",true,dojo);dojo.window.getBox=function(){var _5f=(dojo.doc.compatMode=="BackCompat")?dojo.body():dojo.doc.documentElement;var _60=dojo._docScroll();return {w:_5f.clientWidth,h:_5f.clientHeight,l:_60.x,t:_60.y};};dojo.window.get=function(doc){if(dojo.isIE&&window!==document.parentWindow){doc.parentWindow.execScript("document._parentWindow = window;","Javascript");var win=doc._parentWindow;doc._parentWindow=null;return win;}return doc.parentWindow||doc.defaultView;};dojo.window.scrollIntoView=function(_61,pos){try{_61=dojo.byId(_61);var doc=_61.ownerDocument||dojo.doc,_62=doc.body||dojo.body(),_63=doc.documentElement||_62.parentNode,_64=dojo.isIE,_65=dojo.isWebKit;if((!(dojo.isMoz||_64||_65||dojo.isOpera)||_61==_62||_61==_63)&&(typeof _61.scrollIntoView!="undefined")){_61.scrollIntoView(false);return;}var _66=doc.compatMode=="BackCompat",_67=(_64>=9&&_61.ownerDocument.parentWindow.frameElement)?((_63.clientHeight>0&&_63.clientWidth>0&&(_62.clientHeight==0||_62.clientWidth==0||_62.clientHeight>_63.clientHeight||_62.clientWidth>_63.clientWidth))?_63:_62):(_66?_62:_63),_68=_65?_62:_67,_69=_67.clientWidth,_6a=_67.clientHeight,rtl=!dojo._isBodyLtr(),_6b=pos||dojo.position(_61),el=_61.parentNode,_6c=function(el){return ((_64<=6||(_64&&_66))?false:(dojo.style(el,"position").toLowerCase()=="fixed"));};if(_6c(_61)){return;}while(el){if(el==_62){el=_68;}var _6d=dojo.position(el),_6e=_6c(el);if(el==_68){_6d.w=_69;_6d.h=_6a;if(_68==_63&&_64&&rtl){_6d.x+=_68.offsetWidth-_6d.w;}if(_6d.x<0||!_64){_6d.x=0;}if(_6d.y<0||!_64){_6d.y=0;}}else{var pb=dojo._getPadBorderExtents(el);_6d.w-=pb.w;_6d.h-=pb.h;_6d.x+=pb.l;_6d.y+=pb.t;var _6f=el.clientWidth,_70=_6d.w-_6f;if(_6f>0&&_70>0){_6d.w=_6f;_6d.x+=(rtl&&(_64||el.clientLeft>pb.l))?_70:0;}_6f=el.clientHeight;_70=_6d.h-_6f;if(_6f>0&&_70>0){_6d.h=_6f;}}if(_6e){if(_6d.y<0){_6d.h+=_6d.y;_6d.y=0;}if(_6d.x<0){_6d.w+=_6d.x;_6d.x=0;}if(_6d.y+_6d.h>_6a){_6d.h=_6a-_6d.y;}if(_6d.x+_6d.w>_69){_6d.w=_69-_6d.x;}}var l=_6b.x-_6d.x,t=_6b.y-Math.max(_6d.y,0),r=l+_6b.w-_6d.w,bot=t+_6b.h-_6d.h;if(r*l>0){var s=Math[l<0?"max":"min"](l,r);if(rtl&&((_64==8&&!_66)||_64>=9)){s=-s;}_6b.x+=el.scrollLeft;el.scrollLeft+=s;_6b.x-=el.scrollLeft;}if(bot*t>0){_6b.y+=el.scrollTop;el.scrollTop+=Math[t<0?"max":"min"](t,bot);_6b.y-=el.scrollTop;}el=(el!=_68)&&!_6e&&el.parentNode;}}catch(error){console.error("scrollIntoView: "+error);_61.scrollIntoView(false);}};}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(_71){if(this._hash[_71.id]){throw new Error("Tried to register widget with id=="+_71.id+" but that id is already registered");}this._hash[_71.id]=_71;this.length++;},remove:function(id){if(this._hash[id]){delete this._hash[id];this.length--;}},forEach:function(_72,_73){_73=_73||dojo.global;var i=0,id;for(id in this._hash){_72.call(_73,this._hash[id],i++,this._hash);}return this;},filter:function(_74,_75){_75=_75||dojo.global;var res=new dijit.WidgetSet(),i=0,id;for(id in this._hash){var w=this._hash[id];if(_74.call(_75,w,i++,this._hash)){res.add(w);}}return res;},byId:function(id){return this._hash[id];},byClass:function(cls){var res=new dijit.WidgetSet(),id,_76;for(id in this._hash){_76=this._hash[id];if(_76.declaredClass==cls){res.add(_76);}}return res;},toArray:function(){var ar=[];for(var id in this._hash){ar.push(this._hash[id]);}return ar;},map:function(_77,_78){return dojo.map(this.toArray(),_77,_78);},every:function(_79,_7a){_7a=_7a||dojo.global;var x=0,i;for(i in this._hash){if(!_79.call(_7a,this._hash[i],x++,this._hash)){return false;}}return true;},some:function(_7b,_7c){_7c=_7c||dojo.global;var x=0,i;for(i in this._hash){if(_7b.call(_7c,this._hash[i],x++,this._hash)){return true;}}return false;}});(function(){dijit.registry=new dijit.WidgetSet();var _7d=dijit.registry._hash,_7e=dojo.attr,_7f=dojo.hasAttr,_80=dojo.style;dijit.byId=function(id){return typeof id=="string"?_7d[id]:id;};var _81={};dijit.getUniqueId=function(_82){var id;do{id=_82+"_"+(_82 in _81?++_81[_82]:_81[_82]=0);}while(_7d[id]);return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;};dijit.findWidgets=function(_83){var _84=[];function _85(_86){for(var _87=_86.firstChild;_87;_87=_87.nextSibling){if(_87.nodeType==1){var _88=_87.getAttribute("widgetId");if(_88){var _89=_7d[_88];if(_89){_84.push(_89);}}else{_85(_87);}}}};_85(_83);return _84;};dijit._destroyAll=function(){dijit._curFocus=null;dijit._prevFocus=null;dijit._activeStack=[];dojo.forEach(dijit.findWidgets(dojo.body()),function(_8a){if(!_8a._destroyed){if(_8a.destroyRecursive){_8a.destroyRecursive();}else{if(_8a.destroy){_8a.destroy();}}}});};if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit._destroyAll();});}dijit.byNode=function(_8b){return _7d[_8b.getAttribute("widgetId")];};dijit.getEnclosingWidget=function(_8c){while(_8c){var id=_8c.getAttribute&&_8c.getAttribute("widgetId");if(id){return _7d[id];}_8c=_8c.parentNode;}return null;};var _8d=(dijit._isElementShown=function(_8e){var s=_80(_8e);return (s.visibility!="hidden")&&(s.visibility!="collapsed")&&(s.display!="none")&&(_7e(_8e,"type")!="hidden");});dijit.hasDefaultTabStop=function(_8f){switch(_8f.nodeName.toLowerCase()){case "a":return _7f(_8f,"href");case "area":case "button":case "input":case "object":case "select":case "textarea":return true;case "iframe":var _90;try{var _91=_8f.contentDocument;if("designMode" in _91&&_91.designMode=="on"){return true;}_90=_91.body;}catch(e1){try{_90=_8f.contentWindow.document.body;}catch(e2){return false;}}return _90.contentEditable=="true"||(_90.firstChild&&_90.firstChild.contentEditable=="true");default:return _8f.contentEditable=="true";}};var _92=(dijit.isTabNavigable=function(_93){if(_7e(_93,"disabled")){return false;}else{if(_7f(_93,"tabIndex")){return _7e(_93,"tabIndex")>=0;}else{return dijit.hasDefaultTabStop(_93);}}});dijit._getTabNavigable=function(_94){var _95,_96,_97,_98,_99,_9a,_9b={};function _9c(_9d){return _9d&&_9d.tagName.toLowerCase()=="input"&&_9d.type&&_9d.type.toLowerCase()=="radio"&&_9d.name&&_9d.name.toLowerCase();};var _9e=function(_9f){dojo.query("> *",_9f).forEach(function(_a0){if((dojo.isIE&&_a0.scopeName!=="HTML")||!_8d(_a0)){return;}if(_92(_a0)){var _a1=_7e(_a0,"tabIndex");if(!_7f(_a0,"tabIndex")||_a1==0){if(!_95){_95=_a0;}_96=_a0;}else{if(_a1>0){if(!_97||_a1<_98){_98=_a1;_97=_a0;}if(!_99||_a1>=_9a){_9a=_a1;_99=_a0;}}}var rn=_9c(_a0);if(dojo.attr(_a0,"checked")&&rn){_9b[rn]=_a0;}}if(_a0.nodeName.toUpperCase()!="SELECT"){_9e(_a0);}});};if(_8d(_94)){_9e(_94);}function rs(_a2){return _9b[_9c(_a2)]||_a2;};return {first:rs(_95),last:rs(_96),lowest:rs(_97),highest:rs(_99)};};dijit.getFirstInTabbingOrder=function(_a3){var _a4=dijit._getTabNavigable(dojo.byId(_a3));return _a4.lowest?_a4.lowest:_a4.first;};dijit.getLastInTabbingOrder=function(_a5){var _a6=dijit._getTabNavigable(dojo.byId(_a5));return _a6.last?_a6.last:_a6.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};if(sel.rangeCount){bm.mark=sel.getRangeAt(0).cloneRange();}}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(_a7){var _a8=dojo.doc,_a9=_a7.mark;if(_a9){if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.removeAllRanges){if(_a9.pRange){var r=_a9;var n=r.node;n.selectionStart=r.start;n.selectionEnd=r.end;}else{sel.removeAllRanges();sel.addRange(_a9);}}else{console.warn("No idea how to restore selection for this browser!");}}else{if(_a8.selection&&_a9){var rg;if(_a9.pRange){rg=_a9.range;}else{if(dojo.isArray(_a9)){rg=_a8.body.createControlRange();dojo.forEach(_a9,function(n){rg.addElement(n);});}else{rg=_a8.body.createTextRange();rg.moveToBookmark(_a9);}}rg.select();}}}},getFocus:function(_aa,_ab){var _ac=!dijit._curFocus||(_aa&&dojo.isDescendant(dijit._curFocus,_aa.domNode))?dijit._prevFocus:dijit._curFocus;return {node:_ac,bookmark:(_ac==dijit._curFocus)&&dojo.withGlobal(_ab||dojo.global,dijit.getBookmark),openedForWindow:_ab};},focus:function(_ad){if(!_ad){return;}var _ae="node" in _ad?_ad.node:_ad,_af=_ad.bookmark,_b0=_ad.openedForWindow,_b1=_af?_af.isCollapsed:false;if(_ae){var _b2=(_ae.tagName.toLowerCase()=="iframe")?_ae.contentWindow:_ae;if(_b2&&_b2.focus){try{_b2.focus();}catch(e){}}dijit._onFocusNode(_ae);}if(_af&&dojo.withGlobal(_b0||dojo.global,dijit.isCollapsed)&&!_b1){if(_b0){_b0.focus();}try{dojo.withGlobal(_b0||dojo.global,dijit.moveToBookmark,null,[_af]);}catch(e2){}}},_activeStack:[],registerIframe:function(_b3){return dijit.registerWin(_b3.contentWindow,_b3);},unregisterIframe:function(_b4){dijit.unregisterWin(_b4);},registerWin:function(_b5,_b6){var _b7=function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){return;}dijit._onTouchNode(_b6||evt.target||evt.srcElement,"mouse");};var doc=dojo.isIE?_b5.document.documentElement:_b5.document;if(doc){if(dojo.isIE){_b5.document.body.attachEvent("onmousedown",_b7);var _b8=function(evt){if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){dijit._onFocusNode(_b6||evt.srcElement);}else{dijit._onTouchNode(_b6||evt.srcElement);}};doc.attachEvent("onactivate",_b8);var _b9=function(evt){dijit._onBlurNode(_b6||evt.srcElement);};doc.attachEvent("ondeactivate",_b9);return function(){_b5.document.detachEvent("onmousedown",_b7);doc.detachEvent("onactivate",_b8);doc.detachEvent("ondeactivate",_b9);doc=null;};}else{doc.body.addEventListener("mousedown",_b7,true);var _ba=function(evt){dijit._onFocusNode(_b6||evt.target);};doc.addEventListener("focus",_ba,true);var _bb=function(evt){dijit._onBlurNode(_b6||evt.target);};doc.addEventListener("blur",_bb,true);return function(){doc.body.removeEventListener("mousedown",_b7,true);doc.removeEventListener("focus",_ba,true);doc.removeEventListener("blur",_bb,true);doc=null;};}}},unregisterWin:function(_bc){_bc&&_bc();},_onBlurNode:function(_bd){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(_be,by){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _bf=[];try{while(_be){var _c0=dojo.attr(_be,"dijitPopupParent");if(_c0){_be=dijit.byId(_c0).domNode;}else{if(_be.tagName&&_be.tagName.toLowerCase()=="body"){if(_be===dojo.body()){break;}_be=dojo.window.get(_be.ownerDocument).frameElement;}else{var id=_be.getAttribute&&_be.getAttribute("widgetId"),_c1=id&&dijit.byId(id);if(_c1&&!(by=="mouse"&&_c1.get("disabled"))){_bf.unshift(id);}_be=_be.parentNode;}}}}catch(e){}dijit._setStack(_bf,by);},_onFocusNode:function(_c2){if(!_c2){return;}if(_c2.nodeType==9){return;}dijit._onTouchNode(_c2);if(_c2==dijit._curFocus){return;}if(dijit._curFocus){dijit._prevFocus=dijit._curFocus;}dijit._curFocus=_c2;dojo.publish("focusNode",[_c2]);},_setStack:function(_c3,by){var _c4=dijit._activeStack;dijit._activeStack=_c3;for(var _c5=0;_c5<Math.min(_c4.length,_c3.length);_c5++){if(_c4[_c5]!=_c3[_c5]){break;}}var _c6;for(var i=_c4.length-1;i>=_c5;i--){_c6=dijit.byId(_c4[i]);if(_c6){_c6._focused=false;_c6.set("focused",false);_c6._hasBeenBlurred=true;if(_c6._onBlur){_c6._onBlur(by);}dojo.publish("widgetBlur",[_c6,by]);}}for(i=_c5;i<_c3.length;i++){_c6=dijit.byId(_c3[i]);if(_c6){_c6._focused=true;_c6.set("focused",true);if(_c6._onFocus){_c6._onFocus(by);}dojo.publish("widgetFocus",[_c6,by]);}}}});dojo.addOnLoad(function(){var _c7=dijit.registerWin(window);if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit.unregisterWin(_c7);_c7=null;});}});}if(!dojo._hasResource["dojo.AdapterRegistry"]){dojo._hasResource["dojo.AdapterRegistry"]=true;dojo.provide("dojo.AdapterRegistry");dojo.AdapterRegistry=function(_c8){this.pairs=[];this.returnWrappers=_c8||false;};dojo.extend(dojo.AdapterRegistry,{register:function(_c9,_ca,_cb,_cc,_cd){this.pairs[((_cd)?"unshift":"push")]([_c9,_ca,_cb,_cc]);},match:function(){for(var i=0;i<this.pairs.length;i++){var _ce=this.pairs[i];if(_ce[1].apply(this,arguments)){if((_ce[3])||(this.returnWrappers)){return _ce[2];}else{return _ce[2].apply(this,arguments);}}}throw new Error("No match found");},unregister:function(_cf){for(var i=0;i<this.pairs.length;i++){var _d0=this.pairs[i];if(_d0[0]==_cf){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(){return dojo.window.getBox();};dijit.placeOnScreen=function(_d1,pos,_d2,_d3){var _d4=dojo.map(_d2,function(_d5){var c={corner:_d5,pos:{x:pos.x,y:pos.y}};if(_d3){c.pos.x+=_d5.charAt(1)=="L"?_d3.x:-_d3.x;c.pos.y+=_d5.charAt(0)=="T"?_d3.y:-_d3.y;}return c;});return dijit._place(_d1,_d4);};dijit._place=function(_d6,_d7,_d8,_d9){var _da=dojo.window.getBox();if(!_d6.parentNode||String(_d6.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_d6);}var _db=null;dojo.some(_d7,function(_dc){var _dd=_dc.corner;var pos=_dc.pos;var _de=0;var _df={w:_dd.charAt(1)=="L"?(_da.l+_da.w)-pos.x:pos.x-_da.l,h:_dd.charAt(1)=="T"?(_da.t+_da.h)-pos.y:pos.y-_da.t};if(_d8){var res=_d8(_d6,_dc.aroundCorner,_dd,_df,_d9);_de=typeof res=="undefined"?0:res;}var _e0=_d6.style;var _e1=_e0.display;var _e2=_e0.visibility;_e0.visibility="hidden";_e0.display="";var mb=dojo.marginBox(_d6);_e0.display=_e1;_e0.visibility=_e2;var _e3=Math.max(_da.l,_dd.charAt(1)=="L"?pos.x:(pos.x-mb.w)),_e4=Math.max(_da.t,_dd.charAt(0)=="T"?pos.y:(pos.y-mb.h)),_e5=Math.min(_da.l+_da.w,_dd.charAt(1)=="L"?(_e3+mb.w):pos.x),_e6=Math.min(_da.t+_da.h,_dd.charAt(0)=="T"?(_e4+mb.h):pos.y),_e7=_e5-_e3,_e8=_e6-_e4;_de+=(mb.w-_e7)+(mb.h-_e8);if(_db==null||_de<_db.overflow){_db={corner:_dd,aroundCorner:_dc.aroundCorner,x:_e3,y:_e4,w:_e7,h:_e8,overflow:_de,spaceAvailable:_df};}return !_de;});if(_db.overflow&&_d8){_d8(_d6,_db.aroundCorner,_db.corner,_db.spaceAvailable,_d9);}var l=dojo._isBodyLtr(),s=_d6.style;s.top=_db.y+"px";s[l?"left":"right"]=(l?_db.x:_da.w-_db.x-_db.w)+"px";return _db;};dijit.placeOnScreenAroundNode=function(_e9,_ea,_eb,_ec){_ea=dojo.byId(_ea);var _ed=dojo.position(_ea,true);return dijit._placeOnScreenAroundRect(_e9,_ed.x,_ed.y,_ed.w,_ed.h,_eb,_ec);};dijit.placeOnScreenAroundRectangle=function(_ee,_ef,_f0,_f1){return dijit._placeOnScreenAroundRect(_ee,_ef.x,_ef.y,_ef.width,_ef.height,_f0,_f1);};dijit._placeOnScreenAroundRect=function(_f2,x,y,_f3,_f4,_f5,_f6){var _f7=[];for(var _f8 in _f5){_f7.push({aroundCorner:_f8,corner:_f5[_f8],pos:{x:x+(_f8.charAt(1)=="L"?0:_f3),y:y+(_f8.charAt(0)=="T"?0:_f4)}});}return dijit._place(_f2,_f7,_f6,{w:_f3,h:_f4});};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(_f9,_fa,_fb,_fc){return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);};dijit.getPopupAroundAlignment=function(_fd,_fe){var _ff={};dojo.forEach(_fd,function(pos){switch(pos){case "after":_ff[_fe?"BR":"BL"]=_fe?"BL":"BR";break;case "before":_ff[_fe?"BL":"BR"]=_fe?"BR":"BL";break;case "below-alt":_fe=!_fe;case "below":_ff[_fe?"BL":"BR"]=_fe?"TL":"TR";_ff[_fe?"BR":"BL"]=_fe?"TR":"TL";break;case "above-alt":_fe=!_fe;case "above":default:_ff[_fe?"TL":"TR"]=_fe?"BL":"BR";_ff[_fe?"TR":"TL"]=_fe?"BR":"BL";break;}});return _ff;};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){return dojo.window.get(doc);};}if(!dojo._hasResource["dijit._base.popup"]){dojo._hasResource["dijit._base.popup"]=true;dojo.provide("dijit._base.popup");dijit.popup={_stack:[],_beginZIndex:1000,_idGen:1,_createWrapper:function(_100){var _101=_100.declaredClass?_100._popupWrapper:(_100.parentNode&&dojo.hasClass(_100.parentNode,"dijitPopup")),node=_100.domNode||_100;if(!_101){_101=dojo.create("div",{"class":"dijitPopup",style:{display:"none"},role:"presentation"},dojo.body());_101.appendChild(node);var s=node.style;s.display="";s.visibility="";s.position="";s.top="0px";if(_100.declaredClass){_100._popupWrapper=_101;dojo.connect(_100,"destroy",function(){dojo.destroy(_101);delete _100._popupWrapper;});}}return _101;},moveOffScreen:function(_102){var _103=this._createWrapper(_102);dojo.style(_103,{visibility:"hidden",top:"-9999px",display:""});},hide:function(_104){var _105=this._createWrapper(_104);dojo.style(_105,"display","none");},getTopPopup:function(){var _106=this._stack;for(var pi=_106.length-1;pi>0&&_106[pi].parent===_106[pi-1].widget;pi--){}return _106[pi];},open:function(args){var _107=this._stack,_108=args.popup,_109=args.orient||((args.parent?args.parent.isLeftToRight():dojo._isBodyLtr())?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_10a=args.around,id=(args.around&&args.around.id)?(args.around.id+"_dropdown"):("popup_"+this._idGen++);while(_107.length&&(!args.parent||!dojo.isDescendant(args.parent.domNode,_107[_107.length-1].widget.domNode))){dijit.popup.close(_107[_107.length-1].widget);}var _10b=this._createWrapper(_108);dojo.attr(_10b,{id:id,style:{zIndex:this._beginZIndex+_107.length},"class":"dijitPopup "+(_108.baseClass||_108["class"]||"").split(" ")[0]+"Popup",dijitPopupParent:args.parent?args.parent.id:""});if(dojo.isIE||dojo.isMoz){if(!_108.bgIframe){_108.bgIframe=new dijit.BackgroundIframe(_10b);}}var best=_10a?dijit.placeOnScreenAroundElement(_10b,_10a,_109,_108.orient?dojo.hitch(_108,"orient"):null):dijit.placeOnScreen(_10b,args,_109=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],args.padding);_10b.style.display="";_10b.style.visibility="visible";_108.domNode.style.visibility="visible";var _10c=[];_10c.push(dojo.connect(_10b,"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 _10d=this.getTopPopup();if(_10d&&_10d.onCancel){_10d.onCancel();}}}}));if(_108.onCancel){_10c.push(dojo.connect(_108,"onCancel",args.onCancel));}_10c.push(dojo.connect(_108,_108.onExecute?"onExecute":"onChange",this,function(){var _10e=this.getTopPopup();if(_10e&&_10e.onExecute){_10e.onExecute();}}));_107.push({widget:_108,parent:args.parent,onExecute:args.onExecute,onCancel:args.onCancel,onClose:args.onClose,handlers:_10c});if(_108.onOpen){_108.onOpen(best);}return best;},close:function(_10f){var _110=this._stack;while((_10f&&dojo.some(_110,function(elem){return elem.widget==_10f;}))||(!_10f&&_110.length)){var top=_110.pop(),_111=top.widget,_112=top.onClose;if(_111.onClose){_111.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(_111&&_111.domNode){this.hide(_111);}if(_112){_112();}}}};dijit._frames=new function(){var _113=[];this.pop=function(){var _114;if(_113.length){_114=_113.pop();_114.style.display="";}else{if(dojo.isIE<9){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\");'>";_114=dojo.doc.createElement(html);}else{_114=dojo.create("iframe");_114.src="javascript:\"\"";_114.className="dijitBackgroundIframe";dojo.style(_114,"opacity",0.1);}_114.tabIndex=-1;dijit.setWaiRole(_114,"presentation");}return _114;};this.push=function(_115){_115.style.display="none";_113.push(_115);};}();dijit.BackgroundIframe=function(node){if(!node.id){throw new Error("no id");}if(dojo.isIE||dojo.isMoz){var _116=(this.iframe=dijit._frames.pop());node.appendChild(_116);if(dojo.isIE<7||dojo.isQuirks){this.resize(node);this._conn=dojo.connect(node,"onresize",this,function(){this.resize(node);});}else{dojo.style(_116,{width:"100%",height:"100%"});}}};dojo.extend(dijit.BackgroundIframe,{resize:function(node){if(this.iframe){dojo.style(this.iframe,{width:node.offsetWidth+"px",height:node.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(node,pos){dojo.window.scrollIntoView(node,pos);};}if(!dojo._hasResource["dojo.uacss"]){dojo._hasResource["dojo.uacss"]=true;dojo.provide("dojo.uacss");(function(){var d=dojo,html=d.doc.documentElement,ie=d.isIE,_117=d.isOpera,maj=Math.floor,ff=d.isFF,_118=d.boxModel.replace(/-/,""),_119={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_ie8:maj(ie)==8,dj_ie9:maj(ie)==9,dj_quirks:d.isQuirks,dj_iequirks:ie&&d.isQuirks,dj_opera:_117,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};_119["dj_"+_118]=true;var _11a="";for(var clz in _119){if(_119[clz]){_11a+=clz+" ";}}html.className=d.trim(html.className+" "+_11a);dojo._loaders.unshift(function(){if(!dojo._isBodyLtr()){var _11b="dj_rtl dijitRtl "+_11a.replace(/ /g,"-rtl ");html.className=d.trim(html.className+" "+_11b);}});})();}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");}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)),this._minDelay);this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_11c,node,_11d,obj,_11e,_11f,_120){if(obj!=this._obj){this.stop();this._initialDelay=_11f||500;this._subsequentDelay=_11e||0.9;this._minDelay=_120||10;this._obj=obj;this._evt=evt;this._node=node;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_11c,_11d);this._fireEventAndReload();this._evt=dojo.mixin({faux:true},evt);}},stop:function(){if(this._timer){clearTimeout(this._timer);this._timer=null;}if(this._obj){this._callback(-1,this._node,this._evt);this._obj=null;}},addKeyListener:function(node,_121,_122,_123,_124,_125,_126){if(_121.keyCode){_121.charOrCode=_121.keyCode;dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}else{if(_121.charCode){_121.charOrCode=String.fromCharCode(_121.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==_121.charOrCode&&(_121.ctrlKey===undefined||_121.ctrlKey==evt.ctrlKey)&&(_121.altKey===undefined||_121.altKey==evt.altKey)&&(_121.metaKey===undefined||_121.metaKey==(evt.metaKey||false))&&(_121.shiftKey===undefined||_121.shiftKey==evt.shiftKey)){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_122,node,_123,_121,_124,_125,_126);}else{if(dijit.typematic._obj==_121){dijit.typematic.stop();}}}),dojo.connect(node,"onkeyup",this,function(evt){if(dijit.typematic._obj==_121){dijit.typematic.stop();}})];},addMouseListener:function(node,_127,_128,_129,_12a,_12b){var dc=dojo.connect;return [dc(node,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_127,node,_128,node,_129,_12a,_12b);}),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){evt.preventDefault();}),dc(node,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_127,node,_128,node,_129,_12a,_12b);setTimeout(dojo.hitch(this,dijit.typematic.stop),50);}})];},addListener:function(_12c,_12d,_12e,_12f,_130,_131,_132,_133){return this.addKeyListener(_12d,_12e,_12f,_130,_131,_132,_133).concat(this.addMouseListener(_12c,_12f,_130,_131,_132,_133));}};}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 _134=cs.backgroundImage;var _135=(cs.borderTopColor==cs.borderRightColor)||(_134!=null&&(_134=="none"||_134=="url(invalid-url:)"));dojo[_135?"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,{hasWaiRole:function(elem,role){var _136=this.getWaiRole(elem);return role?(_136.indexOf(role)>-1):(_136.length>0);},getWaiRole:function(elem){return dojo.trim((dojo.attr(elem,"role")||"").replace("wairole:",""));},setWaiRole:function(elem,role){dojo.attr(elem,"role",role);},removeWaiRole:function(elem,role){var _137=dojo.attr(elem,"role");if(!_137){return;}if(role){var t=dojo.trim((" "+_137+" ").replace(" "+role+" "," "));dojo.attr(elem,"role",t);}else{elem.removeAttribute("role");}},hasWaiState:function(elem,_138){return elem.hasAttribute?elem.hasAttribute("aria-"+_138):!!elem.getAttribute("aria-"+_138);},getWaiState:function(elem,_139){return elem.getAttribute("aria-"+_139)||"";},setWaiState:function(elem,_13a,_13b){elem.setAttribute("aria-"+_13a,_13b);},removeWaiState:function(elem,_13c){elem.removeAttribute("aria-"+_13c);}});}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dojo.Stateful"]){dojo._hasResource["dojo.Stateful"]=true;dojo.provide("dojo.Stateful");dojo.declare("dojo.Stateful",null,{postscript:function(_13d){if(_13d){dojo.mixin(this,_13d);}},get:function(name){return this[name];},set:function(name,_13e){if(typeof name==="object"){for(var x in name){this.set(x,name[x]);}return this;}var _13f=this[name];this[name]=_13e;if(this._watchCallbacks){this._watchCallbacks(name,_13f,_13e);}return this;},watch:function(name,_140){var _141=this._watchCallbacks;if(!_141){var self=this;_141=this._watchCallbacks=function(name,_142,_143,_144){var _145=function(_146){if(_146){_146=_146.slice();for(var i=0,l=_146.length;i<l;i++){try{_146[i].call(self,name,_142,_143);}catch(e){console.error(e);}}}};_145(_141["_"+name]);if(!_144){_145(_141["*"]);}};}if(!_140&&typeof name==="function"){_140=name;name="*";}else{name="_"+name;}var _147=_141[name];if(typeof _147!=="object"){_147=_141[name]=[];}_147.push(_140);return {unwatch:function(){_147.splice(dojo.indexOf(_147,_140),1);}};}});}if(!dojo._hasResource["dijit._WidgetBase"]){dojo._hasResource["dijit._WidgetBase"]=true;dojo.provide("dijit._WidgetBase");(function(){dojo.declare("dijit._WidgetBase",dojo.Stateful,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",srcNodeRef:null,domNode:null,containerNode:null,attributeMap:{id:"",dir:"",lang:"","class":"",style:"",title:""},_blankGif:(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif")).toString(),postscript:function(_148,_149){this.create(_148,_149);},create:function(_14a,_14b){this.srcNodeRef=dojo.byId(_14b);this._connects=[];this._subscribes=[];if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){this.id=this.srcNodeRef.id;}if(_14a){this.params=_14a;dojo._mixin(this,_14a);}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 _14c=this.srcNodeRef;if(_14c&&_14c.parentNode&&this.domNode!==_14c){_14c.parentNode.replaceChild(this.domNode,_14c);}}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 _14d=function(attr,_14e){if((_14e.params&&attr in _14e.params)||_14e[attr]){_14e.set(attr,_14e[attr]);}};for(var attr in this.attributeMap){_14d(attr,this);}dojo.forEach(this._getSetterAttributes(),function(a){if(!(a in this.attributeMap)){_14d(a,this);}},this);},_getSetterAttributes:function(){var ctor=this.constructor;if(!ctor._setterAttrs){var r=(ctor._setterAttrs=[]),_14f,_150=ctor.prototype;for(var _151 in _150){if(dojo.isFunction(_150[_151])&&(_14f=_151.match(/^_set([a-zA-Z]*)Attr$/))&&_14f[1]){r.push(_14f[1].charAt(0).toLowerCase()+_14f[1].substr(1));}}}return ctor._setterAttrs;},postMixInProperties:function(){},buildRendering:function(){if(!this.domNode){this.domNode=this.srcNodeRef||dojo.create("div");}if(this.baseClass){var _152=this.baseClass.split(" ");if(!this.isLeftToRight()){_152=_152.concat(dojo.map(_152,function(name){return name+"Rtl";}));}dojo.addClass(this.domNode,_152);}},postCreate:function(){},startup:function(){this._started=true;},destroyRecursive:function(_153){this._beingDestroyed=true;this.destroyDescendants(_153);this.destroy(_153);},destroy:function(_154){this._beingDestroyed=true;this.uninitialize();var d=dojo,dfe=d.forEach,dun=d.unsubscribe;dfe(this._connects,function(_155){dfe(_155,d.disconnect);});dfe(this._subscribes,function(_156){dun(_156);});dfe(this._supportingWidgets||[],function(w){if(w.destroyRecursive){w.destroyRecursive();}else{if(w.destroy){w.destroy();}}});this.destroyRendering(_154);dijit.registry.remove(this.id);this._destroyed=true;},destroyRendering:function(_157){if(this.bgIframe){this.bgIframe.destroy(_157);delete this.bgIframe;}if(this.domNode){if(_157){dojo.removeAttr(this.domNode,"widgetId");}else{dojo.destroy(this.domNode);}delete this.domNode;}if(this.srcNodeRef){if(!_157){dojo.destroy(this.srcNodeRef);}delete this.srcNodeRef;}},destroyDescendants:function(_158){dojo.forEach(this.getChildren(),function(_159){if(_159.destroyRecursive){_159.destroyRecursive(_158);}});},uninitialize:function(){return false;},_setClassAttr:function(_15a){var _15b=this[this.attributeMap["class"]||"domNode"];dojo.replaceClass(_15b,_15a,this["class"]);this._set("class",_15a);},_setStyleAttr:function(_15c){var _15d=this[this.attributeMap.style||"domNode"];if(dojo.isObject(_15c)){dojo.style(_15d,_15c);}else{if(_15d.style.cssText){_15d.style.cssText+="; "+_15c;}else{_15d.style.cssText=_15c;}}this._set("style",_15c);},_attrToDom:function(attr,_15e){var _15f=this.attributeMap[attr];dojo.forEach(dojo.isArray(_15f)?_15f:[_15f],function(_160){var _161=this[_160.node||_160||"domNode"];var type=_160.type||"attribute";switch(type){case "attribute":if(dojo.isFunction(_15e)){_15e=dojo.hitch(this,_15e);}var _162=_160.attribute?_160.attribute:(/^on[A-Z][a-zA-Z]*$/.test(attr)?attr.toLowerCase():attr);dojo.attr(_161,_162,_15e);break;case "innerText":_161.innerHTML="";_161.appendChild(dojo.doc.createTextNode(_15e));break;case "innerHTML":_161.innerHTML=_15e;break;case "class":dojo.replaceClass(_161,_15e,this[attr]);break;}},this);},get:function(name){var _163=this._getAttrNames(name);return this[_163.g]?this[_163.g]():this[name];},set:function(name,_164){if(typeof name==="object"){for(var x in name){this.set(x,name[x]);}return this;}var _165=this._getAttrNames(name);if(this[_165.s]){var _166=this[_165.s].apply(this,Array.prototype.slice.call(arguments,1));}else{if(name in this.attributeMap){this._attrToDom(name,_164);}this._set(name,_164);}return _166||this;},_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"});},_set:function(name,_167){var _168=this[name];this[name]=_167;if(this._watchCallbacks&&this._created&&_167!==_168){this._watchCallbacks(name,_168,_167);}},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):[];},connect:function(obj,_169,_16a){var _16b=[dojo._connect(obj,_169,this,_16a)];this._connects.push(_16b);return _16b;},disconnect:function(_16c){for(var i=0;i<this._connects.length;i++){if(this._connects[i]==_16c){dojo.forEach(_16c,dojo.disconnect);this._connects.splice(i,1);return;}}},subscribe:function(_16d,_16e){var _16f=dojo.subscribe(_16d,this,_16e);this._subscribes.push(_16f);return _16f;},unsubscribe:function(_170){for(var i=0;i<this._subscribes.length;i++){if(this._subscribes[i]==_170){dojo.unsubscribe(_170);this._subscribes.splice(i,1);return;}}},isLeftToRight:function(){return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();},placeAt:function(_171,_172){if(_171.declaredClass&&_171.addChild){_171.addChild(this,_172);}else{dojo.place(this.domNode,_171,_172);}return this;}});})();}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.connect(dojo,"_connect",function(_173,_174){if(_173&&dojo.isFunction(_173._onConnect)){_173._onConnect(_174);}});dijit._connectOnUseEventHandler=function(_175){};dijit._lastKeyDownNode=null;if(dojo.isIE){(function(){var _176=function(evt){dijit._lastKeyDownNode=evt.srcElement;};dojo.doc.attachEvent("onkeydown",_176);dojo.addOnWindowUnload(function(){dojo.doc.detachEvent("onkeydown",_176);});})();}else{dojo.doc.addEventListener("keydown",function(evt){dijit._lastKeyDownNode=evt.target;},true);}(function(){dojo.declare("dijit._Widget",dijit._WidgetBase,{_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,create:function(_177,_178){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];}}this.inherited(arguments);if(this.domNode){for(attr in this.params){this._onConnect(attr);}}},_onConnect:function(_179){if(_179 in this._deferredConnects){var _17a=this[this._deferredConnects[_179]||"domNode"];this.connect(_17a,_179.toLowerCase(),_179);delete this._deferredConnects[_179];}},focused:false,isFocusable:function(){return this.focus&&(dojo.style(this.domNode,"display")!="none");},onFocus:function(){},onBlur:function(){},_onFocus:function(e){this.onFocus();},_onBlur:function(){this.onBlur();},setAttribute:function(attr,_17b){dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");this.set(attr,_17b);},attr:function(name,_17c){if(dojo.config.isDebug){var _17d=arguments.callee._ach||(arguments.callee._ach={}),_17e=(arguments.callee.caller||"unknown caller").toString();if(!_17d[_17e]){dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_17e,"","2.0");_17d[_17e]=true;}}var args=arguments.length;if(args>=2||typeof name==="object"){return this.set.apply(this,arguments);}else{return this.get(name);}},nodesWithKeyClick:["input","button"],connect:function(obj,_17f,_180){var d=dojo,dc=d._connect,_181=this.inherited(arguments,[obj,_17f=="ondijitclick"?"onclick":_17f,_180]);if(_17f=="ondijitclick"){if(d.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){var m=d.hitch(this,_180);_181.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;if(!("openDropDown" in this&&obj==this._buttonNode)){e.preventDefault();}}}),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);}}));}}return _181;},_onShow:function(){this.onShow();},onShow:function(){},onHide:function(){},onClose:function(){return true;}});})();}if(!dojo._hasResource["dojo.string"]){dojo._hasResource["dojo.string"]=true;dojo.provide("dojo.string");dojo.getObject("string",true,dojo);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(_182,map,_183,_184){_184=_184||dojo.global;_183=_183?dojo.hitch(_184,_183):function(v){return v;};return _182.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_185,key,_186){var _187=dojo.getObject(key,false,map);if(_186){_187=dojo.getObject(_186,false,_184).call(_184,_187,key);}return _183(_187,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");var cache={};dojo.cache=function(_188,url,_189){if(typeof _188=="string"){var _18a=dojo.moduleUrl(_188,url);}else{_18a=_188;_189=url;}var key=_18a.toString();var val=_189;if(_189!=undefined&&!dojo.isString(_189)){val=("value" in _189?_189.value:undefined);}var _18b=_189&&_189.sanitize?true:false;if(typeof val=="string"){val=cache[key]=_18b?dojo.cache._sanitize(val):val;}else{if(val===null){delete cache[key];}else{if(!(key in cache)){val=dojo._getText(key);cache[key]=_18b?dojo.cache._sanitize(val):val;}val=cache[key];}}return val;};dojo.cache._sanitize=function(val){if(val){val=val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _18c=val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_18c){val=_18c[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=[];this._attachEvents=[];},_stringRepl:function(tmpl){var _18d=this.declaredClass,_18e=this;return dojo.string.substitute(tmpl,this,function(_18f,key){if(key.charAt(0)=="!"){_18f=dojo.getObject(key.substr(1),false,_18e);}if(typeof _18f=="undefined"){throw new Error(_18d+" template:"+key);}if(_18f==null){return "";}return key.charAt(0)=="!"?_18f:_18f.toString().replace(/"/g,"&quot;");},this);},buildRendering:function(){var _190=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);var node;if(dojo.isString(_190)){node=dojo._toDom(this._stringRepl(_190));if(node.nodeType!=1){throw new Error("Invalid template: "+_190);}}else{node=_190.cloneNode(true);}this.domNode=node;this.inherited(arguments);this._attachTemplateNodes(node);if(this.widgetsInTemplate){var cw=(this._startupWidgets=dojo.parser.parse(node,{noStart:!this._earlyTemplatedStartup,template:true,inherited:{dir:this.dir,lang:this.lang},propsThis:this,scope:"dojo"}));this._supportingWidgets=dijit.findWidgets(node);this._attachTemplateNodes(cw,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_191){var dest=this.containerNode;if(_191&&dest){while(_191.hasChildNodes()){dest.appendChild(_191.firstChild);}}},_attachTemplateNodes:function(_192,_193){_193=_193||function(n,p){return n.getAttribute(p);};var _194=dojo.isArray(_192)?_192:(_192.all||_192.getElementsByTagName("*"));var x=dojo.isArray(_192)?0:-1;for(;x<_194.length;x++){var _195=(x==-1)?_192:_194[x];if(this.widgetsInTemplate&&(_193(_195,"dojoType")||_193(_195,"data-dojo-type"))){continue;}var _196=_193(_195,"dojoAttachPoint")||_193(_195,"data-dojo-attach-point");if(_196){var _197,_198=_196.split(/\s*,\s*/);while((_197=_198.shift())){if(dojo.isArray(this[_197])){this[_197].push(_195);}else{this[_197]=_195;}this._attachPoints.push(_197);}}var _199=_193(_195,"dojoAttachEvent")||_193(_195,"data-dojo-attach-event");if(_199){var _19a,_19b=_199.split(/\s*,\s*/);var trim=dojo.trim;while((_19a=_19b.shift())){if(_19a){var _19c=null;if(_19a.indexOf(":")!=-1){var _19d=_19a.split(":");_19a=trim(_19d[0]);_19c=trim(_19d[1]);}else{_19a=trim(_19a);}if(!_19c){_19c=_19a;}this._attachEvents.push(this.connect(_195,_19a,_19c));}}}var role=_193(_195,"waiRole");if(role){dijit.setWaiRole(_195,role);}var _19e=_193(_195,"waiState");if(_19e){dojo.forEach(_19e.split(/\s*,\s*/),function(_19f){if(_19f.indexOf("-")!=-1){var pair=_19f.split("-");dijit.setWaiState(_195,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(_1a0){delete this[_1a0];},this);this._attachPoints=[];dojo.forEach(this._attachEvents,this.disconnect,this);this._attachEvents=[];this.inherited(arguments);}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_1a1,_1a2,_1a3){var _1a4=dijit._Templated._templateCache;var key=_1a2||_1a1;var _1a5=_1a4[key];if(_1a5){try{if(!_1a5.ownerDocument||_1a5.ownerDocument==dojo.doc){return _1a5;}}catch(e){}dojo.destroy(_1a5);}if(!_1a2){_1a2=dojo.cache(_1a1,{sanitize:true});}_1a2=dojo.string.trim(_1a2);if(_1a3||_1a2.match(/\$\{([^\}]+)\}/g)){return (_1a4[key]=_1a2);}else{var node=dojo._toDom(_1a2);if(node.nodeType!=1){throw new Error("Invalid template: "+_1a2);}return (_1a4[key]=node);}};if(dojo.isIE){dojo.addOnWindowUnload(function(){var _1a6=dijit._Templated._templateCache;for(var key in _1a6){var _1a7=_1a6[key];if(typeof _1a7=="object"){dojo.destroy(_1a7);}delete _1a6[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(_1a8,_1a9){var _1aa=this.containerNode;if(_1a9&&typeof _1a9=="number"){var _1ab=this.getChildren();if(_1ab&&_1ab.length>=_1a9){_1aa=_1ab[_1a9-1].domNode;_1a9="after";}}dojo.place(_1a8.domNode,_1aa,_1a9);if(this._started&&!_1a8._started){_1a8.startup();}},removeChild:function(_1ac){if(typeof _1ac=="number"){_1ac=this.getChildren()[_1ac];}if(_1ac){var node=_1ac.domNode;if(node&&node.parentNode){node.parentNode.removeChild(node);}}},hasChildren:function(){return this.getChildren().length>0;},destroyDescendants:function(_1ad){dojo.forEach(this.getChildren(),function(_1ae){_1ae.destroyRecursive(_1ad);});},_getSiblingOfChild:function(_1af,dir){var node=_1af.domNode,_1b0=(dir>0?"nextSibling":"previousSibling");do{node=node[_1b0];}while(node&&(node.nodeType!=1||!dijit.byNode(node)));return node&&dijit.byNode(node);},getIndexOfChild:function(_1b1){return dojo.indexOf(this.getChildren(),_1b1);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_1b2){_1b2.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 _1b3=dijit.getEnclosingWidget(this.domNode.parentNode);return _1b3&&_1b3.isContainer?_1b3:null;},_getSibling:function(_1b4){var node=this.domNode;do{node=node[_1b4+"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,buildRendering:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitContainer");},startup:function(){if(this._started){return;}this.inherited(arguments);var _1b5=this.getParent&&this.getParent();if(!(_1b5&&_1b5.isLayoutContainer)){this.resize();this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){this.resize();});}},resize:function(_1b6,_1b7){var node=this.domNode;if(_1b6){dojo.marginBox(node,_1b6);if(_1b6.t){node.style.top=_1b6.t+"px";}if(_1b6.l){node.style.left=_1b6.l+"px";}}var mb=_1b7||{};dojo.mixin(mb,_1b6||{});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(_1b8){var cls=this.baseClass+"-child "+(_1b8.baseClass?this.baseClass+"-"+_1b8.baseClass:"");dojo.addClass(_1b8.domNode,cls);},addChild:function(_1b9,_1ba){this.inherited(arguments);if(this._started){this._setupChild(_1b9);}},removeChild:function(_1bb){var cls=this.baseClass+"-child"+(_1bb.baseClass?" "+this.baseClass+"-"+_1bb.baseClass:"");dojo.removeClass(_1bb.domNode,cls);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 _1bc=function(word){return word.substring(0,1).toUpperCase()+word.substring(1);};var size=function(_1bd,dim){var _1be=_1bd.resize?_1bd.resize(dim):dojo.marginBox(_1bd.domNode,dim);if(_1be){dojo.mixin(_1bd,_1be);}else{dojo.mixin(_1bd,dojo.marginBox(_1bd.domNode));dojo.mixin(_1bd,dim);}};dijit.layout.layoutChildren=function(_1bf,dim,_1c0,_1c1,_1c2){dim=dojo.mixin({},dim);dojo.addClass(_1bf,"dijitLayoutContainer");_1c0=dojo.filter(_1c0,function(item){return item.region!="center"&&item.layoutAlign!="client";}).concat(dojo.filter(_1c0,function(item){return item.region=="center"||item.layoutAlign=="client";}));dojo.forEach(_1c0,function(_1c3){var elm=_1c3.domNode,pos=(_1c3.region||_1c3.layoutAlign);var _1c4=elm.style;_1c4.left=dim.l+"px";_1c4.top=dim.t+"px";_1c4.position="absolute";dojo.addClass(elm,"dijitAlign"+_1bc(pos));var _1c5={};if(_1c1&&_1c1==_1c3.id){_1c5[_1c3.region=="top"||_1c3.region=="bottom"?"h":"w"]=_1c2;}if(pos=="top"||pos=="bottom"){_1c5.w=dim.w;size(_1c3,_1c5);dim.h-=_1c3.h;if(pos=="top"){dim.t+=_1c3.h;}else{_1c4.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){_1c5.h=dim.h;size(_1c3,_1c5);dim.w-=_1c3.w;if(pos=="left"){dim.l+=_1c3.w;}else{_1c4.left=dim.l+dim.w+"px";}}else{if(pos=="client"||pos=="center"){size(_1c3,dim);}}}});};})();}if(!dojo._hasResource["dijit._CssStateMixin"]){dojo._hasResource["dijit._CssStateMixin"]=true;dojo.provide("dijit._CssStateMixin");dojo.declare("dijit._CssStateMixin",[],{cssStateNodes:{},hovering:false,active:false,_applyAttributes:function(){this.inherited(arguments);dojo.forEach(["onmouseenter","onmouseleave","onmousedown"],function(e){this.connect(this.domNode,e,"_cssMouseEvent");},this);dojo.forEach(["disabled","readOnly","checked","selected","focused","state","hovering","active"],function(attr){this.watch(attr,dojo.hitch(this,"_setStateClass"));},this);for(var ap in this.cssStateNodes){this._trackMouseState(this[ap],this.cssStateNodes[ap]);}this._setStateClass();},_cssMouseEvent:function(_1c6){if(!this.disabled){switch(_1c6.type){case "mouseenter":case "mouseover":this._set("hovering",true);this._set("active",this._mouseDown);break;case "mouseleave":case "mouseout":this._set("hovering",false);this._set("active",false);break;case "mousedown":this._set("active",true);this._mouseDown=true;var _1c7=this.connect(dojo.body(),"onmouseup",function(){this._mouseDown=false;this._set("active",false);this.disconnect(_1c7);});break;}}},_setStateClass:function(){var _1c8=this.baseClass.split(" ");function _1c9(_1ca){_1c8=_1c8.concat(dojo.map(_1c8,function(c){return c+_1ca;}),"dijit"+_1ca);};if(!this.isLeftToRight()){_1c9("Rtl");}if(this.checked){_1c9("Checked");}if(this.state){_1c9(this.state);}if(this.selected){_1c9("Selected");}if(this.disabled){_1c9("Disabled");}else{if(this.readOnly){_1c9("ReadOnly");}else{if(this.active){_1c9("Active");}else{if(this.hovering){_1c9("Hover");}}}}if(this._focused){_1c9("Focused");}var tn=this.stateNode||this.domNode,_1cb={};dojo.forEach(tn.className.split(" "),function(c){_1cb[c]=true;});if("_stateClasses" in this){dojo.forEach(this._stateClasses,function(c){delete _1cb[c];});}dojo.forEach(_1c8,function(c){_1cb[c]=true;});var _1cc=[];for(var c in _1cb){_1cc.push(c);}tn.className=_1cc.join(" ");this._stateClasses=_1c8;},_trackMouseState:function(node,_1cd){var _1ce=false,_1cf=false,_1d0=false;var self=this,cn=dojo.hitch(this,"connect",node);function _1d1(){var _1d2=("disabled" in self&&self.disabled)||("readonly" in self&&self.readonly);dojo.toggleClass(node,_1cd+"Hover",_1ce&&!_1cf&&!_1d2);dojo.toggleClass(node,_1cd+"Active",_1cf&&!_1d2);dojo.toggleClass(node,_1cd+"Focused",_1d0&&!_1d2);};cn("onmouseenter",function(){_1ce=true;_1d1();});cn("onmouseleave",function(){_1ce=false;_1cf=false;_1d1();});cn("onmousedown",function(){_1cf=true;_1d1();});cn("onmouseup",function(){_1cf=false;_1d1();});cn("onfocus",function(){_1d0=true;_1d1();});cn("onblur",function(){_1d0=false;_1d1();});this.watch("disabled",_1d1);this.watch("readOnly",_1d1);}});}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,dijit._CssStateMixin],{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.replace(/'/g,"&quot;")+"\""):"";this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousedown","_onMouseDown");},_setDisabledAttr:function(_1d3){this._set("disabled",_1d3);dojo.attr(this.focusNode,"disabled",_1d3);if(this.valueNode){dojo.attr(this.valueNode,"disabled",_1d3);}dijit.setWaiState(this.focusNode,"disabled",_1d3);if(_1d3){this._set("hovering",false);this._set("active",false);var _1d4="tabIndex" in this.attributeMap?this.attributeMap.tabIndex:"focusNode";dojo.forEach(dojo.isArray(_1d4)?_1d4:[_1d4],function(_1d5){var node=this[_1d5];if(dojo.isWebKit||dijit.hasDefaultTabStop(node)){node.setAttribute("tabIndex","-1");}else{node.removeAttribute("tabIndex");}},this);}else{if(this.tabIndex!=""){this.focusNode.setAttribute("tabIndex",this.tabIndex);}}},setDisabled:function(_1d6){dojo.deprecated("setDisabled("+_1d6+") is deprecated. Use set('disabled',"+_1d6+") instead.","","2.0");this.set("disabled",_1d6);},_onFocus:function(e){if(this.scrollOnFocus){dojo.window.scrollIntoView(this.domNode);}this.inherited(arguments);},isFocusable:function(){return !this.disabled&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");},focus:function(){if(!this.disabled){dijit.focus(this.focusNode);}},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(_1d7){},_onChangeActive:false,_handleOnChange:function(_1d8,_1d9){if(this._lastValueReported==undefined&&(_1d9===null||!this._onChangeActive)){this._resetValue=this._lastValueReported=_1d8;}this._pendingOnChange=this._pendingOnChange||(typeof _1d8!=typeof this._lastValueReported)||(this.compare(_1d8,this._lastValueReported)!=0);if((this.intermediateChanges||_1d9||_1d9===undefined)&&this._pendingOnChange){this._lastValueReported=_1d8;this._pendingOnChange=false;if(this._onChangeActive){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);}this._onChangeHandle=setTimeout(dojo.hitch(this,function(){this._onChangeHandle=null;this.onChange(_1d8);}),0);}}},create:function(){this.inherited(arguments);this._onChangeActive=true;},destroy:function(){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);this.onChange(this._lastValueReported);}this.inherited(arguments);},setValue:function(_1da){dojo.deprecated("dijit.form._FormWidget:setValue("+_1da+") is deprecated.  Use set('value',"+_1da+") instead.","","2.0");this.set("value",_1da);},getValue:function(){dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_onMouseDown:function(e){if(!e.ctrlKey&&dojo.mouseButtons.isLeft(e)&&this.isFocusable()){var _1db=this.connect(dojo.body(),"onmouseup",function(){if(this.isFocusable()){this.focus();}this.disconnect(_1db);});}}});dojo.declare("dijit.form._FormValueWidget",dijit.form._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_1dc){dojo.attr(this.focusNode,"readOnly",_1dc);dijit.setWaiState(this.focusNode,"readonly",_1dc);this._set("readOnly",_1dc);},postCreate:function(){this.inherited(arguments);if(dojo.isIE<9||(dojo.isIE&&dojo.isQuirks)){this.connect(this.focusNode||this.domNode,"onkeydown",this._onKeyDown);}if(this._resetValue===undefined){this._lastValueReported=this._resetValue=this.value;}},_setValueAttr:function(_1dd,_1de){this._handleOnChange(_1dd,_1de);},_handleOnChange:function(_1df,_1e0){this._set("value",_1df);this.inherited(arguments);},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 _1e1=this.domNode;var _1e2=_1e1.parentNode;var _1e3=_1e1.firstChild||_1e1;var _1e4=_1e3.style.filter;var _1e5=this;while(_1e2&&_1e2.clientHeight==0){(function ping(){var _1e6=_1e5.connect(_1e2,"onscroll",function(e){_1e5.disconnect(_1e6);_1e3.style.filter=(new Date()).getMilliseconds();setTimeout(function(){_1e3.style.filter=_1e4;},0);});})();_1e2=_1e2.parentNode;}}}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");}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(args){var _1e7=this;dojo.mixin(_1e7,args);_1e7.node=args.node;_1e7._showArgs=dojo.mixin({},args);_1e7._showArgs.node=_1e7.node;_1e7._showArgs.duration=_1e7.showDuration;_1e7.showAnim=_1e7.showFunc(_1e7._showArgs);_1e7._hideArgs=dojo.mixin({},args);_1e7._hideArgs.node=_1e7.node;_1e7._hideArgs.duration=_1e7.hideDuration;_1e7.hideAnim=_1e7.hideFunc(_1e7._hideArgs);dojo.connect(_1e7.showAnim,"beforeBegin",dojo.hitch(_1e7.hideAnim,"stop",true));dojo.connect(_1e7.hideAnim,"beforeBegin",dojo.hitch(_1e7.showAnim,"stop",true));},show:function(_1e8){return this.showAnim.play(_1e8||0);},hide:function(_1e9){return this.hideAnim.play(_1e9||0);}});}if(!dojo._hasResource["dojo.fx"]){dojo._hasResource["dojo.fx"]=true;dojo.provide("dojo.fx");(function(){var d=dojo,_1ea={_fire:function(evt,args){if(this[evt]){this[evt].apply(this,args||[]);}return this;}};var _1eb=function(_1ec){this._index=-1;this._animations=_1ec||[];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(_1eb,{_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{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(_1ed,_1ee){if(!this._current){this._current=this._animations[this._index=0];}if(!_1ee&&this._current.status()=="playing"){return this;}var _1ef=d.connect(this._current,"beforeBegin",this,function(){this._fire("beforeBegin");}),_1f0=d.connect(this._current,"onBegin",this,function(arg){this._fire("onBegin",arguments);}),_1f1=d.connect(this._current,"onPlay",this,function(arg){this._fire("onPlay",arguments);d.disconnect(_1ef);d.disconnect(_1f0);d.disconnect(_1f1);});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(_1f2,_1f3){this.pause();var _1f4=this.duration*_1f2;this._current=null;d.some(this._animations,function(a){if(a.duration<=_1f4){this._current=a;return true;}_1f4-=a.duration;return false;});if(this._current){this._current.gotoPercent(_1f4/this._current.duration,_1f3);}return this;},stop:function(_1f5){if(this._current){if(_1f5){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(_1eb,_1ea);dojo.fx.chain=function(_1f6){return new _1eb(_1f6);};var _1f7=function(_1f8){this._animations=_1f8||[];this._connects=[];this._finished=0;this.duration=0;d.forEach(_1f8,function(a){var _1f9=a.duration;if(a.delay){_1f9+=a.delay;}if(this.duration<_1f9){this.duration=_1f9;}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(_1f7,{_doAction:function(_1fa,args){d.forEach(this._animations,function(a){a[_1fa].apply(a,args);});return this;},_onEnd:function(){if(++this._finished>this._animations.length){this._fire("onEnd");}},_call:function(_1fb,args){var t=this._pseudoAnimation;t[_1fb].apply(t,args);},play:function(_1fc,_1fd){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(_1fe,_1ff){var ms=this.duration*_1fe;d.forEach(this._animations,function(a){a.gotoPercent(a.duration<ms?1:(ms/a.duration),_1ff);});this._call("gotoPercent",arguments);return this;},stop:function(_200){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(_1f7,_1ea);dojo.fx.combine=function(_201){return new _1f7(_201);};dojo.fx.wipeIn=function(args){var node=args.node=d.byId(args.node),s=node.style,o;var anim=d.animateProperty(d.mixin({properties:{height:{start:function(){o=s.overflow;s.overflow="hidden";if(s.visibility=="hidden"||s.display=="none"){s.height="1px";s.display="";s.visibility="";return 1;}else{var _202=d.style(node,"height");return Math.max(_202,1);}},end:function(){return node.scrollHeight;}}}},args));d.connect(anim,"onEnd",function(){s.height="auto";s.overflow=o;});return anim;};dojo.fx.wipeOut=function(args){var node=args.node=d.byId(args.node),s=node.style,o;var anim=d.animateProperty(d.mixin({properties:{height:{end:1}}},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.fx.slideTo=function(args){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;};})();}if(!dojo._hasResource["dojo.NodeList-fx"]){dojo._hasResource["dojo.NodeList-fx"]=true;dojo.provide("dojo.NodeList-fx");dojo.extend(dojo.NodeList,{_anim:function(obj,_203,args){args=args||{};var a=dojo.fx.combine(this.map(function(item){var _204={node:item};dojo.mixin(_204,args);return obj[_203](_204);}));return args.auto?a.play()&&this:a;},wipeIn:function(args){return this._anim(dojo.fx,"wipeIn",args);},wipeOut:function(args){return this._anim(dojo.fx,"wipeOut",args);},slideTo:function(args){return this._anim(dojo.fx,"slideTo",args);},fadeIn:function(args){return this._anim(dojo,"fadeIn",args);},fadeOut:function(args){return this._anim(dojo,"fadeOut",args);},animateProperty:function(args){return this._anim(dojo,"animateProperty",args);},anim:function(_205,_206,_207,_208,_209){var _20a=dojo.fx.combine(this.map(function(item){return dojo.animateProperty({node:item,properties:_205,duration:_206||350,easing:_207});}));if(_208){dojo.connect(_20a,"onEnd",_208);}return _20a.play(_209||0);}});}if(!dojo._hasResource["dojo.colors"]){dojo._hasResource["dojo.colors"]=true;dojo.provide("dojo.colors");dojo.getObject("colors",true,dojo);(function(){var _20b=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(_20c,obj){var m=_20c.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)=="%"){a=dojo.map(c,function(x){return parseFloat(x)*2.56;});if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,obj);}return dojo.colorFromArray(c,obj);}if((t=="hsl"&&l==3)||(t=="hsla"&&l==4)){var H=((parseFloat(c[0])%360)+360)%360/360,S=parseFloat(c[1])/100,L=parseFloat(c[2])/100,m2=L<=0.5?L*(S+1):L+S-L*S,m1=2*L-m2;a=[_20b(m1,m2,H+1/3)*256,_20b(m1,m2,H)*256,_20b(m1,m2,H-1/3)*256,1];if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,obj);}}return null;};var _20d=function(c,low,high){c=Number(c);return isNaN(c)?high:c<low?low:c>high?high:c;};dojo.Color.prototype.sanitize=function(){var t=this;t.r=Math.round(_20d(t.r,0,255));t.g=Math.round(_20d(t.g,0,255));t.b=Math.round(_20d(t.b,0,255));t.a=_20d(t.a,0,1);return this;};})();dojo.colors.makeGrey=function(g,a){return dojo.colorFromArray([g,g,g,a]);};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["dojo.i18n"]){dojo._hasResource["dojo.i18n"]=true;dojo.provide("dojo.i18n");dojo.getObject("i18n",true,dojo);dojo.i18n.getLocalization=dojo.i18n.getLocalization||function(_20e,_20f,_210){_210=dojo.i18n.normalizeLocale(_210);var _211=_210.split("-");var _212=[_20e,"nls",_20f].join(".");var _213=dojo._loadedModules[_212];if(_213){var _214;for(var i=_211.length;i>0;i--){var loc=_211.slice(0,i).join("_");if(_213[loc]){_214=_213[loc];break;}}if(!_214){_214=_213.ROOT;}if(_214){var _215=function(){};_215.prototype=_214;return new _215();}}throw new Error("Bundle not found: "+_20f+" in "+_20e+" , locale="+_210);};dojo.i18n.normalizeLocale=function(_216){var _217=_216?_216.toLowerCase():dojo.locale;if(_217=="root"){_217="ROOT";}return _217;};dojo.i18n._requireLocalization=function(_218,_219,_21a,_21b){var _21c=dojo.i18n.normalizeLocale(_21a);var _21d=[_218,"nls",_219].join(".");var _21e="";if(_21b){var _21f=_21b.split(",");for(var i=0;i<_21f.length;i++){if(_21c["indexOf"](_21f[i])==0){if(_21f[i].length>_21e.length){_21e=_21f[i];}}}if(!_21e){_21e="ROOT";}}var _220=_21b?_21e:_21c;var _221=dojo._loadedModules[_21d];var _222=null;if(_221){if(dojo.config.localizationComplete&&_221._built){return;}var _223=_220.replace(/-/g,"_");var _224=_21d+"."+_223;_222=dojo._loadedModules[_224];}if(!_222){_221=dojo["provide"](_21d);var syms=dojo._getModuleSymbols(_218);var _225=syms.concat("nls").join("/");var _226;dojo.i18n._searchLocalePath(_220,_21b,function(loc){var _227=loc.replace(/-/g,"_");var _228=_21d+"."+_227;var _229=false;if(!dojo._loadedModules[_228]){dojo["provide"](_228);var _22a=[_225];if(loc!="ROOT"){_22a.push(loc);}_22a.push(_219);var _22b=_22a.join("/")+".js";_229=dojo._loadPath(_22b,null,function(hash){hash=hash.root||hash;var _22c=function(){};_22c.prototype=_226;_221[_227]=new _22c();for(var j in hash){_221[_227][j]=hash[j];}});}else{_229=true;}if(_229&&_221[_227]){_226=_221[_227];}else{_221[_227]=_226;}if(_21b){return true;}});}if(_21b&&_21c!=_21e){_221[_21c.replace(/-/g,"_")]=_221[_21e.replace(/-/g,"_")];}};(function(){var _22d=dojo.config.extraLocale;if(_22d){if(!_22d instanceof Array){_22d=[_22d];}var req=dojo.i18n._requireLocalization;dojo.i18n._requireLocalization=function(m,b,_22e,_22f){req(m,b,_22e,_22f);if(_22e){return;}for(var i=0;i<_22d.length;i++){req(m,b,_22d[i],_22f);}};}})();dojo.i18n._searchLocalePath=function(_230,down,_231){_230=dojo.i18n.normalizeLocale(_230);var _232=_230.split("-");var _233=[];for(var i=_232.length;i>0;i--){_233.push(_232.slice(0,i).join("-"));}_233.push(false);if(down){_233.reverse();}for(var j=_233.length-1;j>=0;j--){var loc=_233[j]||"ROOT";var stop=_231(loc);if(stop){break;}}};dojo.i18n._preloadLocalizations=function(_234,_235){function _236(_237){_237=dojo.i18n.normalizeLocale(_237);dojo.i18n._searchLocalePath(_237,true,function(loc){for(var i=0;i<_235.length;i++){if(_235[i]==loc){dojo["require"](_234+"_"+loc);return true;}}return false;});};_236();var _238=dojo.config.extraLocale||[];for(var i=0;i<_238.length;i++){_236(_238[i]);}};}if(!dojo._hasResource["dijit._PaletteMixin"]){dojo._hasResource["dijit._PaletteMixin"]=true;dojo.provide("dijit._PaletteMixin");dojo.declare("dijit._PaletteMixin",[dijit._CssStateMixin],{defaultTimeout:500,timeoutChangeRate:0.9,value:null,_selectedCell:-1,tabIndex:"0",cellClass:"dijitPaletteCell",dyeClass:"",_preparePalette:function(_239,_23a,_23b){this._cells=[];var url=this._blankGif;_23b=_23b||dojo.getObject(this.dyeClass);for(var row=0;row<_239.length;row++){var _23c=dojo.create("tr",{tabIndex:"-1"},this.gridNode);for(var col=0;col<_239[row].length;col++){var _23d=_239[row][col];if(_23d){var _23e=new _23b(_23d,row,col);var _23f=dojo.create("td",{"class":this.cellClass,tabIndex:"-1",title:_23a[_23d]});_23e.fillCell(_23f,url);this.connect(_23f,"ondijitclick","_onCellClick");this._trackMouseState(_23f,this.cellClass);dojo.place(_23f,_23c);_23f.index=this._cells.length;this._cells.push({node:_23f,dye:_23e});}}}this._xDim=_239[0].length;this._yDim=_239.length;var _240={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:this.isLeftToRight()?1:-1,LEFT_ARROW:this.isLeftToRight()?-1:1};for(var key in _240){this._connects.push(dijit.typematic.addKeyListener(this.domNode,{charOrCode:dojo.keys[key],ctrlKey:false,altKey:false,shiftKey:false},this,function(){var _241=_240[key];return function(_242){this._navigateByKey(_241,_242);};}(),this.timeoutChangeRate,this.defaultTimeout));}},postCreate:function(){this.inherited(arguments);this._setCurrent(this._cells[0].node);},focus:function(){dijit.focus(this._currentFocus);},_onCellClick:function(evt){var _243=evt.currentTarget,_244=this._getDye(_243).getValue();this._setCurrent(_243);setTimeout(dojo.hitch(this,function(){dijit.focus(_243);this._setValueAttr(_244,true);}));dojo.removeClass(_243,"dijitPaletteCellHover");dojo.stopEvent(evt);},_setCurrent:function(node){if("_currentFocus" in this){dojo.attr(this._currentFocus,"tabIndex","-1");}this._currentFocus=node;if(node){dojo.attr(node,"tabIndex",this.tabIndex);}},_setValueAttr:function(_245,_246){if(this._selectedCell>=0){dojo.removeClass(this._cells[this._selectedCell].node,"dijitPaletteCellSelected");}this._selectedCell=-1;if(_245){for(var i=0;i<this._cells.length;i++){if(_245==this._cells[i].dye.getValue()){this._selectedCell=i;dojo.addClass(this._cells[i].node,"dijitPaletteCellSelected");break;}}}this._set("value",this._selectedCell>=0?_245:null);if(_246||_246===undefined){this.onChange(_245);}},onChange:function(_247){},_navigateByKey:function(_248,_249){if(_249==-1){return;}var _24a=this._currentFocus.index+_248;if(_24a<this._cells.length&&_24a>-1){var _24b=this._cells[_24a].node;this._setCurrent(_24b);setTimeout(dojo.hitch(dijit,"focus",_24b),0);}},_getDye:function(cell){return this._cells[cell.index].dye;}});}if(!dojo._hasResource["dijit.ColorPalette"]){dojo._hasResource["dijit.ColorPalette"]=true;dojo.provide("dijit.ColorPalette");dojo.declare("dijit.ColorPalette",[dijit._Widget,dijit._Templated,dijit._PaletteMixin],{palette:"7x10",_palettes:{"7x10":[["white","seashell","cornsilk","lemonchiffon","lightyellow","palegreen","paleturquoise","lightcyan","lavender","plum"],["lightgray","pink","bisque","moccasin","khaki","lightgreen","lightseagreen","lightskyblue","cornflowerblue","violet"],["silver","lightcoral","sandybrown","orange","palegoldenrod","chartreuse","mediumturquoise","skyblue","mediumslateblue","orchid"],["gray","red","orangered","darkorange","yellow","limegreen","darkseagreen","royalblue","slateblue","mediumorchid"],["dimgray","crimson","chocolate","coral","gold","forestgreen","seagreen","blue","blueviolet","darkorchid"],["darkslategray","firebrick","saddlebrown","sienna","olive","green","darkcyan","mediumblue","darkslateblue","darkmagenta"],["black","darkred","maroon","brown","darkolivegreen","darkgreen","midnightblue","navy","indigo","purple"]],"3x4":[["white","lime","green","blue"],["silver","yellow","fuchsia","navy"],["gray","red","purple","black"]]},templateString:dojo.cache("dijit","templates/ColorPalette.html","<div class=\"dijitInline dijitColorPalette\">\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),baseClass:"dijitColorPalette",buildRendering:function(){this.inherited(arguments);this._preparePalette(this._palettes[this.palette],dojo.i18n.getLocalization("dojo","colors",this.lang),dojo.declare(dijit._Color,{hc:dojo.hasClass(dojo.body(),"dijit_a11y"),palette:this.palette}));}});dojo.declare("dijit._Color",dojo.Color,{template:"<span class='dijitInline dijitPaletteImg'>"+"<img src='${blankGif}' alt='${alt}' class='dijitColorPaletteSwatch' style='background-color: ${color}'/>"+"</span>",hcTemplate:"<span class='dijitInline dijitPaletteImg' style='position: relative; overflow: hidden; height: 12px; width: 14px;'>"+"<img src='${image}' alt='${alt}' style='position: absolute; left: ${left}px; top: ${top}px; ${size}'/>"+"</span>",_imagePaths:{"7x10":dojo.moduleUrl("dijit.themes","a11y/colors7x10.png"),"3x4":dojo.moduleUrl("dijit.themes","a11y/colors3x4.png")},constructor:function(_24c,row,col){this._alias=_24c;this._row=row;this._col=col;this.setColor(dojo.Color.named[_24c]);},getValue:function(){return this.toHex();},fillCell:function(cell,_24d){var html=dojo.string.substitute(this.hc?this.hcTemplate:this.template,{color:this.toHex(),blankGif:_24d,alt:this._alias,image:this._imagePaths[this.palette].toString(),left:this._col*-20-5,top:this._row*-20-5,size:this.palette=="7x10"?"height: 145px; width: 206px":"height: 64px; width: 86px"});dojo.place(html,cell);}});}if(!dojo._hasResource["dojo.dnd.common"]){dojo._hasResource["dojo.dnd.common"]=true;dojo.provide("dojo.dnd.common");dojo.getObject("dnd",true,dojo);dojo.dnd.getCopyKeyState=dojo.isCopyKey;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.getObject("dnd",true,dojo);dojo.dnd.getViewport=dojo.window.getBox;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.window.getBox(),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 _24e=n.scrollLeft,_24f=n.scrollTop;n.scrollLeft=n.scrollLeft+dx;n.scrollTop=n.scrollTop+dy;if(_24e!=n.scrollLeft||_24f!=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);var pos=e.touches?e.touches[0]:e;this.marginBox={l:pos.pageX,t:pos.pageY};this.mouseButton=e.button;var h=(this.host=host),d=node.ownerDocument;this.events=[dojo.connect(d,"onmousemove",this,"onFirstMove"),dojo.connect(d,"ontouchmove",this,"onFirstMove"),dojo.connect(d,"onmousemove",this,"onMouseMove"),dojo.connect(d,"ontouchmove",this,"onMouseMove"),dojo.connect(d,"onmouseup",this,"onMouseUp"),dojo.connect(d,"ontouchend",this,"onMouseUp"),dojo.connect(d,"ondragstart",dojo.stopEvent),dojo.connect(d.body,"onselectstart",dojo.stopEvent)];if(h&&h.onMoveStart){h.onMoveStart(this);}},onMouseMove:function(e){dojo.dnd.autoScroll(e);var m=this.marginBox,pos=e.touches?e.touches[0]:e;this.host.onMove(this,{l:m.l+pos.pageX,t:m.t+pos.pageY},e);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(e){var s=this.node.style,l,t,h=this.host;switch(s.position){case "relative":case "absolute":l=Math.round(parseFloat(s.left))||0;t=Math.round(parseFloat(s.top))||0;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,e);}dojo.disconnect(this.events.shift());dojo.disconnect(this.events.shift());},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,_250){this.node=dojo.byId(node);if(!_250){_250={};}this.handle=_250.handle?dojo.byId(_250.handle):null;if(!this.handle){this.handle=this.node;}this.delay=_250.delay>0?_250.delay:0;this.skip=_250.skip;this.mover=_250.mover?_250.mover:dojo.dnd.Mover;this.events=[dojo.connect(this.handle,"onmousedown",this,"onMouseDown"),dojo.connect(this.handle,"ontouchstart",this,"onMouseDown"),dojo.connect(this.handle,"ondragstart",this,"onSelectStart"),dojo.connect(this.handle,"onselectstart",this,"onSelectStart")];},markupFactory:function(_251,node){return new dojo.dnd.Moveable(node,_251);},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,"ontouchmove",this,"onMouseMove"),dojo.connect(this.handle,"onmouseup",this,"onMouseUp"),dojo.connect(this.handle,"ontouchend",this,"onMouseUp"));var pos=e.touches?e.touches[0]:e;this._lastX=pos.pageX;this._lastY=pos.pageY;}else{this.onDragDetected(e);}dojo.stopEvent(e);},onMouseMove:function(e){var pos=e.touches?e.touches[0]:e;if(Math.abs(pos.pageX-this._lastX)>this.delay||Math.abs(pos.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(_252){dojo.publish("/dnd/move/start",[_252]);dojo.addClass(dojo.body(),"dojoMove");dojo.addClass(this.node,"dojoMoveItem");},onMoveStop:function(_253){dojo.publish("/dnd/move/stop",[_253]);dojo.removeClass(dojo.body(),"dojoMove");dojo.removeClass(this.node,"dojoMoveItem");},onFirstMove:function(_254,e){},onMove:function(_255,_256,e){this.onMoving(_255,_256);var s=_255.node.style;s.left=_256.l+"px";s.top=_256.t+"px";this.onMoved(_255,_256);},onMoving:function(_257,_258){},onMoved:function(_259,_25a){}});}if(!dojo._hasResource["dojo.dnd.move"]){dojo._hasResource["dojo.dnd.move"]=true;dojo.provide("dojo.dnd.move");dojo.declare("dojo.dnd.move.constrainedMoveable",dojo.dnd.Moveable,{constraints:function(){},within:false,markupFactory:function(_25b,node){return new dojo.dnd.move.constrainedMoveable(node,_25b);},constructor:function(node,_25c){if(!_25c){_25c={};}this.constraints=_25c.constraints;this.within=_25c.within;},onFirstMove:function(_25d){var c=this.constraintBox=this.constraints.call(this,_25d);c.r=c.l+c.w;c.b=c.t+c.h;if(this.within){var mb=dojo._getMarginSize(_25d.node);c.r-=mb.w;c.b-=mb.h;}},onMove:function(_25e,_25f){var c=this.constraintBox,s=_25e.node.style;this.onMoving(_25e,_25f);_25f.l=_25f.l<c.l?c.l:c.r<_25f.l?c.r:_25f.l;_25f.t=_25f.t<c.t?c.t:c.b<_25f.t?c.b:_25f.t;s.left=_25f.l+"px";s.top=_25f.t+"px";this.onMoved(_25e,_25f);}});dojo.declare("dojo.dnd.move.boxConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{box:{},markupFactory:function(_260,node){return new dojo.dnd.move.boxConstrainedMoveable(node,_260);},constructor:function(node,_261){var box=_261&&_261.box;this.constraints=function(){return box;};}});dojo.declare("dojo.dnd.move.parentConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{area:"content",markupFactory:function(_262,node){return new dojo.dnd.move.parentConstrainedMoveable(node,_262);},constructor:function(node,_263){var area=_263&&_263.area;this.constraints=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(area=="margin"){return mb;}var t=dojo._getMarginExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(area=="border"){return mb;}t=dojo._getBorderExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(area=="padding"){return mb;}t=dojo._getPadExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;return mb;};}});dojo.dnd.constrainedMover=dojo.dnd.move.constrainedMover;dojo.dnd.boxConstrainedMover=dojo.dnd.move.boxConstrainedMover;dojo.dnd.parentConstrainedMover=dojo.dnd.move.parentConstrainedMover;}if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){dojo._hasResource["dojo.dnd.TimedMoveable"]=true;dojo.provide("dojo.dnd.TimedMoveable");(function(){var _264=dojo.dnd.Moveable.prototype.onMove;dojo.declare("dojo.dnd.TimedMoveable",dojo.dnd.Moveable,{timeout:40,constructor:function(node,_265){if(!_265){_265={};}if(_265.timeout&&typeof _265.timeout=="number"&&_265.timeout>=0){this.timeout=_265.timeout;}},markupFactory:function(_266,node){return new dojo.dnd.TimedMoveable(node,_266);},onMoveStop:function(_267){if(_267._timer){clearTimeout(_267._timer);_264.call(this,_267,_267._leftTop);}dojo.dnd.Moveable.prototype.onMoveStop.apply(this,arguments);},onMove:function(_268,_269){_268._leftTop=_269;if(!_268._timer){var _26a=this;_268._timer=setTimeout(function(){_268._timer=null;_264.call(_26a,_268,_268._leftTop);},this.timeout);}}});})();}if(!dojo._hasResource["dijit.form._FormMixin"]){dojo._hasResource["dijit.form._FormMixin"]=true;dojo.provide("dijit.form._FormMixin");dojo.declare("dijit.form._FormMixin",null,{state:"",reset:function(){dojo.forEach(this.getDescendants(),function(_26b){if(_26b.reset){_26b.reset();}});},validate:function(){var _26c=false;return dojo.every(dojo.map(this.getDescendants(),function(_26d){_26d._hasBeenBlurred=true;var _26e=_26d.disabled||!_26d.validate||_26d.validate();if(!_26e&&!_26c){dojo.window.scrollIntoView(_26d.containerNode||_26d.domNode);_26d.focus();_26c=true;}return _26e;}),function(item){return item;});},setValues:function(val){dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(obj){var map={};dojo.forEach(this.getDescendants(),function(_26f){if(!_26f.name){return;}var _270=map[_26f.name]||(map[_26f.name]=[]);_270.push(_26f);});for(var name in map){if(!map.hasOwnProperty(name)){continue;}var _271=map[name],_272=dojo.getObject(name,false,obj);if(_272===undefined){continue;}if(!dojo.isArray(_272)){_272=[_272];}if(typeof _271[0].checked=="boolean"){dojo.forEach(_271,function(w,i){w.set("value",dojo.indexOf(_272,w.value)!=-1);});}else{if(_271[0].multiple){_271[0].set("value",_272);}else{dojo.forEach(_271,function(w,i){w.set("value",_272[i]);});}}}},getValues:function(){dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_getValueAttr:function(){var obj={};dojo.forEach(this.getDescendants(),function(_273){var name=_273.name;if(!name||_273.disabled){return;}var _274=_273.get("value");if(typeof _273.checked=="boolean"){if(/Radio/.test(_273.declaredClass)){if(_274!==false){dojo.setObject(name,_274,obj);}else{_274=dojo.getObject(name,false,obj);if(_274===undefined){dojo.setObject(name,null,obj);}}}else{var ary=dojo.getObject(name,false,obj);if(!ary){ary=[];dojo.setObject(name,ary,obj);}if(_274!==false){ary.push(_274);}}}else{var prev=dojo.getObject(name,false,obj);if(typeof prev!="undefined"){if(dojo.isArray(prev)){prev.push(_274);}else{dojo.setObject(name,[prev,_274],obj);}}else{dojo.setObject(name,_274,obj);}}});return obj;},isValid:function(){return this.state=="";},onValidStateChange:function(_275){},_getState:function(){var _276=dojo.map(this._descendants,function(w){return w.get("state")||"";});return dojo.indexOf(_276,"Error")>=0?"Error":dojo.indexOf(_276,"Incomplete")>=0?"Incomplete":"";},disconnectChildren:function(){dojo.forEach(this._childConnections||[],dojo.hitch(this,"disconnect"));dojo.forEach(this._childWatches||[],function(w){w.unwatch();});},connectChildren:function(_277){var _278=this;this.disconnectChildren();this._descendants=this.getDescendants();var set=_277?function(name,val){_278[name]=val;}:dojo.hitch(this,"_set");set("value",this.get("value"));set("state",this._getState());var _279=(this._childConnections=[]),_27a=(this._childWatches=[]);dojo.forEach(dojo.filter(this._descendants,function(item){return item.validate;}),function(_27b){dojo.forEach(["state","disabled"],function(attr){_27a.push(_27b.watch(attr,function(attr,_27c,_27d){_278.set("state",_278._getState());}));});});var _27e=function(){if(_278._onChangeDelayTimer){clearTimeout(_278._onChangeDelayTimer);}_278._onChangeDelayTimer=setTimeout(function(){delete _278._onChangeDelayTimer;_278._set("value",_278.get("value"));},10);};dojo.forEach(dojo.filter(this._descendants,function(item){return item.onChange;}),function(_27f){_279.push(_278.connect(_27f,"onChange",_27e));_27a.push(_27f.watch("disabled",_27e));});},startup:function(){this.inherited(arguments);this.connectChildren(true);this.watch("state",function(attr,_280,_281){this.onValidStateChange(_281=="");});},destroy:function(){this.disconnectChildren();this.inherited(arguments);}});}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(_282){},onCancel:function(){},onExecute:function(){},_onSubmit:function(){this.onExecute();this.execute(this.get("value"));},_getFocusItems:function(){var _283=dijit._getTabNavigable(this.containerNode);this._firstFocusItem=_283.lowest||_283.first||this.closeButtonNode||this.domNode;this._lastFocusItem=_283.last||_283.highest||this._firstFocusItem;}});}if(!dojo._hasResource["dijit.DialogUnderlay"]){dojo._hasResource["dijit.DialogUnderlay"]=true;dojo.provide("dijit.DialogUnderlay");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");this._set("dialogId",id);},_setClassAttr:function(_284){this.node.className="dijitDialogUnderlay "+_284;this._set("class",_284);},postCreate:function(){dojo.body().appendChild(this.domNode);},layout:function(){var is=this.node.style,os=this.domNode.style;os.display="none";var _285=dojo.window.getBox();os.top=_285.t+"px";os.left=_285.l+"px";is.width=_285.w+"px";is.height=_285.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();delete this.bgIframe;this.domNode.style.display="none";}});}if(!dojo._hasResource["dijit.layout._ContentPaneResizeMixin"]){dojo._hasResource["dijit.layout._ContentPaneResizeMixin"]=true;dojo.provide("dijit.layout._ContentPaneResizeMixin");dojo.declare("dijit.layout._ContentPaneResizeMixin",null,{doLayout:true,isContainer:true,isLayoutContainer:true,_startChildren:function(){dojo.forEach(this.getChildren(),function(_286){_286.startup();_286._started=true;});},startup:function(){if(this._started){return;}var _287=dijit._Contained.prototype.getParent.call(this);this._childOfLayoutWidget=_287&&_287.isLayoutContainer;this._needLayout=!this._childOfLayoutWidget;this.inherited(arguments);this._startChildren();if(this._isShown()){this._onShow();}if(!this._childOfLayoutWidget){this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){this._needLayout=!this._childOfLayoutWidget;this.resize();});}},_checkIfSingleChild:function(){var _288=dojo.query("> *",this.containerNode).filter(function(node){return node.tagName!=="SCRIPT";}),_289=_288.filter(function(node){return dojo.hasAttr(node,"data-dojo-type")||dojo.hasAttr(node,"dojoType")||dojo.hasAttr(node,"widgetId");}),_28a=dojo.filter(_289.map(dijit.byNode),function(_28b){return _28b&&_28b.domNode&&_28b.resize;});if(_288.length==_289.length&&_28a.length==1){this._singleChild=_28a[0];}else{delete this._singleChild;}dojo.toggleClass(this.containerNode,this.baseClass+"SingleChild",!!this._singleChild);},resize:function(_28c,_28d){if(!this._wasShown&&this.open!==false){this._onShow();}this._resizeCalled=true;this._scheduleLayout(_28c,_28d);},_scheduleLayout:function(_28e,_28f){if(this._isShown()){this._layout(_28e,_28f);}else{this._needLayout=true;this._changeSize=_28e;this._resultSize=_28f;}},_layout:function(_290,_291){if(_290){dojo.marginBox(this.domNode,_290);}var cn=this.containerNode;if(cn===this.domNode){var mb=_291||{};dojo.mixin(mb,_290||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(cn),mb);}this._contentBox=dijit.layout.marginBox2contentBox(cn,mb);}else{this._contentBox=dojo.contentBox(cn);}this._layoutChildren();delete this._needLayout;},_layoutChildren:function(){if(this.doLayout){this._checkIfSingleChild();}if(this._singleChild&&this._singleChild.resize){var cb=this._contentBox||dojo.contentBox(this.containerNode);this._singleChild.resize({w:cb.w,h:cb.h});}else{dojo.forEach(this.getChildren(),function(_292){if(_292.resize){_292.resize();}});}},_isShown:function(){if(this._childOfLayoutWidget){if(this._resizeCalled&&"open" in this){return this.open;}return this._resizeCalled;}else{if("open" in this){return this.open;}else{var node=this.domNode,_293=this.domNode.parentNode;return (node.style.display!="none")&&(node.style.visibility!="hidden")&&!dojo.hasClass(node,"dijitHidden")&&_293&&_293.style&&(_293.style.display!="none");}}},_onShow:function(){if(this._needLayout){this._layout(this._changeSize,this._resultSize);}this.inherited(arguments);this._wasShown=true;}});}if(!dojo._hasResource["dojo.html"]){dojo._hasResource["dojo.html"]=true;dojo.provide("dojo.html");dojo.getObject("html",true,dojo);(function(){var _294=0,d=dojo;dojo.html._secureForInnerHtml=function(cont){return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig,"");};dojo.html._emptyNode=dojo.empty;dojo.html._setNodeContent=function(node,cont){d.empty(node);if(cont){if(typeof cont=="string"){cont=d._toDom(cont,node.ownerDocument);}if(!cont.nodeType&&d.isArrayLike(cont)){for(var _295=cont.length,i=0;i<cont.length;i=_295==cont.length?i+1:0){d.place(cont[i],node,"last");}}else{d.place(cont,node,"last");}}return node;};dojo.declare("dojo.html._ContentSetter",null,{node:"",content:"",id:"",cleanContent:false,extractContent:false,parseContent:false,parserScope:dojo._scopeName,startup:true,constructor:function(_296,node){dojo.mixin(this,_296||{});node=this.node=dojo.byId(this.node||node);if(!this.id){this.id=["Setter",(node)?node.id||node.tagName:"",_294++].join("_");}},set:function(cont,_297){if(undefined!==cont){this.content=cont;}if(_297){this._mixin(_297);}this.onBegin();this.setContent();this.onEnd();return this.node;},setContent:function(){var node=this.node;if(!node){throw new Error(this.declaredClass+": setContent given no node");}try{node=dojo.html._setNodeContent(node,this.content);}catch(e){var _298=this.onContentError(e);try{node.innerHTML=_298;}catch(e){console.error("Fatal "+this.declaredClass+".setContent could not change content due to "+e.message,e);}}this.node=node;},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 cont=this.content;if(dojo.isString(cont)){if(this.cleanContent){cont=dojo.html._secureForInnerHtml(cont);}if(this.extractContent){var _299=cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_299){cont=_299[1];}}}this.empty();this.content=cont;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(err){return "Error occured setting content: "+err;},_mixin:function(_29a){var _29b={},key;for(key in _29a){if(key in _29b){continue;}this[key]=_29a[key];}},_parse:function(){var _29c=this.node;try{var _29d={};dojo.forEach(["dir","lang","textDir"],function(name){if(this[name]){_29d[name]=this[name];}},this);this.parseResults=dojo.parser.parse({rootNode:_29c,noStart:!this.startup,inherited:_29d,scope:this.parserScope});}catch(e){this._onError("Content",e,"Error parsing in _ContentSetter#"+this.id);}},_onError:function(type,err,_29e){var _29f=this["on"+type+"Error"].call(this,err);if(_29e){console.error(_29e,err);}else{if(_29f){dojo.html._setNodeContent(this.node,_29f,true);}}}});dojo.html.set=function(node,cont,_2a0){if(undefined==cont){console.warn("dojo.html.set: no cont argument provided, using empty string");cont="";}if(!_2a0){return dojo.html._setNodeContent(node,cont,true);}else{var op=new dojo.html._ContentSetter(dojo.mixin(_2a0,{content:cont,node:node}));return op.set();}};})();}if(!dojo._hasResource["dijit.layout.ContentPane"]){dojo._hasResource["dijit.layout.ContentPane"]=true;dojo.provide("dijit.layout.ContentPane");dojo.declare("dijit.layout.ContentPane",[dijit._Widget,dijit.layout._ContentPaneResizeMixin],{href:"",extractContent:false,parseOnLoad:true,parserScope:dojo._scopeName,preventCache:false,preload:false,refreshOnShow:false,loadingMessage:"<span class='dijitContentPaneLoading'>${loadingState}</span>",errorMessage:"<span class='dijitContentPaneError'>${errorState}</span>",isLoaded:false,baseClass:"dijitContentPane",ioArgs:{},onLoadDeferred:null,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[]}),stopParser:true,template:false,create:function(_2a1,_2a2){if((!_2a1||!_2a1.template)&&_2a2&&!("href" in _2a1)&&!("content" in _2a1)){var df=dojo.doc.createDocumentFragment();_2a2=dojo.byId(_2a2);while(_2a2.firstChild){df.appendChild(_2a2.firstChild);}_2a1=dojo.delegate(_2a1,{content:df});}this.inherited(arguments,[_2a1,_2a2]);},postMixInProperties:function(){this.inherited(arguments);var _2a3=dojo.i18n.getLocalization("dijit","loading",this.lang);this.loadingMessage=dojo.string.substitute(this.loadingMessage,_2a3);this.errorMessage=dojo.string.substitute(this.errorMessage,_2a3);},buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}this.domNode.title="";if(!dojo.attr(this.domNode,"role")){dijit.setWaiRole(this.domNode,"group");}},_startChildren:function(){this.inherited(arguments);if(this._contentSetter){dojo.forEach(this._contentSetter.parseResults,function(obj){if(!obj._started&&!obj._destroyed&&dojo.isFunction(obj.startup)){obj.startup();obj._started=true;}},this);}},setHref:function(href){dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.","","2.0");return this.set("href",href);},_setHrefAttr:function(href){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this.onLoadDeferred.addCallback(dojo.hitch(this,"onLoad"));this._set("href",href);if(this.preload||(this._created&&this._isShown())){this._load();}else{this._hrefChanged=true;}return this.onLoadDeferred;},setContent:function(data){dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated.  Use set('content', ...) instead.","","2.0");this.set("content",data);},_setContentAttr:function(data){this._set("href","");this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));if(this._created){this.onLoadDeferred.addCallback(dojo.hitch(this,"onLoad"));}this._setContent(data||"");this._isDownloaded=false;return this.onLoadDeferred;},_getContentAttr:function(){return this.containerNode.innerHTML;},cancel:function(){if(this._xhrDfd&&(this._xhrDfd.fired==-1)){this._xhrDfd.cancel();}delete this._xhrDfd;this.onLoadDeferred=null;},uninitialize:function(){if(this._beingDestroyed){this.cancel();}this.inherited(arguments);},destroyRecursive:function(_2a4){if(this._beingDestroyed){return;}this.inherited(arguments);},_onShow:function(){this.inherited(arguments);if(this.href){if(!this._xhrDfd&&(!this.isLoaded||this._hrefChanged||this.refreshOnShow)){return this.refresh();}}},refresh:function(){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this.onLoadDeferred.addCallback(dojo.hitch(this,"onLoad"));this._load();return this.onLoadDeferred;},_load:function(){this._setContent(this.onDownloadStart(),true);var self=this;var _2a5={preventCache:(this.preventCache||this.refreshOnShow),url:this.href,handleAs:"text"};if(dojo.isObject(this.ioArgs)){dojo.mixin(_2a5,this.ioArgs);}var hand=(this._xhrDfd=(this.ioMethod||dojo.xhrGet)(_2a5));hand.addCallback(function(html){try{self._isDownloaded=true;self._setContent(html,false);self.onDownloadEnd();}catch(err){self._onError("Content",err);}delete self._xhrDfd;return html;});hand.addErrback(function(err){if(!hand.canceled){self._onError("Download",err);}delete self._xhrDfd;return err;});delete this._hrefChanged;},_onLoadHandler:function(data){this._set("isLoaded",true);try{this.onLoadDeferred.callback(data);}catch(e){console.error("Error "+this.widgetId+" running custom onLoad code: "+e.message);}},_onUnloadHandler:function(){this._set("isLoaded",false);try{this.onUnload();}catch(e){console.error("Error "+this.widgetId+" running custom onUnload code: "+e.message);}},destroyDescendants:function(){if(this.isLoaded){this._onUnloadHandler();}var _2a6=this._contentSetter;dojo.forEach(this.getChildren(),function(_2a7){if(_2a7.destroyRecursive){_2a7.destroyRecursive();}});if(_2a6){dojo.forEach(_2a6.parseResults,function(_2a8){if(_2a8.destroyRecursive&&_2a8.domNode&&_2a8.domNode.parentNode==dojo.body()){_2a8.destroyRecursive();}});delete _2a6.parseResults;}dojo.html._emptyNode(this.containerNode);delete this._singleChild;},_setContent:function(cont,_2a9){this.destroyDescendants();var _2aa=this._contentSetter;if(!(_2aa&&_2aa instanceof dojo.html._ContentSetter)){_2aa=this._contentSetter=new dojo.html._ContentSetter({node:this.containerNode,_onError:dojo.hitch(this,this._onError),onContentError:dojo.hitch(this,function(e){var _2ab=this.onContentError(e);try{this.containerNode.innerHTML=_2ab;}catch(e){console.error("Fatal "+this.id+" could not change content due to "+e.message,e);}})});}var _2ac=dojo.mixin({cleanContent:this.cleanContent,extractContent:this.extractContent,parseContent:this.parseOnLoad,parserScope:this.parserScope,startup:false,dir:this.dir,lang:this.lang},this._contentSetterParams||{});_2aa.set((dojo.isObject(cont)&&cont.domNode)?cont.domNode:cont,_2ac);delete this._contentSetterParams;if(this.doLayout){this._checkIfSingleChild();}if(!_2a9){if(this._started){this._startChildren();this._scheduleLayout();}this._onLoadHandler(cont);}},_onError:function(type,err,_2ad){this.onLoadDeferred.errback(err);var _2ae=this["on"+type+"Error"].call(this,err);if(_2ad){console.error(_2ad,err);}else{if(_2ae){this._setContent(_2ae,true);}}},onLoad:function(data){},onUnload:function(){},onDownloadStart:function(){return this.loadingMessage;},onContentError:function(_2af){},onDownloadError:function(_2b0){return this.errorMessage;},onDownloadEnd:function(){}});}if(!dojo._hasResource["dijit.TooltipDialog"]){dojo._hasResource["dijit.TooltipDialog"]=true;dojo.provide("dijit.TooltipDialog");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 role=\"presentation\" tabIndex=\"-1\">\n\t<div class=\"dijitTooltipContainer\" role=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" role=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" role=\"presentation\"></div>\n</div>\n"),_setTitleAttr:function(_2b1){this.containerNode.title=_2b1;this._set("title",_2b1);},postCreate:function(){this.inherited(arguments);this.connect(this.containerNode,"onkeypress","_onKey");},orient:function(node,_2b2,_2b3){var newC="dijitTooltipAB"+(_2b3.charAt(1)=="L"?"Left":"Right")+" dijitTooltip"+(_2b3.charAt(0)=="T"?"Below":"Above");dojo.replaceClass(this.domNode,newC,this._currentOrientClass||"");this._currentOrientClass=newC;},focus:function(){this._getFocusItems(this.containerNode);dijit.focus(this._firstFocusItem);},onOpen:function(pos){this.orient(this.domNode,pos.aroundCorner,pos.corner);this._onShow();},onClose:function(){this.onHide();},_onKey:function(evt){var node=evt.target;var dk=dojo.keys;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.containerNode);}var _2b4=(this._firstFocusItem==this._lastFocusItem);if(evt.charOrCode==dk.ESCAPE){setTimeout(dojo.hitch(this,"onCancel"),0);dojo.stopEvent(evt);}else{if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_2b4){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_2b4){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{if(evt.charOrCode===dk.TAB){evt.stopPropagation();}}}}}});}if(!dojo._hasResource["dijit.Dialog"]){dojo._hasResource["dijit.Dialog"]=true;dojo.provide("dijit.Dialog");dojo.declare("dijit._DialogBase",[dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/Dialog.html","<div class=\"dijitDialog\" role=\"dialog\" aria-labelledby=\"${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"ondijitclick: onCancel\" title=\"${buttonCancel}\" role=\"button\" tabIndex=\"-1\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),baseClass:"dijitDialog",cssStateNodes:{closeButtonNode:"dijitDialogCloseIcon"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[{node:"titleNode",type:"innerHTML"},{node:"titleBar",type:"attribute"}],"aria-describedby":""}),open:false,duration:dijit.defaultDuration,refocus:true,autofocus:true,_firstFocusItem:null,_lastFocusItem:null,doLayout:false,draggable:true,"aria-describedby":"",postMixInProperties:function(){var _2b5=dojo.i18n.getLocalization("dijit","common");dojo.mixin(this,_2b5);this.inherited(arguments);},postCreate:function(){dojo.style(this.domNode,{display:"none",position:"absolute"});dojo.body().appendChild(this.domNode);this.inherited(arguments);this.connect(this,"onExecute","hide");this.connect(this,"onCancel","hide");this._modalconnects=[];},onLoad:function(){this._position();if(this.autofocus&&dijit._DialogLevelManager.isTop(this)){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}this.inherited(arguments);},_endDrag:function(e){if(e&&e.node&&e.node===this.domNode){this._relativePosition=dojo.position(e.node);}},_setup:function(){var node=this.domNode;if(this.titleBar&&this.draggable){this._moveable=(dojo.isIE==6)?new dojo.dnd.TimedMoveable(node,{handle:this.titleBar}):new dojo.dnd.Moveable(node,{handle:this.titleBar,timeout:0});this._dndListener=dojo.subscribe("/dnd/move/stop",this,"_endDrag");}else{dojo.addClass(node,"dijitDialogFixed");}this.underlayAttrs={dialogId:this.id,"class":dojo.map(this["class"].split(/\s/),function(s){return s+"_underlay";}).join(" ")};},_size:function(){this._checkIfSingleChild();if(this._singleChild){if(this._singleChildOriginalStyle){this._singleChild.domNode.style.cssText=this._singleChildOriginalStyle;}delete this._singleChildOriginalStyle;}else{dojo.style(this.containerNode,{width:"auto",height:"auto"});}var mb=dojo._getMarginSize(this.domNode);var _2b6=dojo.window.getBox();if(mb.w>=_2b6.w||mb.h>=_2b6.h){var w=Math.min(mb.w,Math.floor(_2b6.w*0.75)),h=Math.min(mb.h,Math.floor(_2b6.h*0.75));if(this._singleChild&&this._singleChild.resize){this._singleChildOriginalStyle=this._singleChild.domNode.style.cssText;this._singleChild.resize({w:w,h:h});}else{dojo.style(this.containerNode,{width:w+"px",height:h+"px",overflow:"auto",position:"relative"});}}else{if(this._singleChild&&this._singleChild.resize){this._singleChild.resize();}}},_position:function(){if(!dojo.hasClass(dojo.body(),"dojoMove")){var node=this.domNode,_2b7=dojo.window.getBox(),p=this._relativePosition,bb=p?null:dojo._getBorderBox(node),l=Math.floor(_2b7.l+(p?p.x:(_2b7.w-bb.w)/2)),t=Math.floor(_2b7.t+(p?p.y:(_2b7.h-bb.h)/2));dojo.style(node,{left:l+"px",top:t+"px"});}},_onKey:function(evt){if(evt.charOrCode){var dk=dojo.keys;var node=evt.target;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.domNode);}var _2b8=(this._firstFocusItem==this._lastFocusItem);if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_2b8){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_2b8){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{while(node){if(node==this.domNode||dojo.hasClass(node,"dijitPopup")){if(evt.charOrCode==dk.ESCAPE){this.onCancel();}else{return;}}node=node.parentNode;}if(evt.charOrCode!==dk.TAB){dojo.stopEvent(evt);}else{if(!dojo.isOpera){try{this._firstFocusItem.focus();}catch(e){}}}}}}},show:function(){if(this.open){return;}if(!this._started){this.startup();}if(!this._alreadyInitialized){this._setup();this._alreadyInitialized=true;}if(this._fadeOutDeferred){this._fadeOutDeferred.cancel();}this._modalconnects.push(dojo.connect(window,"onscroll",this,"layout"));this._modalconnects.push(dojo.connect(window,"onresize",this,function(){var _2b9=dojo.window.getBox();if(!this._oldViewport||_2b9.h!=this._oldViewport.h||_2b9.w!=this._oldViewport.w){this.layout();this._oldViewport=_2b9;}}));this._modalconnects.push(dojo.connect(this.domNode,"onkeypress",this,"_onKey"));dojo.style(this.domNode,{opacity:0,display:""});this._set("open",true);this._onShow();this._size();this._position();var _2ba;this._fadeInDeferred=new dojo.Deferred(dojo.hitch(this,function(){_2ba.stop();delete this._fadeInDeferred;}));_2ba=dojo.fadeIn({node:this.domNode,duration:this.duration,beforeBegin:dojo.hitch(this,function(){dijit._DialogLevelManager.show(this,this.underlayAttrs);}),onEnd:dojo.hitch(this,function(){if(this.autofocus&&dijit._DialogLevelManager.isTop(this)){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}this._fadeInDeferred.callback(true);delete this._fadeInDeferred;})}).play();return this._fadeInDeferred;},hide:function(){if(!this._alreadyInitialized){return;}if(this._fadeInDeferred){this._fadeInDeferred.cancel();}var _2bb;this._fadeOutDeferred=new dojo.Deferred(dojo.hitch(this,function(){_2bb.stop();delete this._fadeOutDeferred;}));_2bb=dojo.fadeOut({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,function(){this.domNode.style.display="none";dijit._DialogLevelManager.hide(this);this.onHide();this._fadeOutDeferred.callback(true);delete this._fadeOutDeferred;})}).play();if(this._scrollConnected){this._scrollConnected=false;}dojo.forEach(this._modalconnects,dojo.disconnect);this._modalconnects=[];if(this._relativePosition){delete this._relativePosition;}this._set("open",false);return this._fadeOutDeferred;},layout:function(){if(this.domNode.style.display!="none"){if(dijit._underlay){dijit._underlay.layout();}this._position();}},destroy:function(){if(this._fadeInDeferred){this._fadeInDeferred.cancel();}if(this._fadeOutDeferred){this._fadeOutDeferred.cancel();}if(this._moveable){this._moveable.destroy();}if(this._dndListener){dojo.unsubscribe(this._dndListener);}dojo.forEach(this._modalconnects,dojo.disconnect);dijit._DialogLevelManager.hide(this);this.inherited(arguments);}});dojo.declare("dijit.Dialog",[dijit.layout.ContentPane,dijit._DialogBase],{});dijit._DialogLevelManager={show:function(_2bc,_2bd){var ds=dijit._dialogStack;ds[ds.length-1].focus=dijit.getFocus(_2bc);var _2be=dijit._underlay;if(!_2be||_2be._destroyed){_2be=dijit._underlay=new dijit.DialogUnderlay(_2bd);}else{_2be.set(_2bc.underlayAttrs);}var _2bf=ds[ds.length-1].dialog?ds[ds.length-1].zIndex+2:950;if(ds.length==1){_2be.show();}dojo.style(dijit._underlay.domNode,"zIndex",_2bf-1);dojo.style(_2bc.domNode,"zIndex",_2bf);ds.push({dialog:_2bc,underlayAttrs:_2bd,zIndex:_2bf});},hide:function(_2c0){var ds=dijit._dialogStack;if(ds[ds.length-1].dialog==_2c0){ds.pop();var pd=ds[ds.length-1];if(ds.length==1){if(!dijit._underlay._destroyed){dijit._underlay.hide();}}else{dojo.style(dijit._underlay.domNode,"zIndex",pd.zIndex-1);dijit._underlay.set(pd.underlayAttrs);}if(_2c0.refocus){var _2c1=pd.focus;if(!_2c1||(pd.dialog&&!dojo.isDescendant(_2c1.node,pd.dialog.domNode))){pd.dialog._getFocusItems(pd.dialog.domNode);_2c1=pd.dialog._firstFocusItem;}try{dijit.focus(_2c1);}catch(e){}}}else{var idx=dojo.indexOf(dojo.map(ds,function(elem){return elem.dialog;}),_2c0);if(idx!=-1){ds.splice(idx,1);}}},isTop:function(_2c2){var ds=dijit._dialogStack;return ds[ds.length-1].dialog==_2c2;}};dijit._dialogStack=[{dialog:null,focus:null,underlayAttrs:null}];}if(!dojo._hasResource["dijit._HasDropDown"]){dojo._hasResource["dijit._HasDropDown"]=true;dojo.provide("dijit._HasDropDown");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,_onDropDownMouseDown:function(e){if(this.disabled||this.readOnly){return;}dojo.stopEvent(e);this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseUp");this.toggleDropDown();},_onDropDownMouseUp:function(e){if(e&&this._docHandler){this.disconnect(this._docHandler);}var _2c3=this.dropDown,_2c4=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&&!_2c4){if(dojo.hasClass(t,"dijitPopup")){_2c4=true;}else{t=t.parentNode;}}if(_2c4){t=e.target;if(_2c3.onItemClick){var _2c5;while(t&&!(_2c5=dijit.byNode(t))){t=t.parentNode;}if(_2c5&&_2c5.onClick&&_2c5.getParent){_2c5.getParent().onItemClick(_2c5,e);}}return;}}}if(this._opened&&_2c3.focus&&_2c3.autoFocus!==false){window.setTimeout(dojo.hitch(_2c3,"focus"),1);}},_onDropDownClick:function(e){if(this._stopClickEvents){dojo.stopEvent(e);}},buildRendering:function(){this.inherited(arguments);this._buttonNode=this._buttonNode||this.focusNode||this.domNode;this._popupStateNode=this._popupStateNode||this.focusNode||this._buttonNode;var _2c6={"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"+_2c6+"ArrowButton");},postCreate:function(){this.inherited(arguments);this.connect(this._buttonNode,"onmousedown","_onDropDownMouseDown");this.connect(this._buttonNode,"onclick","_onDropDownClick");this.connect(this.focusNode,"onkeypress","_onKey");this.connect(this.focusNode,"onkeyup","_onKeyUp");},destroy:function(){if(this.dropDown){if(!this.dropDown._destroyed){this.dropDown.destroyRecursive();}delete this.dropDown;}this.inherited(arguments);},_onKey:function(e){if(this.disabled||this.readOnly){return;}var d=this.dropDown,_2c7=e.target;if(d&&this._opened&&d.handleKey){if(d.handleKey(e)===false){dojo.stopEvent(e);return;}}if(d&&this._opened&&e.charOrCode==dojo.keys.ESCAPE){this.closeDropDown();dojo.stopEvent(e);}else{if(!this._opened&&(e.charOrCode==dojo.keys.DOWN_ARROW||((e.charOrCode==dojo.keys.ENTER||e.charOrCode==" ")&&((_2c7.tagName||"").toLowerCase()!=="input"||(_2c7.type&&_2c7.type.toLowerCase()!=="text"))))){this._toggleOnKeyUp=true;dojo.stopEvent(e);}}},_onKeyUp:function(){if(this._toggleOnKeyUp){delete this._toggleOnKeyUp;this.toggleDropDown();var d=this.dropDown;if(d&&d.focus){setTimeout(dojo.hitch(d,"focus"),1);}}},_onBlur:function(){var _2c8=dijit._curFocus&&this.dropDown&&dojo.isDescendant(dijit._curFocus,this.dropDown.domNode);this.closeDropDown(_2c8);this.inherited(arguments);},isLoaded:function(){return true;},loadDropDown:function(_2c9){_2c9();},toggleDropDown:function(){if(this.disabled||this.readOnly){return;}if(!this._opened){if(!this.isLoaded()){this.loadDropDown(dojo.hitch(this,"openDropDown"));return;}else{this.openDropDown();}}else{this.closeDropDown();}},openDropDown:function(){var _2ca=this.dropDown,_2cb=_2ca.domNode,_2cc=this._aroundNode||this.domNode,self=this;if(!this._preparedNode){this._preparedNode=true;if(_2cb.style.width){this._explicitDDWidth=true;}if(_2cb.style.height){this._explicitDDHeight=true;}}if(this.maxHeight||this.forceWidth||this.autoWidth){var _2cd={display:"",visibility:"hidden"};if(!this._explicitDDWidth){_2cd.width="";}if(!this._explicitDDHeight){_2cd.height="";}dojo.style(_2cb,_2cd);var _2ce=this.maxHeight;if(_2ce==-1){var _2cf=dojo.window.getBox(),_2d0=dojo.position(_2cc,false);_2ce=Math.floor(Math.max(_2d0.y,_2cf.h-(_2d0.y+_2d0.h)));}if(_2ca.startup&&!_2ca._started){_2ca.startup();}dijit.popup.moveOffScreen(_2ca);var mb=dojo._getMarginSize(_2cb);var _2d1=(_2ce&&mb.h>_2ce);dojo.style(_2cb,{overflowX:"hidden",overflowY:_2d1?"auto":"hidden"});if(_2d1){mb.h=_2ce;if("w" in mb){mb.w+=16;}}else{delete mb.h;}if(this.forceWidth){mb.w=_2cc.offsetWidth;}else{if(this.autoWidth){mb.w=Math.max(mb.w,_2cc.offsetWidth);}else{delete mb.w;}}if(dojo.isFunction(_2ca.resize)){_2ca.resize(mb);}else{dojo.marginBox(_2cb,mb);}}var _2d2=dijit.popup.open({parent:this,popup:_2ca,around:_2cc,orient:dijit.getPopupAroundAlignment((this.dropDownPosition&&this.dropDownPosition.length)?this.dropDownPosition:["below"],this.isLeftToRight()),onExecute:function(){self.closeDropDown(true);},onCancel:function(){self.closeDropDown(true);},onClose:function(){dojo.attr(self._popupStateNode,"popupActive",false);dojo.removeClass(self._popupStateNode,"dijitHasDropDownOpen");self._opened=false;}});dojo.attr(this._popupStateNode,"popupActive","true");dojo.addClass(self._popupStateNode,"dijitHasDropDownOpen");this._opened=true;return _2d2;},closeDropDown:function(_2d3){if(this._opened){if(_2d3){this.focus();}dijit.popup.close(this.dropDown);this._opened=false;}}});}if(!dojo._hasResource["dijit.form.Button"]){dojo._hasResource["dijit.form.Button"]=true;dojo.provide("dijit.form.Button");dojo.declare("dijit.form.Button",dijit.form._FormWidget,{label:"",showLabel:true,iconClass:"",type:"button",baseClass:"dijitButton",templateString:dojo.cache("dijit.form","templates/Button.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\" tabIndex=\"-1\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"valueNode"}),_onClick:function(e){if(this.disabled){return false;}this._clicked();return this.onClick(e);},_onButtonClick:function(e){if(this._onClick(e)===false){e.preventDefault();}else{if(this.type=="submit"&&!(this.valueNode||this.focusNode).form){for(var node=this.domNode;node.parentNode;node=node.parentNode){var _2d4=dijit.byNode(node);if(_2d4&&typeof _2d4._onSubmit=="function"){_2d4._onSubmit(e);break;}}}else{if(this.valueNode){this.valueNode.click();e.preventDefault();}}}},buildRendering:function(){this.inherited(arguments);dojo.setSelectable(this.focusNode,false);},_fillContent:function(_2d5){if(_2d5&&(!this.params||!("label" in this.params))){this.set("label",_2d5.innerHTML);}},_setShowLabelAttr:function(val){if(this.containerNode){dojo.toggleClass(this.containerNode,"dijitDisplayNone",!val);}this._set("showLabel",val);},onClick:function(e){return true;},_clicked:function(e){},setLabel:function(_2d6){dojo.deprecated("dijit.form.Button.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");this.set("label",_2d6);},_setLabelAttr:function(_2d7){this._set("label",_2d7);this.containerNode.innerHTML=_2d7;if(this.showLabel==false&&!this.params.title){this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}},_setIconClassAttr:function(val){var _2d8=this.iconClass||"dijitNoIcon",_2d9=val||"dijitNoIcon";dojo.replaceClass(this.iconNode,_2d9,_2d8);this._set("iconClass",val);}});dojo.declare("dijit.form.DropDownButton",[dijit.form.Button,dijit._Container,dijit._HasDropDown],{baseClass:"dijitDropDownButton",templateString:dojo.cache("dijit.form","templates/DropDownButton.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\trole=\"button\" aria-haspopup=\"true\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\" tabIndex=\"-1\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),_fillContent:function(){if(this.srcNodeRef){var _2da=dojo.query("*",this.srcNodeRef);dijit.form.DropDownButton.superclass._fillContent.call(this,_2da[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}if(!this.dropDown&&this.dropDownContainer){var _2db=dojo.query("[widgetId]",this.dropDownContainer)[0];this.dropDown=dijit.byNode(_2db);delete this.dropDownContainer;}if(this.dropDown){dijit.popup.hide(this.dropDown);}this.inherited(arguments);},isLoaded:function(){var _2dc=this.dropDown;return (!!_2dc&&(!_2dc.href||_2dc.isLoaded));},loadDropDown:function(){var _2dd=this.dropDown;if(!_2dd){return;}if(!this.isLoaded()){var _2de=dojo.connect(_2dd,"onLoad",this,function(){dojo.disconnect(_2de);this.openDropDown();});_2dd.refresh();}else{this.openDropDown();}},isFocusable:function(){return this.inherited(arguments)&&!this._mouseDown;}});dojo.declare("dijit.form.ComboButton",dijit.form.DropDownButton,{templateString:dojo.cache("dijit.form","templates/ComboButton.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' role=\"presentation\"\n\t><tbody role=\"presentation\"><tr role=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" role=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\trole=\"button\" aria-haspopup=\"true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" role=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{id:"",tabIndex:["focusNode","titleNode"],title:"titleNode"}),optionsTitle:"",baseClass:"dijitComboButton",cssStateNodes:{"buttonNode":"dijitButtonNode","titleNode":"dijitButtonContents","_popupStateNode":"dijitDownArrowButton"},_focusedNode:null,_onButtonKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"RIGHT_ARROW":"LEFT_ARROW"]){dijit.focus(this._popupStateNode);dojo.stopEvent(evt);}},_onArrowKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"LEFT_ARROW":"RIGHT_ARROW"]){dijit.focus(this.titleNode);dojo.stopEvent(evt);}},focus:function(_2df){if(!this.disabled){dijit.focus(_2df=="start"?this.titleNode:this._popupStateNode);}}});dojo.declare("dijit.form.ToggleButton",dijit.form.Button,{baseClass:"dijitToggleButton",checked:false,attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{checked:"focusNode"}),_clicked:function(evt){this.set("checked",!this.checked);},_setCheckedAttr:function(_2e0,_2e1){this._set("checked",_2e0);dojo.attr(this.focusNode||this.domNode,"checked",_2e0);dijit.setWaiState(this.focusNode||this.domNode,"pressed",_2e0);this._handleOnChange(_2e0,_2e1);},setChecked:function(_2e2){dojo.deprecated("setChecked("+_2e2+") is deprecated. Use set('checked',"+_2e2+") instead.","","2.0");this.set("checked",_2e2);},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);}});}if(!dojo._hasResource["dijit.form.ToggleButton"]){dojo._hasResource["dijit.form.ToggleButton"]=true;dojo.provide("dijit.form.ToggleButton");}if(!dojo._hasResource["dijit.form.CheckBox"]){dojo._hasResource["dijit.form.CheckBox"]=true;dojo.provide("dijit.form.CheckBox");dojo.declare("dijit.form.CheckBox",dijit.form.ToggleButton,{templateString:dojo.cache("dijit.form","templates/CheckBox.html","<div class=\"dijit dijitReset dijitInline\" role=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),baseClass:"dijitCheckBox",type:"checkbox",value:"on",readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{readOnly:"focusNode"}),_setReadOnlyAttr:function(_2e3){this._set("readOnly",_2e3);dojo.attr(this.focusNode,"readOnly",_2e3);dijit.setWaiState(this.focusNode,"readonly",_2e3);},_setValueAttr:function(_2e4,_2e5){if(typeof _2e4=="string"){this._set("value",_2e4);dojo.attr(this.focusNode,"value",_2e4);_2e4=true;}if(this._created){this.set("checked",_2e4,_2e5);}},_getValueAttr:function(){return (this.checked?this.value:false);},_setLabelAttr:undefined,postMixInProperties:function(){if(this.value==""){this.value="on";}this.checkedAttrSetting=this.checked?"checked":"";this.inherited(arguments);},_fillContent:function(_2e6){},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);this._set("value",this.params.value||"on");dojo.attr(this.focusNode,"value",this.value);},_onFocus:function(){if(this.id){dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");}this.inherited(arguments);},_onBlur:function(){if(this.id){dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");}this.inherited(arguments);},_onClick:function(e){if(this.readOnly){dojo.stopEvent(e);return false;}return this.inherited(arguments);}});dojo.declare("dijit.form.RadioButton",dijit.form.CheckBox,{type:"radio",baseClass:"dijitRadio",_setCheckedAttr:function(_2e7){this.inherited(arguments);if(!this._created){return;}if(_2e7){var _2e8=this;dojo.query("INPUT[type=radio]",this.focusNode.form||dojo.doc).forEach(function(_2e9){if(_2e9.name==_2e8.name&&_2e9!=_2e8.focusNode&&_2e9.form==_2e8.focusNode.form){var _2ea=dijit.getEnclosingWidget(_2e9);if(_2ea&&_2ea.checked){_2ea.set("checked",false);}}});}},_clicked:function(e){if(!this.checked){this.set("checked",true);}}});}if(!dojo._hasResource["dijit.form.DropDownButton"]){dojo._hasResource["dijit.form.DropDownButton"]=true;dojo.provide("dijit.form.DropDownButton");}if(!dojo._hasResource["dojo.regexp"]){dojo._hasResource["dojo.regexp"]=true;dojo.provide("dojo.regexp");dojo.getObject("regexp",true,dojo);dojo.regexp.escapeString=function(str,_2eb){return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(ch){if(_2eb&&_2eb.indexOf(ch)!=-1){return ch;}return "\\"+ch;});};dojo.regexp.buildGroupRE=function(arr,re,_2ec){if(!(arr instanceof Array)){return re(arr);}var b=[];for(var i=0;i<arr.length;i++){b.push(re(arr[i]));}return dojo.regexp.group(b.join("|"),_2ec);};dojo.regexp.group=function(_2ed,_2ee){return "("+(_2ee?"?:":"")+_2ed+")";};}if(!dojo._hasResource["dojo.data.util.sorter"]){dojo._hasResource["dojo.data.util.sorter"]=true;dojo.provide("dojo.data.util.sorter");dojo.getObject("data.util.sorter",true,dojo);dojo.data.util.sorter.basicComparator=function(a,b){var r=-1;if(a===null){a=undefined;}if(b===null){b=undefined;}if(a==b){r=0;}else{if(a>b||a==null){r=1;}}return r;};dojo.data.util.sorter.createSortFunction=function(_2ef,_2f0){var _2f1=[];function _2f2(attr,dir,comp,s){return function(_2f3,_2f4){var a=s.getValue(_2f3,attr);var b=s.getValue(_2f4,attr);return dir*comp(a,b);};};var _2f5;var map=_2f0.comparatorMap;var bc=dojo.data.util.sorter.basicComparator;for(var i=0;i<_2ef.length;i++){_2f5=_2ef[i];var attr=_2f5.attribute;if(attr){var dir=(_2f5.descending)?-1:1;var comp=bc;if(map){if(typeof attr!=="string"&&("toString" in attr)){attr=attr.toString();}comp=map[attr]||bc;}_2f1.push(_2f2(attr,dir,comp,_2f0));}}return function(rowA,rowB){var i=0;while(i<_2f1.length){var ret=_2f1[i++](rowA,rowB);if(ret!==0){return ret;}}return 0;};};}if(!dojo._hasResource["dojo.data.util.simpleFetch"]){dojo._hasResource["dojo.data.util.simpleFetch"]=true;dojo.provide("dojo.data.util.simpleFetch");dojo.getObject("data.util.simpleFetch",true,dojo);dojo.data.util.simpleFetch.fetch=function(_2f6){_2f6=_2f6||{};if(!_2f6.store){_2f6.store=this;}var self=this;var _2f7=function(_2f8,_2f9){if(_2f9.onError){var _2fa=_2f9.scope||dojo.global;_2f9.onError.call(_2fa,_2f8,_2f9);}};var _2fb=function(_2fc,_2fd){var _2fe=_2fd.abort||null;var _2ff=false;var _300=_2fd.start?_2fd.start:0;var _301=(_2fd.count&&(_2fd.count!==Infinity))?(_300+_2fd.count):_2fc.length;_2fd.abort=function(){_2ff=true;if(_2fe){_2fe.call(_2fd);}};var _302=_2fd.scope||dojo.global;if(!_2fd.store){_2fd.store=self;}if(_2fd.onBegin){_2fd.onBegin.call(_302,_2fc.length,_2fd);}if(_2fd.sort){_2fc.sort(dojo.data.util.sorter.createSortFunction(_2fd.sort,self));}if(_2fd.onItem){for(var i=_300;(i<_2fc.length)&&(i<_301);++i){var item=_2fc[i];if(!_2ff){_2fd.onItem.call(_302,item,_2fd);}}}if(_2fd.onComplete&&!_2ff){var _303=null;if(!_2fd.onItem){_303=_2fc.slice(_300,_301);}_2fd.onComplete.call(_302,_303,_2fd);}};this._fetchItems(_2f6,_2fb,_2f7);return _2f6;};}if(!dojo._hasResource["dojo.data.util.filter"]){dojo._hasResource["dojo.data.util.filter"]=true;dojo.provide("dojo.data.util.filter");dojo.getObject("data.util.filter",true,dojo);dojo.data.util.filter.patternToRegExp=function(_304,_305){var rxp="^";var c=null;for(var i=0;i<_304.length;i++){c=_304.charAt(i);switch(c){case "\\":rxp+=c;i++;rxp+=_304.charAt(i);break;case "*":rxp+=".*";break;case "?":rxp+=".";break;case "$":case "^":case "/":case "+":case ".":case "|":case "(":case ")":case "{":case "}":case "[":case "]":rxp+="\\";default:rxp+=c;}}rxp+="$";if(_305){return new RegExp(rxp,"mi");}else{return new RegExp(rxp,"m");}};}if(!dojo._hasResource["dijit.form.TextBox"]){dojo._hasResource["dijit.form.TextBox"]=true;dojo.provide("dijit.form.TextBox");dojo.declare("dijit.form.TextBox",dijit.form._FormValueWidget,{trim:false,uppercase:false,lowercase:false,propercase:false,maxLength:"",selectOnClick:false,placeHolder:"",templateString:dojo.cache("dijit.form","templates/TextBox.html","<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" role=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),_singleNodeTemplate:"<input class=\"dijit dijitReset dijitLeft dijitInputField\" dojoAttachPoint=\"textbox,focusNode\" autocomplete=\"off\" type=\"${type}\" ${!nameAttrSetting} />",_buttonInputDisabled:dojo.isIE?"disabled":"",baseClass:"dijitTextBox",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{maxLength:"focusNode"}),postMixInProperties:function(){var type=this.type.toLowerCase();if(this.templateString&&this.templateString.toLowerCase()=="input"||((type=="hidden"||type=="file")&&this.templateString==dijit.form.TextBox.prototype.templateString)){this.templateString=this._singleNodeTemplate;}this.inherited(arguments);},_setPlaceHolderAttr:function(v){this._set("placeHolder",v);if(!this._phspan){this._attachPoints.push("_phspan");this._phspan=dojo.create("span",{className:"dijitPlaceHolder dijitInputField"},this.textbox,"after");}this._phspan.innerHTML="";this._phspan.appendChild(document.createTextNode(v));this._updatePlaceHolder();},_updatePlaceHolder:function(){if(this._phspan){this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";}},_getValueAttr:function(){return this.parse(this.get("displayedValue"),this.constraints);},_setValueAttr:function(_306,_307,_308){var _309;if(_306!==undefined){_309=this.filter(_306);if(typeof _308!="string"){if(_309!==null&&((typeof _309!="number")||!isNaN(_309))){_308=this.filter(this.format(_309,this.constraints));}else{_308="";}}}if(_308!=null&&_308!=undefined&&((typeof _308)!="number"||!isNaN(_308))&&this.textbox.value!=_308){this.textbox.value=_308;this._set("displayedValue",this.get("displayedValue"));}this._updatePlaceHolder();this.inherited(arguments,[_309,_307]);},displayedValue:"",getDisplayedValue:function(){dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.","","2.0");return this.get("displayedValue");},_getDisplayedValueAttr:function(){return this.filter(this.textbox.value);},setDisplayedValue:function(_30a){dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.","","2.0");this.set("displayedValue",_30a);},_setDisplayedValueAttr:function(_30b){if(_30b===null||_30b===undefined){_30b="";}else{if(typeof _30b!="string"){_30b=String(_30b);}}this.textbox.value=_30b;this._setValueAttr(this.get("value"),undefined);this._set("displayedValue",this.get("displayedValue"));},format:function(_30c,_30d){return ((_30c==null||_30c==undefined)?"":(_30c.toString?_30c.toString():_30c));},parse:function(_30e,_30f){return _30e;},_refreshState:function(){},_onInput:function(e){if(e&&e.type&&/key/i.test(e.type)&&e.keyCode){switch(e.keyCode){case dojo.keys.SHIFT:case dojo.keys.ALT:case dojo.keys.CTRL:case dojo.keys.TAB:return;}}if(this.intermediateChanges){var _310=this;setTimeout(function(){_310._handleOnChange(_310.get("value"),false);},0);}this._refreshState();this._set("displayedValue",this.get("displayedValue"));},postCreate:function(){if(dojo.isIE){setTimeout(dojo.hitch(this,function(){var s=dojo.getComputedStyle(this.domNode);if(s){var ff=s.fontFamily;if(ff){var _311=this.domNode.getElementsByTagName("INPUT");if(_311){for(var i=0;i<_311.length;i++){_311[i].style.fontFamily=ff;}}}}}),0);}this.textbox.setAttribute("value",this.textbox.value);this.inherited(arguments);if(dojo.isMoz||dojo.isOpera){this.connect(this.textbox,"oninput","_onInput");}else{this.connect(this.textbox,"onkeydown","_onInput");this.connect(this.textbox,"onkeyup","_onInput");this.connect(this.textbox,"onpaste","_onInput");this.connect(this.textbox,"oncut","_onInput");}},_blankValue:"",filter:function(val){if(val===null){return this._blankValue;}if(typeof val!="string"){return val;}if(this.trim){val=dojo.trim(val);}if(this.uppercase){val=val.toUpperCase();}if(this.lowercase){val=val.toLowerCase();}if(this.propercase){val=val.replace(/[^\s]+/g,function(word){return word.substring(0,1).toUpperCase()+word.substring(1);});}return val;},_setBlurValue:function(){this._setValueAttr(this.get("value"),true);},_onBlur:function(e){if(this.disabled){return;}this._setBlurValue();this.inherited(arguments);if(this._selectOnClickHandle){this.disconnect(this._selectOnClickHandle);}if(this.selectOnClick&&dojo.isMoz){this.textbox.selectionStart=this.textbox.selectionEnd=undefined;}this._updatePlaceHolder();},_onFocus:function(by){if(this.disabled||this.readOnly){return;}if(this.selectOnClick&&by=="mouse"){this._selectOnClickHandle=this.connect(this.domNode,"onmouseup",function(){this.disconnect(this._selectOnClickHandle);var _312;if(dojo.isIE){var _313=dojo.doc.selection.createRange();var _314=_313.parentElement();_312=_314==this.textbox&&_313.text.length==0;}else{_312=this.textbox.selectionStart==this.textbox.selectionEnd;}if(_312){dijit.selectInputText(this.textbox);}});}this._updatePlaceHolder();this.inherited(arguments);this._refreshState();},reset:function(){this.textbox.value="";this.inherited(arguments);}});dijit.selectInputText=function(_315,_316,stop){var _317=dojo.global;var _318=dojo.doc;_315=dojo.byId(_315);if(isNaN(_316)){_316=0;}if(isNaN(stop)){stop=_315.value?_315.value.length:0;}dijit.focus(_315);if(_318["selection"]&&dojo.body()["createTextRange"]){if(_315.createTextRange){var r=_315.createTextRange();r.collapse(true);r.moveStart("character",-99999);r.moveStart("character",_316);r.moveEnd("character",stop-_316);r.select();}}else{if(_317["getSelection"]){if(_315.setSelectionRange){_315.setSelectionRange(_316,stop);}}}};}if(!dojo._hasResource["dijit.Tooltip"]){dojo._hasResource["dijit.Tooltip"]=true;dojo.provide("dijit.Tooltip");dojo.declare("dijit._MasterTooltip",[dijit._Widget,dijit._Templated],{duration:dijit.defaultDuration,templateString:dojo.cache("dijit","templates/Tooltip.html","<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\"\n\t><div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" role='alert'></div\n\t><div class=\"dijitTooltipConnector\" dojoAttachPoint=\"connectorNode\"></div\n></div>\n"),postCreate:function(){dojo.body().appendChild(this.domNode);this.bgIframe=new dijit.BackgroundIframe(this.domNode);this.fadeIn=dojo.fadeIn({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,"_onShow")});this.fadeOut=dojo.fadeOut({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,"_onHide")});},show:function(_319,_31a,_31b,rtl){if(this.aroundNode&&this.aroundNode===_31a){return;}this.domNode.width="auto";if(this.fadeOut.status()=="playing"){this._onDeck=arguments;return;}this.containerNode.innerHTML=_319;var pos=dijit.placeOnScreenAroundElement(this.domNode,_31a,dijit.getPopupAroundAlignment((_31b&&_31b.length)?_31b:dijit.Tooltip.defaultPosition,!rtl),dojo.hitch(this,"orient"));dojo.style(this.domNode,"opacity",0);this.fadeIn.play();this.isShowingNow=true;this.aroundNode=_31a;},orient:function(node,_31c,_31d,_31e,_31f){this.connectorNode.style.top="";var _320=_31e.w-this.connectorNode.offsetWidth;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"}[_31c+"-"+_31d];this.domNode.style.width="auto";var size=dojo.contentBox(this.domNode);var _321=Math.min((Math.max(_320,1)),size.w);var _322=_321<size.w;this.domNode.style.width=_321+"px";if(_322){this.containerNode.style.overflow="auto";var _323=this.containerNode.scrollWidth;this.containerNode.style.overflow="visible";if(_323>_321){_323=_323+dojo.style(this.domNode,"paddingLeft")+dojo.style(this.domNode,"paddingRight");this.domNode.style.width=_323+"px";}}if(_31d.charAt(0)=="B"&&_31c.charAt(0)=="B"){var mb=dojo.marginBox(node);var _324=this.connectorNode.offsetHeight;if(mb.h>_31e.h){var _325=_31e.h-(_31f.h/2)-(_324/2);this.connectorNode.style.top=_325+"px";this.connectorNode.style.bottom="";}else{this.connectorNode.style.bottom=Math.min(Math.max(_31f.h/2-_324/2,0),mb.h-_324)+"px";this.connectorNode.style.top="";}}else{this.connectorNode.style.top="";this.connectorNode.style.bottom="";}return Math.max(0,size.w-_320);},_onShow:function(){if(dojo.isIE){this.domNode.style.filter="";}},hide:function(_326){if(this._onDeck&&this._onDeck[1]==_326){this._onDeck=null;}else{if(this.aroundNode===_326){this.fadeIn.stop();this.isShowingNow=false;this.aroundNode=null;this.fadeOut.play();}else{}}},_onHide:function(){this.domNode.style.cssText="";this.containerNode.innerHTML="";if(this._onDeck){this.show.apply(this,this._onDeck);this._onDeck=null;}}});dijit.showTooltip=function(_327,_328,_329,rtl){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.show(_327,_328,_329,rtl);};dijit.hideTooltip=function(_32a){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.hide(_32a);};dojo.declare("dijit.Tooltip",dijit._Widget,{label:"",showDelay:400,connectId:[],position:[],_setConnectIdAttr:function(_32b){dojo.forEach(this._connections||[],function(_32c){dojo.forEach(_32c,dojo.hitch(this,"disconnect"));},this);var ary=dojo.isArrayLike(_32b)?_32b:(_32b?[_32b]:[]);this._connections=dojo.map(ary,function(id){var node=dojo.byId(id);return node?[this.connect(node,"onmouseenter","_onTargetMouseEnter"),this.connect(node,"onmouseleave","_onTargetMouseLeave"),this.connect(node,"onfocus","_onTargetFocus"),this.connect(node,"onblur","_onTargetBlur")]:[];},this);this._set("connectId",_32b);this._connectIds=ary;},addTarget:function(node){var id=node.id||node;if(dojo.indexOf(this._connectIds,id)==-1){this.set("connectId",this._connectIds.concat(id));}},removeTarget:function(node){var id=node.id||node,idx=dojo.indexOf(this._connectIds,id);if(idx>=0){this._connectIds.splice(idx,1);this.set("connectId",this._connectIds);}},buildRendering:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitTooltipData");},startup:function(){this.inherited(arguments);var ids=this.connectId;dojo.forEach(dojo.isArrayLike(ids)?ids:[ids],this.addTarget,this);},_onTargetMouseEnter:function(e){this._onHover(e);},_onTargetMouseLeave:function(e){this._onUnHover(e);},_onTargetFocus:function(e){this._focus=true;this._onHover(e);},_onTargetBlur:function(e){this._focus=false;this._onUnHover(e);},_onHover:function(e){if(!this._showTimer){var _32d=e.target;this._showTimer=setTimeout(dojo.hitch(this,function(){this.open(_32d);}),this.showDelay);}},_onUnHover:function(e){if(this._focus){return;}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}this.close();},open:function(_32e){if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}dijit.showTooltip(this.label||this.domNode.innerHTML,_32e,this.position,!this.isLeftToRight());this._connectNode=_32e;this.onShow(_32e,this.position);},close:function(){if(this._connectNode){dijit.hideTooltip(this._connectNode);delete this._connectNode;this.onHide();}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}},onShow:function(_32f,_330){},onHide:function(){},uninitialize:function(){this.close();this.inherited(arguments);}});dijit.Tooltip.defaultPosition=["after","before"];}if(!dojo._hasResource["dijit.form.ValidationTextBox"]){dojo._hasResource["dijit.form.ValidationTextBox"]=true;dojo.provide("dijit.form.ValidationTextBox");dojo.declare("dijit.form.ValidationTextBox",dijit.form.TextBox,{templateString:dojo.cache("dijit.form","templates/ValidationTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" role=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&#935; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitValidationTextBox",required:false,promptMessage:"",invalidMessage:"$_unset_$",missingMessage:"$_unset_$",message:"",constraints:{},regExp:".*",regExpGen:function(_331){return this.regExp;},state:"",tooltipPosition:[],_setValueAttr:function(){this.inherited(arguments);this.validate(this._focused);},validator:function(_332,_333){return (new RegExp("^(?:"+this.regExpGen(_333)+")"+(this.required?"":"?")+"$")).test(_332)&&(!this.required||!this._isEmpty(_332))&&(this._isEmpty(_332)||this.parse(_332,_333)!==undefined);},_isValidSubset:function(){return this.textbox.value.search(this._partialre)==0;},isValid:function(_334){return this.validator(this.textbox.value,this.constraints);},_isEmpty:function(_335){return (this.trim?/^\s*$/:/^$/).test(_335);},getErrorMessage:function(_336){return (this.required&&this._isEmpty(this.textbox.value))?this.missingMessage:this.invalidMessage;},getPromptMessage:function(_337){return this.promptMessage;},_maskValidSubsetError:true,validate:function(_338){var _339="";var _33a=this.disabled||this.isValid(_338);if(_33a){this._maskValidSubsetError=true;}var _33b=this._isEmpty(this.textbox.value);var _33c=!_33a&&_338&&this._isValidSubset();this._set("state",_33a?"":(((((!this._hasBeenBlurred||_338)&&_33b)||_33c)&&this._maskValidSubsetError)?"Incomplete":"Error"));dijit.setWaiState(this.focusNode,"invalid",_33a?"false":"true");if(this.state=="Error"){this._maskValidSubsetError=_338&&_33c;_339=this.getErrorMessage(_338);}else{if(this.state=="Incomplete"){_339=this.getPromptMessage(_338);this._maskValidSubsetError=!this._hasBeenBlurred||_338;}else{if(_33b){_339=this.getPromptMessage(_338);}}}this.set("message",_339);return _33a;},displayMessage:function(_33d){dijit.hideTooltip(this.domNode);if(_33d&&this._focused){dijit.showTooltip(_33d,this.domNode,this.tooltipPosition,!this.isLeftToRight());}},_refreshState:function(){this.validate(this._focused);this.inherited(arguments);},constructor:function(){this.constraints={};},_setConstraintsAttr:function(_33e){if(!_33e.locale&&this.lang){_33e.locale=this.lang;}this._set("constraints",_33e);this._computePartialRE();},_computePartialRE:function(){var p=this.regExpGen(this.constraints);this.regExp=p;var _33f="";if(p!=".*"){this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,function(re){switch(re.charAt(0)){case "{":case "+":case "?":case "*":case "^":case "$":case "|":case "(":_33f+=re;break;case ")":_33f+="|$)";break;default:_33f+="(?:"+re+"|$)";break;}});}try{"".search(_33f);}catch(e){_33f=this.regExp;console.warn("RegExp error in "+this.declaredClass+": "+this.regExp);}this._partialre="^(?:"+_33f+")$";},postMixInProperties:function(){this.inherited(arguments);this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);if(this.invalidMessage=="$_unset_$"){this.invalidMessage=this.messages.invalidMessage;}if(!this.invalidMessage){this.invalidMessage=this.promptMessage;}if(this.missingMessage=="$_unset_$"){this.missingMessage=this.messages.missingMessage;}if(!this.missingMessage){this.missingMessage=this.invalidMessage;}this._setConstraintsAttr(this.constraints);},_setDisabledAttr:function(_340){this.inherited(arguments);this._refreshState();},_setRequiredAttr:function(_341){this._set("required",_341);dijit.setWaiState(this.focusNode,"required",_341);this._refreshState();},_setMessageAttr:function(_342){this._set("message",_342);this.displayMessage(_342);},reset:function(){this._maskValidSubsetError=true;this.inherited(arguments);},_onBlur:function(){this.displayMessage("");this.inherited(arguments);}});dojo.declare("dijit.form.MappedTextBox",dijit.form.ValidationTextBox,{postMixInProperties:function(){this.inherited(arguments);this.nameAttrSetting="";},serialize:function(val,_343){return val.toString?val.toString():"";},toString:function(){var val=this.filter(this.get("value"));return val!=null?(typeof val=="string"?val:this.serialize(val,this.constraints)):"";},validate:function(){this.valueNode.value=this.toString();return this.inherited(arguments);},buildRendering:function(){this.inherited(arguments);this.valueNode=dojo.place("<input type='hidden'"+(this.name?" name='"+this.name.replace(/'/g,"&quot;")+"'":"")+"/>",this.textbox,"after");},reset:function(){this.valueNode.value="";this.inherited(arguments);}});dojo.declare("dijit.form.RangeBoundTextBox",dijit.form.MappedTextBox,{rangeMessage:"",rangeCheck:function(_344,_345){return ("min" in _345?(this.compare(_344,_345.min)>=0):true)&&("max" in _345?(this.compare(_344,_345.max)<=0):true);},isInRange:function(_346){return this.rangeCheck(this.get("value"),this.constraints);},_isDefinitelyOutOfRange:function(){var val=this.get("value");var _347=false;var _348=false;if("min" in this.constraints){var min=this.constraints.min;min=this.compare(val,((typeof min=="number")&&min>=0&&val!=0)?0:min);_347=(typeof min=="number")&&min<0;}if("max" in this.constraints){var max=this.constraints.max;max=this.compare(val,((typeof max!="number")||max>0)?max:0);_348=(typeof max=="number")&&max>0;}return _347||_348;},_isValidSubset:function(){return this.inherited(arguments)&&!this._isDefinitelyOutOfRange();},isValid:function(_349){return this.inherited(arguments)&&((this._isEmpty(this.textbox.value)&&!this.required)||this.isInRange(_349));},getErrorMessage:function(_34a){var v=this.get("value");if(v!==null&&v!==""&&v!==undefined&&(typeof v!="number"||!isNaN(v))&&!this.isInRange(_34a)){return this.rangeMessage;}return this.inherited(arguments);},postMixInProperties:function(){this.inherited(arguments);if(!this.rangeMessage){this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);this.rangeMessage=this.messages.rangeMessage;}},_setConstraintsAttr:function(_34b){this.inherited(arguments);if(this.focusNode){if(this.constraints.min!==undefined){dijit.setWaiState(this.focusNode,"valuemin",this.constraints.min);}else{dijit.removeWaiState(this.focusNode,"valuemin");}if(this.constraints.max!==undefined){dijit.setWaiState(this.focusNode,"valuemax",this.constraints.max);}else{dijit.removeWaiState(this.focusNode,"valuemax");}}},_setValueAttr:function(_34c,_34d){dijit.setWaiState(this.focusNode,"valuenow",_34c);this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.ComboBox"]){dojo._hasResource["dijit.form.ComboBox"]=true;dojo.provide("dijit.form.ComboBox");dojo.declare("dijit.form.ComboBoxMixin",dijit._HasDropDown,{item:null,pageSize:Infinity,store:null,fetchProperties:{},query:{},autoComplete:true,highlightMatch:"first",searchDelay:100,searchAttr:"name",labelAttr:"",labelType:"text",queryExpr:"${0}*",ignoreCase:true,hasDownArrow:true,templateString:dojo.cache("dijit.form","templates/DropDownBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\trole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"_buttonNode, _popupStateNode\" role=\"presentation\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&#935; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" role=\"textbox\" aria-haspopup=\"true\"\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitComboBox",dropDownClass:"dijit.form._ComboBoxMenu",cssStateNodes:{"_buttonNode":"dijitDownArrowButton"},maxHeight:-1,_stopClickEvents:false,_getCaretPos:function(_34e){var pos=0;if(typeof (_34e.selectionStart)=="number"){pos=_34e.selectionStart;}else{if(dojo.isIE){var tr=dojo.doc.selection.createRange().duplicate();var ntr=_34e.createTextRange();tr.move("character",0);ntr.move("character",0);try{ntr.setEndPoint("EndToEnd",tr);pos=String(ntr.text).replace(/\r/g,"").length;}catch(e){}}}return pos;},_setCaretPos:function(_34f,_350){_350=parseInt(_350);dijit.selectInputText(_34f,_350,_350);},_setDisabledAttr:function(_351){this.inherited(arguments);dijit.setWaiState(this.domNode,"disabled",_351);},_abortQuery:function(){if(this.searchTimer){clearTimeout(this.searchTimer);this.searchTimer=null;}if(this._fetchHandle){if(this._fetchHandle.abort){this._fetchHandle.abort();}this._fetchHandle=null;}},_onInput:function(evt){if(!this.searchTimer&&(evt.type=="paste"||evt.type=="input")&&this._lastInput!=this.textbox.value){this.searchTimer=setTimeout(dojo.hitch(this,function(){this._onKey({charOrCode:229});}),100);}this.inherited(arguments);},_onKey:function(evt){var key=evt.charOrCode;if(evt.altKey||((evt.ctrlKey||evt.metaKey)&&(key!="x"&&key!="v"))||key==dojo.keys.SHIFT){return;}var _352=false;var pw=this.dropDown;var dk=dojo.keys;var _353=null;this._prev_key_backspace=false;this._abortQuery();this.inherited(arguments);if(this._opened){_353=pw.getHighlightedOption();}switch(key){case dk.PAGE_DOWN:case dk.DOWN_ARROW:case dk.PAGE_UP:case dk.UP_ARROW:if(this._opened){this._announceOption(_353);}dojo.stopEvent(evt);break;case dk.ENTER:if(_353){if(_353==pw.nextButton){this._nextSearch(1);dojo.stopEvent(evt);break;}else{if(_353==pw.previousButton){this._nextSearch(-1);dojo.stopEvent(evt);break;}}}else{this._setBlurValue();this._setCaretPos(this.focusNode,this.focusNode.value.length);}if(this._opened||this._fetchHandle){evt.preventDefault();}case dk.TAB:var _354=this.get("displayedValue");if(pw&&(_354==pw._messages["previousMessage"]||_354==pw._messages["nextMessage"])){break;}if(_353){this._selectOption();}if(this._opened){this._lastQuery=null;this.closeDropDown();}break;case " ":if(_353){dojo.stopEvent(evt);this._selectOption();this.closeDropDown();}else{_352=true;}break;case dk.DELETE:case dk.BACKSPACE:this._prev_key_backspace=true;_352=true;break;default:_352=typeof key=="string"||key==229;}if(_352){this.item=undefined;this.searchTimer=setTimeout(dojo.hitch(this,"_startSearchFromInput"),1);}},_autoCompleteText:function(text){var fn=this.focusNode;dijit.selectInputText(fn,fn.value.length);var _355=this.ignoreCase?"toLowerCase":"substr";if(text[_355](0).indexOf(this.focusNode.value[_355](0))==0){var cpos=this._getCaretPos(fn);if((cpos+1)>fn.value.length){fn.value=text;dijit.selectInputText(fn,cpos);}}else{fn.value=text;dijit.selectInputText(fn);}},_openResultList:function(_356,_357){this._fetchHandle=null;if(this.disabled||this.readOnly||(_357.query[this.searchAttr]!=this._lastQuery)){return;}var _358=this.dropDown._highlighted_option&&dojo.hasClass(this.dropDown._highlighted_option,"dijitMenuItemSelected");this.dropDown.clearResultList();if(!_356.length&&!this._maxOptions){this.closeDropDown();return;}_357._maxOptions=this._maxOptions;var _359=this.dropDown.createOptions(_356,_357,dojo.hitch(this,"_getMenuLabelFromItem"));this._showResultList();if(_357.direction){if(1==_357.direction){this.dropDown.highlightFirstOption();}else{if(-1==_357.direction){this.dropDown.highlightLastOption();}}if(_358){this._announceOption(this.dropDown.getHighlightedOption());}}else{if(this.autoComplete&&!this._prev_key_backspace&&!/^[*]+$/.test(_357.query[this.searchAttr])){this._announceOption(_359[1]);}}},_showResultList:function(){this.closeDropDown(true);this.displayMessage("");this.openDropDown();dijit.setWaiState(this.domNode,"expanded","true");},loadDropDown:function(_35a){this._startSearchAll();},isLoaded:function(){return false;},closeDropDown:function(){this._abortQuery();if(this._opened){this.inherited(arguments);dijit.setWaiState(this.domNode,"expanded","false");dijit.removeWaiState(this.focusNode,"activedescendant");}},_setBlurValue:function(){var _35b=this.get("displayedValue");var pw=this.dropDown;if(pw&&(_35b==pw._messages["previousMessage"]||_35b==pw._messages["nextMessage"])){this._setValueAttr(this._lastValueReported,true);}else{if(typeof this.item=="undefined"){this.item=null;this.set("displayedValue",_35b);}else{if(this.value!=this._lastValueReported){dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);}this._refreshState();}}},_onBlur:function(){this.closeDropDown();this.inherited(arguments);},_setItemAttr:function(item,_35c,_35d){if(!_35d){_35d=this.store.getValue(item,this.searchAttr);}var _35e=this._getValueField()!=this.searchAttr?this.store.getIdentity(item):_35d;this._set("item",item);dijit.form.ComboBox.superclass._setValueAttr.call(this,_35e,_35c,_35d);},_announceOption:function(node){if(!node){return;}var _35f;if(node==this.dropDown.nextButton||node==this.dropDown.previousButton){_35f=node.innerHTML;this.item=undefined;this.value="";}else{_35f=this.store.getValue(node.item,this.searchAttr).toString();this.set("item",node.item,false,_35f);}this.focusNode.value=this.focusNode.value.substring(0,this._lastInput.length);dijit.setWaiState(this.focusNode,"activedescendant",dojo.attr(node,"id"));this._autoCompleteText(_35f);},_selectOption:function(evt){if(evt){this._announceOption(evt.target);}this.closeDropDown();this._setCaretPos(this.focusNode,this.focusNode.value.length);dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);},_startSearchAll:function(){this._startSearch("");},_startSearchFromInput:function(){this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g,"\\$1"));},_getQueryString:function(text){return dojo.string.substitute(this.queryExpr,[text]);},_startSearch:function(key){if(!this.dropDown){var _360=this.id+"_popup",_361=dojo.getObject(this.dropDownClass,false);this.dropDown=new _361({onChange:dojo.hitch(this,this._selectOption),id:_360,dir:this.dir});dijit.removeWaiState(this.focusNode,"activedescendant");dijit.setWaiState(this.textbox,"owns",_360);}var _362=dojo.clone(this.query);this._lastInput=key;this._lastQuery=_362[this.searchAttr]=this._getQueryString(key);this.searchTimer=setTimeout(dojo.hitch(this,function(_363,_364){this.searchTimer=null;var _365={queryOptions:{ignoreCase:this.ignoreCase,deep:true},query:_363,onBegin:dojo.hitch(this,"_setMaxOptions"),onComplete:dojo.hitch(this,"_openResultList"),onError:function(_366){_364._fetchHandle=null;console.error("dijit.form.ComboBox: "+_366);_364.closeDropDown();},start:0,count:this.pageSize};dojo.mixin(_365,_364.fetchProperties);this._fetchHandle=_364.store.fetch(_365);var _367=function(_368,_369){_368.start+=_368.count*_369;_368.direction=_369;this._fetchHandle=this.store.fetch(_368);this.focus();};this._nextSearch=this.dropDown.onPage=dojo.hitch(this,_367,this._fetchHandle);},_362,this),this.searchDelay);},_setMaxOptions:function(size,_36a){this._maxOptions=size;},_getValueField:function(){return this.searchAttr;},constructor:function(){this.query={};this.fetchProperties={};},postMixInProperties:function(){if(!this.store){var _36b=this.srcNodeRef;this.store=new dijit.form._ComboBoxDataStore(_36b);if(!("value" in this.params)){var item=(this.item=this.store.fetchSelectedItem());if(item){var _36c=this._getValueField();this.value=this.store.getValue(item,_36c);}}}this.inherited(arguments);},postCreate:function(){var _36d=dojo.query("label[for=\""+this.id+"\"]");if(_36d.length){_36d[0].id=(this.id+"_label");dijit.setWaiState(this.domNode,"labelledby",_36d[0].id);}this.inherited(arguments);},_setHasDownArrowAttr:function(val){this.hasDownArrow=val;this._buttonNode.style.display=val?"":"none";},_getMenuLabelFromItem:function(item){var _36e=this.labelFunc(item,this.store),_36f=this.labelType;if(this.highlightMatch!="none"&&this.labelType=="text"&&this._lastInput){_36e=this.doHighlight(_36e,this._escapeHtml(this._lastInput));_36f="html";}return {html:_36f=="html",label:_36e};},doHighlight:function(_370,find){var _371=(this.ignoreCase?"i":"")+(this.highlightMatch=="all"?"g":""),i=this.queryExpr.indexOf("${0}");find=dojo.regexp.escapeString(find);return this._escapeHtml(_370).replace(new RegExp((i==0?"^":"")+"("+find+")"+(i==(this.queryExpr.length-4)?"$":""),_371),"<span class=\"dijitComboBoxHighlightMatch\">$1</span>");},_escapeHtml:function(str){str=String(str).replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");return str;},reset:function(){this.item=null;this.inherited(arguments);},labelFunc:function(item,_372){return _372.getValue(item,this.labelAttr||this.searchAttr).toString();}});dojo.declare("dijit.form._ComboBoxMenu",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:"<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' role='option'></li>"+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' role='option'></li>"+"</ul>",_messages:null,baseClass:"dijitComboBoxMenu",postMixInProperties:function(){this.inherited(arguments);this._messages=dojo.i18n.getLocalization("dijit.form","ComboBox",this.lang);},buildRendering:function(){this.inherited(arguments);this.previousButton.innerHTML=this._messages["previousMessage"];this.nextButton.innerHTML=this._messages["nextMessage"];},_setValueAttr:function(_373){this.value=_373;this.onChange(_373);},onChange:function(_374){},onPage:function(_375){},onClose:function(){this._blurOptionNode();},_createOption:function(item,_376){var _377=dojo.create("li",{"class":"dijitReset dijitMenuItem"+(this.isLeftToRight()?"":" dijitMenuItemRtl"),role:"option"});var _378=_376(item);if(_378.html){_377.innerHTML=_378.label;}else{_377.appendChild(dojo.doc.createTextNode(_378.label));}if(_377.innerHTML==""){_377.innerHTML="&nbsp;";}_377.item=item;return _377;},createOptions:function(_379,_37a,_37b){this.previousButton.style.display=(_37a.start==0)?"none":"";dojo.attr(this.previousButton,"id",this.id+"_prev");dojo.forEach(_379,function(item,i){var _37c=this._createOption(item,_37b);dojo.attr(_37c,"id",this.id+i);this.domNode.insertBefore(_37c,this.nextButton);},this);var _37d=false;if(_37a._maxOptions&&_37a._maxOptions!=-1){if((_37a.start+_37a.count)<_37a._maxOptions){_37d=true;}else{if((_37a.start+_37a.count)>_37a._maxOptions&&_37a.count==_379.length){_37d=true;}}}else{if(_37a.count==_379.length){_37d=true;}}this.nextButton.style.display=_37d?"":"none";dojo.attr(this.nextButton,"id",this.id+"_next");return this.domNode.childNodes;},clearResultList:function(){while(this.domNode.childNodes.length>2){this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);}this._blurOptionNode();},_onMouseDown:function(evt){dojo.stopEvent(evt);},_onMouseUp:function(evt){if(evt.target===this.domNode||!this._highlighted_option){return;}else{if(evt.target==this.previousButton){this._blurOptionNode();this.onPage(-1);}else{if(evt.target==this.nextButton){this._blurOptionNode();this.onPage(1);}else{var tgt=evt.target;while(!tgt.item){tgt=tgt.parentNode;}this._setValueAttr({target:tgt},true);}}}},_onMouseOver:function(evt){if(evt.target===this.domNode){return;}var tgt=evt.target;if(!(tgt==this.previousButton||tgt==this.nextButton)){while(!tgt.item){tgt=tgt.parentNode;}}this._focusOptionNode(tgt);},_onMouseOut:function(evt){if(evt.target===this.domNode){return;}this._blurOptionNode();},_focusOptionNode:function(node){if(this._highlighted_option!=node){this._blurOptionNode();this._highlighted_option=node;dojo.addClass(this._highlighted_option,"dijitMenuItemSelected");}},_blurOptionNode:function(){if(this._highlighted_option){dojo.removeClass(this._highlighted_option,"dijitMenuItemSelected");this._highlighted_option=null;}},_highlightNextOption:function(){if(!this.getHighlightedOption()){var fc=this.domNode.firstChild;this._focusOptionNode(fc.style.display=="none"?fc.nextSibling:fc);}else{var ns=this._highlighted_option.nextSibling;if(ns&&ns.style.display!="none"){this._focusOptionNode(ns);}else{this.highlightFirstOption();}}dojo.window.scrollIntoView(this._highlighted_option);},highlightFirstOption:function(){var _37e=this.domNode.firstChild;var _37f=_37e.nextSibling;this._focusOptionNode(_37f.style.display=="none"?_37e:_37f);dojo.window.scrollIntoView(this._highlighted_option);},highlightLastOption:function(){this._focusOptionNode(this.domNode.lastChild.previousSibling);dojo.window.scrollIntoView(this._highlighted_option);},_highlightPrevOption:function(){if(!this.getHighlightedOption()){var lc=this.domNode.lastChild;this._focusOptionNode(lc.style.display=="none"?lc.previousSibling:lc);}else{var ps=this._highlighted_option.previousSibling;if(ps&&ps.style.display!="none"){this._focusOptionNode(ps);}else{this.highlightLastOption();}}dojo.window.scrollIntoView(this._highlighted_option);},_page:function(up){var _380=0;var _381=this.domNode.scrollTop;var _382=dojo.style(this.domNode,"height");if(!this.getHighlightedOption()){this._highlightNextOption();}while(_380<_382){if(up){if(!this.getHighlightedOption().previousSibling||this._highlighted_option.previousSibling.style.display=="none"){break;}this._highlightPrevOption();}else{if(!this.getHighlightedOption().nextSibling||this._highlighted_option.nextSibling.style.display=="none"){break;}this._highlightNextOption();}var _383=this.domNode.scrollTop;_380+=(_383-_381)*(up?-1:1);_381=_383;}},pageUp:function(){this._page(true);},pageDown:function(){this._page(false);},getHighlightedOption:function(){var ho=this._highlighted_option;return (ho&&ho.parentNode)?ho:null;},handleKey:function(evt){switch(evt.charOrCode){case dojo.keys.DOWN_ARROW:this._highlightNextOption();return false;case dojo.keys.PAGE_DOWN:this.pageDown();return false;case dojo.keys.UP_ARROW:this._highlightPrevOption();return false;case dojo.keys.PAGE_UP:this.pageUp();return false;default:return true;}}});dojo.declare("dijit.form.ComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{_setValueAttr:function(_384,_385,_386){this._set("item",null);if(!_384){_384="";}dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,_384,_385,_386);}});dojo.declare("dijit.form._ComboBoxDataStore",null,{constructor:function(root){this.root=root;if(root.tagName!="SELECT"&&root.firstChild){root=dojo.query("select",root);if(root.length>0){root=root[0];}else{this.root.innerHTML="<SELECT>"+this.root.innerHTML+"</SELECT>";root=this.root.firstChild;}this.root=root;}dojo.query("> option",root).forEach(function(node){node.innerHTML=dojo.trim(node.innerHTML);});},getValue:function(item,_387,_388){return (_387=="value")?item.value:(item.innerText||item.textContent||"");},isItemLoaded:function(_389){return true;},getFeatures:function(){return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};},_fetchItems:function(args,_38a,_38b){if(!args.query){args.query={};}if(!args.query.name){args.query.name="";}if(!args.queryOptions){args.queryOptions={};}var _38c=dojo.data.util.filter.patternToRegExp(args.query.name,args.queryOptions.ignoreCase),_38d=dojo.query("> option",this.root).filter(function(_38e){return (_38e.innerText||_38e.textContent||"").match(_38c);});if(args.sort){_38d.sort(dojo.data.util.sorter.createSortFunction(args.sort,this));}_38a(_38d,args);},close:function(_38f){return;},getLabel:function(item){return item.innerHTML;},getIdentity:function(item){return dojo.attr(item,"value");},fetchItemByIdentity:function(args){var item=dojo.query("> option[value='"+args.identity+"']",this.root)[0];args.onItem(item);},fetchSelectedItem:function(){var root=this.root,si=root.selectedIndex;return typeof si=="number"?dojo.query("> option:nth-child("+(si!=-1?si+1:1)+")",root)[0]:null;}});dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);}if(!dojo._hasResource["dijit.form.FilteringSelect"]){dojo._hasResource["dijit.form.FilteringSelect"]=true;dojo.provide("dijit.form.FilteringSelect");dojo.declare("dijit.form.FilteringSelect",[dijit.form.MappedTextBox,dijit.form.ComboBoxMixin],{required:true,_lastDisplayedValue:"",_isValidSubset:function(){return this._opened;},isValid:function(){return this.item||(!this.required&&this.get("displayedValue")=="");},_refreshState:function(){if(!this.searchTimer){this.inherited(arguments);}},_callbackSetLabel:function(_390,_391,_392){if((_391&&_391.query[this.searchAttr]!=this._lastQuery)||(!_391&&_390.length&&this.store.getIdentity(_390[0])!=this._lastQuery)){return;}if(!_390.length){this.valueNode.value="";dijit.form.TextBox.superclass._setValueAttr.call(this,"",_392||(_392===undefined&&!this._focused));this._set("item",null);this.validate(this._focused);}else{this.set("item",_390[0],_392);}},_openResultList:function(_393,_394){if(_394.query[this.searchAttr]!=this._lastQuery){return;}dijit.form.ComboBoxMixin.prototype._openResultList.apply(this,arguments);if(this.item===undefined){this.validate(true);}},_getValueAttr:function(){return this.valueNode.value;},_getValueField:function(){return "value";},_setValueAttr:function(_395,_396){if(!this._onChangeActive){_396=null;}this._lastQuery=_395;if(_395===null||_395===""){this._setDisplayedValueAttr("",_396);return;}var self=this;this.store.fetchItemByIdentity({identity:_395,onItem:function(item){self._callbackSetLabel(item?[item]:[],undefined,_396);}});},_setItemAttr:function(item,_397,_398){this.inherited(arguments);this.valueNode.value=this.value;this._lastDisplayedValue=this.textbox.value;},_getDisplayQueryString:function(text){return text.replace(/([\\\*\?])/g,"\\$1");},_setDisplayedValueAttr:function(_399,_39a){if(_399==null){_399="";}if(!this._created){if(!("displayedValue" in this.params)){return;}_39a=false;}if(this.store){this.closeDropDown();var _39b=dojo.clone(this.query);this._lastQuery=_39b[this.searchAttr]=this._getDisplayQueryString(_399);this.textbox.value=_399;this._lastDisplayedValue=_399;this._set("displayedValue",_399);var _39c=this;var _39d={query:_39b,queryOptions:{ignoreCase:this.ignoreCase,deep:true},onComplete:function(_39e,_39f){_39c._fetchHandle=null;dojo.hitch(_39c,"_callbackSetLabel")(_39e,_39f,_39a);},onError:function(_3a0){_39c._fetchHandle=null;console.error("dijit.form.FilteringSelect: "+_3a0);dojo.hitch(_39c,"_callbackSetLabel")([],undefined,false);}};dojo.mixin(_39d,this.fetchProperties);this._fetchHandle=this.store.fetch(_39d);}},undo:function(){this.set("displayedValue",this._lastDisplayedValue);}});}if(!dojo._hasResource["dijit.form.Form"]){dojo._hasResource["dijit.form.Form"]=true;dojo.provide("dijit.form.Form");dojo.declare("dijit.form.Form",[dijit._Widget,dijit._Templated,dijit.form._FormMixin,dijit.layout._ContentPaneResizeMixin],{name:"",action:"",method:"",encType:"","accept-charset":"",accept:"",target:"",templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{action:"",method:"",encType:"","accept-charset":"",accept:"",target:""}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name='"+this.name+"'"):"";this.inherited(arguments);},execute:function(_3a1){},onExecute:function(){},_setEncTypeAttr:function(_3a2){this.encType=_3a2;dojo.attr(this.domNode,"encType",_3a2);if(dojo.isIE){this.domNode.encoding=_3a2;}},postCreate:function(){if(dojo.isIE&&this.srcNodeRef&&this.srcNodeRef.attributes){var item=this.srcNodeRef.attributes.getNamedItem("encType");if(item&&!item.specified&&(typeof item.value=="string")){this.set("encType",item.value);}}this.inherited(arguments);},reset:function(e){var faux={returnValue:true,preventDefault:function(){this.returnValue=false;},stopPropagation:function(){},currentTarget:e?e.target:this.domNode,target:e?e.target:this.domNode};if(!(this.onReset(faux)===false)&&faux.returnValue){this.inherited(arguments,[]);}},onReset:function(e){return true;},_onReset:function(e){this.reset(e);dojo.stopEvent(e);return false;},_onSubmit:function(e){var fp=dijit.form.Form.prototype;if(this.execute!=fp.execute||this.onExecute!=fp.onExecute){dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.","","2.0");this.onExecute();this.execute(this.getValues());}if(this.onSubmit(e)===false){dojo.stopEvent(e);}},onSubmit:function(e){return this.isValid();},submit:function(){if(!(this.onSubmit()===false)){this.containerNode.submit();}}});}if(!dojo._hasResource["dijit.form.RadioButton"]){dojo._hasResource["dijit.form.RadioButton"]=true;dojo.provide("dijit.form.RadioButton");}if(!dojo._hasResource["dijit.form._FormSelectWidget"]){dojo._hasResource["dijit.form._FormSelectWidget"]=true;dojo.provide("dijit.form._FormSelectWidget");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(_3a3){var _3a4=_3a3,opts=this.options||[],l=opts.length;if(_3a4===undefined){return opts;}if(dojo.isArray(_3a4)){return dojo.map(_3a4,"return this.getOptions(item);",this);}if(dojo.isObject(_3a3)){if(!dojo.some(this.options,function(o,idx){if(o===_3a4||(o.value&&o.value===_3a4.value)){_3a4=idx;return true;}return false;})){_3a4=-1;}}if(typeof _3a4=="string"){for(var i=0;i<l;i++){if(opts[i].value===_3a4){_3a4=i;break;}}}if(typeof _3a4=="number"&&_3a4>=0&&_3a4<l){return this.options[_3a4];}return null;},addOption:function(_3a5){if(!dojo.isArray(_3a5)){_3a5=[_3a5];}dojo.forEach(_3a5,function(i){if(i&&dojo.isObject(i)){this.options.push(i);}},this);this._loadChildren();},removeOption:function(_3a6){if(!dojo.isArray(_3a6)){_3a6=[_3a6];}var _3a7=this.getOptions(_3a6);dojo.forEach(_3a7,function(i){if(i){this.options=dojo.filter(this.options,function(node,idx){return (node.value!==i.value||node.label!==i.label);});this._removeOptionItem(i);}},this);this._loadChildren();},updateOption:function(_3a8){if(!dojo.isArray(_3a8)){_3a8=[_3a8];}dojo.forEach(_3a8,function(i){var _3a9=this.getOptions(i),k;if(_3a9){for(k in i){_3a9[k]=i[k];}}},this);this._loadChildren();},setStore:function(_3aa,_3ab,_3ac){var _3ad=this.store;_3ac=_3ac||{};if(_3ad!==_3aa){dojo.forEach(this._notifyConnections||[],dojo.disconnect);delete this._notifyConnections;if(_3aa&&_3aa.getFeatures()["dojo.data.api.Notification"]){this._notifyConnections=[dojo.connect(_3aa,"onNew",this,"_onNewItem"),dojo.connect(_3aa,"onDelete",this,"_onDeleteItem"),dojo.connect(_3aa,"onSet",this,"_onSetItem")];}this._set("store",_3aa);}this._onChangeActive=false;if(this.options&&this.options.length){this.removeOption(this.options);}if(_3aa){this._loadingStore=true;_3aa.fetch(dojo.delegate(_3ac,{onComplete:function(_3ae,opts){if(this.sortByLabel&&!_3ac.sort&&_3ae.length){_3ae.sort(dojo.data.util.sorter.createSortFunction([{attribute:_3aa.getLabelAttributes(_3ae[0])[0]}],_3aa));}if(_3ac.onFetch){_3ae=_3ac.onFetch.call(this,_3ae,opts);}dojo.forEach(_3ae,function(i){this._addOptionForItem(i);},this);this._loadingStore=false;this.set("value","_pendingValue" in this?this._pendingValue:_3ab);delete this._pendingValue;if(!this.loadChildrenOnOpen){this._loadChildren();}else{this._pseudoLoadChildren(_3ae);}this._fetchedWith=opts;this._lastValueReported=this.multiple?[]:null;this._onChangeActive=true;this.onSetStore();this._handleOnChange(this.value);},scope:this}));}else{delete this._fetchedWith;}return _3ad;},_setValueAttr:function(_3af,_3b0){if(this._loadingStore){this._pendingValue=_3af;return;}var opts=this.getOptions()||[];if(!dojo.isArray(_3af)){_3af=[_3af];}dojo.forEach(_3af,function(i,idx){if(!dojo.isObject(i)){i=i+"";}if(typeof i==="string"){_3af[idx]=dojo.filter(opts,function(node){return node.value===i;})[0]||{value:"",label:""};}},this);_3af=dojo.filter(_3af,function(i){return i&&i.value;});if(!this.multiple&&(!_3af[0]||!_3af[0].value)&&opts.length){_3af[0]=opts[0];}dojo.forEach(opts,function(i){i.selected=dojo.some(_3af,function(v){return v.value===i.value;});});var val=dojo.map(_3af,function(i){return i.value;}),disp=dojo.map(_3af,function(i){return i.label;});this._set("value",this.multiple?val:val[0]);this._setDisplay(this.multiple?disp:disp[0]);this._updateSelection();this._handleOnChange(this.value,_3b0);},_getDisplayedValueAttr:function(){var val=this.get("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];},_loadChildren:function(){if(this._loadingStore){return;}dojo.forEach(this._getChildren(),function(_3b1){_3b1.destroyRecursive();});dojo.forEach(this.options,this._addOptionItem,this);this._updateSelection();},_updateSelection:function(){this._set("value",this._getValueFromOpts());var val=this.value;if(!dojo.isArray(val)){val=[val];}if(val&&val[0]){dojo.forEach(this._getChildren(),function(_3b2){var _3b3=dojo.some(val,function(v){return _3b2.option&&(v===_3b2.option.value);});dojo.toggleClass(_3b2.domNode,this.baseClass+"SelectedOption",_3b3);dijit.setWaiState(_3b2.domNode,"selected",_3b3);},this);}},_getValueFromOpts:function(){var opts=this.getOptions()||[];if(!this.multiple&&opts.length){var opt=dojo.filter(opts,function(i){return i.selected;})[0];if(opt&&opt.value){return opt.value;}else{opts[0].selected=true;return opts[0].value;}}else{if(this.multiple){return dojo.map(dojo.filter(opts,function(i){return i.selected;}),function(i){return i.value;})||[];}}return "";},_onNewItem:function(item,_3b4){if(!_3b4||!_3b4.parent){this._addOptionForItem(item);}},_onDeleteItem:function(item){var _3b5=this.store;this.removeOption(_3b5.getIdentity(item));},_onSetItem:function(item){this.updateOption(this._getOptionObjForItem(item));},_getOptionObjForItem:function(item){var _3b6=this.store,_3b7=_3b6.getLabel(item),_3b8=(_3b7?_3b6.getIdentity(item):null);return {value:_3b8,label:_3b7,item:item};},_addOptionForItem:function(item){var _3b9=this.store;if(!_3b9.isItemLoaded(item)){_3b9.loadItem({item:item,onComplete:function(i){this._addOptionForItem(item);},scope:this});return;}var _3ba=this._getOptionObjForItem(item);this.addOption(_3ba);},constructor:function(_3bb){this._oValue=(_3bb||{}).value||null;},buildRendering:function(){this.inherited(arguments);dojo.setSelectable(this.focusNode,false);},_fillContent:function(){var opts=this.options;if(!opts){opts=this.options=this.srcNodeRef?dojo.query(">",this.srcNodeRef).map(function(node){if(node.getAttribute("type")==="separator"){return {value:"",label:"",selected:false,disabled:false};}return {value:(node.getAttribute("data-"+dojo._scopeName+"-value")||node.getAttribute("value")),label:String(node.innerHTML),selected:node.getAttribute("selected")||false,disabled:node.getAttribute("disabled")||false};},this):[];}if(!this.value){this._set("value",this._getValueFromOpts());}else{if(this.multiple&&typeof this.value=="string"){this_set("value",this.value.split(","));}}},postCreate:function(){this.inherited(arguments);this.connect(this,"onChange","_updateSelection");this.connect(this,"startup","_loadChildren");this._setValueAttr(this.value,null);},startup:function(){this.inherited(arguments);var _3bc=this.store,_3bd={};dojo.forEach(["query","queryOptions","onFetch"],function(i){if(this[i]){_3bd[i]=this[i];}delete this[i];},this);if(_3bc&&_3bc.getFeatures()["dojo.data.api.Identity"]){this.store=null;this.setStore(_3bc,this._oValue,_3bd);}},destroy:function(){dojo.forEach(this._notifyConnections||[],dojo.disconnect);this.inherited(arguments);},_addOptionItem:function(_3be){},_removeOptionItem:function(_3bf){},_setDisplay:function(_3c0){},_getChildren:function(){return [];},_getSelectedOptionsAttr:function(){return this.getOptions(this.get("value"));},_pseudoLoadChildren:function(_3c1){},onSetStore:function(){}});}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(_3c2,_3c3){var _3c4=(this._keyNavCodes={});var prev=dojo.hitch(this,this.focusPrev);var next=dojo.hitch(this,this.focusNext);dojo.forEach(_3c2,function(code){_3c4[code]=prev;});dojo.forEach(_3c3,function(code){_3c4[code]=next;});_3c4[dojo.keys.HOME]=dojo.hitch(this,"focusFirstChild");_3c4[dojo.keys.END]=dojo.hitch(this,"focusLastChild");this.connect(this.domNode,"onkeypress","_onContainerKeypress");this.connect(this.domNode,"onfocus","_onContainerFocus");},startupKeyNavChildren:function(){dojo.forEach(this.getChildren(),dojo.hitch(this,"_startupChild"));},addChild:function(_3c5,_3c6){dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);this._startupChild(_3c5);},focus:function(){this.focusFirstChild();},focusFirstChild:function(){var _3c7=this._getFirstFocusableChild();if(_3c7){this.focusChild(_3c7);}},focusLastChild:function(){var _3c8=this._getLastFocusableChild();if(_3c8){this.focusChild(_3c8);}},focusNext:function(){var _3c9=this._getNextFocusableChild(this.focusedChild,1);this.focusChild(_3c9);},focusPrev:function(){var _3ca=this._getNextFocusableChild(this.focusedChild,-1);this.focusChild(_3ca,true);},focusChild:function(_3cb,last){if(this.focusedChild&&_3cb!==this.focusedChild){this._onChildBlur(this.focusedChild);}_3cb.set("tabIndex",this.tabIndex);_3cb.focus(last?"end":"start");this._set("focusedChild",_3cb);},_startupChild:function(_3cc){_3cc.set("tabIndex","-1");this.connect(_3cc,"_onFocus",function(){_3cc.set("tabIndex",this.tabIndex);});this.connect(_3cc,"_onBlur",function(){_3cc.set("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(_3cd){},_getFirstFocusableChild:function(){return this._getNextFocusableChild(null,1);},_getLastFocusableChild:function(){return this._getNextFocusableChild(null,-1);},_getNextFocusableChild:function(_3ce,dir){if(_3ce){_3ce=this._getSiblingOfChild(_3ce,dir);}var _3cf=this.getChildren();for(var i=0;i<_3cf.length;i++){if(!_3ce){_3ce=_3cf[(dir>0)?0:(_3cf.length-1)];}if(_3ce.isFocusable()){return _3ce;}_3ce=this._getSiblingOfChild(_3ce,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,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/MenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" role=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon 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\" role=\"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"}}),baseClass:"dijitMenuItem",label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_3d0){if(_3d0&&!("label" in this.params)){this.set("label",_3d0.innerHTML);}},buildRendering:function(){this.inherited(arguments);var _3d1=this.id+"_text";dojo.attr(this.containerNode,"id",_3d1);if(this.accelKeyNode){dojo.attr(this.accelKeyNode,"id",this.id+"_accel");_3d1+=" "+this.id+"_accel";}dijit.setWaiState(this.domNode,"labelledby",_3d1);dojo.setSelectable(this.domNode,false);},_onHover:function(){this.getParent().onItemHover(this);},_onUnhover:function(){this.getParent().onItemUnhover(this);this._set("hovering",false);},_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(_3d2){dojo.toggleClass(this.domNode,"dijitMenuItemSelected",_3d2);},setLabel:function(_3d3){dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");this.set("label",_3d3);},setDisabled:function(_3d4){dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");this.set("disabled",_3d4);},_setDisabledAttr:function(_3d5){dijit.setWaiState(this.focusNode,"disabled",_3d5?"true":"false");this._set("disabled",_3d5);},_setAccelKeyAttr:function(_3d6){this.accelKeyNode.style.display=_3d6?"":"none";this.accelKeyNode.innerHTML=_3d6;dojo.attr(this.containerNode,"colSpan",_3d6?"1":"2");this._set("accelKey",_3d6);}});}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 _3d7=dojo.query("*",this.srcNodeRef);dijit.PopupMenuItem.superclass._fillContent.call(this,_3d7[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.startup();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\" role=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"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\" role=\"presentation\">&nbsp;</td>\n</tr>\n"),checked:false,_setCheckedAttr:function(_3d8){dojo.toggleClass(this.domNode,"dijitCheckedMenuItemChecked",_3d8);dijit.setWaiState(this.domNode,"checked",_3d8);this._set("checked",_3d8);},onChange:function(_3d9){},_onClick:function(e){if(!this.disabled){this.set("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 class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),buildRendering:function(){this.inherited(arguments);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(_3da){_3da.startup();});this.startupKeyNavChildren();this.inherited(arguments);},onExecute:function(){},onCancel:function(_3db){},_moveToPopup:function(evt){if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){this.focusedChild._onClick(evt);}else{var _3dc=this._getTopMenu();if(_3dc&&_3dc._isMenuBar){_3dc.focusNext();}}},_onPopupHover:function(evt){if(this.currentPopup&&this.currentPopup._pendingClose_timer){var _3dd=this.currentPopup.parentMenu;if(_3dd.focusedChild){_3dd.focusedChild._setSelected(false);}_3dd.focusedChild=this.currentPopup.from_item;_3dd.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 _3de=item.popup;if(_3de){this._stopPendingCloseTimer(_3de);_3de._pendingClose_timer=setTimeout(function(){_3de._pendingClose_timer=null;if(_3de.parentMenu){_3de.parentMenu.currentPopup=null;}dijit.popup.close(_3de);},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(_3df){if(_3df._pendingClose_timer){clearTimeout(_3df._pendingClose_timer);_3df._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(typeof this.isShowingNow=="undefined"){this._markActive();}this.focusChild(item);if(item.disabled){return false;}if(item.popup){this._openPopup();}else{this.onExecute();item.onClick(evt);}},_openPopup:function(){this._stopPopupTimer();var _3e0=this.focusedChild;if(!_3e0){return;}var _3e1=_3e0.popup;if(_3e1.isShowingNow){return;}if(this.currentPopup){this._stopPendingCloseTimer(this.currentPopup);dijit.popup.close(this.currentPopup);}_3e1.parentMenu=this;_3e1.from_item=_3e0;var self=this;dijit.popup.open({parent:this,popup:_3e1,around:_3e0.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(_3e0);self._cleanUp();_3e0._setSelected(true);self.focusedChild=_3e0;},onExecute:dojo.hitch(this,"_cleanUp")});this.currentPopup=_3e1;_3e1.connect(_3e1.domNode,"onmouseenter",dojo.hitch(self,"_onPopupHover"));if(_3e1.focus){_3e1._focus_timer=setTimeout(dojo.hitch(_3e1,function(){this._focus_timer=null;this.focus();}),0);}},_markActive:function(){this.isActive=true;dojo.replaceClass(this.domNode,"dijitMenuActive","dijitMenuPassive");},onOpen:function(e){this.isShowingNow=true;this._markActive();},_markInactive:function(){this.isActive=false;dojo.replaceClass(this.domNode,"dijitMenuPassive","dijitMenuActive");},onClose:function(){this._stopFocusTimer();this._markInactive();this.isShowingNow=false;this.parentMenu=null;},_closeChild:function(){this._stopPopupTimer();var _3e2=this.focusedChild&&this.focusedChild.from_item;if(this.currentPopup){if(dijit._curFocus&&dojo.isDescendant(dijit._curFocus,this.currentPopup.domNode)){this.focusedChild.focusNode.focus();}dijit.popup.close(this.currentPopup);this.currentPopup=null;}if(this.focusedChild){this.focusedChild._setSelected(false);this.focusedChild._onUnhover();this.focusedChild=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\" role=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=\"0\">\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),baseClass:"dijitMenu",targetNodeIds:[],contextMenuForWindow:false,leftClickToOpen:false,refocus:true,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(_3e3){var win=dojo.window.get(this._iframeContentDocument(_3e3))||this._iframeContentDocument(_3e3)["__parent__"]||(_3e3.name&&dojo.doc.frames[_3e3.name])||null;return win;},_iframeContentDocument:function(_3e4){var doc=_3e4.contentDocument||(_3e4.contentWindow&&_3e4.contentWindow.document)||(_3e4.name&&dojo.doc.frames[_3e4.name]&&dojo.doc.frames[_3e4.name].document)||null;return doc;},bindDomNode:function(node){node=dojo.byId(node);var cn;if(node.tagName.toLowerCase()=="iframe"){var _3e5=node,win=this._iframeContentWindow(_3e5);cn=dojo.withGlobal(win,dojo.body);}else{cn=(node==dojo.body()?dojo.doc.documentElement:node);}var _3e6={node:node,iframe:_3e5};dojo.attr(node,"_dijitMenu"+this.id,this._bindings.push(_3e6));var _3e7=dojo.hitch(this,function(cn){return [dojo.connect(cn,this.leftClickToOpen?"onclick":"oncontextmenu",this,function(evt){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_3e5,{x:evt.pageX,y:evt.pageY});}),dojo.connect(cn,"onkeydown",this,function(evt){if(evt.shiftKey&&evt.keyCode==dojo.keys.F10){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_3e5);}})];});_3e6.connects=cn?_3e7(cn):[];if(_3e5){_3e6.onloadHandler=dojo.hitch(this,function(){var win=this._iframeContentWindow(_3e5);cn=dojo.withGlobal(win,dojo.body);_3e6.connects=_3e7(cn);});if(_3e5.addEventListener){_3e5.addEventListener("load",_3e6.onloadHandler,false);}else{_3e5.attachEvent("onload",_3e6.onloadHandler);}}},unBindDomNode:function(_3e8){var node;try{node=dojo.byId(_3e8);}catch(e){return;}var _3e9="_dijitMenu"+this.id;if(node&&dojo.hasAttr(node,_3e9)){var bid=dojo.attr(node,_3e9)-1,b=this._bindings[bid];dojo.forEach(b.connects,dojo.disconnect);var _3ea=b.iframe;if(_3ea){if(_3ea.removeEventListener){_3ea.removeEventListener("load",b.onloadHandler,false);}else{_3ea.detachEvent("onload",b.onloadHandler);}}dojo.removeAttr(node,_3e9);delete this._bindings[bid];}},_scheduleOpen:function(_3eb,_3ec,_3ed){if(!this._openTimer){this._openTimer=setTimeout(dojo.hitch(this,function(){delete this._openTimer;this._openMyself({target:_3eb,iframe:_3ec,coords:_3ed});}),1);}},_openMyself:function(args){var _3ee=args.target,_3ef=args.iframe,_3f0=args.coords;if(_3f0){if(_3ef){var od=_3ee.ownerDocument,ifc=dojo.position(_3ef,true),win=this._iframeContentWindow(_3ef),_3f1=dojo.withGlobal(win,"_docScroll",dojo);var cs=dojo.getComputedStyle(_3ef),tp=dojo._toPixelValue,left=(dojo.isIE&&dojo.isQuirks?0:tp(_3ef,cs.paddingLeft))+(dojo.isIE&&dojo.isQuirks?tp(_3ef,cs.borderLeftWidth):0),top=(dojo.isIE&&dojo.isQuirks?0:tp(_3ef,cs.paddingTop))+(dojo.isIE&&dojo.isQuirks?tp(_3ef,cs.borderTopWidth):0);_3f0.x+=ifc.x+left-_3f1.x;_3f0.y+=ifc.y+top-_3f1.y;}}else{_3f0=dojo.position(_3ee,true);_3f0.x+=10;_3f0.y+=10;}var self=this;var _3f2=dijit.getFocus(this);function _3f3(){if(self.refocus){dijit.focus(_3f2);}dijit.popup.close(self);};dijit.popup.open({popup:this,x:_3f0.x,y:_3f0.y,onExecute:_3f3,onCancel:_3f3,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["dijit.form.Select"]){dojo._hasResource["dijit.form.Select"]=true;dojo.provide("dijit.form.Select");dojo.declare("dijit.form._SelectMenu",dijit.Menu,{buildRendering:function(){this.inherited(arguments);var o=(this.menuTableNode=this.domNode);var n=(this.domNode=dojo.create("div",{style:{overflowX:"hidden",overflowY:"scroll"}}));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);},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousemove",dojo.stopEvent);},resize:function(mb){if(mb){dojo.marginBox(this.domNode,mb);if("w" in mb){this.menuTableNode.style.width="100%";}}}});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,focusNode\" cellspacing='0' cellpadding='0'\n\trole=\"combobox\" aria-haspopup=\"true\"\n\t><tbody role=\"presentation\"><tr role=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" role=\"presentation\"\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}\" aria-hidden=\"true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" role=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" role=\"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:"",message:"",tooltipPosition:[],emptyLabel:"&nbsp;",_isLoaded:false,_childrenLoaded:false,_fillContent:function(){this.inherited(arguments);if(this.options.length&&!this.value&&this.srcNodeRef){var si=this.srcNodeRef.selectedIndex||0;this.value=this.options[si>=0?si:0].value;}this.dropDown=new dijit.form._SelectMenu({id:this.id+"_menu"});dojo.addClass(this.dropDown.domNode,this.baseClass+"Menu");},_getMenuItemForOption:function(_3f4){if(!_3f4.value&&!_3f4.label){return new dijit.MenuSeparator();}else{var _3f5=dojo.hitch(this,"_setValueAttr",_3f4);var item=new dijit.MenuItem({option:_3f4,label:_3f4.label||this.emptyLabel,onClick:_3f5,disabled:_3f4.disabled||false});dijit.setWaiRole(item.focusNode,"listitem");return item;}},_addOptionItem:function(_3f6){if(this.dropDown){this.dropDown.addChild(this._getMenuItemForOption(_3f6));}},_getChildren:function(){if(!this.dropDown){return [];}return this.dropDown.getChildren();},_loadChildren:function(_3f7){if(_3f7===true){if(this.dropDown){delete this.dropDown.focusedChild;}if(this.options.length){this.inherited(arguments);}else{dojo.forEach(this._getChildren(),function(_3f8){_3f8.destroyRecursive();});var item=new dijit.MenuItem({label:"&nbsp;"});this.dropDown.addChild(item);}}else{this._updateSelection();}this._isLoaded=false;this._childrenLoaded=true;if(!this._loadingStore){this._setValueAttr(this.value);}},_setValueAttr:function(_3f9){this.inherited(arguments);dojo.attr(this.valueNode,"value",this.get("value"));},_setDisplay:function(_3fa){var lbl=_3fa||this.emptyLabel;this.containerNode.innerHTML="<span class=\"dijitReset dijitInline "+this.baseClass+"Label\">"+lbl+"</span>";dijit.setWaiState(this.focusNode,"valuetext",lbl);},validate:function(_3fb){var _3fc=this.isValid(_3fb);this._set("state",_3fc?"":"Error");dijit.setWaiState(this.focusNode,"invalid",_3fc?"false":"true");var _3fd=_3fc?"":this._missingMsg;if(this.message!==_3fd){this._set("message",_3fd);dijit.hideTooltip(this.domNode);if(_3fd){dijit.showTooltip(_3fd,this.domNode,this.tooltipPosition,!this.isLeftToRight());}}return _3fc;},isValid:function(_3fe){return (!this.required||this.value===0||!(/^\s*$/.test(this.value||"")));},reset:function(){this.inherited(arguments);dijit.hideTooltip(this.domNode);this._set("state","");this._set("message","");},postMixInProperties:function(){this.inherited(arguments);this._missingMsg=dojo.i18n.getLocalization("dijit.form","validate",this.lang).missingMessage;},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousemove",dojo.stopEvent);},_setStyleAttr:function(_3ff){this.inherited(arguments);dojo.toggleClass(this.domNode,this.baseClass+"FixedWidth",!!this.tableNode.style.width);},isLoaded:function(){return this._isLoaded;},loadDropDown:function(_400){this._loadChildren(true);this._isLoaded=true;_400();},closeDropDown:function(){this.inherited(arguments);if(this.dropDown&&this.dropDown.menuTableNode){this.dropDown.menuTableNode.style.width="";}},uninitialize:function(_401){if(this.dropDown&&!this.dropDown._destroyed){this.dropDown.destroyRecursive(_401);delete this.dropDown;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.SimpleTextarea"]){dojo._hasResource["dijit.form.SimpleTextarea"]=true;dojo.provide("dijit.form.SimpleTextarea");dojo.declare("dijit.form.SimpleTextarea",dijit.form.TextBox,{baseClass:"dijitTextBox 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);},buildRendering:function(){this.inherited(arguments);if(dojo.isIE&&this.cols){dojo.addClass(this.textbox,"dijitTextAreaCols");}},filter:function(_402){if(_402){_402=_402.replace(/\r/g,"");}return this.inherited(arguments);},_previousValue:"",_onInput:function(e){if(this.maxLength){var _403=parseInt(this.maxLength);var _404=this.textbox.value.replace(/\r/g,"");var _405=_404.length-_403;if(_405>0){if(e){dojo.stopEvent(e);}var _406=this.textbox;if(_406.selectionStart){var pos=_406.selectionStart;var cr=0;if(dojo.isOpera){cr=(this.textbox.value.substring(0,pos).match(/\r/g)||[]).length;}this.textbox.value=_404.substring(0,pos-_405-cr)+_404.substring(pos-cr);_406.setSelectionRange(pos-_405,pos-_405);}else{if(dojo.doc.selection){_406.focus();var _407=dojo.doc.selection.createRange();_407.moveStart("character",-_405);_407.text="";_407.select();}}}this._previousValue=this.textbox.value;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.InlineEditBox"]){dojo._hasResource["dijit.InlineEditBox"]=true;dojo.provide("dijit.InlineEditBox");dojo.declare("dijit.InlineEditBox",dijit._Widget,{editing:false,autoSave:true,buttonSave:"",buttonCancel:"",renderAsHtml:false,editor:"dijit.form.TextBox",editorWrapper:"dijit._InlineEditor",editorParams:{},disabled:false,onChange:function(_408){},onCancel:function(){},width:"100%",value:"",noValueIndicator:dojo.isIE<=6?"<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>":"<span style='text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",constructor:function(){this.editorParams={};},postMixInProperties:function(){this.inherited(arguments);this.displayNode=this.srcNodeRef;var _409={ondijitclick:"_onClick",onmouseover:"_onMouseOver",onmouseout:"_onMouseOut",onfocus:"_onMouseOver",onblur:"_onMouseOut"};for(var name in _409){this.connect(this.displayNode,name,_409[name]);}dijit.setWaiRole(this.displayNode,"button");if(!this.displayNode.getAttribute("tabIndex")){this.displayNode.setAttribute("tabIndex",0);}if(!this.value&&!("value" in this.params)){this.value=dojo.trim(this.renderAsHtml?this.displayNode.innerHTML:(this.displayNode.innerText||this.displayNode.textContent||""));}if(!this.value){this.displayNode.innerHTML=this.noValueIndicator;}dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayMode");},setDisabled:function(_40a){dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");this.set("disabled",_40a);},_setDisabledAttr:function(_40b){dijit.setWaiState(this.domNode,"disabled",_40b);if(_40b){this.displayNode.removeAttribute("tabIndex");}else{this.displayNode.setAttribute("tabIndex",0);}dojo.toggleClass(this.displayNode,"dijitInlineEditBoxDisplayModeDisabled",_40b);this._set("disabled",_40b);},_onMouseOver:function(){if(!this.disabled){dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");}},_onMouseOut:function(){dojo.removeClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");},_onClick:function(e){if(this.disabled){return;}if(e){dojo.stopEvent(e);}this._onMouseOut();setTimeout(dojo.hitch(this,"edit"),0);},edit:function(){if(this.disabled||this.editing){return;}this.editing=true;this._savedPosition=dojo.style(this.displayNode,"position")||"static";this._savedOpacity=dojo.style(this.displayNode,"opacity")||"1";this._savedTabIndex=dojo.attr(this.displayNode,"tabIndex")||"0";if(this.wrapperWidget){var ew=this.wrapperWidget.editWidget;ew.set("displayedValue" in ew?"displayedValue":"value",this.value);}else{var _40c=dojo.create("span",null,this.domNode,"before");var ewc=typeof this.editorWrapper=="string"?dojo.getObject(this.editorWrapper):this.editorWrapper;this.wrapperWidget=new ewc({value:this.value,buttonSave:this.buttonSave,buttonCancel:this.buttonCancel,dir:this.dir,lang:this.lang,tabIndex:this._savedTabIndex,editor:this.editor,inlineEditBox:this,sourceStyle:dojo.getComputedStyle(this.displayNode),save:dojo.hitch(this,"save"),cancel:dojo.hitch(this,"cancel")},_40c);if(!this._started){this.startup();}}var ww=this.wrapperWidget;if(dojo.isIE){dijit.focus(dijit.getFocus());}dojo.style(this.displayNode,{position:"absolute",opacity:"0",display:"none"});dojo.style(ww.domNode,{position:this._savedPosition,visibility:"visible",opacity:"1"});dojo.attr(this.displayNode,"tabIndex","-1");setTimeout(dojo.hitch(this,function(){ww.focus();ww._resetValue=ww.getValue();}),0);},_onBlur:function(){this.inherited(arguments);if(!this.editing){}},destroy:function(){if(this.wrapperWidget&&!this.wrapperWidget._destroyed){this.wrapperWidget.destroy();delete this.wrapperWidget;}this.inherited(arguments);},_showText:function(_40d){var ww=this.wrapperWidget;dojo.style(ww.domNode,{position:"absolute",visibility:"hidden",opacity:"0"});dojo.style(this.displayNode,{position:this._savedPosition,opacity:this._savedOpacity,display:""});dojo.attr(this.displayNode,"tabIndex",this._savedTabIndex);if(_40d){dijit.focus(this.displayNode);}},save:function(_40e){if(this.disabled||!this.editing){return;}this.editing=false;var ww=this.wrapperWidget;var _40f=ww.getValue();this.set("value",_40f);this._showText(_40e);},setValue:function(val){dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated.  Use set('value', ...) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(val){val=dojo.trim(val);var _410=this.renderAsHtml?val:val.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;").replace(/\n/g,"<br>");this.displayNode.innerHTML=_410||this.noValueIndicator;this._set("value",val);if(this._started){setTimeout(dojo.hitch(this,"onChange",val),0);}},getValue:function(){dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated.  Use get('value') instead.","","2.0");return this.get("value");},cancel:function(_411){if(this.disabled||!this.editing){return;}this.editing=false;setTimeout(dojo.hitch(this,"onCancel"),0);this._showText(_411);}});dojo.declare("dijit._InlineEditor",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/InlineEditBox.html","<span data-dojo-attach-point=\"editNode\" role=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdata-dojo-attach-event=\"onkeypress: _onKeyPress\"\n\t><span data-dojo-attach-point=\"editorPlaceholder\"></span\n\t><span data-dojo-attach-point=\"buttonContainer\"\n\t\t><button data-dojo-type=\"dijit.form.Button\" data-dojo-props=\"label: '${buttonSave}', 'class': 'saveButton'\"\n\t\t\tdata-dojo-attach-point=\"saveButton\" data-dojo-attach-event=\"onClick:save\"></button\n\t\t><button data-dojo-type=\"dijit.form.Button\"  data-dojo-props=\"label: '${buttonCancel}', 'class': 'cancelButton'\"\n\t\t\tdata-dojo-attach-point=\"cancelButton\" data-dojo-attach-event=\"onClick:cancel\"></button\n\t></span\n></span>\n"),widgetsInTemplate:true,postMixInProperties:function(){this.inherited(arguments);this.messages=dojo.i18n.getLocalization("dijit","common",this.lang);dojo.forEach(["buttonSave","buttonCancel"],function(prop){if(!this[prop]){this[prop]=this.messages[prop];}},this);},buildRendering:function(){this.inherited(arguments);var cls=typeof this.editor=="string"?dojo.getObject(this.editor):this.editor;var _412=this.sourceStyle,_413="line-height:"+_412.lineHeight+";",_414=dojo.getComputedStyle(this.domNode);dojo.forEach(["Weight","Family","Size","Style"],function(prop){var _415=_412["font"+prop],_416=_414["font"+prop];if(_416!=_415){_413+="font-"+prop+":"+_412["font"+prop]+";";}},this);dojo.forEach(["marginTop","marginBottom","marginLeft","marginRight"],function(prop){this.domNode.style[prop]=_412[prop];},this);var _417=this.inlineEditBox.width;if(_417=="100%"){_413+="width:100%;";this.domNode.style.display="block";}else{_413+="width:"+(_417+(Number(_417)==_417?"px":""))+";";}var _418=dojo.delegate(this.inlineEditBox.editorParams,{style:_413,dir:this.dir,lang:this.lang});_418["displayedValue" in cls.prototype?"displayedValue":"value"]=this.value;this.editWidget=new cls(_418,this.editorPlaceholder);if(this.inlineEditBox.autoSave){dojo.destroy(this.buttonContainer);}},postCreate:function(){this.inherited(arguments);var ew=this.editWidget;if(this.inlineEditBox.autoSave){this.connect(ew,"onChange","_onChange");this.connect(ew,"onKeyPress","_onKeyPress");}else{if("intermediateChanges" in ew){ew.set("intermediateChanges",true);this.connect(ew,"onChange","_onIntermediateChange");this.saveButton.set("disabled",true);}}},_onIntermediateChange:function(val){this.saveButton.set("disabled",(this.getValue()==this._resetValue)||!this.enableSave());},destroy:function(){this.editWidget.destroy(true);this.inherited(arguments);},getValue:function(){var ew=this.editWidget;return String(ew.get("displayedValue" in ew?"displayedValue":"value"));},_onKeyPress:function(e){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(e.altKey||e.ctrlKey){return;}if(e.charOrCode==dojo.keys.ESCAPE){dojo.stopEvent(e);this.cancel(true);}else{if(e.charOrCode==dojo.keys.ENTER&&e.target.tagName=="INPUT"){dojo.stopEvent(e);this._onChange();}}}},_onBlur:function(){this.inherited(arguments);if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(this.getValue()==this._resetValue){this.cancel(false);}else{if(this.enableSave()){this.save(false);}}}},_onChange:function(){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing&&this.enableSave()){dojo.style(this.inlineEditBox.displayNode,{display:""});dijit.focus(this.inlineEditBox.displayNode);}},enableSave:function(){return (this.editWidget.isValid?this.editWidget.isValid():true);},focus:function(){this.editWidget.focus();setTimeout(dojo.hitch(this,function(){if(this.editWidget.focusNode&&this.editWidget.focusNode.tagName=="INPUT"){dijit.selectInputText(this.editWidget.focusNode);}}),0);}});}if(!dojo._hasResource["dojo.cookie"]){dojo._hasResource["dojo.cookie"]=true;dojo.provide("dojo.cookie");dojo.cookie=function(name,_419,_41a){var c=document.cookie;if(arguments.length==1){var _41b=c.match(new RegExp("(?:^|; )"+dojo.regexp.escapeString(name)+"=([^;]*)"));return _41b?decodeURIComponent(_41b[1]):undefined;}else{_41a=_41a||{};var exp=_41a.expires;if(typeof exp=="number"){var d=new Date();d.setTime(d.getTime()+exp*24*60*60*1000);exp=_41a.expires=d;}if(exp&&exp.toUTCString){_41a.expires=exp.toUTCString();}_419=encodeURIComponent(_419);var _41c=name+"="+_419,_41d;for(_41d in _41a){_41c+="; "+_41d;var _41e=_41a[_41d];if(_41e!==true){_41c+="="+_41e;}}document.cookie=_41c;}};dojo.cookie.isSupported=function(){if(!("cookieEnabled" in navigator)){this("__djCookieTest__","CookiesAllowed");navigator.cookieEnabled=this("__djCookieTest__")=="CookiesAllowed";if(navigator.cookieEnabled){this("__djCookieTest__","",{expires:-1});}}return navigator.cookieEnabled;};}if(!dojo._hasResource["dijit.layout.StackController"]){dojo._hasResource["dijit.layout.StackController"]=true;dojo.provide("dijit.layout.StackController");dojo.declare("dijit.layout.StackController",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:"<span role='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",containerId:"",buttonWidget:"dijit.layout._StackButton",constructor:function(){this.pane2button={};this.pane2connects={};this.pane2watches={};},buildRendering:function(){this.inherited(arguments);dijit.setWaiRole(this.domNode,"tablist");},postCreate:function(){this.inherited(arguments);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(info){dojo.forEach(info.children,this.onAddChild,this);if(info.selected){this.onSelectChild(info.selected);}},destroy:function(){for(var pane in this.pane2button){this.onRemoveChild(dijit.byId(pane));}this.inherited(arguments);},onAddChild:function(page,_41f){var cls=dojo.getObject(this.buttonWidget);var _420=new cls({id:this.id+"_"+page.id,label:page.title,dir:page.dir,lang:page.lang,showLabel:page.showTitle,iconClass:page.iconClass,closeButton:page.closable,title:page.tooltip});dijit.setWaiState(_420.focusNode,"selected","false");var _421=["title","showTitle","iconClass","closable","tooltip"],_422=["label","showLabel","iconClass","closeButton","title"];this.pane2watches[page.id]=dojo.map(_421,function(_423,idx){return page.watch(_423,function(name,_424,_425){_420.set(_422[idx],_425);});});this.pane2connects[page.id]=[this.connect(_420,"onClick",dojo.hitch(this,"onButtonClick",page)),this.connect(_420,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",page))];this.addChild(_420,_41f);this.pane2button[page.id]=_420;page.controlButton=_420;if(!this._currentChild){_420.focusNode.setAttribute("tabIndex","0");dijit.setWaiState(_420.focusNode,"selected","true");this._currentChild=page;}if(!this.isLeftToRight()&&dojo.isIE&&this._rectifyRtlTabList){this._rectifyRtlTabList();}},onRemoveChild:function(page){if(this._currentChild===page){this._currentChild=null;}dojo.forEach(this.pane2connects[page.id],dojo.hitch(this,"disconnect"));delete this.pane2connects[page.id];dojo.forEach(this.pane2watches[page.id],function(w){w.unwatch();});delete this.pane2watches[page.id];var _426=this.pane2button[page.id];if(_426){this.removeChild(_426);delete this.pane2button[page.id];_426.destroy();}delete page.controlButton;},onSelectChild:function(page){if(!page){return;}if(this._currentChild){var _427=this.pane2button[this._currentChild.id];_427.set("checked",false);dijit.setWaiState(_427.focusNode,"selected","false");_427.focusNode.setAttribute("tabIndex","-1");}var _428=this.pane2button[page.id];_428.set("checked",true);dijit.setWaiState(_428.focusNode,"selected","true");this._currentChild=page;_428.focusNode.setAttribute("tabIndex","0");var _429=dijit.byId(this.containerId);dijit.setWaiState(_429.containerNode,"labelledby",_428.id);},onButtonClick:function(page){var _42a=dijit.byId(this.containerId);_42a.selectChild(page);},onCloseButtonClick:function(page){var _42b=dijit.byId(this.containerId);_42b.closeChild(page);if(this._currentChild){var b=this.pane2button[this._currentChild.id];if(b){dijit.focus(b.focusNode||b.domNode);}}},adjacent:function(_42c){if(!this.isLeftToRight()&&(!this.tabPosition||/top|bottom/.test(this.tabPosition))){_42c=!_42c;}var _42d=this.getChildren();var _42e=dojo.indexOf(_42d,this.pane2button[this._currentChild.id]);var _42f=_42c?1:_42d.length-1;return _42d[(_42e+_42f)%_42d.length];},onkeypress:function(e){if(this.disabled||e.altKey){return;}var _430=null;if(e.ctrlKey||!e._djpage){var k=dojo.keys;switch(e.charOrCode){case k.LEFT_ARROW:case k.UP_ARROW:if(!e._djpage){_430=false;}break;case k.PAGE_UP:if(e.ctrlKey){_430=false;}break;case k.RIGHT_ARROW:case k.DOWN_ARROW:if(!e._djpage){_430=true;}break;case k.PAGE_DOWN:if(e.ctrlKey){_430=true;}break;case k.HOME:case k.END:var _431=this.getChildren();if(_431&&_431.length){_431[e.charOrCode==k.HOME?0:_431.length-1].onClick();}dojo.stopEvent(e);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(_430!==null){this.adjacent(_430).onClick();dojo.stopEvent(e);}}},onContainerKeyPress:function(info){info.e._djpage=info.page;this.onkeypress(info.e);}});dojo.declare("dijit.layout._StackButton",dijit.form.ToggleButton,{tabIndex:"-1",buildRendering:function(evt){this.inherited(arguments);dijit.setWaiRole((this.focusNode||this.domNode),"tab");},onClick:function(evt){dijit.focus(this.focusNode);},onClickCloseButton:function(evt){evt.stopPropagation();}});}if(!dojo._hasResource["dijit.layout.StackContainer"]){dojo._hasResource["dijit.layout.StackContainer"]=true;dojo.provide("dijit.layout.StackContainer");dojo.declare("dijit.layout.StackContainer",dijit.layout._LayoutWidget,{doLayout:true,persist:false,baseClass:"dijitStackContainer",buildRendering:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitLayoutContainer");dijit.setWaiRole(this.containerNode,"tabpanel");},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onkeypress",this._onKeyPress);},startup:function(){if(this._started){return;}var _432=this.getChildren();dojo.forEach(_432,this._setupChild,this);if(this.persist){this.selectedChildWidget=dijit.byId(dojo.cookie(this.id+"_selectedChild"));}else{dojo.some(_432,function(_433){if(_433.selected){this.selectedChildWidget=_433;}return _433.selected;},this);}var _434=this.selectedChildWidget;if(!_434&&_432[0]){_434=this.selectedChildWidget=_432[0];_434.selected=true;}dojo.publish(this.id+"-startup",[{children:_432,selected:_434}]);this.inherited(arguments);},resize:function(){var _435=this.selectedChildWidget;if(_435&&!this._hasBeenShown){this._hasBeenShown=true;this._showChild(_435);}this.inherited(arguments);},_setupChild:function(_436){this.inherited(arguments);dojo.replaceClass(_436.domNode,"dijitHidden","dijitVisible");_436.domNode.title="";},addChild:function(_437,_438){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-addChild",[_437,_438]);this.layout();if(!this.selectedChildWidget){this.selectChild(_437);}}},removeChild:function(page){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-removeChild",[page]);}if(this._beingDestroyed){return;}if(this.selectedChildWidget===page){this.selectedChildWidget=undefined;if(this._started){var _439=this.getChildren();if(_439.length){this.selectChild(_439[0]);}}}if(this._started){this.layout();}},selectChild:function(page,_43a){page=dijit.byId(page);if(this.selectedChildWidget!=page){var d=this._transition(page,this.selectedChildWidget,_43a);this._set("selectedChildWidget",page);dojo.publish(this.id+"-selectChild",[page]);if(this.persist){dojo.cookie(this.id+"_selectedChild",this.selectedChildWidget.id);}}return d;},_transition:function(_43b,_43c,_43d){if(_43c){this._hideChild(_43c);}var d=this._showChild(_43b);if(_43b.resize){if(this.doLayout){_43b.resize(this._containerContentBox||this._contentBox);}else{_43b.resize();}}return d;},_adjacent:function(_43e){var _43f=this.getChildren();var _440=dojo.indexOf(_43f,this.selectedChildWidget);_440+=_43e?1:_43f.length-1;return _43f[_440%_43f.length];},forward:function(){return this.selectChild(this._adjacent(true),true);},back:function(){return this.selectChild(this._adjacent(false),true);},_onKeyPress:function(e){dojo.publish(this.id+"-containerKeyPress",[{e:e,page:this}]);},layout:function(){if(this.doLayout&&this.selectedChildWidget&&this.selectedChildWidget.resize){this.selectedChildWidget.resize(this._containerContentBox||this._contentBox);}},_showChild:function(page){var _441=this.getChildren();page.isFirstChild=(page==_441[0]);page.isLastChild=(page==_441[_441.length-1]);page._set("selected",true);dojo.replaceClass(page.domNode,"dijitVisible","dijitHidden");return page._onShow()||true;},_hideChild:function(page){page._set("selected",false);dojo.replaceClass(page.domNode,"dijitHidden","dijitVisible");page.onHide();},closeChild:function(page){var _442=page.onClose(this,page);if(_442){this.removeChild(page);page.destroyRecursive();}},destroyDescendants:function(_443){dojo.forEach(this.getChildren(),function(_444){this.removeChild(_444);_444.destroyRecursive(_443);},this);}});dojo.extend(dijit._Widget,{selected:false,closable:false,iconClass:"",showTitle:true});}if(!dojo._hasResource["dijit.layout.AccordionPane"]){dojo._hasResource["dijit.layout.AccordionPane"]=true;dojo.provide("dijit.layout.AccordionPane");dojo.declare("dijit.layout.AccordionPane",dijit.layout.ContentPane,{constructor:function(){dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead","","2.0");},onSelected:function(){}});}if(!dojo._hasResource["dijit.layout.AccordionContainer"]){dojo._hasResource["dijit.layout.AccordionContainer"]=true;dojo.provide("dijit.layout.AccordionContainer");dojo.declare("dijit.layout.AccordionContainer",dijit.layout.StackContainer,{duration:dijit.defaultDuration,buttonWidget:"dijit.layout._AccordionButton",baseClass:"dijitAccordionContainer",buildRendering:function(){this.inherited(arguments);this.domNode.style.overflow="hidden";dijit.setWaiRole(this.domNode,"tablist");},startup:function(){if(this._started){return;}this.inherited(arguments);if(this.selectedChildWidget){var _445=this.selectedChildWidget.containerNode.style;_445.display="";_445.overflow="auto";this.selectedChildWidget._wrapperWidget.set("selected",true);}},layout:function(){var _446=this.selectedChildWidget;if(!_446){return;}var _447=_446._wrapperWidget.domNode,_448=dojo._getMarginExtents(_447),_449=dojo._getPadBorderExtents(_447),_44a=_446._wrapperWidget.containerNode,_44b=dojo._getMarginExtents(_44a),_44c=dojo._getPadBorderExtents(_44a),_44d=this._contentBox;var _44e=0;dojo.forEach(this.getChildren(),function(_44f){if(_44f!=_446){_44e+=dojo._getMarginSize(_44f._wrapperWidget.domNode).h;}});this._verticalSpace=_44d.h-_44e-_448.h-_449.h-_44b.h-_44c.h-_446._buttonWidget.getTitleHeight();this._containerContentBox={h:this._verticalSpace,w:this._contentBox.w-_448.w-_449.w-_44b.w-_44c.w};if(_446){_446.resize(this._containerContentBox);}},_setupChild:function(_450){_450._wrapperWidget=new dijit.layout._AccordionInnerContainer({contentWidget:_450,buttonWidget:this.buttonWidget,id:_450.id+"_wrapper",dir:_450.dir,lang:_450.lang,parent:this});this.inherited(arguments);},addChild:function(_451,_452){if(this._started){dojo.place(_451.domNode,this.containerNode,_452);if(!_451._started){_451.startup();}this._setupChild(_451);dojo.publish(this.id+"-addChild",[_451,_452]);this.layout();if(!this.selectedChildWidget){this.selectChild(_451);}}else{this.inherited(arguments);}},removeChild:function(_453){if(_453._wrapperWidget){dojo.place(_453.domNode,_453._wrapperWidget.domNode,"after");_453._wrapperWidget.destroy();delete _453._wrapperWidget;}dojo.removeClass(_453.domNode,"dijitHidden");this.inherited(arguments);},getChildren:function(){return dojo.map(this.inherited(arguments),function(_454){return _454.declaredClass=="dijit.layout._AccordionInnerContainer"?_454.contentWidget:_454;},this);},destroy:function(){if(this._animation){this._animation.stop();}dojo.forEach(this.getChildren(),function(_455){if(_455._wrapperWidget){_455._wrapperWidget.destroy();}else{_455.destroyRecursive();}});this.inherited(arguments);},_showChild:function(_456){_456._wrapperWidget.containerNode.style.display="block";return this.inherited(arguments);},_hideChild:function(_457){_457._wrapperWidget.containerNode.style.display="none";this.inherited(arguments);},_transition:function(_458,_459,_45a){if(dojo.isIE<8){_45a=false;}if(this._animation){this._animation.stop(true);delete this._animation;}var self=this;if(_458){_458._wrapperWidget.set("selected",true);var d=this._showChild(_458);if(this.doLayout&&_458.resize){_458.resize(this._containerContentBox);}}if(_459){_459._wrapperWidget.set("selected",false);if(!_45a){this._hideChild(_459);}}if(_45a){var _45b=_458._wrapperWidget.containerNode,_45c=_459._wrapperWidget.containerNode;var _45d=_458._wrapperWidget.containerNode,_45e=dojo._getMarginExtents(_45d),_45f=dojo._getPadBorderExtents(_45d),_460=_45e.h+_45f.h;_45c.style.height=(self._verticalSpace-_460)+"px";this._animation=new dojo.Animation({node:_45b,duration:this.duration,curve:[1,this._verticalSpace-_460-1],onAnimate:function(_461){_461=Math.floor(_461);_45b.style.height=_461+"px";_45c.style.height=(self._verticalSpace-_460-_461)+"px";},onEnd:function(){delete self._animation;_45b.style.height="auto";_459._wrapperWidget.containerNode.style.display="none";_45c.style.height="auto";self._hideChild(_459);}});this._animation.onStop=this._animation.onEnd;this._animation.play();}return d;},_onKeyPress:function(e,_462){if(this.disabled||e.altKey||!(_462||e.ctrlKey)){return;}var k=dojo.keys,c=e.charOrCode;if((_462&&(c==k.LEFT_ARROW||c==k.UP_ARROW))||(e.ctrlKey&&c==k.PAGE_UP)){this._adjacent(false)._buttonWidget._onTitleClick();dojo.stopEvent(e);}else{if((_462&&(c==k.RIGHT_ARROW||c==k.DOWN_ARROW))||(e.ctrlKey&&(c==k.PAGE_DOWN||c==k.TAB))){this._adjacent(true)._buttonWidget._onTitleClick();dojo.stopEvent(e);}}}});dojo.declare("dijit.layout._AccordionInnerContainer",[dijit._Widget,dijit._CssStateMixin],{baseClass:"dijitAccordionInnerContainer",isContainer:true,isLayoutContainer:true,buildRendering:function(){this.domNode=dojo.place("<div class='"+this.baseClass+"'>",this.contentWidget.domNode,"after");var _463=this.contentWidget,cls=dojo.getObject(this.buttonWidget);this.button=_463._buttonWidget=(new cls({contentWidget:_463,label:_463.title,title:_463.tooltip,dir:_463.dir,lang:_463.lang,iconClass:_463.iconClass,id:_463.id+"_button",parent:this.parent})).placeAt(this.domNode);this.containerNode=dojo.place("<div class='dijitAccordionChildWrapper' style='display:none'>",this.domNode);dojo.place(this.contentWidget.domNode,this.containerNode);},postCreate:function(){this.inherited(arguments);var _464=this.button;this._contentWidgetWatches=[this.contentWidget.watch("title",dojo.hitch(this,function(name,_465,_466){_464.set("label",_466);})),this.contentWidget.watch("tooltip",dojo.hitch(this,function(name,_467,_468){_464.set("title",_468);})),this.contentWidget.watch("iconClass",dojo.hitch(this,function(name,_469,_46a){_464.set("iconClass",_46a);}))];},_setSelectedAttr:function(_46b){this._set("selected",_46b);this.button.set("selected",_46b);if(_46b){var cw=this.contentWidget;if(cw.onSelected){cw.onSelected();}}},startup:function(){this.contentWidget.startup();},destroy:function(){this.button.destroyRecursive();dojo.forEach(this._contentWidgetWatches||[],function(w){w.unwatch();});delete this.contentWidget._buttonWidget;delete this.contentWidget._wrapperWidget;this.inherited(arguments);},destroyDescendants:function(){this.contentWidget.destroyRecursive();}});dojo.declare("dijit.layout._AccordionButton",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:dojo.cache("dijit.layout","templates/AccordionButton.html","<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' role=\"tab\" aria-expanded=\"false\"\n\t\t><span class='dijitInline dijitAccordionArrow' role=\"presentation\"></span\n\t\t><span class='arrowTextUp' role=\"presentation\">+</span\n\t\t><span class='arrowTextDown' role=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" role=\"presentation\"/>\n\t\t<span role=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap),{label:{node:"titleTextNode",type:"innerHTML"},title:{node:"titleTextNode",type:"attribute",attribute:"title"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitAccordionTitle",getParent:function(){return this.parent;},buildRendering:function(){this.inherited(arguments);var _46c=this.id.replace(" ","_");dojo.attr(this.titleTextNode,"id",_46c+"_title");dijit.setWaiState(this.focusNode,"labelledby",dojo.attr(this.titleTextNode,"id"));dojo.setSelectable(this.domNode,false);},getTitleHeight:function(){return dojo._getMarginSize(this.domNode).h;},_onTitleClick:function(){var _46d=this.getParent();_46d.selectChild(this.contentWidget,true);dijit.focus(this.focusNode);},_onTitleKeyPress:function(evt){return this.getParent()._onKeyPress(evt,this.contentWidget);},_setSelectedAttr:function(_46e){this._set("selected",_46e);dijit.setWaiState(this.focusNode,"expanded",_46e);dijit.setWaiState(this.focusNode,"selected",_46e);this.focusNode.setAttribute("tabIndex",_46e?"0":"-1");}});}if(!dojo._hasResource["dijit.layout.BorderContainer"]){dojo._hasResource["dijit.layout.BorderContainer"]=true;dojo.provide("dijit.layout.BorderContainer");dojo.declare("dijit.layout.BorderContainer",dijit.layout._LayoutWidget,{design:"headline",gutters:true,liveSplitters:true,persist:false,baseClass:"dijitBorderContainer",_splitterClass:"dijit.layout._Splitter",postMixInProperties:function(){if(!this.gutters){this.baseClass+="NoGutter";}this.inherited(arguments);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),this._setupChild,this);this.inherited(arguments);},_setupChild:function(_46f){var _470=_46f.region;if(_470){this.inherited(arguments);dojo.addClass(_46f.domNode,this.baseClass+"Pane");var ltr=this.isLeftToRight();if(_470=="leading"){_470=ltr?"left":"right";}if(_470=="trailing"){_470=ltr?"right":"left";}if(_470!="center"&&(_46f.splitter||this.gutters)&&!_46f._splitterWidget){var _471=dojo.getObject(_46f.splitter?this._splitterClass:"dijit.layout._Gutter");var _472=new _471({id:_46f.id+"_splitter",container:this,child:_46f,region:_470,live:this.liveSplitters});_472.isSplitter=true;_46f._splitterWidget=_472;dojo.place(_472.domNode,_46f.domNode,"after");_472.startup();}_46f.region=_470;}},layout:function(){this._layoutChildren();},addChild:function(_473,_474){this.inherited(arguments);if(this._started){this.layout();}},removeChild:function(_475){var _476=_475.region;var _477=_475._splitterWidget;if(_477){_477.destroy();delete _475._splitterWidget;}this.inherited(arguments);if(this._started){this._layoutChildren();}dojo.removeClass(_475.domNode,this.baseClass+"Pane");dojo.style(_475.domNode,{top:"auto",bottom:"auto",left:"auto",right:"auto",position:"static"});dojo.style(_475.domNode,_476=="top"||_476=="bottom"?"width":"height","auto");},getChildren:function(){return dojo.filter(this.inherited(arguments),function(_478){return !_478.isSplitter;});},getSplitter:function(_479){return dojo.filter(this.getChildren(),function(_47a){return _47a.region==_479;})[0]._splitterWidget;},resize:function(_47b,_47c){if(!this.cs||!this.pe){var node=this.domNode;this.cs=dojo.getComputedStyle(node);this.pe=dojo._getPadExtents(node,this.cs);this.pe.r=dojo._toPixelValue(node,this.cs.paddingRight);this.pe.b=dojo._toPixelValue(node,this.cs.paddingBottom);dojo.style(node,"padding","0px");}this.inherited(arguments);},_layoutChildren:function(_47d,_47e){if(!this._borderBox||!this._borderBox.h){return;}var _47f=dojo.map(this.getChildren(),function(_480,idx){return {pane:_480,weight:[_480.region=="center"?Infinity:0,_480.layoutPriority,(this.design=="sidebar"?1:-1)*(/top|bottom/.test(_480.region)?1:-1),idx]};},this);_47f.sort(function(a,b){var aw=a.weight,bw=b.weight;for(var i=0;i<aw.length;i++){if(aw[i]!=bw[i]){return aw[i]-bw[i];}}return 0;});var _481=[];dojo.forEach(_47f,function(_482){var pane=_482.pane;_481.push(pane);if(pane._splitterWidget){_481.push(pane._splitterWidget);}});var dim={l:this.pe.l,t:this.pe.t,w:this._borderBox.w-this.pe.w,h:this._borderBox.h-this.pe.h};dijit.layout.layoutChildren(this.domNode,dim,_481,_47d,_47e);},destroyRecursive:function(){dojo.forEach(this.getChildren(),function(_483){var _484=_483._splitterWidget;if(_484){_484.destroy();}delete _483._splitterWidget;});this.inherited(arguments);}});dojo.extend(dijit._Widget,{region:"",layoutPriority:0,splitter:false,minSize:0,maxSize:Infinity});dojo.declare("dijit.layout._Splitter",[dijit._Widget,dijit._Templated],{live:true,templateString:"<div class=\"dijitSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse\" tabIndex=\"0\" role=\"separator\"><div class=\"dijitSplitterThumb\"></div></div>",postMixInProperties:function(){this.inherited(arguments);this.horizontal=/top|bottom/.test(this.region);this._factor=/top|left/.test(this.region)?1:-1;this._cookieName=this.container.id+"_"+this.region;},buildRendering:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V"));if(this.container.persist){var _485=dojo.cookie(this._cookieName);if(_485){this.child.domNode.style[this.horizontal?"height":"width"]=_485;}}},_computeMaxSize:function(){var dim=this.horizontal?"h":"w",_486=dojo.marginBox(this.child.domNode)[dim],_487=dojo.filter(this.container.getChildren(),function(_488){return _488.region=="center";})[0],_489=dojo.marginBox(_487.domNode)[dim];return Math.min(this.child.maxSize,_486+_489);},_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 dijitSplitter"+(this.horizontal?"H":"V")+"Active");if(this.fake){dojo.removeClass(this.fake,"dijitSplitterHover dijitSplitter"+(this.horizontal?"H":"V")+"Hover");}var _48a=this._factor,_48b=this.horizontal,axis=_48b?"pageY":"pageX",_48c=e[axis],_48d=this.domNode.style,dim=_48b?"h":"w",_48e=dojo.marginBox(this.child.domNode)[dim],max=this._computeMaxSize(),min=this.child.minSize||20,_48f=this.region,_490=_48f=="top"||_48f=="bottom"?"top":"left",_491=parseInt(_48d[_490],10),_492=this._resize,_493=dojo.hitch(this.container,"_layoutChildren",this.child.id),de=dojo.doc;this._handlers=(this._handlers||[]).concat([dojo.connect(de,"onmousemove",this._drag=function(e,_494){var _495=e[axis]-_48c,_496=_48a*_495+_48e,_497=Math.max(Math.min(_496,max),min);if(_492||_494){_493(_497);}_48d[_490]=_495+_491+_48a*(_497-_496)+"px";}),dojo.connect(de,"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 dijitSplitter"+(this.horizontal?"H":"V")+"Active 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 _498=this.horizontal;var tick=1;var dk=dojo.keys;switch(e.charOrCode){case _498?dk.UP_ARROW:dk.LEFT_ARROW:tick*=-1;case _498?dk.DOWN_ARROW:dk.RIGHT_ARROW:break;default:return;}var _499=dojo._getMarginSize(this.child.domNode)[_498?"h":"w"]+this._factor*tick;this.container._layoutChildren(this.child.id,Math.max(Math.min(_499,this._computeMaxSize()),this.child.minSize));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\" role=\"presentation\"></div>",postMixInProperties:function(){this.inherited(arguments);this.horizontal=/top|bottom/.test(this.region);},buildRendering:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitGutter"+(this.horizontal?"H":"V"));}});}if(!dojo._hasResource["dijit.layout._TabContainerBase"]){dojo._hasResource["dijit.layout._TabContainerBase"]=true;dojo.provide("dijit.layout._TabContainerBase");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);},buildRendering: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(tab){dojo.addClass(tab.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 _49a=this.tabPosition.replace(/-h/,"");this.tablist.layoutAlign=_49a;var _49b=[this.tablist,{domNode:this.tablistSpacer,layoutAlign:_49a},{domNode:this.containerNode,layoutAlign:"client"}];dijit.layout.layoutChildren(this.domNode,this._contentBox,_49b);this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_49b[2]);if(sc&&sc.resize){sc.resize(this._containerContentBox);}}else{if(this.tablist.resize){var s=this.tablist.domNode.style;s.width="0";var _49c=dojo.contentBox(this.domNode).w;s.width="";this.tablist.resize({w:_49c});}if(sc&&sc.resize){sc.resize();}}},destroy:function(){if(this.tablist){this.tablist.destroy();}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.TabController"]){dojo._hasResource["dijit.layout.TabController"]=true;dojo.provide("dijit.layout.TabController");dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{templateString:"<div role='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 _49d=0;for(var pane in this.pane2button){var ow=this.pane2button[pane].innerDiv.scrollWidth;_49d=Math.max(_49d,ow);}for(pane in this.pane2button){this.pane2button[pane].innerDiv.style.width=_49d+"px";}}});dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",cssStateNodes:{closeNode:"dijitTabCloseButton"},templateString:dojo.cache("dijit.layout","templates/_TabButton.html","<div role=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div role=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div role=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div role=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitTabButtonIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' role=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>[x]</span\n\t\t        ></span>\n\t\t\t</div>\n        </div>\n    </div>\n</div>\n"),scrollOnFocus:false,buildRendering:function(){this.inherited(arguments);dojo.setSelectable(this.containerNode,false);},startup:function(){this.inherited(arguments);var n=this.domNode;setTimeout(function(){n.className=n.className;},1);},_setCloseButtonAttr:function(disp){this._set("closeButton",disp);dojo.toggleClass(this.innerDiv,"dijitClosable",disp);this.closeNode.style.display=disp?"":"none";if(disp){var _49e=dojo.i18n.getLocalization("dijit","common");if(this.closeNode){dojo.attr(this.closeNode,"title",_49e.itemClose);}var _49e=dojo.i18n.getLocalization("dijit","common");this._closeMenu=new dijit.Menu({id:this.id+"_Menu",dir:this.dir,lang:this.lang,targetNodeIds:[this.domNode]});this._closeMenu.addChild(new dijit.MenuItem({label:_49e.itemClose,dir:this.dir,lang:this.lang,onClick:dojo.hitch(this,"onClickCloseButton")}));}else{if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}}},_setLabelAttr:function(_49f){this.inherited(arguments);if(this.showLabel==false&&!this.params.title){this.iconNode.alt=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}},destroy:function(){if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){dojo._hasResource["dijit.layout.ScrollingTabController"]=true;dojo.provide("dijit.layout.ScrollingTabController");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._ScrollingTabControllerMenuButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" containerId=\"${containerId}\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdropDownPosition=\"below-alt, above-alt\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=\"false\">&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=\"false\">&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=\"false\">&#9654;</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div role='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'></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"}),buildRendering: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(page,_4a0){this.inherited(arguments);dojo.forEach(["label","iconClass"],function(attr){this.pane2watches[page.id].push(this.pane2button[page.id].watch(attr,dojo.hitch(this,function(name,_4a1,_4a2){if(this._postStartup&&this._dim){this.resize(this._dim);}})));},this);dojo.style(this.containerNode,"width",(dojo.style(this.containerNode,"width")+200)+"px");},onRemoveChild:function(page,_4a3){var _4a4=this.pane2button[page.id];if(this._selectedTab===_4a4.domNode){this._selectedTab=null;}this.inherited(arguments);},_initButtons:function(){this._btnWidth=0;this._buttons=dojo.query("> .tabStripButton",this.domNode).filter(function(btn){if((this.useMenu&&btn==this._menuBtn.domNode)||(this.useSlider&&(btn==this._rightBtn.domNode||btn==this._leftBtn.domNode))){this._btnWidth+=dojo._getMarginSize(btn).w;return true;}else{dojo.style(btn,"display","none");return false;}},this);},_getTabsWidth:function(){var _4a5=this.getChildren();if(_4a5.length){var _4a6=_4a5[this.isLeftToRight()?0:_4a5.length-1].domNode,_4a7=_4a5[this.isLeftToRight()?_4a5.length-1:0].domNode;return _4a7.offsetLeft+dojo.style(_4a7,"width")-_4a6.offsetLeft;}else{return 0;}},_enableBtn:function(_4a8){var _4a9=this._getTabsWidth();_4a8=_4a8||dojo.style(this.scrollNode,"width");return _4a9>0&&_4a8<_4a9;},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 _4aa=this._enableBtn(this._contentBox.w);this._buttons.style("display",_4aa?"":"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){if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var w=this.scrollNode,sl=this._convertToScrollLeft(this._getScrollForSelectedTab());w.scrollLeft=sl;}this._setButtonClass(this._getScroll());this._postResize=true;return {h:this._contentBox.h,w:dim.w};},_getScroll:function(){var sl=(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&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.isIE&&dojo.isQuirks)||dojo.isWebKit){return val;}else{var _4ab=dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width");return (dojo.isIE==8?-1:1)*(val-_4ab);}},onSelectChild:function(page){var tab=this.pane2button[page.id];if(!tab||!page){return;}var node=tab.domNode;if(this._postResize&&node!=this._selectedTab){this._selectedTab=node;var sl=this._getScroll();if(sl>node.offsetLeft||sl+dojo.style(this.scrollNode,"width")<node.offsetLeft+dojo.style(node,"width")){this.createSmoothScroll().play();}}this.inherited(arguments);},_getScrollBounds:function(){var _4ac=this.getChildren(),_4ad=dojo.style(this.scrollNode,"width"),_4ae=dojo.style(this.containerNode,"width"),_4af=_4ae-_4ad,_4b0=this._getTabsWidth();if(_4ac.length&&_4b0>_4ad){return {min:this.isLeftToRight()?0:_4ac[_4ac.length-1].domNode.offsetLeft,max:this.isLeftToRight()?(_4ac[_4ac.length-1].domNode.offsetLeft+dojo.style(_4ac[_4ac.length-1].domNode,"width"))-_4ad:_4af};}else{var _4b1=this.isLeftToRight()?0:_4af;return {min:_4b1,max:_4b1};}},_getScrollForSelectedTab:function(){var w=this.scrollNode,n=this._selectedTab,_4b2=dojo.style(this.scrollNode,"width"),_4b3=this._getScrollBounds();var pos=(n.offsetLeft+dojo.style(n,"width")/2)-_4b2/2;pos=Math.min(Math.max(pos,_4b3.min),_4b3.max);return pos;},createSmoothScroll:function(x){if(arguments.length>0){var _4b4=this._getScrollBounds();x=Math.min(Math.max(x,_4b4.min),_4b4.max);}else{x=this._getScrollForSelectedTab();}if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var self=this,w=this.scrollNode,anim=new dojo._Animation({beforeBegin:function(){if(this.curve){delete this.curve;}var oldS=w.scrollLeft,newS=self._convertToScrollLeft(x);anim.curve=new dojo._Line(oldS,newS);},onAnimate:function(val){w.scrollLeft=val;}});this._anim=anim;this._setButtonClass(x);return anim;},_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(_4b5,node){if(node&&dojo.hasClass(node,"dijitTabDisabled")){return;}var _4b6=dojo.style(this.scrollNode,"width");var d=(_4b6*0.75)*_4b5;var to=this._getScroll()+d;this._setButtonClass(to);this.createSmoothScroll(to).play();},_setButtonClass:function(_4b7){var _4b8=this._getScrollBounds();this._leftBtn.set("disabled",_4b7<=_4b8.min);this._rightBtn.set("disabled",_4b7>=_4b8.max);}});dojo.declare("dijit.layout._ScrollingTabControllerButtonMixin",null,{baseClass:"dijitTab tabStripButton",templateString:dojo.cache("dijit.layout","templates/_ScrollingTabControllerButton.html","<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div role=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div role=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img role=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),tabIndex:"",isFocusable:function(){return false;}});dojo.declare("dijit.layout._ScrollingTabControllerButton",[dijit.form.Button,dijit.layout._ScrollingTabControllerButtonMixin]);dojo.declare("dijit.layout._ScrollingTabControllerMenuButton",[dijit.form.Button,dijit._HasDropDown,dijit.layout._ScrollingTabControllerButtonMixin],{containerId:"",tabIndex:"-1",isLoaded:function(){return false;},loadDropDown:function(_4b9){this.dropDown=new dijit.Menu({id:this.containerId+"_menu",dir:this.dir,lang:this.lang});var _4ba=dijit.byId(this.containerId);dojo.forEach(_4ba.getChildren(),function(page){var _4bb=new dijit.MenuItem({id:page.id+"_stcMi",label:page.title,iconClass:page.iconClass,dir:page.dir,lang:page.lang,onClick:function(){_4ba.selectChild(page);}});this.dropDown.addChild(_4bb);},this);_4b9();},closeDropDown:function(_4bc){this.inherited(arguments);if(this.dropDown){this.dropDown.destroyRecursive();delete this.dropDown;}}});}if(!dojo._hasResource["dijit.layout.TabContainer"]){dojo._hasResource["dijit.layout.TabContainer"]=true;dojo.provide("dijit.layout.TabContainer");dojo.declare("dijit.layout.TabContainer",dijit.layout._TabContainerBase,{useMenu:true,useSlider:true,controllerWidget:"",_makeController:function(_4bd){var cls=this.baseClass+"-tabs"+(this.doLayout?"":" dijitTabNoLayout"),_4be=dojo.getObject(this.controllerWidget);return new _4be({id:this.id+"_tablist",dir:this.dir,lang:this.lang,tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id,"class":cls,nested:this.nested,useMenu:this.useMenu,useSlider:this.useSlider,tabStripClass:this.tabStrip?this.baseClass+(this.tabStrip?"":"No")+"Strip":null},_4bd);},postMixInProperties:function(){this.inherited(arguments);if(!this.controllerWidget){this.controllerWidget=(this.tabPosition=="top"||this.tabPosition=="bottom")&&!this.nested?"dijit.layout.ScrollingTabController":"dijit.layout.TabController";}}});}if(!dojo._hasResource["dojo.number"]){dojo._hasResource["dojo.number"]=true;dojo.provide("dojo.number");dojo.getObject("number",true,dojo);dojo.number.format=function(_4bf,_4c0){_4c0=dojo.mixin({},_4c0||{});var _4c1=dojo.i18n.normalizeLocale(_4c0.locale),_4c2=dojo.i18n.getLocalization("dojo.cldr","number",_4c1);_4c0.customs=_4c2;var _4c3=_4c0.pattern||_4c2[(_4c0.type||"decimal")+"Format"];if(isNaN(_4bf)||Math.abs(_4bf)==Infinity){return null;}return dojo.number._applyPattern(_4bf,_4c3,_4c0);};dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;dojo.number._applyPattern=function(_4c4,_4c5,_4c6){_4c6=_4c6||{};var _4c7=_4c6.customs.group,_4c8=_4c6.customs.decimal,_4c9=_4c5.split(";"),_4ca=_4c9[0];_4c5=_4c9[(_4c4<0)?1:0]||("-"+_4ca);if(_4c5.indexOf("%")!=-1){_4c4*=100;}else{if(_4c5.indexOf("‰")!=-1){_4c4*=1000;}else{if(_4c5.indexOf("¤")!=-1){_4c7=_4c6.customs.currencyGroup||_4c7;_4c8=_4c6.customs.currencyDecimal||_4c8;_4c5=_4c5.replace(/\u00a4{1,3}/,function(_4cb){var prop=["symbol","currency","displayName"][_4cb.length-1];return _4c6[prop]||_4c6.currency||"";});}else{if(_4c5.indexOf("E")!=-1){throw new Error("exponential notation not supported");}}}}var _4cc=dojo.number._numberPatternRE;var _4cd=_4ca.match(_4cc);if(!_4cd){throw new Error("unable to find a number expression in pattern: "+_4c5);}if(_4c6.fractional===false){_4c6.places=0;}return _4c5.replace(_4cc,dojo.number._formatAbsolute(_4c4,_4cd[0],{decimal:_4c8,group:_4c7,places:_4c6.places,round:_4c6.round}));};dojo.number.round=function(_4ce,_4cf,_4d0){var _4d1=10/(_4d0||10);return (_4d1*+_4ce).toFixed(_4cf)/_4d1;};if((0.9).toFixed()==0){(function(){var _4d2=dojo.number.round;dojo.number.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 _4d2(v,p,m)+(v>0?d:-d);};})();}dojo.number._formatAbsolute=function(_4d3,_4d4,_4d5){_4d5=_4d5||{};if(_4d5.places===true){_4d5.places=0;}if(_4d5.places===Infinity){_4d5.places=6;}var _4d6=_4d4.split("."),_4d7=typeof _4d5.places=="string"&&_4d5.places.indexOf(","),_4d8=_4d5.places;if(_4d7){_4d8=_4d5.places.substring(_4d7+1);}else{if(!(_4d8>=0)){_4d8=(_4d6[1]||[]).length;}}if(!(_4d5.round<0)){_4d3=dojo.number.round(_4d3,_4d8,_4d5.round);}var _4d9=String(Math.abs(_4d3)).split("."),_4da=_4d9[1]||"";if(_4d6[1]||_4d5.places){if(_4d7){_4d5.places=_4d5.places.substring(0,_4d7);}var pad=_4d5.places!==undefined?_4d5.places:(_4d6[1]&&_4d6[1].lastIndexOf("0")+1);if(pad>_4da.length){_4d9[1]=dojo.string.pad(_4da,pad,"0",true);}if(_4d8<_4da.length){_4d9[1]=_4da.substr(0,_4d8);}}else{if(_4d9[1]){_4d9.pop();}}var _4db=_4d6[0].replace(",","");pad=_4db.indexOf("0");if(pad!=-1){pad=_4db.length-pad;if(pad>_4d9[0].length){_4d9[0]=dojo.string.pad(_4d9[0],pad);}if(_4db.indexOf("#")==-1){_4d9[0]=_4d9[0].substr(_4d9[0].length-pad);}}var _4dc=_4d6[0].lastIndexOf(","),_4dd,_4de;if(_4dc!=-1){_4dd=_4d6[0].length-_4dc-1;var _4df=_4d6[0].substr(0,_4dc);_4dc=_4df.lastIndexOf(",");if(_4dc!=-1){_4de=_4df.length-_4dc-1;}}var _4e0=[];for(var _4e1=_4d9[0];_4e1;){var off=_4e1.length-_4dd;_4e0.push((off>0)?_4e1.substr(off):_4e1);_4e1=(off>0)?_4e1.slice(0,off):"";if(_4de){_4dd=_4de;delete _4de;}}_4d9[0]=_4e0.reverse().join(_4d5.group||",");return _4d9.join(_4d5.decimal||".");};dojo.number.regexp=function(_4e2){return dojo.number._parseInfo(_4e2).regexp;};dojo.number._parseInfo=function(_4e3){_4e3=_4e3||{};var _4e4=dojo.i18n.normalizeLocale(_4e3.locale),_4e5=dojo.i18n.getLocalization("dojo.cldr","number",_4e4),_4e6=_4e3.pattern||_4e5[(_4e3.type||"decimal")+"Format"],_4e7=_4e5.group,_4e8=_4e5.decimal,_4e9=1;if(_4e6.indexOf("%")!=-1){_4e9/=100;}else{if(_4e6.indexOf("‰")!=-1){_4e9/=1000;}else{var _4ea=_4e6.indexOf("¤")!=-1;if(_4ea){_4e7=_4e5.currencyGroup||_4e7;_4e8=_4e5.currencyDecimal||_4e8;}}}var _4eb=_4e6.split(";");if(_4eb.length==1){_4eb.push("-"+_4eb[0]);}var re=dojo.regexp.buildGroupRE(_4eb,function(_4ec){_4ec="(?:"+dojo.regexp.escapeString(_4ec,".")+")";return _4ec.replace(dojo.number._numberPatternRE,function(_4ed){var _4ee={signed:false,separator:_4e3.strict?_4e7:[_4e7,""],fractional:_4e3.fractional,decimal:_4e8,exponent:false},_4ef=_4ed.split("."),_4f0=_4e3.places;if(_4ef.length==1&&_4e9!=1){_4ef[1]="###";}if(_4ef.length==1||_4f0===0){_4ee.fractional=false;}else{if(_4f0===undefined){_4f0=_4e3.pattern?_4ef[1].lastIndexOf("0")+1:Infinity;}if(_4f0&&_4e3.fractional==undefined){_4ee.fractional=true;}if(!_4e3.places&&(_4f0<_4ef[1].length)){_4f0+=","+_4ef[1].length;}_4ee.places=_4f0;}var _4f1=_4ef[0].split(",");if(_4f1.length>1){_4ee.groupSize=_4f1.pop().length;if(_4f1.length>1){_4ee.groupSize2=_4f1.pop().length;}}return "("+dojo.number._realNumberRegexp(_4ee)+")";});},true);if(_4ea){re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_4f2,_4f3,_4f4,_4f5){var prop=["symbol","currency","displayName"][_4f4.length-1],_4f6=dojo.regexp.escapeString(_4e3[prop]||_4e3.currency||"");_4f3=_4f3?"[\\s\\xa0]":"";_4f5=_4f5?"[\\s\\xa0]":"";if(!_4e3.strict){if(_4f3){_4f3+="*";}if(_4f5){_4f5+="*";}return "(?:"+_4f3+_4f6+_4f5+")?";}return _4f3+_4f6+_4f5;});}return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_4e7,decimal:_4e8,factor:_4e9};};dojo.number.parse=function(_4f7,_4f8){var info=dojo.number._parseInfo(_4f8),_4f9=(new RegExp("^"+info.regexp+"$")).exec(_4f7);if(!_4f9){return NaN;}var _4fa=_4f9[1];if(!_4f9[1]){if(!_4f9[2]){return NaN;}_4fa=_4f9[2];info.factor*=-1;}_4fa=_4fa.replace(new RegExp("["+info.group+"\\s\\xa0"+"]","g"),"").replace(info.decimal,".");return _4fa*info.factor;};dojo.number._realNumberRegexp=function(_4fb){_4fb=_4fb||{};if(!("places" in _4fb)){_4fb.places=Infinity;}if(typeof _4fb.decimal!="string"){_4fb.decimal=".";}if(!("fractional" in _4fb)||/^0/.test(_4fb.places)){_4fb.fractional=[true,false];}if(!("exponent" in _4fb)){_4fb.exponent=[true,false];}if(!("eSigned" in _4fb)){_4fb.eSigned=[true,false];}var _4fc=dojo.number._integerRegexp(_4fb),_4fd=dojo.regexp.buildGroupRE(_4fb.fractional,function(q){var re="";if(q&&(_4fb.places!==0)){re="\\"+_4fb.decimal;if(_4fb.places==Infinity){re="(?:"+re+"\\d+)?";}else{re+="\\d{"+_4fb.places+"}";}}return re;},true);var _4fe=dojo.regexp.buildGroupRE(_4fb.exponent,function(q){if(q){return "([eE]"+dojo.number._integerRegexp({signed:_4fb.eSigned})+")";}return "";});var _4ff=_4fc+_4fd;if(_4fd){_4ff="(?:(?:"+_4ff+")|(?:"+_4fd+"))";}return _4ff+_4fe;};dojo.number._integerRegexp=function(_500){_500=_500||{};if(!("signed" in _500)){_500.signed=[true,false];}if(!("separator" in _500)){_500.separator="";}else{if(!("groupSize" in _500)){_500.groupSize=3;}}var _501=dojo.regexp.buildGroupRE(_500.signed,function(q){return q?"[-+]":"";},true);var _502=dojo.regexp.buildGroupRE(_500.separator,function(sep){if(!sep){return "(?:\\d+)";}sep=dojo.regexp.escapeString(sep);if(sep==" "){sep="\\s";}else{if(sep==" "){sep="\\s\\xa0";}}var grp=_500.groupSize,grp2=_500.groupSize2;if(grp2){var _503="(?:0|[1-9]\\d{0,"+(grp2-1)+"}(?:["+sep+"]\\d{"+grp2+"})*["+sep+"]\\d{"+grp+"})";return ((grp-grp2)>0)?"(?:"+_503+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_503;}return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";},true);return _501+_502;};}if(!dojo._hasResource["dijit.ProgressBar"]){dojo._hasResource["dijit.ProgressBar"]=true;dojo.provide("dijit.ProgressBar");dojo.declare("dijit.ProgressBar",[dijit._Widget,dijit._Templated],{progress:"0",value:"",maximum:100,places:0,indeterminate:false,label:"",name:"",templateString:dojo.cache("dijit","templates/ProgressBar.html","<div class=\"dijitProgressBar dijitProgressBarEmpty\" role=\"progressbar\"\n\t><div  dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\" role=\"presentation\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"labelNode\" class=\"dijitProgressBarLabel\" id=\"${id}_label\"></div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),_indeterminateHighContrastImagePath:dojo.moduleUrl("dijit","themes/a11y/indeterminate_progress.gif"),postMixInProperties:function(){this.inherited(arguments);if(!("value" in this.params)){this.value=this.indeterminate?Infinity:this.progress;}},buildRendering:function(){this.inherited(arguments);this.indeterminateHighContrastImage.setAttribute("src",this._indeterminateHighContrastImagePath.toString());this.update();},update:function(_504){dojo.mixin(this,_504||{});var tip=this.internalProgress,ap=this.domNode;var _505=1;if(this.indeterminate){dijit.removeWaiState(ap,"valuenow");dijit.removeWaiState(ap,"valuemin");dijit.removeWaiState(ap,"valuemax");}else{if(String(this.progress).indexOf("%")!=-1){_505=Math.min(parseFloat(this.progress)/100,1);this.progress=_505*this.maximum;}else{this.progress=Math.min(this.progress,this.maximum);_505=this.progress/this.maximum;}dijit.setWaiState(ap,"describedby",this.labelNode.id);dijit.setWaiState(ap,"valuenow",this.progress);dijit.setWaiState(ap,"valuemin",0);dijit.setWaiState(ap,"valuemax",this.maximum);}this.labelNode.innerHTML=this.report(_505);dojo.toggleClass(this.domNode,"dijitProgressBarIndeterminate",this.indeterminate);tip.style.width=(_505*100)+"%";this.onChange();},_setValueAttr:function(v){this._set("value",v);if(v==Infinity){this.update({indeterminate:true});}else{this.update({indeterminate:false,progress:v});}},_setLabelAttr:function(_506){this._set("label",_506);this.update();},_setIndeterminateAttr:function(_507){this.indeterminate=_507;this.update();},report:function(_508){return this.label?this.label:(this.indeterminate?"&nbsp;":dojo.number.format(_508,{type:"percent",places:this.places,locale:this.lang}));},onChange:function(){}});}if(!dojo._hasResource["dijit.ToolbarSeparator"]){dojo._hasResource["dijit.ToolbarSeparator"]=true;dojo.provide("dijit.ToolbarSeparator");dojo.declare("dijit.ToolbarSeparator",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitToolbarSeparator dijitInline\" role=\"presentation\"></div>",buildRendering:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dijit.Toolbar"]){dojo._hasResource["dijit.Toolbar"]=true;dojo.provide("dijit.Toolbar");dojo.declare("dijit.Toolbar",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{templateString:"<div class=\"dijit\" role=\"toolbar\" tabIndex=\"${tabIndex}\" dojoAttachPoint=\"containerNode\">"+"</div>",baseClass:"dijitToolbar",postCreate:function(){this.inherited(arguments);this.connectKeyNavHandlers(this.isLeftToRight()?[dojo.keys.LEFT_ARROW]:[dojo.keys.RIGHT_ARROW],this.isLeftToRight()?[dojo.keys.RIGHT_ARROW]:[dojo.keys.LEFT_ARROW]);},startup:function(){if(this._started){return;}this.startupKeyNavChildren();this.inherited(arguments);}});}if(!dojo._hasResource["dojo.DeferredList"]){dojo._hasResource["dojo.DeferredList"]=true;dojo.provide("dojo.DeferredList");dojo.DeferredList=function(list,_509,_50a,_50b,_50c){var _50d=[];dojo.Deferred.call(this);var self=this;if(list.length===0&&!_509){this.resolve([0,[]]);}var _50e=0;dojo.forEach(list,function(item,i){item.then(function(_50f){if(_509){self.resolve([i,_50f]);}else{_510(true,_50f);}},function(_511){if(_50a){self.reject(_511);}else{_510(false,_511);}if(_50b){return null;}throw _511;});function _510(_512,_513){_50d[i]=[_512,_513];_50e++;if(_50e===list.length){self.resolve(_50d);}};});};dojo.DeferredList.prototype=new dojo.Deferred();dojo.DeferredList.prototype.gatherResults=function(_514){var d=new dojo.DeferredList(_514,false,true,false);d.addCallback(function(_515){var ret=[];dojo.forEach(_515,function(_516){ret.push(_516[1]);});return ret;});return d;};}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(args){dojo.mixin(this,args);this.connects=[];var _517=this.store;if(!_517.getFeatures()["dojo.data.api.Identity"]){throw new Error("dijit.Tree: store must support dojo.data.Identity");}if(_517.getFeatures()["dojo.data.api.Notification"]){this.connects=this.connects.concat([dojo.connect(_517,"onNew",this,"onNewItem"),dojo.connect(_517,"onDelete",this,"onDeleteItem"),dojo.connect(_517,"onSet",this,"onSetItem")]);}},destroy:function(){dojo.forEach(this.connects,dojo.disconnect);},getRoot:function(_518,_519){if(this.root){_518(this.root);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_51a){if(_51a.length!=1){throw new Error(this.declaredClass+": query "+dojo.toJson(this.query)+" returned "+_51a.length+" items, but must return exactly one item");}this.root=_51a[0];_518(this.root);}),onError:_519});}},mayHaveChildren:function(item){return dojo.some(this.childrenAttrs,function(attr){return this.store.hasAttribute(item,attr);},this);},getChildren:function(_51b,_51c,_51d){var _51e=this.store;if(!_51e.isItemLoaded(_51b)){var _51f=dojo.hitch(this,arguments.callee);_51e.loadItem({item:_51b,onItem:function(_520){_51f(_520,_51c,_51d);},onError:_51d});return;}var _521=[];for(var i=0;i<this.childrenAttrs.length;i++){var vals=_51e.getValues(_51b,this.childrenAttrs[i]);_521=_521.concat(vals);}var _522=0;if(!this.deferItemLoadingUntilExpand){dojo.forEach(_521,function(item){if(!_51e.isItemLoaded(item)){_522++;}});}if(_522==0){_51c(_521);}else{dojo.forEach(_521,function(item,idx){if(!_51e.isItemLoaded(item)){_51e.loadItem({item:item,onItem:function(item){_521[idx]=item;if(--_522==0){_51c(_521);}},onError:_51d});}});}},isItem:function(_523){return this.store.isItem(_523);},fetchItemByIdentity:function(_524){this.store.fetchItemByIdentity(_524);},getIdentity:function(item){return this.store.getIdentity(item);},getLabel:function(item){if(this.labelAttr){return this.store.getValue(item,this.labelAttr);}else{return this.store.getLabel(item);}},newItem:function(args,_525,_526){var _527={parent:_525,attribute:this.childrenAttrs[0]},_528;if(this.newItemIdAttr&&args[this.newItemIdAttr]){this.fetchItemByIdentity({identity:args[this.newItemIdAttr],scope:this,onItem:function(item){if(item){this.pasteItem(item,null,_525,true,_526);}else{_528=this.store.newItem(args,_527);if(_528&&(_526!=undefined)){this.pasteItem(_528,_525,_525,false,_526);}}}});}else{_528=this.store.newItem(args,_527);if(_528&&(_526!=undefined)){this.pasteItem(_528,_525,_525,false,_526);}}},pasteItem:function(_529,_52a,_52b,_52c,_52d){var _52e=this.store,_52f=this.childrenAttrs[0];if(_52a){dojo.forEach(this.childrenAttrs,function(attr){if(_52e.containsValue(_52a,attr,_529)){if(!_52c){var _530=dojo.filter(_52e.getValues(_52a,attr),function(x){return x!=_529;});_52e.setValues(_52a,attr,_530);}_52f=attr;}});}if(_52b){if(typeof _52d=="number"){var _531=_52e.getValues(_52b,_52f).slice();_531.splice(_52d,0,_529);_52e.setValues(_52b,_52f,_531);}else{_52e.setValues(_52b,_52f,_52e.getValues(_52b,_52f).concat(_529));}}},onChange:function(item){},onChildrenChange:function(_532,_533){},onDelete:function(_534,_535){},onNewItem:function(item,_536){if(!_536){return;}this.getChildren(_536.item,dojo.hitch(this,function(_537){this.onChildrenChange(_536.item,_537);}));},onDeleteItem:function(item){this.onDelete(item);},onSetItem:function(item,_538,_539,_53a){if(dojo.indexOf(this.childrenAttrs,_538)!=-1){this.getChildren(item,dojo.hitch(this,function(_53b){this.onChildrenChange(item,_53b);}));}else{this.onChange(item);}}});}if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){dojo._hasResource["dijit.tree.ForestStoreModel"]=true;dojo.provide("dijit.tree.ForestStoreModel");dojo.declare("dijit.tree.ForestStoreModel",dijit.tree.TreeStoreModel,{rootId:"$root$",rootLabel:"ROOT",query:null,constructor:function(_53c){this.root={store:this,root:true,id:_53c.rootId,label:_53c.rootLabel,children:_53c.rootChildren};},mayHaveChildren:function(item){return item===this.root||this.inherited(arguments);},getChildren:function(_53d,_53e,_53f){if(_53d===this.root){if(this.root.children){_53e(this.root.children);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_540){this.root.children=_540;_53e(_540);}),onError:_53f});}}else{this.inherited(arguments);}},isItem:function(_541){return (_541===this.root)?true:this.inherited(arguments);},fetchItemByIdentity:function(_542){if(_542.identity==this.root.id){var _543=_542.scope?_542.scope:dojo.global;if(_542.onItem){_542.onItem.call(_543,this.root);}}else{this.inherited(arguments);}},getIdentity:function(item){return (item===this.root)?this.root.id:this.inherited(arguments);},getLabel:function(item){return (item===this.root)?this.root.label:this.inherited(arguments);},newItem:function(args,_544,_545){if(_544===this.root){this.onNewRootItem(args);return this.store.newItem(args);}else{return this.inherited(arguments);}},onNewRootItem:function(args){},pasteItem:function(_546,_547,_548,_549,_54a){if(_547===this.root){if(!_549){this.onLeaveRoot(_546);}}dijit.tree.TreeStoreModel.prototype.pasteItem.call(this,_546,_547===this.root?null:_547,_548===this.root?null:_548,_549,_54a);if(_548===this.root){this.onAddToRoot(_546);}},onAddToRoot:function(item){console.log(this,": item ",item," added to root");},onLeaveRoot:function(item){console.log(this,": item ",item," removed from root");},_requeryTop:function(){var _54b=this.root.children||[];this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_54c){this.root.children=_54c;if(_54b.length!=_54c.length||dojo.some(_54b,function(item,idx){return _54c[idx]!=item;})){this.onChildrenChange(this.root,_54c);}})});},onNewItem:function(item,_54d){this._requeryTop();this.inherited(arguments);},onDeleteItem:function(item){if(dojo.indexOf(this.root.children,item)!=-1){this._requeryTop();}this.inherited(arguments);},onSetItem:function(item,_54e,_54f,_550){this._requeryTop();this.inherited(arguments);}});}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,_551){this.node=dojo.byId(node);if(!_551){_551={};}this.creator=_551.creator||null;this.skipForm=_551.skipForm;this.parent=_551.dropParent&&dojo.byId(_551.dropParent);this.map={};this.current=null;this.containerState="";dojo.addClass(this.node,"dojoDndContainer");if(!(_551&&_551._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,_552,_553){if(!this.parent.firstChild){_553=null;}else{if(_552){if(!_553){_553=this.parent.firstChild;}}else{if(_553){_553=_553.nextSibling;}}}if(_553){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,_553);}}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(_554,node){_554._skipStartup=true;return new dojo.dnd.Container(node,_554);},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,_555){var _556="dojoDnd"+type;var _557=type.toLowerCase()+"State";dojo.replaceClass(this.node,_556+_555,_556+this[_557]);this[_557]=_555;},_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 _558=node.parentNode;_558;node=_558,_558=node.parentNode){if(_558==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 _559=item&&dojo.isObject(item),data,type,n;if(_559&&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=(_559&&item.data)?item.data:item;type=(_559&&item.type)?item.type:["text"];n=(hint=="avatar"?dojo.dnd._createSpan:c)(String(data));}if(!n.id){n.id=dojo.dnd.getUniqueId();}return {node:n,data:data,type:type};};};}if(!dojo._hasResource["dijit.tree._dndContainer"]){dojo._hasResource["dijit.tree._dndContainer"]=true;dojo.provide("dijit.tree._dndContainer");dojo.getObject("tree",true,dojo);dijit.tree._compareNodes=function(n1,n2){if(n1===n2){return 0;}if("sourceIndex" in document.documentElement){return n1.sourceIndex-n2.sourceIndex;}else{if("compareDocumentPosition" in document.documentElement){return n1.compareDocumentPosition(n2)&2?1:-1;}else{if(document.createRange){var r1=doc.createRange();r1.setStartBefore(n1);var r2=doc.createRange();r2.setStartBefore(n2);return r1.compareBoundaryPoints(r1.END_TO_END,r2);}else{throw Error("dijit.tree._compareNodes don't know how to compare two different nodes in this browser");}}}};dojo.declare("dijit.tree._dndContainer",null,{constructor:function(tree,_55a){this.tree=tree;this.node=tree.domNode;dojo.mixin(this,_55a);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(key){var _55b=this.selection[key],ret={data:_55b,type:["treeNode"]};return ret;},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.node=this.parent=null;},onMouseOver:function(_55c,evt){this.current=_55c;},onMouseOut:function(_55d,evt){this.current=null;},_changeState:function(type,_55e){var _55f="dojoDnd"+type;var _560=type.toLowerCase()+"State";dojo.replaceClass(this.node,_55f+_55e,_55f+this[_560]);this[_560]=_55e;},_addItemClass:function(node,type){dojo.addClass(node,"dojoDndItem"+type);},_removeItemClass:function(node,type){dojo.removeClass(node,"dojoDndItem"+type);},onOverEvent:function(){this._changeState("Container","Over");},onOutEvent:function(){this._changeState("Container","");}});}if(!dojo._hasResource["dijit.tree._dndSelector"]){dojo._hasResource["dijit.tree._dndSelector"]=true;dojo.provide("dijit.tree._dndSelector");dojo.declare("dijit.tree._dndSelector",dijit.tree._dndContainer,{constructor:function(tree,_561){this.selection={};this.anchor=null;dijit.setWaiState(this.tree.domNode,"multiselect",!this.singular);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,getSelectedTreeNodes:function(){var _562=[],sel=this.selection;for(var i in sel){_562.push(sel[i]);}return _562;},selectNone:function(){this.setSelection([]);return this;},destroy:function(){this.inherited(arguments);this.selection=this.anchor=null;},addTreeNode:function(node,_563){this.setSelection(this.getSelectedTreeNodes().concat([node]));if(_563){this.anchor=node;}return node;},removeTreeNode:function(node){this.setSelection(this._setDifference(this.getSelectedTreeNodes(),[node]));return node;},isTreeNodeSelected:function(node){return node.id&&!!this.selection[node.id];},setSelection:function(_564){var _565=this.getSelectedTreeNodes();dojo.forEach(this._setDifference(_565,_564),dojo.hitch(this,function(node){node.setSelected(false);if(this.anchor==node){delete this.anchor;}delete this.selection[node.id];}));dojo.forEach(this._setDifference(_564,_565),dojo.hitch(this,function(node){node.setSelected(true);this.selection[node.id]=node;}));this._updateSelectionProperties();},_setDifference:function(xs,ys){dojo.forEach(ys,function(y){y.__exclude__=true;});var ret=dojo.filter(xs,function(x){return !x.__exclude__;});dojo.forEach(ys,function(y){delete y["__exclude__"];});return ret;},_updateSelectionProperties:function(){var _566=this.getSelectedTreeNodes();var _567=[],_568=[];dojo.forEach(_566,function(node){_568.push(node);_567.push(node.getTreePath());});var _569=dojo.map(_568,function(node){return node.item;});this.tree._set("paths",_567);this.tree._set("path",_567[0]||[]);this.tree._set("selectedNodes",_568);this.tree._set("selectedNode",_568[0]||null);this.tree._set("selectedItems",_569);this.tree._set("selectedItem",_569[0]||null);},onMouseDown:function(e){if(!this.current||this.tree.isExpandoNode(e.target,this.current)){return;}if(e.button==dojo.mouseButtons.RIGHT){return;}dojo.stopEvent(e);var _56a=this.current,copy=dojo.isCopyKey(e),id=_56a.id;if(!this.singular&&!e.shiftKey&&this.selection[id]){this._doDeselect=true;return;}else{this._doDeselect=false;}this.userSelect(_56a,copy,e.shiftKey);},onMouseUp:function(e){if(!this._doDeselect){return;}this._doDeselect=false;this.userSelect(this.current,dojo.isCopyKey(e),e.shiftKey);},onMouseMove:function(e){this._doDeselect=false;},userSelect:function(node,_56b,_56c){if(this.singular){if(this.anchor==node&&_56b){this.selectNone();}else{this.setSelection([node]);this.anchor=node;}}else{if(_56c&&this.anchor){var cr=dijit.tree._compareNodes(this.anchor.rowNode,node.rowNode),_56d,end,_56e=this.anchor;if(cr<0){_56d=_56e;end=node;}else{_56d=node;end=_56e;}nodes=[];while(_56d!=end){nodes.push(_56d);_56d=this.tree._getNextNode(_56d);}nodes.push(end);this.setSelection(nodes);}else{if(this.selection[node.id]&&_56b){this.removeTreeNode(node);}else{if(_56b){this.addTreeNode(node,true);}else{this.setSelection([node]);this.anchor=node;}}}}},forInSelectedItems:function(f,o){o=o||dojo.global;for(var id in this.selection){f.call(o,this.getItem(id),id,this);}}});}if(!dojo._hasResource["dijit.Tree"]){dojo._hasResource["dijit.Tree"]=true;dojo.provide("dijit.Tree");dojo.declare("dijit._TreeNode",[dijit._Widget,dijit._Templated,dijit._Container,dijit._Contained,dijit._CssStateMixin],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:dojo.cache("dijit","templates/TreeNode.html","<div class=\"dijitTreeNode\" role=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" role=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" role=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" role=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" role=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" role=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" role=\"treeitem\" tabindex=\"-1\" aria-selected=\"false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" role=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),baseClass:"dijitTreeNode",cssStateNodes:{rowNode:"dijitTreeRow",labelNode:"dijitTreeLabel"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"labelNode",type:"innerText"},tooltip:{node:"rowNode",type:"attribute",attribute:"title"}}),buildRendering:function(){this.inherited(arguments);this._setExpando();this._updateItemClasses(this.item);if(this.isExpandable){dijit.setWaiState(this.labelNode,"expanded",this.isExpanded);}this.setSelected(false);},_setIndentAttr:function(_56f){var _570=(Math.max(_56f,0)*this.tree._nodePixelIndent)+"px";dojo.style(this.domNode,"backgroundPosition",_570+" 0px");dojo.style(this.rowNode,this.isLeftToRight()?"paddingLeft":"paddingRight",_570);dojo.forEach(this.getChildren(),function(_571){_571.set("indent",_56f+1);});this._set("indent",_56f);},markProcessing:function(){this.state="LOADING";this._setExpando(true);},unmarkProcessing:function(){this._setExpando(false);},_updateItemClasses:function(item){var tree=this.tree,_572=tree.model;if(tree._v10Compat&&item===_572.root){item=null;}this._applyClassAndStyle(item,"icon","Icon");this._applyClassAndStyle(item,"label","Label");this._applyClassAndStyle(item,"row","Row");},_applyClassAndStyle:function(item,_573,_574){var _575="_"+_573+"Class";var _576=_573+"Node";var _577=this[_575];this[_575]=this.tree["get"+_574+"Class"](item,this.isExpanded);dojo.replaceClass(this[_576],this[_575]||"",_577||"");dojo.style(this[_576],this.tree["get"+_574+"Style"](item,this.isExpanded)||{});},_updateLayout:function(){var _578=this.getParent();if(!_578||_578.rowNode.style.display=="none"){dojo.addClass(this.domNode,"dijitTreeIsRoot");}else{dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling());}},_setExpando:function(_579){var _57a=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"],_57b=["*","-","+","*"],idx=_579?0:(this.isExpandable?(this.isExpanded?1:2):3);dojo.replaceClass(this.expandoNode,_57a[idx],_57a);this.expandoNodeText.innerHTML=_57b[idx];},expand:function(){if(this._expandDeferred){return this._expandDeferred;}this._wipeOut&&this._wipeOut.stop();this.isExpanded=true;dijit.setWaiState(this.labelNode,"expanded","true");if(this.tree.showRoot||this!==this.tree.rootNode){dijit.setWaiRole(this.containerNode,"group");}dojo.addClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","true");}var def,_57c=dojo.fx.wipeIn({node:this.containerNode,duration:dijit.defaultDuration,onEnd:function(){def.callback(true);}});def=(this._expandDeferred=new dojo.Deferred(function(){_57c.stop();}));_57c.play();return def;},collapse:function(){if(!this.isExpanded){return;}if(this._expandDeferred){this._expandDeferred.cancel();delete this._expandDeferred;}this.isExpanded=false;dijit.setWaiState(this.labelNode,"expanded","false");if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","false");}dojo.removeClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(!this._wipeOut){this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:dijit.defaultDuration});}this._wipeOut.play();},indent:0,setChildItems:function(_57d){var tree=this.tree,_57e=tree.model,defs=[];dojo.forEach(this.getChildren(),function(_57f){dijit._Container.prototype.removeChild.call(this,_57f);},this);this.state="LOADED";if(_57d&&_57d.length>0){this.isExpandable=true;dojo.forEach(_57d,function(item){var id=_57e.getIdentity(item),_580=tree._itemNodesMap[id],node;if(_580){for(var i=0;i<_580.length;i++){if(_580[i]&&!_580[i].getParent()){node=_580[i];node.set("indent",this.indent+1);break;}}}if(!node){node=this.tree._createTreeNode({item:item,tree:tree,isExpandable:_57e.mayHaveChildren(item),label:tree.getLabel(item),tooltip:tree.getTooltip(item),dir:tree.dir,lang:tree.lang,indent:this.indent+1});if(_580){_580.push(node);}else{tree._itemNodesMap[id]=[node];}}this.addChild(node);if(this.tree.autoExpand||this.tree._state(item)){defs.push(tree._expandNode(node));}},this);dojo.forEach(this.getChildren(),function(_581,idx){_581._updateLayout();});}else{this.isExpandable=false;}if(this._setExpando){this._setExpando(false);}this._updateItemClasses(this.item);if(this==tree.rootNode){var fc=this.tree.showRoot?this:this.getChildren()[0];if(fc){fc.setFocusable(true);tree.lastFocused=fc;}else{tree.domNode.setAttribute("tabIndex","0");}}return new dojo.DeferredList(defs);},getTreePath:function(){var node=this;var path=[];while(node&&node!==this.tree.rootNode){path.unshift(node.item);node=node.getParent();}path.unshift(this.tree.rootNode.item);return path;},getIdentity:function(){return this.tree.model.getIdentity(this.item);},removeChild:function(node){this.inherited(arguments);var _582=this.getChildren();if(_582.length==0){this.isExpandable=false;this.collapse();}dojo.forEach(_582,function(_583){_583._updateLayout();});},makeExpandable:function(){this.isExpandable=true;this._setExpando(false);},_onLabelFocus:function(evt){this.tree._onNodeFocus(this);},setSelected:function(_584){dijit.setWaiState(this.labelNode,"selected",_584);dojo.toggleClass(this.rowNode,"dijitTreeRowSelected",_584);},setFocusable:function(_585){this.labelNode.setAttribute("tabIndex",_585?"0":"-1");},_onClick:function(evt){this.tree._onClick(this,evt);},_onDblClick:function(evt){this.tree._onDblClick(this,evt);},_onMouseEnter:function(evt){this.tree._onNodeMouseEnter(this,evt);},_onMouseLeave:function(evt){this.tree._onNodeMouseLeave(this,evt);}});dojo.declare("dijit.Tree",[dijit._Widget,dijit._Templated],{store:null,model:null,query:null,label:"",showRoot:true,childrenAttr:["children"],paths:[],path:[],selectedItems:null,selectedItem:null,openOnClick:false,openOnDblClick:false,templateString:dojo.cache("dijit","templates/Tree.html","<div class=\"dijitTree dijitTreeContainer\" role=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),persist:true,autoExpand:false,dndController:"dijit.tree._dndSelector",dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance","dragThreshold","betweenThreshold"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,dragThreshold:5,betweenThreshold:0,_nodePixelIndent:19,_publish:function(_586,_587){dojo.publish(this.id,[dojo.mixin({tree:this,event:_586},_587||{})]);},postMixInProperties:function(){this.tree=this;if(this.autoExpand){this.persist=false;}this._itemNodesMap={};if(!this.cookieName){this.cookieName=this.id+"SaveStateCookie";}this._loadDeferred=new dojo.Deferred();this.inherited(arguments);},postCreate:function(){this._initState();if(!this.model){this._store2model();}this.connect(this.model,"onChange","_onItemChange");this.connect(this.model,"onChildrenChange","_onItemChildrenChange");this.connect(this.model,"onDelete","_onItemDelete");this._load();this.inherited(arguments);if(this.dndController){if(dojo.isString(this.dndController)){this.dndController=dojo.getObject(this.dndController);}var _588={};for(var i=0;i<this.dndParams.length;i++){if(this[this.dndParams[i]]){_588[this.dndParams[i]]=this[this.dndParams[i]];}}this.dndController=new this.dndController(this,_588);}},_store2model:function(){this._v10Compat=true;dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");var _589={id:this.id+"_ForestStoreModel",store:this.store,query:this.query,childrenAttrs:this.childrenAttr};if(this.params.mayHaveChildren){_589.mayHaveChildren=dojo.hitch(this,"mayHaveChildren");}if(this.params.getItemChildren){_589.getChildren=dojo.hitch(this,function(item,_58a,_58b){this.getItemChildren((this._v10Compat&&item===this.model.root)?null:item,_58a,_58b);});}this.model=new dijit.tree.ForestStoreModel(_589);this.showRoot=Boolean(this.label);},onLoad:function(){},_load:function(){this.model.getRoot(dojo.hitch(this,function(item){var rn=(this.rootNode=this.tree._createTreeNode({item:item,tree:this,isExpandable:true,label:this.label||this.getLabel(item),indent:this.showRoot?0:-1}));if(!this.showRoot){rn.rowNode.style.display="none";dijit.setWaiRole(this.domNode,"presentation");dijit.setWaiRole(rn.labelNode,"presentation");dijit.setWaiRole(rn.containerNode,"tree");}this.domNode.appendChild(rn.domNode);var _58c=this.model.getIdentity(item);if(this._itemNodesMap[_58c]){this._itemNodesMap[_58c].push(rn);}else{this._itemNodesMap[_58c]=[rn];}rn._updateLayout();this._expandNode(rn).addCallback(dojo.hitch(this,function(){this._loadDeferred.callback(true);this.onLoad();}));}),function(err){console.error(this,": error loading root: ",err);});},getNodesByItem:function(item){if(!item){return [];}var _58d=dojo.isString(item)?item:this.model.getIdentity(item);return [].concat(this._itemNodesMap[_58d]);},_setSelectedItemAttr:function(item){this.set("selectedItems",[item]);},_setSelectedItemsAttr:function(_58e){var tree=this;this._loadDeferred.addCallback(dojo.hitch(this,function(){var _58f=dojo.map(_58e,function(item){return (!item||dojo.isString(item))?item:tree.model.getIdentity(item);});var _590=[];dojo.forEach(_58f,function(id){_590=_590.concat(tree._itemNodesMap[id]||[]);});this.set("selectedNodes",_590);}));},_setPathAttr:function(path){if(path.length){return this.set("paths",[path]);}else{return this.set("paths",[]);}},_setPathsAttr:function(_591){var tree=this;return new dojo.DeferredList(dojo.map(_591,function(path){var d=new dojo.Deferred();path=dojo.map(path,function(item){return dojo.isString(item)?item:tree.model.getIdentity(item);});if(path.length){tree._loadDeferred.addCallback(function(){_592(path,[tree.rootNode],d);});}else{d.errback("Empty path");}return d;})).addCallback(_593);function _592(path,_594,def){var _595=path.shift();var _596=dojo.filter(_594,function(node){return node.getIdentity()==_595;})[0];if(!!_596){if(path.length){tree._expandNode(_596).addCallback(function(){_592(path,_596.getChildren(),def);});}else{def.callback(_596);}}else{def.errback("Could not expand path at "+_595);}};function _593(_597){tree.set("selectedNodes",dojo.map(dojo.filter(_597,function(x){return x[0];}),function(x){return x[1];}));};},_setSelectedNodeAttr:function(node){this.set("selectedNodes",[node]);},_setSelectedNodesAttr:function(_598){this._loadDeferred.addCallback(dojo.hitch(this,function(){this.dndController.setSelection(_598);}));},mayHaveChildren:function(item){},getItemChildren:function(_599,_59a){},getLabel:function(item){return this.model.getLabel(item);},getIconClass:function(item,_59b){return (!item||this.model.mayHaveChildren(item))?(_59b?"dijitFolderOpened":"dijitFolderClosed"):"dijitLeaf";},getLabelClass:function(item,_59c){},getRowClass:function(item,_59d){},getIconStyle:function(item,_59e){},getLabelStyle:function(item,_59f){},getRowStyle:function(item,_5a0){},getTooltip:function(item){return "";},_onKeyPress:function(e){if(e.altKey){return;}var dk=dojo.keys;var _5a1=dijit.getEnclosingWidget(e.target);if(!_5a1){return;}var key=e.charOrCode;if(typeof key=="string"&&key!=" "){if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){this._onLetterKeyNav({node:_5a1,key:key.toLowerCase()});dojo.stopEvent(e);}}else{if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}var map=this._keyHandlerMap;if(!map){map={};map[dk.ENTER]="_onEnterKey";map[dk.SPACE]=map[" "]="_onEnterKey";map[this.isLeftToRight()?dk.LEFT_ARROW:dk.RIGHT_ARROW]="_onLeftArrow";map[this.isLeftToRight()?dk.RIGHT_ARROW:dk.LEFT_ARROW]="_onRightArrow";map[dk.UP_ARROW]="_onUpArrow";map[dk.DOWN_ARROW]="_onDownArrow";map[dk.HOME]="_onHomeKey";map[dk.END]="_onEndKey";this._keyHandlerMap=map;}if(this._keyHandlerMap[key]){this[this._keyHandlerMap[key]]({node:_5a1,item:_5a1.item,evt:e});dojo.stopEvent(e);}}},_onEnterKey:function(_5a2){this._publish("execute",{item:_5a2.item,node:_5a2.node});this.dndController.userSelect(_5a2.node,dojo.isCopyKey(_5a2.evt),_5a2.evt.shiftKey);this.onClick(_5a2.item,_5a2.node,_5a2.evt);},_onDownArrow:function(_5a3){var node=this._getNextNode(_5a3.node);if(node&&node.isTreeNode){this.focusNode(node);}},_onUpArrow:function(_5a4){var node=_5a4.node;var _5a5=node.getPreviousSibling();if(_5a5){node=_5a5;while(node.isExpandable&&node.isExpanded&&node.hasChildren()){var _5a6=node.getChildren();node=_5a6[_5a6.length-1];}}else{var _5a7=node.getParent();if(!(!this.showRoot&&_5a7===this.rootNode)){node=_5a7;}}if(node&&node.isTreeNode){this.focusNode(node);}},_onRightArrow:function(_5a8){var node=_5a8.node;if(node.isExpandable&&!node.isExpanded){this._expandNode(node);}else{if(node.hasChildren()){node=node.getChildren()[0];if(node&&node.isTreeNode){this.focusNode(node);}}}},_onLeftArrow:function(_5a9){var node=_5a9.node;if(node.isExpandable&&node.isExpanded){this._collapseNode(node);}else{var _5aa=node.getParent();if(_5aa&&_5aa.isTreeNode&&!(!this.showRoot&&_5aa===this.rootNode)){this.focusNode(_5aa);}}},_onHomeKey:function(){var node=this._getRootOrFirstNode();if(node){this.focusNode(node);}},_onEndKey:function(_5ab){var node=this.rootNode;while(node.isExpanded){var c=node.getChildren();node=c[c.length-1];}if(node&&node.isTreeNode){this.focusNode(node);}},multiCharSearchDuration:250,_onLetterKeyNav:function(_5ac){var cs=this._curSearch;if(cs){cs.pattern=cs.pattern+_5ac.key;clearTimeout(cs.timer);}else{cs=this._curSearch={pattern:_5ac.key,startNode:_5ac.node};}var self=this;cs.timer=setTimeout(function(){delete self._curSearch;},this.multiCharSearchDuration);var node=cs.startNode;do{node=this._getNextNode(node);if(!node){node=this._getRootOrFirstNode();}}while(node!==cs.startNode&&(node.label.toLowerCase().substr(0,cs.pattern.length)!=cs.pattern));if(node&&node.isTreeNode){if(node!==cs.startNode){this.focusNode(node);}}},isExpandoNode:function(node,_5ad){return dojo.isDescendant(node,_5ad.expandoNode);},_onClick:function(_5ae,e){var _5af=e.target,_5b0=this.isExpandoNode(_5af,_5ae);if((this.openOnClick&&_5ae.isExpandable)||_5b0){if(_5ae.isExpandable){this._onExpandoClick({node:_5ae});}}else{this._publish("execute",{item:_5ae.item,node:_5ae,evt:e});this.onClick(_5ae.item,_5ae,e);this.focusNode(_5ae);}dojo.stopEvent(e);},_onDblClick:function(_5b1,e){var _5b2=e.target,_5b3=(_5b2==_5b1.expandoNode||_5b2==_5b1.expandoNodeText);if((this.openOnDblClick&&_5b1.isExpandable)||_5b3){if(_5b1.isExpandable){this._onExpandoClick({node:_5b1});}}else{this._publish("execute",{item:_5b1.item,node:_5b1,evt:e});this.onDblClick(_5b1.item,_5b1,e);this.focusNode(_5b1);}dojo.stopEvent(e);},_onExpandoClick:function(_5b4){var node=_5b4.node;this.focusNode(node);if(node.isExpanded){this._collapseNode(node);}else{this._expandNode(node);}},onClick:function(item,node,evt){},onDblClick:function(item,node,evt){},onOpen:function(item,node){},onClose:function(item,node){},_getNextNode:function(node){if(node.isExpandable&&node.isExpanded&&node.hasChildren()){return node.getChildren()[0];}else{while(node&&node.isTreeNode){var _5b5=node.getNextSibling();if(_5b5){return _5b5;}node=node.getParent();}return null;}},_getRootOrFirstNode:function(){return this.showRoot?this.rootNode:this.rootNode.getChildren()[0];},_collapseNode:function(node){if(node._expandNodeDeferred){delete node._expandNodeDeferred;}if(node.isExpandable){if(node.state=="LOADING"){return;}node.collapse();this.onClose(node.item,node);if(node.item){this._state(node.item,false);this._saveState();}}},_expandNode:function(node,_5b6){if(node._expandNodeDeferred&&!_5b6){return node._expandNodeDeferred;}var _5b7=this.model,item=node.item,_5b8=this;switch(node.state){case "UNCHECKED":node.markProcessing();var def=(node._expandNodeDeferred=new dojo.Deferred());_5b7.getChildren(item,function(_5b9){node.unmarkProcessing();var scid=node.setChildItems(_5b9);var ed=_5b8._expandNode(node,true);scid.addCallback(function(){ed.addCallback(function(){def.callback();});});},function(err){console.error(_5b8,": error loading root children: ",err);});break;default:def=(node._expandNodeDeferred=node.expand());this.onOpen(node.item,node);if(item){this._state(item,true);this._saveState();}}return def;},focusNode:function(node){dijit.focus(node.labelNode);},_onNodeFocus:function(node){if(node&&node!=this.lastFocused){if(this.lastFocused&&!this.lastFocused._destroyed){this.lastFocused.setFocusable(false);}node.setFocusable(true);this.lastFocused=node;}},_onNodeMouseEnter:function(node){},_onNodeMouseLeave:function(node){},_onItemChange:function(item){var _5ba=this.model,_5bb=_5ba.getIdentity(item),_5bc=this._itemNodesMap[_5bb];if(_5bc){var _5bd=this.getLabel(item),_5be=this.getTooltip(item);dojo.forEach(_5bc,function(node){node.set({item:item,label:_5bd,tooltip:_5be});node._updateItemClasses(item);});}},_onItemChildrenChange:function(_5bf,_5c0){var _5c1=this.model,_5c2=_5c1.getIdentity(_5bf),_5c3=this._itemNodesMap[_5c2];if(_5c3){dojo.forEach(_5c3,function(_5c4){_5c4.setChildItems(_5c0);});}},_onItemDelete:function(item){var _5c5=this.model,_5c6=_5c5.getIdentity(item),_5c7=this._itemNodesMap[_5c6];if(_5c7){dojo.forEach(_5c7,function(node){this.dndController.removeTreeNode(node);var _5c8=node.getParent();if(_5c8){_5c8.removeChild(node);}node.destroyRecursive();},this);delete this._itemNodesMap[_5c6];}},_initState:function(){if(this.persist){var _5c9=dojo.cookie(this.cookieName);this._openedItemIds={};if(_5c9){dojo.forEach(_5c9.split(","),function(item){this._openedItemIds[item]=true;},this);}}},_state:function(item,_5ca){if(!this.persist){return false;}var id=this.model.getIdentity(item);if(arguments.length===1){return this._openedItemIds[id];}if(_5ca){this._openedItemIds[id]=true;}else{delete this._openedItemIds[id];}},_saveState:function(){if(!this.persist){return;}var ary=[];for(var id in this._openedItemIds){ary.push(id);}dojo.cookie(this.cookieName,ary.join(","),{expires:365});},destroy:function(){if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}if(this.rootNode){this.rootNode.destroyRecursive();}if(this.dndController&&!dojo.isString(this.dndController)){this.dndController.destroy();}this.rootNode=null;this.inherited(arguments);},destroyRecursive:function(){this.destroy();},resize:function(_5cb){if(_5cb){dojo.marginBox(this.domNode,_5cb);}this._nodePixelIndent=dojo._getMarginSize(this.tree.indentDetector).w;if(this.tree.rootNode){this.tree.rootNode.set("indent",this.showRoot?0:-1);}},_createTreeNode:function(args){return new dijit._TreeNode(args);}});}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(_5cc){this.manager=_5cc;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"}}),_5cd=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:_5cd.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(_5cd.creator){node=_5cd._normalizedCreator(_5cd.getItem(this.manager.nodes[i].id).data,"avatar").node;}else{node=this.manager.nodes[i].cloneNode(true);if(node.tagName.toLowerCase()=="tr"){var _5ce=dojo.create("table"),_5cf=dojo.create("tbody",null,_5ce);_5cf.appendChild(node);node=_5ce;}}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(_5d0){if(this.avatar){this.target=(_5d0&&_5d0.targetState!="Disabled")?_5d0:null;this.canDropFlag=Boolean(this.target);this.avatar.update();}dojo.publish("/dnd/source/over",[_5d0]);},outSource:function(_5d1){if(this.avatar){if(this.target==_5d1){this.target=null;this.canDropFlag=false;this.avatar.update();dojo.publish("/dnd/source/over",[null]);}}else{dojo.publish("/dnd/source/over",[null]);}},startDrag:function(_5d2,_5d3,copy){this.source=_5d2;this.nodes=_5d3;this.copy=Boolean(copy);this.avatar=this.makeAvatar();dojo.body().appendChild(this.avatar.node);dojo.publish("/dnd/start",[_5d2,_5d3,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 _5d4=Boolean(this.target&&flag);if(this.canDropFlag!=_5d4){this.canDropFlag=_5d4;this.avatar.update();}},stopDrag:function(){dojo.removeClass(dojo.body(),["dojoDndCopy","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))),_5d5=[this.source,this.nodes,copy,this.target,e];dojo.publish("/dnd/drop/before",_5d5);dojo.publish("/dnd/drop",_5d5);}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.replaceClass(dojo.body(),"dojoDnd"+(this.copy?"Copy":"Move"),"dojoDnd"+(this.copy?"Move":"Copy"));}});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["dijit.tree.dndSource"]){dojo._hasResource["dijit.tree.dndSource"]=true;dojo.provide("dijit.tree.dndSource");dojo.declare("dijit.tree.dndSource",dijit.tree._dndSelector,{isSource:true,accept:["text","treeNode"],copyOnly:false,dragThreshold:5,betweenThreshold:0,constructor:function(tree,_5d6){if(!_5d6){_5d6={};}dojo.mixin(this,_5d6);this.isSource=typeof _5d6.isSource=="undefined"?true:_5d6.isSource;var type=_5d6.accept instanceof Array?_5d6.accept:["text","treeNode"];this.accept=null;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.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(_5d7,_5d8){return true;},copyState:function(_5d9){return this.copyOnly||_5d9;},destroy:function(){this.inherited("destroy",arguments);dojo.forEach(this.topics,dojo.unsubscribe);this.targetAnchor=null;},_onDragMouse:function(e){var m=dojo.dnd.manager(),_5da=this.targetAnchor,_5db=this.current,_5dc=this.dropPosition;var _5dd="Over";if(_5db&&this.betweenThreshold>0){if(!this.targetBox||_5da!=_5db){this.targetBox=dojo.position(_5db.rowNode,true);}if((e.pageY-this.targetBox.y)<=this.betweenThreshold){_5dd="Before";}else{if((e.pageY-this.targetBox.y)>=(this.targetBox.h-this.betweenThreshold)){_5dd="After";}}}if(_5db!=_5da||_5dd!=_5dc){if(_5da){this._removeItemClass(_5da.rowNode,_5dc);}if(_5db){this._addItemClass(_5db.rowNode,_5dd);}if(!_5db){m.canDrop(false);}else{if(_5db==this.tree.rootNode&&_5dd!="Over"){m.canDrop(false);}else{if(m.source==this&&(_5db.id in this.selection)){m.canDrop(false);}else{if(this.checkItemAcceptance(_5db.rowNode,m.source,_5dd.toLowerCase())&&!this._isParentChildDrop(m.source,_5db.rowNode)){m.canDrop(true);}else{m.canDrop(false);}}}}this.targetAnchor=_5db;this.dropPosition=_5dd;}},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 _5de=this.getSelectedTreeNodes();if(_5de.length){if(_5de.length>1){var seen=this.selection,i=0,r=[],n,p;nextitem:while((n=_5de[i++])){for(p=n.getParent();p&&p!==this.tree;p=p.getParent()){if(seen[p.id]){continue nextitem;}}r.push(n);}_5de=r;}_5de=dojo.map(_5de,function(n){return n.domNode;});m.startDrag(this,_5de,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(arguments);},onMouseUp:function(e){if(this.mouseDown){this.mouseDown=false;this.inherited(arguments);}},onMouseOut:function(){this.inherited(arguments);this._unmarkTargetAnchor();},checkItemAcceptance:function(_5df,_5e0,_5e1){return true;},onDndSourceOver:function(_5e2){if(this!=_5e2){this.mouseDown=false;this._unmarkTargetAnchor();}else{if(this.isDragging){var m=dojo.dnd.manager();m.canDrop(false);}}},onDndStart:function(_5e3,_5e4,copy){if(this.isSource){this._changeState("Source",this==_5e3?(copy?"Copied":"Moved"):"");}var _5e5=this.checkAcceptance(_5e3,_5e4);this._changeState("Target",_5e5?"":"Disabled");if(this==_5e3){dojo.dnd.manager().overSource(this);}this.isDragging=true;},itemCreator:function(_5e6,_5e7,_5e8){return dojo.map(_5e6,function(node){return {"id":node.id,"name":node.textContent||node.innerText||""};});},onDndDrop:function(_5e9,_5ea,copy){if(this.containerState=="Over"){var tree=this.tree,_5eb=tree.model,_5ec=this.targetAnchor,_5ed=false;this.isDragging=false;var _5ee=_5ec;var _5ef;var _5f0;_5ef=(_5ee&&_5ee.item)||tree.item;if(this.dropPosition=="Before"||this.dropPosition=="After"){_5ef=(_5ee.getParent()&&_5ee.getParent().item)||tree.item;_5f0=_5ee.getIndexInParent();if(this.dropPosition=="After"){_5f0=_5ee.getIndexInParent()+1;}}else{_5ef=(_5ee&&_5ee.item)||tree.item;}var _5f1;dojo.forEach(_5ea,function(node,idx){var _5f2=_5e9.getItem(node.id);if(dojo.indexOf(_5f2.type,"treeNode")!=-1){var _5f3=_5f2.data,_5f4=_5f3.item,_5f5=_5f3.getParent().item;}if(_5e9==this){if(typeof _5f0=="number"){if(_5ef==_5f5&&_5f3.getIndexInParent()<_5f0){_5f0-=1;}}_5eb.pasteItem(_5f4,_5f5,_5ef,copy,_5f0);}else{if(_5eb.isItem(_5f4)){_5eb.pasteItem(_5f4,_5f5,_5ef,copy,_5f0);}else{if(!_5f1){_5f1=this.itemCreator(_5ea,_5ec.rowNode,_5e9);}_5eb.newItem(_5f1[idx],_5ef,_5f0);}}},this);this.tree._expandNode(_5ee);}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(_5f6,_5f7){if(!_5f6.tree||_5f6.tree!=this.tree){return false;}var root=_5f6.tree.domNode;var ids=_5f6.selection;var node=_5f7.parentNode;while(node!=root&&!ids[node.id]){node=node.parentNode;}return node.id&&ids[node.id];},_unmarkTargetAnchor:function(){if(!this.targetAnchor){return;}this._removeItemClass(this.targetAnchor.rowNode,this.dropPosition);this.targetAnchor=null;this.targetBox=null;this.dropPosition=null;},_markDndStatus:function(copy){this._changeState("Source",copy?"Copied":"Moved");}});}if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){dojo._hasResource["dojo.data.ItemFileReadStore"]=true;dojo.provide("dojo.data.ItemFileReadStore");dojo.declare("dojo.data.ItemFileReadStore",null,{constructor:function(_5f8){this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._jsonFileUrl=_5f8.url;this._ccUrl=_5f8.url;this.url=_5f8.url;this._jsonData=_5f8.data;this.data=null;this._datatypeMap=_5f8.typeMap||{};if(!this._datatypeMap["Date"]){this._datatypeMap["Date"]={type:Date,deserialize:function(_5f9){return dojo.date.stamp.fromISOString(_5f9);}};}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(_5f8.urlPreventCache!==undefined){this.urlPreventCache=_5f8.urlPreventCache?true:false;}if(_5f8.hierarchical!==undefined){this.hierarchical=_5f8.hierarchical?true:false;}if(_5f8.clearOnClose){this.clearOnClose=true;}if("failOk" in _5f8){this.failOk=_5f8.failOk?true:false;}},url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,failOk:false,hierarchical:true,_assertIsItem:function(item){if(!this.isItem(item)){throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");}},_assertIsAttribute:function(_5fa){if(typeof _5fa!=="string"){throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");}},getValue:function(item,_5fb,_5fc){var _5fd=this.getValues(item,_5fb);return (_5fd.length>0)?_5fd[0]:_5fc;},getValues:function(item,_5fe){this._assertIsItem(item);this._assertIsAttribute(_5fe);return (item[_5fe]||[]).slice(0);},getAttributes:function(item){this._assertIsItem(item);var _5ff=[];for(var key in item){if((key!==this._storeRefPropName)&&(key!==this._itemNumPropName)&&(key!==this._rootItemPropName)&&(key!==this._reverseRefMap)){_5ff.push(key);}}return _5ff;},hasAttribute:function(item,_600){this._assertIsItem(item);this._assertIsAttribute(_600);return (_600 in item);},containsValue:function(item,_601,_602){var _603=undefined;if(typeof _602==="string"){_603=dojo.data.util.filter.patternToRegExp(_602,false);}return this._containsValue(item,_601,_602,_603);},_containsValue:function(item,_604,_605,_606){return dojo.some(this.getValues(item,_604),function(_607){if(_607!==null&&!dojo.isObject(_607)&&_606){if(_607.toString().match(_606)){return true;}}else{if(_605===_607){return true;}}});},isItem:function(_608){if(_608&&_608[this._storeRefPropName]===this){if(this._arrayOfAllItems[_608[this._itemNumPropName]]===_608){return true;}}return false;},isItemLoaded:function(_609){return this.isItem(_609);},loadItem:function(_60a){this._assertIsItem(_60a.item);},getFeatures:function(){return this._features;},getLabel:function(item){if(this._labelAttr&&this.isItem(item)){return this.getValue(item,this._labelAttr);}return undefined;},getLabelAttributes:function(item){if(this._labelAttr){return [this._labelAttr];}return null;},_fetchItems:function(_60b,_60c,_60d){var self=this,_60e=function(_60f,_610){var _611=[],i,key;if(_60f.query){var _612,_613=_60f.queryOptions?_60f.queryOptions.ignoreCase:false;var _614={};for(key in _60f.query){_612=_60f.query[key];if(typeof _612==="string"){_614[key]=dojo.data.util.filter.patternToRegExp(_612,_613);}else{if(_612 instanceof RegExp){_614[key]=_612;}}}for(i=0;i<_610.length;++i){var _615=true;var _616=_610[i];if(_616===null){_615=false;}else{for(key in _60f.query){_612=_60f.query[key];if(!self._containsValue(_616,key,_612,_614[key])){_615=false;}}}if(_615){_611.push(_616);}}_60c(_611,_60f);}else{for(i=0;i<_610.length;++i){var item=_610[i];if(item!==null){_611.push(item);}}_60c(_611,_60f);}};if(this._loadFinished){_60e(_60b,this._getItemsArray(_60b.queryOptions));}else{if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","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=this.data;this.data=null;}if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_60b,filter:_60e});}else{this._loadInProgress=true;var _617={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _618=dojo.xhrGet(_617);_618.addCallback(function(data){try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;_60e(_60b,self._getItemsArray(_60b.queryOptions));self._handleQueuedFetches();}catch(e){self._loadFinished=true;self._loadInProgress=false;_60d(e,_60b);}});_618.addErrback(function(_619){self._loadInProgress=false;_60d(_619,_60b);});var _61a=null;if(_60b.abort){_61a=_60b.abort;}_60b.abort=function(){var df=_618;if(df&&df.fired===-1){df.cancel();df=null;}if(_61a){_61a.call(_60b);}};}}else{if(this._jsonData){try{this._loadFinished=true;this._getItemsFromLoadedData(this._jsonData);this._jsonData=null;_60e(_60b,this._getItemsArray(_60b.queryOptions));}catch(e){_60d(e,_60b);}}else{_60d(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_60b);}}}},_handleQueuedFetches:function(){if(this._queuedFetches.length>0){for(var i=0;i<this._queuedFetches.length;i++){var _61b=this._queuedFetches[i],_61c=_61b.args,_61d=_61b.filter;if(_61d){_61d(_61c,this._getItemsArray(_61c.queryOptions));}else{this.fetchItemByIdentity(_61c);}}this._queuedFetches=[];}},_getItemsArray:function(_61e){if(_61e&&_61e.deep){return this._arrayOfAllItems;}return this._arrayOfTopLevelItems;},close:function(_61f){if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){console.debug("dojo.data.ItemFileReadStore: WARNING!  Data reload "+" information has not been provided."+"  Please set 'url' or 'data' to the appropriate value before"+" the next fetch");}this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._itemsByIdentity=null;this._loadInProgress=false;this._queuedFetches=[];}},_getItemsFromLoadedData:function(_620){var _621=false,self=this;function _622(_623){var _624=((_623!==null)&&(typeof _623==="object")&&(!dojo.isArray(_623)||_621)&&(!dojo.isFunction(_623))&&(_623.constructor==Object||dojo.isArray(_623))&&(typeof _623._reference==="undefined")&&(typeof _623._type==="undefined")&&(typeof _623._value==="undefined")&&self.hierarchical);return _624;};function _625(_626){self._arrayOfAllItems.push(_626);for(var _627 in _626){var _628=_626[_627];if(_628){if(dojo.isArray(_628)){var _629=_628;for(var k=0;k<_629.length;++k){var _62a=_629[k];if(_622(_62a)){_625(_62a);}}}else{if(_622(_628)){_625(_628);}}}}};this._labelAttr=_620.label;var i,item;this._arrayOfAllItems=[];this._arrayOfTopLevelItems=_620.items;for(i=0;i<this._arrayOfTopLevelItems.length;++i){item=this._arrayOfTopLevelItems[i];if(dojo.isArray(item)){_621=true;}_625(item);item[this._rootItemPropName]=true;}var _62b={},key;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){if(key!==this._rootItemPropName){var _62c=item[key];if(_62c!==null){if(!dojo.isArray(_62c)){item[key]=[_62c];}}else{item[key]=[null];}}_62b[key]=key;}}while(_62b[this._storeRefPropName]){this._storeRefPropName+="_";}while(_62b[this._itemNumPropName]){this._itemNumPropName+="_";}while(_62b[this._reverseRefMap]){this._reverseRefMap+="_";}var _62d;var _62e=_620.identifier;if(_62e){this._itemsByIdentity={};this._features["dojo.data.api.Identity"]=_62e;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];_62d=item[_62e];var _62f=_62d[0];if(!Object.hasOwnProperty.call(this._itemsByIdentity,_62f)){this._itemsByIdentity[_62f]=item;}else{if(this._jsonFileUrl){throw new Error("dojo.data.ItemFileReadStore:  The json data as specified by: ["+this._jsonFileUrl+"] is malformed.  Items within the list have identifier: ["+_62e+"].  Value collided: ["+_62f+"]");}else{if(this._jsonData){throw new Error("dojo.data.ItemFileReadStore:  The json data provided by the creation arguments is malformed.  Items within the list have identifier: ["+_62e+"].  Value collided: ["+_62f+"]");}}}}}else{this._features["dojo.data.api.Identity"]=Number;}for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];item[this._storeRefPropName]=this;item[this._itemNumPropName]=i;}for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){_62d=item[key];for(var j=0;j<_62d.length;++j){_62c=_62d[j];if(_62c!==null&&typeof _62c=="object"){if(("_type" in _62c)&&("_value" in _62c)){var type=_62c._type;var _630=this._datatypeMap[type];if(!_630){throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+type+"'");}else{if(dojo.isFunction(_630)){_62d[j]=new _630(_62c._value);}else{if(dojo.isFunction(_630.deserialize)){_62d[j]=_630.deserialize(_62c._value);}else{throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");}}}}if(_62c._reference){var _631=_62c._reference;if(!dojo.isObject(_631)){_62d[j]=this._getItemByIdentity(_631);}else{for(var k=0;k<this._arrayOfAllItems.length;++k){var _632=this._arrayOfAllItems[k],_633=true;for(var _634 in _631){if(_632[_634]!=_631[_634]){_633=false;}}if(_633){_62d[j]=_632;}}}if(this.referenceIntegrity){var _635=_62d[j];if(this.isItem(_635)){this._addReferenceToMap(_635,item,key);}}}else{if(this.isItem(_62c)){if(this.referenceIntegrity){this._addReferenceToMap(_62c,item,key);}}}}}}}},_addReferenceToMap:function(_636,_637,_638){},getIdentity:function(item){var _639=this._features["dojo.data.api.Identity"];if(_639===Number){return item[this._itemNumPropName];}else{var _63a=item[_639];if(_63a){return _63a[0];}}return null;},fetchItemByIdentity:function(_63b){var item,_63c;if(!this._loadFinished){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","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:_63b});}else{this._loadInProgress=true;var _63d={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _63e=dojo.xhrGet(_63d);_63e.addCallback(function(data){var _63f=_63b.scope?_63b.scope:dojo.global;try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;item=self._getItemByIdentity(_63b.identity);if(_63b.onItem){_63b.onItem.call(_63f,item);}self._handleQueuedFetches();}catch(error){self._loadInProgress=false;if(_63b.onError){_63b.onError.call(_63f,error);}}});_63e.addErrback(function(_640){self._loadInProgress=false;if(_63b.onError){var _641=_63b.scope?_63b.scope:dojo.global;_63b.onError.call(_641,_640);}});}}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;item=self._getItemByIdentity(_63b.identity);if(_63b.onItem){_63c=_63b.scope?_63b.scope:dojo.global;_63b.onItem.call(_63c,item);}}}}else{item=this._getItemByIdentity(_63b.identity);if(_63b.onItem){_63c=_63b.scope?_63b.scope:dojo.global;_63b.onItem.call(_63c,item);}}},_getItemByIdentity:function(_642){var item=null;if(this._itemsByIdentity&&Object.hasOwnProperty.call(this._itemsByIdentity,_642)){item=this._itemsByIdentity[_642];}else{if(Object.hasOwnProperty.call(this._arrayOfAllItems,_642)){item=this._arrayOfAllItems[_642];}}if(item===undefined){item=null;}return item;},getIdentityAttributes:function(item){var _643=this._features["dojo.data.api.Identity"];if(_643===Number){return null;}else{return [_643];}},_forceLoad:function(){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","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=this.data;this.data=null;}if(this._jsonFileUrl){var _644={url:this._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk,sync:true};var _645=dojo.xhrGet(_644);_645.addCallback(function(data){try{if(self._loadInProgress!==true&&!self._loadFinished){self._getItemsFromLoadedData(data);self._loadFinished=true;}else{if(self._loadInProgress){throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress.");}}}catch(e){console.log(e);throw e;}});_645.addErrback(function(_646){throw _646;});}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;}}}});dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);}if(!dojo._hasResource["dojo.data.ItemFileWriteStore"]){dojo._hasResource["dojo.data.ItemFileWriteStore"]=true;dojo.provide("dojo.data.ItemFileWriteStore");dojo.declare("dojo.data.ItemFileWriteStore",dojo.data.ItemFileReadStore,{constructor:function(_647){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(obj){return dojo.date.stamp.toISOString(obj,{zulu:true});};}if(_647&&(_647.referenceIntegrity===false)){this.referenceIntegrity=false;}this._saveInProgress=false;},referenceIntegrity:true,_assert:function(_648){if(!_648){throw new Error("assertion failed in ItemFileWriteStore");}},_getIdentifierAttribute:function(){var _649=this.getFeatures()["dojo.data.api.Identity"];return _649;},newItem:function(_64a,_64b){this._assert(!this._saveInProgress);if(!this._loadFinished){this._forceLoad();}if(typeof _64a!="object"&&typeof _64a!="undefined"){throw new Error("newItem() was passed something other than an object");}var _64c=null;var _64d=this._getIdentifierAttribute();if(_64d===Number){_64c=this._arrayOfAllItems.length;}else{_64c=_64a[_64d];if(typeof _64c==="undefined"){throw new Error("newItem() was not passed an identity for the new item");}if(dojo.isArray(_64c)){throw new Error("newItem() was not passed an single-valued identity");}}if(this._itemsByIdentity){this._assert(typeof this._itemsByIdentity[_64c]==="undefined");}this._assert(typeof this._pending._newItems[_64c]==="undefined");this._assert(typeof this._pending._deletedItems[_64c]==="undefined");var _64e={};_64e[this._storeRefPropName]=this;_64e[this._itemNumPropName]=this._arrayOfAllItems.length;if(this._itemsByIdentity){this._itemsByIdentity[_64c]=_64e;_64e[_64d]=[_64c];}this._arrayOfAllItems.push(_64e);var _64f=null;if(_64b&&_64b.parent&&_64b.attribute){_64f={item:_64b.parent,attribute:_64b.attribute,oldValue:undefined};var _650=this.getValues(_64b.parent,_64b.attribute);if(_650&&_650.length>0){var _651=_650.slice(0,_650.length);if(_650.length===1){_64f.oldValue=_650[0];}else{_64f.oldValue=_650.slice(0,_650.length);}_651.push(_64e);this._setValueOrValues(_64b.parent,_64b.attribute,_651,false);_64f.newValue=this.getValues(_64b.parent,_64b.attribute);}else{this._setValueOrValues(_64b.parent,_64b.attribute,_64e,false);_64f.newValue=_64e;}}else{_64e[this._rootItemPropName]=true;this._arrayOfTopLevelItems.push(_64e);}this._pending._newItems[_64c]=_64e;for(var key in _64a){if(key===this._storeRefPropName||key===this._itemNumPropName){throw new Error("encountered bug in ItemFileWriteStore.newItem");}var _652=_64a[key];if(!dojo.isArray(_652)){_652=[_652];}_64e[key]=_652;if(this.referenceIntegrity){for(var i=0;i<_652.length;i++){var val=_652[i];if(this.isItem(val)){this._addReferenceToMap(val,_64e,key);}}}}this.onNew(_64e,_64f);return _64e;},_removeArrayElement:function(_653,_654){var _655=dojo.indexOf(_653,_654);if(_655!=-1){_653.splice(_655,1);return true;}return false;},deleteItem:function(item){this._assert(!this._saveInProgress);this._assertIsItem(item);var _656=item[this._itemNumPropName];var _657=this.getIdentity(item);if(this.referenceIntegrity){var _658=this.getAttributes(item);if(item[this._reverseRefMap]){item["backup_"+this._reverseRefMap]=dojo.clone(item[this._reverseRefMap]);}dojo.forEach(_658,function(_659){dojo.forEach(this.getValues(item,_659),function(_65a){if(this.isItem(_65a)){if(!item["backupRefs_"+this._reverseRefMap]){item["backupRefs_"+this._reverseRefMap]=[];}item["backupRefs_"+this._reverseRefMap].push({id:this.getIdentity(_65a),attr:_659});this._removeReferenceFromMap(_65a,item,_659);}},this);},this);var _65b=item[this._reverseRefMap];if(_65b){for(var _65c in _65b){var _65d=null;if(this._itemsByIdentity){_65d=this._itemsByIdentity[_65c];}else{_65d=this._arrayOfAllItems[_65c];}if(_65d){for(var _65e in _65b[_65c]){var _65f=this.getValues(_65d,_65e)||[];var _660=dojo.filter(_65f,function(_661){return !(this.isItem(_661)&&this.getIdentity(_661)==_657);},this);this._removeReferenceFromMap(item,_65d,_65e);if(_660.length<_65f.length){this._setValueOrValues(_65d,_65e,_660,true);}}}}}}this._arrayOfAllItems[_656]=null;item[this._storeRefPropName]=null;if(this._itemsByIdentity){delete this._itemsByIdentity[_657];}this._pending._deletedItems[_657]=item;if(item[this._rootItemPropName]){this._removeArrayElement(this._arrayOfTopLevelItems,item);}this.onDelete(item);return true;},setValue:function(item,_662,_663){return this._setValueOrValues(item,_662,_663,true);},setValues:function(item,_664,_665){return this._setValueOrValues(item,_664,_665,true);},unsetAttribute:function(item,_666){return this._setValueOrValues(item,_666,[],true);},_setValueOrValues:function(item,_667,_668,_669){this._assert(!this._saveInProgress);this._assertIsItem(item);this._assert(dojo.isString(_667));this._assert(typeof _668!=="undefined");var _66a=this._getIdentifierAttribute();if(_667==_66a){throw new Error("ItemFileWriteStore does not have support for changing the value of an item's identifier.");}var _66b=this._getValueOrValues(item,_667);var _66c=this.getIdentity(item);if(!this._pending._modifiedItems[_66c]){var _66d={};for(var key in item){if((key===this._storeRefPropName)||(key===this._itemNumPropName)||(key===this._rootItemPropName)){_66d[key]=item[key];}else{if(key===this._reverseRefMap){_66d[key]=dojo.clone(item[key]);}else{_66d[key]=item[key].slice(0,item[key].length);}}}this._pending._modifiedItems[_66c]=_66d;}var _66e=false;if(dojo.isArray(_668)&&_668.length===0){_66e=delete item[_667];_668=undefined;if(this.referenceIntegrity&&_66b){var _66f=_66b;if(!dojo.isArray(_66f)){_66f=[_66f];}for(var i=0;i<_66f.length;i++){var _670=_66f[i];if(this.isItem(_670)){this._removeReferenceFromMap(_670,item,_667);}}}}else{var _671;if(dojo.isArray(_668)){var _672=_668;_671=_668.slice(0,_668.length);}else{_671=[_668];}if(this.referenceIntegrity){if(_66b){var _66f=_66b;if(!dojo.isArray(_66f)){_66f=[_66f];}var map={};dojo.forEach(_66f,function(_673){if(this.isItem(_673)){var id=this.getIdentity(_673);map[id.toString()]=true;}},this);dojo.forEach(_671,function(_674){if(this.isItem(_674)){var id=this.getIdentity(_674);if(map[id.toString()]){delete map[id.toString()];}else{this._addReferenceToMap(_674,item,_667);}}},this);for(var rId in map){var _675;if(this._itemsByIdentity){_675=this._itemsByIdentity[rId];}else{_675=this._arrayOfAllItems[rId];}this._removeReferenceFromMap(_675,item,_667);}}else{for(var i=0;i<_671.length;i++){var _670=_671[i];if(this.isItem(_670)){this._addReferenceToMap(_670,item,_667);}}}}item[_667]=_671;_66e=true;}if(_669){this.onSet(item,_667,_66b,_668);}return _66e;},_addReferenceToMap:function(_676,_677,_678){var _679=this.getIdentity(_677);var _67a=_676[this._reverseRefMap];if(!_67a){_67a=_676[this._reverseRefMap]={};}var _67b=_67a[_679];if(!_67b){_67b=_67a[_679]={};}_67b[_678]=true;},_removeReferenceFromMap:function(_67c,_67d,_67e){var _67f=this.getIdentity(_67d);var _680=_67c[this._reverseRefMap];var _681;if(_680){for(_681 in _680){if(_681==_67f){delete _680[_681][_67e];if(this._isEmpty(_680[_681])){delete _680[_681];}}}if(this._isEmpty(_680)){delete _67c[this._reverseRefMap];}}},_dumpReferenceMap:function(){var i;for(i=0;i<this._arrayOfAllItems.length;i++){var item=this._arrayOfAllItems[i];if(item&&item[this._reverseRefMap]){console.log("Item: ["+this.getIdentity(item)+"] is referenced by: "+dojo.toJson(item[this._reverseRefMap]));}}},_getValueOrValues:function(item,_682){var _683=undefined;if(this.hasAttribute(item,_682)){var _684=this.getValues(item,_682);if(_684.length==1){_683=_684[0];}else{_683=_684;}}return _683;},_flatten:function(_685){if(this.isItem(_685)){var item=_685;var _686=this.getIdentity(item);var _687={_reference:_686};return _687;}else{if(typeof _685==="object"){for(var type in this._datatypeMap){var _688=this._datatypeMap[type];if(dojo.isObject(_688)&&!dojo.isFunction(_688)){if(_685 instanceof _688.type){if(!_688.serialize){throw new Error("ItemFileWriteStore:  No serializer defined for type mapping: ["+type+"]");}return {_type:type,_value:_688.serialize(_685)};}}else{if(_685 instanceof _688){return {_type:type,_value:_685.toString()};}}}}return _685;}},_getNewFileContentString:function(){var _689={};var _68a=this._getIdentifierAttribute();if(_68a!==Number){_689.identifier=_68a;}if(this._labelAttr){_689.label=this._labelAttr;}_689.items=[];for(var i=0;i<this._arrayOfAllItems.length;++i){var item=this._arrayOfAllItems[i];if(item!==null){var _68b={};for(var key in item){if(key!==this._storeRefPropName&&key!==this._itemNumPropName&&key!==this._reverseRefMap&&key!==this._rootItemPropName){var _68c=key;var _68d=this.getValues(item,_68c);if(_68d.length==1){_68b[_68c]=this._flatten(_68d[0]);}else{var _68e=[];for(var j=0;j<_68d.length;++j){_68e.push(this._flatten(_68d[j]));_68b[_68c]=_68e;}}}}_689.items.push(_68b);}}var _68f=true;return dojo.toJson(_689,_68f);},_isEmpty:function(_690){var _691=true;if(dojo.isObject(_690)){var i;for(i in _690){_691=false;break;}}else{if(dojo.isArray(_690)){if(_690.length>0){_691=false;}}}return _691;},save:function(_692){this._assert(!this._saveInProgress);this._saveInProgress=true;var self=this;var _693=function(){self._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};self._saveInProgress=false;if(_692&&_692.onComplete){var _694=_692.scope||dojo.global;_692.onComplete.call(_694);}};var _695=function(err){self._saveInProgress=false;if(_692&&_692.onError){var _696=_692.scope||dojo.global;_692.onError.call(_696,err);}};if(this._saveEverything){var _697=this._getNewFileContentString();this._saveEverything(_693,_695,_697);}if(this._saveCustom){this._saveCustom(_693,_695);}if(!this._saveEverything&&!this._saveCustom){_693();}},revert:function(){this._assert(!this._saveInProgress);var _698;for(_698 in this._pending._modifiedItems){var _699=this._pending._modifiedItems[_698];var _69a=null;if(this._itemsByIdentity){_69a=this._itemsByIdentity[_698];}else{_69a=this._arrayOfAllItems[_698];}_699[this._storeRefPropName]=this;for(key in _69a){delete _69a[key];}dojo.mixin(_69a,_699);}var _69b;for(_698 in this._pending._deletedItems){_69b=this._pending._deletedItems[_698];_69b[this._storeRefPropName]=this;var _69c=_69b[this._itemNumPropName];if(_69b["backup_"+this._reverseRefMap]){_69b[this._reverseRefMap]=_69b["backup_"+this._reverseRefMap];delete _69b["backup_"+this._reverseRefMap];}this._arrayOfAllItems[_69c]=_69b;if(this._itemsByIdentity){this._itemsByIdentity[_698]=_69b;}if(_69b[this._rootItemPropName]){this._arrayOfTopLevelItems.push(_69b);}}for(_698 in this._pending._deletedItems){_69b=this._pending._deletedItems[_698];if(_69b["backupRefs_"+this._reverseRefMap]){dojo.forEach(_69b["backupRefs_"+this._reverseRefMap],function(_69d){var _69e;if(this._itemsByIdentity){_69e=this._itemsByIdentity[_69d.id];}else{_69e=this._arrayOfAllItems[_69d.id];}this._addReferenceToMap(_69e,_69b,_69d.attr);},this);delete _69b["backupRefs_"+this._reverseRefMap];}}for(_698 in this._pending._newItems){var _69f=this._pending._newItems[_698];_69f[this._storeRefPropName]=null;this._arrayOfAllItems[_69f[this._itemNumPropName]]=null;if(_69f[this._rootItemPropName]){this._removeArrayElement(this._arrayOfTopLevelItems,_69f);}if(this._itemsByIdentity){delete this._itemsByIdentity[_698];}}this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};return true;},isDirty:function(item){if(item){var _6a0=this.getIdentity(item);return new Boolean(this._pending._newItems[_6a0]||this._pending._modifiedItems[_6a0]||this._pending._deletedItems[_6a0]).valueOf();}else{if(!this._isEmpty(this._pending._newItems)||!this._isEmpty(this._pending._modifiedItems)||!this._isEmpty(this._pending._deletedItems)){return true;}return false;}},onSet:function(item,_6a1,_6a2,_6a3){},onNew:function(_6a4,_6a5){},onDelete:function(_6a6){},close:function(_6a7){if(this.clearOnClose){if(!this.isDirty()){this.inherited(arguments);}else{throw new Error("dojo.data.ItemFileWriteStore: There are unsaved changes present in the store.  Please save or revert the changes before invoking close.");}}}});}dojo.i18n._preloadLocalizations("dojo.nls.tt-rss-layer",["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"]);
index fa2e12157d1ee24882fbcd79c0908e2959f89ec7..81d4302df951f3fda13007b8dddd4c1b1a167fe4 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -16,6 +16,8 @@ if(!dojo._hasResource["dojo.date.stamp"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo.date.stamp"] = true;
 dojo.provide("dojo.date.stamp");
 
+dojo.getObject("date.stamp", true, dojo);
+
 // Methods to convert dates to or from a wire (string) format using well-known conventions
 
 dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){
@@ -94,7 +96,7 @@ dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/d
        }
 
        return result; // Date or null
-}
+};
 
 /*=====
        dojo.date.stamp.__Options = function(){
@@ -144,13 +146,13 @@ dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__O
                }else if(options.selector != "time"){
                        var timezoneOffset = dateObject.getTimezoneOffset();
                        var absOffset = Math.abs(timezoneOffset);
-                       time += (timezoneOffset > 0 ? "-" : "+") + 
+                       time += (timezoneOffset > 0 ? "-" : "+") +
                                _(Math.floor(absOffset/60)) + ":" + _(absOffset%60);
                }
                formattedDate.push(time);
        }
        return formattedDate.join('T'); // String
-}
+};
 
 }
 
@@ -159,14 +161,14 @@ dojo._hasResource["dojo.parser"] = true;
 dojo.provide("dojo.parser");
 
 
+
 new Date("X"); // workaround for #11279, new Date("") == NaN
 
 dojo.parser = new function(){
-       // summary: The Dom/Widget parsing package
+       // summary:
+       //              The Dom/Widget parsing package
 
        var d = dojo;
-       this._attrName = d._scopeName + "Type";
-       this._query = "[" + this._attrName + "]";
 
        function val2type(/*Object*/ value){
                // summary:
@@ -191,13 +193,13 @@ dojo.parser = new function(){
                        case "number":
                                return value.length ? Number(value) : NaN;
                        case "boolean":
-                               // for checked/disabled value might be "" or "checked".  interpret as true.
+                               // 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
+                                       // (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));
                                }
@@ -226,7 +228,7 @@ dojo.parser = new function(){
                }
        }
 
-       var instanceClasses = {
+       var dummyClass = {}, instanceClasses = {
                // map from fully qualified name (like "dijit.Button") to structure like
                // { cls: dijit.Button, params: {label: "string", disabled: "boolean"} }
        };
@@ -234,45 +236,70 @@ dojo.parser = new function(){
        // 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(){
+       // TODO: remove this in 2.0, when we stop caching parameters.
+       d.connect(d, "extend", function(){
                instanceClasses = {};
        });
 
-       function getClassInfo(/*String*/ className){
+       function getProtoInfo(cls, params){
+               // cls: A prototype
+               //              The prototype of the class to check props on
+               // params: Object
+               //              The parameters object to mix found parameters onto.
+               for(var name in cls){
+                       if(name.charAt(0)=="_"){ continue; }    // skip internal properties
+                       if(name in dummyClass){ continue; }             // skip "constructor" and "toString"
+                       params[name] = val2type(cls[name]);
+               }
+               return params;
+       }
+
+       function getClassInfo(/*String*/ className, /*Boolean*/ skipParamsLookup){
+               // summary:
+               //              Maps a widget name string like "dijit.form.Button" to the widget constructor itself,
+               //              and a list of that widget's parameters and their types
                // className:
                //              fully qualified name (like "dijit.form.Button")
                // returns:
                //              structure like
-               //                      { 
-               //                              cls: dijit.Button, 
+               //                      {
+               //                              cls: dijit.Button,
                //                              params: { label: "string", disabled: "boolean"}
                //                      }
 
-               if(!instanceClasses[className]){
+               var c = instanceClasses[className];
+               if(!c){
                        // get pointer to widget class
-                       var cls = d.getObject(className);
+                       var cls = d.getObject(className), params = null;
                        if(!cls){ return null; }                // class not defined [yet]
-
-                       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);
+                       if(!skipParamsLookup){ // from fastpath, we don't need to lookup the attrs on the proto because they are explicit
+                               params = getProtoInfo(cls.prototype, {})
                        }
-
-                       instanceClasses[className] = { cls: cls, params: params };
+                       c = { cls: cls, params: params };
+                       
+               }else if(!skipParamsLookup && !c.params){
+                       // if we're calling getClassInfo and have a cls proto, but no params info, scan that cls for params now
+                       // and update the pointer in instanceClasses[className]. This happens when a widget appears in another
+                       // widget's template which still uses dojoType, but an instance of the widget appears prior with a data-dojo-type,
+                       // skipping this lookup the first time.
+                       c.params = getProtoInfo(c.cls.prototype, {});
                }
-               return instanceClasses[className];
+               
+               return c;
        }
 
-       this._functionFromScript = function(script){
+       this._functionFromScript = function(script, attrData){
+               // summary:
+               //              Convert a <script type="dojo/method" args="a, b, c"> ... </script>
+               //              into a function
+               // script: DOMNode
+               //              The <script> DOMNode
+               // attrData: String
+               //              For HTML5 compliance, searches for attrData + "args" (typically
+               //              "data-dojo-args") instead of "args"
                var preamble = "";
                var suffix = "";
-               var argsStr = script.getAttribute("args");
+               var argsStr = (script.getAttribute(attrData + "args") || script.getAttribute("args"));
                if(argsStr){
                        d.forEach(argsStr.split(/\s*,\s*/), function(part, idx){
                                preamble += "var "+part+" = arguments["+idx+"]; ";
@@ -286,7 +313,7 @@ dojo.parser = new function(){
                        });
                }
                return new Function(preamble+script.innerHTML+suffix);
-       }
+       };
 
        this.instantiate = function(/* Array */nodes, /* Object? */mixin, /* Object? */args){
                // summary:
@@ -307,69 +334,106 @@ dojo.parser = new function(){
                //              exist.
                // args: Object?
                //              An object used to hold kwArgs for instantiation.
-               //              Supports 'noStart' and inherited.
-               var thelist = [], dp = dojo.parser;
+               //              See parse.args argument for details.
+
+               var thelist = [],
                mixin = mixin||{};
                args = args||{};
-               
+
+               // TODO: for 2.0 default to data-dojo- regardless of scopeName (or maybe scopeName won't exist in 2.0)
+               var attrName = (args.scope || d._scopeName) + "Type",   // typically "dojoType"
+                       attrData = "data-" + (args.scope || d._scopeName) + "-";        // typically "data-dojo-"
+
                d.forEach(nodes, function(obj){
                        if(!obj){ return; }
 
-                       // Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc.s
-                       var node, type, clsInfo, clazz, scripts;
+                       // Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc.
+                       var node, type, clsInfo, clazz, scripts, fastpath;
                        if(obj.node){
                                // new format of nodes[] array, object w/lots of properties pre-computed for me
                                node = obj.node;
                                type = obj.type;
-                               clsInfo = obj.clsInfo || (type && getClassInfo(type));
+                               fastpath = obj.fastpath;
+                               clsInfo = obj.clsInfo || (type && getClassInfo(type, fastpath));
                                clazz = clsInfo && clsInfo.cls;
                                scripts = obj.scripts;
                        }else{
-                               // old (backwards compatible) format of nodes[] array, simple array of DOMNodes
+                               // old (backwards compatible) format of nodes[] array, simple array of DOMNodes. no fastpath/data-dojo-type support here.
                                node = obj;
-                               type = dp._attrName in mixin ? mixin[dp._attrName] : node.getAttribute(dp._attrName);
+                               type = attrName in mixin ? mixin[attrName] : node.getAttribute(attrName);
                                clsInfo = type && getClassInfo(type);
                                clazz = clsInfo && clsInfo.cls;
-                               scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] : 
+                               scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] :
                                                        d.query("> script[type^='dojo/']", node));
                        }
                        if(!clsInfo){
                                throw new Error("Could not load class '" + type);
                        }
 
-                       // Setup hash to hold parameter settings for this widget.   Start with the parameter
+                       // Setup hash to hold parameter settings for this widget.       Start with the parameter
                        // settings inherited from ancestors ("dir" and "lang").
                        // Inherited setting may later be overridden by explicit settings on node itself.
-                       var params = {},
-                               attributes = node.attributes;
+                       var params = {};
+                               
                        if(args.defaults){
                                // settings for the document itself (or whatever subtree is being parsed)
-                               dojo.mixin(params, args.defaults);
+                               d._mixin(params, args.defaults);
                        }
                        if(obj.inherited){
                                // settings from dir=rtl or lang=... on a node above this node
-                               dojo.mixin(params, obj.inherited);
+                               d._mixin(params, obj.inherited);
                        }
+                       
+                       // mix things found in data-dojo-props into the params
+                       if(fastpath){
+                               var extra = node.getAttribute(attrData + "props");
+                               if(extra && extra.length){
+                                       try{
+                                               extra = d.fromJson.call(args.propsThis, "{" + extra + "}");
+                                               d._mixin(params, extra);
+                                       }catch(e){
+                                               // give the user a pointer to their invalid parameters. FIXME: can we kill this in production?
+                                               throw new Error(e.toString() + " in data-dojo-props='" + extra + "'");
+                                       }
+                               }
 
-                       // read parameters (ie, attributes) specified on DOMNode
-                       // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
-                       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?
+                               // For the benefit of _Templated, check if node has data-dojo-attach-point/data-dojo-attach-event
+                               // and mix those in as though they were parameters
+                               var attachPoint = node.getAttribute(attrData + "attach-point");
+                               if(attachPoint){
+                                       params.dojoAttachPoint = attachPoint;
                                }
-                               var _type = clsInfo.params[name];
-                               if(typeof value == "string"){
-                                       params[name] = str2obj(value, _type);
-                               }else{
-                                       params[name] = value;
+                               var attachEvent = node.getAttribute(attrData + "attach-event");
+                               if(attachEvent){
+                                       params.dojoAttachEvent = attachEvent;
+                               }
+                               dojo.mixin(params, mixin);
+                       }else{
+                               // FIXME: we need something like "deprecateOnce()" to throw dojo.deprecation for something.
+                               // remove this logic in 2.0
+                               // read parameters (ie, attributes) specified on DOMNode
+
+                               var attributes = node.attributes;
+
+                               // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
+                               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;
+                                       }
                                }
                        }
 
@@ -384,9 +448,10 @@ dojo.parser = new function(){
 
                        d.forEach(scripts, function(script){
                                node.removeChild(script);
-                               var event = script.getAttribute("event"),
+                               // FIXME: drop event="" support in 2.0. use data-dojo-event="" instead
+                               var event = (script.getAttribute(attrData + "event") || script.getAttribute("event")),
                                        type = script.getAttribute("type"),
-                                       nf = d.parser._functionFromScript(script);
+                                       nf = d.parser._functionFromScript(script, attrData);
                                if(event){
                                        if(type == "dojo/connect"){
                                                connects.push({event: event, func: nf});
@@ -404,7 +469,8 @@ dojo.parser = new function(){
                        thelist.push(instance);
 
                        // map it to the JS namespace if that makes sense
-                       var jsname = node.getAttribute("jsId");
+                       // FIXME: in 2.0, drop jsId support. use data-dojo-id instead
+                       var jsname = (node.getAttribute(attrData + "id") || node.getAttribute("jsId"));
                        if(jsname){
                                d.setObject(jsname, instance);
                        }
@@ -428,9 +494,9 @@ dojo.parser = new function(){
                        // ContentPane is the parent widget (so that the parse doesn't call startup() on the
                        // ContentPane's children)
                        d.forEach(thelist, function(instance){
-                               if(     !args.noStart && instance  && 
-                                       instance.startup &&
-                                       !instance._started && 
+                               if( !args.noStart && instance  &&
+                                       dojo.isFunction(instance.startup) &&
+                                       !instance._started &&
                                        (!instance.getParent || !instance.getParent())
                                ){
                                        instance.startup();
@@ -440,34 +506,57 @@ dojo.parser = new function(){
                return thelist;
        };
 
-       this.parse = function(/*DomNode?*/ rootNode, /* Object? */ args){
+       this.parse = function(rootNode, 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"
+               //              and instantiate them. Searches for either data-dojo-type="Class" or
+               //              dojoType="Class" where "Class" is a a fully qualified class name,
+               //              like `dijit.form.Button`
+               //
+               //              Using `data-dojo-type`:
+               //              Attributes using can be mixed into the parameters used to instantitate the
+               //              Class by using a `data-dojo-props` attribute on the node being converted.
+               //              `data-dojo-props` should be a string attribute to be converted from JSON.
+               //
+               //              Using `dojoType`:
+               //              Attributes are read from the original domNode and converted to appropriate
+               //              types by looking up the Class prototype values. This is the default behavior
+               //              from Dojo 1.0 to Dojo 1.5. `dojoType` support is deprecated, and will
+               //              go away in Dojo 2.0.
                //
                // 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 
+               //              object can be passed in this place. If the `args` object has a
                //              `rootNode` member, that is used.
                //
-               // args:
+               // args: Object
                //              a kwArgs object passed along to instantiate()
-               //              
+               //
                //                      * noStart: Boolean?
                //                              when set will prevent the parser from calling .startup()
-               //                              when locating the nodes. 
+               //                              when locating the nodes.
                //                      * rootNode: DomNode?
                //                              identical to the function's `rootNode` argument, though
-               //                              allowed to be passed in via this `args object. 
+               //                              allowed to be passed in via this `args object.
+               //                      * template: Boolean
+               //                              If true, ignores ContentPane's stopParser flag and parses contents inside of
+               //                              a ContentPane inside of a template.   This allows dojoAttachPoint on widgets/nodes
+               //                              nested inside the ContentPane to work.
                //                      * inherited: Object
                //                              Hash possibly containing dir and lang settings to be applied to
                //                              parsed widgets, unless there's another setting on a sub-node that overrides
-               //
+               //                      * scope: String
+               //                              Root for attribute names to search for.   If scopeName is dojo,
+               //                              will search for data-dojo-type (or dojoType).   For backwards compatibility
+               //                              reasons defaults to dojo._scopeName (which is "dojo" except when
+               //                              multi-version support is used, when it will be something like dojo16, dojo20, etc.)
+               //                      * propsThis: Object
+               //                              If specified, "this" referenced from data-dojo-props will refer to propsThis.
+               //                              Intended for use from the widgets-in-template feature of `dijit._Templated`
                //
                // example:
                //              Parse all widgets on a page:
@@ -475,10 +564,10 @@ dojo.parser = new function(){
                //
                // example:
                //              Parse all classes within the node with id="foo"
-               //      |               dojo.parser.parse(dojo.byId(foo));
+               //      |               dojo.parser.parse(dojo.byId('foo'));
                //
                // example:
-               //              Parse all classes in a page, but do not call .startup() on any 
+               //              Parse all classes in a page, but do not call .startup() on any
                //              child
                //      |               dojo.parser.parse({ noStart: true })
                //
@@ -486,7 +575,7 @@ dojo.parser = new function(){
                //              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 });
+               //      |               dojo.parser.parse({ noStart:true, rootNode: someNode });
 
                // determine the root node based on the passed arguments.
                var root;
@@ -496,8 +585,12 @@ dojo.parser = new function(){
                }else{
                        root = rootNode;
                }
+               root = root ? dojo.byId(root) : dojo.body();
+               args = args || {};
+
+               var attrName = (args.scope || d._scopeName) + "Type",           // typically "dojoType"
+                       attrData = "data-" + (args.scope || d._scopeName) + "-";        // typically "data-dojo-"
 
-               var attrName = this._attrName;
                function scan(parent, list){
                        // summary:
                        //              Parent is an Object representing a DOMNode, with or without a dojoType specified.
@@ -506,7 +599,7 @@ dojo.parser = new function(){
                        // parent: Object
                        //              Object representing the parent node, like
                        //      |       {
-                       //      |               node: DomNode,                  // scan children of this node
+                       //      |               node: DomNode,                  // scan children of this node
                        //      |               inherited: {dir: "rtl"},        // dir/lang setting inherited from above node
                        //      |
                        //      |               // attributes only set if node has dojoType specified
@@ -519,6 +612,7 @@ dojo.parser = new function(){
                        // Effective dir and lang settings on parent node, either set directly or inherited from grandparent
                        var inherited = dojo.clone(parent.inherited);
                        dojo.forEach(["dir", "lang"], function(name){
+                               // TODO: what if this is a widget and dir/lang are declared in data-dojo-props?
                                var val = parent.node.getAttribute(name);
                                if(val){
                                        inherited[name] = val;
@@ -526,20 +620,31 @@ dojo.parser = new function(){
                        });
 
                        // if parent is a widget, then search for <script type=dojo/*> tags and put them in scripts[].
-                       var scripts = parent.scripts;
+                       var scripts = parent.clsInfo && !parent.clsInfo.cls.prototype._noScript ? parent.scripts : null;
 
                        // unless parent is a widget with the stopParser flag set, continue search for dojoType, recursively
-                       var recurse = !parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser;
+                       var recurse = (!parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser) || (args && args.template);
 
                        // scan parent's children looking for dojoType and <script type=dojo/*>
                        for(var child = parent.node.firstChild; child; child = child.nextSibling){
                                if(child.nodeType == 1){
-                                       var type = recurse && child.getAttribute(attrName);
+                                       // FIXME: desupport dojoType in 2.0. use data-dojo-type instead
+                                       var type, html5 = recurse && child.getAttribute(attrData + "type");
+                                       if(html5){
+                                               type = html5;
+                                       }else{
+                                               // fallback to backward compatible mode, using dojoType. remove in 2.0
+                                               type = recurse && child.getAttribute(attrName);
+                                       }
+                                       
+                                       var fastpath = html5 == type;
+
                                        if(type){
-                                               // if dojoType specified, add to output array of nodes to instantiate
+                                               // if dojoType/data-dojo-type specified, add to output array of nodes to instantiate
                                                var params = {
                                                        "type": type,
-                                                       clsInfo: getClassInfo(type),    // note: won't find classes declared via dojo.Declaration
+                                                       fastpath: fastpath,
+                                                       clsInfo: getClassInfo(type, fastpath), // note: won't find classes declared via dojo.Declaration
                                                        node: child,
                                                        scripts: [], // <script> nodes that are parent's children
                                                        inherited: inherited // dir & lang attributes inherited from parent
@@ -552,7 +657,7 @@ dojo.parser = new function(){
                                        }else if(scripts && child.nodeName.toLowerCase() == "script"){
                                                // if <script type="dojo/...">, save in scripts[]
                                                type = child.getAttribute("type");
-                                               if (type && /^dojo\//i.test(type)) {
+                                               if (type && /^dojo\/\w/i.test(type)) {
                                                        scripts.push(child);
                                                }
                                        }else if(recurse){
@@ -566,17 +671,24 @@ dojo.parser = new function(){
                        }
                }
 
+               // Ignore bogus entries in inherited hash like {dir: ""}
+               var inherited = {};
+               if(args && args.inherited){
+                       for(var key in args.inherited){
+                               if(args.inherited[key]){ inherited[key] = args.inherited[key]; }
+                       }
+               }
+
                // Make list of all nodes on page w/dojoType specified
                var list = [];
                scan({
-                       node: root ? dojo.byId(root) : dojo.body(),
-                       inherited: (args && args.inherited) || {
-                               dir: dojo._isBodyLtr() ? "ltr" : "rtl"
-                       }
+                       node: root,
+                       inherited: inherited
                }, list);
 
                // go build the object instances
-               return this.instantiate(list, null, args); // Array
+               var mixin = args && args.template ? {template: true} : null;
+               return this.instantiate(list, mixin, args); // Array
        };
 }();
 
@@ -584,14 +696,14 @@ dojo.parser = new function(){
 //after the a11y test.
 
 (function(){
-       var parseRunner = function(){ 
+       var parseRunner = function(){
                if(dojo.config.parseOnLoad){
-                       dojo.parser.parse(); 
+                       dojo.parser.parse();
                }
        };
 
        // FIXME: need to clobber cross-dependency!!
-       if(dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])){
+       if(dojo.getObject("dijit.wai.onload") === dojo._loaders[0]){
                dojo._loaders.splice(1, 0, parseRunner);
        }else{
                dojo._loaders.unshift(parseRunner);
@@ -604,6 +716,8 @@ if(!dojo._hasResource["dojo.window"]){ //_hasResource checks added by build. Do
 dojo._hasResource["dojo.window"] = true;
 dojo.provide("dojo.window");
 
+dojo.getObject("window", true, dojo);
+
 dojo.window.getBox = function(){
        // summary:
        //              Returns the dimensions and scroll position of the viewable area of a browser window
@@ -657,7 +771,9 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
                        return;
                }
                var backCompat = doc.compatMode == 'BackCompat',
-                       clientAreaRoot = backCompat? body : html,
+                       clientAreaRoot = (isIE >= 9 && node.ownerDocument.parentWindow.frameElement)
+                               ? ((html.clientHeight > 0 && html.clientWidth > 0 && (body.clientHeight == 0 || body.clientWidth == 0 || body.clientHeight > html.clientHeight || body.clientWidth > html.clientWidth)) ? html : body)
+                               : (backCompat ? body : html),
                        scrollRoot = isWK ? body : clientAreaRoot,
                        rootWidth = clientAreaRoot.clientWidth,
                        rootHeight = clientAreaRoot.clientHeight,
@@ -682,14 +798,11 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
                        }else{
                                var pb = dojo._getPadBorderExtents(el);
                                elPos.w -= pb.w; elPos.h -= pb.h; elPos.x += pb.l; elPos.y += pb.t;
-                       }
-       
-                       if(el != scrollRoot){ // body, html sizes already have the scrollbar removed
                                var clientSize = el.clientWidth,
                                        scrollBarSize = elPos.w - clientSize;
                                if(clientSize > 0 && scrollBarSize > 0){
                                        elPos.w = clientSize;
-                                       if(isIE && rtl){ elPos.x += scrollBarSize; }
+                                       elPos.x += (rtl && (isIE || el.clientLeft > pb.l/*Chrome*/)) ? scrollBarSize : 0;
                                }
                                clientSize = el.clientHeight;
                                scrollBarSize = elPos.h - clientSize;
@@ -718,8 +831,9 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
                                bot = t + nodePos.h - elPos.h; // beyond bottom: > 0
                        if(r * l > 0){
                                var s = Math[l < 0? "max" : "min"](l, r);
+                               if(rtl && ((isIE == 8 && !backCompat) || isIE >= 9)){ s = -s; }
                                nodePos.x += el.scrollLeft;
-                               el.scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s;
+                               el.scrollLeft += s;
                                nodePos.x -= el.scrollLeft;
                        }
                        if(bot * t > 0){
@@ -728,7 +842,7 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
                                nodePos.y -= el.scrollTop;
                        }
                        el = (el != scrollRoot) && !fixedPos && el.parentNode;
-               }       
+               }
        }catch(error){
                console.error('scrollIntoView: ' + error);
                node.scrollIntoView(false);
@@ -741,6 +855,7 @@ if(!dojo._hasResource["dijit._base.manager"]){ //_hasResource checks added by bu
 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
@@ -996,7 +1111,10 @@ dojo.declare("dijit.WidgetSet", null, {
                                if(node.nodeType == 1){
                                        var widgetId = node.getAttribute("widgetId");
                                        if(widgetId){
-                                               outAry.push(hash[widgetId]);
+                                               var widget = hash[widgetId];
+                                               if(widget){     // may be null on page w/multiple dojo's loaded
+                                                       outAry.push(widget);
+                                               }
                                        }else{
                                                getChildrenHelper(node);
                                        }
@@ -1086,29 +1204,25 @@ dojo.declare("dijit.WidgetSet", null, {
                                return true;
                        case "iframe":
                                // If it's an editor <iframe> then it's tab navigable.
-                               //TODO: feature detect "designMode" in elem.contentDocument?
-                               if(dojo.isMoz){
-                                       try{
-                                               return elem.contentDocument.designMode == "on";
-                                       }catch(err){
-                                               return false;
+                               var body;
+                               try{
+                                       // non-IE
+                                       var contentDocument = elem.contentDocument;
+                                       if("designMode" in contentDocument && contentDocument.designMode == "on"){
+                                               return true;
                                        }
-                               }else if(dojo.isWebKit){
-                                       var doc = elem.contentDocument,
-                                               body = doc && doc.body;
-                                       return body && body.contentEditable == 'true';
-                               }else{
+                                       body = contentDocument.body;
+                               }catch(e1){
                                        // 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){
+                                               body = elem.contentWindow.document.body;
+                                       }catch(e2){
                                                return false;
                                        }
                                }
+                               return body.contentEditable == 'true' || (body.firstChild && body.firstChild.contentEditable == 'true');
                        default:
                                return elem.contentEditable == 'true';
                }
@@ -1144,7 +1258,13 @@ dojo.declare("dijit.WidgetSet", null, {
                //                positive tabIndex value
                //              * the last element in document order with the highest
                //                positive tabIndex value
-               var first, last, lowest, lowestTabindex, highest, highestTabindex;
+               var first, last, lowest, lowestTabindex, highest, highestTabindex, radioSelected = {};
+               function radioName(node) {
+                       // If this element is part of a radio button group, return the name for that group.
+                       return node && node.tagName.toLowerCase() == "input" &&
+                               node.type && node.type.toLowerCase() == "radio" &&
+                               node.name && node.name.toLowerCase();
+               }
                var walkTree = function(/*DOMNode*/parent){
                        dojo.query("> *", parent).forEach(function(child){
                                // Skip hidden elements, and also non-HTML elements (those in custom namespaces) in IE,
@@ -1168,6 +1288,10 @@ dojo.declare("dijit.WidgetSet", null, {
                                                        highest = child;
                                                }
                                        }
+                                       var rn = radioName(child);
+                                       if(dojo.attr(child, "checked") && rn) {
+                                               radioSelected[rn] = child;
+                                       }
                                }
                                if(child.nodeName.toUpperCase() != 'SELECT'){
                                        walkTree(child);
@@ -1175,7 +1299,11 @@ dojo.declare("dijit.WidgetSet", null, {
                        });
                };
                if(shown(root)){ walkTree(root) }
-               return { first: first, last: last, lowest: lowest, highest: highest };
+               function rs(node) {
+                       // substitute checked radio button for unchecked one, if there is a checked one with the same name.
+                       return radioSelected[radioName(node)] || node;
+               }
+               return { first: rs(first), last: rs(last), lowest: rs(lowest), highest: rs(highest) };
        }
        dijit.getFirstInTabbingOrder = function(/*String|DOMNode*/ root){
                // summary:
@@ -1215,7 +1343,7 @@ 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.
@@ -1271,6 +1399,9 @@ dojo.mixin(dijit, {
                                                }
                                        }
                                        bm = {isCollapsed:true};
+                                       if(sel.rangeCount){
+                                               bm.mark = sel.getRangeAt(0).cloneRange();
+                                       }
                                }else{
                                        rg = sel.getRangeAt(0);
                                        bm = {isCollapsed: false, mark: rg.cloneRange()};
@@ -1518,7 +1649,7 @@ dojo.mixin(dijit, {
                var doc = dojo.isIE ? targetWindow.document.documentElement : targetWindow.document;
                if(doc){
                        if(dojo.isIE){
-                               doc.attachEvent('onmousedown', mousedownListener);
+                               targetWindow.document.body.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....
@@ -1536,13 +1667,13 @@ dojo.mixin(dijit, {
                                doc.attachEvent('ondeactivate', deactivateListener);
 
                                return function(){
-                                       doc.detachEvent('onmousedown', mousedownListener);
+                                       targetWindow.document.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);
+                               doc.body.addEventListener('mousedown', mousedownListener, true);
                                var focusListener = function(evt){
                                        dijit._onFocusNode(effectiveNode || evt.target);
                                };
@@ -1553,7 +1684,7 @@ dojo.mixin(dijit, {
                                doc.addEventListener('blur', blurListener, true);
 
                                return function(){
-                                       doc.removeEventListener('mousedown', mousedownListener, true);
+                                       doc.body.removeEventListener('mousedown', mousedownListener, true);
                                        doc.removeEventListener('focus', focusListener, true);
                                        doc.removeEventListener('blur', blurListener, true);
                                        doc = null;     // prevent memory leak (apparent circular reference via closure)
@@ -1694,6 +1825,7 @@ dojo.mixin(dijit, {
                        widget = dijit.byId(oldStack[i]);
                        if(widget){
                                widget._focused = false;
+                               widget.set("focused", false);
                                widget._hasBeenBlurred = true;
                                if(widget._onBlur){
                                        widget._onBlur(by);
@@ -1707,6 +1839,7 @@ dojo.mixin(dijit, {
                        widget = dijit.byId(newStack[i]);
                        if(widget){
                                widget._focused = true;
+                               widget.set("focused", true);
                                if(widget._onFocus){
                                        widget._onFocus(by);
                                }
@@ -1733,6 +1866,7 @@ if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by b
 dojo._hasResource["dojo.AdapterRegistry"] = true;
 dojo.provide("dojo.AdapterRegistry");
 
+
 dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
        //      summary:
        //              A registry to make contextual calling/searching easier.
@@ -1764,11 +1898,11 @@ dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
 
        this.pairs = [];
        this.returnWrappers = returnWrappers || false; // Boolean
-}
+};
 
 dojo.extend(dojo.AdapterRegistry, {
        register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){
-               //      summary: 
+               //      summary:
                //              register a check function to determine if the wrap function or
                //              object gets selected
                //      name:
@@ -1836,7 +1970,6 @@ dojo.provide("dijit._base.place");
 
 
 
-
 dijit.getViewport = function(){
        // summary:
        //              Returns the dimensions and scroll position of the viewable area of a browser window
@@ -1896,16 +2029,22 @@ dijit.placeOnScreen = function(
        return dijit._place(node, choices);
 }
 
-dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ layoutNode){
+dijit._place = function(/*DomNode*/ node, choices, layoutNode, /*Object*/ aroundNodeCoords){
        // 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)
+       // layoutNode: Function(node, aroundNodeCorner, nodeCorner, size)
        //              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.
+       //              It also passes in the available size for the popup, which is useful for tooltips to
+       //              tell them that their width is limited to a certain amount.   layoutNode() may return a value expressing
+       //              how much the popup had to be modified to fit into the available space.   This is used to determine
+       //              what the best placement is.
+       // aroundNodeCoords: Object
+       //              Size of aroundNode, ex: {w: 200, h: 50}
 
        // get {x: 10, y: 10, w: 100, h:100} type obj representing position of
        // viewport over document
@@ -1922,12 +2061,20 @@ dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ la
        dojo.some(choices, function(choice){
                var corner = choice.corner;
                var pos = choice.pos;
+               var overflow = 0;
+
+               // calculate amount of space available given specified position of node
+               var spaceAvailable = {
+                       w: corner.charAt(1) == 'L' ? (view.l + view.w) - pos.x : pos.x - view.l,
+                       h: corner.charAt(1) == 'T' ? (view.t + view.h) - pos.y : pos.y - view.t
+               };
 
                // 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)
+               // a tooltip's size changes based on position, due to triangle)
                if(layoutNode){
-                       layoutNode(node, choice.aroundCorner, corner);
+                       var res = layoutNode(node, choice.aroundCorner, corner, spaceAvailable, aroundNodeCoords);
+                       overflow = typeof res == "undefined" ? 0 : res;
                }
 
                // get node's size
@@ -1947,8 +2094,9 @@ dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ la
                        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);
+                       height = endY - startY;
+
+               overflow += (mb.w - width) + (mb.h - height);
 
                if(best == null || overflow < best.overflow){
                        best = {
@@ -1958,17 +2106,32 @@ dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ la
                                y: startY,
                                w: width,
                                h: height,
-                               overflow: overflow
+                               overflow: overflow,
+                               spaceAvailable: spaceAvailable
                        };
                }
+               
                return !overflow;
        });
 
-       node.style.left = best.x + "px";
-       node.style.top = best.y + "px";
+       // In case the best position is not the last one we checked, need to call
+       // layoutNode() again.
        if(best.overflow && layoutNode){
-               layoutNode(node, best.aroundCorner, best.corner);
+               layoutNode(node, best.aroundCorner, best.corner, best.spaceAvailable, aroundNodeCoords);
        }
+
+       // And then position the node.   Do this last, after the layoutNode() above
+       // has sized the node, due to browser quirks when the viewport is scrolled
+       // (specifically that a Tooltip will shrink to fit as though the window was
+       // scrolled to the left).
+       //
+       // In RTL mode, set style.right rather than style.left so in the common case,
+       // window resizes move the popup along with the aroundNode.
+       var l = dojo._isBodyLtr(),
+               s = node.style;
+       s.top = best.y + "px";
+       s[l ? "left" : "right"] = (l ? best.x : view.w - best.x - best.w) + "px";
+       
        return best;
 }
 
@@ -2015,11 +2178,7 @@ dijit.placeOnScreenAroundNode = function(
 
        // 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,
@@ -2090,7 +2249,7 @@ dijit._placeOnScreenAroundRect = function(
                });
        }
 
-       return dijit._place(node, choices, layoutNode);
+       return dijit._place(node, choices, layoutNode, {w: width, h: height});
 };
 
 dijit.placementRegistry= new dojo.AdapterRegistry();
@@ -2150,11 +2309,17 @@ dijit.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToR
                        case "before":
                                align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
                                break;
+                       case "below-alt":
+                               leftToRight = !leftToRight;
+                               // fall through
                        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-alt":
+                               leftToRight = !leftToRight;
+                               // fall through
                        case "above":
                        default:
                                // first try to align left borders, next try to align right borders (or reverse for RTL mode)
@@ -2259,48 +2424,77 @@ dijit.popup = {
 
        _idGen: 1,
 
-       moveOffScreen: function(/*DomNode*/ node){
+       _createWrapper: function(/*Widget || DomNode*/ widget){
                // summary:
-               //              Initialization for nodes that will be used as popups
-               //
-               // description:
-               //              Puts node inside a wrapper <div>, and
-               //              positions wrapper div 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 wrapper = node.parentNode;
-
-               // Create a wrapper widget for when this node (in the future) will be used as a popup.
-               // This is done early because of IE bugs where creating/moving DOM nodes causes focus
-               // to go wonky, see tests/robot/Toolbar.html to reproduce
-               if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){
+               //              Initialization for widgets that will be used as popups.
+               //              Puts widget inside a wrapper DIV (if not already in one),
+               //              and returns pointer to that wrapper DIV.
+
+               var wrapper = widget.declaredClass ? widget._popupWrapper : (widget.parentNode && dojo.hasClass(widget.parentNode, "dijitPopup")),
+                       node = widget.domNode || widget;
+
+               if(!wrapper){
+                       // Create wrapper <div> for when this widget [in the future] will be used as a popup.
+                       // This is done early because of IE bugs where creating/moving DOM nodes causes focus
+                       // to go wonky, see tests/robot/Toolbar.html to reproduce
                        wrapper = dojo.create("div",{
                                "class":"dijitPopup",
-                               style:{
-                                       visibility:"hidden",
-                                       top: "-9999px"
-                               }
+                               style:{ display: "none"},
+                               role: "presentation"
                        }, dojo.body());
-                       dijit.setWaiRole(wrapper, "presentation");
                        wrapper.appendChild(node);
+
+                       var s = node.style;
+                       s.display = "";
+                       s.visibility = "";
+                       s.position = "";
+                       s.top = "0px";
+
+                       if(widget.declaredClass){               // TODO: in 2.0 change signature to always take widget, then remove if()
+                               widget._popupWrapper = wrapper;
+                               dojo.connect(widget, "destroy", function(){
+                                       dojo.destroy(wrapper);
+                                       delete widget._popupWrapper;
+                               });
+                       }
                }
+               
+               return wrapper;
+       },
 
+       moveOffScreen: function(/*Widget || DomNode*/ widget){
+               // summary:
+               //              Moves the popup widget off-screen.
+               //              Do not use this method to hide popups when not in use, because
+               //              that will create an accessibility issue: the offscreen popup is
+               //              still in the tabbing order.
 
-               var s = node.style;
-               s.display = "";
-               s.visibility = "";
-               s.position = "";
-               s.top = "0px";
+               // Create wrapper if not already there
+               var wrapper = this._createWrapper(widget);
 
                dojo.style(wrapper, {
                        visibility: "hidden",
-                       // prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111)
-                       top: "-9999px"
+                       top: "-9999px",         // prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111)
+                       display: ""
                });
        },
 
+       hide: function(/*dijit._Widget*/ widget){
+               // summary:
+               //              Hide this popup widget (until it is ready to be shown).
+               //              Initialization for widgets that will be used as popups
+               //
+               //              Also puts widget inside a wrapper DIV (if not already in one)
+               //
+               //              If popup widget needs to layout it should
+               //              do so when it is made visible, and popup._onShow() is called.
+
+               // Create wrapper if not already there
+               var wrapper = this._createWrapper(widget);
+
+               dojo.style(wrapper, "display", "none");
+       },
+               
        getTopPopup: function(){
                // summary:
                //              Compute the closest ancestor popup that's *not* a child of another popup.
@@ -2337,14 +2531,17 @@ dijit.popup = {
                        around = args.around,
                        id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+this._idGen++);
 
-
-               // The wrapper may have already been created, but in case it wasn't, create here
-               var wrapper = widget.domNode.parentNode;
-               if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){
-                       this.moveOffScreen(widget.domNode);
-                       wrapper = widget.domNode.parentNode;
+               // If we are opening a new popup that isn't a child of a currently opened popup, then
+               // close currently opened popup(s).   This should happen automatically when the old popups
+               // gets the _onBlur() event, except that the _onBlur() event isn't reliable on IE, see [22198].
+               while(stack.length && (!args.parent || !dojo.isDescendant(args.parent.domNode, stack[stack.length-1].widget.domNode))){
+                       dijit.popup.close(stack[stack.length-1].widget);
                }
 
+               // Get pointer to popup wrapper, and create wrapper if it doesn't exist
+               var wrapper = this._createWrapper(widget);
+
+
                dojo.attr(wrapper, {
                        id: id,
                        style: {
@@ -2355,9 +2552,9 @@ dijit.popup = {
                });
 
                if(dojo.isIE || dojo.isMoz){
-                       var iframe = wrapper.childNodes[1];
-                       if(!iframe){
-                               iframe = new dijit.BackgroundIframe(wrapper);
+                       if(!widget.bgIframe){
+                               // setting widget.bgIframe triggers cleanup in _Widget.destroy()
+                               widget.bgIframe = new dijit.BackgroundIframe(wrapper);
                        }
                }
 
@@ -2366,6 +2563,7 @@ dijit.popup = {
                        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.display = "";
                wrapper.style.visibility = "visible";
                widget.domNode.style.visibility = "visible";    // counteract effects from _HasDropDown
 
@@ -2400,8 +2598,6 @@ dijit.popup = {
                }));
 
                stack.push({
-                       wrapper: wrapper,
-                       iframe: iframe,
                        widget: widget,
                        parent: args.parent,
                        onExecute: args.onExecute,
@@ -2418,9 +2614,10 @@ dijit.popup = {
                return best;
        },
 
-       close: function(/*dijit._Widget*/ popup){
+       close: function(/*dijit._Widget?*/ popup){
                // summary:
-               //              Close specified popup and any popups that it parented
+               //              Close specified popup and any popups that it parented.
+               //              If no popup is specified, closes all popups.
 
                var stack = this._stack;
 
@@ -2429,10 +2626,9 @@ dijit.popup = {
                // 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;})){
+               while((popup && dojo.some(stack, function(elem){return elem.widget == popup;})) ||
+                       (!popup && stack.length)){
                        var top = stack.pop(),
-                               wrapper = top.wrapper,
-                               iframe = top.iframe,
                                widget = top.widget,
                                onClose = top.onClose;
 
@@ -2442,11 +2638,9 @@ dijit.popup = {
                        }
                        dojo.forEach(top.handlers, dojo.disconnect);
 
-                       // Move the widget plus it's wrapper off screen, unless it has already been destroyed in above onClose() etc.
+                       // Hide the widget and it's wrapper unless it has already been destroyed in above onClose() etc.
                        if(widget && widget.domNode){
-                               this.moveOffScreen(widget.domNode);
-                       }else{
-                               dojo.destroy(wrapper);
+                               this.hide(widget);
                        }
                         
                        if(onClose){
@@ -2456,9 +2650,12 @@ dijit.popup = {
        }
 };
 
+// TODO: remove dijit._frames, it isn't being used much, since popups never release their
+// iframes (see [22236])
 dijit._frames = new function(){
        // summary:
        //              cache of iframes
+
        var queue = [];
 
        this.pop = function(){
@@ -2467,7 +2664,7 @@ dijit._frames = new function(){
                        iframe = queue.pop();
                        iframe.style.display="";
                }else{
-                       if(dojo.isIE){
+                       if(dojo.isIE < 9){
                                var burl = dojo.config["dojoBlankHtmlUrl"] || (dojo.moduleUrl("dojo", "resources/blank.html")+"") || "javascript:\"\"";
                                var html="<iframe src='" + burl + "'"
                                        + " style='position: absolute; left: 0px; top: 0px;"
@@ -2479,7 +2676,7 @@ dijit._frames = new function(){
                                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.
+                       iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didn't work.
                        dijit.setWaiRole(iframe,"presentation");
                }
                return iframe;
@@ -2492,7 +2689,7 @@ dijit._frames = new function(){
 }();
 
 
-dijit.BackgroundIframe = function(/* DomNode */node){
+dijit.BackgroundIframe = function(/*DomNode*/ node){
        // summary:
        //              For IE/FF z-index schenanigans. id attribute is required.
        //
@@ -2503,9 +2700,9 @@ dijit.BackgroundIframe = function(/* DomNode */node){
 
        if(!node.id){ throw new Error("no id"); }
        if(dojo.isIE || dojo.isMoz){
-               var iframe = dijit._frames.pop();
+               var iframe = (this.iframe = dijit._frames.pop());
                node.appendChild(iframe);
-               if(dojo.isIE<7){
+               if(dojo.isIE<7 || dojo.isQuirks){
                        this.resize(node);
                        this._conn = dojo.connect(node, 'onresize', this, function(){
                                this.resize(node);
@@ -2516,19 +2713,15 @@ dijit.BackgroundIframe = function(/* DomNode */node){
                                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){
+               //              Resize the iframe so it's the same size as node.
+               //              Needed on IE6 and IE/quirks because height:100% doesn't work right.
+               if(this.iframe){
                        dojo.style(this.iframe, {
                                width: node.offsetWidth + 'px',
                                height: node.offsetHeight + 'px'
@@ -2571,6 +2764,7 @@ if(!dojo._hasResource["dojo.uacss"]){ //_hasResource checks added by build. Do n
 dojo._hasResource["dojo.uacss"] = true;
 dojo.provide("dojo.uacss");
 
+
 (function(){
        // summary:
        //              Applies pre-set CSS classes to the top-level HTML node, based on:
@@ -2595,6 +2789,7 @@ dojo.provide("dojo.uacss");
                        dj_ie6: maj(ie) == 6,
                        dj_ie7: maj(ie) == 7,
                        dj_ie8: maj(ie) == 8,
+                       dj_ie9: maj(ie) == 9,
                        dj_quirks: d.isQuirks,
                        dj_iequirks: ie && d.isQuirks,
 
@@ -2623,7 +2818,7 @@ dojo.provide("dojo.uacss");
        html.className = d.trim(html.className + " " + classStr);
 
        // If RTL mode, then add dj_rtl flag plus repeat existing classes with -rtl extension.
-       // We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl).  
+       // We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl).
        // Unshift() is to run sniff code before the parser.
        dojo._loaders.unshift(function(){
                if(!dojo._isBodyLtr()){
@@ -2637,6 +2832,10 @@ dojo.provide("dojo.uacss");
 
 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;
+dojo.provide("dijit._base.sniff");
+
+
+
 // summary:
 //             Applies pre-set CSS classes to the top-level HTML node, see
 //             `dojo.uacss` for details.
@@ -2644,16 +2843,13 @@ dojo._hasResource["dijit._base.sniff"] = true;
 //             Simply doing a require on this module will
 //             establish this CSS.  Modified version of Morris' CSS hack.
 
-dojo.provide("dijit._base.sniff");
-
-
-
 }
 
 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
@@ -2838,6 +3034,7 @@ if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build.
 dojo._hasResource["dijit._base.wai"] = true;
 dojo.provide("dijit._base.wai");
 
+
 dijit.wai = {
        onload: function(){
                // summary:
@@ -2883,26 +3080,24 @@ if(dojo.isIE || dojo.isMoz){    // NOTE: checking in Safari messes things up
 }
 
 dojo.mixin(dijit, {
-       _XhtmlRoles: /banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,
-
-       hasWaiRole: function(/*Element*/ elem, /*String*/ role){
+       hasWaiRole: function(/*Element*/ elem, /*String?*/ role){
                // summary:
-               //              Determines if an element has a particular non-XHTML role.
+               //              Determines if an element has a particular role.
                // returns:
-               //              True if elem has the specific non-XHTML role attribute and false if not.
+               //              True if elem has the specific role attribute and false if not.
                //              For backwards compatibility if role parameter not provided,
-               //              returns true if has non XHTML role
+               //              returns true if has a 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).
+               //              Gets the role for an element (which should be a wai role).
                // returns:
-               //              The non-XHTML role of elem or an empty string if elem
+               //              The 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:",""));
+                return dojo.trim((dojo.attr(elem, "role") || "").replace("wairole:",""));
        },
 
        setWaiRole: function(/*Element*/ elem, /*String*/ role){
@@ -2910,24 +3105,13 @@ dojo.mixin(dijit, {
                //              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 the specified role from an element.
                //              Removes role attribute if no specific role provided (for backwards compat.)
 
                var roleValue = dojo.attr(elem, "role");
@@ -2999,73 +3183,157 @@ 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" );
+if(!dojo._hasResource["dojo.Stateful"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.Stateful"] = true;
+dojo.provide("dojo.Stateful");
 
 
-// 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);
+dojo.declare("dojo.Stateful", null, {
+       // summary:
+       //              Base class for objects that provide named properties with optional getter/setter
+       //              control and the ability to watch for property changes
+       // example:
+       //      |       var obj = new dojo.Stateful();
+       //      |       obj.watch("foo", function(){
+       //      |               console.log("foo changed to " + this.get("foo"));
+       //      |       });
+       //      |       obj.set("foo","bar");
+       postscript: function(mixin){
+               if(mixin){
+                       dojo.mixin(this, mixin);
                }
-       });
-
-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;
+       },
+       
+       get: function(/*String*/name){
+               // summary:
+               //              Get a property on a Stateful instance.
+               //      name:
+               //              The property to get.
+               // description:
+               //              Get a named property on a Stateful object. The property may
+               //              potentially be retrieved via a getter method in subclasses. In the base class
+               //              this just retrieves the object's property.
+               //              For example:
+               //      |       stateful = new dojo.Stateful({foo: 3});
+               //      |       stateful.get("foo") // returns 3
+               //      |       stateful.foo // returns 3
+               
+               return this[name];
+       },
+       set: function(/*String*/name, /*Object*/value){
+               // summary:
+               //              Set a property on a Stateful instance
+               //      name:
+               //              The property to set.
+               //      value:
+               //              The value to set in the property.
+               // description:
+               //              Sets named properties on a stateful object and notifies any watchers of
+               //              the property. A programmatic setter may be defined in subclasses.
+               //              For example:
+               //      |       stateful = new dojo.Stateful();
+               //      |       stateful.watch(function(name, oldValue, value){
+               //      |               // this will be called on the set below
+               //      |       }
+               //      |       stateful.set(foo, 5);
+               //
+               //      set() may also be called with a hash of name/value pairs, ex:
+               //      |       myObj.set({
+               //      |               foo: "Howdy",
+               //      |               bar: 3
+               //      |       })
+               //      This is equivalent to calling set(foo, "Howdy") and set(bar, 3)
+               if(typeof name === "object"){
+                       for(var x in name){
+                               this.set(x, name[x]);
+                       }
+                       return this;
+               }
+               var oldValue = this[name];
+               this[name] = value;
+               if(this._watchCallbacks){
+                       this._watchCallbacks(name, oldValue, value);
+               }
+               return this;
+       },
+       watch: function(/*String?*/name, /*Function*/callback){
+               // summary:
+               //              Watches a property for changes
+               //      name:
+               //              Indicates the property to watch. This is optional (the callback may be the
+               //              only parameter), and if omitted, all the properties will be watched
+               // returns:
+               //              An object handle for the watch. The unwatch method of this object
+               //              can be used to discontinue watching this property:
+               //              |       var watchHandle = obj.watch("foo", callback);
+               //              |       watchHandle.unwatch(); // callback won't be called now
+               //      callback:
+               //              The function to execute when the property changes. This will be called after
+               //              the property has been changed. The callback will be called with the |this|
+               //              set to the instance, the first argument as the name of the property, the
+               //              second argument as the old value and the third argument as the new value.
+               
+               var callbacks = this._watchCallbacks;
+               if(!callbacks){
+                       var self = this;
+                       callbacks = this._watchCallbacks = function(name, oldValue, value, ignoreCatchall){
+                               var notify = function(propertyCallbacks){
+                                       if(propertyCallbacks){
+                        propertyCallbacks = propertyCallbacks.slice();
+                                               for(var i = 0, l = propertyCallbacks.length; i < l; i++){
+                                                       try{
+                                                               propertyCallbacks[i].call(self, name, oldValue, value);
+                                                       }catch(e){
+                                                               console.error(e);
+                                                       }
+                                               }
+                                       }
+                               };
+                               notify(callbacks['_' + name]);
+                               if(!ignoreCatchall){
+                                       notify(callbacks["*"]); // the catch-all
+                               }
+                       }; // we use a function instead of an object so it will be ignored by JSON conversion
+               }
+               if(!callback && typeof name === "function"){
+                       callback = name;
+                       name = "*";
+               }else{
+                       // prepend with dash to prevent name conflicts with function (like "name" property)
+                       name = '_' + name;
+               }
+               var propertyCallbacks = callbacks[name];
+               if(typeof propertyCallbacks !== "object"){
+                       propertyCallbacks = callbacks[name] = [];
+               }
+               propertyCallbacks.push(callback);
+               return {
+                       unwatch: function(){
+                               propertyCallbacks.splice(dojo.indexOf(propertyCallbacks, callback), 1);
+                       }
                };
-               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(){
+if(!dojo._hasResource["dijit._WidgetBase"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._WidgetBase"] = true;
+dojo.provide("dijit._WidgetBase");
+
+
 
-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, {
+(function(){
+
+dojo.declare("dijit._WidgetBase", dojo.Stateful, {
        // summary:
-       //              Base class for all Dijit widgets.
+       //              Future base class for all Dijit widgets.
+       //              _Widget extends this class adding support for various features needed by desktop.
 
        // id: [const] String
        //              A unique, opaque ID string that can be assigned by users or by the
@@ -3163,7 +3431,7 @@ dojo.declare("dijit._Widget", null, {
        //              Changes to widget attributes listed in attributeMap will be
        //              reflected into the DOM.
        //
-       //              For example, calling attr('title', 'hello')
+       //              For example, calling set('title', 'hello')
        //              on a TitlePane will automatically cause the TitlePane's DOM to update
        //              with the new title.
        //
@@ -3195,166 +3463,14 @@ dojo.declare("dijit._Widget", null, {
        //              - "" --> { 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: ""
-       },
+       // _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(),
 
-       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){
+       //////////// INITIALIZATION METHODS ///////////////////////////////////////
+
+       postscript: function(/*Object?*/params, /*DomNode|String*/srcNodeRef){
                // summary:
                //              Kicks off widget instantiation.  See create() for details.
                // tags:
@@ -3397,25 +3513,11 @@ dojo.declare("dijit._Widget", null, {
                // 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
+               // mix in 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);
+                       dojo._mixin(this, params);
                }
                this.postMixInProperties();
 
@@ -3431,22 +3533,22 @@ dojo.declare("dijit._Widget", null, {
 
                if(this.domNode){
                        // Copy attributes listed in attributeMap into the [newly created] DOM for the widget.
+                       // Also calls custom setters for all attributes with custom setters.
                        this._applyAttributes();
 
+                       // If srcNodeRef was specified, then swap out original srcNode for this widget's DOM tree.
+                       // For 2.0, move this after postCreate().  postCreate() shouldn't depend on the
+                       // widget being attached to the DOM since it isn't when a widget is created programmatically like
+                       // new MyWidget({}).   See #11635.
                        var source = this.srcNodeRef;
-                       if(source && source.parentNode){
+                       if(source && source.parentNode && this.domNode !== source){
                                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){
+                       // Note: for 2.0 may want to rename widgetId to dojo._scopeName + "_widgetId",
+                       // assuming that dojo._scopeName even exists in 2.0
                        this.domNode.setAttribute("widgetId", this.id);
                }
                this.postCreate();
@@ -3485,13 +3587,30 @@ dojo.declare("dijit._Widget", null, {
                }
 
                // And also any attributes with custom setters
-               dojo.forEach(getSetterAttributes(this), function(a){
+               dojo.forEach(this._getSetterAttributes(), function(a){
                        if(!(a in this.attributeMap)){
                                condAttrApply(a, this);
                        }
                }, this);
        },
 
+       _getSetterAttributes: function(){
+               // summary:
+               //              Returns list of attributes with custom setters for this widget
+               var ctor = this.constructor;
+               if(!ctor._setterAttrs){
+                       var r = (ctor._setterAttrs = []),
+                               attrs,
+                               proto = ctor.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));
+                               }
+                       }
+               }
+               return ctor._setterAttrs;       // String[]
+       },
+
        postMixInProperties: function(){
                // summary:
                //              Called after the parameters to the widget have been read-in,
@@ -3510,7 +3629,22 @@ dojo.declare("dijit._Widget", null, {
                //              method.
                // tags:
                //              protected
-               this.domNode = this.srcNodeRef || dojo.create('div');
+
+               if(!this.domNode){
+                       // Create root node if it wasn't created by _Templated
+                       this.domNode = this.srcNodeRef || dojo.create('div');
+               }
+
+               // baseClass is a single class name or occasionally a space-separated list of names.
+               // Add those classes to the DOMNode.  If RTL mode then also add with Rtl suffix.
+               // TODO: make baseClass custom setter
+               if(this.baseClass){
+                       var classes = this.baseClass.split(" ");
+                       if(!this.isLeftToRight()){
+                               classes = classes.concat( dojo.map(classes, function(name){ return name+"Rtl"; }));
+                       }
+                       dojo.addClass(this.domNode, classes);
+               }
        },
 
        postCreate: function(){
@@ -3522,16 +3656,6 @@ dojo.declare("dijit._Widget", null, {
                //              node dimensions or placement.
                // tags:
                //              protected
-
-               // baseClass is a single class name or occasionally a space-separated list of names.
-               // Add those classes to the DOMNod.  If RTL mode then also add with Rtl suffix.         
-               if(this.baseClass){
-                       var classes = this.baseClass.split(" ");
-                       if(!this.isLeftToRight()){
-                               classes = classes.concat( dojo.map(classes, function(name){ return name+"Rtl"; }));
-                       }
-                       dojo.addClass(this.domNode, classes);
-               }
        },
 
        startup: function(){
@@ -3647,7 +3771,6 @@ dojo.declare("dijit._Widget", null, {
                });
        },
 
-
        uninitialize: function(){
                // summary:
                //              Stub function. Override to implement custom widget tear-down
@@ -3657,60 +3780,7 @@ dojo.declare("dijit._Widget", null, {
                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];
-               }
-       },
+       ////////////////// GET/SET, CUSTOM SETTERS, ETC. ///////////////////
 
        _setClassAttr: function(/*String*/ value){
                // summary:
@@ -3718,14 +3788,13 @@ dojo.declare("dijit._Widget", null, {
                // tags:
                //              protected
                var mapNode = this[this.attributeMap["class"] || 'domNode'];
-               dojo.removeClass(mapNode, this["class"])
-               this["class"] = value;
-               dojo.addClass(mapNode, value);
+               dojo.replaceClass(mapNode, value, this["class"]);
+               this._set("class", value);
        },
 
        _setStyleAttr: function(/*String||Object*/ value){
                // summary:
-               //              Sets the style attribut of the widget according to value,
+               //              Sets the style attribute of the widget according to value,
                //              which is either a hash like {height: "5px", width: "3px"}
                //              or a plain string
                // description:
@@ -3749,25 +3818,13 @@ dojo.declare("dijit._Widget", null, {
                        }
                }
 
-               this.style = value;
-       },
-
-       setAttribute: function(/*String*/ attr, /*anything*/ value){
-               // summary:
-               //              Deprecated.  Use set() instead.
-               // tags:
-               //              deprecated
-               dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.", "", "2.0");
-               this.set(attr, value);
+               this._set("style", 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.
                //
@@ -3803,47 +3860,13 @@ dojo.declare("dijit._Widget", null, {
                                        mapNode.innerHTML = value;
                                        break;
                                case "class":
-                                       dojo.removeClass(mapNode, this[attr]);
-                                       dojo.addClass(mapNode, value);
+                                       dojo.replaceClass(mapNode, value, this[attr]);
                                        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:
-               //              This method is deprecated, use get() or set() directly.
-
-               // Print deprecation warning but only once per calling function
-               if(dojo.config.isDebug){
-                       var alreadyCalledHash = arguments.callee._ach || (arguments.callee._ach = {}),
-                               caller = (arguments.callee.caller || "unknown caller").toString();
-                       if(!alreadyCalledHash[caller]){
-                               dojo.deprecated(this.declaredClass + "::attr() is deprecated. Use get() or set() instead, called from " +
-                               caller, "", "2.0");
-                               alreadyCalledHash[caller] = true;
-                       }
-               }
-
-               var args = arguments.length;
-               if(args >= 2 || typeof name === "object"){ // setter
-                       return this.set.apply(this, arguments);
-               }else{ // getter
-                       return this.get(name);
-               }
-       },
-       
-       get: function(name){
+       get: function(name){
                // summary:
                //              Get a property from a widget.
                //      name:
@@ -3851,7 +3874,7 @@ dojo.declare("dijit._Widget", null, {
                // description:
                //              Get a named property from a widget. The property may
                //              potentially be retrieved via a getter method. If no getter is defined, this
-               //              just retrieves the object's property.  
+               //              just retrieves the object's property.
                //              For example, if the widget has a properties "foo"
                //              and "bar" and a method named "_getFooAttr", calling:
                //      |       myWidget.get("foo");
@@ -3869,11 +3892,11 @@ dojo.declare("dijit._Widget", null, {
                // summary:
                //              Set a property on a widget
                //      name:
-               //              The property to set. 
+               //              The property to set.
                //      value:
                //              The value to set in the property.
                // description:
-               //              Sets named properties on a widget which may potentially be handled by a 
+               //              Sets named properties on a widget which may potentially be handled by a
                //              setter in the widget.
                //              For example, if the widget has a properties "foo"
                //              and "bar" and a method named "_setFooAttr", calling:
@@ -3894,7 +3917,7 @@ dojo.declare("dijit._Widget", null, {
 
                if(typeof name === "object"){
                        for(var x in name){
-                               this.set(x, name[x]); 
+                               this.set(x, name[x]);
                        }
                        return this;
                }
@@ -3907,9 +3930,7 @@ dojo.declare("dijit._Widget", null, {
                        if(name in this.attributeMap){
                                this._attrToDom(name, value);
                        }
-                       var oldValue = this[name];
-                       // FIXME: what about function assignments? Any way to connect() here?
-                       this[name] = value;
+                       this._set(name, value);
                }
                return result || this;
        },
@@ -3932,6 +3953,17 @@ dojo.declare("dijit._Widget", null, {
                });
        },
 
+       _set: function(/*String*/ name, /*anything*/ value){
+               // summary:
+               //              Helper function to set new value for specified attribute, and call handlers
+               //              registered with watch() if the value has changed.
+               var oldValue = this[name];
+               this[name] = value;
+               if(this._watchCallbacks && this._created && value !== oldValue){
+                       this._watchCallbacks(name, oldValue, value);
+               }
+       },
+
        toString: function(){
                // summary:
                //              Returns a string that represents the widget
@@ -3958,11 +3990,6 @@ dojo.declare("dijit._Widget", null, {
                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,
@@ -3973,8 +4000,8 @@ dojo.declare("dijit._Widget", null, {
                // 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
+               //              Events connected with `this.connect` are disconnected upon
+               //              destruction.
                // returns:
                //              A handle that can be passed to `disconnect` in order to disconnect before
                //              the widget is destroyed.
@@ -3988,41 +4015,7 @@ dojo.declare("dijit._Widget", null, {
                // 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(dojo.indexOf(this.nodesWithKeyClick, obj.nodeName.toLowerCase()) == -1){ // is NOT input or button
-                               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;
-                                                       e.preventDefault();             // 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));
-
+               var handles = [dojo._connect(obj, event, this, method)];
                this._connects.push(handles);
                return handles;         // _Widget.Handle
        },
@@ -4058,8 +4051,7 @@ dojo.declare("dijit._Widget", null, {
                //      |       btn.subscribe("/my/topic", function(v){
                //      |               this.set("label", v);
                //      |       });
-               var d = dojo,
-                       handle = d.subscribe(topic, this, method);
+               var handle = dojo.subscribe(topic, this, method);
 
                // return handles for Any widget that may need them
                this._subscribes.push(handle);
@@ -4087,13 +4079,6 @@ dojo.declare("dijit._Widget", null, {
                return this.dir ? (this.dir == "ltr") : 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
@@ -4149,49 +4134,6 @@ dojo.declare("dijit._Widget", null, {
                        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
-       },
-
-       onClose: function(){
-               // summary:
-               //              Called when this widget is being displayed as a popup (ex: a Calendar popped
-               //              up from a DateTextBox), and it is hidden.
-               //              This is called from the dijit.popup code, and should not be called directly.
-               //
-               //              Also used as a parameter for children of `dijit.layout.StackContainer` or subclasses.
-               //              Callback if a user tries to close the child.   Child will be closed if this function returns true.
-               // tags:
-               //              extension
-
-               return true;            // Boolean
        }
 });
 
@@ -4199,146 +4141,634 @@ dojo.declare("dijit._Widget", null, {
 
 }
 
-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");
+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.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";
-       //      |                       }
-       //      |               }
-       //      |       );
+////////////////// DEFERRED CONNECTS ///////////////////
 
-       thisObject = thisObject || dojo.global;
-       transform = transform ? 
-               dojo.hitch(thisObject, transform) : function(v){ return v; };
+// 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);
+               }
+       });
 
-       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
-};
+dijit._connectOnUseEventHandler = function(/*Event*/ event){};
 
-/*=====
-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
+////////////////// ONDIJITCLICK SUPPORT ///////////////////
+
+// 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(){
+
+dojo.declare("dijit._Widget", dijit._WidgetBase, {
+       // summary:
+       //              Base class for all Dijit widgets.
+       //
+       //              Extends _WidgetBase, adding support for:
+       //                      - deferred connections
+       //                              A call like dojo.connect(myWidget, "onMouseMove", func)
+       //                              will essentially do a dojo.connect(myWidget.domNode, "onMouseMove", func)
+       //                      - ondijitclick
+       //                              Support new dojoAttachEvent="ondijitclick: ..." that is triggered by a mouse click or a SPACE/ENTER keypress
+       //                      - focus related functions
+       //                              In particular, the onFocus()/onBlur() callbacks.   Driven internally by
+       //                              dijit/_base/focus.js.
+       //                      - deprecated methods
+       //                      - onShow(), onHide(), onClose()
+       //
+       //              Also, by loading code in dijit/_base, turns on:
+       //                      - browser sniffing (putting browser id like .dj_ie on <html> node)
+       //                      - high contrast mode sniffing (add .dijit_a11y class to <body> if machine is in high contrast mode)
+       
+
+       ////////////////// DEFERRED CONNECTS ///////////////////
+
+       // _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
+       },
+       =====*/
+
+       create: function(/*Object?*/params, /*DomNode|String?*/srcNodeRef){
+               // 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
+                       }
+               }
+
+               this.inherited(arguments);
+
+               if(this.domNode){
+                       // 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);
+                       }
+               }
+       },
+
+       _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];
+               }
+       },
+
+       ////////////////// FOCUS RELATED ///////////////////
+       // _onFocus() and _onBlur() are called by the focus manager
+
+       // focused: [readonly] Boolean
+       //              This widget or a widget it contains has focus, or is "active" because
+       //              it was recently clicked.
+       focused: false,
+
+       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");
+       },
+
+       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();
+       },
+
+       ////////////////// DEPRECATED METHODS ///////////////////
+
+       setAttribute: function(/*String*/ attr, /*anything*/ value){
+               // summary:
+               //              Deprecated.  Use set() instead.
+               // tags:
+               //              deprecated
+               dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.", "", "2.0");
+               this.set(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:
+               //              This method is deprecated, use get() or set() directly.
+
+               // Print deprecation warning but only once per calling function
+               if(dojo.config.isDebug){
+                       var alreadyCalledHash = arguments.callee._ach || (arguments.callee._ach = {}),
+                               caller = (arguments.callee.caller || "unknown caller").toString();
+                       if(!alreadyCalledHash[caller]){
+                               dojo.deprecated(this.declaredClass + "::attr() is deprecated. Use get() or set() instead, called from " +
+                               caller, "", "2.0");
+                               alreadyCalledHash[caller] = true;
+                       }
+               }
+
+               var args = arguments.length;
+               if(args >= 2 || typeof name === "object"){ // setter
+                       return this.set.apply(this, arguments);
+               }else{ // getter
+                       return this.get(name);
+               }
+       },
+       
+       ////////////////// ONDIJITCLICK SUPPORT ///////////////////
+
+       // 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.
+               //              Events connected with `this.connect` are disconnected upon
+               //              destruction.
+               // 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 = this.inherited(arguments, [obj, event == "ondijitclick" ? "onclick" : event, method]);
+
+               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(d.indexOf(this.nodesWithKeyClick, obj.nodeName.toLowerCase()) == -1){ // is NOT input or button
+                               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;
+                                                       
+                                                       // Stop event to prevent scrolling on space key in IE.
+                                                       // But don't do this for _HasDropDown because it surpresses the onkeypress
+                                                       // event needed to open the drop down when the user presses the SPACE key.
+                                                       if(!("openDropDown" in this && obj == this._buttonNode)){
+                                                               e.preventDefault();
+                                                       }
+                                               }
+                                       }),
+                                       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 &&   // === breaks greasemonkey
+                                                       !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);
+                                               }
+                                       })
+                               );
+                       }
+               }
+
+               return handles;         // _Widget.Handle
+       },
+
+       ////////////////// MISCELLANEOUS METHODS ///////////////////
+
+       _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
+       },
+
+       onClose: function(){
+               // summary:
+               //              Called when this widget is being displayed as a popup (ex: a Calendar popped
+               //              up from a DateTextBox), and it is hidden.
+               //              This is called from the dijit.popup code, and should not be called directly.
+               //
+               //              Also used as a parameter for children of `dijit.layout.StackContainer` or subclasses.
+               //              Callback if a user tries to close the child.   Child will be closed if this function returns true.
+               // tags:
+               //              extension
+
+               return true;            // Boolean
+       }
+});
+
+})();
+
+}
+
+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.getObject("string", true, dojo);
+
+/*=====
+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
 }
 =====*/
 
@@ -4361,14 +4791,14 @@ if(!dojo._hasResource["dojo.cache"]){ //_hasResource checks added by build. Do n
 dojo._hasResource["dojo.cache"] = true;
 dojo.provide("dojo.cache");
 
+
 /*=====
-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:
@@ -4407,7 +4837,7 @@ dojo.cache = {
                //              |       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 
+               //               (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
@@ -4457,7 +4887,7 @@ dojo.cache = {
        };
 
        dojo.cache._sanitize = function(/*String*/val){
-               // summary: 
+               // 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.
@@ -4474,7 +4904,6 @@ dojo.cache = {
                }
                return val; //String
        };
-})();
 
 }
 
@@ -4527,15 +4956,23 @@ dojo.declare("dijit._Templated",
                //              '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: [],
  =====*/
 
+/*=====
+               // _attachEvents: [private] Handle[]
+               //              List of connections associated with dojoAttachEvent=... in the
+               //              template
+               _attachEvents: [],
+ =====*/
+
                constructor: function(){
                        this._attachPoints = [];
+                       this._attachEvents = [];
                },
 
                _stringRepl: function(tmpl){
@@ -4560,7 +4997,6 @@ dojo.declare("dijit._Templated",
                        }, this);
                },
 
-               // method over-ride
                buildRendering: function(){
                        // summary:
                        //              Construct the UI for this widget from a template, setting this.domNode.
@@ -4586,33 +5022,24 @@ dojo.declare("dijit._Templated",
 
                        this.domNode = node;
 
+                       // Call down to _Widget.buildRendering() to get base classes assigned
+                       // TODO: change the baseClass assignment to attributeMap
+                       this.inherited(arguments);
+
                        // 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,
-                                       inherited: {dir: this.dir, lang: this.lang}
+                                       template: true,
+                                       inherited: {dir: this.dir, lang: this.lang},
+                                       propsThis: this,        // so data-dojo-props of widgets in the template can reference "this" to refer to me
+                                       scope: "dojo"   // even in multi-version mode templates use dojoType/data-dojo-type
                                }));
 
-                               // Restore the query.
-                               if(qry){
-                                       parser._query = qry;
-                                       parser._attrName = attr;
-                               }
-
                                this._supportingWidgets = dijit.findWidgets(node);
 
                                this._attachTemplateNodes(cw, function(n,p){
@@ -4640,6 +5067,8 @@ dojo.declare("dijit._Templated",
                _attachTemplateNodes: function(rootNode, getAttrFunc){
                        // summary:
                        //              Iterate through the template and attach functions and nodes accordingly.
+                       //              Alternately, if rootNode is an array of widgets, then will process dojoAttachPoint
+                       //              etc. for those widgets.
                        // description:
                        //              Map widget properties and functions to the handlers specified in
                        //              the dom node and it's descendants. This function iterates over all
@@ -4662,11 +5091,11 @@ dojo.declare("dijit._Templated",
                        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")){
+                               if(this.widgetsInTemplate && (getAttrFunc(baseNode, "dojoType") || getAttrFunc(baseNode, "data-dojo-type"))){
                                        continue;
                                }
                                // Process dojoAttachPoint
-                               var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint");
+                               var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint") || getAttrFunc(baseNode, "data-dojo-attach-point");
                                if(attachPoint){
                                        var point, points = attachPoint.split(/\s*,\s*/);
                                        while((point = points.shift())){
@@ -4680,7 +5109,7 @@ dojo.declare("dijit._Templated",
                                }
 
                                // Process dojoAttachEvent
-                               var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent");
+                               var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent") || getAttrFunc(baseNode, "data-dojo-attach-event");;
                                if(attachEvent){
                                        // NOTE: we want to support attributes that have the form
                                        // "domEvent: nativeEvent; ..."
@@ -4700,12 +5129,13 @@ dojo.declare("dijit._Templated",
                                                        if(!thisFunc){
                                                                thisFunc = event;
                                                        }
-                                                       this.connect(baseNode, event, thisFunc);
+                                                       this._attachEvents.push(this.connect(baseNode, event, thisFunc));
                                                }
                                        }
                                }
 
                                // waiRole, waiState
+                               // TODO: remove this in 2.0, templates are now using role=... and aria-XXX=... attributes directicly
                                var role = getAttrFunc(baseNode, "waiRole");
                                if(role){
                                        dijit.setWaiRole(baseNode, role);
@@ -4738,6 +5168,10 @@ dojo.declare("dijit._Templated",
                        }, this);
                        this._attachPoints = [];
 
+                       // And same for event handlers
+                       dojo.forEach(this._attachEvents, this.disconnect, this);
+                       this._attachEvents = [];
+                       
                        this.inherited(arguments);
                }
        }
@@ -4822,6 +5256,7 @@ if(!dojo._hasResource["dijit._Container"]){ //_hasResource checks added by build
 dojo._hasResource["dijit._Container"] = true;
 dojo.provide("dijit._Container");
 
+
 dojo.declare("dijit._Container",
        null,
        {
@@ -4884,7 +5319,7 @@ dojo.declare("dijit._Container",
                        //              not destroy it.  You can also pass in an integer indicating
                        //              the index within the container to remove
 
-                       if(typeof widget == "number" && widget > 0){
+                       if(typeof widget == "number"){
                                widget = this.getChildren()[widget];
                        }
 
@@ -4959,6 +5394,7 @@ if(!dojo._hasResource["dijit._Contained"]){ //_hasResource checks added by build
 dojo._hasResource["dijit._Contained"] = true;
 dojo.provide("dijit._Contained");
 
+
 dojo.declare("dijit._Contained",
                null,
                {
@@ -5022,7 +5458,6 @@ dojo.declare("dijit._Contained",
                }
        );
 
-
 }
 
 if(!dojo._hasResource["dijit.layout._LayoutWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
@@ -5051,10 +5486,9 @@ dojo.declare("dijit.layout._LayoutWidget",
                //              children widgets, setting their size, when they become visible.
                isLayoutContainer: true,
 
-               postCreate: function(){
-                       dojo.addClass(this.domNode, "dijitContainer");
-
+               buildRendering: function(){
                        this.inherited(arguments);
+                       dojo.addClass(this.domNode, "dijitContainer");
                },
 
                startup: function(){
@@ -5188,10 +5622,9 @@ dojo.declare("dijit.layout._LayoutWidget",
                        // tags:
                        //              protected extension
 
-                       dojo.addClass(child.domNode, this.baseClass+"-child");
-                       if(child.baseClass){
-                               dojo.addClass(child.domNode, this.baseClass+"-"+child.baseClass);
-                       }
+                       var cls = this.baseClass + "-child "
+                               + (child.baseClass ? this.baseClass + "-" + child.baseClass : "");
+                       dojo.addClass(child.domNode, cls);
                },
 
                addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
@@ -5204,10 +5637,11 @@ dojo.declare("dijit.layout._LayoutWidget",
 
                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);
-                       }
+                       var cls = this.baseClass + "-child"
+                                       + (child.baseClass ?
+                                               " " + this.baseClass + "-" + child.baseClass : "");
+                       dojo.removeClass(child.domNode, cls);
+                       
                        this.inherited(arguments);
                }
        }
@@ -5236,15 +5670,22 @@ dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){
 
        var size = function(widget, dim){
                // size the child
-               widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim);
+               var newSize = 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);
+               // record child's size
+               if(newSize){
+                       // if the child returned it's new size then use that
+                       dojo.mixin(widget, newSize);
+               }else{
+                       // otherwise, call marginBox(), 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){
+       dijit.layout.layoutChildren = function(/*DomNode*/ container, /*Object*/ dim, /*Widget[]*/ children,
+                       /*String?*/ changedRegionId, /*Number?*/ changedRegionSize){
                // summary
                //              Layout a bunch of child dom nodes within a parent dom node
                // container:
@@ -5252,7 +5693,16 @@ dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){
                // 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"} ]
+               //              an array of Widgets or at least objects containing:
+               //                      * domNode: pointer to DOM node to position
+               //                      * region or layoutAlign: position to place DOM node
+               //                      * resize(): (optional) method to set size of node
+               //                      * id: (optional) Id of widgets, referenced from resize object, below.
+               // changedRegionId:
+               //              If specified, the slider for the region with the specified id has been dragged, and thus
+               //              the region's height or width should be adjusted according to changedRegionSize
+               // changedRegionSize:
+               //              See changedRegionId.
 
                // copy dim because we are going to modify it
                dim = dojo.mixin({}, dim);
@@ -5261,27 +5711,37 @@ dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){
 
                // 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"; }));
+               // client be last.    TODO: move these lines to LayoutContainer?   Unneeded other places I think.
+               children = dojo.filter(children, function(item){ return item.region != "center" && item.layoutAlign != "client"; })
+                       .concat(dojo.filter(children, function(item){ return item.region == "center" || item.layoutAlign == "client"; }));
 
                // set positions/sizes
                dojo.forEach(children, function(child){
                        var elm = child.domNode,
-                               pos = child.layoutAlign;
+                               pos = (child.region || 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";
+                       elmStyle.position = "absolute";
 
                        dojo.addClass(elm, "dijitAlign" + capitalize(pos));
 
+                       // Size adjustments to make to this child widget
+                       var sizeSetting = {};
+
+                       // Check for optional size adjustment due to splitter drag (height adjustment for top/bottom align
+                       // panes and width adjustment for left/right align panes.
+                       if(changedRegionId && changedRegionId == child.id){
+                               sizeSetting[child.region == "top" || child.region == "bottom" ? "h" : "w"] = changedRegionSize;
+                       }
+
                        // 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 });
+                               sizeSetting.w = dim.w;
+                               size(child, sizeSetting);
                                dim.h -= child.h;
                                if(pos == "top"){
                                        dim.t += child.h;
@@ -5289,14 +5749,15 @@ dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){
                                        elmStyle.top = dim.t + dim.h + "px";
                                }
                        }else if(pos == "left" || pos == "right"){
-                               size(child, { h: dim.h });
+                               sizeSetting.h = dim.h;
+                               size(child, sizeSetting);
                                dim.w -= child.w;
                                if(pos == "left"){
                                        dim.l += child.w;
                                }else{
                                        elmStyle.left = dim.l + dim.w + "px";
                                }
-                       }else if(pos == "client"){
+                       }else if(pos == "client" || pos == "center"){
                                size(child, dim);
                        }
                });
@@ -5340,7 +5801,19 @@ dojo.declare("dijit._CssStateMixin", [], {
        //              is hovered, etc.
        cssStateNodes: {},
 
-       postCreate: function(){
+       // hovering: [readonly] Boolean
+       //              True if cursor is over this widget
+       hovering: false,
+       
+       // active: [readonly] Boolean
+       //              True if mouse was pressed while over this widget, and hasn't been released yet
+       active: false,
+
+       _applyAttributes: function(){
+               // This code would typically be in postCreate(), but putting in _applyAttributes() for
+               // performance: so the class changes happen before DOM is inserted into the document.
+               // Change back to postCreate() in 2.0.  See #11635.
+
                this.inherited(arguments);
 
                // Automatically monitor mouse events (essentially :hover and :active) on this.domNode
@@ -5349,15 +5822,8 @@ dojo.declare("dijit._CssStateMixin", [], {
                }, this);
                
                // Monitoring changes to disabled, readonly, etc. state, and update CSS class of root node
-               this.connect(this, "set", function(name, value){
-                       if(arguments.length >= 2 && {disabled: true, readOnly: true, checked:true, selected:true}[name]){
-                               this._setStateClass();
-                       }
-               });
-
-               // The widget coming in/out of the focus change affects it's state
-               dojo.forEach(["_onFocus", "_onBlur"], function(ap){
-                       this.connect(this, ap, "_setStateClass");
+               dojo.forEach(["disabled", "readOnly", "checked", "selected", "focused", "state", "hovering", "active"], function(attr){
+                       this.watch(attr, dojo.hitch(this, "_setStateClass"));
                }, this);
 
                // Events on sub nodes within the widget
@@ -5365,44 +5831,42 @@ dojo.declare("dijit._CssStateMixin", [], {
                        this._trackMouseState(this[ap], this.cssStateNodes[ap]);
                }
                // Set state initially; there's probably no hover/active/focus state but widget might be
-               // disabled/readonly so we want to set CSS classes for those conditions.
+               // disabled/readonly/checked/selected so we want to set CSS classes for those conditions.
                this._setStateClass();
        },
 
        _cssMouseEvent: function(/*Event*/ event){
                // summary:
-               //      Sets _hovering and _active properties depending on mouse state,
-               //      then calls _setStateClass() to set appropriate CSS classes for this.domNode.
+               //      Sets hovering and active properties depending on mouse state,
+               //      which triggers _setStateClass() to set appropriate CSS classes for this.domNode.
 
                if(!this.disabled){
                        switch(event.type){
                                case "mouseenter":
                                case "mouseover":       // generated on non-IE browsers even though we connected to mouseenter
-                                       this._hovering = true;
-                                       this._active = this._mouseDown;
+                                       this._set("hovering", true);
+                                       this._set("active", this._mouseDown);
                                        break;
 
                                case "mouseleave":
                                case "mouseout":        // generated on non-IE browsers even though we connected to mouseleave
-                                       this._hovering = false;
-                                       this._active = false;
+                                       this._set("hovering", false);
+                                       this._set("active", false);
                                        break;
 
                                case "mousedown" :
-                                       this._active = true;
+                                       this._set("active", true);
                                        this._mouseDown = true;
                                        // Set a global event to handle mouseup, so it fires properly
                                        // even if the cursor leaves this.domNode before the mouse up event.
                                        // Alternately could set active=false on mouseout.
                                        var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
-                                               this._active = false;
                                                this._mouseDown = false;
-                                               this._setStateClass();
+                                               this._set("active", false);
                                                this.disconnect(mouseUpConnector);
                                        });
                                        break;
                        }
-                       this._setStateClass();
                }
        },
 
@@ -5421,11 +5885,12 @@ dojo.declare("dijit._CssStateMixin", [], {
                //              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
+               //                      - Incomplete - ValidationTextBox sets this.state to "Incomplete" if the current input value is not finished yet
                //                      - 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):
+               //              based on this.disabled and flags set in _onMouse (this.active, this.hovering) and from focus manager (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
@@ -5458,9 +5923,9 @@ dojo.declare("dijit._CssStateMixin", [], {
                }else if(this.readOnly){
                        multiply("ReadOnly");
                }else{
-                       if(this._active){
+                       if(this.active){
                                multiply("Active");
-                       }else if(this._hovering){
+                       }else if(this.hovering){
                                multiply("Hover");
                        }
                }
@@ -5553,11 +6018,8 @@ dojo.declare("dijit._CssStateMixin", [], {
 
                // Just in case widget is enabled/disabled while it has focus/hover/active state.
                // Maybe this is overkill.
-               this.connect(this, "set", function(name, value){
-                       if(name == "disabled" || name == "readOnly"){
-                               setClass();
-                       }
-               });
+               this.watch("disabled", setClass);
+               this.watch("readOnly", setClass);
        }
 });
 
@@ -5572,7 +6034,6 @@ dojo.provide("dijit.form._FormWidget");
 
 
 
-
 dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
        {
        // summary:
@@ -5586,7 +6047,7 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._
        //
        //              They also share some common methods.
 
-       // name: String
+       // name: [const] String
        //              Name used when submitting form; same as "name" attribute or plain HTML elements
        name: "",
 
@@ -5643,7 +6104,7 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._
        },
 
        _setDisabledAttr: function(/*Boolean*/ value){
-               this.disabled = value;
+               this._set("disabled", value);
                dojo.attr(this.focusNode, 'disabled', value);
                if(this.valueNode){
                        dojo.attr(this.valueNode, 'disabled', value);
@@ -5653,8 +6114,8 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._
                if(value){
                        // reset these, because after the domNode is disabled, we can no longer receive
                        // mouse related events, see #4200
-                       this._hovering = false;
-                       this._active = false;
+                       this._set("hovering", false);
+                       this._set("active", false);
 
                        // clear tab stop(s) on this widget's focusable node(s)  (ComboBox has two focusable nodes)
                        var attachPointNames = "tabIndex" in this.attributeMap ? this.attributeMap.tabIndex : "focusNode";
@@ -5664,17 +6125,19 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._
                                if(dojo.isWebKit || dijit.hasDefaultTabStop(node)){     // see #11064 about webkit bug
                                        node.setAttribute('tabIndex', "-1");
                                }else{
-                                       node.removeAttribute('tabIndex');                               
+                                       node.removeAttribute('tabIndex');
                                }
                        }, this);
                }else{
-                       this.focusNode.setAttribute('tabIndex', this.tabIndex);
+                       if(this.tabIndex != ""){
+                               this.focusNode.setAttribute('tabIndex', this.tabIndex);
+                       }
                }
        },
 
        setDisabled: function(/*Boolean*/ disabled){
                // summary:
-               //              Deprecated.   Use set('disabled', ...) instead.
+               //              Deprecated.  Use set('disabled', ...) instead.
                dojo.deprecated("setDisabled("+disabled+") is deprecated. Use set('disabled',"+disabled+") instead.", "", "2.0");
                this.set('disabled', disabled);
        },
@@ -5688,21 +6151,23 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._
 
        isFocusable: function(){
                // summary:
-               //              Tells if this widget is focusable or not.   Used internally by dijit.
+               //              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");
+               return !this.disabled && this.focusNode && (dojo.style(this.domNode, "display") != "none");
        },
 
        focus: function(){
                // summary:
                //              Put focus on this widget
-               dijit.focus(this.focusNode);
+               if(!this.disabled){
+                       dijit.focus(this.focusNode);
+               }
        },
 
-       compare: function(/*anything*/val1, /*anything*/val2){
+       compare: function(/*anything*/ val1, /*anything*/ val2){
                // summary:
-               //              Compare 2 values (as returned by attr('value') for this widget).
+               //              Compare 2 values (as returned by get('value') for this widget).
                // tags:
                //              protected
                if(typeof val1 == "number" && typeof val2 == "number"){
@@ -5729,27 +6194,28 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._
        //              when the initial value is set.
        _onChangeActive: false,
 
-       _handleOnChange: function(/*anything*/ newValue, /* Boolean? */ priorityChange){
+       _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,
+               //              but on mouse up, it's priorityChange==true.  If intermediateChanges==false,
                //              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._pendingOnChange = this._pendingOnChange
+                       || (typeof newValue != typeof this._lastValueReported)
+                       || (this.compare(newValue, this._lastValueReported) != 0);
+               if((this.intermediateChanges || priorityChange || priorityChange === undefined) && this._pendingOnChange){
                        this._lastValueReported = newValue;
+                       this._pendingOnChange = false;
                        if(this._onChangeActive){
                                if(this._onChangeHandle){
                                        clearTimeout(this._onChangeHandle);
@@ -5781,14 +6247,14 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._
 
        setValue: function(/*String*/ value){
                // summary:
-               //              Deprecated.   Use set('value', ...) instead.
+               //              Deprecated.  Use set('value', ...) instead.
                dojo.deprecated("dijit.form._FormWidget:setValue("+value+") is deprecated.  Use set('value',"+value+") instead.", "", "2.0");
                this.set('value', value);
        },
 
        getValue: function(){
                // summary:
-               //              Deprecated.   Use get('value') instead.
+               //              Deprecated.  Use get('value') instead.
                dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.", "", "2.0");
                return this.get('value');
        },
@@ -5798,7 +6264,7 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._
                // this button should get focus (to mimics native browser buttons).
                // This is also needed on chrome because otherwise buttons won't get focus at all,
                // which leads to bizarre focus restore on Dialog close etc.
-               if(!e.ctrlKey && this.isFocusable()){ // !e.ctrlKey to ignore right-click on mac
+               if(!e.ctrlKey && dojo.mouseButtons.isLeft(e) && this.isFocusable()){ // !e.ctrlKey to ignore right-click on mac
                        // Set a global event to handle mouseup, so it fires properly
                        // even if the cursor leaves this.domNode before the mouse up event.
                        var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
@@ -5822,7 +6288,7 @@ dojo.declare("dijit.form._FormValueWidget", dijit.form._FormWidget,
 
        // 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.
+       // 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
@@ -5840,39 +6306,40 @@ dojo.declare("dijit.form._FormValueWidget", dijit.form._FormWidget,
        }),
 
        _setReadOnlyAttr: function(/*Boolean*/ value){
-               this.readOnly = value;
                dojo.attr(this.focusNode, 'readOnly', value);
                dijit.setWaiState(this.focusNode, "readonly", value);
+               this._set("readOnly", value);
        },
 
        postCreate: function(){
                this.inherited(arguments);
 
-               if(dojo.isIE){ // IE won't stop the event with keypress
+               if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){ // 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.set()
                // is only called when there *is* a value)
                if(this._resetValue === undefined){
-                       this._resetValue = this.value;
+                       this._lastValueReported = this._resetValue = this.value;
                }
        },
 
-       _setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
+       _setValueAttr: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){
                // summary:
-               //              Hook so attr('value', value) works.
+               //              Hook so set('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(){
+       _handleOnChange: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){
                // summary:
-               //              Hook so attr('value') works.
-               return this._lastValue;
+               //              Called when the value of the widget has changed.  Saves the new value in this.value,
+               //              and calls onChange() if appropriate.   See _FormWidget._handleOnChange() for details.
+               this._set("value", newValue);
+               this.inherited(arguments);
        },
 
        undo: function(){
@@ -5933,6 +6400,14 @@ if(!dojo._hasResource["dijit.dijit"]){ //_hasResource checks added by build. Do
 dojo._hasResource["dijit.dijit"] = true;
 dojo.provide("dijit.dijit");
 
+
+
+
+
+
+
+
+
 /*=====
 dijit.dijit = {
        // summary:
@@ -5949,21 +6424,15 @@ dijit.dijit = {
 
 // 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["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.
@@ -5971,16 +6440,16 @@ dojo.declare("dojo.fx.Toggler", null, {
        // 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`). 
+       //              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, 
+       //      |               showFunc: dojo.fx.wipeIn,
        //      |               // hideFunc will default to "fadeOut"
        //      |       });
        //      |       t.show(100); // delay showing for 100ms
@@ -5995,7 +6464,7 @@ dojo.declare("dojo.fx.Toggler", null, {
        //              The function that returns the `dojo.Animation` to show the node
        showFunc: dojo.fadeIn,
 
-       // hideFunc: Function   
+       // hideFunc: Function
        //              The function that returns the `dojo.Animation` to hide the node
        hideFunc: dojo.fadeOut,
 
@@ -6011,7 +6480,7 @@ dojo.declare("dojo.fx.Toggler", null, {
        // 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. 
+       // each animation individually.
        // FIXME: also would be nice to have events from the animations exposed/bridged
 
        /*=====
@@ -6064,7 +6533,9 @@ dojo.declare("dojo.fx.Toggler", null, {
 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
@@ -6072,7 +6543,7 @@ dojo.fx = {
 =====*/
 (function(){
        
-       var d = dojo, 
+       var d = dojo,
                _baseObj = {
                        _fire: function(evt, args){
                                if(this[evt]){
@@ -6191,14 +6662,14 @@ dojo.fx = {
        d.extend(_chain, _baseObj);
 
        dojo.fx.chain = function(/*dojo.Animation[]*/ animations){
-               // summary: 
+               // 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, 
+               //              onEnd of this animation means the end of the chain,
                //              not the individual animations within)
                //
                // example:
@@ -6226,7 +6697,7 @@ dojo.fx = {
                
                this._pseudoAnimation = new d.Animation({curve: [0, 1], duration: this.duration});
                var self = this;
-               d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"], 
+               d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"],
                        function(evt){
                                self._connects.push(d.connect(self._pseudoAnimation, evt,
                                        function(){ self._fire(evt, arguments); }
@@ -6284,11 +6755,11 @@ dojo.fx = {
        d.extend(_combine, _baseObj);
 
        dojo.fx.combine = function(/*dojo.Animation[]*/ animations){
-               // summary: 
+               // summary:
                //              Combine a list of `dojo.Animation`s to run in parallel
                //
                // description:
-               //              Combine an array of `dojo.Animation`s to run in parallel, 
+               //              Combine an array of `dojo.Animation`s to run in parallel,
                //              providing a new `dojo.Animation` instance encompasing each
                //              animation, firing standard animation events.
                //
@@ -6359,17 +6830,17 @@ dojo.fx = {
                        }
                }, args));
 
-               d.connect(anim, "onEnd", function(){ 
+               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. 
+               //              Shrink a node to nothing and hide it.
                //
                // description:
                //              Returns an animation that will shrink node defined in "args"
@@ -6378,7 +6849,7 @@ dojo.fx = {
                // 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()
                
@@ -6404,14 +6875,14 @@ dojo.fx = {
                });
 
                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" 
+               //              Returns an animation that will slide "node"
                //              defined in args Object from its current position to
                //              the position defined by (args.left, args.top).
                //
@@ -6423,7 +6894,7 @@ dojo.fx = {
                // example:
                //      |       dojo.fx.slideTo({ node: node, left:"40", top:"50", units:"px" }).play()
 
-               var node = args.node = d.byId(args.node), 
+               var node = args.node = d.byId(args.node),
                        top = null, left = null;
 
                var init = (function(n){
@@ -6453,7 +6924,7 @@ dojo.fx = {
                d.connect(anim, "beforeBegin", anim, init);
 
                return anim; // dojo.Animation
-       }
+       };
 
 })();
 
@@ -6464,6 +6935,7 @@ dojo._hasResource["dojo.NodeList-fx"] = true;
 dojo.provide("dojo.NodeList-fx");
 
 
+
 /*=====
 dojo["NodeList-fx"] = {
        // summary: Adds dojo.fx animation support to dojo.query()
@@ -6479,7 +6951,7 @@ dojo.extend(dojo.NodeList, {
                                dojo.mixin(tmpArgs, args);
                                return obj[method](tmpArgs);
                        })
-               ); 
+               );
                return args.auto ? a.play() && this : a; // dojo.Animation|dojo.NodeList
        },
 
@@ -6488,7 +6960,7 @@ dojo.extend(dojo.NodeList, {
                //              wipe in all elements of this NodeList via `dojo.fx.wipeIn`
                //
                //      args: Object?
-               //              Additional dojo.Animation arguments to mix into this set with the addition of 
+               //              Additional dojo.Animation arguments to mix into this set with the addition of
                //              an `auto` parameter.
                //
                //      returns: dojo.Animation|dojo.NodeList
@@ -6512,7 +6984,7 @@ dojo.extend(dojo.NodeList, {
                //              wipe out all elements of this NodeList via `dojo.fx.wipeOut`
                //
                //      args: Object?
-               //              Additional dojo.Animation arguments to mix into this set with the addition of 
+               //              Additional dojo.Animation arguments to mix into this set with the addition of
                //              an `auto` parameter.
                //
                //      returns: dojo.Animation|dojo.NodeList
@@ -6531,7 +7003,7 @@ dojo.extend(dojo.NodeList, {
                //              slide all elements of the node list to the specified place via `dojo.fx.slideTo`
                //
                //      args: Object?
-               //              Additional dojo.Animation arguments to mix into this set with the addition of 
+               //              Additional dojo.Animation arguments to mix into this set with the addition of
                //              an `auto` parameter.
                //
                //      returns: dojo.Animation|dojo.NodeList
@@ -6554,7 +7026,7 @@ dojo.extend(dojo.NodeList, {
                //              fade in all elements of this NodeList via `dojo.fadeIn`
                //
                //      args: Object?
-               //              Additional dojo.Animation arguments to mix into this set with the addition of 
+               //              Additional dojo.Animation arguments to mix into this set with the addition of
                //              an `auto` parameter.
                //
                //      returns: dojo.Animation|dojo.NodeList
@@ -6573,7 +7045,7 @@ dojo.extend(dojo.NodeList, {
                //              fade out all elements of this NodeList via `dojo.fadeOut`
                //
                //      args: Object?
-               //              Additional dojo.Animation arguments to mix into this set with the addition of 
+               //              Additional dojo.Animation arguments to mix into this set with the addition of
                //              an `auto` parameter.
                //
                //      returns: dojo.Animation|dojo.NodeList
@@ -6609,14 +7081,14 @@ dojo.extend(dojo.NodeList, {
                //      example:
                //      |       dojo.query(".zork").animateProperty({
                //      |               duration: 500,
-               //      |               properties: { 
+               //      |               properties: {
                //      |                       color:          { start: "black", end: "white" },
-               //      |                       left:           { end: 300 } 
-               //      |               } 
+               //      |                       left:           { end: 300 }
+               //      |               }
                //      |       }).play();
                //
                //      example:
-               //      |       dojo.query(".grue").animateProperty({ 
+               //      |       dojo.query(".grue").animateProperty({
                //      |               auto:true,
                //      |               properties: {
                //      |                       height:240
@@ -6625,9 +7097,9 @@ dojo.extend(dojo.NodeList, {
                return this._anim(dojo, "animateProperty", args); // dojo.Animation|dojo.NodeList
        },
 
-       anim: function( /*Object*/                      properties, 
-                                       /*Integer?*/            duration, 
-                                       /*Function?*/           easing, 
+       anim: function( /*Object*/                      properties,
+                                       /*Integer?*/            duration,
+                                       /*Function?*/           easing,
                                        /*Function?*/           onEnd,
                                        /*Integer?*/            delay){
                //      summary:
@@ -6635,8 +7107,8 @@ dojo.extend(dojo.NodeList, {
                //              The returned animation object will already be playing when it
                //              is returned. See the docs for `dojo.anim` for full details.
                //      properties: Object
-               //              the properties to animate. does NOT support the `auto` parameter like other 
-               //              NodeList-fx methods. 
+               //              the properties to animate. does NOT support the `auto` parameter like other
+               //              NodeList-fx methods.
                //      duration: Integer?
                //              Optional. The time to run the animations for
                //      easing: Function?
@@ -6661,7 +7133,7 @@ dojo.extend(dojo.NodeList, {
                                        easing: easing
                                });
                        })
-               ); 
+               );
                if(onEnd){
                        dojo.connect(canim, "onEnd", onEnd);
                }
@@ -6675,6 +7147,8 @@ if(!dojo._hasResource["dojo.colors"]){ //_hasResource checks added by build. Do
 dojo._hasResource["dojo.colors"] = true;
 dojo.provide("dojo.colors");
 
+dojo.getObject("colors", true, dojo);
+
 //TODO: this module appears to break naming conventions
 
 /*=====
@@ -6721,9 +7195,9 @@ dojo.colors = {
                                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, 
+                                       // 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,
@@ -6905,13 +7379,16 @@ if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do no
 dojo._hasResource["dojo.i18n"] = true;
 dojo.provide("dojo.i18n");
 
+dojo.getObject("i18n", true, dojo);
+
 /*=====
 dojo.i18n = {
        // summary: Utility classes to enable loading of resources for internationalization (i18n)
 };
 =====*/
 
-dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
+// when using a real AMD loader, dojo.i18n.getLocalization is already defined by dojo/lib/backCompat
+dojo.i18n.getLocalization = 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.
@@ -6939,7 +7416,7 @@ dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName
        // look for nearest locale match
        var elements = locale.split('-');
        var module = [packageName,"nls",bundleName].join('.');
-       var bundle = dojo._loadedModules[module];
+               var bundle = dojo._loadedModules[module];
        if(bundle){
                var localization;
                for(var i = elements.length; i > 0; i--){
@@ -6989,7 +7466,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
 
        var targetLocale = dojo.i18n.normalizeLocale(locale);
        var bundlePackage = [moduleName, "nls", bundleName].join(".");
-       // NOTE: 
+       // 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.
@@ -6999,7 +7476,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
        //              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){
@@ -7016,7 +7493,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
                }
                if(!bestLocale){
                        bestLocale = "ROOT";
-               }               
+               }
        }
 
        //See if the desired locale is already loaded.
@@ -7048,6 +7525,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
                                module.push(bundleName);
                                var filespec = module.join("/") + '.js';
                                loaded = dojo._loadPath(filespec, null, function(hash){
+                                       hash = hash.root || hash;
                                        // Use singleton with prototype to point to parent bundle, then mix-in result from loadPath
                                        var clazz = function(){};
                                        clazz.prototype = parent;
@@ -7062,7 +7540,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
                        }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.
@@ -7080,8 +7558,8 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle
 
 (function(){
        // If other locales are used, dojo.requireLocalization should load them as
-       // well, by default. 
-       // 
+       // 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.
@@ -7158,6 +7636,7 @@ dojo._hasResource["dijit._PaletteMixin"] = true;
 dojo.provide("dijit._PaletteMixin");
 
 
+
 dojo.declare("dijit._PaletteMixin",
        [dijit._CssStateMixin],
        {
@@ -7184,23 +7663,23 @@ dojo.declare("dijit._PaletteMixin",
        //              Index of the currently selected cell. Initially, none selected
        _selectedCell: -1,
 
+/*=====
        // _currentFocus: [private] DomNode
        //              The currently focused cell (if the palette itself has focus), or otherwise
        //              the cell to be focused when the palette itself gets focus.
        //              Different from value, which represents the selected (i.e. clicked) cell.
-/*=====
        _currentFocus: null,
 =====*/
 
+/*=====
        // _xDim: [protected] Integer
        //              This is the number of cells horizontally across.
-/*=====
        _xDim: null,
 =====*/
 
+/*=====
        // _yDim: [protected] Integer
        //              This is the number of cells vertically down.
-/*=====
        _yDim: null,
 =====*/
 
@@ -7217,7 +7696,7 @@ dojo.declare("dijit._PaletteMixin",
        //       dyeClass should implements dijit.Dye interface
        dyeClass: '',
 
-       _preparePalette: function(choices, titles) {
+       _preparePalette: function(choices, titles, dyeClassObj) {
                // summary:
                //              Subclass must call _preparePalette() from postCreate(), passing in the tooltip
                //              for each cell
@@ -7225,18 +7704,20 @@ dojo.declare("dijit._PaletteMixin",
                //              id's for each cell of the palette, used to create Dye JS object for each cell
                // titles: String[]
                //              Localized tooltip for each cell
+               // dyeClassObj: Constructor?
+               //              If specified, use this constructor rather than this.dyeClass
 
                this._cells = [];
                var url = this._blankGif;
                
-               var dyeClassObj = dojo.getObject(this.dyeClass);
+               dyeClassObj = dyeClassObj || dojo.getObject(this.dyeClass);
 
                for(var row=0; row < choices.length; row++){
                        var rowNode = dojo.create("tr", {tabIndex: "-1"}, this.gridNode);
                        for(var col=0; col < choices[row].length; col++){
                                var value = choices[row][col];
                                if(value){
-                                       var cellObject = new dyeClassObj(value);
+                                       var cellObject = new dyeClassObj(value, row, col);
                                        
                                        var cellNode = dojo.create("td", {
                                                "class": this.cellClass,
@@ -7316,7 +7797,7 @@ dojo.declare("dijit._PaletteMixin",
                // tags:
                //              private
 
-               var target = evt.currentTarget, 
+               var target = evt.currentTarget,
                        value = this._getDye(target).getValue();
 
                // First focus the clicked cell, and then send onChange() notification.
@@ -7326,8 +7807,8 @@ dojo.declare("dijit._PaletteMixin",
                // Use setTimeout because IE doesn't like changing focus inside of an event handler.
                this._setCurrent(target);
                setTimeout(dojo.hitch(this, function(){
-                       dijit.focus(target);            
-                       this._setValueAttr(value, true);                
+                       dijit.focus(target);
+                       this._setValueAttr(value, true);
                }));
 
                // workaround bug where hover class is not removed on popup because the popup is
@@ -7371,8 +7852,7 @@ dojo.declare("dijit._PaletteMixin",
                //              Optional parameter used to tell the select whether or not to fire
                //              onChange event.
                
-               // clear old value and selected cell
-               this.value = null;
+               // clear old selected cell
                if(this._selectedCell >= 0){
                        dojo.removeClass(this._cells[this._selectedCell].node, "dijitPaletteCellSelected");
                }
@@ -7383,18 +7863,18 @@ dojo.declare("dijit._PaletteMixin",
                        for(var i = 0; i < this._cells.length; i++){
                                if(value == this._cells[i].dye.getValue()){
                                        this._selectedCell = i;
-                                       this.value = value;
-
                                        dojo.addClass(this._cells[i].node, "dijitPaletteCellSelected");
-
-                                       if(priorityChange || priorityChange === undefined){
-                                               this.onChange(value);
-                                       }
-
                                        break;
                                }
                        }
                }
+               
+               // record new value, or null if no matching cell
+               this._set("value", this._selectedCell >= 0 ? value : null);
+
+               if(priorityChange || priorityChange === undefined){
+                       this.onChange(value);
+               }
        },
 
        onChange: function(value){
@@ -7444,7 +7924,7 @@ dojo.declare("dijit.Dye",
                // summary:
                //              Interface for the JS Object associated with a palette cell (i.e. DOMNode)
 
-               constructor: function(alias){
+               constructor: function(alias, row, col){
                        // summary:
                        //              Initialize according to value or alias like "white"
                        // alias: String
@@ -7483,7 +7963,6 @@ dojo.provide("dijit.ColorPalette");
 
 
 
-
 dojo.declare("dijit.ColorPalette",
        [dijit._Widget, dijit._Templated, dijit._PaletteMixin],
        {
@@ -7501,7 +7980,7 @@ dojo.declare("dijit.ColorPalette",
        // |    picker.startup();
 
 
-       // palette: String
+       // palette: [const] String
        //              Size of grid, either "7x10" or "3x4".
        palette: "7x10",
 
@@ -7523,65 +8002,88 @@ dojo.declare("dijit.ColorPalette",
                        ["gray", "red", "purple", "black"]]
        },
 
-       // _imagePaths: [protected] Map
-       //              This is stores the path to the palette images
-       _imagePaths: {
-               "7x10": dojo.moduleUrl("dijit.themes", "a11y/colors7x10.png"),
-               "3x4": dojo.moduleUrl("dijit.themes", "a11y/colors3x4.png"),
-               "7x10-rtl": dojo.moduleUrl("dijit.themes", "a11y/colors7x10-rtl.png"),
-               "3x4-rtl": dojo.moduleUrl("dijit.themes", "a11y/colors3x4-rtl.png")
-       },
-
        // templateString: String
        //              The template of this widget.
-       templateString: dojo.cache("dijit", "templates/ColorPalette.html", "<div class=\"dijitInline dijitColorPalette\">\n\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\"/>\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),
+       templateString: dojo.cache("dijit", "templates/ColorPalette.html", "<div class=\"dijitInline dijitColorPalette\">\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),
 
        baseClass: "dijitColorPalette",
 
-       dyeClass: 'dijit._Color',
-
        buildRendering: function(){
                // Instantiate the template, which makes a skeleton into which we'll insert a bunch of
                // <img> nodes
-
                this.inherited(arguments);
 
-               this.imageNode.setAttribute("src", this._imagePaths[this.palette + (this.isLeftToRight() ? "" : "-rtl")].toString());
-
-               var i18nColorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang);
+               // Creates <img> nodes in each cell of the template.
+               // Pass in "customized" dijit._Color constructor for specified palette and high-contrast vs. normal mode
                this._preparePalette(
                        this._palettes[this.palette],
-                       i18nColorNames
+                       dojo.i18n.getLocalization("dojo", "colors", this.lang),
+                       dojo.declare(dijit._Color, {
+                               hc: dojo.hasClass(dojo.body(), "dijit_a11y"),
+                               palette: this.palette
+                       })
                );
        }
 });
 
-dojo.declare("dijit._Color", dojo.Color,
+dojo.declare("dijit._Color", dojo.Color, {
        // summary:
        //              Object associated with each cell in a ColorPalette palette.
        //              Implements dijit.Dye.
-       {
-               constructor: function(/*String*/alias){
-                       this._alias = alias;
-                       this.setColor(dojo.Color.named[alias]);
-               },
 
-               getValue: function(){
-                       // summary:
-                       //              Note that although dijit._Color is initialized with a value like "white" getValue() always
-                       //              returns a hex value
-                       return this.toHex();
-               },
+       // Template for each cell in normal (non-high-contrast mode).  Each cell contains a wrapper
+       // node for showing the border (called dijitPaletteImg for back-compat), and dijitColorPaletteSwatch
+       // for showing the color.
+       template:
+               "<span class='dijitInline dijitPaletteImg'>" +
+                       "<img src='${blankGif}' alt='${alt}' class='dijitColorPaletteSwatch' style='background-color: ${color}'/>" +
+               "</span>",
+
+       // Template for each cell in high contrast mode.  Each cell contains an image with the whole palette,
+       // but scrolled and clipped to show the correct color only
+       hcTemplate:
+               "<span class='dijitInline dijitPaletteImg' style='position: relative; overflow: hidden; height: 12px; width: 14px;'>" +
+                       "<img src='${image}' alt='${alt}' style='position: absolute; left: ${left}px; top: ${top}px; ${size}'/>" +
+               "</span>",
 
-               fillCell: function(/*DOMNode*/ cell, /*String*/ blankGif){
-                       dojo.create("img", {
-                               src: blankGif,
-                               "class": "dijitPaletteImg",
-                               alt: this._alias
-                       }, cell);
-               }
+       // _imagePaths: [protected] Map
+       //              This is stores the path to the palette images used for high-contrast mode display
+       _imagePaths: {
+               "7x10": dojo.moduleUrl("dijit.themes", "a11y/colors7x10.png"),
+               "3x4": dojo.moduleUrl("dijit.themes", "a11y/colors3x4.png")
+       },
+
+       constructor: function(/*String*/alias, /*Number*/ row, /*Number*/ col){
+               this._alias = alias;
+               this._row = row;
+               this._col = col;
+               this.setColor(dojo.Color.named[alias]);
+       },
+
+       getValue: function(){
+               // summary:
+               //              Note that although dijit._Color is initialized with a value like "white" getValue() always
+               //              returns a hex value
+               return this.toHex();
+       },
+
+       fillCell: function(/*DOMNode*/ cell, /*String*/ blankGif){
+               var html = dojo.string.substitute(this.hc ? this.hcTemplate : this.template, {
+                       // substitution variables for normal mode
+                       color: this.toHex(),
+                       blankGif: blankGif,
+                       alt: this._alias,
+                       
+                       // variables used for high contrast mode
+                       image: this._imagePaths[this.palette].toString(),
+                       left: this._col * -20 - 5,
+                       top: this._row * -20 - 5,
+                       size: this.palette == "7x10" ? "height: 145px; width: 206px" : "height: 64px; width: 86px"
+               });
+
+               dojo.place(html, cell);
        }
-);
+});
 
 }
 
@@ -7589,6 +8091,8 @@ if(!dojo._hasResource["dojo.dnd.common"]){ //_hasResource checks added by build.
 dojo._hasResource["dojo.dnd.common"] = true;
 dojo.provide("dojo.dnd.common");
 
+dojo.getObject("dnd", true, dojo);
+
 dojo.dnd.getCopyKeyState = dojo.isCopyKey;
 
 dojo.dnd._uniqueId = 0;
@@ -7620,25 +8124,10 @@ if(!dojo._hasResource["dojo.dnd.autoscroll"]){ //_hasResource checks added by bu
 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.getObject("dnd", true, dojo);
+
+dojo.dnd.getViewport = dojo.window.getBox;
 
 dojo.dnd.V_TRIGGER_AUTOSCROLL = 32;
 dojo.dnd.H_TRIGGER_AUTOSCROLL = 32;
@@ -7654,7 +8143,7 @@ dojo.dnd.autoScroll = function(e){
        //              onmousemove event
 
        // FIXME: needs more docs!
-       var v = dojo.dnd.getViewport(), dx = 0, dy = 0;
+       var v = dojo.window.getBox(), 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){
@@ -7685,14 +8174,15 @@ dojo.dnd.autoScrollNodes = function(e){
                        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), 
+                               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 
+                                       // 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;
+                                       rx += dojo.body().scrollLeft;
+                                       ry += dojo.body().scrollTop;
                                }
                                if(rx > 0 && rx < b.w){
                                        if(rx < w){
@@ -7736,7 +8226,7 @@ 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. 
+               //              an object which makes a node follow the mouse, or touch-drag on touch devices.
                //              Used as a default mover, and as a base class for custom movers.
                // node: Node
                //              a node (or node's id) to be moved
@@ -7747,17 +8237,27 @@ dojo.declare("dojo.dnd.Mover", null, {
                //              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};
+               var pos = e.touches ? e.touches[0] : e;
+               this.marginBox = {l: pos.pageX, t: pos.pageY};
                this.mouseButton = e.button;
-               var h = this.host = host, d = node.ownerDocument, 
-                       firstEvent = dojo.connect(d, "onmousemove", this, "onFirstMove");
+               var h = (this.host = host), d = node.ownerDocument;
                this.events = [
+                       // At the start of a drag, onFirstMove is called, and then the following two
+                       // connects are disconnected
+                       dojo.connect(d, "onmousemove", this, "onFirstMove"),
+                       dojo.connect(d, "ontouchmove", this, "onFirstMove"),
+
+                       // These are called continually during the drag
                        dojo.connect(d, "onmousemove", this, "onMouseMove"),
+                       dojo.connect(d, "ontouchmove", this, "onMouseMove"),
+
+                       // And these are called at the end of the drag
                        dojo.connect(d, "onmouseup",   this, "onMouseUp"),
+                       dojo.connect(d, "ontouchend", this, "onMouseUp"),
+
                        // cancel text selection and text dragging
                        dojo.connect(d, "ondragstart",   dojo.stopEvent),
-                       dojo.connect(d.body, "onselectstart", dojo.stopEvent),
-                       firstEvent
+                       dojo.connect(d.body, "onselectstart", dojo.stopEvent)
                ];
                // notify that the move has started
                if(h && h.onMoveStart){
@@ -7767,17 +8267,18 @@ dojo.declare("dojo.dnd.Mover", null, {
        // mouse event processors
        onMouseMove: function(e){
                // summary:
-               //              event processor for onmousemove
+               //              event processor for onmousemove/ontouchmove
                // e: Event
-               //              mouse event
+               //              mouse/touch event
                dojo.dnd.autoScroll(e);
-               var m = this.marginBox;
-               this.host.onMove(this, {l: m.l + e.pageX, t: m.t + e.pageY}, e);
+               var m = this.marginBox,
+                       pos = e.touches ? e.touches[0] : e;
+               this.host.onMove(this, {l: m.l + pos.pageX, t: m.t + pos.pageY}, e);
                dojo.stopEvent(e);
        },
        onMouseUp: function(e){
-               if(dojo.isWebKit && dojo.isMac && this.mouseButton == 2 ? 
-                               e.button == 0 : this.mouseButton == e.button){
+               if(dojo.isWebKit && dojo.isMac && this.mouseButton == 2 ?
+                               e.button == 0 : this.mouseButton == e.button){ // TODO Should condition be met for touch devices, too?
                        this.destroy();
                }
                dojo.stopEvent(e);
@@ -7785,7 +8286,7 @@ dojo.declare("dojo.dnd.Mover", null, {
        // utilities
        onFirstMove: function(e){
                // summary:
-               //              makes the node absolute; it is meant to be called only once. 
+               //              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){
@@ -7805,7 +8306,7 @@ dojo.declare("dojo.dnd.Mover", null, {
                                // 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. 
+                               // the computed style.
                                var b = dojo.doc.body;
                                var bs = dojo.getComputedStyle(b);
                                var bm = dojo._getMarginBox(b, bs);
@@ -7819,7 +8320,10 @@ dojo.declare("dojo.dnd.Mover", null, {
                if(h && h.onFirstMove){
                        h.onFirstMove(this, e);
                }
-               dojo.disconnect(this.events.pop());
+               
+               // Disconnect onmousemove and ontouchmove events that call this function
+               dojo.disconnect(this.events.shift());
+               dojo.disconnect(this.events.shift());
        },
        destroy: function(){
                // summary:
@@ -7886,6 +8390,7 @@ dojo.declare("dojo.dnd.Moveable", null, {
                this.mover = params.mover ? params.mover : dojo.dnd.Mover;
                this.events = [
                        dojo.connect(this.handle, "onmousedown", this, "onMouseDown"),
+                       dojo.connect(this.handle, "ontouchstart", this, "onMouseDown"),
                        // cancel text selection and text dragging
                        dojo.connect(this.handle, "ondragstart",   this, "onSelectStart"),
                        dojo.connect(this.handle, "onselectstart", this, "onSelectStart")
@@ -7908,17 +8413,20 @@ dojo.declare("dojo.dnd.Moveable", null, {
        // mouse event processors
        onMouseDown: function(e){
                // summary:
-               //              event processor for onmousedown, creates a Mover for the node
+               //              event processor for onmousedown/ontouchstart, creates a Mover for the node
                // e: Event
-               //              mouse event
+               //              mouse/touch 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")
+                               dojo.connect(this.handle, "ontouchmove", this, "onMouseMove"),
+                               dojo.connect(this.handle, "onmouseup", this, "onMouseUp"),
+                               dojo.connect(this.handle, "ontouchend", this, "onMouseUp")
                        );
-                       this._lastX = e.pageX;
-                       this._lastY = e.pageY;
+                       var pos = e.touches ? e.touches[0] : e;
+                       this._lastX = pos.pageX;
+                       this._lastY = pos.pageY;
                }else{
                        this.onDragDetected(e);
                }
@@ -7926,10 +8434,11 @@ dojo.declare("dojo.dnd.Moveable", null, {
        },
        onMouseMove: function(e){
                // summary:
-               //              event processor for onmousemove, used only for delayed drags
+               //              event processor for onmousemove/ontouchmove, 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){
+               //              mouse/touch event
+               var pos = e.touches ? e.touches[0] : e;
+               if(Math.abs(pos.pageX - this._lastX) > this.delay || Math.abs(pos.pageY - this._lastY) > this.delay){
                        this.onMouseUp(e);
                        this.onDragDetected(e);
                }
@@ -7966,8 +8475,8 @@ dojo.declare("dojo.dnd.Moveable", null, {
                // summary:
                //              called before every move operation
                dojo.publish("/dnd/move/start", [mover]);
-               dojo.addClass(dojo.body(), "dojoMove"); 
-               dojo.addClass(this.node, "dojoMoveItem"); 
+               dojo.addClass(dojo.body(), "dojoMove");
+               dojo.addClass(this.node, "dojoMoveItem");
        },
        onMoveStop: function(/* dojo.dnd.Mover */ mover){
                // summary:
@@ -8059,7 +8568,7 @@ dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, {
                c.r = c.l + c.w;
                c.b = c.t + c.h;
                if(this.within){
-                       var mb = dojo.marginBox(mover.node);
+                       var mb = dojo._getMarginSize(mover.node);
                        c.r -= mb.w;
                        c.b -= mb.h;
                }
@@ -8069,8 +8578,12 @@ dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, {
                //              called during every move notification;
                //              should actually move the node; can be overwritten.
                var c = this.constraintBox, s = mover.node.style;
-               s.left = (leftTop.l < c.l ? c.l : c.r < leftTop.l ? c.r : leftTop.l) + "px";
-               s.top  = (leftTop.t < c.t ? c.t : c.b < leftTop.t ? c.b : leftTop.t) + "px";
+               this.onMoving(mover, leftTop);
+               leftTop.l = leftTop.l < c.l ? c.l : c.r < leftTop.l ? c.r : leftTop.l;
+               leftTop.t = leftTop.t < c.t ? c.t : c.b < leftTop.t ? c.b : leftTop.t;
+               s.left = leftTop.l + "px";
+               s.top  = leftTop.t + "px";
+               this.onMoved(mover, leftTop);
        }
 });
 
@@ -8132,8 +8645,8 @@ dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constraine
                //              an optional object with parameters
                var area = params && params.area;
                this.constraints = function(){
-                       var n = this.node.parentNode, 
-                               s = dojo.getComputedStyle(n), 
+                       var n = this.node.parentNode,
+                               s = dojo.getComputedStyle(n),
                                mb = dojo._getMarginBox(n, s);
                        if(area == "margin"){
                                return mb;      // Object
@@ -8155,100 +8668,6 @@ dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constraine
        }
 });
 
-// WARNING: below are obsolete objects, instead of custom movers use custom moveables (above)
-
-dojo.dnd.move.constrainedMover = function(fun, within){
-       // summary:
-       //              returns a constrained version of dojo.dnd.Mover
-       // description:
-       //              this function produces n object, which will put a constraint on 
-       //              the margin box of dragged object in absolute coordinates
-       // fun: Function
-       //              called on drag, and returns a constraint box
-       // within: Boolean
-       //              if true, constraints the whole dragged object withtin the rectangle, 
-       //              otherwise the constraint is applied to the left-top corner
-
-       dojo.deprecated("dojo.dnd.move.constrainedMover, use dojo.dnd.move.constrainedMoveable instead");
-       var mover = function(node, e, notifier){
-               dojo.dnd.Mover.call(this, node, e, notifier);
-       };
-       dojo.extend(mover, dojo.dnd.Mover.prototype);
-       dojo.extend(mover, {
-               onMouseMove: function(e){
-                       // summary: event processor for onmousemove
-                       // e: Event: mouse event
-                       dojo.dnd.autoScroll(e);
-                       var m = this.marginBox, c = this.constraintBox,
-                               l = m.l + e.pageX, t = m.t + e.pageY;
-                       l = l < c.l ? c.l : c.r < l ? c.r : l;
-                       t = t < c.t ? c.t : c.b < t ? c.b : t;
-                       this.host.onMove(this, {l: l, t: t});
-               },
-               onFirstMove: function(){
-                       // summary: called once to initialize things; it is meant to be called only once
-                       dojo.dnd.Mover.prototype.onFirstMove.call(this);
-                       var c = this.constraintBox = fun.call(this);
-                       c.r = c.l + c.w;
-                       c.b = c.t + c.h;
-                       if(within){
-                               var mb = dojo.marginBox(this.node);
-                               c.r -= mb.w;
-                               c.b -= mb.h;
-                       }
-               }
-       });
-       return mover;   // Object
-};
-
-dojo.dnd.move.boxConstrainedMover = function(box, within){
-       // summary:
-       //              a specialization of dojo.dnd.constrainedMover, which constrains to the specified box
-       // box: Object
-       //              a constraint box (l, t, w, h)
-       // within: Boolean
-       //              if true, constraints the whole dragged object withtin the rectangle, 
-       //              otherwise the constraint is applied to the left-top corner
-
-       dojo.deprecated("dojo.dnd.move.boxConstrainedMover, use dojo.dnd.move.boxConstrainedMoveable instead");
-       return dojo.dnd.move.constrainedMover(function(){ return box; }, within);       // Object
-};
-
-dojo.dnd.move.parentConstrainedMover = function(area, within){
-       // summary:
-       //              a specialization of dojo.dnd.constrainedMover, which constrains to the parent node
-       // area: String
-       //              "margin" to constrain within the parent's margin box, "border" for the border box,
-       //              "padding" for the padding box, and "content" for the content box; "content" is the default value.
-       // within: Boolean
-       //              if true, constraints the whole dragged object within the rectangle, 
-       //              otherwise the constraint is applied to the left-top corner
-
-       dojo.deprecated("dojo.dnd.move.parentConstrainedMover, use dojo.dnd.move.parentConstrainedMoveable instead");
-       var fun = function(){
-               var n = this.node.parentNode, 
-                       s = dojo.getComputedStyle(n), 
-                       mb = dojo._getMarginBox(n, s);
-               if(area == "margin"){
-                       return mb;      // Object
-               }
-               var t = dojo._getMarginExtents(n, s);
-               mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-               if(area == "border"){
-                       return mb;      // Object
-               }
-               t = dojo._getBorderExtents(n, s);
-               mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-               if(area == "padding"){
-                       return mb;      // Object
-               }
-               t = dojo._getPadExtents(n, s);
-               mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
-               return mb;      // Object
-       };
-       return dojo.dnd.move.constrainedMover(fun, within);     // Object
-};
-
 // patching functions one level up for compatibility
 
 dojo.dnd.constrainedMover = dojo.dnd.move.constrainedMover;
@@ -8279,7 +8698,7 @@ dojo.declare("dojo.dnd.__TimedMoveableArgs", [dojo.dnd.__MoveableArgs], {
        dojo.declare("dojo.dnd.TimedMoveable", dojo.dnd.Moveable, {
                // summary:
                //              A specialized version of Moveable to support an FPS throttling.
-               //              This class puts an upper restriction on FPS, which may reduce 
+               //              This class puts an upper restriction on FPS, which may reduce
                //              the CPU load. The additional parameter "timeout" regulates
                //              the delay before actually moving the moveable object.
                
@@ -8338,8 +8757,7 @@ dojo.provide("dijit.form._FormMixin");
 
 
 
-dojo.declare("dijit.form._FormMixin", null,
-       {
+dojo.declare("dijit.form._FormMixin", null, {
        // summary:
        //              Mixin for containers of form widgets (i.e. widgets that represent a single value
        //              and can be children of a <form> node or dijit.form.Form widget)
@@ -8350,10 +8768,10 @@ dojo.declare("dijit.form._FormMixin", null,
        //              form widgets
 
 /*=====
-    // value: Object
+       // value: Object
        //              Name/value hash for each child widget with a name and value.
        //              Child widgets without names are not part of the hash.
-       // 
+       //
        //              If there are multiple child widgets w/the same name, value is an array,
        //              unless they are radio buttons in which case value is a scalar (since only
        //              one radio button can be checked at a time).
@@ -8364,6 +8782,12 @@ dojo.declare("dijit.form._FormMixin", null,
        //      |       { name: "John Smith", interests: ["sports", "movies"] }
 =====*/
 
+       // state: [readonly] String
+       //              Will be "Error" if one or more of the child widgets has an invalid value,
+       //              "Incomplete" if not all of the required child widgets are filled in.  Otherwise, "",
+       //              which indicates that the form is ready to be submitted.
+       state: "",
+
        //      TODO:
        //      * Repeater
        //      * better handling for arrays.  Often form elements have names with [] like
@@ -8382,11 +8806,11 @@ dojo.declare("dijit.form._FormMixin", null,
                validate: function(){
                        // summary:
                        //              returns if the form is valid - same as isValid - but
-                       //                      provides a few additional (ui-specific) features.
-                       //                      1 - it will highlight any sub-widgets that are not
-                       //                              valid
-                       //                      2 - it will call focus() on the first invalid
-                       //                              sub-widget
+                       //              provides a few additional (ui-specific) features.
+                       //              1 - it will highlight any sub-widgets that are not
+                       //                      valid
+                       //              2 - it will call focus() on the first invalid
+                       //                      sub-widget
                        var didFocus = false;
                        return dojo.every(dojo.map(this.getDescendants(), function(widget){
                                // Need to set this so that "required" widgets get their
@@ -8407,9 +8831,9 @@ dojo.declare("dijit.form._FormMixin", null,
                        dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.", "", "2.0");
                        return this.set('value', val);
                },
-               _setValueAttr: function(/*object*/obj){
+               _setValueAttr: function(/*Object*/ obj){
                        // summary:
-                       //              Fill in form values from according to an Object (in the format returned by attr('value'))
+                       //              Fill in form values from according to an Object (in the format returned by get('value'))
 
                        // generate map from name --> [list of widgets with that name]
                        var map = { };
@@ -8487,7 +8911,7 @@ dojo.declare("dijit.form._FormMixin", null,
                                        return;         // like "continue"
                                }
 
-                               // TODO: widget values (just call attr('value', ...) on the widget)
+                               // TODO: widget values (just call set('value', ...) on the widget)
 
                                // TODO: maybe should call dojo.getNodeProp() instead
                                switch(element.type){
@@ -8519,6 +8943,9 @@ dojo.declare("dijit.form._FormMixin", null,
                                }
                        });
                        */
+                       
+                       // Note: no need to call this._set("value", ...) as the child updates will trigger onChange events
+                       // which I am monitoring.
                },
 
                getValues: function(){
@@ -8527,17 +8954,18 @@ dojo.declare("dijit.form._FormMixin", null,
                },
                _getValueAttr: function(){
                        // summary:
-                       //              Returns Object representing form values.
+                       //              Returns Object representing form values.   See description of `value` for details.
                        // description:
-                       //              Returns name/value hash for each form element.
-                       //              If there are multiple elements w/the same name, value is an array,
-                       //              unless they are radio buttons in which case value is a scalar since only
-                       //              one can be checked at a time.
+
+                       // The value is updated into this.value every time a child has an onChange event,
+                       // so in the common case this function could just return this.value.   However,
+                       // that wouldn't work when:
                        //
-                       //              If the name is a dot separated list (like a.b.c.d), creates a nested structure.
-                       //              Only works on widget form elements.
-                       // example:
-                       //              | { name: "John Smith", interests: ["sports", "movies"] }
+                       // 1. User presses return key to submit a form.  That doesn't fire an onchange event,
+                       // and even if it did it would come too late due to the setTimout(..., 0) in _handleOnChange()
+                       //
+                       // 2. app for some reason calls this.get("value") while the user is typing into a
+                       // form field.   Not sure if that case needs to be supported or not.
 
                        // get widget values
                        var obj = { };
@@ -8545,7 +8973,7 @@ dojo.declare("dijit.form._FormMixin", null,
                                var name = widget.name;
                                if(!name || widget.disabled){ return; }
 
-                               // Single value widget (checkbox, radio, or plain <input> type widget
+                               // Single value widget (checkbox, radio, or plain <input> type widget)
                                var value = widget.get('value');
 
                                // Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays
@@ -8648,98 +9076,132 @@ dojo.declare("dijit.form._FormMixin", null,
                        return obj;
                },
 
-               // TODO: ComboBox might need time to process a recently input value.  This should be async?
                isValid: function(){
                        // summary:
-                       //              Returns true if all of the widgets are valid
+                       //              Returns true if all of the widgets are valid.
+                       //              Deprecated, will be removed in 2.0.  Use get("state") instead.
 
-                       // This also populate this._invalidWidgets[] array with list of invalid widgets...
-                       // TODO: put that into separate function?   It's confusing to have that as a side effect
-                       // of a method named isValid().
-
-                       this._invalidWidgets = dojo.filter(this.getDescendants(), function(widget){
-                               return !widget.disabled && widget.isValid && !widget.isValid();
-                       });
-                       return !this._invalidWidgets.length;
+                       return this.state == "";
                },
 
-
                onValidStateChange: function(isValid){
                        // summary:
                        //              Stub function to connect to if you want to do something
                        //              (like disable/enable a submit button) when the valid
                        //              state changes on the form as a whole.
+                       //
+                       //              Deprecated.  Will be removed in 2.0.  Use watch("state", ...) instead.
                },
 
-               _widgetChange: function(widget){
+               _getState: function(){
                        // summary:
-                       //              Connected to a widget's onChange function - update our
-                       //              valid state, if needed.
-                       var isValid = this._lastValidState;
-                       if(!widget || this._lastValidState === undefined){
-                               // We have passed a null widget, or we haven't been validated
-                               // yet - let's re-check all our children
-                               // This happens when we connect (or reconnect) our children
-                               isValid = this.isValid();
-                               if(this._lastValidState === undefined){
-                                       // Set this so that we don't fire an onValidStateChange
-                                       // the first time
-                                       this._lastValidState = isValid;
-                               }
-                       }else if(widget.isValid){
-                               this._invalidWidgets = dojo.filter(this._invalidWidgets || [], function(w){
-                                       return (w != widget);
-                               }, this);
-                               if(!widget.isValid() && !widget.get("disabled")){
-                                       this._invalidWidgets.push(widget);
-                               }
-                               isValid = (this._invalidWidgets.length === 0);
-                       }
-                       if(isValid !== this._lastValidState){
-                               this._lastValidState = isValid;
-                               this.onValidStateChange(isValid);
-                       }
+                       //              Compute what this.state should be based on state of children
+                       var states = dojo.map(this._descendants, function(w){
+                               return w.get("state") || "";
+                       });
+
+                       return dojo.indexOf(states, "Error") >= 0 ? "Error" :
+                               dojo.indexOf(states, "Incomplete") >= 0 ? "Incomplete" : "";
                },
 
-               connectChildren: function(){
+               disconnectChildren: function(){
                        // summary:
-                       //              Connects to the onChange function of all children to
-                       //              track valid state changes.  You can call this function
-                       //              directly, ex. in the event that you programmatically
-                       //              add a widget to the form *after* the form has been
+                       //              Remove connections to monitor changes to children's value, error state, and disabled state,
+                       //              in order to update Form.value and Form.state.
+                       dojo.forEach(this._childConnections || [], dojo.hitch(this, "disconnect"));
+                       dojo.forEach(this._childWatches || [], function(w){ w.unwatch(); });
+               },
+
+               connectChildren: function(/*Boolean*/ inStartup){
+                       // summary:
+                       //              Setup connections to monitor changes to children's value, error state, and disabled state,
+                       //              in order to update Form.value and Form.state.
+                       //
+                       //              You can call this function directly, ex. in the event that you
+                       //              programmatically add a widget to the form *after* the form has been
                        //              initialized.
-                       dojo.forEach(this._changeConnections, dojo.hitch(this, "disconnect"));
+
                        var _this = this;
 
-                       // we connect to validate - so that it better reflects the states
-                       // of the widgets - also, we only connect if it has a validate
-                       // function (to avoid too many unneeded connections)
-                       var conns = (this._changeConnections = []);
-                       dojo.forEach(dojo.filter(this.getDescendants(),
+                       // Remove old connections, if any
+                       this.disconnectChildren();
+
+                       this._descendants = this.getDescendants();
+
+                       // (Re)set this.value and this.state.   Send watch() notifications but not on startup.
+                       var set = inStartup ? function(name, val){ _this[name] = val; } : dojo.hitch(this, "_set");
+                       set("value", this.get("value"));
+                       set("state", this._getState());
+
+                       // Monitor changes to error state and disabled state in order to update
+                       // Form.state
+                       var conns = (this._childConnections = []),
+                               watches = (this._childWatches = []);
+                       dojo.forEach(dojo.filter(this._descendants,
                                function(item){ return item.validate; }
                        ),
                        function(widget){
-                               // We are interested in whenever the widget is validated - or
-                               // whenever the disabled attribute on that widget is changed
-                               conns.push(_this.connect(widget, "validate",
-                                                                       dojo.hitch(_this, "_widgetChange", widget)));
-                               conns.push(_this.connect(widget, "_setDisabledAttr",
-                                                                       dojo.hitch(_this, "_widgetChange", widget)));
+                               // We are interested in whenever the widget changes validity state - or
+                               // whenever the disabled attribute on that widget is changed.
+                               dojo.forEach(["state", "disabled"], function(attr){
+                                       watches.push(widget.watch(attr, function(attr, oldVal, newVal){
+                                               _this.set("state", _this._getState());
+                                       }));
+                               });
                        });
 
-                       // Call the widget change function to update the valid state, in
-                       // case something is different now.
-                       this._widgetChange(null);
+                       // And monitor calls to child.onChange so we can update this.value
+                       var onChange = function(){
+                               // summary:
+                               //              Called when child's value or disabled state changes
+                               
+                               // Use setTimeout() to collapse value changes in multiple children into a single
+                               // update to my value.   Multiple updates will occur on:
+                               //      1. Form.set()
+                               //      2. Form.reset()
+                               //      3. user selecting a radio button (which will de-select another radio button,
+                               //               causing two onChange events)
+                               if(_this._onChangeDelayTimer){
+                                       clearTimeout(_this._onChangeDelayTimer);
+                               }
+                               _this._onChangeDelayTimer = setTimeout(function(){
+                                       delete _this._onChangeDelayTimer;
+                                       _this._set("value", _this.get("value"));
+                               }, 10);
+                       };
+                       dojo.forEach(
+                               dojo.filter(this._descendants, function(item){ return item.onChange; } ),
+                               function(widget){
+                                       // When a child widget's value changes,
+                                       // the efficient thing to do is to just update that one attribute in this.value,
+                                       // but that gets a little complicated when a checkbox is checked/unchecked
+                                       // since this.value["checkboxName"] contains an array of all the checkboxes w/the same name.
+                                       // Doing simple thing for now.
+                                       conns.push(_this.connect(widget, "onChange", onChange));
+
+                                       // Disabling/enabling a child widget should remove it's value from this.value.
+                                       // Again, this code could be more efficient, doing simple thing for now.
+                                       watches.push(widget.watch("disabled", onChange));
+                               }
+                       );
                },
 
                startup: function(){
                        this.inherited(arguments);
-                       // Initialize our valid state tracking.  Needs to be done in startup
-                       // because it's not guaranteed that our children are initialized
-                       // yet.
-                       this._changeConnections = [];
-                       this.connectChildren();
+
+                       // Initialize value and valid/invalid state tracking.  Needs to be done in startup()
+                       // so that children are initialized.
+                       this.connectChildren(true);
+
+                       // Make state change call onValidStateChange(), will be removed in 2.0
+                       this.watch("state", function(attr, oldVal, newVal){ this.onValidStateChange(newVal == ""); });
+               },
+
+               destroy: function(){
+                       this.disconnectChildren();
+                       this.inherited(arguments);
                }
+
        });
 
 }
@@ -8802,22 +9264,16 @@ dojo.declare("dijit._DialogMixin", null,
                        this.execute(this.get('value'));
                },
 
-               _getFocusItems: function(/*Node*/ dialogNode){
+               _getFocusItems: function(){
                        // summary:
-                       //              Find focusable Items each time a dialog is opened,
-                       //              setting _firstFocusItem and _lastFocusItem
+                       //              Finds focusable items in dialog,
+                       //              and sets this._firstFocusItem and this._lastFocusItem
                        // tags:
                        //              protected
 
-                       var elems = dijit._getTabNavigable(dojo.byId(dialogNode));
-                       this._firstFocusItem = elems.lowest || elems.first || dialogNode;
+                       var elems = dijit._getTabNavigable(this.containerNode);
+                       this._firstFocusItem = elems.lowest || elems.first || this.closeButtonNode || this.domNode;
                        this._lastFocusItem = elems.last || elems.highest || this._firstFocusItem;
-                       if(dojo.isMoz && this._firstFocusItem.tagName.toLowerCase() == "input" &&
-                                       dojo.getNodeProp(this._firstFocusItem, "type").toLowerCase() == "file"){
-                               // FF doesn't behave well when first element is input type=file, set first focusable to dialog container
-                               dojo.attr(dialogNode, "tabIndex", "0");
-                               this._firstFocusItem = dialogNode;
-                       }
                }
        }
 );
@@ -8832,7 +9288,6 @@ dojo.provide("dijit.DialogUnderlay");
 
 
 
-
 dojo.declare(
        "dijit.DialogUnderlay",
        [dijit._Widget, dijit._Templated],
@@ -8851,87 +9306,337 @@ dojo.declare(
                //              In the case of `dijit.Dialog`, this id is based on the id of the Dialog,
                //              suffixed with _underlay.
 
-               // Template has two divs; outer div is used for fade-in/fade-out, and also to hold background iframe.
-               // Inner div has opacity specified in CSS file.
-               templateString: "<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",
+               // Template has two divs; outer div is used for fade-in/fade-out, and also to hold background iframe.
+               // Inner div has opacity specified in CSS file.
+               templateString: "<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",
+
+               // Parameters on creation or updatable later
+
+               // dialogId: String
+               //              Id of the dialog.... DialogUnderlay's id is based on this id
+               dialogId: "",
+
+               // class: String
+               //              This class name is used on the DialogUnderlay node, in addition to dijitDialogUnderlay
+               "class": "",
+
+               attributeMap: { id: "domNode" },
+
+               _setDialogIdAttr: function(id){
+                       dojo.attr(this.node, "id", id + "_underlay");
+                       this._set("dialogId", id);
+               },
+
+               _setClassAttr: function(clazz){
+                       this.node.className = "dijitDialogUnderlay " + clazz;
+                       this._set("class", clazz);
+               },
+
+               postCreate: function(){
+                       // summary:
+                       //              Append the underlay to the body
+                       dojo.body().appendChild(this.domNode);
+               },
+
+               layout: function(){
+                       // summary:
+                       //              Sets the background to the size of the viewport
+                       //
+                       // description:
+                       //              Sets the background to the size of the viewport (rather than the size
+                       //              of the document) since we need to cover the whole browser window, even
+                       //              if the document is only a few lines long.
+                       // tags:
+                       //              private
+
+                       var is = this.node.style,
+                               os = this.domNode.style;
+
+                       // hide the background temporarily, so that the background itself isn't
+                       // causing scrollbars to appear (might happen when user shrinks browser
+                       // window and then we are called to resize)
+                       os.display = "none";
+
+                       // then resize and show
+                       var viewport = dojo.window.getBox();
+                       os.top = viewport.t + "px";
+                       os.left = viewport.l + "px";
+                       is.width = viewport.w + "px";
+                       is.height = viewport.h + "px";
+                       os.display = "block";
+               },
+
+               show: function(){
+                       // summary:
+                       //              Show the dialog underlay
+                       this.domNode.style.display = "block";
+                       this.layout();
+                       this.bgIframe = new dijit.BackgroundIframe(this.domNode);
+               },
+
+               hide: function(){
+                       // summary:
+                       //              Hides the dialog underlay
+                       this.bgIframe.destroy();
+                       delete this.bgIframe;
+                       this.domNode.style.display = "none";
+               }
+       }
+);
+
+}
+
+if(!dojo._hasResource["dijit.layout._ContentPaneResizeMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout._ContentPaneResizeMixin"] = true;
+dojo.provide("dijit.layout._ContentPaneResizeMixin");
+
+
+
+
+dojo.declare("dijit.layout._ContentPaneResizeMixin", null, {
+       // summary:
+       //              Resize() functionality of ContentPane.   If there's a single layout widget
+       //              child then it will call resize() with the same dimensions as the ContentPane.
+       //              Otherwise just calls resize on each child.
+       //
+       //              Also implements basic startup() functionality, where starting the parent
+       //              will start the children
+
+       // doLayout: Boolean
+       //              - false - don't adjust size of children
+       //              - true - if there is a single visible child widget, set it's size to
+       //                              however big the ContentPane is
+       doLayout: true,
+
+       // 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,
+
+       // isLayoutContainer: [protected] Boolean
+       //              Indicates that this widget will call resize() on it's child widgets
+       //              when they become visible.
+       isLayoutContainer: true,
+
+       _startChildren: function(){
+               // summary:
+               //              Call startup() on all children including non _Widget ones like dojo.dnd.Source objects
+
+               // This starts all the widgets
+               dojo.forEach(this.getChildren(), function(child){
+                       child.startup();
+                       child._started = true;
+               });
+       },
+
+       startup: function(){
+               // summary:
+               //              See `dijit.layout._LayoutWidget.startup` for description.
+               //              Although ContentPane doesn't extend _LayoutWidget, it does implement
+               //              the same API.
+
+               if(this._started){ return; }
+
+               var parent = dijit._Contained.prototype.getParent.call(this);
+               this._childOfLayoutWidget = parent && parent.isLayoutContainer;
+
+               // I need to call resize() on my child/children (when I become visible), unless
+               // I'm the child of a layout widget in which case my parent will call resize() on me and I'll do it then.
+               this._needLayout = !this._childOfLayoutWidget;
+
+               this.inherited(arguments);
+
+               this._startChildren();
+
+               if(this._isShown()){
+                       this._onShow();
+               }
+
+               if(!this._childOfLayoutWidget){
+                       // If my parent isn't a layout container, since 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._needLayout = !this._childOfLayoutWidget;
+                               this.resize();
+                       });
+               }
+       },
+
+       _checkIfSingleChild: function(){
+               // summary:
+               //              Test if we have exactly one visible widget as a child,
+               //              and if so assume that we are a container for that widget,
+               //              and should propagate startup() and resize() calls to it.
+               //              Skips over things like data stores since they aren't visible.
+
+               var childNodes = dojo.query("> *", this.containerNode).filter(function(node){
+                               return node.tagName !== "SCRIPT"; // or a regexp for hidden elements like script|area|map|etc..
+                       }),
+                       childWidgetNodes = childNodes.filter(function(node){
+                               return dojo.hasAttr(node, "data-dojo-type") || dojo.hasAttr(node, "dojoType") || dojo.hasAttr(node, "widgetId");
+                       }),
+                       candidateWidgets = dojo.filter(childWidgetNodes.map(dijit.byNode), function(widget){
+                               return widget && widget.domNode && widget.resize;
+                       });
+
+               if(
+                       // all child nodes are widgets
+                       childNodes.length == childWidgetNodes.length &&
+
+                       // all but one are invisible (like dojo.data)
+                       candidateWidgets.length == 1
+               ){
+                       this._singleChild = candidateWidgets[0];
+               }else{
+                       delete this._singleChild;
+               }
+
+               // So we can set overflow: hidden to avoid a safari bug w/scrollbars showing up (#9449)
+               dojo.toggleClass(this.containerNode, this.baseClass + "SingleChild", !!this._singleChild);
+       },
+
+       resize: function(changeSize, resultSize){
+               // summary:
+               //              See `dijit.layout._LayoutWidget.resize` for description.
+               //              Although ContentPane doesn't extend _LayoutWidget, it does implement
+               //              the same API.
+
+               // For the TabContainer --> BorderContainer --> ContentPane case, _onShow() is
+               // never called, so resize() is our trigger to do the initial href download (see [20099]).
+               // However, don't load href for closed TitlePanes.
+               if(!this._wasShown && this.open !== false){
+                       this._onShow();
+               }
 
-               // Parameters on creation or updatable later
+               this._resizeCalled = true;
 
-               // dialogId: String
-               //              Id of the dialog.... DialogUnderlay's id is based on this id
-               dialogId: "",
+               this._scheduleLayout(changeSize, resultSize);
+       },
 
-               // class: String
-               //              This class name is used on the DialogUnderlay node, in addition to dijitDialogUnderlay
-               "class": "",
+       _scheduleLayout: function(changeSize, resultSize){
+               // summary:
+               //              Resize myself, and call resize() on each of my child layout widgets, either now
+               //              (if I'm currently visible) or when I become visible
+               if(this._isShown()){
+                       this._layout(changeSize, resultSize);
+               }else{
+                       this._needLayout = true;
+                       this._changeSize = changeSize;
+                       this._resultSize = resultSize;
+               }
+       },
 
-               attributeMap: { id: "domNode" },
+       _layout: function(changeSize, resultSize){
+               // summary:
+               //              Resize myself according to optional changeSize/resultSize parameters, like a layout widget.
+               //              Also, since I am a Container widget, each of my children expects me to
+               //              call resize() or layout() on them.
+               //
+               //              Should be called on initialization and also whenever we get new content
+               //              (from an href, or from set('content', ...))... but deferred until
+               //              the ContentPane is visible
 
-               _setDialogIdAttr: function(id){
-                       dojo.attr(this.node, "id", id + "_underlay");
-               },
+               // Set margin box size, unless it wasn't specified, in which case use current size.
+               if(changeSize){
+                       dojo.marginBox(this.domNode, changeSize);
+               }
 
-               _setClassAttr: function(clazz){
-                       this.node.className = "dijitDialogUnderlay " + clazz;
-               },
+               // Compute content box size of containerNode in case we [later] need to size our single child.
+               var cn = this.containerNode;
+               if(cn === this.domNode){
+                       // If changeSize or resultSize was passed to this method and this.containerNode ==
+                       // this.domNode then we can compute the content-box size without querying the node,
+                       // which is more reliable (similar to LayoutWidget.resize) (see for example #9449).
+                       var mb = resultSize || {};
+                       dojo.mixin(mb, changeSize || {}); // changeSize overrides resultSize
+                       if(!("h" in mb) || !("w" in mb)){
+                               mb = dojo.mixin(dojo.marginBox(cn), mb); // just use dojo.marginBox() to fill in missing values
+                       }
+                       this._contentBox = dijit.layout.marginBox2contentBox(cn, mb);
+               }else{
+                       this._contentBox = dojo.contentBox(cn);
+               }
 
-               postCreate: function(){
-                       // summary:
-                       //              Append the underlay to the body
-                       dojo.body().appendChild(this.domNode);
-               },
+               this._layoutChildren();
 
-               layout: function(){
-                       // summary:
-                       //              Sets the background to the size of the viewport
-                       //
-                       // description:
-                       //              Sets the background to the size of the viewport (rather than the size
-                       //              of the document) since we need to cover the whole browser window, even
-                       //              if the document is only a few lines long.
-                       // tags:
-                       //              private
+               delete this._needLayout;
+       },
+       
+       _layoutChildren: function(){
+               // Call _checkIfSingleChild() again in case app has manually mucked w/the content
+               // of the ContentPane (rather than changing it through the set("content", ...) API.
+               if(this.doLayout){
+                       this._checkIfSingleChild();
+               }
 
-                       var is = this.node.style,
-                               os = this.domNode.style;
+               if(this._singleChild && this._singleChild.resize){
+                       var cb = this._contentBox || dojo.contentBox(this.containerNode);
 
-                       // hide the background temporarily, so that the background itself isn't
-                       // causing scrollbars to appear (might happen when user shrinks browser
-                       // window and then we are called to resize)
-                       os.display = "none";
+                       // note: if widget has padding this._contentBox will have l and t set,
+                       // but don't pass them to resize() or it will doubly-offset the child
+                       this._singleChild.resize({w: cb.w, h: cb.h});
+               }else{
+                       // All my child widgets are independently sized (rather than matching my size),
+                       // but I still need to call resize() on each child to make it layout.
+                       dojo.forEach(this.getChildren(), function(widget){
+                               if(widget.resize){
+                                       widget.resize();
+                               }
+                       });
+               }
+       },
 
-                       // then resize and show
-                       var viewport = dojo.window.getBox();
-                       os.top = viewport.t + "px";
-                       os.left = viewport.l + "px";
-                       is.width = viewport.w + "px";
-                       is.height = viewport.h + "px";
-                       os.display = "block";
-               },
+       _isShown: function(){
+               // summary:
+               //              Returns true if the content is currently shown.
+               // description:
+               //              If I am a child of a layout widget then it actually returns true if I've ever been visible,
+               //              not whether I'm currently visible, since that's much faster than tracing up the DOM/widget
+               //              tree every call, and at least solves the performance problem on page load by deferring loading
+               //              hidden ContentPanes until they are first shown
 
-               show: function(){
-                       // summary:
-                       //              Show the dialog underlay
-                       this.domNode.style.display = "block";
-                       this.layout();
-                       this.bgIframe = new dijit.BackgroundIframe(this.domNode);
-               },
+               if(this._childOfLayoutWidget){
+                       // If we are TitlePane, etc - we return that only *IF* we've been resized
+                       if(this._resizeCalled && "open" in this){
+                               return this.open;
+                       }
+                       return this._resizeCalled;
+               }else if("open" in this){
+                       return this.open;               // for TitlePane, etc.
+               }else{
+                       var node = this.domNode, parent = this.domNode.parentNode;
+                       return (node.style.display != 'none') && (node.style.visibility != 'hidden') && !dojo.hasClass(node, "dijitHidden") &&
+                                       parent && parent.style && (parent.style.display != 'none');
+               }
+       },
 
-               hide: function(){
-                       // summary:
-                       //              Hides the dialog underlay
-                       this.bgIframe.destroy();
-                       this.domNode.style.display = "none";
-               },
+       _onShow: function(){
+               // summary:
+               //              Called when the ContentPane is made visible
+               // description:
+               //              For a plain ContentPane, this is called on initialization, from startup().
+               //              If the ContentPane is a hidden pane of a TabContainer etc., then it's
+               //              called whenever the pane is made visible.
+               //
+               //              Does layout/resize of child widget(s)
 
-               uninitialize: function(){
-                       if(this.bgIframe){
-                               this.bgIframe.destroy();
-                       }
-                       this.inherited(arguments);
+               if(this._needLayout){
+                       // If a layout has been scheduled for when we become visible, do it now
+                       this._layout(this._changeSize, this._resultSize);
                }
+
+               this.inherited(arguments);
+
+               // Need to keep track of whether ContentPane has been shown (which is different than
+               // whether or not it's currently visible).
+               this._wasShown = true;
        }
-);
+});
 
 }
 
@@ -8939,24 +9644,25 @@ if(!dojo._hasResource["dojo.html"]){ //_hasResource checks added by build. Do no
 dojo._hasResource["dojo.html"] = true;
 dojo.provide("dojo.html");
 
-// the parser might be needed..
 
+dojo.getObject("html", true, dojo);
+
+// the parser might be needed..
 (function(){ // private scope, sort of a namespace
 
        // idCounter is incremented with each instantiation to allow asignment of a unique id for tracking, logging purposes
-       var idCounter = 0, 
+       var idCounter = 0,
                d = dojo;
        
        dojo.html._secureForInnerHtml = function(/*String*/ cont){
                // summary:
                //              removes !DOCTYPE and title elements from the html string.
-               // 
+               //
                //              khtml is picky about dom faults, you can't attach a style or <title> node as child of body
                //              must go into head, so we need to cut out those tags
                //      cont:
                //              An html string for insertion into the dom
-               //      
+               //
                return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig, ""); // String
        };
 
@@ -8976,7 +9682,7 @@ dojo.provide("dojo.html");
                //      node:
                //              the parent element
                //      content:
-               //              the content to be set on the parent element. 
+               //              the content to be set on the parent element.
                //              This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes
                
                // always empty
@@ -9002,7 +9708,7 @@ dojo.provide("dojo.html");
        };
 
        // we wrap up the content-setting operation in a object
-       dojo.declare("dojo.html._ContentSetter", null, 
+       dojo.declare("dojo.html._ContentSetter", null,
                {
                        // node: DomNode|String
                        //              An node which will be the parent element that we set content into
@@ -9013,11 +9719,11 @@ dojo.provide("dojo.html");
                        content: "",
                        
                        // id: String?
-                       //              Usually only used internally, and auto-generated with each instance 
+                       //              Usually only used internally, and auto-generated with each instance
                        id: "",
 
                        // cleanContent: Boolean
-                       //              Should the content be treated as a full html document, 
+                       //              Should the content be treated as a full html document,
                        //              and the real content stripped of <html>, <body> wrapper before injection
                        cleanContent: false,
                        
@@ -9028,6 +9734,17 @@ dojo.provide("dojo.html");
                        // parseContent: Boolean
                        //              Should the node by passed to the parser after the new content is set
                        parseContent: false,
+
+                       // parserScope: String
+                       //              Flag passed to parser.  Root for attribute names to search for.   If scopeName is dojo,
+                       //              will search for data-dojo-type (or dojoType).  For backwards compatibility
+                       //              reasons defaults to dojo._scopeName (which is "dojo" except when
+                       //              multi-version support is used, when it will be something like dojo16, dojo20, etc.)
+                       parserScope: dojo._scopeName,
+
+                       // startup: Boolean
+                       //              Start the child widgets after parsing them.   Only obeyed if parseContent is true.
+                       startup: true,
                        
                        // lifecyle methods
                        constructor: function(/* Object */params, /* String|DomNode */node){
@@ -9045,14 +9762,14 @@ dojo.provide("dojo.html");
                                if(!this.id){
                                        this.id = [
                                                "Setter",
-                                               (node) ? node.id || node.tagName : "", 
+                                               (node) ? node.id || node.tagName : "",
                                                idCounter++
                                        ].join("_");
                                }
                        },
                        set: function(/* String|DomNode|NodeList? */ cont, /* Object? */ params){
                                // summary:
-                               //              front-end to the set-content sequence 
+                               //              front-end to the set-content sequence
                                //      cont:
                                //              An html string, node or enumerable list of nodes for insertion into the dom
                                //              If not provided, the object's content property will be used
@@ -9072,9 +9789,9 @@ dojo.provide("dojo.html");
                        },
                        setContent: function(){
                                // summary:
-                               //              sets the content on the node 
+                               //              sets the content on the node
 
-                               var node = this.node; 
+                               var node = this.node;
                                if(!node) {
                                    // can't proceed
                                        throw new Error(this.declaredClass + ": setContent given no node");
@@ -9086,7 +9803,7 @@ dojo.provide("dojo.html");
                                        // like for instance if domNode is a UL and we try append a DIV
        
                                        // FIXME: need to allow the user to provide a content error message string
-                                       var errMess = this.onContentError(e); 
+                                       var errMess = this.onContentError(e);
                                        try{
                                                node.innerHTML = errMess;
                                        }catch(e){
@@ -9102,7 +9819,7 @@ dojo.provide("dojo.html");
                                //      cleanly empty out existing content
 
                                // destroy any widgets from a previous run
-                               // NOTE: if you dont want this you'll need to empty 
+                               // NOTE: if you dont want this you'll need to empty
                                // the parseResults array property yourself to avoid bad things happenning
                                if(this.parseResults && this.parseResults.length) {
                                        dojo.forEach(this.parseResults, function(w) {
@@ -9112,17 +9829,17 @@ dojo.provide("dojo.html");
                                        });
                                        delete this.parseResults;
                                }
-                               // this is fast, but if you know its already empty or safe, you could 
+                               // this is fast, but if you know its already empty or safe, you could
                                // override empty to skip this step
                                dojo.html._emptyNode(this.node);
                        },
        
                        onBegin: function(){
                                // summary
-                               //              Called after instantiation, but before set(); 
-                               //              It allows modification of any of the object properties 
+                               //              Called after instantiation, but before set();
+                               //              It allows modification of any of the object properties
                                //              - including the node and content provided - before the set operation actually takes place
-                               //              This default implementation checks for cleanContent and extractContent flags to 
+                               //              This default implementation checks for cleanContent and extractContent flags to
                                //              optionally pre-process html string content
                                var cont = this.content;
        
@@ -9160,21 +9877,21 @@ dojo.provide("dojo.html");
                                // summary
                                //              manually reset the Setter instance if its being re-used for example for another set()
                                // description
-                               //              tearDown() is not called automatically. 
+                               //              tearDown() is not called automatically.
                                //              In normal use, the Setter instance properties are simply allowed to fall out of scope
                                //              but the tearDown method can be called to explicitly reset this instance.
-                               delete this.parseResults; 
-                               delete this.node; 
-                               delete this.content; 
+                               delete this.parseResults;
+                               delete this.node;
+                               delete this.content;
                        },
   
                        onContentError: function(err){
-                               return "Error occured setting content: " + err; 
+                               return "Error occured setting content: " + err;
                        },
                        
                        _mixin: function(params){
                                // mix properties/methods into the instance
-                               // TODO: the intention with tearDown is to put the Setter's state 
+                               // TODO: the intention with tearDown is to put the Setter's state
                                // back to that of the original constructor (vs. deleting/resetting everything regardless of ctor params)
                                // so we could do something here to move the original properties aside for later restoration
                                var empty = {}, key;
@@ -9182,21 +9899,28 @@ dojo.provide("dojo.html");
                                        if(key in empty){ continue; }
                                        // TODO: here's our opportunity to mask the properties we dont consider configurable/overridable
                                        // .. but history shows we'll almost always guess wrong
-                                       this[key] = params[key]; 
+                                       this[key] = params[key];
                                }
                        },
                        _parse: function(){
-                               // summary: 
+                               // summary:
                                //              runs the dojo parser over the node contents, storing any results in this.parseResults
                                //              Any errors resulting from parsing are passed to _onError for handling
 
                                var rootNode = this.node;
                                try{
                                        // store the results (widgets, whatever) for potential retrieval
+                                       var inherited = {};
+                                       dojo.forEach(["dir", "lang", "textDir"], function(name){
+                                               if(this[name]){
+                                                       inherited[name] = this[name];
+                                               }
+                                       }, this);
                                        this.parseResults = dojo.parser.parse({
                                                rootNode: rootNode,
-                                               dir: this.dir,
-                                               lang: this.lang
+                                               noStart: !this.startup,
+                                               inherited: inherited,
+                                               scope: this.parserScope
                                        });
                                }catch(e){
                                        this._onError('Content', e, "Error parsing in _ContentSetter#"+this.id);
@@ -9229,29 +9953,29 @@ dojo.provide("dojo.html");
                        //      node:
                        //              the parent element that will receive the content
                        //      cont:
-                       //              the content to be set on the parent element. 
+                       //              the content to be set on the parent element.
                        //              This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes
-                       //      params: 
+                       //      params:
                        //              Optional flags/properties to configure the content-setting. See dojo.html._ContentSetter
                        //      example:
                        //              A safe string/node/nodelist content replacement/injection with hooks for extension
-                       //              Example Usage: 
-                       //              dojo.html.set(node, "some string"); 
-                       //              dojo.html.set(node, contentNode, {options}); 
-                       //              dojo.html.set(node, myNode.childNodes, {options}); 
+                       //              Example Usage:
+                       //              dojo.html.set(node, "some string");
+                       //              dojo.html.set(node, contentNode, {options});
+                       //              dojo.html.set(node, myNode.childNodes, {options});
                if(undefined == cont){
                        console.warn("dojo.html.set: no cont argument provided, using empty string");
                        cont = "";
-               }       
+               }
                if(!params){
                        // simple and fast
                        return dojo.html._setNodeContent(node, cont, true);
-               }else{ 
+               }else{
                        // more options but slower
                        // note the arguments are reversed in order, to match the convention for instantiation via the parser
-                       var op = new dojo.html._ContentSetter(dojo.mixin( 
-                                       params, 
-                                       { content: cont, node: node } 
+                       var op = new dojo.html._ContentSetter(dojo.mixin(
+                                       params,
+                                       { content: cont, node: node }
                        ));
                        return op.set();
                }
@@ -9266,35 +9990,39 @@ dojo.provide("dijit.layout.ContentPane");
 
 
 
-       // for dijit.layout.marginBox2contentBox()
-
-
 
 
 
 
 dojo.declare(
-       "dijit.layout.ContentPane", dijit._Widget,
+       "dijit.layout.ContentPane", [dijit._Widget, dijit.layout._ContentPaneResizeMixin],
 {
        // summary:
-       //              A widget that acts as a container for mixed HTML and widgets, and includes an Ajax interface
+       //              A widget containing an HTML fragment, specified inline
+       //              or by uri.  Fragment may include widgets.
+       //
        // description:
-       //              A widget that can be used as a stand alone widget
-       //              or as a base class for other widgets.
+       //              This widget embeds a document fragment in the page, specified
+       //              either by uri, javascript generated markup or DOM reference.
+       //              Any widgets within this content are instantiated and managed,
+       //              but laid out according to the HTML structure.  Unlike IFRAME,
+       //              ContentPane embeds a document fragment as would be found
+       //              inside the BODY tag of a full HTML document.  It should not
+       //              contain the HTML, HEAD, or BODY tags.
+       //              For more advanced functionality with scripts and
+       //              stylesheets, see dojox.layout.ContentPane.  This widget may be
+       //              used stand alone or as a base class for other widgets.
+       //              ContentPane is useful as a child of other layout containers
+       //              such as BorderContainer or TabContainer, but note that those
+       //              widgets can contain any widget as a child.
        //
-       //              Handles replacement of document fragment using either external uri or javascript
-       //              generated markup or DOM content, instantiating widgets within that content.
-       //              Don't confuse it with an iframe, it only needs/wants document fragments.
-       //              It's useful as a child of LayoutContainer, SplitContainer, or TabContainer.
-       //              But note that those classes can contain any widget as a child.
        // example:
        //              Some quick samples:
-       //              To change the innerHTML use .set('content', '<b>new content</b>')
+       //              To change the innerHTML: cp.set('content', '<b>new content</b>')
        //
-       //              Or you can send it a NodeList, .set('content', dojo.query('div [class=selected]', userSelection))
-       //              please note that the nodes in NodeList will copied, not moved
+       //              Or you can send it a NodeList: cp.set('content', dojo.query('div [class=selected]', userSelection))
        //
-       //              To do a ajax update use .set('href', url)
+       //              To do an ajax update: cp.set('href', url)
 
        // href: String
        //              The href of the content that displays now.
@@ -9306,7 +10034,7 @@ dojo.declare(
 /*=====
        // content: String || DomNode || NodeList || dijit._Widget
        //              The innerHTML of the ContentPane.
-       //              Note that the initialization parameter / argument to attr("content", ...)
+       //              Note that the initialization parameter / argument to set("content", ...)
        //              can be a String, DomNode, Nodelist, or _Widget.
        content: "",
 =====*/
@@ -9320,6 +10048,13 @@ dojo.declare(
        //              Parse content and create the widgets, if any.
        parseOnLoad: true,
 
+       // parserScope: String
+       //              Flag passed to parser.  Root for attribute names to search for.   If scopeName is dojo,
+       //              will search for data-dojo-type (or dojoType).  For backwards compatibility
+       //              reasons defaults to dojo._scopeName (which is "dojo" except when
+       //              multi-version support is used, when it will be something like dojo16, dojo20, etc.)
+       parserScope: dojo._scopeName,
+
        // preventCache: Boolean
        //              Prevent caching of data from href's by appending a timestamp to the href.
        preventCache: false,
@@ -9343,7 +10078,7 @@ dojo.declare(
        // isLoaded: [readonly] Boolean
        //              True if the ContentPane has data in it, either specified
        //              during initialization (via href or inline content), or set
-       //              via attr('content', ...) / attr('href', ...)
+       //              via set('content', ...) / set('href', ...)
        //
        //              False if it doesn't have any content, or if ContentPane is
        //              still in the process of downloading href.
@@ -9351,35 +10086,19 @@ dojo.declare(
 
        baseClass: "dijitContentPane",
 
-       // doLayout: Boolean
-       //              - false - don't adjust size of children
-       //              - true - if there is a single visible child widget, set it's size to
-       //                              however big the ContentPane is
-       doLayout: true,
-
        // ioArgs: Object
        //              Parameters to pass to xhrGet() request, for example:
        // |    <div dojoType="dijit.layout.ContentPane" href="./bar" ioArgs="{timeout: 500}">
        ioArgs: {},
 
-       // 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,
-
-       // isLayoutContainer: [protected] Boolean
-       //              Indicates that this widget will call resize() on it's child widgets
-       //              when they become visible.
-       isLayoutContainer: true,
-
        // onLoadDeferred: [readonly] dojo.Deferred
-       //              This is the `dojo.Deferred` returned by attr('href', ...) and refresh().
+       //              This is the `dojo.Deferred` returned by set('href', ...) and refresh().
        //              Calling onLoadDeferred.addCallback() or addErrback() registers your
-       //              callback to be called only once, when the prior attr('href', ...) call or
+       //              callback to be called only once, when the prior set('href', ...) call or
        //              the initial href parameter to the constructor finishes loading.
        //
-       //              This is different than an onLoad() handler which gets called any time any href is loaded.
+       //              This is different than an onLoad() handler which gets called any time any href
+       //              or content is loaded.
        onLoadDeferred: null,
 
        // Override _Widget's attributeMap because we don't want the title attribute (used to specify
@@ -9389,99 +10108,71 @@ dojo.declare(
                title: []
        }),
 
+       // Flag to parser that I'll parse my contents, so it shouldn't.
+       stopParser: true,
+
+       // template: [private] Boolean
+       //              Flag from the parser that this ContentPane is inside a template
+       //              so the contents are pre-parsed.
+       // (TODO: this declaration can be commented out in 2.0)
+       template: false,
+
+       create: function(params, srcNodeRef){
+               // Convert a srcNodeRef argument into a content parameter, so that the original contents are
+               // processed in the same way as contents set via set("content", ...), calling the parser etc.
+               // Avoid modifying original params object since that breaks NodeList instantiation, see #11906.
+               if((!params || !params.template) && srcNodeRef && !("href" in params) && !("content" in params)){
+                       var df = dojo.doc.createDocumentFragment();
+                       srcNodeRef = dojo.byId(srcNodeRef)
+                       while(srcNodeRef.firstChild){
+                               df.appendChild(srcNodeRef.firstChild);
+                       }
+                       params = dojo.delegate(params, {content: df});
+               }
+               this.inherited(arguments, [params, srcNodeRef]);
+       },
+
        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);
-
-               // Detect if we were initialized with data
-               if(!this.href && this.srcNodeRef && this.srcNodeRef.innerHTML){
-                       this.isLoaded = true;
-               }
        },
 
        buildRendering: function(){
-               // Overrides Widget.buildRendering().
-               // Since we have no template we need to set this.containerNode ourselves.
-               // For subclasses of ContentPane do have a template, does nothing.
                this.inherited(arguments);
+
+               // Since we have no template we need to set this.containerNode ourselves, to make getChildren() work.
+               // For subclasses of ContentPane that do have a template, does nothing.
                if(!this.containerNode){
-                       // make getDescendants() work
                        this.containerNode = this.domNode;
                }
-       },
 
-       postCreate: function(){
                // remove the title attribute so it doesn't show up when hovering
-               // over a node
+               // over a node  (TODO: remove in 2.0, no longer needed after #11490)
                this.domNode.title = "";
 
                if(!dojo.attr(this.domNode,"role")){
                        dijit.setWaiRole(this.domNode, "group");
                }
-
-               dojo.addClass(this.domNode, this.baseClass);
        },
 
-       startup: function(){
+       _startChildren: function(){
                // summary:
-               //              See `dijit.layout._LayoutWidget.startup` for description.
-               //              Although ContentPane doesn't extend _LayoutWidget, it does implement
-               //              the same API.
-               if(this._started){ return; }
-
-               var parent = dijit._Contained.prototype.getParent.call(this);
-               this._childOfLayoutWidget = parent && parent.isLayoutContainer;
-
-               // I need to call resize() on my child/children (when I become visible), unless
-               // I'm the child of a layout widget in which case my parent will call resize() on me and I'll do it then.
-               this._needLayout = !this._childOfLayoutWidget;
-
-               if(this.isLoaded){
-                       dojo.forEach(this.getChildren(), function(child){
-                               child.startup();
-                       });
-               }
-
-               if(this._isShown() || this.preload){
-                       this._onShow();
-               }
+               //              Call startup() on all children including non _Widget ones like dojo.dnd.Source objects
 
+               // This starts all the widgets
                this.inherited(arguments);
-       },
-
-       _checkIfSingleChild: function(){
-               // summary:
-               //              Test if we have exactly one visible widget as a child,
-               //              and if so assume that we are a container for that widget,
-               //              and should propogate startup() and resize() calls to it.
-               //              Skips over things like data stores since they aren't visible.
-
-               var childNodes = dojo.query("> *", this.containerNode).filter(function(node){
-                               return node.tagName !== "SCRIPT"; // or a regexp for hidden elements like script|area|map|etc..
-                       }),
-                       childWidgetNodes = childNodes.filter(function(node){
-                               return dojo.hasAttr(node, "dojoType") || dojo.hasAttr(node, "widgetId");
-                       }),
-                       candidateWidgets = dojo.filter(childWidgetNodes.map(dijit.byNode), function(widget){
-                               return widget && widget.domNode && widget.resize;
-                       });
-
-               if(
-                       // all child nodes are widgets
-                       childNodes.length == childWidgetNodes.length &&
-
-                       // all but one are invisible (like dojo.data)
-                       candidateWidgets.length == 1
-               ){
-                       this._singleChild = candidateWidgets[0];
-               }else{
-                       delete this._singleChild;
-               }
 
-               // So we can set overflow: hidden to avoid a safari bug w/scrollbars showing up (#9449)
-               dojo.toggleClass(this.containerNode, this.baseClass + "SingleChild", !!this._singleChild);
+               // And this catches stuff like dojo.dnd.Source
+               if(this._contentSetter){
+                       dojo.forEach(this._contentSetter.parseResults, function(obj){
+                               if(!obj._started && !obj._destroyed && dojo.isFunction(obj.startup)){
+                                       obj.startup();
+                                       obj._started = true;
+                               }
+                       }, this);
+               }
        },
 
        setHref: function(/*String|Uri*/ href){
@@ -9492,23 +10183,25 @@ dojo.declare(
        },
        _setHrefAttr: function(/*String|Uri*/ href){
                // summary:
-               //              Hook so attr("href", ...) works.
+               //              Hook so set("href", ...) works.
                // description:
                //              Reset the (external defined) content of this pane and replace with new url
                //              Note: It delays the download until widget is shown if preload is false.
                //      href:
                //              url to the page you want to get, must be within the same domain as your mainpage
 
-               // Cancel any in-flight requests (an attr('href') will cancel any in-flight attr('href', ...))
+               // Cancel any in-flight requests (a set('href', ...) will cancel any in-flight set('href', ...))
                this.cancel();
 
                this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
+               this.onLoadDeferred.addCallback(dojo.hitch(this, "onLoad"));
 
-               this.href = href;
+               this._set("href", href);
 
                // _setHrefAttr() is called during creation and by the user, after creation.
-               // only in the second case do we actually load the URL; otherwise it's done in startup()
-               if(this._created && (this.preload || this._isShown())){
+               // Assuming preload == false, only in the second case do we actually load the URL;
+               // otherwise it's done in startup(), and only if this widget is shown.
+               if(this.preload || (this._created && this._isShown())){
                        this._load();
                }else{
                        // Set flag to indicate that href needs to be loaded the next time the
@@ -9527,7 +10220,7 @@ dojo.declare(
        },
        _setContentAttr: function(/*String|DomNode|Nodelist*/data){
                // summary:
-               //              Hook to make attr("content", ...) work.
+               //              Hook to make set("content", ...) work.
                //              Replaces old content with data content, include style classes from old content
                //      data:
                //              the new Content may be String, DomNode or NodeList
@@ -9537,24 +10230,30 @@ dojo.declare(
 
                // clear href so we can't run refresh and clear content
                // refresh should only work if we downloaded the content
-               this.href = "";
+               this._set("href", "");
 
-               // Cancel any in-flight requests (an attr('content') will cancel any in-flight attr('href', ...))
+               // Cancel any in-flight requests (a set('content', ...) will cancel any in-flight set('href', ...))
                this.cancel();
 
                // Even though user is just setting content directly, still need to define an onLoadDeferred
                // because the _onLoadHandler() handler is still getting called from setContent()
                this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
+               if(this._created){
+                       // For back-compat reasons, call onLoad() for set('content', ...)
+                       // calls but not for content specified in srcNodeRef (ie: <div dojoType=ContentPane>...</div>)
+                       // or as initialization parameter (ie: new ContentPane({content: ...})
+                       this.onLoadDeferred.addCallback(dojo.hitch(this, "onLoad"));
+               }
 
                this._setContent(data || "");
 
-               this._isDownloaded = false; // mark that content is from a attr('content') not an attr('href')
+               this._isDownloaded = false; // mark that content is from a set('content') not a set('href')
 
                return this.onLoadDeferred;     // dojo.Deferred
        },
        _getContentAttr: function(){
                // summary:
-               //              Hook to make attr("content") work
+               //              Hook to make get("content") work
                return this.containerNode.innerHTML;
        },
 
@@ -9587,69 +10286,6 @@ dojo.declare(
                this.inherited(arguments);
        },
 
-       resize: function(changeSize, resultSize){
-               // summary:
-               //              See `dijit.layout._LayoutWidget.resize` for description.
-               //              Although ContentPane doesn't extend _LayoutWidget, it does implement
-               //              the same API.
-
-               // For the TabContainer --> BorderContainer --> ContentPane case, _onShow() is
-               // never called, so resize() is our trigger to do the initial href download.
-               if(!this._wasShown){
-                       this._onShow();
-               }
-
-               this._resizeCalled = true;
-
-               // Set margin box size, unless it wasn't specified, in which case use current size.
-               if(changeSize){
-                       dojo.marginBox(this.domNode, changeSize);
-               }
-
-               // Compute content box size of containerNode in case we [later] need to size our single child.
-               var cn = this.containerNode;
-               if(cn === this.domNode){
-                       // If changeSize or resultSize was passed to this method and this.containerNode ==
-                       // this.domNode then we can compute the content-box size without querying the node,
-                       // which is more reliable (similar to LayoutWidget.resize) (see for example #9449).
-                       var mb = resultSize || {};
-                       dojo.mixin(mb, changeSize || {}); // changeSize overrides resultSize
-                       if(!("h" in mb) || !("w" in mb)){
-                               mb = dojo.mixin(dojo.marginBox(cn), mb); // just use dojo.marginBox() to fill in missing values
-                       }
-                       this._contentBox = dijit.layout.marginBox2contentBox(cn, mb);
-               }else{
-                       this._contentBox = dojo.contentBox(cn);
-               }
-
-               // Make my children layout, or size my single child widget
-               this._layoutChildren();
-       },
-
-       _isShown: function(){
-               // summary:
-               //              Returns true if the content is currently shown.
-               // description:
-               //              If I am a child of a layout widget then it actually returns true if I've ever been visible,
-               //              not whether I'm currently visible, since that's much faster than tracing up the DOM/widget
-               //              tree every call, and at least solves the performance problem on page load by deferring loading
-               //              hidden ContentPanes until they are first shown
-
-               if(this._childOfLayoutWidget){
-                       // If we are TitlePane, etc - we return that only *IF* we've been resized
-                       if(this._resizeCalled && "open" in this){
-                               return this.open;
-                       }
-                       return this._resizeCalled;
-               }else if("open" in this){
-                       return this.open;               // for TitlePane, etc.
-               }else{
-                       // TODO: with _childOfLayoutWidget check maybe this branch no longer necessary?
-                       var node = this.domNode;
-                       return (node.style.display != 'none') && (node.style.visibility != 'hidden') && !dojo.hasClass(node, "dijitHidden");
-               }
-       },
-
        _onShow: function(){
                // summary:
                //              Called when the ContentPane is made visible
@@ -9661,26 +10297,15 @@ dojo.declare(
                //              Does necessary processing, including href download and layout/resize of
                //              child widget(s)
 
+               this.inherited(arguments);
+
                if(this.href){
                        if(!this._xhrDfd && // if there's an href that isn't already being loaded
                                (!this.isLoaded || this._hrefChanged || this.refreshOnShow)
                        ){
-                               this.refresh();
-                       }
-               }else{
-                       // If we are the child of a layout widget then the layout widget will call resize() on
-                       // us, and then we will size our child/children.   Otherwise, we need to do it now.
-                       if(!this._childOfLayoutWidget && this._needLayout){
-                               // If a layout has been scheduled for when we become visible, do it now
-                               this._layoutChildren();
+                               return this.refresh();  // If child has an href, promise that fires when the load is complete
                        }
                }
-
-               this.inherited(arguments);
-
-               // Need to keep track of whether ContentPane has been shown (which is different than
-               // whether or not it's currently visible).
-               this._wasShown = true;
        },
 
        refresh: function(){
@@ -9695,8 +10320,9 @@ dojo.declare(
                this.cancel();
 
                this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
+               this.onLoadDeferred.addCallback(dojo.hitch(this, "onLoad"));
                this._load();
-               return this.onLoadDeferred;
+               return this.onLoadDeferred;             // If child has an href, promise that fires when refresh is complete
        },
 
        _load: function(){
@@ -9746,10 +10372,9 @@ dojo.declare(
        _onLoadHandler: function(data){
                // summary:
                //              This is called whenever new content is being loaded
-               this.isLoaded = true;
+               this._set("isLoaded", true);
                try{
                        this.onLoadDeferred.callback(data);
-                       this.onLoad(data);
                }catch(e){
                        console.error('Error '+this.widgetId+' running custom onLoad code: ' + e.message);
                }
@@ -9758,7 +10383,7 @@ dojo.declare(
        _onUnloadHandler: function(){
                // summary:
                //              This is called whenever the content is being unloaded
-               this.isLoaded = false;
+               this._set("isLoaded", false);
                try{
                        this.onUnload();
                }catch(e){
@@ -9804,7 +10429,7 @@ dojo.declare(
                delete this._singleChild;
        },
 
-       _setContent: function(cont, isFakeContent){
+       _setContent: function(/*String|DocumentFragment*/ cont, /*Boolean*/ isFakeContent){
                // summary:
                //              Insert the content into the container node
 
@@ -9839,31 +10464,31 @@ dojo.declare(
                        cleanContent: this.cleanContent,
                        extractContent: this.extractContent,
                        parseContent: this.parseOnLoad,
+                       parserScope: this.parserScope,
+                       startup: false,
                        dir: this.dir,
                        lang: this.lang
                }, this._contentSetterParams || {});
 
-               dojo.mixin(setter, setterParams);
-
-               setter.set( (dojo.isObject(cont) && cont.domNode) ? cont.domNode : cont );
+               setter.set( (dojo.isObject(cont) && cont.domNode) ? cont.domNode : cont, setterParams );
 
                // setter params must be pulled afresh from the ContentPane each time
                delete this._contentSetterParams;
 
-               if(!isFakeContent){
-                       // Startup each top level child widget (and they will start their children, recursively)
-                       dojo.forEach(this.getChildren(), function(child){
-                               // The parser has already called startup on all widgets *without* a getParent() method
-                               if(!this.parseOnLoad || child.getParent){
-                                       child.startup();
-                               }
-                       }, this);
+               if(this.doLayout){
+                       this._checkIfSingleChild();
+               }
 
-                       // Call resize() on each of my child layout widgets,
-                       // or resize() on my single child layout widget...
-                       // either now (if I'm currently visible)
-                       // or when I become visible
-                       this._scheduleLayout();
+               if(!isFakeContent){
+                       if(this._started){
+                               // Startup each top level child widget (and they will start their children, recursively)
+                               this._startChildren();
+       
+                               // Call resize() on each of my child layout widgets,
+                               // or resize() on my single child layout widget...
+                               // either now (if I'm currently visible) or when I become visible
+                               this._scheduleLayout();
+                       }
 
                        this._onLoadHandler(cont);
                }
@@ -9873,7 +10498,7 @@ dojo.declare(
                this.onLoadDeferred.errback(err);
 
                // shows user the string that is returned by on[type]Error
-               // overide on[type]Error and return your own string to customize
+               // override on[type]Error and return your own string to customize
                var errText = this['on' + type + 'Error'].call(this, err);
                if(consoleText){
                        console.error(consoleText, err);
@@ -9882,48 +10507,6 @@ dojo.declare(
                }
        },
 
-       _scheduleLayout: function(){
-               // summary:
-               //              Call resize() on each of my child layout widgets, either now
-               //              (if I'm currently visible) or when I become visible
-               if(this._isShown()){
-                       this._layoutChildren();
-               }else{
-                       this._needLayout = true;
-               }
-       },
-
-       _layoutChildren: function(){
-               // summary:
-               //              Since I am a Container widget, each of my children expects me to
-               //              call resize() or layout() on them.
-               // description:
-               //              Should be called on initialization and also whenever we get new content
-               //              (from an href, or from attr('content', ...))... but deferred until
-               //              the ContentPane is visible
-
-               if(this.doLayout){
-                       this._checkIfSingleChild();
-               }
-
-               if(this._singleChild && this._singleChild.resize){
-                       var cb = this._contentBox || dojo.contentBox(this.containerNode);
-
-                       // note: if widget has padding this._contentBox will have l and t set,
-                       // but don't pass them to resize() or it will doubly-offset the child
-                       this._singleChild.resize({w: cb.w, h: cb.h});
-               }else{
-                       // All my child widgets are independently sized (rather than matching my size),
-                       // but I still need to call resize() on each child to make it layout.
-                       dojo.forEach(this.getChildren(), function(widget){
-                               if(widget.resize){
-                                       widget.resize();
-                               }
-                       });
-               }
-               delete this._needLayout;
-       },
-
        // EVENT's, should be overide-able
        onLoad: function(data){
                // summary:
@@ -10035,12 +10618,16 @@ dojo.declare(
                        //              Set by `dijit._DialogMixin._getFocusItems`.
                        _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"),
+                       templateString: dojo.cache("dijit", "templates/TooltipDialog.html", "<div role=\"presentation\" tabIndex=\"-1\">\n\t<div class=\"dijitTooltipContainer\" role=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" role=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" role=\"presentation\"></div>\n</div>\n"),
+
+                       _setTitleAttr: function(/*String*/ title){
+                               this.containerNode.title = title;
+                               this._set("title", title)
+                       },
 
                        postCreate: function(){
                                this.inherited(arguments);
                                this.connect(this.containerNode, "onkeypress", "_onKey");
-                               this.containerNode.title = this.title;
                        },
 
                        orient: function(/*DomNode*/ node, /*String*/ aroundCorner, /*String*/ corner){
@@ -10050,13 +10637,19 @@ dojo.declare(
                                //              directly.
                                // tags:
                                //              protected
-                               var c = this._currentOrientClass;
-                               if(c){
-                                       dojo.removeClass(this.domNode, c);
-                               }
-                               c = "dijitTooltipAB"+(corner.charAt(1) == 'L'?"Left":"Right")+" dijitTooltip"+(corner.charAt(0) == 'T' ? "Below" : "Above");
-                               dojo.addClass(this.domNode, c);
-                               this._currentOrientClass = c;
+                               var newC = "dijitTooltipAB" + (corner.charAt(1) == 'L' ? "Left" : "Right")
+                                               + " dijitTooltip"
+                                               + (corner.charAt(0) == 'T' ? "Below" : "Above");
+                               
+                               dojo.replaceClass(this.domNode, newC, this._currentOrientClass || "");
+                               this._currentOrientClass = newC;
+                       },
+
+                       focus: function(){
+                               // summary:
+                               //              Focus on first field
+                               this._getFocusItems(this.containerNode);
+                               dijit.focus(this._firstFocusItem);
                        },
 
                        onOpen: function(/*Object*/ pos){
@@ -10068,11 +10661,6 @@ dojo.declare(
 
                                this.orient(this.domNode,pos.aroundCorner, pos.corner);
                                this._onShow(); // lazy load trigger
-
-                               if(this.autofocus){
-                                       this._getFocusItems(this.containerNode);
-                                       dijit.focus(this._firstFocusItem);
-                               }
                        },
 
                        onClose: function(){
@@ -10141,6 +10729,8 @@ dojo.provide("dijit.Dialog");
 
 
 
+// dijit/TooltipDialog required for back-compat.  TODO: remove in 2.0
+
 /*=====
 dijit._underlay = function(kwArgs){
        // summary:
@@ -10152,7 +10742,6 @@ dijit._underlay = function(kwArgs){
        //              or subclass thereof is shown.
 };
 =====*/
-
 dojo.declare(
        "dijit._DialogBase",
        [dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin, dijit._CssStateMixin],
@@ -10173,7 +10762,7 @@ dojo.declare(
                // |    dojo.body().appendChild(foo.domNode);
                // |    foo.startup();
 
-               templateString: dojo.cache("dijit", "templates/Dialog.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\"></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\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),
+               templateString: dojo.cache("dijit", "templates/Dialog.html", "<div class=\"dijitDialog\" role=\"dialog\" aria-labelledby=\"${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"ondijitclick: onCancel\" title=\"${buttonCancel}\" role=\"button\" tabIndex=\"-1\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),
                
                baseClass: "dijitDialog",
                
@@ -10189,7 +10778,7 @@ dojo.declare(
                        "aria-describedby":""
                }),
 
-               // open: Boolean
+               // open: [readonly] Boolean
                //              True if Dialog is currently displayed on screen.
                open: false,
 
@@ -10209,12 +10798,12 @@ dojo.declare(
                //              False will disable autofocusing. Default: true
                autofocus: true,
 
-               // _firstFocusItem: [private] [readonly] DomNode
+               // _firstFocusItem: [private readonly] DomNode
                //              The pointer to the first focusable node in the dialog.
                //              Set by `dijit._DialogMixin._getFocusItems`.
                _firstFocusItem: null,
 
-               // _lastFocusItem: [private] [readonly] DomNode
+               // _lastFocusItem: [private readonly] DomNode
                //              The pointer to which node has focus prior to our dialog.
                //              Set by `dijit._DialogMixin._getFocusItems`.
                _lastFocusItem: null,
@@ -10266,14 +10855,14 @@ dojo.declare(
                        // summary:
                        //              Called when data has been loaded from an href.
                        //              Unlike most other callbacks, this function can be connected to (via `dojo.connect`)
-                       //              but should *not* be overriden.
+                       //              but should *not* be overridden.
                        // tags:
                        //              callback
 
                        // when href is specified we need to reposition the dialog after the data is loaded
                        // and find the focusable elements
                        this._position();
-                       if(this.autofocus){
+                       if(this.autofocus && dijit._DialogLevelManager.isTop(this)){
                                this._getFocusItems(this.domNode);
                                dijit.focus(this._firstFocusItem);
                        }
@@ -10304,7 +10893,7 @@ dojo.declare(
                                this._moveable = (dojo.isIE == 6) ?
                                        new dojo.dnd.TimedMoveable(node, { handle: this.titleBar }) :   // prevent overload, see #5285
                                        new dojo.dnd.Moveable(node, { handle: this.titleBar, timeout: 0 });
-                               dojo.subscribe("/dnd/move/stop",this,"_endDrag");
+                               this._dndListener = dojo.subscribe("/dnd/move/stop",this,"_endDrag");
                        }else{
                                dojo.addClass(node,"dijitDialogFixed");
                        }
@@ -10313,95 +10902,6 @@ dojo.declare(
                                dialogId: this.id,
                                "class": dojo.map(this["class"].split(/\s/), function(s){ return s+"_underlay"; }).join(" ")
                        };
-
-                       this._fadeIn = dojo.fadeIn({
-                               node: node,
-                               duration: this.duration,
-                               beforeBegin: dojo.hitch(this, function(){
-                                       var underlay = dijit._underlay;
-                                       if(!underlay){
-                                               underlay = dijit._underlay = new dijit.DialogUnderlay(this.underlayAttrs);
-                                       }else{
-                                               underlay.set(this.underlayAttrs);
-                                       }
-
-                                       var ds = dijit._dialogStack,
-                                               zIndex = 948 + ds.length*2;
-                                       if(ds.length == 1){     // first dialog
-                                               underlay.show();
-                                       }
-                                       dojo.style(dijit._underlay.domNode, 'zIndex', zIndex);
-                                       dojo.style(this.domNode, 'zIndex', zIndex + 1);
-                               }),
-                               onEnd: dojo.hitch(this, function(){
-                                       if(this.autofocus){
-                                               // find focusable Items each time dialog is shown since if dialog contains a widget the
-                                               // first focusable items can change
-                                               this._getFocusItems(this.domNode);
-                                               dijit.focus(this._firstFocusItem);
-                                       }
-                               })
-                        });
-
-                       this._fadeOut = dojo.fadeOut({
-                               node: node,
-                               duration: this.duration,
-                               onEnd: dojo.hitch(this, function(){
-                                       node.style.display = "none";
-
-                                       // Restore the previous dialog in the stack, or if this is the only dialog
-                                       // then restore to original page
-                                       var ds = dijit._dialogStack;
-                                       if(ds.length == 0){
-                                               dijit._underlay.hide();
-                                       }else{
-                                               dojo.style(dijit._underlay.domNode, 'zIndex', 948 + ds.length*2);
-                                               dijit._underlay.set(ds[ds.length-1].underlayAttrs);
-                                       }
-
-                                       // Restore focus to wherever it was before this dialog was displayed
-                                       if(this.refocus){
-                                               var focus = this._savedFocus;
-
-                                               // If we are returning control to a previous dialog but for some reason
-                                               // that dialog didn't have a focused field, set focus to first focusable item.
-                                               // This situation could happen if two dialogs appeared at nearly the same time,
-                                               // since a dialog doesn't set it's focus until the fade-in is finished.
-                                               if(ds.length > 0){
-                                                       var pd = ds[ds.length-1];
-                                                       if(!dojo.isDescendant(focus.node, pd.domNode)){
-                                                               pd._getFocusItems(pd.domNode);
-                                                               focus = pd._firstFocusItem;
-                                                       }
-                                               }
-
-                                               dijit.focus(focus);
-                                       }
-                               })
-                        });
-               },
-
-               uninitialize: function(){
-                       var wasPlaying = false;
-                       if(this._fadeIn && this._fadeIn.status() == "playing"){
-                               wasPlaying = true;
-                               this._fadeIn.stop();
-                       }
-                       if(this._fadeOut && this._fadeOut.status() == "playing"){
-                               wasPlaying = true;
-                               this._fadeOut.stop();
-                       }
-                       
-                       // Hide the underlay, unless the underlay widget has already been destroyed
-                       // because we are being called during page unload (when all widgets are destroyed)
-                       if((this.open || wasPlaying) && !dijit._underlay._destroyed){
-                               dijit._underlay.hide();
-                       }
-
-                       if(this._moveable){
-                               this._moveable.destroy();
-                       }
-                       this.inherited(arguments);
                },
 
                _size: function(){
@@ -10427,7 +10927,7 @@ dojo.declare(
                                });
                        }
 
-                       var mb = dojo.marginBox(this.domNode);
+                       var mb = dojo._getMarginSize(this.domNode);
                        var viewport = dojo.window.getBox();
                        if(mb.w >= viewport.w || mb.h >= viewport.h){
                                // Reduce size of dialog contents so that dialog fits in viewport
@@ -10482,12 +10982,6 @@ dojo.declare(
                        // tags:
                        //              private
 
-                       var ds = dijit._dialogStack;
-                       if(ds[ds.length-1] != this){
-                               // console.debug(this.id + ': skipping because', this, 'is not the active dialog');
-                               return;
-                       }
-
                        if(evt.charOrCode){
                                var dk = dojo.keys;
                                var node = evt.target;
@@ -10534,16 +11028,23 @@ dojo.declare(
                show: function(){
                        // summary:
                        //              Display the dialog
+                       // returns: dojo.Deferred
+                       //              Deferred object that resolves when the display animation is complete
+
                        if(this.open){ return; }
 
+                       if(!this._started){
+                               this.startup();
+                       }
+
                        // first time we show the dialog, there's some initialization stuff to do
                        if(!this._alreadyInitialized){
                                this._setup();
                                this._alreadyInitialized=true;
                        }
 
-                       if(this._fadeOut.status() == "playing"){
-                               this._fadeOut.stop();
+                       if(this._fadeOutDeferred){
+                               this._fadeOutDeferred.cancel();
                        }
 
                        this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout"));
@@ -10558,43 +11059,81 @@ dojo.declare(
                                        this._oldViewport = viewport;
                                }
                        }));
-                       this._modalconnects.push(dojo.connect(dojo.doc.documentElement, "onkeypress", this, "_onKey"));
+                       this._modalconnects.push(dojo.connect(this.domNode, "onkeypress", this, "_onKey"));
 
                        dojo.style(this.domNode, {
                                opacity:0,
                                display:""
                        });
 
-                       this.open = true;
+                       this._set("open", true);
                        this._onShow(); // lazy load trigger
 
                        this._size();
                        this._position();
-                       dijit._dialogStack.push(this);
-                       this._fadeIn.play();
 
-                       this._savedFocus = dijit.getFocus(this);
+                       // fade-in Animation object, setup below
+                       var fadeIn;
+
+                       this._fadeInDeferred = new dojo.Deferred(dojo.hitch(this, function(){
+                               fadeIn.stop();
+                               delete this._fadeInDeferred;
+                       }));
+
+                       fadeIn = dojo.fadeIn({
+                               node: this.domNode,
+                               duration: this.duration,
+                               beforeBegin: dojo.hitch(this, function(){
+                                       dijit._DialogLevelManager.show(this, this.underlayAttrs);
+                               }),
+                               onEnd: dojo.hitch(this, function(){
+                                       if(this.autofocus && dijit._DialogLevelManager.isTop(this)){
+                                               // find focusable items each time dialog is shown since if dialog contains a widget the
+                                               // first focusable items can change
+                                               this._getFocusItems(this.domNode);
+                                               dijit.focus(this._firstFocusItem);
+                                       }
+                                       this._fadeInDeferred.callback(true);
+                                       delete this._fadeInDeferred;
+                               })
+                       }).play();
+                       
+                       return this._fadeInDeferred;
                },
 
                hide: function(){
                        // summary:
                        //              Hide the dialog
+                       // returns: dojo.Deferred
+                       //              Deferred object that resolves when the hide animation is complete
 
                        // if we haven't been initialized yet then we aren't showing and we can just return
-                       // or if we aren't the active dialog, don't allow us to close yet
-                       var ds = dijit._dialogStack;
-                       if(!this._alreadyInitialized || this != ds[ds.length-1]){
+                       if(!this._alreadyInitialized){
                                return;
                        }
-
-                       if(this._fadeIn.status() == "playing"){
-                               this._fadeIn.stop();
+                       if(this._fadeInDeferred){
+                               this._fadeInDeferred.cancel();
                        }
 
-                       // throw away current active dialog from stack -- making the previous dialog or the node on the original page active
-                       ds.pop();
+                       // fade-in Animation object, setup below
+                       var fadeOut;
+
+                       this._fadeOutDeferred = new dojo.Deferred(dojo.hitch(this, function(){
+                               fadeOut.stop();
+                               delete this._fadeOutDeferred;
+                       }));
 
-                       this._fadeOut.play();
+                       fadeOut = dojo.fadeOut({
+                               node: this.domNode,
+                               duration: this.duration,
+                               onEnd: dojo.hitch(this, function(){
+                                       this.domNode.style.display = "none";
+                                       dijit._DialogLevelManager.hide(this);
+                                       this.onHide();
+                                       this._fadeOutDeferred.callback(true);
+                                       delete this._fadeOutDeferred;
+                               })
+                        }).play();
 
                        if(this._scrollConnected){
                                this._scrollConnected = false;
@@ -10605,9 +11144,9 @@ dojo.declare(
                        if(this._relativePosition){
                                delete this._relativePosition;
                        }
-                       this.open = false;
+                       this._set("open", false);
 
-                       this.onHide();
+                       return this._fadeOutDeferred;
                },
 
                layout: function(){
@@ -10619,31 +11158,161 @@ dojo.declare(
                                if(dijit._underlay){    // avoid race condition during show()
                                        dijit._underlay.layout();
                                }
-                               this._position();
+                               this._position();
+                       }
+               },
+
+               destroy: function(){
+                       if(this._fadeInDeferred){
+                               this._fadeInDeferred.cancel();
+                       }
+                       if(this._fadeOutDeferred){
+                               this._fadeOutDeferred.cancel();
+                       }
+                       if(this._moveable){
+                               this._moveable.destroy();
+                       }
+                       if(this._dndListener){
+                               dojo.unsubscribe(this._dndListener);
+                       }
+                       dojo.forEach(this._modalconnects, dojo.disconnect);
+
+                       dijit._DialogLevelManager.hide(this);
+
+                       this.inherited(arguments);
+               }
+       }
+);
+
+dojo.declare(
+       "dijit.Dialog",
+       [dijit.layout.ContentPane, dijit._DialogBase],
+       {}
+);
+
+dijit._DialogLevelManager = {
+       // summary:
+       //              Controls the various active "levels" on the page, starting with the
+       //              stuff initially visible on the page (at z-index 0), and then having an entry for
+       //              each Dialog shown.
+
+       show: function(/*dijit._Widget*/ dialog, /*Object*/ underlayAttrs){
+               // summary:
+               //              Call right before fade-in animation for new dialog.
+               //              Saves current focus, displays/adjusts underlay for new dialog,
+               //              and sets the z-index of the dialog itself.
+               //
+               //              New dialog will be displayed on top of all currently displayed dialogs.
+               //
+               //              Caller is responsible for setting focus in new dialog after the fade-in
+               //              animation completes.
+
+               var ds = dijit._dialogStack;
+
+               // Save current focus
+               ds[ds.length-1].focus = dijit.getFocus(dialog);
+
+               // Display the underlay, or if already displayed then adjust for this new dialog
+               var underlay = dijit._underlay;
+               if(!underlay || underlay._destroyed){
+                       underlay = dijit._underlay = new dijit.DialogUnderlay(underlayAttrs);
+               }else{
+                       underlay.set(dialog.underlayAttrs);
+               }
+
+               // Set z-index a bit above previous dialog
+               var zIndex = ds[ds.length-1].dialog ? ds[ds.length-1].zIndex + 2 : 950;
+               if(ds.length == 1){     // first dialog
+                       underlay.show();
+               }
+               dojo.style(dijit._underlay.domNode, 'zIndex', zIndex - 1);
+
+               // Dialog
+               dojo.style(dialog.domNode, 'zIndex', zIndex);
+
+               ds.push({dialog: dialog, underlayAttrs: underlayAttrs, zIndex: zIndex});
+       },
+
+       hide: function(/*dijit._Widget*/ dialog){
+               // summary:
+               //              Called when the specified dialog is hidden/destroyed, after the fade-out
+               //              animation ends, in order to reset page focus, fix the underlay, etc.
+               //              If the specified dialog isn't open then does nothing.
+               //
+               //              Caller is responsible for either setting display:none on the dialog domNode,
+               //              or calling dijit.popup.hide(), or removing it from the page DOM.
+
+               var ds = dijit._dialogStack;
+
+               if(ds[ds.length-1].dialog == dialog){
+                       // Removing the top (or only) dialog in the stack, return focus
+                       // to previous dialog
+
+                       ds.pop();
+
+                       var pd = ds[ds.length-1];       // the new active dialog (or the base page itself)
+
+                       // Adjust underlay
+                       if(ds.length == 1){
+                               // Returning to original page.
+                               // Hide the underlay, unless the underlay widget has already been destroyed
+                               // because we are being called during page unload (when all widgets are destroyed)
+                               if(!dijit._underlay._destroyed){
+                                       dijit._underlay.hide();
+                               }
+                       }else{
+                               // Popping back to previous dialog, adjust underlay
+                               dojo.style(dijit._underlay.domNode, 'zIndex', pd.zIndex - 1);
+                               dijit._underlay.set(pd.underlayAttrs);
+                       }
+
+                       // Adjust focus
+                       if(dialog.refocus){
+                               // If we are returning control to a previous dialog but for some reason
+                               // that dialog didn't have a focused field, set focus to first focusable item.
+                               // This situation could happen if two dialogs appeared at nearly the same time,
+                               // since a dialog doesn't set it's focus until the fade-in is finished.
+                               var focus = pd.focus;
+                               if(!focus || (pd.dialog && !dojo.isDescendant(focus.node, pd.dialog.domNode))){
+                                       pd.dialog._getFocusItems(pd.dialog.domNode);
+                                       focus = pd.dialog._firstFocusItem;
+                               }
+       
+                               try{
+                                       dijit.focus(focus);
+                               }catch(e){
+                                       /* focus() will fail if user opened the dialog by clicking a non-focusable element */
+                               }
                        }
-               },
-
-               destroy: function(){
-                       dojo.forEach(this._modalconnects, dojo.disconnect);
-                       if(this.refocus && this.open){
-                               setTimeout(dojo.hitch(dijit,"focus",this._savedFocus), 25);
+               }else{
+                       // Removing a dialog out of order (#9944, #10705).
+                       // Don't need to mess with underlay or z-index or anything.
+                       var idx = dojo.indexOf(dojo.map(ds, function(elem){return elem.dialog}), dialog);
+                       if(idx != -1){
+                               ds.splice(idx, 1);
                        }
-                       this.inherited(arguments);
                }
-       }
-);
-
-dojo.declare(
-       "dijit.Dialog",
-       [dijit.layout.ContentPane, dijit._DialogBase],
-       {}
-);
-
-// Stack of currenctly displayed dialogs, layered on top of each other
-dijit._dialogStack = [];
+       },
 
-// For back-compat.  TODO: remove in 2.0
+       isTop: function(/*dijit._Widget*/ dialog){
+               // summary:
+               //              Returns true if specified Dialog is the top in the task
+               var ds = dijit._dialogStack;
+               return ds[ds.length-1].dialog == dialog;
+       }
+};
 
+// Stack representing the various active "levels" on the page, starting with the
+// stuff initially visible on the page (at z-index 0), and then having an entry for
+// each Dialog shown.
+// Each element in stack has form {
+//             dialog: dialogWidget,
+//             focus: returnFromGetFocus(),
+//             underlayAttrs: attributes to set on underlay (when this widget is active)
+// }
+dijit._dialogStack = [
+       {dialog: null, focus: null, underlayAttrs: null}        // entry for stuff at z-index: 0
+];
 
 }
 
@@ -10653,7 +11322,6 @@ dojo.provide("dijit._HasDropDown");
 
 
 
-
 dojo.declare("dijit._HasDropDown",
        null,
        {
@@ -10702,8 +11370,9 @@ dojo.declare("dijit._HasDropDown",
                forceWidth: false,
 
                // maxHeight: [protected] Integer
-               //              The max height for our dropdown.  Set to 0 for no max height.
-               //              any dropdown taller than this will have scrollbars
+               //              The max height for our dropdown.
+               //              Any dropdown taller than this will have scrollbars.
+               //              Set to 0 for no max height, or -1 to limit height to available space in viewport
                maxHeight: 0,
 
                // dropDownPosition: [const] String[]
@@ -10733,6 +11402,8 @@ dojo.declare("dijit._HasDropDown",
 
                        if(this.disabled || this.readOnly){ return; }
 
+                       dojo.stopEvent(e);
+
                        this._docHandler = this.connect(dojo.doc, "onmouseup", "_onDropDownMouseUp");
 
                        this.toggleDropDown();
@@ -10786,7 +11457,7 @@ dojo.declare("dijit._HasDropDown",
                                        }
                                }
                        }
-                       if(this._opened && dropDown.focus){
+                       if(this._opened && dropDown.focus && dropDown.autoFocus !== false){
                                // Focus the dropdown widget - do it on a delay so that we
                                // don't steal our own focus.
                                window.setTimeout(dojo.hitch(dropDown, "focus"), 1);
@@ -10797,27 +11468,14 @@ dojo.declare("dijit._HasDropDown",
                        // the drop down was already opened on mousedown/keydown; just need to call stopEvent()
                        if(this._stopClickEvents){
                                dojo.stopEvent(e);
-                       }                       
+                       }
                },
 
-               _setupDropdown: function(){
-                       // summary:
-                       //              set up nodes and connect our mouse and keypress events
+               buildRendering: function(){
+                       this.inherited(arguments);
+
                        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", "_onDropDownMouseDown");
-                       this.connect(this._buttonNode, "onclick", "_onDropDownClick");
-                       this.connect(this._buttonNode, "onkeydown", "_onDropDownKeydown");
-                       this.connect(this._buttonNode, "onkeyup", "_onKey");
-
-                       // If we have a _setStateClass function (which happens when
-                       // we are a form widget), then we need to connect our open/close
-                       // functions to it
-                       if(this._setStateClass){
-                               this.connect(this, "openDropDown", "_setStateClass");
-                               this.connect(this, "closeDropDown", "_setStateClass");
-                       }
 
                        // Add a class to the "dijitDownArrowButton" type class to _buttonNode so theme can set direction of arrow
                        // based on where drop down will normally appear
@@ -10833,11 +11491,18 @@ dojo.declare("dijit._HasDropDown",
                },
 
                postCreate: function(){
-                       this._setupDropdown();
+                       // summary:
+                       //              set up nodes and connect our mouse and keypress events
+
                        this.inherited(arguments);
+
+                       this.connect(this._buttonNode, "onmousedown", "_onDropDownMouseDown");
+                       this.connect(this._buttonNode, "onclick", "_onDropDownClick");
+                       this.connect(this.focusNode, "onkeypress", "_onKey");
+                       this.connect(this.focusNode, "onkeyup", "_onKeyUp");
                },
 
-               destroyDescendants: function(){
+               destroy: function(){
                        if(this.dropDown){
                                // Destroy the drop down, unless it's already been destroyed.  This can happen because
                                // the drop down is a direct child of <body> even though it's logically my child.
@@ -10849,27 +11514,43 @@ dojo.declare("dijit._HasDropDown",
                        this.inherited(arguments);
                },
 
-               _onDropDownKeydown: function(/*Event*/ e){
-                       if(e.keyCode == dojo.keys.DOWN_ARROW || e.keyCode == dojo.keys.ENTER || e.keyCode == dojo.keys.SPACE){
-                               e.preventDefault();     // stop IE screen jump
-                       }
-               },
-
                _onKey: function(/*Event*/ e){
                        // summary:
                        //              Callback when the user presses a key while focused on the button node
 
                        if(this.disabled || this.readOnly){ return; }
-                       var d = this.dropDown;
+
+                       var d = this.dropDown, target = e.target;
                        if(d && this._opened && d.handleKey){
-                               if(d.handleKey(e) === false){ return; }
+                               if(d.handleKey(e) === false){
+                                       /* false return code means that the drop down handled the key */
+                                       dojo.stopEvent(e);
+                                       return;
+                               }
                        }
-                       if(d && this._opened && e.keyCode == dojo.keys.ESCAPE){
-                               this.toggleDropDown();
-                       }else if(d && !this._opened && 
-                                       (e.keyCode == dojo.keys.DOWN_ARROW || e.keyCode == dojo.keys.ENTER || e.keyCode == dojo.keys.SPACE)){
+                       if(d && this._opened && e.charOrCode == dojo.keys.ESCAPE){
+                               this.closeDropDown();
+                               dojo.stopEvent(e);
+                       }else if(!this._opened &&
+                                       (e.charOrCode == dojo.keys.DOWN_ARROW ||
+                                               ( (e.charOrCode == dojo.keys.ENTER || e.charOrCode == " ") &&
+                                                 //ignore enter and space if the event is for a text input
+                                                 ((target.tagName || "").toLowerCase() !== 'input' ||
+                                                    (target.type && target.type.toLowerCase() !== 'text'))))){
+                               // Toggle the drop down, but wait until keyup so that the drop down doesn't
+                               // get a stray keyup event, or in the case of key-repeat (because user held
+                               // down key for too long), stray keydown events
+                               this._toggleOnKeyUp = true;
+                               dojo.stopEvent(e);
+                       }
+               },
+
+               _onKeyUp: function(){
+                       if(this._toggleOnKeyUp){
+                               delete this._toggleOnKeyUp;
                                this.toggleDropDown();
-                               if(d.focus){
+                               var d = this.dropDown;  // drop down may not exist until toggleDropDown() call
+                               if(d && d.focus){
                                        setTimeout(dojo.hitch(d, "focus"), 1);
                                }
                        }
@@ -10879,8 +11560,14 @@ dojo.declare("dijit._HasDropDown",
                        // summary:
                        //              Called magically when focus has shifted away from this widget and it's dropdown
 
-                       this.closeDropDown();
-                       // don't focus on button.  the user has explicitly focused on something else.
+                       // Don't focus on button if the user has explicitly focused on something else (happens
+                       // when user clicks another control causing the current popup to close)..
+                       // But if focus is inside of the drop down then reset focus to me, because IE doesn't like
+                       // it when you display:none a node with focus.
+                       var focusMe = dijit._curFocus && this.dropDown && dojo.isDescendant(dijit._curFocus, this.dropDown.domNode);
+
+                       this.closeDropDown(focusMe);
+
                        this.inherited(arguments);
                },
 
@@ -10897,7 +11584,8 @@ dojo.declare("dijit._HasDropDown",
                loadDropDown: function(/* Function */ loadCallback){
                        // summary:
                        //              Loads the data for the dropdown, and at some point, calls
-                       //              the given callback
+                       //              the given callback.   This is basically a callback when the
+                       //              user presses the down arrow button to open the drop down.
                        // tags:
                        //              protected
 
@@ -10906,14 +11594,13 @@ dojo.declare("dijit._HasDropDown",
 
                toggleDropDown: function(){
                        // summary:
+                       //              Callback when the user presses the down arrow button or presses
+                       //              the down arrow key to open/close the drop down.
                        //              Toggle the drop-down widget; if it is up, close it, if not, open it
                        // tags:
                        //              protected
 
                        if(this.disabled || this.readOnly){ return; }
-                       this.focus();
-                       var dropDown = this.dropDown;
-                       if(!dropDown){ return; }
                        if(!this._opened){
                                // If we aren't loaded, load it first so there isn't a flicker
                                if(!this.isLoaded()){
@@ -10929,14 +11616,17 @@ dojo.declare("dijit._HasDropDown",
 
                openDropDown: function(){
                        // summary:
-                       //              Opens the dropdown for this widget - it returns the
-                       //              return value of dijit.popup.open
+                       //              Opens the dropdown for this widget.   To be called only when this.dropDown
+                       //              has been created and is ready to display (ie, it's data is loaded).
+                       // returns:
+                       //              return value of dijit.popup.open()
                        // tags:
                        //              protected
 
-                       var dropDown = this.dropDown;
-                       var ddNode = dropDown.domNode;
-                       var self = this;
+                       var dropDown = this.dropDown,
+                               ddNode = dropDown.domNode,
+                               aroundNode = this._aroundNode || this.domNode,
+                               self = this;
 
                        // Prepare our popup's height and honor maxHeight if it exists.
 
@@ -10944,8 +11634,7 @@ dojo.declare("dijit._HasDropDown",
                        // ie, dependent on how much space is available (BK)
 
                        if(!this._preparedNode){
-                               dijit.popup.moveOffScreen(ddNode);
-                               this._preparedNode = true;                      
+                               this._preparedNode = true;
                                // Check if we have explicitly set width and height on the dropdown widget dom node
                                if(ddNode.style.width){
                                        this._explicitDDWidth = true;
@@ -10969,29 +11658,44 @@ dojo.declare("dijit._HasDropDown",
                                }
                                dojo.style(ddNode, myStyle);
                                
+                               // Figure out maximum height allowed (if there is a height restriction)
+                               var maxHeight = this.maxHeight;
+                               if(maxHeight == -1){
+                                       // limit height to space available in viewport either above or below my domNode
+                                       // (whichever side has more room)
+                                       var viewport = dojo.window.getBox(),
+                                               position = dojo.position(aroundNode, false);
+                                       maxHeight = Math.floor(Math.max(position.y, viewport.h - (position.y + position.h)));
+                               }
+
+                               // Attach dropDown to DOM and make make visibility:hidden rather than display:none
+                               // so we call startup() and also get the size
+                               if(dropDown.startup && !dropDown._started){
+                                       dropDown.startup();
+                               }
+
+                               dijit.popup.moveOffScreen(dropDown);
                                // Get size of drop down, and determine if vertical scroll bar needed
-                               var mb = dojo.marginBox(ddNode);
-                               var overHeight = (this.maxHeight && mb.h > this.maxHeight);
+                               var mb = dojo._getMarginSize(ddNode);
+                               var overHeight = (maxHeight && mb.h > maxHeight);
                                dojo.style(ddNode, {
                                        overflowX: "hidden",
                                        overflowY: overHeight ? "auto" : "hidden"
                                });
                                if(overHeight){
-                                       mb.h = this.maxHeight;
+                                       mb.h = maxHeight;
                                        if("w" in mb){
                                                mb.w += 16;     // room for vertical scrollbar
                                        }
                                }else{
                                        delete mb.h;
                                }
-                               delete mb.t;
-                               delete mb.l;
 
                                // Adjust dropdown width to match or be larger than my width
                                if(this.forceWidth){
-                                       mb.w = this.domNode.offsetWidth;
+                                       mb.w = aroundNode.offsetWidth;
                                }else if(this.autoWidth){
-                                       mb.w = Math.max(mb.w, this.domNode.offsetWidth);
+                                       mb.w = Math.max(mb.w, aroundNode.offsetWidth);
                                }else{
                                        delete mb.w;
                                }
@@ -11007,7 +11711,7 @@ dojo.declare("dijit._HasDropDown",
                        var retVal = dijit.popup.open({
                                parent: this,
                                popup: dropDown,
-                               around: this._aroundNode,
+                               around: aroundNode,
                                orient: dijit.getPopupAroundAlignment((this.dropDownPosition && this.dropDownPosition.length) ? this.dropDownPosition : ["below"],this.isLeftToRight()),
                                onExecute: function(){
                                        self.closeDropDown(true);
@@ -11019,13 +11723,12 @@ dojo.declare("dijit._HasDropDown",
                                        dojo.attr(self._popupStateNode, "popupActive", false);
                                        dojo.removeClass(self._popupStateNode, "dijitHasDropDownOpen");
                                        self._opened = false;
-                                       self.state = "";
                                }
                        });
                        dojo.attr(this._popupStateNode, "popupActive", "true");
                        dojo.addClass(self._popupStateNode, "dijitHasDropDownOpen");
                        this._opened=true;
-                       this.state="Opened";
+
                        // TODO: set this.checked and call setStateClass(), to affect button look while drop down is shown
                        return retVal;
                },
@@ -11033,6 +11736,8 @@ dojo.declare("dijit._HasDropDown",
                closeDropDown: function(/*Boolean*/ focus){
                        // summary:
                        //              Closes the drop down on this widget
+                       // focus:
+                       //              If true, refocuses the button widget
                        // tags:
                        //              protected
 
@@ -11040,7 +11745,6 @@ dojo.declare("dijit._HasDropDown",
                                if(focus){ this.focus(); }
                                dijit.popup.close(this.dropDown);
                                this._opened = false;
-                               this.state = "";
                        }
                }
 
@@ -11099,14 +11803,12 @@ dojo.declare("dijit.form.Button",
 
        baseClass: "dijitButton",
 
-       templateString: dojo.cache("dijit.form", "templates/Button.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),
+       templateString: dojo.cache("dijit.form", "templates/Button.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\" tabIndex=\"-1\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),
 
        attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
-               value: "valueNode",
-               iconClass: { node: "iconNode", type: "class" }
+               value: "valueNode"
        }),
 
-
        _onClick: function(/*Event*/ e){
                // summary:
                //              Internal function to handle click actions
@@ -11136,25 +11838,26 @@ dojo.declare("dijit.form.Button",
                }
        },
 
+       buildRendering: function(){
+               this.inherited(arguments);
+               dojo.setSelectable(this.focusNode, false);
+       },
+
        _fillContent: function(/*DomNode*/ source){
                // Overrides _Templated._fillContent().
                // If button label is specified as srcNodeRef.innerHTML rather than
                // this.params.label, handle it here.
+               // TODO: remove the method in 2.0, parser will do it all for me
                if(source && (!this.params || !("label" in this.params))){
                        this.set('label', source.innerHTML);
                }
        },
 
-       postCreate: function(){
-               dojo.setSelectable(this.focusNode, false);
-               this.inherited(arguments);
-       },
-
        _setShowLabelAttr: function(val){
                if(this.containerNode){
                        dojo.toggleClass(this.containerNode, "dijitDisplayNone", !val);
                }
-               this.showLabel = val;
+               this._set("showLabel", val);
        },
 
        onClick: function(/*Event*/ e){
@@ -11180,13 +11883,24 @@ dojo.declare("dijit.form.Button",
 
        _setLabelAttr: function(/*String*/ content){
                // summary:
-               //              Hook for attr('label', ...) to work.
+               //              Hook for set('label', ...) to work.
                // description:
                //              Set the label (text) of the button; takes an HTML string.
-               this.containerNode.innerHTML = this.label = content;
+               this._set("label", content);
+               this.containerNode.innerHTML = content;
                if(this.showLabel == false && !this.params.title){
                        this.titleNode.title = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || '');
                }
+       },
+
+       _setIconClassAttr: function(/*String*/ val){
+               // Custom method so that icon node is hidden when not in use, to avoid excess padding/margin
+               // appearing around it (even if it's a 0x0 sized <img> node)
+
+               var oldVal = this.iconClass || "dijitNoIcon",
+                       newVal = val || "dijitNoIcon";
+               dojo.replaceClass(this.iconNode, newVal, oldVal);
+               this._set("iconClass", val);
        }
 });
 
@@ -11207,7 +11921,7 @@ dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container,
 
        baseClass : "dijitDropDownButton",
 
-       templateString: dojo.cache("dijit.form", "templates/DropDownButton.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),
+       templateString: dojo.cache("dijit.form", "templates/DropDownButton.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\trole=\"button\" aria-haspopup=\"true\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\" tabIndex=\"-1\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),
 
        _fillContent: function(){
                // Overrides Button._fillContent().
@@ -11232,12 +11946,14 @@ dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container,
 
                // the child widget from srcNodeRef is the dropdown widget.  Insert it in the page DOM,
                // make it invisible, and store a reference to pass to the popup code.
-               if(!this.dropDown){
+               if(!this.dropDown && this.dropDownContainer){
                        var dropDownNode = dojo.query("[widgetId]", this.dropDownContainer)[0];
                        this.dropDown = dijit.byNode(dropDownNode);
                        delete this.dropDownContainer;
                }
-               dijit.popup.moveOffScreen(this.dropDown.domNode);
+               if(this.dropDown){
+                       dijit.popup.hide(this.dropDown);
+               }
 
                this.inherited(arguments);
        },
@@ -11246,7 +11962,7 @@ dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container,
                // Returns whether or not we are loaded - if our dropdown has an href,
                // then we want to check that.
                var dropDown = this.dropDown;
-               return (!dropDown.href || dropDown.isLoaded);
+               return (!!dropDown && (!dropDown.href || dropDown.isLoaded));
        },
 
        loadDropDown: function(){
@@ -11288,7 +12004,7 @@ dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, {
        // |    dojo.body().appendChild(button1.domNode);
        //
 
-       templateString: dojo.cache("dijit.form", "templates/ComboButton.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),
+       templateString: dojo.cache("dijit.form", "templates/ComboButton.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' role=\"presentation\"\n\t><tbody role=\"presentation\"><tr role=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" role=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\trole=\"button\" aria-haspopup=\"true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" role=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),
 
        attributeMap: dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), {
                id: "",
@@ -11336,8 +12052,9 @@ dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, {
                //              otherwise on arrow node
                // position:
                //              "start" or "end"
-               
-               dijit.focus(position == "start" ? this.titleNode : this._popupStateNode);
+               if(!this.disabled){
+                       dijit.focus(position == "start" ? this.titleNode : this._popupStateNode);
+               }
        }
 });
 
@@ -11363,8 +12080,8 @@ dojo.declare("dijit.form.ToggleButton", dijit.form.Button, {
                this.set('checked', !this.checked);
        },
 
-       _setCheckedAttr: function(/*Boolean*/ value, /* Boolean? */ priorityChange){
-               this.checked = value;
+       _setCheckedAttr: function(/*Boolean*/ value, /*Boolean?*/ priorityChange){
+               this._set("checked", value);
                dojo.attr(this.focusNode || this.domNode, "checked", value);
                dijit.setWaiState(this.focusNode || this.domNode, "pressed", value);
                this._handleOnChange(value, priorityChange);
@@ -11372,7 +12089,7 @@ dojo.declare("dijit.form.ToggleButton", dijit.form.Button, {
 
        setChecked: function(/*Boolean*/ checked){
                // summary:
-               //              Deprecated.   Use set('checked', true/false) instead.
+               //              Deprecated.  Use set('checked', true/false) instead.
                dojo.deprecated("setChecked("+checked+") is deprecated. Use set('checked',"+checked+") instead.", "", "2.0");
                this.set('checked', checked);
        },
@@ -11395,6 +12112,8 @@ dojo._hasResource["dijit.form.ToggleButton"] = true;
 dojo.provide("dijit.form.ToggleButton");
 
 
+
+
 }
 
 if(!dojo._hasResource["dijit.form.CheckBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
@@ -11424,26 +12143,26 @@ dojo.declare(
                //              In case 2, the regular html inputs are invisible but still used by
                //              the user. They are turned quasi-invisible and overlay the background-image.
 
-               templateString: dojo.cache("dijit.form", "templates/CheckBox.html", "<div class=\"dijit dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),
+               templateString: dojo.cache("dijit.form", "templates/CheckBox.html", "<div class=\"dijit dijitReset dijitInline\" role=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),
 
                baseClass: "dijitCheckBox",
 
                // type: [private] String
                //              type attribute on <input> node.
-               //              Overrides `dijit.form.Button.type`.   Users should not change this value.
+               //              Overrides `dijit.form.Button.type`.  Users should not change this value.
                type: "checkbox",
 
                // value: String
                //              As an initialization parameter, equivalent to value field on normal checkbox
                //              (if checked, the value is passed as the value when form is submitted).
                //
-               //              However, attr('value') will return either the string or false depending on
+               //              However, get('value') will return either the string or false depending on
                //              whether or not the checkbox is checked.
                //
-               //              attr('value', string) will check the checkbox and change the value to the
+               //              set('value', string) will check the checkbox and change the value to the
                //              specified string
                //
-               //              attr('value', boolean) will change the checked state.
+               //              set('value', boolean) will change the checked state.
                value: "on",
 
                // readOnly: Boolean
@@ -11452,22 +12171,22 @@ dojo.declare(
                //              Similar to disabled except readOnly form values are submitted.
                readOnly: false,
                
-               // the attributeMap should inherit from dijit.form._FormWidget.prototype.attributeMap 
+               // the attributeMap should inherit from dijit.form._FormWidget.prototype.attributeMap
                // instead of ToggleButton as the icon mapping has no meaning for a CheckBox
                attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
                        readOnly: "focusNode"
                }),
 
                _setReadOnlyAttr: function(/*Boolean*/ value){
-                       this.readOnly = value;
+                       this._set("readOnly", value);
                        dojo.attr(this.focusNode, 'readOnly', value);
                        dijit.setWaiState(this.focusNode, "readonly", value);
                },
 
-               _setValueAttr: function(/*String or Boolean*/ newValue, /*Boolean*/ priorityChange){
+               _setValueAttr: function(/*String|Boolean*/ newValue, /*Boolean*/ priorityChange){
                        // summary:
                        //              Handler for value= attribute to constructor, and also calls to
-                       //              attr('value', val).
+                       //              set('value', val).
                        // description:
                        //              During initialization, just saves as attribute to the <input type=checkbox>.
                        //
@@ -11477,7 +12196,7 @@ dojo.declare(
                        //              specified as "value" when the CheckBox was constructed (ex: <input
                        //              dojoType="dijit.CheckBox" value="chicken">)
                        if(typeof newValue == "string"){
-                               this.value = newValue;
+                               this._set("value", newValue);
                                dojo.attr(this.focusNode, 'value', newValue);
                                newValue = true;
                        }
@@ -11487,7 +12206,7 @@ dojo.declare(
                },
                _getValueAttr: function(){
                        // summary:
-                       //              Hook so attr('value') works.
+                       //              Hook so get('value') works.
                        // description:
                        //              If the CheckBox is checked, returns the value attribute.
                        //              Otherwise returns false.
@@ -11524,7 +12243,7 @@ dojo.declare(
                        this.set('checked', this.params.checked || false);
 
                        // Handle unlikely event that the <input type=checkbox> value attribute has changed
-                       this.value = this.params.value || "on";
+                       this._set("value", this.params.value || "on");
                        dojo.attr(this.focusNode, 'value', this.value);
                },
 
@@ -11547,6 +12266,7 @@ dojo.declare(
                        //              Internal function to handle click actions - need to check
                        //              readOnly, since button no longer does that check.
                        if(this.readOnly){
+                               dojo.stopEvent(e);
                                return false;
                        }
                        return this.inherited(arguments);
@@ -11600,12 +12320,15 @@ dojo.provide("dijit.form.DropDownButton");
 
 
 
+
 }
 
 if(!dojo._hasResource["dojo.regexp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 dojo._hasResource["dojo.regexp"] = true;
 dojo.provide("dojo.regexp");
 
+dojo.getObject("regexp", true, dojo);
+
 /*=====
 dojo.regexp = {
        // summary: Regular expressions and Builder resources
@@ -11624,7 +12347,7 @@ dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){
                }
                return "\\" + ch;
        }); // String
-}
+};
 
 dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){
        //      summary:
@@ -11639,7 +12362,7 @@ dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boole
        //              A single value or an array of values.
        // re:
        //              A function. Takes one parameter and converts it to a regular
-       //              expression. 
+       //              expression.
        // nonCapture:
        //              If true, uses non-capturing match, otherwise matches are retained
        //              by regular expression. Defaults to false
@@ -11658,16 +12381,16 @@ dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boole
 
         // join the REs as alternatives in a RE group.
        return dojo.regexp.group(b.join("|"), nonCapture); // String
-}
+};
 
 dojo.regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){
        // summary:
        //              adds group match to expression
        // nonCapture:
        //              If true, uses non-capturing match, otherwise matches are retained
-       //              by regular expression. 
+       //              by regular expression.
        return "(" + (nonCapture ? "?:":"") + expression + ")"; // String
-}
+};
 
 }
 
@@ -11675,11 +12398,13 @@ if(!dojo._hasResource["dojo.data.util.sorter"]){ //_hasResource checks added by
 dojo._hasResource["dojo.data.util.sorter"] = true;
 dojo.provide("dojo.data.util.sorter");
 
-dojo.data.util.sorter.basicComparator = function(      /*anything*/ a, 
+dojo.getObject("data.util.sorter", true, dojo);
+
+dojo.data.util.sorter.basicComparator = function(      /*anything*/ a,
                                                                                                        /*anything*/ b){
-       //      summary:  
+       //      summary:
        //              Basic comparision function that compares if an item is greater or less than another item
-       //      description:  
+       //      description:
        //              returns 1 if a > b, -1 if a < b, 0 if equal.
        //              'null' values (null, undefined) are treated as larger values so that they're pushed to the end of the list.
        //              And compared to each other, null is equivalent to undefined.
@@ -11696,18 +12421,18 @@ dojo.data.util.sorter.basicComparator = function(     /*anything*/ a,
                b = undefined;
        }
        if(a == b){
-               r = 0; 
+               r = 0;
        }else if(a > b || a == null){
-               r = 1; 
+               r = 1;
        }
        return r; //int {-1,0,1}
 };
 
 dojo.data.util.sorter.createSortFunction = function(   /* attributes array */sortSpec,
                                                                                                                /*dojo.data.core.Read*/ store){
-       //      summary:  
+       //      summary:
        //              Helper function to generate the sorting function based off the list of sort attributes.
-       //      description:  
+       //      description:
        //              The sort function creation will look for a property on the store called 'comparatorMap'.  If it exists
        //              it will look in the mapping for comparisons function for the attributes.  If one is found, it will
        //              use it instead of the basic comparator, which is typically used for strings, ints, booleans, and dates.
@@ -11749,7 +12474,7 @@ dojo.data.util.sorter.createSortFunction = function(    /* attributes array */sortS
                                }
                                comp = map[attr] || bc;
                        }
-                       sortFunctions.push(createSortFunction(attr, 
+                       sortFunctions.push(createSortFunction(attr,
                                dir, comp, store));
                }
        }
@@ -11761,7 +12486,7 @@ dojo.data.util.sorter.createSortFunction = function(    /* attributes array */sortS
                                return ret;//int
                        }
                }
-               return 0; //int  
+               return 0; //int
        }; // Function
 };
 
@@ -11772,30 +12497,32 @@ dojo._hasResource["dojo.data.util.simpleFetch"] = true;
 dojo.provide("dojo.data.util.simpleFetch");
 
 
+dojo.getObject("data.util.simpleFetch", true, dojo);
+
 dojo.data.util.simpleFetch.fetch = function(/* Object? */ request){
        //      summary:
        //              The simpleFetch mixin is designed to serve as a set of function(s) that can
-       //              be mixed into other datastore implementations to accelerate their development.  
-       //              The simpleFetch mixin should work well for any datastore that can respond to a _fetchItems() 
+       //              be mixed into other datastore implementations to accelerate their development.
+       //              The simpleFetch mixin should work well for any datastore that can respond to a _fetchItems()
        //              call by returning an array of all the found items that matched the query.  The simpleFetch mixin
        //              is not designed to work for datastores that respond to a fetch() call by incrementally
        //              loading items, or sequentially loading partial batches of the result
-       //              set.  For datastores that mixin simpleFetch, simpleFetch 
+       //              set.  For datastores that mixin simpleFetch, simpleFetch
        //              implements a fetch method that automatically handles eight of the fetch()
        //              arguments -- onBegin, onItem, onComplete, onError, start, count, sort and scope
        //              The class mixing in simpleFetch should not implement fetch(),
-       //              but should instead implement a _fetchItems() method.  The _fetchItems() 
-       //              method takes three arguments, the keywordArgs object that was passed 
+       //              but should instead implement a _fetchItems() method.  The _fetchItems()
+       //              method takes three arguments, the keywordArgs object that was passed
        //              to fetch(), a callback function to be called when the result array is
        //              available, and an error callback to be called if something goes wrong.
        //              The _fetchItems() method should ignore any keywordArgs parameters for
-       //              start, count, onBegin, onItem, onComplete, onError, sort, and scope.  
+       //              start, count, onBegin, onItem, onComplete, onError, sort, and scope.
        //              The _fetchItems() method needs to correctly handle any other keywordArgs
-       //              parameters, including the query parameter and any optional parameters 
-       //              (such as includeChildren).  The _fetchItems() method should create an array of 
-       //              result items and pass it to the fetchHandler along with the original request object 
-       //              -- or, the _fetchItems() method may, if it wants to, create an new request object 
-       //              with other specifics about the request that are specific to the datastore and pass 
+       //              parameters, including the query parameter and any optional parameters
+       //              (such as includeChildren).  The _fetchItems() method should create an array of
+       //              result items and pass it to the fetchHandler along with the original request object
+       //              -- or, the _fetchItems() method may, if it wants to, create an new request object
+       //              with other specifics about the request that are specific to the datastore and pass
        //              that as the request object to the handler.
        //
        //              For more information on this specific function, see dojo.data.api.Read.fetch()
@@ -11862,12 +12589,14 @@ if(!dojo._hasResource["dojo.data.util.filter"]){ //_hasResource checks added by
 dojo._hasResource["dojo.data.util.filter"] = true;
 dojo.provide("dojo.data.util.filter");
 
+dojo.getObject("data.util.filter", true, dojo);
+
 dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase){
-       //      summary:  
+       //      summary:
        //              Helper function to convert a simple pattern to a regular expression for matching.
        //      description:
        //              Returns a regular expression object that conforms to the defined conversion rules.
-       //              For example:  
+       //              For example:
        //                      ca*   -> /^ca.*$/
        //                      *ca*  -> /^.*ca.*$/
        //                      *c\*a*  -> /^.*c\*a.*$/
@@ -11879,7 +12608,7 @@ dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/
        //                      * Means match anything, so ca* means match anything starting with ca
        //                      ? Means match single character.  So, b?b will match to bob and bab, and so on.
        //              \ is an escape character.  So for example, \* means do not treat * as a match, but literal character *.
-       //                              To use a \ as a character in the string, it must be escaped.  So in the pattern it should be 
+       //                              To use a \ as a character in the string, it must be escaped.  So in the pattern it should be
        //                              represented by \\ to be treated as an ordinary \ character instead of an escape.
        //
        //      ignoreCase:
@@ -11957,20 +12686,20 @@ dojo.declare(
                //              Converts the first character of each word to uppercase if true.
                propercase: false,
 
-               //      maxLength: String
+               // maxLength: String
                //              HTML INPUT tag maxLength declaration.
                maxLength: "",
 
-               //      selectOnClick: [const] Boolean
+               // selectOnClick: [const] Boolean
                //              If true, all text will be selected when focused with mouse
                selectOnClick: false,
 
-               //      placeHolder: String
+               // placeHolder: String
                //              Defines a hint to help users fill out the input field (as defined in HTML 5).
                //              This should only contain plain text (no html markup).
                placeHolder: "",
                
-               templateString: dojo.cache("dijit.form", "templates/TextBox.html", "<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),
+               templateString: dojo.cache("dijit.form", "templates/TextBox.html", "<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" role=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),
                _singleNodeTemplate: '<input class="dijit dijitReset dijitLeft dijitInputField" dojoAttachPoint="textbox,focusNode" autocomplete="off" type="${type}" ${!nameAttrSetting} />',
 
                _buttonInputDisabled: dojo.isIE ? "disabled" : "", // allows IE to disallow focus, but Firefox cannot be disabled for mousedown events
@@ -11983,14 +12712,14 @@ dojo.declare(
                
                postMixInProperties: function(){
                        var type = this.type.toLowerCase();
-                       if(this.templateString.toLowerCase() == "input" || ((type == "hidden" || type == "file") && this.templateString == dijit.form.TextBox.prototype.templateString)){
+                       if(this.templateString && this.templateString.toLowerCase() == "input" || ((type == "hidden" || type == "file") && this.templateString == dijit.form.TextBox.prototype.templateString)){
                                this.templateString = this._singleNodeTemplate;
                        }
                        this.inherited(arguments);
                },
 
                _setPlaceHolderAttr: function(v){
-                       this.placeHolder = v;
+                       this._set("placeHolder", v);
                        if(!this._phspan){
                                this._attachPoints.push('_phspan');
                                /* dijitInputField class gives placeHolder same padding as the input field
@@ -12013,7 +12742,7 @@ dojo.declare(
 
                _getValueAttr: function(){
                        // summary:
-                       //              Hook so attr('value') works as we like.
+                       //              Hook so get('value') works as we like.
                        // description:
                        //              For `dijit.form.TextBox` this basically returns the value of the <input>.
                        //
@@ -12026,7 +12755,7 @@ dojo.declare(
 
                _setValueAttr: function(value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){
                        // summary:
-                       //              Hook so attr('value', ...) works.
+                       //              Hook so set('value', ...) works.
                        //
                        // description:
                        //              Sets the value of the widget to "value" which can be of
@@ -12057,6 +12786,7 @@ dojo.declare(
                        }
                        if(formattedValue != null && formattedValue != undefined && ((typeof formattedValue) != "number" || !isNaN(formattedValue)) && this.textbox.value != formattedValue){
                                this.textbox.value = formattedValue;
+                               this._set("displayedValue", this.get("displayedValue"));
                        }
 
                        this._updatePlaceHolder();
@@ -12069,7 +12799,7 @@ dojo.declare(
                //              (ex: Kentucky) and the serialized value (ex: KY) are different,
                //              this represents the displayed value.
                //
-               //              Setting 'displayedValue' through attr('displayedValue', ...)
+               //              Setting 'displayedValue' through set('displayedValue', ...)
                //              updates 'value', and vice-versa.  Otherwise 'value' is updated
                //              from 'displayedValue' periodically, like onBlur etc.
                //
@@ -12080,7 +12810,7 @@ dojo.declare(
 
                getDisplayedValue: function(){
                        // summary:
-                       //              Deprecated.   Use set('displayedValue') instead.
+                       //              Deprecated.  Use get('displayedValue') instead.
                        // tags:
                        //              deprecated
                        dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.", "", "2.0");
@@ -12089,7 +12819,7 @@ dojo.declare(
 
                _getDisplayedValueAttr: function(){
                        // summary:
-                       //              Hook so attr('displayedValue') works.
+                       //              Hook so get('displayedValue') works.
                        // description:
                        //              Returns the displayed value (what the user sees on the screen),
                        //              after filtering (ie, trimming spaces etc.).
@@ -12098,21 +12828,24 @@ dojo.declare(
                        //              is different from the serialized value that's actually
                        //              sent to the server (see dijit.form.ValidationTextBox.serialize)
 
+                       // TODO: maybe we should update this.displayedValue on every keystroke so that we don't need
+                       // this method
+                       // TODO: this isn't really the displayed value when the user is typing
                        return this.filter(this.textbox.value);
                },
 
-               setDisplayedValue: function(/*String*/value){
+               setDisplayedValue: function(/*String*/ value){
                        // summary:
-                       //              Deprecated.   Use set('displayedValue', ...) instead.
+                       //              Deprecated.  Use set('displayedValue', ...) instead.
                        // tags:
                        //              deprecated
                        dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.", "", "2.0");
                        this.set('displayedValue', value);
                },
 
-               _setDisplayedValueAttr: function(/*String*/value){
+               _setDisplayedValueAttr: function(/*String*/ value){
                        // summary:
-                       //              Hook so attr('displayedValue', ...) works.
+                       //              Hook so set('displayedValue', ...) works.
                        // description:
                        //              Sets the value of the visual element to the string "value".
                        //              The widget value is also set to a corresponding,
@@ -12120,11 +12853,18 @@ dojo.declare(
 
                        if(value === null || value === undefined){ value = '' }
                        else if(typeof value != "string"){ value = String(value) }
+
                        this.textbox.value = value;
-                       this._setValueAttr(this.get('value'), undefined, value);
+
+                       // sets the serialized value to something corresponding to specified displayedValue
+                       // (if possible), and also updates the textbox.value, for example converting "123"
+                       // to "123.00"
+                       this._setValueAttr(this.get('value'), undefined);
+
+                       this._set("displayedValue", this.get('displayedValue'));
                },
 
-               format: function(/* String */ value, /* Object */ constraints){
+               format: function(/*String*/ value, /*Object*/ constraints){
                        // summary:
                        //              Replacable function to convert a value to a properly formatted string.
                        // tags:
@@ -12132,7 +12872,7 @@ dojo.declare(
                        return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value));
                },
 
-               parse: function(/* String */ value, /* Object */ constraints){
+               parse: function(/*String*/ value, /*Object*/ constraints){
                        // summary:
                        //              Replacable function to convert a formatted string to a value
                        // tags:
@@ -12166,12 +12906,15 @@ dojo.declare(
                                setTimeout(function(){ _this._handleOnChange(_this.get('value'), false); }, 0);
                        }
                        this._refreshState();
+
+                       // In case someone is watch()'ing for changes to displayedValue
+                       this._set("displayedValue", this.get("displayedValue"));
                },
 
                postCreate: function(){
-                       // setting the value here is needed since value="" in the template causes "undefined"
-                       // and setting in the DOM (instead of the JS object) helps with form reset actions
                        if(dojo.isIE){ // IE INPUT tag fontFamily has to be set directly using STYLE
+                               // the setTimeout gives IE a chance to render the TextBox and to deal with font inheritance
+                               setTimeout(dojo.hitch(this, function(){
                                var s = dojo.getComputedStyle(this.domNode);
                                if(s){
                                        var ff = s.fontFamily;
@@ -12184,16 +12927,22 @@ dojo.declare(
                                                }
                                        }
                                }
+                               }), 0);
                        }
-                       this.textbox.setAttribute("value", this.textbox.value); // DOM and JS values shuld be the same
+
+                       // setting the value here is needed since value="" in the template causes "undefined"
+                       // and setting in the DOM (instead of the JS object) helps with form reset actions
+                       this.textbox.setAttribute("value", this.textbox.value); // DOM and JS values should be the same
+
                        this.inherited(arguments);
+
                        if(dojo.isMoz || dojo.isOpera){
-                               this.connect(this.textbox, "oninput", this._onInput);
+                               this.connect(this.textbox, "oninput", "_onInput");
                        }else{
-                               this.connect(this.textbox, "onkeydown", this._onInput);
-                               this.connect(this.textbox, "onkeyup", this._onInput);
-                               this.connect(this.textbox, "onpaste", this._onInput);
-                               this.connect(this.textbox, "oncut", this._onInput);
+                               this.connect(this.textbox, "onkeydown", "_onInput");
+                               this.connect(this.textbox, "onkeyup", "_onInput");
+                               this.connect(this.textbox, "onpaste", "_onInput");
+                               this.connect(this.textbox, "oncut", "_onInput");
                        }
                },
 
@@ -12205,8 +12954,8 @@ dojo.declare(
                        // description:
                        //              For MappedTextBox subclasses, this is called twice
                        //                      - once with the display value
-                       //                      - once the value as set/returned by attr('value', ...)
-                       //              and attr('value'), ex: a Number for NumberTextBox.
+                       //                      - once the value as set/returned by set('value', ...)
+                       //              and get('value'), ex: a Number for NumberTextBox.
                        //
                        //              In the latter case it does corrections like converting null to NaN.  In
                        //              the former case the NumberTextBox.filter() method calls this.inherited()
@@ -12284,8 +13033,11 @@ dojo.declare(
 
                        this._updatePlaceHolder();
                        
-                       this._refreshState();
+                       // call this.inherited() before refreshState(), since this.inherited() will possibly scroll the viewport
+                       // (to scroll the TextBox into view), which will affect how _refreshState() positions the tooltip
                        this.inherited(arguments);
+
+                       this._refreshState();
                },
 
                reset: function(){
@@ -12297,7 +13049,7 @@ dojo.declare(
        }
 );
 
-dijit.selectInputText = function(/*DomNode*/element, /*Number?*/ start, /*Number?*/ stop){
+dijit.selectInputText = function(/*DomNode*/ element, /*Number?*/ start, /*Number?*/ stop){
        // summary:
        //              Select text in the input element argument, from start (default 0), to stop (default end).
 
@@ -12310,14 +13062,12 @@ dijit.selectInputText = function(/*DomNode*/element, /*Number?*/ start, /*Number
        dijit.focus(element);
        if(_document["selection"] && dojo.body()["createTextRange"]){ // IE
                if(element.createTextRange){
-                       var range = element.createTextRange();
-                       with(range){
-                               collapse(true);
-                               moveStart("character", -99999); // move to 0
-                               moveStart("character", start); // delta from 0 is the correct position
-                               moveEnd("character", stop-start);
-                               select();
-                       }
+                       var r = element.createTextRange();
+                       r.collapse(true);
+                       r.moveStart("character", -99999); // move to 0
+                       r.moveStart("character", start); // delta from 0 is the correct position
+                       r.moveEnd("character", stop-start);
+                       r.select();
                }
        }else if(_window["getSelection"]){
                if(element.setSelectionRange){
@@ -12351,7 +13101,7 @@ dojo.declare(
                //              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"),
+               templateString: dojo.cache("dijit", "templates/Tooltip.html", "<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\"\n\t><div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" role='alert'></div\n\t><div class=\"dijitTooltipConnector\" dojoAttachPoint=\"connectorNode\"></div\n></div>\n"),
 
                postCreate: function(){
                        dojo.body().appendChild(this.domNode);
@@ -12361,7 +13111,6 @@ dojo.declare(
                        // 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, /*Boolean*/ rtl){
@@ -12373,6 +13122,9 @@ dojo.declare(
                                return;
                        }
 
+                       // reset width; it may have been set by orient() on a previous tooltip show()
+                       this.domNode.width = "auto";
+
                        if(this.fadeOut.status() == "playing"){
                                // previous tooltip is being hidden; wait until the hide completes then show new one
                                this._onDeck=arguments;
@@ -12389,12 +13141,17 @@ dojo.declare(
                        this.aroundNode = aroundNode;
                },
 
-               orient: function(/* DomNode */ node, /* String */ aroundCorner, /* String */ tooltipCorner){
+               orient: function(/*DomNode*/ node, /*String*/ aroundCorner, /*String*/ tooltipCorner, /*Object*/ spaceAvailable, /*Object*/ aroundNodeCoords){
                        // summary:
                        //              Private function to set CSS for tooltip node based on which position it's in.
-                       //              This is called by the dijit popup code.
+                       //              This is called by the dijit popup code.   It will also reduce the tooltip's
+                       //              width to whatever width is available
                        // tags:
                        //              protected
+                       this.connectorNode.style.top = ""; //reset to default
+                       
+                       //Adjust the spaceAvailable width, without changing the spaceAvailable object
+                       var tooltipSpaceAvaliableWidth = spaceAvailable.w - this.connectorNode.offsetWidth;
 
                        node.className = "dijitTooltip " +
                                {
@@ -12405,6 +13162,52 @@ dojo.declare(
                                        "BR-BL": "dijitTooltipRight",
                                        "BL-BR": "dijitTooltipLeft"
                                }[aroundCorner + "-" + tooltipCorner];
+                               
+                       // reduce tooltip's width to the amount of width available, so that it doesn't overflow screen
+                       this.domNode.style.width = "auto";
+                       var size = dojo.contentBox(this.domNode);
+                       
+                       var width = Math.min((Math.max(tooltipSpaceAvaliableWidth,1)), size.w);
+                       var widthWasReduced = width < size.w;
+                       
+                       this.domNode.style.width = width+"px";
+                                               
+                       //Adjust width for tooltips that have a really long word or a nowrap setting
+                       if(widthWasReduced){
+                               this.containerNode.style.overflow = "auto"; //temp change to overflow to detect if our tooltip needs to be wider to support the content
+                               var scrollWidth = this.containerNode.scrollWidth;
+                               this.containerNode.style.overflow = "visible"; //change it back
+                               if(scrollWidth > width){
+                                       scrollWidth = scrollWidth + dojo.style(this.domNode,"paddingLeft") + dojo.style(this.domNode,"paddingRight");
+                                       this.domNode.style.width = scrollWidth + "px";
+                               }
+                       }
+                       
+                       // Reposition the tooltip connector.
+                       if(tooltipCorner.charAt(0) == 'B' && aroundCorner.charAt(0) == 'B'){
+                               var mb = dojo.marginBox(node);
+                               var tooltipConnectorHeight = this.connectorNode.offsetHeight;
+                               if(mb.h > spaceAvailable.h){
+                                       // The tooltip starts at the top of the page and will extend past the aroundNode
+                                       var aroundNodePlacement = spaceAvailable.h - (aroundNodeCoords.h / 2) - (tooltipConnectorHeight / 2);
+                                       this.connectorNode.style.top = aroundNodePlacement + "px";
+                                       this.connectorNode.style.bottom = "";
+                               }else{
+                                       // Align center of connector with center of aroundNode, except don't let bottom
+                                       // of connector extend below bottom of tooltip content, or top of connector
+                                       // extend past top of tooltip content
+                                       this.connectorNode.style.bottom = Math.min(
+                                               Math.max(aroundNodeCoords.h/2 - tooltipConnectorHeight/2, 0),
+                                               mb.h - tooltipConnectorHeight) + "px";
+                                       this.connectorNode.style.top = "";
+                               }
+                       }else{
+                               // reset the tooltip back to the defaults
+                               this.connectorNode.style.top = "";
+                               this.connectorNode.style.bottom = "";
+                       }
+                       
+                       return Math.max(0, size.w - tooltipSpaceAvaliableWidth);
                },
 
                _onShow: function(){
@@ -12421,6 +13224,7 @@ dojo.declare(
                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()
@@ -12487,69 +13291,70 @@ dojo.declare(
                //              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: String|String[]
+               //              Id of domNode(s) to attach the tooltip to.
+               //              When user hovers over specified dom node, the tooltip will appear.
                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(/*String*/ newId){
+                       // summary:
+                       //              Connect to node(s) (specified by id)
 
-               _setConnectIdAttr: function(newIds){
-                       for(var oldId in this._nodeConnectionsById){
-                               this.removeTarget(oldId);
-                       }
-                       dojo.forEach(dojo.isArrayLike(newIds) ? newIds : [newIds], this.addTarget, this);
-               },
+                       // Remove connections to old nodes (if there are any)
+                       dojo.forEach(this._connections || [], function(nested){
+                               dojo.forEach(nested, dojo.hitch(this, "disconnect"));
+                       }, this);
 
-               _getConnectIdAttr: function(){
-                       var ary = [];
-                       for(var id in this._nodeConnectionsById){
-                               ary.push(id);
-                       }
-                       return ary;
+                       // Make connections to nodes in newIds.
+                       var ary = dojo.isArrayLike(newId) ? newId : (newId ? [newId] : []);
+                       this._connections = dojo.map(ary, function(id){
+                               var node = dojo.byId(id);
+                               return node ? [
+                                       this.connect(node, "onmouseenter", "_onTargetMouseEnter"),
+                                       this.connect(node, "onmouseleave", "_onTargetMouseLeave"),
+                                       this.connect(node, "onfocus", "_onTargetFocus"),
+                                       this.connect(node, "onblur", "_onTargetBlur")
+                               ] : [];
+                       }, this);
+       
+                       this._set("connectId", newId);
+
+                       this._connectIds = ary; // save as array
                },
 
-               addTarget: function(/*DOMNODE || String*/ id){
+               addTarget: function(/*DOMNODE || String*/ node){
                        // 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")
-                       ];
+                       //              Attach tooltip to specified node if it's not already connected
+
+                       // TODO: remove in 2.0 and just use set("connectId", ...) interface
+
+                       var id = node.id || node;
+                       if(dojo.indexOf(this._connectIds, id) == -1){
+                               this.set("connectId", this._connectIds.concat(id));
+                       }
                },
 
                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];
+                       // TODO: remove in 2.0 and just use set("connectId", ...) interface
+                       
+                       var id = node.id || node,       // map from DOMNode back to plain id string
+                               idx = dojo.indexOf(this._connectIds, id);
+                       if(idx >= 0){
+                               // remove id (modifies original this._connectIds but that's OK in this case)
+                               this._connectIds.splice(idx, 1);
+                               this.set("connectId", this._connectIds);
                        }
                },
 
-               postCreate: function(){
+               buildRendering: function(){
+                       this.inherited(arguments);
                        dojo.addClass(this.domNode,"dijitTooltipData");
                },
 
@@ -12716,8 +13521,6 @@ dojo.provide("dijit.form.ValidationTextBox");
 
 
 
-
-
 /*=====
        dijit.form.ValidationTextBox.__Constraints = function(){
                // locale: String
@@ -12738,7 +13541,7 @@ dojo.declare(
                // tags:
                //              protected
 
-               templateString: dojo.cache("dijit.form", "templates/ValidationTextBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),
+               templateString: dojo.cache("dijit.form", "templates/ValidationTextBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" role=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&#935; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),
                baseClass: "dijitTextBox dijitValidationTextBox",
 
                // required: Boolean
@@ -12747,6 +13550,7 @@ dojo.declare(
 
                // promptMessage: String
                //              If defined, display this hint string immediately on focus to the textbox, if empty.
+               //              Also displays if the textbox value is Incomplete (not yet valid but will be with additional input).
                //              Think of this like a tooltip that tells the user what to do, not an error message
                //              that tells the user what they've done wrong.
                //
@@ -12765,6 +13569,12 @@ dojo.declare(
                //              Set to "" to use the invalidMessage instead.
                missingMessage: "$_unset_$",
 
+               // message: String
+               //              Currently error/prompt message.
+               //              When using the default tooltip implementation, this will only be
+               //              displayed when the field is focused.
+               message: "",
+
                // constraints: dijit.form.ValidationTextBox.__Constraints
                //              user-defined object needed to pass parameters to the validator functions
                constraints: {},
@@ -12774,7 +13584,7 @@ dojo.declare(
                //              Do not specify both regExp and regExpGen
                regExp: ".*",
 
-               regExpGen: function(/*dijit.form.ValidationTextBox.__Constraints*/constraints){
+               regExpGen: function(/*dijit.form.ValidationTextBox.__Constraints*/ constraints){
                        // summary:
                        //              Overridable function used to generate regExp when dependent on constraints.
                        //              Do not specify both regExp and regExpGen.
@@ -12784,7 +13594,7 @@ dojo.declare(
                },
 
                // state: [readonly] String
-               //              Shows current state (ie, validation result) of input (Normal, Warning, or Error)
+               //              Shows current state (ie, validation result) of input (""=Normal, Incomplete, or Error)
                state: "",
 
                // tooltipPosition: String[]
@@ -12793,12 +13603,12 @@ dojo.declare(
 
                _setValueAttr: function(){
                        // summary:
-                       //              Hook so attr('value', ...) works.
+                       //              Hook so set('value', ...) works.
                        this.inherited(arguments);
                        this.validate(this._focused);
                },
 
-               validator: function(/*anything*/value, /*dijit.form.ValidationTextBox.__Constraints*/constraints){
+               validator: function(/*anything*/ value, /*dijit.form.ValidationTextBox.__Constraints*/ constraints){
                        // summary:
                        //              Overridable function used to validate the text input against the regular expression.
                        // tags:
@@ -12827,7 +13637,7 @@ dojo.declare(
                _isEmpty: function(value){
                        // summary:
                        //              Checks for whitespace
-                       return /^\s*$/.test(value); // Boolean
+                       return (this.trim ? /^\s*$/ : /^$/).test(value); // Boolean
                },
 
                getErrorMessage: function(/*Boolean*/ isFocused){
@@ -12858,37 +13668,32 @@ dojo.declare(
                        var isValid = this.disabled || this.isValid(isFocused);
                        if(isValid){ this._maskValidSubsetError = true; }
                        var isEmpty = this._isEmpty(this.textbox.value);
-                       var isValidSubset = !isValid && !isEmpty && isFocused && this._isValidSubset();
-                       this.state = ((isValid || ((!this._hasBeenBlurred || isFocused) && isEmpty) || isValidSubset) && this._maskValidSubsetError) ? "" : "Error";
-                       if(this.state == "Error"){ this._maskValidSubsetError = isFocused; } // we want the error to show up afer a blur and refocus
-                       this._setStateClass();
+                       var isValidSubset = !isValid && isFocused && this._isValidSubset();
+                       this._set("state", isValid ? "" : (((((!this._hasBeenBlurred || isFocused) && isEmpty) || isValidSubset) && this._maskValidSubsetError) ? "Incomplete" : "Error"));
                        dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
-                       if(isFocused){
-                               if(this.state == "Error"){
-                                       message = this.getErrorMessage(true);
-                               }else{
-                                       message = this.getPromptMessage(true); // show the prompt whever there's no error
-                               }
-                               this._maskValidSubsetError = true; // since we're focused, always mask warnings
+
+                       if(this.state == "Error"){
+                               this._maskValidSubsetError = isFocused && isValidSubset; // we want the error to show up after a blur and refocus
+                               message = this.getErrorMessage(isFocused);
+                       }else if(this.state == "Incomplete"){
+                               message = this.getPromptMessage(isFocused); // show the prompt whenever the value is not yet complete
+                               this._maskValidSubsetError = !this._hasBeenBlurred || isFocused; // no Incomplete warnings while focused
+                       }else if(isEmpty){
+                               message = this.getPromptMessage(isFocused); // show the prompt whenever there's no error and no text
                        }
-                       this.displayMessage(message);
+                       this.set("message", message);
+
                        return isValid;
                },
 
-               // _message: String
-               //              Currently displayed message
-               _message: "",
-
                displayMessage: function(/*String*/ message){
                        // summary:
                        //              Overridable method to display validation errors/hints.
                        //              By default uses a tooltip.
                        // tags:
                        //              extension
-                       if(this._message == message){ return; }
-                       this._message = message;
                        dijit.hideTooltip(this.domNode);
-                       if(message){
+                       if(message && this._focused){
                                dijit.showTooltip(message, this.domNode, this.tooltipPosition, !this.isLeftToRight());
                        }
                },
@@ -12905,11 +13710,11 @@ dojo.declare(
                        this.constraints = {};
                },
 
-               _setConstraintsAttr: function(/* Object */ constraints){
+               _setConstraintsAttr: function(/*Object*/ constraints){
                        if(!constraints.locale && this.lang){
                                constraints.locale = this.lang;
                        }
-                       this.constraints = constraints;
+                       this._set("constraints", constraints);
                        this._computePartialRE();
                },
 
@@ -12966,11 +13771,16 @@ dojo.declare(
                },
 
                _setRequiredAttr: function(/*Boolean*/ value){
-                       this.required = value;
+                       this._set("required", value);
                        dijit.setWaiState(this.focusNode, "required", value);
                        this._refreshState();
                },
 
+               _setMessageAttr: function(/*String*/ message){
+                       this._set("message", message);
+                       this.displayMessage(message);
+               },
+
                reset:function(){
                        // Overrides dijit.form.TextBox.reset() by also
                        // hiding errors about partial matches
@@ -12979,7 +13789,10 @@ dojo.declare(
                },
 
                _onBlur: function(){
+                       // the message still exists but for back-compat, and to erase the tooltip
+                       // (if the message is being displayed as a tooltip), call displayMessage('')
                        this.displayMessage('');
+
                        this.inherited(arguments);
                }
        }
@@ -13010,9 +13823,9 @@ dojo.declare(
                        this.nameAttrSetting = "";
                },
 
-               serialize: function(/*anything*/val, /*Object?*/options){
+               serialize: function(/*anything*/ val, /*Object?*/ options){
                        // summary:
-                       //              Overridable function used to convert the attr('value') result to a canonical
+                       //              Overridable function used to convert the get('value') result to a canonical
                        //              (non-localized) string.  For example, will print dates in ISO format, and
                        //              numbers the same way as they are represented in javascript.
                        // tags:
@@ -13044,10 +13857,10 @@ dojo.declare(
                        // (as opposed to the displayed value).
                        // Passing in name as markup rather than calling dojo.create() with an attrs argument
                        // to make dojo.query(input[name=...]) work on IE. (see #8660)
-                       this.valueNode = dojo.place("<input type='hidden'" + (this.name ? " name='" + this.name + "'" : "") + ">", this.textbox, "after");
+                       this.valueNode = dojo.place("<input type='hidden'" + (this.name ? " name='" + this.name.replace(/'/g, "&quot;") + "'" : "") + "/>", this.textbox, "after");
                },
 
-               reset:function(){
+               reset: function(){
                        // Overrides `dijit.form.ValidationTextBox.reset` to
                        // reset the hidden textbox value to ''
                        this.valueNode.value = '';
@@ -13151,7 +13964,7 @@ dojo.declare(
                        }
                },
 
-               _setConstraintsAttr: function(/* Object */ constraints){
+               _setConstraintsAttr: function(/*Object*/ constraints){
                        this.inherited(arguments);
                        if(this.focusNode){ // not set when called from postMixInProperties
                                if(this.constraints.min !== undefined){
@@ -13169,7 +13982,7 @@ dojo.declare(
 
                _setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange){
                        // summary:
-                       //              Hook so attr('value', ...) works.
+                       //              Hook so set('value', ...) works.
 
                        dijit.setWaiState(this.focusNode, "valuenow", value);
                        this.inherited(arguments);
@@ -13193,10 +14006,9 @@ dojo.provide("dijit.form.ComboBox");
 
 
 
-
 dojo.declare(
        "dijit.form.ComboBoxMixin",
-       null,
+       dijit._HasDropDown,
        {
                // summary:
                //              Implements the base functionality for `dijit.form.ComboBox`/`dijit.form.FilteringSelect`
@@ -13215,14 +14027,14 @@ dojo.declare(
                //              Specifies number of search results per page (before hitting "next" button)
                pageSize: Infinity,
 
-               // store: Object
+               // store: [const] Object
                //              Reference to data provider object used by this ComboBox
                store: null,
 
                // fetchProperties: Object
                //              Mixin to the dojo.data store's fetch.
                //              For example, to set the sort order of the ComboBox menu, pass:
-               //      |       { sort: {attribute:"name",descending: true} }
+               //      |       { sort: [{attribute:"name",descending: true}] }
                //              To override the default queryOptions so that deep=false, do:
                //      |       { queryOptions: {ignoreCase: true, deep: false} }
                fetchProperties:{},
@@ -13275,7 +14087,7 @@ dojo.declare(
                //              This specifies what query ComboBox/FilteringSelect sends to the data store,
                //              based on what the user has typed.  Changing this expression will modify
                //              whether the drop down shows only exact matches, a "starting with" match,
-               //              etc.   Use it in conjunction with highlightMatch.
+               //              etc.  Use it in conjunction with highlightMatch.
                //              dojo.data query expression pattern.
                //              `${0}` will be substituted for the user text.
                //              `*` is used for wildcards.
@@ -13286,21 +14098,32 @@ dojo.declare(
                //              Set true if the ComboBox/FilteringSelect should ignore case when matching possible items
                ignoreCase: true,
 
-               // hasDownArrow: [const] Boolean
+               // hasDownArrow: Boolean
                //              Set this textbox to have a down arrow button, to display the drop down list.
                //              Defaults to true.
                hasDownArrow: true,
 
-               templateString: dojo.cache("dijit.form", "templates/ComboBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"),
+               templateString: dojo.cache("dijit.form", "templates/DropDownBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\trole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"_buttonNode, _popupStateNode\" role=\"presentation\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&#935; \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" role=\"textbox\" aria-haspopup=\"true\"\n\t/></div\n></div>\n"),
 
                baseClass: "dijitTextBox dijitComboBox",
 
+               // dropDownClass: [protected extension] String
+               //              Name of the dropdown widget class used to select a date/time.
+               //              Subclasses should specify this.
+               dropDownClass: "dijit.form._ComboBoxMenu",
+
                // Set classes like dijitDownArrowButtonHover depending on
                // mouse action over button node
                cssStateNodes: {
-                       "downArrowNode": "dijitDownArrowButton"
+                       "_buttonNode": "dijitDownArrowButton"
                },
 
+               // Flags to _HasDropDown to limit height of drop down to make it fit in viewport
+               maxHeight: -1,
+
+               // For backwards compatibility let onClick events propagate, even clicks on the down arrow button
+               _stopClickEvents: false,
+
                _getCaretPos: function(/*DomNode*/ element){
                        // khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22
                        var pos = 0;
@@ -13317,7 +14140,7 @@ dojo.declare(
                                tr.move("character",0);
                                ntr.move("character",0);
                                try{
-                                       // If control doesnt have focus, you get an exception.
+                                       // If control doesn't have focus, you get an exception.
                                        // Seems to happen on reverse-tab, but can also happen on tab (seems to be a race condition - only happens sometimes).
                                        // There appears to be no workaround for this - googled for quite a while.
                                        ntr.setEndPoint("EndToEnd", tr);
@@ -13338,7 +14161,7 @@ dojo.declare(
                        // Additional code to set disabled state of ComboBox node.
                        // Overrides _FormValueWidget._setDisabledAttr() or ValidationTextBox._setDisabledAttr().
                        this.inherited(arguments);
-                       dijit.setWaiState(this.comboNode, "disabled", value);
+                       dijit.setWaiState(this.domNode, "disabled", value);
                },
 
                _abortQuery: function(){
@@ -13358,29 +14181,39 @@ dojo.declare(
                        //              Handles paste events
                        if(!this.searchTimer && (evt.type == 'paste'/*IE|WebKit*/ || evt.type == 'input'/*Firefox*/) && this._lastInput != this.textbox.value){
                                this.searchTimer = setTimeout(dojo.hitch(this, function(){
-                                       this._onKeyPress({charOrCode: 229}); // fake IME key to cause a search
+                                       this._onKey({charOrCode: 229}); // fake IME key to cause a search
                                }), 100); // long delay that will probably be preempted by keyboard input
                        }
                        this.inherited(arguments);
                },
 
-               _onKeyPress: function(/*Event*/ evt){
+               _onKey: function(/*Event*/ evt){
                        // summary:
                        //              Handles keyboard events
+
                        var key = evt.charOrCode;
+
                        // except for cutting/pasting case - ctrl + x/v
                        if(evt.altKey || ((evt.ctrlKey || evt.metaKey) && (key != 'x' && key != 'v')) || key == dojo.keys.SHIFT){
                                return; // throw out weird key combinations and spurious events
                        }
+                       
                        var doSearch = false;
-                       var searchFunction = "_startSearchFromInput";
-                       var pw = this._popupWidget;
+                       var pw = this.dropDown;
                        var dk = dojo.keys;
                        var highlighted = null;
                        this._prev_key_backspace = false;
                        this._abortQuery();
-                       if(this._isShowingNow){
-                               pw.handleKey(key);
+
+                       // _HasDropDown will do some of the work:
+                       //              1. when drop down is not yet shown:
+                       //                      - if user presses the down arrow key, call loadDropDown()
+                       //              2. when drop down is already displayed:
+                       //                      - on ESC key, call closeDropDown()
+                       //                      - otherwise, call dropDown.handleKey() to process the keystroke
+                       this.inherited(arguments);
+
+                       if(this._opened){
                                highlighted = pw.getHighlightedOption();
                        }
                        switch(key){
@@ -13388,10 +14221,9 @@ dojo.declare(
                                case dk.DOWN_ARROW:
                                case dk.PAGE_UP:
                                case dk.UP_ARROW:
-                                       if(!this._isShowingNow){
-                                               doSearch = true;
-                                               searchFunction = "_startSearchAll";
-                                       }else{
+                                       // Keystroke caused ComboBox_menu to move to a different item.
+                                       // Copy new item to <input> box.
+                                       if(this._opened){
                                                this._announceOption(highlighted);
                                        }
                                        dojo.stopEvent(evt);
@@ -13418,8 +14250,12 @@ dojo.declare(
                                                this._setCaretPos(this.focusNode, this.focusNode.value.length); // move cursor to end and cancel highlighting
                                        }
                                        // default case:
+                                       // if enter pressed while drop down is open, or for FilteringSelect,
+                                       // if we are in the middle of a query to convert a directly typed in value to an item,
                                        // prevent submit, but allow event to bubble
+                                       if(this._opened || this._fetchHandle){
                                        evt.preventDefault();
+                                       }
                                        // fall through
 
                                case dk.TAB:
@@ -13435,29 +14271,24 @@ dojo.declare(
                                        if(highlighted){
                                                this._selectOption();
                                        }
-                                       if(this._isShowingNow){
+                                       if(this._opened){
                                                this._lastQuery = null; // in case results come back later
-                                               this._hideResultList();
+                                               this.closeDropDown();
                                        }
                                        break;
 
                                case ' ':
                                        if(highlighted){
+                                               // user is effectively clicking a choice in the drop down menu
                                                dojo.stopEvent(evt);
                                                this._selectOption();
-                                               this._hideResultList();
+                                               this.closeDropDown();
                                        }else{
+                                               // user typed a space into the input box, treat as normal character
                                                doSearch = true;
                                        }
                                        break;
 
-                               case dk.ESCAPE:
-                                       if(this._isShowingNow){
-                                               dojo.stopEvent(evt);
-                                               this._hideResultList();
-                                       }
-                                       break;
-
                                case dk.DELETE:
                                case dk.BACKSPACE:
                                        this._prev_key_backspace = true;
@@ -13467,15 +14298,14 @@ dojo.declare(
                                default:
                                        // Non char keys (F1-F12 etc..)  shouldn't open list.
                                        // Ascii characters and IME input (Chinese, Japanese etc.) should.
-                                       // On IE and safari, IME input produces keycode == 229, and we simulate
-                                       // it on firefox by attaching to compositionend event (see compositionend method)
+                                       //IME input produces keycode == 229.
                                        doSearch = typeof key == 'string' || key == 229;
                        }
                        if(doSearch){
                                // need to wait a tad before start search so that the event
                                // bubbles through DOM and we have value visible
                                this.item = undefined; // undefined means item needs to be set
-                               this.searchTimer = setTimeout(dojo.hitch(this, searchFunction),1);
+                               this.searchTimer = setTimeout(dojo.hitch(this, "_startSearchFromInput"),1);
                        }
                },
 
@@ -13511,6 +14341,12 @@ dojo.declare(
                },
 
                _openResultList: function(/*Object*/ results, /*Object*/ dataObject){
+                       // summary:
+                       //              Callback when a search completes.
+                       // description:
+                       //              1. generates drop-down list and calls _showResultList() to display it
+                       //              2. if this result list is from user pressing "more choices"/"previous choices"
+                       //                      then tell screen reader to announce new option
                        this._fetchHandle = null;
                        if(     this.disabled ||
                                this.readOnly ||
@@ -13518,13 +14354,13 @@ dojo.declare(
                        ){
                                return;
                        }
-                       this._popupWidget.clearResultList();
-                       if(!results.length && !this._maxOptions){ // this condition needs to match !this._isvalid set in FilteringSelect::_openResultList
-                               this._hideResultList();
+                       var wasSelected = this.dropDown._highlighted_option && dojo.hasClass(this.dropDown._highlighted_option, "dijitMenuItemSelected");
+                       this.dropDown.clearResultList();
+                       if(!results.length && !this._maxOptions){ // if no results and not just the previous choices button
+                               this.closeDropDown();
                                return;
                        }
 
-
                        // Fill in the textbox with the first item from the drop down list,
                        // and highlight the characters that were auto-completed. For
                        // example, if user typed "CA" and the drop down list appeared, the
@@ -13532,7 +14368,7 @@ dojo.declare(
                        // highlighted.
 
                        dataObject._maxOptions = this._maxOptions;
-                       var nodes = this._popupWidget.createOptions(
+                       var nodes = this.dropDown.createOptions(
                                results,
                                dataObject,
                                dojo.hitch(this, "_getMenuLabelFromItem")
@@ -13546,12 +14382,14 @@ dojo.declare(
                        //              shouting the next choice
                        if(dataObject.direction){
                                if(1 == dataObject.direction){
-                                       this._popupWidget.highlightFirstOption();
+                                       this.dropDown.highlightFirstOption();
                                }else if(-1 == dataObject.direction){
-                                       this._popupWidget.highlightLastOption();
+                                       this.dropDown.highlightLastOption();
+                               }
+                               if(wasSelected){
+                                       this._announceOption(this.dropDown.getHighlightedOption());
                                }
-                               this._announceOption(this._popupWidget.getHighlightedOption());
-                       }else if(this.autoComplete && !this._prev_key_backspace /*&& !dataObject.direction*/
+                       }else if(this.autoComplete && !this._prev_key_backspace
                                // when the user clicks the arrow button to show the full list,
                                // startSearch looks for "*".
                                // it does not make sense to autocomplete
@@ -13562,62 +14400,42 @@ dojo.declare(
                },
 
                _showResultList: function(){
-                       this._hideResultList();
+                       // summary:
+                       //              Display the drop down if not already displayed, or if it is displayed, then
+                       //              reposition it if necessary (reposition may be necessary if drop down's height changed).
+
+                       this.closeDropDown(true);
+
                        // hide the tooltip
                        this.displayMessage("");
 
-                       // Position the list and if it's too big to fit on the screen then
-                       // size it to the maximum possible height
-                       // Our dear friend IE doesnt take max-height so we need to
-                       // calculate that on our own every time
-
-                       // TODO: want to redo this, see
-                       //              http://trac.dojotoolkit.org/ticket/3272
-                       //      and
-                       //              http://trac.dojotoolkit.org/ticket/4108
-
-
-                       // natural size of the list has changed, so erase old
-                       // width/height settings, which were hardcoded in a previous
-                       // call to this function (via dojo.marginBox() call)
-                       dojo.style(this._popupWidget.domNode, {width: "", height: ""});
-
-                       var best = this.open();
-                       // #3212:
-                       //              only set auto scroll bars if necessary prevents issues with
-                       //              scroll bars appearing when they shouldn't when node is made
-                       //              wider (fractional pixels cause this)
-                       var popupbox = dojo.marginBox(this._popupWidget.domNode);
-                       this._popupWidget.domNode.style.overflow =
-                               ((best.h == popupbox.h) && (best.w == popupbox.w)) ? "hidden" : "auto";
-                       // #4134:
-                       //              borrow TextArea scrollbar test so content isn't covered by
-                       //              scrollbar and horizontal scrollbar doesn't appear
-                       var newwidth = best.w;
-                       if(best.h < this._popupWidget.domNode.scrollHeight){
-                               newwidth += 16;
-                       }
-                       dojo.marginBox(this._popupWidget.domNode, {
-                               h: best.h,
-                               w: Math.max(newwidth, this.domNode.offsetWidth)
-                       });
+                       this.openDropDown();
+
+                       dijit.setWaiState(this.domNode, "expanded", "true");
+               },
+
+               loadDropDown: function(/*Function*/ callback){
+                       // Overrides _HasDropDown.loadDropDown().
+                       // This is called when user has pressed button icon or pressed the down arrow key
+                       // to open the drop down.
                        
-                       // If we increased the width of drop down to match the width of ComboBox.domNode,
-                       // then need to reposition the drop down (wrapper) so (all of) the drop down still
-                       // appears underneath the ComboBox.domNode
-                       if(newwidth < this.domNode.offsetWidth){
-                               this._popupWidget.domNode.parentNode.style.left = dojo.position(this.domNode, true).x + "px";
-                       }
+                       this._startSearchAll();
+               },
 
-                       dijit.setWaiState(this.comboNode, "expanded", "true");
+               isLoaded: function(){
+                       // signal to _HasDropDown that it needs to call loadDropDown() to load the
+                       // drop down asynchronously before displaying it
+                       return false;
                },
 
-               _hideResultList: function(){
+               closeDropDown: function(){
+                       // Overrides _HasDropDown.closeDropDown().  Closes the drop down (assuming that it's open).
+                       // This method is the callback when the user types ESC or clicking
+                       // the button icon while the drop down is open.  It's also called by other code.
                        this._abortQuery();
-                       if(this._isShowingNow){
-                               dijit.popup.close(this._popupWidget);
-                               this._isShowingNow=false;
-                               dijit.setWaiState(this.comboNode, "expanded", "false");
+                       if(this._opened){
+                               this.inherited(arguments);
+                               dijit.setWaiState(this.domNode, "expanded", "false");
                                dijit.removeWaiState(this.focusNode,"activedescendant");
                        }
                },
@@ -13629,7 +14447,7 @@ dojo.declare(
                        //              if value is now more choices or previous choices, revert
                        //              the value
                        var newvalue = this.get('displayedValue');
-                       var pw = this._popupWidget;
+                       var pw = this.dropDown;
                        if(pw && (
                                newvalue == pw._messages["previousMessage"] ||
                                newvalue == pw._messages["nextMessage"]
@@ -13651,23 +14469,25 @@ dojo.declare(
                _onBlur: function(){
                        // summary:
                        //              Called magically when focus has shifted away from this widget and it's drop down
-                       this._hideResultList();
+                       this.closeDropDown();
                        this.inherited(arguments);
                },
 
                _setItemAttr: function(/*item*/ item, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
                        // summary:
-                       //              Set the displayed valued in the input box, and the hidden value
-                       //              that gets submitted, based on a dojo.data store item.
+                       //              Set the displayed valued in the input box, and the hidden value
+                       //              that gets submitted, based on a dojo.data store item.
                        // description:
-                       //              Users shouldn't call this function; they should be calling
-                       //              attr('item', value)
+                       //              Users shouldn't call this function; they should be calling
+                       //              set('item', value)
                        // tags:
-                       //              private
-                       if(!displayedValue){ displayedValue = this.labelFunc(item, this.store); }
-                       this.value = this._getValueField() != this.searchAttr? this.store.getIdentity(item) : displayedValue;
-                       this.item = item;
-                       dijit.form.ComboBox.superclass._setValueAttr.call(this, this.value, priorityChange, displayedValue);
+                       //              private
+                       if(!displayedValue){
+                               displayedValue = this.store.getValue(item, this.searchAttr);
+                       }
+                       var value = this._getValueField() != this.searchAttr? this.store.getIdentity(item) : displayedValue;
+                       this._set("item", item);
+                       dijit.form.ComboBox.superclass._setValueAttr.call(this, value, priorityChange, displayedValue);
                },
 
                _announceOption: function(/*Node*/ node){
@@ -13681,13 +14501,13 @@ dojo.declare(
                        }
                        // pull the text value from the item attached to the DOM node
                        var newValue;
-                       if(node == this._popupWidget.nextButton ||
-                               node == this._popupWidget.previousButton){
+                       if(node == this.dropDown.nextButton ||
+                               node == this.dropDown.previousButton){
                                newValue = node.innerHTML;
                                this.item = undefined;
                                this.value = '';
                        }else{
-                               newValue = this.labelFunc(node.item, this.store);
+                               newValue = this.store.getValue(node.item, this.searchAttr).toString();
                                this.set('item', node.item, false, newValue);
                        }
                        // get the text that the user manually entered (cut off autocompleted text)
@@ -13704,28 +14524,11 @@ dojo.declare(
                        if(evt){
                                this._announceOption(evt.target);
                        }
-                       this._hideResultList();
+                       this.closeDropDown();
                        this._setCaretPos(this.focusNode, this.focusNode.value.length);
                        dijit.form._FormValueWidget.prototype._setValueAttr.call(this, this.value, true); // set this.value and fire onChange
                },
 
-               _onArrowMouseDown: function(evt){
-                       // summary:
-                       //              Callback when arrow is clicked
-                       if(this.disabled || this.readOnly){
-                               return;
-                       }
-                       dojo.stopEvent(evt);
-                       this.focus();
-                       if(this._isShowingNow){
-                               this._hideResultList();
-                       }else{
-                               // forces full population of results, if they click
-                               // on the arrow it means they want to see more options
-                               this._startSearchAll();
-                       }
-               },
-
                _startSearchAll: function(){
                        this._startSearch('');
                },
@@ -13739,9 +14542,13 @@ dojo.declare(
                },
 
                _startSearch: function(/*String*/ key){
-                       if(!this._popupWidget){
-                               var popupId = this.id + "_popup";
-                               this._popupWidget = new dijit.form._ComboBoxMenu({
+                       // summary:
+                       //              Starts a search for elements matching key (key=="" means to return all items),
+                       //              and calls _openResultList() when the search completes, to display the results.
+                       if(!this.dropDown){
+                               var popupId = this.id + "_popup",
+                               dropDownConstructor = dojo.getObject(this.dropDownClass, false);
+                               this.dropDown = new dropDownConstructor({
                                        onChange: dojo.hitch(this, this._selectOption),
                                        id: popupId,
                                        dir: this.dir
@@ -13770,7 +14577,7 @@ dojo.declare(
                                        onError: function(errText){
                                                _this._fetchHandle = null;
                                                console.error('dijit.form.ComboBox: ' + errText);
-                                               dojo.hitch(_this, "_hideResultList")();
+                                               _this.closeDropDown();
                                        },
                                        start: 0,
                                        count: this.pageSize
@@ -13785,8 +14592,9 @@ dojo.declare(
                                        //              reader knows which menu option to shout
                                        dataObject.direction = direction;
                                        this._fetchHandle = this.store.fetch(dataObject);
+                                       this.focus();
                                };
-                               this._nextSearch = this._popupWidget.onPage = dojo.hitch(this, nextSearch, this._fetchHandle);
+                               this._nextSearch = this.dropDown.onPage = dojo.hitch(this, nextSearch, this._fetchHandle);
                        }, query, this), this.searchDelay);
                },
 
@@ -13795,29 +14603,12 @@ dojo.declare(
                },
 
                _getValueField: function(){
-                       // summmary:
+                       // summary:
                        //              Helper for postMixInProperties() to set this.value based on data inlined into the markup.
                        //              Returns the attribute name in the item (in dijit.form._ComboBoxDataStore) to use as the value.
                        return this.searchAttr;
                },
 
-               /////////////// Event handlers /////////////////////
-
-               // FIXME: For 2.0, rename to "_compositionEnd"
-               compositionend: function(/*Event*/ evt){
-                       // summary:
-                       //              When inputting characters using an input method, such as
-                       //              Asian languages, it will generate this event instead of
-                       //              onKeyDown event.
-                       //              Note: this event is only triggered in FF (not in IE/safari)
-                       // tags:
-                       //              private
-
-                       // 229 is the code produced by IE and safari while pressing keys during
-                       // IME input mode
-                       this._onKeyPress({charOrCode: 229});
-               },
-
                //////////// INITIALIZATION METHODS ///////////////////////////////////////
 
                constructor: function(){
@@ -13841,13 +14632,14 @@ dojo.declare(
                                // by the selected attribute of an option tag
                                // IE6 does not set value, Opera sets value = selectedIndex
                                if(!("value" in this.params)){
-                                       var item = this.store.fetchSelectedItem();
+                                       var item = (this.item = this.store.fetchSelectedItem());
                                        if(item){
                                                var valueField = this._getValueField();
-                                               this.value = valueField != this.searchAttr? this.store.getValue(item, valueField) : this.labelFunc(item, this.store);
+                                               this.value = this.store.getValue(item, valueField);
                                        }
                                }
                        }
+
                        this.inherited(arguments);
                },
 
@@ -13857,32 +14649,24 @@ dojo.declare(
                        // tags:
                        //              protected
 
-                       if(!this.hasDownArrow){
-                               this.downArrowNode.style.display = "none";
-                       }
-
                        // find any associated label element and add to ComboBox node.
                        var label=dojo.query('label[for="'+this.id+'"]');
                        if(label.length){
                                label[0].id = (this.id+"_label");
-                               var cn=this.comboNode;
-                               dijit.setWaiState(cn, "labelledby", label[0].id);
+                               dijit.setWaiState(this.domNode, "labelledby", label[0].id);
 
                        }
                        this.inherited(arguments);
                },
 
-               uninitialize: function(){
-                       if(this._popupWidget && !this._popupWidget._destroyed){
-                               this._hideResultList();
-                               this._popupWidget.destroy();
-                       }
-                       this.inherited(arguments);
+               _setHasDownArrowAttr: function(val){
+                       this.hasDownArrow = val;
+                       this._buttonNode.style.display = val ? "" : "none";
                },
 
                _getMenuLabelFromItem: function(/*Item*/ item){
-                       var label = this.labelAttr? this.store.getValue(item, this.labelAttr) : this.labelFunc(item, this.store);
-                       var labelType = this.labelType;
+                       var label = this.labelFunc(item, this.store),
+                               labelType = this.labelType;
                        // If labelType is not "text" we don't want to screw any markup ot whatever.
                        if(this.highlightMatch != "none" && this.labelType == "text" && this._lastInput){
                                label = this.doHighlight(label, this._escapeHtml(this._lastInput));
@@ -13891,24 +14675,27 @@ dojo.declare(
                        return {html: labelType == "html", label: label};
                },
 
-               doHighlight: function(/*String*/label, /*String*/find){
+               doHighlight: function(/*String*/ label, /*String*/ find){
                        // summary:
                        //              Highlights the string entered by the user in the menu.  By default this
-                       //              highlights the first occurence found. Override this method
-                       //              to implement your custom highlighing.
+                       //              highlights the first occurrence found. Override this method
+                       //              to implement your custom highlighting.
                        // tags:
                        //              protected
 
-                       // Add greedy when this.highlightMatch == "all"
-                       var modifiers = "i"+(this.highlightMatch == "all"?"g":"");
-                       var escapedLabel = this._escapeHtml(label);
+                       var
+                               // Add (g)lobal modifier when this.highlightMatch == "all" and (i)gnorecase when this.ignoreCase == true
+                               modifiers = (this.ignoreCase ? "i" : "") + (this.highlightMatch == "all" ? "g" : ""),
+                               i = this.queryExpr.indexOf("${0}");
                        find = dojo.regexp.escapeString(find); // escape regexp special chars
-                       var ret = escapedLabel.replace(new RegExp("(^|\\s)("+ find +")", modifiers),
-                                       '$1<span class="dijitComboBoxHighlightMatch">$2</span>');
-                       return ret;// returns String, (almost) valid HTML (entities encoded)
+                       return this._escapeHtml(label).replace(
+                               // prepend ^ when this.queryExpr == "${0}*" and append $ when this.queryExpr == "*${0}"
+                               new RegExp((i == 0 ? "^" : "") + "("+ find +")" + (i == (this.queryExpr.length - 4) ? "$" : ""), modifiers),
+                               '<span class="dijitComboBoxHighlightMatch">$1</span>'
+                       ); // returns String, (almost) valid HTML (entities encoded)
                },
 
-               _escapeHtml: function(/*string*/str){
+               _escapeHtml: function(/*String*/ str){
                        // TODO Should become dojo.html.entities(), when exists use instead
                        // summary:
                        //              Adds escape sequences for special characters in XML: &<>"'
@@ -13917,19 +14704,6 @@ dojo.declare(
                        return str; // string
                },
 
-               open: function(){
-                       // summary:
-                       //              Opens the drop down menu.  TODO: rename to _open.
-                       // tags:
-                       //              private
-                       this._isShowingNow=true;
-                       return dijit.popup.open({
-                               popup: this._popupWidget,
-                               around: this.domNode,
-                               parent: this
-                       });
-               },
-
                reset: function(){
                        // Overrides the _FormWidget.reset().
                        // Additionally reset the .item (to clean up).
@@ -13939,15 +14713,15 @@ dojo.declare(
 
                labelFunc: function(/*item*/ item, /*dojo.data.store*/ store){
                        // summary:
-                       //              Computes the label to display based on the dojo.data store item.
+                       //              Computes the label to display based on the dojo.data store item.
                        // returns:
-                       //              The label that the ComboBox should display
+                       //              The label that the ComboBox should display
                        // tags:
-                       //              private
+                       //              private
 
                        // Use toString() because XMLStore returns an XMLItem whereas this
                        // method is expected to return a String (#9354)
-                       return store.getValue(item, this.searchAttr).toString(); // String
+                       return store.getValue(item, this.labelAttr || this.searchAttr).toString(); // String
                }
        }
 );
@@ -13961,9 +14735,9 @@ dojo.declare(
                // tags:
                //              private
 
-               templateString: "<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"
-                               +"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"
-                               +"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"
+               templateString: "<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"
+                               +"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' role='option'></li>"
+                               +"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' role='option'></li>"
                        +"</ul>",
 
                // _messages: Object
@@ -13973,8 +14747,16 @@ dojo.declare(
                baseClass: "dijitComboBoxMenu",
 
                postMixInProperties: function(){
+                       this.inherited(arguments);
                        this._messages = dojo.i18n.getLocalization("dijit.form", "ComboBox", this.lang);
+               },
+
+               buildRendering: function(){
                        this.inherited(arguments);
+
+                       // fill in template with i18n messages
+                       this.previousButton.innerHTML = this._messages["previousMessage"];
+                       this.nextButton.innerHTML = this._messages["nextMessage"];
                },
 
                _setValueAttr: function(/*Object*/ value){
@@ -13997,13 +14779,6 @@ dojo.declare(
                        //              callback
                },
 
-               postCreate: function(){
-                       // fill in template with i18n messages
-                       this.previousButton.innerHTML = this._messages["previousMessage"];
-                       this.nextButton.innerHTML = this._messages["nextMessage"];
-                       this.inherited(arguments);
-               },
-
                onClose: function(){
                        // summary:
                        //              Callback from dijit.popup code to this widget, notifying it that it closed
@@ -14017,9 +14792,11 @@ dojo.declare(
                        //              Creates an option to appear on the popup menu subclassed by
                        //              `dijit.form.FilteringSelect`.
 
+                       var menuitem = dojo.create("li", {
+                               "class": "dijitReset dijitMenuItem" +(this.isLeftToRight() ? "" : " dijitMenuItemRtl"),
+                               role: "option"
+                       });
                        var labelObject = labelFunc(item);
-                       var menuitem = dojo.doc.createElement("li");
-                       dijit.setWaiRole(menuitem, "option");
                        if(labelObject.html){
                                menuitem.innerHTML = labelObject.label;
                        }else{
@@ -14056,8 +14833,6 @@ dojo.declare(
                        //              iterate over cache nondestructively
                        dojo.forEach(results, function(item, i){
                                var menuitem = this._createOption(item, labelFunc);
-                               menuitem.className = "dijitReset dijitMenuItem" +
-                                       (this.isLeftToRight() ? "" : " dijitMenuItemRtl");
                                dojo.attr(menuitem, "id", this.id + i);
                                this.domNode.insertBefore(menuitem, this.nextButton);
                        }, this);
@@ -14090,6 +14865,7 @@ dojo.declare(
                        while(this.domNode.childNodes.length>2){
                                this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);
                        }
+                       this._blurOptionNode();
                },
 
                _onMouseDown: function(/*Event*/ evt){
@@ -14098,10 +14874,14 @@ dojo.declare(
 
                _onMouseUp: function(/*Event*/ evt){
                        if(evt.target === this.domNode || !this._highlighted_option){
+                               // !this._highlighted_option check to prevent immediate selection when menu appears on top
+                               // of <input>, see #9898.  Note that _HasDropDown also has code to prevent this.
                                return;
                        }else if(evt.target == this.previousButton){
+                               this._blurOptionNode();
                                this.onPage(-1);
                        }else if(evt.target == this.nextButton){
+                               this._blurOptionNode();
                                this.onPage(1);
                        }else{
                                var tgt = evt.target;
@@ -14268,20 +15048,25 @@ dojo.declare(
                        return (ho && ho.parentNode) ? ho : null;
                },
 
-               handleKey: function(key){
-                       switch(key){
+               handleKey: function(evt){
+                       // summary:
+                       //              Handle keystroke event forwarded from ComboBox, returning false if it's
+                       //              a keystroke I recognize and process, true otherwise.
+                       switch(evt.charOrCode){
                                case dojo.keys.DOWN_ARROW:
                                        this._highlightNextOption();
-                                       break;
+                                       return false;
                                case dojo.keys.PAGE_DOWN:
                                        this.pageDown();
-                                       break;
+                                       return false;
                                case dojo.keys.UP_ARROW:
                                        this._highlightPrevOption();
-                                       break;
+                                       return false;
                                case dojo.keys.PAGE_UP:
                                        this.pageUp();
-                                       break;
+                                       return false;
+                               default:
+                                       return true;
                        }
                }
        }
@@ -14309,10 +15094,10 @@ dojo.declare(
 
                _setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
                        // summary:
-                       //              Hook so attr('value', value) works.
+                       //              Hook so set('value', value) works.
                        // description:
                        //              Sets the value of the select.
-                       this.item = null; // value not looked up in store
+                       this._set("item", null); // value not looked up in store
                        if(!value){ value = ''; } // null translates to blank
                        dijit.form.ValidationTextBox.prototype._setValueAttr.call(this, value, priorityChange, displayedValue);
                }
@@ -14356,13 +15141,13 @@ dojo.declare("dijit.form._ComboBoxDataStore", null, {
 
        },
 
-       getValue: function(     /* item */ item,
-                                               /* attribute-name-string */ attribute,
-                                               /* value? */ defaultValue){
+       getValue: function(     /*item*/ item,
+                                               /*attribute-name-string*/ attribute,
+                                               /*value?*/ defaultValue){
                return (attribute == "value") ? item.value : (item.innerText || item.textContent || '');
        },
 
-       isItemLoaded: function(/* anything */ something){
+       isItemLoaded: function(/*anything*/ something){
                return true;
        },
 
@@ -14370,9 +15155,9 @@ dojo.declare("dijit.form._ComboBoxDataStore", null, {
                return {"dojo.data.api.Read": true, "dojo.data.api.Identity": true};
        },
 
-       _fetchItems: function(  /* Object */ args,
-                                                       /* Function */ findCallback,
-                                                       /* Function */ errorCallback){
+       _fetchItems: function(  /*Object*/ args,
+                                                       /*Function*/ findCallback,
+                                                       /*Function*/ errorCallback){
                // summary:
                //              See dojo.data.util.simpleFetch.fetch()
                if(!args.query){ args.query = {}; }
@@ -14388,19 +15173,19 @@ dojo.declare("dijit.form._ComboBoxDataStore", null, {
                findCallback(items, args);
        },
 
-       close: function(/*dojo.data.api.Request || args || null */ request){
+       close: function(/*dojo.data.api.Request || args || null*/ request){
                return;
        },
 
-       getLabel: function(/* item */ item){
+       getLabel: function(/*item*/ item){
                return item.innerHTML;
        },
 
-       getIdentity: function(/* item */ item){
+       getIdentity: function(/*item*/ item){
                return dojo.attr(item, "value");
        },
 
-       fetchItemByIdentity: function(/* Object */ args){
+       fetchItemByIdentity: function(/*Object*/ args){
                // summary:
                //              Given the identity of an item, this method returns the item that has
                //              that identity through the onItem callback.
@@ -14468,17 +15253,19 @@ dojo.declare(
                //                      - List can be specified either as a static list or via a javascript
                //                              function (that can get the list from a server)
 
-               _isvalid: true,
-
                // required: Boolean
                //              True (default) if user is required to enter a value into this field.
                required: true,
 
                _lastDisplayedValue: "",
 
+               _isValidSubset: function(){
+                       return this._opened;
+               },
+
                isValid: function(){
                        // Overrides ValidationTextBox.isValid()
-                       return this._isvalid || (!this.required && this.get('displayedValue') == ""); // #5974
+                       return this.item || (!this.required && this.get('displayedValue') == ""); // #5974
                },
 
                _refreshState: function(){
@@ -14487,12 +15274,12 @@ dojo.declare(
                        }
                },
 
-               _callbackSetLabel: function(    /*Array*/ result,
+               _callbackSetLabel: function(
+                                               /*Array*/ result,
                                                /*Object*/ dataObject,
                                                /*Boolean?*/ priorityChange){
                        // summary:
-                       //              Callback function that dynamically sets the label of the
-                       //              ComboBox
+                       //              Callback from dojo.data after lookup of user entered value finishes
 
                        // setValue does a synchronous lookup,
                        // so it calls _callbackSetLabel directly,
@@ -14502,35 +15289,38 @@ dojo.declare(
                                return;
                        }
                        if(!result.length){
-                               //#3268: do nothing on bad input
+                               //#3268: don't modify display value on bad input
                                //#3285: change CSS to indicate error
                                this.valueNode.value = "";
                                dijit.form.TextBox.superclass._setValueAttr.call(this, "", priorityChange || (priorityChange === undefined && !this._focused));
-                               this._isvalid = false;
+                               this._set("item", null);
                                this.validate(this._focused);
-                               this.item = null;
                        }else{
                                this.set('item', result[0], priorityChange);
                        }
                },
 
                _openResultList: function(/*Object*/ results, /*Object*/ dataObject){
+                       // Callback when a data store query completes.
                        // Overrides ComboBox._openResultList()
 
                        // #3285: tap into search callback to see if user's query resembles a match
                        if(dataObject.query[this.searchAttr] != this._lastQuery){
                                return;
                        }
+                       dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments);
+
                        if(this.item === undefined){ // item == undefined for keyboard search
-                               this._isvalid = results.length != 0 || this._maxOptions != 0; // result.length==0 && maxOptions != 0 implies the nextChoices item selected but then the datastore returned 0 more entries
+                               // If the search returned no items that means that the user typed
+                               // in something invalid (and they can't make it valid by typing more characters),
+                               // so flag the FilteringSelect as being in an invalid state
                                this.validate(true);
                        }
-                       dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments);
                },
 
                _getValueAttr: function(){
                        // summary:
-                       //              Hook for attr('value') to work.
+                       //              Hook for get('value') to work.
 
                        // don't get the textbox value but rather the previously set hidden value.
                        // Use this.valueNode.value which isn't always set for other MappedTextBox widgets until blur
@@ -14544,7 +15334,7 @@ dojo.declare(
 
                _setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange){
                        // summary:
-                       //              Hook so attr('value', value) works.
+                       //              Hook so set('value', value) works.
                        // description:
                        //              Sets the value of the select.
                        //              Also sets the label to the corresponding value by reverse lookup.
@@ -14572,10 +15362,9 @@ dojo.declare(
                        //              that gets submitted, based on a dojo.data store item.
                        // description:
                        //              Users shouldn't call this function; they should be calling
-                       //              attr('item', value)
+                       //              set('item', value)
                        // tags:
                        //              private
-                       this._isvalid = true;
                        this.inherited(arguments);
                        this.valueNode.value = this.value;
                        this._lastDisplayedValue = this.textbox.value;
@@ -14587,30 +15376,38 @@ dojo.declare(
 
                _setDisplayedValueAttr: function(/*String*/ label, /*Boolean?*/ priorityChange){
                        // summary:
-                       //              Hook so attr('displayedValue', label) works.
+                       //              Hook so set('displayedValue', label) works.
                        // description:
                        //              Sets textbox to display label. Also performs reverse lookup
-                       //              to set the hidden value.
+                       //              to set the hidden value.  label should corresponding to item.searchAttr.
 
-                       // When this is called during initialization it'll ping the datastore
-                       // for reverse lookup, and when that completes (after an XHR request)
-                       // will call setValueAttr()... but that shouldn't trigger an onChange()
-                       // event, even when it happens after creation has finished
+                       if(label == null){ label = ''; }
+
+                       // This is called at initialization along with every custom setter.
+                       // Usually (or always?) the call can be ignored.   If it needs to be
+                       // processed then at least make sure that the XHR request doesn't trigger an onChange()
+                       // event, even if it returns after creation has finished
                        if(!this._created){
+                               if(!("displayedValue" in this.params)){
+                                       return;
+                               }
                                priorityChange = false;
                        }
 
+                       // Do a reverse lookup to map the specified displayedValue to the hidden value.
+                       // Note that if there's a custom labelFunc() this code
                        if(this.store){
-                               this._hideResultList();
+                               this.closeDropDown();
                                var query = dojo.clone(this.query); // #6196: populate query with user-specifics
                                // escape meta characters of dojo.data.util.filter.patternToRegExp().
                                this._lastQuery = query[this.searchAttr] = this._getDisplayQueryString(label);
-                               // if the label is not valid, the callback will never set it,
-                               // so the last valid value will get the warning textbox set the
+                               // If the label is not valid, the callback will never set it,
+                               // so the last valid value will get the warning textbox.   Set the
                                // textbox value now so that the impending warning will make
                                // sense to the user
                                this.textbox.value = label;
                                this._lastDisplayedValue = label;
+                               this._set("displayedValue", label);     // for watch("displayedValue") notification
                                var _this = this;
                                var fetch = {
                                        query: query,
@@ -14633,11 +15430,6 @@ dojo.declare(
                        }
                },
 
-               postMixInProperties: function(){
-                       this.inherited(arguments);
-                       this._isvalid = !this.required;
-               },
-
                undo: function(){
                        this.set('displayedValue', this._lastDisplayedValue);
                }
@@ -14654,9 +15446,10 @@ dojo.provide("dijit.form.Form");
 
 
 
+
 dojo.declare(
        "dijit.form.Form",
-       [dijit._Widget, dijit._Templated, dijit.form._FormMixin],
+       [dijit._Widget, dijit._Templated, dijit.form._FormMixin, dijit.layout._ContentPaneResizeMixin],
        {
                // summary:
                //              Widget corresponding to HTML form tag, for validation and serialization
@@ -14740,7 +15533,7 @@ dojo.declare(
 
                postCreate: function(){
                        // IE tries to hide encType
-                       // TODO: this code should be in parser, not here.
+                       // TODO: remove in 2.0, no longer necessary with data-dojo-params
                        if(dojo.isIE && this.srcNodeRef && this.srcNodeRef.attributes){
                                var item = this.srcNodeRef.attributes.getNamedItem('encType');
                                if(item && !item.specified && (typeof item.value == "string")){
@@ -14761,8 +15554,8 @@ dojo.declare(
                                preventDefault: function(){ // not IE
                                                        this.returnValue = false;
                                                },
-                               stopPropagation: function(){}, 
-                               currentTarget: e ? e.target : this.domNode, 
+                               stopPropagation: function(){},
+                               currentTarget: e ? e.target : this.domNode,
                                target: e ? e.target : this.domNode
                        };
                        // if return value is not exactly false, and haven't called preventDefault(), then reset
@@ -14801,7 +15594,7 @@ dojo.declare(
                        }
                },
 
-               onSubmit: function(/*Event?*/e){
+               onSubmit: function(/*Event?*/ e){
                        // summary:
                        //              Callback when user submits the form.
                        // description:
@@ -14833,6 +15626,7 @@ dojo._hasResource["dijit.form.RadioButton"] = true;
 dojo.provide("dijit.form.RadioButton");
 
 
+
 // TODO: for 2.0, move the RadioButton code into this file
 
 }
@@ -14851,7 +15645,7 @@ dijit.form.__SelectOption = function(){
        //              place a separator at that location
        // label: String
        //              The label for our option.  It can contain html tags.
-       //  selected: Boolean
+       // selected: Boolean
        //              Whether or not we are a selected option
        // disabled: Boolean
        //              Whether or not this specific option is disabled
@@ -14869,13 +15663,13 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
        //              This also provides the mechanism for reading the elements from
        //              a store, if desired.
 
-       // multiple: Boolean
+       // multiple: [const] Boolean
        //              Whether or not we are multi-valued
        multiple: false,
 
        // options: dijit.form.__SelectOption[]
        //              The set of options for our select item.  Roughly corresponds to
-       //      the html <option> tag.
+       //              the html <option> tag.
        options: null,
 
        // store: dojo.data.api.Identity
@@ -14897,20 +15691,20 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
        //              iterated over (i.e. to filter even futher what you want to add)
        onFetch: null,
 
-       // sortByLabel: boolean
+       // sortByLabel: Boolean
        //              Flag to sort the options returned from a store by the label of
        //              the store.
        sortByLabel: true,
 
 
-       // loadChildrenOnOpen: boolean
+       // loadChildrenOnOpen: Boolean
        //              By default loadChildren is called when the items are fetched from the
        //              store.  This property allows delaying loadChildren (and the creation
-       //              of the options/menuitems) until the user opens the click the button.
-       //              dropdown
+       //              of the options/menuitems) until the user clicks the button to open the
+       //              dropdown.
        loadChildrenOnOpen: false,
 
-       getOptions: function(/* anything */ valueOrIdx){
+       getOptions: function(/*anything*/ valueOrIdx){
                // summary:
                //              Returns a given option (or options).
                // valueOrIdx:
@@ -14976,7 +15770,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                return null; // null
        },
 
-       addOption: function(/* dijit.form.__SelectOption, dijit.form.__SelectOption[] */ option){
+       addOption: function(/*dijit.form.__SelectOption|dijit.form.__SelectOption[]*/ option){
                // summary:
                //              Adds an option or options to the end of the select.  If value
                //              of the option is empty or missing, a separator is created instead.
@@ -14991,7 +15785,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                this._loadChildren();
        },
 
-       removeOption: function(/* string, dijit.form.__SelectOption, number, or array */ valueOrIdx){
+       removeOption: function(/*String|dijit.form.__SelectOption|Number|Array*/ valueOrIdx){
                // summary:
                //              Removes the given option or options.  You can remove by string
                //              (in which case the value is removed), number (in which case the
@@ -15006,7 +15800,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                        // that case, we don't want to blow up...
                        if(i){
                                this.options = dojo.filter(this.options, function(node, idx){
-                                       return (node.value !== i.value);
+                                       return (node.value !== i.value || node.label !== i.label);
                                });
                                this._removeOptionItem(i);
                        }
@@ -15014,7 +15808,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                this._loadChildren();
        },
 
-       updateOption: function(/* dijit.form.__SelectOption, dijit.form.__SelectOption[] */ newOption){
+       updateOption: function(/*dijit.form.__SelectOption|dijit.form.__SelectOption[]*/ newOption){
                // summary:
                //              Updates the values of the given option.  The option to update
                //              is matched based on the value of the entered option.  Passing
@@ -15030,9 +15824,9 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                this._loadChildren();
        },
 
-       setStore: function(/* dojo.data.api.Identity */ store,
-                                               /* anything? */ selectedValue,
-                                               /* Object? */ fetchArgs){
+       setStore: function(/*dojo.data.api.Identity*/ store,
+                                               /*anything?*/ selectedValue,
+                                               /*Object?*/ fetchArgs){
                // summary:
                //              Sets the store you would like to use with this select widget.
                //              The selected value is the value of the new store to set.  This
@@ -15059,7 +15853,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                                        dojo.connect(store, "onSet", this, "_onSetItem")
                                ];
                        }
-                       this.store = store;
+                       this._set("store", store);
                }
 
                // Turn off change notifications while we make all these changes
@@ -15072,48 +15866,52 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
 
                // Add our new options
                if(store){
-                       var cb = function(items){
-                               if(this.sortByLabel && !fetchArgs.sort && items.length){
-                                       items.sort(dojo.data.util.sorter.createSortFunction([{
-                                               attribute: store.getLabelAttributes(items[0])[0]
-                                       }], store));
-                               }
-
-                               if(fetchArgs.onFetch){
-                                       items = fetchArgs.onFetch(items);
-                               }
-                               // TODO: Add these guys as a batch, instead of separately
-                               dojo.forEach(items, function(i){
-                                       this._addOptionForItem(i);
-                               }, this);
-
-                               // Set our value (which might be undefined), and then tweak
-                               // it to send a change event with the real value
-                               this._loadingStore = false;
-                               this.set("value", (("_pendingValue" in this) ? this._pendingValue : selectedValue));
-                               delete this._pendingValue;
-
-                               if(!this.loadChildrenOnOpen){
-                                       this._loadChildren();
-                               }else{
-                                       this._pseudoLoadChildren(items);
-                               }
-                               this._fetchedWith = opts;
-                               this._lastValueReported = this.multiple ? [] : null;
-                               this._onChangeActive = true;
-                               this.onSetStore();
-                               this._handleOnChange(this.value);
-                       };
-                       var opts = dojo.mixin({onComplete:cb, scope: this}, fetchArgs);
                        this._loadingStore = true;
-                       store.fetch(opts);
+                       store.fetch(dojo.delegate(fetchArgs, {
+                               onComplete: function(items, opts){
+                                       if(this.sortByLabel && !fetchArgs.sort && items.length){
+                                               items.sort(dojo.data.util.sorter.createSortFunction([{
+                                                       attribute: store.getLabelAttributes(items[0])[0]
+                                               }], store));
+                                       }
+       
+                                       if(fetchArgs.onFetch){
+                                                       items = fetchArgs.onFetch.call(this, items, opts);
+                                       }
+                                       // TODO: Add these guys as a batch, instead of separately
+                                       dojo.forEach(items, function(i){
+                                               this._addOptionForItem(i);
+                                       }, this);
+       
+                                       // Set our value (which might be undefined), and then tweak
+                                       // it to send a change event with the real value
+                                       this._loadingStore = false;
+                                               this.set("value", "_pendingValue" in this ? this._pendingValue : selectedValue);
+                                       delete this._pendingValue;
+       
+                                       if(!this.loadChildrenOnOpen){
+                                               this._loadChildren();
+                                       }else{
+                                               this._pseudoLoadChildren(items);
+                                       }
+                                       this._fetchedWith = opts;
+                                       this._lastValueReported = this.multiple ? [] : null;
+                                       this._onChangeActive = true;
+                                       this.onSetStore();
+                                       this._handleOnChange(this.value);
+                               },
+                               scope: this
+                       }));
                }else{
                        delete this._fetchedWith;
                }
                return oStore;  // dojo.data.api.Identity
        },
 
-       _setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
+       // TODO: implement set() and watch() for store and query, although not sure how to handle
+       // setting them individually rather than together (as in setStore() above)
+
+       _setValueAttr: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){
                // summary:
                //              set the value of the widget.
                //              If a string is passed, then we set our value from looking it up.
@@ -15149,7 +15947,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                var val = dojo.map(newValue, function(i){ return i.value; }),
                        disp = dojo.map(newValue, function(i){ return i.label; });
 
-               this.value = this.multiple ? val : val[0];
+               this._set("value", this.multiple ? val : val[0]);
                this._setDisplay(this.multiple ? disp : disp[0]);
                this._updateSelection();
                this._handleOnChange(this.value, priorityChange);
@@ -15173,23 +15971,10 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                return this.multiple ? ret : ret[0];
        },
 
-       _getValueDeprecated: false, // remove when _FormWidget:getValue is removed
-       getValue: function(){
-               // summary:
-               //              get the value of the widget.
-               return this._lastValue;
-       },
-
-       undo: function(){
-               // summary:
-               //              restore the value to the last value passed to onChange
-               this._setValueAttr(this._lastValueReported, false);
-       },
-
        _loadChildren: function(){
                // summary:
                //              Loads the children represented by this widget's options.
-               //              reset the menu to make it "populatable on the next click
+               //              reset the menu to make it populatable on the next click
                if(this._loadingStore){ return; }
                dojo.forEach(this._getChildren(), function(child){
                        child.destroyRecursive();
@@ -15204,7 +15989,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
        _updateSelection: function(){
                // summary:
                //              Sets the "selected" class on the item for styling purposes
-               this.value = this._getValueFromOpts();
+               this._set("value", this._getValueFromOpts());
                var val = this.value;
                if(!dojo.isArray(val)){
                        val = [val];
@@ -15218,7 +16003,6 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                                dijit.setWaiState(child.domNode, "selected", isSelected);
                        }, this);
                }
-               this._handleOnChange(this.value);
        },
 
        _getValueFromOpts: function(){
@@ -15249,17 +16033,17 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
        },
 
        // Internal functions to call when we have store notifications come in
-       _onNewItem: function(/* item */ item, /* Object? */ parentInfo){
+       _onNewItem: function(/*item*/ item, /*Object?*/ parentInfo){
                if(!parentInfo || !parentInfo.parent){
                        // Only add it if we are top-level
                        this._addOptionForItem(item);
                }
        },
-       _onDeleteItem: function(/* item */ item){
+       _onDeleteItem: function(/*item*/ item){
                var store = this.store;
                this.removeOption(store.getIdentity(item));
        },
-       _onSetItem: function(/* item */ item){
+       _onSetItem: function(/*item*/ item){
                this.updateOption(this._getOptionObjForItem(item));
        },
 
@@ -15274,7 +16058,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                return {value: value, label: label, item:item}; // dijit.form.__SelectOption
        },
 
-       _addOptionForItem: function(/* item */ item){
+       _addOptionForItem: function(/*item*/ item){
                // summary:
                //              Creates (and adds) the option for the given item
                var store = this.store;
@@ -15290,13 +16074,18 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                this.addOption(newOpt);
        },
 
-       constructor: function(/* Object */ keywordArgs){
+       constructor: function(/*Object*/ keywordArgs){
                // summary:
                //              Saves off our value, if we have an initial one set so we
                //              can use it if we have a store as well (see startup())
                this._oValue = (keywordArgs || {}).value || null;
        },
 
+       buildRendering: function(){
+               this.inherited(arguments);
+               dojo.setSelectable(this.focusNode, false);
+       },
+
        _fillContent: function(){
                // summary:
                //              Loads our options and sets up our dropdown correctly.  We
@@ -15309,16 +16098,21 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                                                        if(node.getAttribute("type") === "separator"){
                                                                return { value: "", label: "", selected: false, disabled: false };
                                                        }
-                                                       return { value: node.getAttribute("value"),
+                                                       return {
+                                                               value: (node.getAttribute("data-" + dojo._scopeName + "-value") || node.getAttribute("value")),
                                                                                label: String(node.innerHTML),
+                                                               // FIXME: disabled and selected are not valid on complex markup children (which is why we're
+                                                               // looking for data-dojo-value above.  perhaps we should data-dojo-props="" this whole thing?)
+                                                               // decide before 1.6
                                                                                selected: node.getAttribute("selected") || false,
-                                                                               disabled: node.getAttribute("disabled") || false };
+                                                               disabled: node.getAttribute("disabled") || false
+                                                       };
                                                }, this) : [];
                }
                if(!this.value){
-                       this.value = this._getValueFromOpts();
+                       this._set("value", this._getValueFromOpts());
                }else if(this.multiple && typeof this.value == "string"){
-                       this.value = this.value.split(",");
+                       this_set("value", this.value.split(","));
                }
        },
 
@@ -15326,7 +16120,6 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                // summary:
                //              sets up our event handling that we need for functioning
                //              as a select
-               dojo.setSelectable(this.focusNode, false);
                this.inherited(arguments);
 
                // Make our event connections for updating state
@@ -15362,7 +16155,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                this.inherited(arguments);
        },
 
-       _addOptionItem: function(/* dijit.form.__SelectOption */ option){
+       _addOptionItem: function(/*dijit.form.__SelectOption*/ option){
                // summary:
                //              User-overridable function which, for the given option, adds an
                //              item to the select.  If the option doesn't have a value, then a
@@ -15370,7 +16163,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                //              in the created option widget.
        },
 
-       _removeOptionItem: function(/* dijit.form.__SelectOption */ option){
+       _removeOptionItem: function(/*dijit.form.__SelectOption*/ option){
                // summary:
                //              User-overridable function which, for the given option, removes
                //              its item from the select.
@@ -15396,7 +16189,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
                return this.getOptions(this.get("value"));
        },
 
-       _pseudoLoadChildren: function(/* item[] */ items){
+       _pseudoLoadChildren: function(/*item[]*/ items){
                // summary:
                //              a function that will "fake" loading children, if needed, and
                //              if we have set to not load children until the widget opens.
@@ -15419,6 +16212,7 @@ dojo._hasResource["dijit._KeyNavContainer"] = true;
 dojo.provide("dijit._KeyNavContainer");
 
 
+
 dojo.declare("dijit._KeyNavContainer",
        dijit._Container,
        {
@@ -15460,6 +16254,8 @@ dojo.declare("dijit._KeyNavContainer",
                        var next = dojo.hitch(this, this.focusNext);
                        dojo.forEach(prevKeyCodes, function(code){ keyCodes[code] = prev; });
                        dojo.forEach(nextKeyCodes, function(code){ keyCodes[code] = next; });
+                       keyCodes[dojo.keys.HOME] = dojo.hitch(this, "focusFirstChild");
+                       keyCodes[dojo.keys.END] = dojo.hitch(this, "focusLastChild");
                        this.connect(this.domNode, "onkeypress", "_onContainerKeypress");
                        this.connect(this.domNode, "onfocus", "_onContainerFocus");
                },
@@ -15496,6 +16292,17 @@ dojo.declare("dijit._KeyNavContainer",
                        }
                },
 
+               focusLastChild: function(){
+                       // summary:
+                       //              Focus the last focusable child in the container.
+                       // tags:
+                       //              protected
+                       var child = this._getLastFocusableChild();
+                       if(child){ // edge case: Menu could be empty or hidden
+                               this.focusChild(child);
+                       }
+               },
+
                focusNext: function(){
                        // summary:
                        //              Focus the next widget
@@ -15529,15 +16336,16 @@ dojo.declare("dijit._KeyNavContainer",
                        if(this.focusedChild && widget !== this.focusedChild){
                                this._onChildBlur(this.focusedChild);
                        }
+                       widget.set("tabIndex", this.tabIndex);  // for IE focus outline to appear, must set tabIndex before focs
                        widget.focus(last ? "end" : "start");
-                       this.focusedChild = widget;
+                       this._set("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 
+                       //              Sets tabIndex=-1 on each child, so that the tab key will
                        //              leave the container rather than visiting each child.
                        // tags:
                        //              private
@@ -15618,6 +16426,12 @@ dojo.declare("dijit._KeyNavContainer",
                        return this._getNextFocusableChild(null, 1);    // dijit._Widget
                },
 
+               _getLastFocusableChild: function(){
+                       // summary:
+                       //              Returns last 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
@@ -15665,7 +16479,7 @@ dojo.declare("dijit.MenuItem",
 
                // 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 dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon 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"),
+               templateString: dojo.cache("dijit", "templates/MenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" role=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon 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\" role=\"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" },
@@ -15702,9 +16516,8 @@ dojo.declare("dijit.MenuItem",
                        }
                },
 
-               postCreate: function(){
+               buildRendering: function(){
                        this.inherited(arguments);
-                       dojo.setSelectable(this.domNode, false);
                        var label = this.id+"_text";
                        dojo.attr(this.containerNode, "id", label);
                        if(this.accelKeyNode){
@@ -15712,6 +16525,7 @@ dojo.declare("dijit.MenuItem",
                                label += " " + this.id + "_accel";
                        }
                        dijit.setWaiState(this.domNode, "labelledby", label);
+                       dojo.setSelectable(this.domNode, false);
                },
 
                _onHover: function(){
@@ -15734,11 +16548,10 @@ dojo.declare("dijit.MenuItem",
                        // then unselect it
                        this.getParent().onItemUnhover(this);
 
-                       // _onUnhover() is called when the menu is hidden (collapsed), due to clicking
-                       // a MenuItem and having it execut.  When that happens, FF and IE don't generate
-                       // an onmouseout event for the MenuItem, so give _CssStateMixin some help
-                       this._hovering = false;
-                       this._setStateClass();
+                       // When menu is hidden (collapsed) due to clicking a MenuItem and having it execute,
+                       // FF and IE don't generate an onmouseout event for the MenuItem.
+                       // So, help out _CssStateMixin in this case.
+                       this._set("hovering", false);
                },
 
                _onClick: function(evt){
@@ -15823,19 +16636,21 @@ dojo.declare("dijit.MenuItem",
                        // summary:
                        //              Hook for attr('disabled', ...) to work.
                        //              Enable or disable this menu item.
-                       this.disabled = value;
+
                        dijit.setWaiState(this.focusNode, 'disabled', value ? 'true' : 'false');
+                       this._set("disabled", value);
                },
                _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");
+                       
+                       this._set("accelKey", value);
                }
        });
 
@@ -15907,7 +16722,6 @@ dojo.declare("dijit.PopupMenuItem",
                }
        });
 
-
 }
 
 if(!dojo._hasResource["dijit.CheckedMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
@@ -15922,7 +16736,7 @@ dojo.declare("dijit.CheckedMenuItem",
                // 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 dijitMenuItemIconCell\" 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\">&nbsp;</td>\n</tr>\n"),
+               templateString: dojo.cache("dijit", "templates/CheckedMenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" role=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"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\" role=\"presentation\">&nbsp;</td>\n</tr>\n"),
 
                // checked: Boolean
                //              Our checked state
@@ -15933,7 +16747,7 @@ dojo.declare("dijit.CheckedMenuItem",
                        //              Sets the class and state for the check box.
                        dojo.toggleClass(this.domNode, "dijitCheckedMenuItemChecked", checked);
                        dijit.setWaiState(this.domNode, "checked", checked);
-                       this.checked = checked;
+                       this._set("checked", checked);
                },
 
                onChange: function(/*Boolean*/ checked){
@@ -15974,7 +16788,8 @@ dojo.declare("dijit.MenuSeparator",
 
                templateString: dojo.cache("dijit", "templates/MenuSeparator.html", "<tr class=\"dijitMenuSeparator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),
 
-               postCreate: function(){
+               buildRendering: function(){
+                       this.inherited(arguments);
                        dojo.setSelectable(this.domNode, false);
                },
 
@@ -15988,7 +16803,6 @@ dojo.declare("dijit.MenuSeparator",
                }
        });
 
-
 }
 
 if(!dojo._hasResource["dijit.Menu"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
@@ -16001,6 +16815,11 @@ dojo.provide("dijit.Menu");
 
 
 
+
+
+
+// "dijit/MenuItem", "dijit/PopupMenuItem", "dijit/CheckedMenuItem", "dijit/MenuSeparator" for Back-compat (TODO: remove in 2.0)
+
 dojo.declare("dijit._MenuBase",
        [dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
 {
@@ -16277,8 +17096,7 @@ dojo.declare("dijit._MenuBase",
                //              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");
+               dojo.replaceClass(this.domNode, "dijitMenuActive", "dijitMenuPassive");
        },
 
        onOpen: function(/*Event*/ e){
@@ -16297,8 +17115,7 @@ dojo.declare("dijit._MenuBase",
                // 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");
+               dojo.replaceClass(this.domNode, "dijitMenuPassive", "dijitMenuActive");
        },
 
        onClose: function(){
@@ -16321,16 +17138,25 @@ dojo.declare("dijit._MenuBase",
                // tags:
                //              private
                this._stopPopupTimer();
-               if(this.focusedChild){ // unhighlight the focused item
-                       this.focusedChild._setSelected(false);
-                       this.focusedChild._onUnhover();
-                       this.focusedChild = null;
-               }
+
+               var fromItem = this.focusedChild && this.focusedChild.from_item;
+
                if(this.currentPopup){
+                       // If focus is on my child menu then move focus to me,
+                       // because IE doesn't like it when you display:none a node with focus
+                       if(dijit._curFocus && dojo.isDescendant(dijit._curFocus, this.currentPopup.domNode)){
+                               this.focusedChild.focusNode.focus();
+                       }
                        // Close all popups that are open and descendants of this menu
                        dijit.popup.close(this.currentPopup);
                        this.currentPopup = null;
                }
+
+               if(this.focusedChild){ // unhighlight the focused item
+                       this.focusedChild._setSelected(false);
+                       this.focusedChild._onUnhover();
+                       this.focusedChild = null;
+               }
        },
 
        _onItemFocus: function(/*MenuItem*/ item){
@@ -16381,7 +17207,7 @@ dojo.declare("dijit.Menu",
                this._bindings = [];
        },
 
-       templateString: dojo.cache("dijit", "templates/Menu.html", "<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),
+       templateString: dojo.cache("dijit", "templates/Menu.html", "<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" role=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=\"0\">\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),
 
        baseClass: "dijitMenu",
 
@@ -16408,7 +17234,7 @@ dojo.declare("dijit.Menu",
                        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[]
+                       // later set('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);
                }
@@ -16521,7 +17347,7 @@ dojo.declare("dijit.Menu",
                                                this._scheduleOpen(evt.target, iframe); // no coords - open near target node
                                        }
                                })
-                       ];      
+                       ];
                });
                binding.connects = cn ? doConnects(cn) : [];
 
@@ -16687,13 +17513,6 @@ dojo.declare("dijit.Menu",
 }
 );
 
-// Back-compat (TODO: remove in 2.0)
-
-
-
-
-
-
 }
 
 if(!dojo._hasResource["dijit.form.Select"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
@@ -16706,7 +17525,6 @@ dojo.provide("dijit.form.Select");
 
 
 
-
 dojo.declare("dijit.form._SelectMenu", dijit.Menu, {
        // summary:
        //              An internally-used menu for dropdown that allows us a vertical scrollbar
@@ -16727,6 +17545,16 @@ dojo.declare("dijit.form._SelectMenu", dijit.Menu, {
                dijit.setWaiRole(n,"presentation");
                n.appendChild(o);
        },
+
+       postCreate: function(){
+               // summary:
+               //              stop mousemove from selecting text on IE to be consistent with other browsers
+
+               this.inherited(arguments);
+
+               this.connect(this.domNode, "onmousemove", dojo.stopEvent);
+       },
+
        resize: function(/*Object*/ mb){
                // summary:
                //              Overridden so that we are able to handle resizing our
@@ -16755,7 +17583,7 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
 
        baseClass: "dijitSelect",
 
-       templateString: dojo.cache("dijit.form", "templates/Select.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\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\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),
+       templateString: dojo.cache("dijit.form", "templates/Select.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\trole=\"combobox\" aria-haspopup=\"true\"\n\t><tbody role=\"presentation\"><tr role=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" role=\"presentation\"\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}\" aria-hidden=\"true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" role=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" role=\"presentation\">&#9660;</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),
 
        // attributeMap: Object
        //              Add in our style to be applied to the focus node
@@ -16769,13 +17597,17 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
        //              Shows current state (ie, validation result) of input (Normal, Warning, or Error)
        state: "",
 
+       // message: String
+       //              Currently displayed error/prompt message
+       message: "",
+
        //      tooltipPosition: String[]
        //              See description of dijit.Tooltip.defaultPosition for details on this parameter.
        tooltipPosition: [],
 
        // emptyLabel: string
        //              What to display in an "empty" dropdown
-       emptyLabel: "",
+       emptyLabel: "&nbsp;",
 
        // _isLoaded: Boolean
        //              Whether or not we have been loaded
@@ -16789,11 +17621,11 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
                // summary:
                //              Set the value to be the first, or the selected index
                this.inherited(arguments);
+               // set value from selected option
                if(this.options.length && !this.value && this.srcNodeRef){
-                       var si = this.srcNodeRef.selectedIndex;
-                       this.value = this.options[si != -1 ? si : 0].value;
+                       var si = this.srcNodeRef.selectedIndex || 0; // || 0 needed for when srcNodeRef is not a SELECT
+                       this.value = this.options[si >= 0 ? si : 0].value;
                }
-
                // Create the dropDown widget
                this.dropDown = new dijit.form._SelectMenu({id: this.id + "_menu"});
                dojo.addClass(this.dropDown.domNode, this.baseClass + "Menu");
@@ -16803,7 +17635,7 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
                // summary:
                //              For the given option, return the menu item that should be
                //              used to display it.  This can be overridden as needed
-               if(!option.value){
+               if(!option.value && !option.label){
                        // We are a separator (no label set for it)
                        return new dijit.MenuSeparator();
                }else{
@@ -16811,7 +17643,7 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
                        var click = dojo.hitch(this, "_setValueAttr", option);
                        var item = new dijit.MenuItem({
                                option: option,
-                               label: option.label,
+                               label: option.label || this.emptyLabel,
                                onClick: click,
                                disabled: option.disabled || false
                        });
@@ -16865,7 +17697,6 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
                        this._updateSelection();
                }
 
-               var len = this.options.length;
                this._isLoaded = false;
                this._childrenLoaded = true;
 
@@ -16883,10 +17714,9 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
        _setDisplay: function(/*String*/ newDisplay){
                // summary:
                //              sets the display for the given value (or values)
-               this.containerNode.innerHTML = '<span class="dijitReset dijitInline ' + this.baseClass + 'Label">' +
-                                       (newDisplay || this.emptyLabel || "&nbsp;") +
-                                       '</span>';
-               dijit.setWaiState(this.focusNode, "valuetext", (newDisplay || this.emptyLabel || "&nbsp;") );
+               var lbl = newDisplay || this.emptyLabel;
+               this.containerNode.innerHTML = '<span class="dijitReset dijitInline ' + this.baseClass + 'Label">' + lbl + '</span>';
+               dijit.setWaiState(this.focusNode, "valuetext", lbl);
        },
 
        validate: function(/*Boolean*/ isFocused){
@@ -16898,12 +17728,11 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
                //              set the value.
                
                var isValid = this.isValid(isFocused);
-               this.state = isValid ? "" : "Error";
-               this._setStateClass();
+               this._set("state", isValid ? "" : "Error");
                dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
                var message = isValid ? "" : this._missingMsg;
-               if(this._message !== message){
-                       this._message = message;
+               if(this.message !== message){
+                       this._set("message", message);
                        dijit.hideTooltip(this.domNode);
                        if(message){
                                dijit.showTooltip(message, this.domNode, this.tooltipPosition, !this.isLeftToRight());
@@ -16914,9 +17743,9 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
 
        isValid: function(/*Boolean*/ isFocused){
                // summary:
-               //              Whether or not this is a valid value.   The only way a Select
+               //              Whether or not this is a valid value.  The only way a Select
                //              can be invalid is when it's required but nothing is selected.
-               return (!this.required || !(/^\s*$/.test(this.value)));
+               return (!this.required || this.value === 0 || !(/^\s*$/.test(this.value || ""))); // handle value is null or undefined
        },
 
        reset: function(){
@@ -16924,9 +17753,8 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
                //              Overridden so that the state will be cleared.
                this.inherited(arguments);
                dijit.hideTooltip(this.domNode);
-               this.state = "";
-               this._setStateClass();
-               delete this._message;
+               this._set("state", "");
+               this._set("message", "")
        },
 
        postMixInProperties: function(){
@@ -16938,10 +17766,17 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD
        },
 
        postCreate: function(){
+               // summary:
+               //              stop mousemove from selecting text on IE to be consistent with other browsers
+
                this.inherited(arguments);
-               if(this.tableNode.style.width){
-                       dojo.addClass(this.domNode, this.baseClass + "FixedWidth");
-               }
+
+               this.connect(this.domNode, "onmousemove", dojo.stopEvent);
+       },
+
+       _setStyleAttr: function(/*String||Object*/ value){
+               this.inherited(arguments);
+               dojo.toggleClass(this.domNode, this.baseClass + "FixedWidth", !!this.tableNode.style.width);
        },
 
        isLoaded: function(){
@@ -17017,12 +17852,20 @@ dojo.declare("dijit.form.SimpleTextarea",
 
        postMixInProperties: function(){
                // Copy value from srcNodeRef, unless user specified a value explicitly (or there is no srcNodeRef)
+               // TODO: parser will handle this in 2.0
                if(!this.value && this.srcNodeRef){
                        this.value = this.srcNodeRef.value;
                }
                this.inherited(arguments);
        },
 
+       buildRendering: function(){
+               this.inherited(arguments);
+               if(dojo.isIE && this.cols){ // attribute selectors is not supported in IE6
+                       dojo.addClass(this.textbox, "dijitTextAreaCols");
+               }
+       },
+
        filter: function(/*String*/ value){
                // Override TextBox.filter to deal with newlines... specifically (IIRC) this is for IE which writes newlines
                // as \r\n instead of just \n
@@ -17032,13 +17875,6 @@ dojo.declare("dijit.form.SimpleTextarea",
                return this.inherited(arguments);
        },
 
-       postCreate: function(){
-               this.inherited(arguments);
-               if(dojo.isIE && this.cols){ // attribute selectors is not supported in IE6
-                       dojo.addClass(this.textbox, "dijitTextAreaCols");
-               }
-       },
-
        _previousValue: "",
        _onInput: function(/*Event?*/ e){
                // Override TextBox._onInput() to enforce maxLength restriction
@@ -17086,8 +17922,6 @@ dojo.provide("dijit.InlineEditBox");
 
 
 
-
-
 dojo.declare("dijit.InlineEditBox",
        dijit._Widget,
        {
@@ -17131,12 +17965,12 @@ dojo.declare("dijit.InlineEditBox",
        //              rather than plain text (ex: `dijit.Editor`)
        renderAsHtml: false,
 
-       // editor: String
-       //              Class name for Editor widget
+       // editor: String|Function
+       //              Class name (or reference to the Class) for Editor widget
        editor: "dijit.form.TextBox",
 
-       // editorWrapper: String
-       //              Class name for widget that wraps the editor widget, displaying save/cancel
+       // editorWrapper: String|Function
+       //              Class name (or reference to the Class) for widget that wraps the editor widget, displaying save/cancel
        //              buttons.
        editorWrapper: "dijit._InlineEditor",
 
@@ -17144,6 +17978,10 @@ dojo.declare("dijit.InlineEditBox",
        //              Set of parameters for editor, like {required: true}
        editorParams: {},
 
+       // disabled: Boolean
+       //              If true, clicking the InlineEditBox to edit it will have no effect.
+       disabled: false,
+
        onChange: function(value){
                // summary:
                //              Set this handler to be notified of changes to value.
@@ -17226,7 +18064,6 @@ dojo.declare("dijit.InlineEditBox",
                // summary:
                //              Hook to make set("disabled", ...) work.
                //              Set disabled state of widget.
-               this.disabled = disabled;
                dijit.setWaiState(this.domNode, "disabled", disabled);
                if(disabled){
                        this.displayNode.removeAttribute("tabIndex");
@@ -17234,6 +18071,7 @@ dojo.declare("dijit.InlineEditBox",
                        this.displayNode.setAttribute("tabIndex", 0);
                }
                dojo.toggleClass(this.displayNode, "dijitInlineEditBoxDisplayModeDisabled", disabled);
+               this._set("disabled", disabled);
        },
 
        _onMouseOver: function(){
@@ -17291,7 +18129,7 @@ dojo.declare("dijit.InlineEditBox",
                        var placeholder = dojo.create("span", null, this.domNode, "before");
 
                        // Create the editor wrapper (the thing that holds the editor widget and the save/cancel buttons)
-                       var ewc = dojo.getObject(this.editorWrapper);
+                       var ewc = typeof this.editorWrapper == "string" ? dojo.getObject(this.editorWrapper) : this.editorWrapper;
                        this.wrapperWidget = new ewc({
                                value: this.value,
                                buttonSave: this.buttonSave,
@@ -17305,6 +18143,9 @@ dojo.declare("dijit.InlineEditBox",
                                save: dojo.hitch(this, "save"),
                                cancel: dojo.hitch(this, "cancel")
                        }, placeholder);
+                       if(!this._started){
+                               this.startup();
+                       }
                }
                var ww = this.wrapperWidget;
 
@@ -17350,7 +18191,7 @@ dojo.declare("dijit.InlineEditBox",
        },
 
        destroy: function(){
-               if(this.wrapperWidget){
+               if(this.wrapperWidget && !this.wrapperWidget._destroyed){
                        this.wrapperWidget.destroy();
                        delete this.wrapperWidget;
                }
@@ -17387,9 +18228,6 @@ dojo.declare("dijit.InlineEditBox",
                var value = ww.getValue();
                this.set('value', value); // display changed, formatted value
 
-               // tell the world that we have changed
-               setTimeout(dojo.hitch(this, "onChange", value), 0); // setTimeout prevents browser freeze for long-running event handlers
-
                this._showText(focus); // set focus as needed
        },
 
@@ -17407,11 +18245,15 @@ dojo.declare("dijit.InlineEditBox",
                //              Hook to make set("value", ...) work.
                //              Inserts specified HTML value into this node, or an "input needed" character if node is blank.
 
-               this.value = val = dojo.trim(val);
-               if(!this.renderAsHtml){
-                       val = val.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;").replace(/\n/g, "<br>");
+               val = dojo.trim(val);
+               var renderVal = this.renderAsHtml ? val : val.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;").replace(/\n/g, "<br>");
+               this.displayNode.innerHTML = renderVal || this.noValueIndicator;
+               this._set("value", val);
+
+               if(this._started){
+                       // tell the world that we have changed
+                       setTimeout(dojo.hitch(this, "onChange", val), 0); // setTimeout prevents browser freeze for long-running event handlers
                }
-               this.displayNode.innerHTML = val || this.noValueIndicator;
        },
 
        getValue: function(){
@@ -17456,7 +18298,7 @@ dojo.declare(
        // value: String
        //              Value as an HTML string or plain text string, depending on renderAsHTML flag
 
-       templateString: dojo.cache("dijit", "templates/InlineEditBox.html", "<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"),
+       templateString: dojo.cache("dijit", "templates/InlineEditBox.html", "<span data-dojo-attach-point=\"editNode\" role=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdata-dojo-attach-event=\"onkeypress: _onKeyPress\"\n\t><span data-dojo-attach-point=\"editorPlaceholder\"></span\n\t><span data-dojo-attach-point=\"buttonContainer\"\n\t\t><button data-dojo-type=\"dijit.form.Button\" data-dojo-props=\"label: '${buttonSave}', 'class': 'saveButton'\"\n\t\t\tdata-dojo-attach-point=\"saveButton\" data-dojo-attach-event=\"onClick:save\"></button\n\t\t><button data-dojo-type=\"dijit.form.Button\"  data-dojo-props=\"label: '${buttonCancel}', 'class': 'cancelButton'\"\n\t\t\tdata-dojo-attach-point=\"cancelButton\" data-dojo-attach-event=\"onClick:cancel\"></button\n\t></span\n></span>\n"),
        widgetsInTemplate: true,
 
        postMixInProperties: function(){
@@ -17467,9 +18309,11 @@ dojo.declare(
                }, this);
        },
 
-       postCreate: function(){
+       buildRendering: function(){
+               this.inherited(arguments);
+
                // Create edit widget in place in the template
-               var cls = dojo.getObject(this.editor);
+               var cls = typeof this.editor == "string" ? dojo.getObject(this.editor) : this.editor;
 
                // Copy the style from the source
                // Don't copy ALL properties though, just the necessary/applicable ones.
@@ -17504,13 +18348,21 @@ dojo.declare(
                        lang: this.lang
                });
                editorParams[ "displayedValue" in cls.prototype ? "displayedValue" : "value"] = this.value;
-               var ew = (this.editWidget = new cls(editorParams, this.editorPlaceholder));
+               this.editWidget = new cls(editorParams, this.editorPlaceholder);
 
                if(this.inlineEditBox.autoSave){
                        // Remove the save/cancel buttons since saving is done by simply tabbing away or
                        // selecting a value from the drop down list
                        dojo.destroy(this.buttonContainer);
+               }
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
+
+               var ew = this.editWidget;
 
+               if(this.inlineEditBox.autoSave){
                        // Selecting a value from a drop down list causes an onChange event and then we save
                        this.connect(ew, "onChange", "_onChange");
 
@@ -17520,7 +18372,7 @@ dojo.declare(
                        this.connect(ew, "onKeyPress", "_onKeyPress");
                }else{
                        // If possible, enable/disable save button based on whether the user has changed the value
-                       if("intermediateChanges" in cls.prototype){
+                       if("intermediateChanges" in ew){
                                ew.set("intermediateChanges", true);
                                this.connect(ew, "onChange", "_onIntermediateChange");
                                this.saveButton.set("disabled", true);
@@ -17670,7 +18522,7 @@ dojo.__cookieProps = function(){
 
 
 dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/props){
-       //      summary: 
+       //      summary:
        //              Get or set a cookie.
        //      description:
        //              If one argument is passed, returns the value of the cookie
@@ -17679,17 +18531,17 @@ dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/
        //              Name of the cookie
        //      value:
        //              Value for the cookie
-       //      props: 
+       //      props:
        //              Properties for the cookie
        //      example:
        //              set a cookie with the JSON-serialized contents of an object which
        //              will expire 5 days from now:
        //      |       dojo.cookie("configObj", dojo.toJson(config), { expires: 5 });
-       //      
+       //
        //      example:
        //              de-serialize a cookie back into a JavaScript object:
        //      |       var config = dojo.fromJson(dojo.cookie("configObj"));
-       //      
+       //
        //      example:
        //              delete a cookie:
        //      |       dojo.cookie("configObj", null, {expires: -1});
@@ -17701,7 +18553,7 @@ dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/
                props = props || {};
 // FIXME: expires=0 seems to disappear right away, not on close? (FF3)  Change docs?
                var exp = props.expires;
-               if(typeof exp == "number"){ 
+               if(typeof exp == "number"){
                        var d = new Date();
                        d.setTime(d.getTime() + exp*24*60*60*1000);
                        exp = props.expires = d;
@@ -17722,7 +18574,7 @@ dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/
 dojo.cookie.isSupported = function(){
        //      summary:
        //              Use to determine if the current browser supports cookies or not.
-       //              
+       //
        //              Returns true if user allows cookies.
        //              Returns false if user doesn't allow cookies.
 
@@ -17758,7 +18610,7 @@ dojo.declare(
                        //              Monitors the specified StackContainer, and whenever a page is
                        //              added, deleted, or selected, updates itself accordingly.
 
-                       templateString: "<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",
+                       templateString: "<span role='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",
 
                        // containerId: [const] String
                        //              The id of the page container that I point to
@@ -17768,11 +18620,19 @@ dojo.declare(
                        //              The name of the button widget to create to correspond to each page
                        buttonWidget: "dijit.layout._StackButton",
 
-                       postCreate: function(){
-                               dijit.setWaiRole(this.domNode, "tablist");
-
+                       constructor: function(){
                                this.pane2button = {};          // mapping from pane id to buttons
-                               this.pane2handles = {};         // mapping from pane id to this.connect() handles
+                               this.pane2connects = {};        // mapping from pane id to this.connect() handles
+                               this.pane2watches = {};         // mapping from pane id to watch() handles
+                       },
+
+                       buildRendering: function(){
+                               this.inherited(arguments);
+                               dijit.setWaiRole(this.domNode, "tablist");      // TODO: unneeded?   it's in template above.
+                       },
+
+                       postCreate: function(){
+                               this.inherited(arguments);
 
                                // Listen to notifications from StackContainer
                                this.subscribe(this.containerId+"-startup", "onStartup");
@@ -17822,22 +18682,25 @@ dojo.declare(
                                        title: page.tooltip
                                });
                                dijit.setWaiState(button.focusNode,"selected", "false");
-                               this.pane2handles[page.id] = [
-                                       this.connect(page, 'set', function(name, value){
-                                               var buttonAttr = {
-                                                       title: 'label',
-                                                       showTitle: 'showLabel',
-                                                       iconClass: 'iconClass',
-                                                       closable: 'closeButton',
-                                                       tooltip: 'title'
-                                               }[name];
-                                               if(buttonAttr){
-                                                       button.set(buttonAttr, value);
-                                               }
-                                       }),
+
+
+                               // map from page attribute to corresponding tab button attribute
+                               var pageAttrList = ["title", "showTitle", "iconClass", "closable", "tooltip"],
+                                       buttonAttrList = ["label", "showLabel", "iconClass", "closeButton", "title"];
+
+                               // watch() so events like page title changes are reflected in tab button
+                               this.pane2watches[page.id] = dojo.map(pageAttrList, function(pageAttr, idx){
+                                       return page.watch(pageAttr, function(name, oldVal, newVal){
+                                               button.set(buttonAttrList[idx], newVal);
+                                       });
+                               });
+                                       
+                               // connections so that clicking a tab button selects the corresponding page
+                               this.pane2connects[page.id] = [
                                        this.connect(button, 'onClick', dojo.hitch(this,"onButtonClick", page)),
                                        this.connect(button, 'onClickCloseButton', dojo.hitch(this,"onCloseButtonClick", page))
                                ];
+
                                this.addChild(button, insertIndex);
                                this.pane2button[page.id] = button;
                                page.controlButton = button;    // this value might be overwritten if two tabs point to same container
@@ -17860,8 +18723,13 @@ dojo.declare(
                                //              private
 
                                if(this._currentChild === page){ this._currentChild = null; }
-                               dojo.forEach(this.pane2handles[page.id], this.disconnect, this);
-                               delete this.pane2handles[page.id];
+
+                               // disconnect/unwatch connections/watches related to page being removed
+                               dojo.forEach(this.pane2connects[page.id], dojo.hitch(this, "disconnect"));
+                               delete this.pane2connects[page.id];
+                               dojo.forEach(this.pane2watches[page.id], function(w){ w.unwatch(); });
+                               delete this.pane2watches[page.id];
+
                                var button = this.pane2button[page.id];
                                if(button){
                                        this.removeChild(button);
@@ -17963,6 +18831,14 @@ dojo.declare(
                                                case k.PAGE_DOWN:
                                                        if(e.ctrlKey){ forward = true; }
                                                        break;
+                                               case k.HOME:
+                                               case k.END:
+                                                       var children = this.getChildren();
+                                                       if(children && children.length){
+                                                               children[e.charOrCode == k.HOME ? 0 : children.length-1].onClick();
+                                                       }
+                                                       dojo.stopEvent(e);
+                                                       break;
                                                case k.DELETE:
                                                        if(this._currentChild.closable){
                                                                this.onCloseButtonClick(this._currentChild);
@@ -17982,7 +18858,7 @@ dojo.declare(
                                                                }
                                                        }
                                        }
-                                       // handle page navigation
+                                       // handle next/previous page navigation (left/right arrow, etc.)
                                        if(forward !== null){
                                                this.adjacent(forward).onClick();
                                                dojo.stopEvent(e);
@@ -18016,9 +18892,9 @@ dojo.declare("dijit.layout._StackButton",
                // Probably we should be calling this.startupKeyNavChildren() instead.
                tabIndex: "-1",
 
-               postCreate: function(/*Event*/ evt){
-                       dijit.setWaiRole((this.focusNode || this.domNode), "tab");
+               buildRendering: function(/*Event*/ evt){
                        this.inherited(arguments);
+                       dijit.setWaiRole((this.focusNode || this.domNode), "tab");
                },
 
                onClick: function(/*Event*/ evt){
@@ -18040,7 +18916,6 @@ dojo.declare("dijit.layout._StackButton",
                }
        });
 
-
 }
 
 if(!dojo._hasResource["dijit.layout.StackContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
@@ -18052,6 +18927,7 @@ dojo.provide("dijit.layout.StackContainer");
 
 
 
+
 dojo.declare(
        "dijit.layout.StackContainer",
        dijit.layout._LayoutWidget,
@@ -18085,10 +18961,14 @@ dojo.declare(
        selectedChildWidget: null,
 =====*/
 
-       postCreate: function(){
+       buildRendering: function(){
                this.inherited(arguments);
                dojo.addClass(this.domNode, "dijitLayoutContainer");
                dijit.setWaiRole(this.containerNode, "tabpanel");
+       },
+
+       postCreate: function(){
+               this.inherited(arguments);
                this.connect(this.domNode, "onkeypress", this._onKeyPress);
        },
 
@@ -18144,8 +19024,7 @@ dojo.declare(
 
                this.inherited(arguments);
 
-               dojo.removeClass(child.domNode, "dijitVisible");
-               dojo.addClass(child.domNode, "dijitHidden");
+               dojo.replaceClass(child.domNode, "dijitHidden", "dijitVisible");
 
                // remove the title attribute so it doesn't show up when i hover
                // over a node
@@ -18218,17 +19097,19 @@ dojo.declare(
 
                if(this.selectedChildWidget != page){
                        // Deselect old page and select new one
-                       this._transition(page, this.selectedChildWidget, animate);
-                       this.selectedChildWidget = page;
+                       var d = this._transition(page, this.selectedChildWidget, animate);
+                       this._set("selectedChildWidget", page);
                        dojo.publish(this.id+"-selectChild", [page]);
 
                        if(this.persist){
                                dojo.cookie(this.id + "_selectedChild", this.selectedChildWidget.id);
                        }
                }
+
+               return d;               // If child has an href, promise that fires when the child's href finishes loading
        },
 
-       _transition: function(/*dijit._Widget*/newWidget, /*dijit._Widget*/oldWidget){
+       _transition: function(/*dijit._Widget*/ newWidget, /*dijit._Widget*/ oldWidget, /*Boolean*/ animate){
                // summary:
                //              Hide the old widget and display the new widget.
                //              Subclasses should override this.
@@ -18237,7 +19118,7 @@ dojo.declare(
                if(oldWidget){
                        this._hideChild(oldWidget);
                }
-               this._showChild(newWidget);
+               var d = this._showChild(newWidget);
 
                // Size the new widget, in case this is the first time it's being shown,
                // or I have been resized since the last time it was shown.
@@ -18251,6 +19132,8 @@ dojo.declare(
                                newWidget.resize();
                        }
                }
+
+               return d;       // If child has an href, promise that fires when the child's href finishes loading
        },
 
        _adjacent: function(/*Boolean*/ forward){
@@ -18265,13 +19148,13 @@ dojo.declare(
        forward: function(){
                // summary:
                //              Advance to next page.
-               this.selectChild(this._adjacent(true), true);
+               return this.selectChild(this._adjacent(true), true);
        },
 
        back: function(){
                // summary:
                //              Go back to previous page.
-               this.selectChild(this._adjacent(false), true);
+               return this.selectChild(this._adjacent(false), true);
        },
 
        _onKeyPress: function(e){
@@ -18289,24 +19172,24 @@ dojo.declare(
                // summary:
                //              Show the specified child by changing it's CSS, and call _onShow()/onShow() so
                //              it can do any updates it needs regarding loading href's etc.
+               // returns:
+               //              Promise that fires when page has finished showing, or true if there's no href
                var children = this.getChildren();
                page.isFirstChild = (page == children[0]);
                page.isLastChild = (page == children[children.length-1]);
-               page.selected = true;
+               page._set("selected", true);
 
-               dojo.removeClass(page.domNode, "dijitHidden");
-               dojo.addClass(page.domNode, "dijitVisible");
+               dojo.replaceClass(page.domNode, "dijitVisible", "dijitHidden");
 
-               page._onShow();
+               return page._onShow() || true;
        },
 
        _hideChild: function(/*dijit._Widget*/ page){
                // summary:
                //              Hide the specified child by changing it's CSS, and call _onHide() so
                //              it's notified.
-               page.selected=false;
-               dojo.removeClass(page.domNode, "dijitVisible");
-               dojo.addClass(page.domNode, "dijitHidden");
+               page._set("selected", false);
+               dojo.replaceClass(page.domNode, "dijitHidden", "dijitVisible");
 
                page.onHide();
        },
@@ -18325,7 +19208,7 @@ dojo.declare(
                }
        },
 
-       destroyDescendants: function(/*Boolean*/preserveDom){
+       destroyDescendants: function(/*Boolean*/ preserveDom){
                dojo.forEach(this.getChildren(), function(child){
                        this.removeChild(child);
                        child.destroyRecursive(preserveDom);
@@ -18336,7 +19219,6 @@ dojo.declare(
 // For back-compat, remove for 2.0
 
 
-
 // These arguments can be specified for the children of a StackContainer.
 // Since any widget can be specified as a StackContainer child, mix them
 // into the base widget class.  (This is a hack, but it's effective.)
@@ -18401,8 +19283,28 @@ dojo.provide("dijit.layout.AccordionContainer");
 
 
 
+//dojo.require("dijit.layout.AccordionPane "); // for back compat, remove for 2.0
 
-       // for back compat, remove for 2.0
+// Design notes:
+//
+// An AccordionContainer is a StackContainer, but each child (typically ContentPane)
+// is wrapped in a _AccordionInnerContainer.   This is hidden from the caller.
+//
+// The resulting markup will look like:
+//
+//     <div class=dijitAccordionContainer>
+//             <div class=dijitAccordionInnerContainer>        (one pane)
+//                             <div class=dijitAccordionTitle>         (title bar) ... </div>
+//                             <div class=dijtAccordionChildWrapper>   (content pane) </div>
+//             </div>
+//     </div>
+//
+// Normally the dijtAccordionChildWrapper is hidden for all but one child (the shown
+// child), so the space for the content pane is all the title bars + the one dijtAccordionChildWrapper,
+// which on claro has a 1px border plus a 2px bottom margin.
+//
+// During animation there are two dijtAccordionChildWrapper's shown, so we need
+// to compensate for that.
 
 dojo.declare(
        "dijit.layout.AccordionContainer",
@@ -18428,17 +19330,18 @@ dojo.declare(
                //              The name of the widget used to display the title of each pane
                buttonWidget: "dijit.layout._AccordionButton",
 
+/*=====
                // _verticalSpace: Number
                //              Pixels of space available for the open pane
                //              (my content box size minus the cumulative size of all the title bars)
                _verticalSpace: 0,
-
+=====*/
                baseClass: "dijitAccordionContainer",
 
-               postCreate: function(){
-                       this.domNode.style.overflow = "hidden";
+               buildRendering: function(){
                        this.inherited(arguments);
-                       dijit.setWaiRole(this.domNode, "tablist");
+                       this.domNode.style.overflow = "hidden";         // TODO: put this in dijit.css
+                       dijit.setWaiRole(this.domNode, "tablist");      // TODO: put this in template
                },
 
                startup: function(){
@@ -18452,20 +19355,6 @@ dojo.declare(
                        }
                },
 
-               _getTargetHeight: function(/* Node */ node){
-                       // summary:
-                       //              For the given node, returns the height that should be
-                       //              set to achieve our vertical space (subtract any padding
-                       //              we may have).
-                       //
-                       //              This is used by the animations.
-                       //
-                       //              TODO: I don't think this works correctly in IE quirks when an elements
-                       //              style.height including padding and borders
-                       var cs = dojo.getComputedStyle(node);
-                       return Math.max(this._verticalSpace - dojo._getPadBorderExtents(node, cs).h - dojo._getMarginExtents(node, cs).h, 0);
-               },
-
                layout: function(){
                        // Implement _LayoutWidget.layout() virtual method.
                        // Set the height of the open pane based on what room remains.
@@ -18474,25 +19363,31 @@ dojo.declare(
                        
                        if(!openPane){ return;}
 
-                       var openPaneContainer = openPane._wrapperWidget.domNode,
-                               openPaneContainerMargin = dojo._getMarginExtents(openPaneContainer),
-                               openPaneContainerPadBorder = dojo._getPadBorderExtents(openPaneContainer),
+                       // space taken up by title, plus wrapper div (with border/margin) for open pane
+                       var wrapperDomNode = openPane._wrapperWidget.domNode,
+                               wrapperDomNodeMargin = dojo._getMarginExtents(wrapperDomNode),
+                               wrapperDomNodePadBorder = dojo._getPadBorderExtents(wrapperDomNode),
+                               wrapperContainerNode = openPane._wrapperWidget.containerNode,
+                               wrapperContainerNodeMargin = dojo._getMarginExtents(wrapperContainerNode),
+                               wrapperContainerNodePadBorder = dojo._getPadBorderExtents(wrapperContainerNode),
                                mySize = this._contentBox;
 
                        // get cumulative height of all the unselected title bars
                        var totalCollapsedHeight = 0;
                        dojo.forEach(this.getChildren(), function(child){
                    if(child != openPane){
-                                       totalCollapsedHeight += dojo.marginBox(child._wrapperWidget.domNode).h;
+                                       totalCollapsedHeight += dojo._getMarginSize(child._wrapperWidget.domNode).h;
                                }
                        });
-                       this._verticalSpace = mySize.h - totalCollapsedHeight - openPaneContainerMargin.h 
-                               - openPaneContainerPadBorder.h - openPane._buttonWidget.getTitleHeight();
+                       this._verticalSpace = mySize.h - totalCollapsedHeight - wrapperDomNodeMargin.h
+                               - wrapperDomNodePadBorder.h - wrapperContainerNodeMargin.h - wrapperContainerNodePadBorder.h
+                               - openPane._buttonWidget.getTitleHeight();
 
                        // Memo size to make displayed child
                        this._containerContentBox = {
                                h: this._verticalSpace,
-                               w: this._contentBox.w - openPaneContainerMargin.w - openPaneContainerPadBorder.w
+                               w: this._contentBox.w - wrapperDomNodeMargin.w - wrapperDomNodePadBorder.w
+                                       - wrapperContainerNodeMargin.w - wrapperContainerNodePadBorder.w
                        };
 
                        if(openPane){
@@ -18516,7 +19411,7 @@ dojo.declare(
                        this.inherited(arguments);
                },
 
-               addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){  
+               addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
                        if(this._started){
                                // Adding a child to a started Accordion is complicated because children have
                                // wrapper widgets.  Default code path (calling this.inherited()) would add
@@ -18532,7 +19427,7 @@ dojo.declare(
                                // Then stick the wrapper widget around the child widget
                                this._setupChild(child);
 
-                               // Code below copied from StackContainer        
+                               // Code below copied from StackContainer
                                dojo.publish(this.id+"-addChild", [child, insertIndex]);
                                this.layout();
                                if(!this.selectedChildWidget){
@@ -18548,9 +19443,15 @@ dojo.declare(
                removeChild: function(child){
                        // Overrides _LayoutWidget.removeChild().
 
-                       // destroy wrapper widget first, before StackContainer.getChildren() call
-                       child._wrapperWidget.destroy();
-                       delete child._wrapperWidget;
+                       // Destroy wrapper widget first, before StackContainer.getChildren() call.
+                       // Replace wrapper widget with true child widget (ContentPane etc.).
+                       // This step only happens if the AccordionContainer has been started; otherwise there's no wrapper.
+                       if(child._wrapperWidget){
+                               dojo.place(child.domNode, child._wrapperWidget.domNode, "after");
+                               child._wrapperWidget.destroy();
+                               delete child._wrapperWidget;
+                       }
+
                        dojo.removeClass(child.domNode, "dijitHidden");
 
                        this.inherited(arguments);
@@ -18564,23 +19465,53 @@ dojo.declare(
                },
 
                destroy: function(){
+                       if(this._animation){
+                               this._animation.stop();
+                       }
                        dojo.forEach(this.getChildren(), function(child){
-                               child._wrapperWidget.destroy();
+                               // If AccordionContainer has been started, then each child has a wrapper widget which
+                               // also needs to be destroyed.
+                               if(child._wrapperWidget){
+                                       child._wrapperWidget.destroy();
+                               }else{
+                                       child.destroyRecursive();
+                               }
                        });
                        this.inherited(arguments);
                },
 
-               _transition: function(/*dijit._Widget?*/newWidget, /*dijit._Widget?*/oldWidget, /*Boolean*/ animate){
+               _showChild: function(child){
+                       // Override StackContainer._showChild() to set visibility of _wrapperWidget.containerNode
+                       child._wrapperWidget.containerNode.style.display="block";
+                       return this.inherited(arguments);
+               },
+
+               _hideChild: function(child){
+                       // Override StackContainer._showChild() to set visibility of _wrapperWidget.containerNode
+                       child._wrapperWidget.containerNode.style.display="none";
+                       this.inherited(arguments);
+               },
+
+               _transition: function(/*dijit._Widget?*/ newWidget, /*dijit._Widget?*/ oldWidget, /*Boolean*/ animate){
                        // Overrides StackContainer._transition() to provide sliding of title bars etc.
 
-//TODO: should be able to replace this with calls to slideIn/slideOut
-                       if(this._inTransition){ return; }
-                       var animations = [];
-                       var paneHeight = this._verticalSpace;
+                       if(dojo.isIE < 8){
+                               // workaround animation bugs by not animating; not worth supporting animation for IE6 & 7
+                               animate = false;
+                       }
+
+                       if(this._animation){
+                               // there's an in-progress animation.  speedily end it so we can do the newly requested one
+                               this._animation.stop(true);
+                               delete this._animation;
+                       }
+
+                       var self = this;
+
                        if(newWidget){
                                newWidget._wrapperWidget.set("selected", true);
 
-                               this._showChild(newWidget);     // prepare widget to be slid in
+                               var d = this._showChild(newWidget);     // prepare widget to be slid in
 
                                // Size the new widget, in case this is the first time it's being shown,
                                // or I have been resized since the last time it was shown.
@@ -18588,74 +19519,51 @@ dojo.declare(
                                if(this.doLayout && newWidget.resize){
                                        newWidget.resize(this._containerContentBox);
                                }
-
-                               var newContents = newWidget.domNode;
-                               dojo.addClass(newContents, "dijitVisible");
-                               dojo.removeClass(newContents, "dijitHidden");
-                               
-                               if(animate){
-                                       var newContentsOverflow = newContents.style.overflow;
-                                       newContents.style.overflow = "hidden";
-                                       animations.push(dojo.animateProperty({
-                                               node: newContents,
-                                               duration: this.duration,
-                                               properties: {
-                                                       height: { start: 1, end: this._getTargetHeight(newContents) }
-                                               },
-                                               onEnd: function(){
-                                                       newContents.style.overflow = newContentsOverflow;
-
-                                                       // Kick IE to workaround layout bug, see #11415
-                                                       if(dojo.isIE){
-                                                               setTimeout(function(){
-                                                                       dojo.removeClass(newContents.parentNode, "dijitAccordionInnerContainerFocused");
-                                                                       setTimeout(function(){
-                                                                               dojo.addClass(newContents.parentNode, "dijitAccordionInnerContainerFocused");
-                                                                       }, 0);
-                                                               }, 0);
-                                                       }
-                                               }
-                                       }));
-                               }
                        }
+
                        if(oldWidget){
                                oldWidget._wrapperWidget.set("selected", false);
-                               var oldContents = oldWidget.domNode;
-                               if(animate){
-                                       var oldContentsOverflow = oldContents.style.overflow;
-                                       oldContents.style.overflow = "hidden";
-                                       animations.push(dojo.animateProperty({
-                                               node: oldContents,
-                                               duration: this.duration,
-                                               properties: {
-                                                       height: { start: this._getTargetHeight(oldContents), end: 1 }
-                                               },
-                                               onEnd: function(){
-                                                       dojo.addClass(oldContents, "dijitHidden");
-                                                       dojo.removeClass(oldContents, "dijitVisible");
-                                                       oldContents.style.overflow = oldContentsOverflow;
-                                                       if(oldWidget.onHide){
-                                                               oldWidget.onHide();
-                                                       }
-                                               }
-                                       }));
-                               }else{
-                                       dojo.addClass(oldContents, "dijitHidden");
-                                       dojo.removeClass(oldContents, "dijitVisible");
-                                       if(oldWidget.onHide){
-                                               oldWidget.onHide();
-                                       }
+                               if(!animate){
+                                       this._hideChild(oldWidget);
                                }
                        }
 
                        if(animate){
-                               this._inTransition = true;
-                               var combined = dojo.fx.combine(animations);
-                               combined.onEnd = dojo.hitch(this, function(){
-                                       delete this._inTransition;
+                               var newContents = newWidget._wrapperWidget.containerNode,
+                                       oldContents = oldWidget._wrapperWidget.containerNode;
+
+                               // During the animation we will be showing two dijitAccordionChildWrapper nodes at once,
+                               // which on claro takes up 4px extra space (compared to stable AccordionContainer).
+                               // Have to compensate for that by immediately shrinking the pane being closed.
+                               var wrapperContainerNode = newWidget._wrapperWidget.containerNode,
+                                       wrapperContainerNodeMargin = dojo._getMarginExtents(wrapperContainerNode),
+                                       wrapperContainerNodePadBorder = dojo._getPadBorderExtents(wrapperContainerNode),
+                                       animationHeightOverhead = wrapperContainerNodeMargin.h + wrapperContainerNodePadBorder.h;
+
+                               oldContents.style.height = (self._verticalSpace - animationHeightOverhead) + "px";
+
+                               this._animation = new dojo.Animation({
+                                       node: newContents,
+                                       duration: this.duration,
+                                       curve: [1, this._verticalSpace - animationHeightOverhead - 1],
+                                       onAnimate: function(value){
+                                               value = Math.floor(value);      // avoid fractional values
+                                               newContents.style.height = value + "px";
+                                               oldContents.style.height = (self._verticalSpace - animationHeightOverhead - value) + "px";
+                                       },
+                                       onEnd: function(){
+                                               delete self._animation;
+                                               newContents.style.height = "auto";
+                                               oldWidget._wrapperWidget.containerNode.style.display = "none";
+                                               oldContents.style.height = "auto";
+                                               self._hideChild(oldWidget);
+                                       }
                                });
-                               combined.play();
-                       }                       
+                               this._animation.onStop = this._animation.onEnd;
+                               this._animation.play();
+                       }
+
+                       return d;       // If child has an href, promise that fires when the widget has finished loading
                },
 
                // note: we are treating the container as controller here
@@ -18666,10 +19574,7 @@ dojo.declare(
                        //              This is called from a handler on AccordionContainer.domNode
                        //              (setup in StackContainer), and is also called directly from
                        //              the click handler for accordion labels
-                       if(this._inTransition || this.disabled || e.altKey || !(fromTitle || e.ctrlKey)){
-                               if(this._inTransition){
-                                       dojo.stopEvent(e);
-                               }
+                       if(this.disabled || e.altKey || !(fromTitle || e.ctrlKey)){
                                return;
                        }
                        var k = dojo.keys,
@@ -18694,16 +19599,17 @@ dojo.declare("dijit.layout._AccordionInnerContainer",
                //              When other widgets are added as children to an AccordionContainer they are wrapped in
                //              this widget.
                
+/*=====
                // buttonWidget: String
                //              Name of class to use to instantiate title
                //              (Wish we didn't have a separate widget for just the title but maintaining it
                //              for backwards compatibility, is it worth it?)
-/*=====
                 buttonWidget: null,
 =====*/
+
+/*=====
                // contentWidget: dijit._Widget
                //              Pointer to the real child widget
-/*=====
                contentWidget: null,
 =====*/
 
@@ -18713,7 +19619,15 @@ dojo.declare("dijit.layout._AccordionInnerContainer",
                isContainer: true,
                isLayoutContainer: true,
 
-               buildRendering: function(){                     
+               buildRendering: function(){
+                       // Builds a template like:
+                       //      <div class=dijitAccordionInnerContainer>
+                       //              Button
+                       //              <div class=dijitAccordionChildWrapper>
+                       //                      ContentPane
+                       //              </div>
+                       //      </div>
+
                        // Create wrapper div, placed where the child is now
                        this.domNode = dojo.place("<div class='" + this.baseClass + "'>", this.contentWidget.domNode, "after");
                        
@@ -18731,22 +19645,32 @@ dojo.declare("dijit.layout._AccordionInnerContainer",
                                parent: this.parent
                        })).placeAt(this.domNode);
                        
-                       // and then the actual content widget (changing it from prior-sibling to last-child)
-                       dojo.place(this.contentWidget.domNode, this.domNode);
+                       // and then the actual content widget (changing it from prior-sibling to last-child),
+                       // wrapped by a <div class=dijitAccordionChildWrapper>
+                       this.containerNode = dojo.place("<div class='dijitAccordionChildWrapper' style='display:none'>", this.domNode);
+                       dojo.place(this.contentWidget.domNode, this.containerNode);
                },
 
                postCreate: function(){
                        this.inherited(arguments);
-                       this.connect(this.contentWidget, 'set', function(name, value){
-                               var mappedName = {title: "label", tooltip: "title", iconClass: "iconClass"}[name];
-                               if(mappedName){
-                                       this.button.set(mappedName, value);
-                               }
-                       }, this);
+
+                       // Map changes in content widget's title etc. to changes in the button
+                       var button = this.button;
+                       this._contentWidgetWatches = [
+                               this.contentWidget.watch('title', dojo.hitch(this, function(name, oldValue, newValue){
+                                       button.set("label", newValue);
+                               })),
+                               this.contentWidget.watch('tooltip', dojo.hitch(this, function(name, oldValue, newValue){
+                                       button.set("title", newValue);
+                               })),
+                               this.contentWidget.watch('iconClass', dojo.hitch(this, function(name, oldValue, newValue){
+                                       button.set("iconClass", newValue);
+                               }))
+                       ];
                },
 
                _setSelectedAttr: function(/*Boolean*/ isSelected){
-                       this.selected = isSelected;
+                       this._set("selected", isSelected);
                        this.button.set("selected", isSelected);
                        if(isSelected){
                                var cw = this.contentWidget;
@@ -18761,7 +19685,9 @@ dojo.declare("dijit.layout._AccordionInnerContainer",
 
                destroy: function(){
                        this.button.destroyRecursive();
-                       
+
+                       dojo.forEach(this._contentWidgetWatches || [], function(w){ w.unwatch(); });
+
                        delete this.contentWidget._buttonWidget;
                        delete this.contentWidget._wrapperWidget;
 
@@ -18783,7 +19709,7 @@ dojo.declare("dijit.layout._AccordionButton",
        // tags:
        //              private
 
-       templateString: dojo.cache("dijit.layout", "templates/AccordionButton.html", "<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),
+       templateString: dojo.cache("dijit.layout", "templates/AccordionButton.html", "<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' role=\"tab\" aria-expanded=\"false\"\n\t\t><span class='dijitInline dijitAccordionArrow' role=\"presentation\"></span\n\t\t><span class='arrowTextUp' role=\"presentation\">+</span\n\t\t><span class='arrowTextDown' role=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" role=\"presentation\"/>\n\t\t<span role=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),
        attributeMap: dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap), {
                label: {node: "titleTextNode", type: "innerHTML" },
                title: {node: "titleTextNode", type: "attribute", attribute: "title"},
@@ -18800,18 +19726,18 @@ dojo.declare("dijit.layout._AccordionButton",
                return this.parent;
        },
 
-       postCreate: function(){
+       buildRendering: function(){
                this.inherited(arguments);
-               dojo.setSelectable(this.domNode, false);
-               var titleTextNodeId = dojo.attr(this.domNode,'id').replace(' ','_');
+               var titleTextNodeId = this.id.replace(' ','_');
                dojo.attr(this.titleTextNode, "id", titleTextNodeId+"_title");
                dijit.setWaiState(this.focusNode, "labelledby", dojo.attr(this.titleTextNode, "id"));
+               dojo.setSelectable(this.domNode, false);
        },
 
        getTitleHeight: function(){
                // summary:
                //              Returns the height of the title dom node.
-               return dojo.marginBox(this.domNode).h;  // Integer
+               return dojo._getMarginSize(this.domNode).h;     // Integer
        },
 
        // TODO: maybe the parent should set these methods directly rather than forcing the code
@@ -18820,10 +19746,8 @@ dojo.declare("dijit.layout._AccordionButton",
                // summary:
                //              Callback when someone clicks my title.
                var parent = this.getParent();
-               if(!parent._inTransition){
                        parent.selectChild(this.contentWidget, true);
                        dijit.focus(this.focusNode);
-               }
        },
 
        _onTitleKeyPress: function(/*Event*/ evt){
@@ -18831,7 +19755,7 @@ dojo.declare("dijit.layout._AccordionButton",
        },
 
        _setSelectedAttr: function(/*Boolean*/ isSelected){
-               this.selected = isSelected;
+               this._set("selected", isSelected);
                dijit.setWaiState(this.focusNode, "expanded", isSelected);
                dijit.setWaiState(this.focusNode, "selected", isSelected);
                this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1");
@@ -18847,6 +19771,7 @@ dojo.provide("dijit.layout.BorderContainer");
 
 
 
+
 dojo.declare(
        "dijit.layout.BorderContainer",
        dijit.layout._LayoutWidget,
@@ -18862,19 +19787,21 @@ dojo.declare(
        //              include optional splitters (splitter="true") to make them resizable by the user.  The remaining
        //              space is designated for the center region.
        //
-       //              NOTE: Splitters must not be more than 50 pixels in width.
-       //
        //              The outer size must be specified on the BorderContainer node.  Width must be specified for the sides
        //              and height for the top and bottom, respectively.  No dimensions should be specified on the center;
        //              it will fill the remaining space.  Regions named "leading" and "trailing" may be used just like
        //              "left" and "right" except that they will be reversed in right-to-left environments.
        //
+       //              For complex layouts, multiple children can be specified for a single region.   In this case, the
+       //              layoutPriority flag on the children determines which child is closer to the edge (low layoutPriority)
+       //              and which child is closer to the center (high layoutPriority).   layoutPriority can also be used
+       //              instead of the design attribute to conrol layout precedence of horizontal vs. vertical panes.
        // example:
        // |    <div dojoType="dijit.layout.BorderContainer" design="sidebar" gutters="false"
        // |            style="width: 400px; height: 300px;">
-       // |            <div dojoType="ContentPane" region="top">header text</div>
-       // |            <div dojoType="ContentPane" region="right" splitter="true" style="width: 200px;">table of contents</div>
-       // |            <div dojoType="ContentPane" region="center">client area</div>
+       // |            <div dojoType="dijit.layout.ContentPane" region="top">header text</div>
+       // |            <div dojoType="dijit.layout.ContentPane" region="right" splitter="true" style="width: 200px;">table of contents</div>
+       // |            <div dojoType="dijit.layout.ContentPane" region="center">client area</div>
        // |    </div>
 
        // design: String
@@ -18884,13 +19811,13 @@ dojo.declare(
        //                      - "sidebar" where the left and right sides extend from top to bottom.
        design: "headline",
 
-       // gutters: Boolean
+       // gutters: [const] Boolean
        //              Give each pane a border and margin.
        //              Margin determined by domNode.paddingLeft.
        //              When false, only resizable panes have a gutter (i.e. draggable splitter) for resizing.
        gutters: true,
 
-       // liveSplitters: Boolean
+       // liveSplitters: [const] Boolean
        //              Specifies whether splitters resize as you drag (true) or only upon mouseup (false)
        liveSplitters: true,
 
@@ -18913,13 +19840,6 @@ dojo.declare(
                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);
@@ -18939,14 +19859,10 @@ dojo.declare(
                        if(region == "leading"){ region = ltr ? "left" : "right"; }
                        if(region == "trailing"){ region = ltr ? "right" : "left"; }
 
-                       //FIXME: redundant?
-                       this["_"+region] = child.domNode;
-                       this["_"+region+"Widget"] = child;
-
                        // Create draggable splitter for resizing pane,
                        // or alternately if splitter=false but BorderContainer.gutters=true then
                        // insert dummy div just for spacing
-                       if((child.splitter || this.gutters) && !this._splitters[region]){
+                       if(region != "center" && (child.splitter || this.gutters) && !child._splitterWidget){
                                var _Splitter = dojo.getObject(child.splitter ? this._splitterClass : "dijit.layout._Gutter");
                                var splitter = new _Splitter({
                                        id: child.id + "_splitter",
@@ -18956,24 +19872,19 @@ dojo.declare(
                                        live: this.liveSplitters
                                });
                                splitter.isSplitter = true;
-                               this._splitters[region] = splitter.domNode;
-                               dojo.place(this._splitters[region], child.domNode, "after");
+                               child._splitterWidget = splitter;
+
+                               dojo.place(splitter.domNode, child.domNode, "after");
 
-                               // Splitters arent added as Contained children, so we need to call startup explicitly
+                               // Splitters aren't added as Contained children, so we need to call startup explicitly
                                splitter.startup();
                        }
-                       child.region = region;
+                       child.region = region;  // TODO: technically wrong since it overwrites "trailing" with "left" etc.
                }
        },
 
-       _computeSplitterThickness: function(region){
-               this._splitterThickness[region] = this._splitterThickness[region] ||
-                       dojo.marginBox(this._splitters[region])[(/top|bottom/.test(region) ? 'h' : 'w')];
-       },
-
        layout: function(){
                // Implement _LayoutWidget.layout() virtual method.
-               for(var region in this._splitters){ this._computeSplitterThickness(region); }
                this._layoutChildren();
        },
 
@@ -18987,20 +19898,29 @@ dojo.declare(
 
        removeChild: function(/*dijit._Widget*/ child){
                // Override _LayoutWidget.removeChild().
+
                var region = child.region;
-               var splitter = this._splitters[region];
+               var splitter = child._splitterWidget
                if(splitter){
-                       dijit.byNode(splitter).destroy();
-                       delete this._splitters[region];
-                       delete this._splitterThickness[region];
+                       splitter.destroy();
+                       delete child._splitterWidget;
                }
                this.inherited(arguments);
-               delete this["_"+region];
-               delete this["_" +region+"Widget"];
+               
                if(this._started){
                        this._layoutChildren();
                }
+               // Clean up whatever style changes we made to the child pane.
+               // Unclear how height and width should be handled.
                dojo.removeClass(child.domNode, this.baseClass+"Pane");
+               dojo.style(child.domNode, {
+                       top: "auto",
+                       bottom: "auto",
+                       left: "auto",
+                       right: "auto",
+                       position: "static"
+               });
+               dojo.style(child.domNode, region == "top" || region == "bottom" ? "width" : "height", "auto");
        },
 
        getChildren: function(){
@@ -19010,11 +19930,15 @@ dojo.declare(
                });
        },
 
+       // TODO: remove in 2.0
        getSplitter: function(/*String*/region){
                // summary:
                //              Returns the widget responsible for rendering the splitter associated with region
-               var splitter = this._splitters[region];
-               return splitter ? dijit.byNode(splitter) : null;
+               // tags:
+               //              deprecated
+               return dojo.filter(this.getChildren(), function(child){
+                       return child.region == region;
+               })[0]._splitterWidget;
        },
 
        resize: function(newSize, currentSize){
@@ -19035,7 +19959,7 @@ dojo.declare(
                this.inherited(arguments);
        },
 
-       _layoutChildren: function(/*String?*/changedRegion, /*Number?*/ changedRegionSize){
+       _layoutChildren: function(/*String?*/ changedChildId, /*Number?*/ changedChildSize){
                // summary:
                //              This is the main routine for setting size/position of each child.
                // description:
@@ -19045,11 +19969,10 @@ dojo.declare(
                //              With changedRegion specified (as "left", "top", "bottom", or "right"),
                //              it changes that region's width/height to changedRegionSize and
                //              then resizes other regions that were affected.
-               // changedRegion:
-               //              The region should be changed because splitter was dragged.
-               //              "left", "right", "top", or "bottom".
-               // changedRegionSize:
-               //              The new width/height (in pixels) to make changedRegion
+               // changedChildId:
+               //              Id of the child which should be resized because splitter was dragged.
+               // changedChildSize:
+               //              The new width/height (in pixels) to make specified child
 
                if(!this._borderBox || !this._borderBox.h){
                        // We are currently hidden, or we haven't been sized by our parent yet.
@@ -19057,196 +19980,63 @@ dojo.declare(
                        return;
                }
 
-               var sidebarLayout = (this.design == "sidebar");
-               var topHeight = 0, bottomHeight = 0, leftWidth = 0, rightWidth = 0;
-               var topStyle = {}, leftStyle = {}, rightStyle = {}, bottomStyle = {},
-                       centerStyle = (this._center && this._center.style) || {};
-
-               var changedSide = /left|right/.test(changedRegion);
-
-               var layoutSides = !changedRegion || (!changedSide && !sidebarLayout);
-               var layoutTopBottom = !changedRegion || (changedSide && sidebarLayout);
-
-               // Ask browser for width/height of side panes.
-               // Would be nice to cache this but height can change according to width
-               // (because words wrap around).  I don't think width will ever change though
-               // (except when the user drags a splitter).
-               if(this._top){
-                       topStyle = (changedRegion == "top" || layoutTopBottom) && this._top.style;
-                       topHeight = changedRegion == "top" ? changedRegionSize : dojo.marginBox(this._top).h;
-               }
-               if(this._left){
-                       leftStyle = (changedRegion == "left" || layoutSides) && this._left.style;
-                       leftWidth = changedRegion == "left" ? changedRegionSize : dojo.marginBox(this._left).w;
-               }
-               if(this._right){
-                       rightStyle = (changedRegion == "right" || layoutSides) && this._right.style;
-                       rightWidth = changedRegion == "right" ? changedRegionSize : dojo.marginBox(this._right).w;
-               }
-               if(this._bottom){
-                       bottomStyle = (changedRegion == "bottom" || layoutTopBottom) && this._bottom.style;
-                       bottomHeight = changedRegion == "bottom" ? changedRegionSize : dojo.marginBox(this._bottom).h;
-               }
-
-               var splitters = this._splitters;
-               var topSplitter = splitters.top, bottomSplitter = splitters.bottom,
-                       leftSplitter = splitters.left, rightSplitter = splitters.right;
-               var splitterThickness = this._splitterThickness;
-               var topSplitterThickness = splitterThickness.top || 0,
-                       leftSplitterThickness = splitterThickness.left || 0,
-                       rightSplitterThickness = splitterThickness.right || 0,
-                       bottomSplitterThickness = splitterThickness.bottom || 0;
-
-               // Check for race condition where CSS hasn't finished loading, so
-               // the splitter width == the viewport width (#5824)
-               if(leftSplitterThickness > 50 || rightSplitterThickness > 50){
-                       setTimeout(dojo.hitch(this, function(){
-                               // Results are invalid.  Clear them out.
-                               this._splitterThickness = {};
-
-                               for(var region in this._splitters){
-                                       this._computeSplitterThickness(region);
+               // Generate list of wrappers of my children in the order that I want layoutChildren()
+               // to process them (i.e. from the outside to the inside)
+               var wrappers = dojo.map(this.getChildren(), function(child, idx){
+                       return {
+                               pane: child,
+                               weight: [
+                                       child.region == "center" ? Infinity : 0,
+                                       child.layoutPriority,
+                                       (this.design == "sidebar" ? 1 : -1) * (/top|bottom/.test(child.region) ? 1 : -1),
+                                       idx
+                               ]
+                       };
+               }, this);
+               wrappers.sort(function(a, b){
+                       var aw = a.weight, bw = b.weight;
+                       for(var i=0; i<aw.length; i++){
+                               if(aw[i] != bw[i]){
+                                       return aw[i] - bw[i];
                                }
-                               this._layoutChildren();
-                       }), 50);
-                       return false;
-               }
-
-               var pe = this.pe;
-
-               var splitterBounds = {
-                       left: (sidebarLayout ? leftWidth + leftSplitterThickness: 0) + pe.l + "px",
-                       right: (sidebarLayout ? rightWidth + rightSplitterThickness: 0) + pe.r + "px"
-               };
-
-               if(topSplitter){
-                       dojo.mixin(topSplitter.style, splitterBounds);
-                       topSplitter.style.top = topHeight + pe.t + "px";
-               }
-
-               if(bottomSplitter){
-                       dojo.mixin(bottomSplitter.style, splitterBounds);
-                       bottomSplitter.style.bottom = bottomHeight + pe.b + "px";
-               }
-
-               splitterBounds = {
-                       top: (sidebarLayout ? 0 : topHeight + topSplitterThickness) + pe.t + "px",
-                       bottom: (sidebarLayout ? 0 : bottomHeight + bottomSplitterThickness) + pe.b + "px"
-               };
-
-               if(leftSplitter){
-                       dojo.mixin(leftSplitter.style, splitterBounds);
-                       leftSplitter.style.left = leftWidth + pe.l + "px";
-               }
-
-               if(rightSplitter){
-                       dojo.mixin(rightSplitter.style, splitterBounds);
-                       rightSplitter.style.right = rightWidth + pe.r + "px";
-               }
-
-               dojo.mixin(centerStyle, {
-                       top: pe.t + topHeight + topSplitterThickness + "px",
-                       left: pe.l + leftWidth + leftSplitterThickness + "px",
-                       right: pe.r + rightWidth + rightSplitterThickness + "px",
-                       bottom: pe.b + bottomHeight + bottomSplitterThickness + "px"
+                       }
+                       return 0;
                });
 
-               var bounds = {
-                       top: sidebarLayout ? pe.t + "px" : centerStyle.top,
-                       bottom: sidebarLayout ? pe.b + "px" : centerStyle.bottom
-               };
-               dojo.mixin(leftStyle, bounds);
-               dojo.mixin(rightStyle, bounds);
-               leftStyle.left = pe.l + "px"; rightStyle.right = pe.r + "px"; topStyle.top = pe.t + "px"; bottomStyle.bottom = pe.b + "px";
-               if(sidebarLayout){
-                       topStyle.left = bottomStyle.left = leftWidth + leftSplitterThickness + pe.l + "px";
-                       topStyle.right = bottomStyle.right = rightWidth + rightSplitterThickness + pe.r + "px";
-               }else{
-                       topStyle.left = bottomStyle.left = pe.l + "px";
-                       topStyle.right = bottomStyle.right = pe.r + "px";
-               }
-
-               // More calculations about sizes of panes
-               var containerHeight = this._borderBox.h - pe.t - pe.b,
-                       middleHeight = containerHeight - ( topHeight + topSplitterThickness + bottomHeight + bottomSplitterThickness),
-                       sidebarHeight = sidebarLayout ? containerHeight : middleHeight;
-
-               var containerWidth = this._borderBox.w - pe.l - pe.r,
-                       middleWidth = containerWidth - (leftWidth + leftSplitterThickness + rightWidth + rightSplitterThickness),
-                       sidebarWidth = sidebarLayout ? middleWidth : containerWidth;
+               // Make new list, combining the externally specified children with splitters and gutters
+               var childrenAndSplitters = [];
+               dojo.forEach(wrappers, function(wrapper){
+                       var pane = wrapper.pane;
+                       childrenAndSplitters.push(pane);
+                       if(pane._splitterWidget){
+                               childrenAndSplitters.push(pane._splitterWidget);
+                       }
+               });
 
-               // New margin-box size of each pane
+               // Compute the box in which to lay out my children
                var dim = {
-                       top:    { w: sidebarWidth, h: topHeight },
-                       bottom: { w: sidebarWidth, h: bottomHeight },
-                       left:   { w: leftWidth, h: sidebarHeight },
-                       right:  { w: rightWidth, h: sidebarHeight },
-                       center: { h: middleHeight, w: middleWidth }
+                       l: this.pe.l,
+                       t: this.pe.t,
+                       w: this._borderBox.w - this.pe.w,
+                       h: this._borderBox.h - this.pe.h
                };
 
-               if(changedRegion){
-                       // Respond to splitter drag event by changing changedRegion's width or height
-                       var child = this["_" + changedRegion + "Widget"],
-                               mb = {};
-                               mb[ /top|bottom/.test(changedRegion) ? "h" : "w"] = changedRegionSize;
-                       child.resize ? child.resize(mb, dim[child.region]) : dojo.marginBox(child.domNode, mb);
-               }
+               // Layout the children, possibly changing size due to a splitter drag
+               dijit.layout.layoutChildren(this.domNode, dim, childrenAndSplitters,
+                       changedChildId, changedChildSize);
+       },
 
-               // Nodes in IE<8 don't respond to t/l/b/r, and TEXTAREA doesn't respond in any browser
-               var janky = dojo.isIE < 8 || (dojo.isIE && dojo.isQuirks) || dojo.some(this.getChildren(), function(child){
-                       return child.domNode.tagName == "TEXTAREA" || child.domNode.tagName == "INPUT";
+       destroyRecursive: function(){
+               // Destroy splitters first, while getChildren() still works
+               dojo.forEach(this.getChildren(), function(child){
+                       var splitter = child._splitterWidget;
+                       if(splitter){
+                               splitter.destroy();
+                       }
+                       delete child._splitterWidget;
                });
-               if(janky){
-                       // Set the size of the children the old fashioned way, by setting
-                       // CSS width and height
-
-                       var resizeWidget = function(widget, changes, result){
-                               if(widget){
-                                       (widget.resize ? widget.resize(changes, result) : dojo.marginBox(widget.domNode, changes));
-                               }
-                       };
-
-                       if(leftSplitter){ leftSplitter.style.height = sidebarHeight; }
-                       if(rightSplitter){ rightSplitter.style.height = sidebarHeight; }
-                       resizeWidget(this._leftWidget, {h: sidebarHeight}, dim.left);
-                       resizeWidget(this._rightWidget, {h: sidebarHeight}, dim.right);
-
-                       if(topSplitter){ topSplitter.style.width = sidebarWidth; }
-                       if(bottomSplitter){ bottomSplitter.style.width = sidebarWidth; }
-                       resizeWidget(this._topWidget, {w: sidebarWidth}, dim.top);
-                       resizeWidget(this._bottomWidget, {w: sidebarWidth}, dim.bottom);
-
-                       resizeWidget(this._centerWidget, dim.center);
-               }else{
-                       // Calculate which panes need a notification that their size has been changed
-                       // (we've already set style.top/bottom/left/right on those other panes).
-                       var notifySides = !changedRegion || (/top|bottom/.test(changedRegion) && this.design != "sidebar"),
-                               notifyTopBottom = !changedRegion || (/left|right/.test(changedRegion) && this.design == "sidebar"),
-                               notifyList = {
-                                       center: true,
-                                       left: notifySides,
-                                       right: notifySides,
-                                       top: notifyTopBottom,
-                                       bottom: notifyTopBottom
-                               };
-                       
-                       // Send notification to those panes that have changed size
-                       dojo.forEach(this.getChildren(), function(child){
-                               if(child.resize && notifyList[child.region]){
-                                       child.resize(null, dim[child.region]);
-                               }
-                       }, this);
-               }
-       },
 
-       destroy: function(){
-               for(var region in this._splitters){
-                       var splitter = this._splitters[region];
-                       dijit.byNode(splitter).destroy();
-                       dojo.destroy(splitter);
-               }
-               delete this._splitters;
-               delete this._splitterThickness;
+               // Then destroy the real children, and myself
                this.inherited(arguments);
        }
 });
@@ -19261,6 +20051,12 @@ dojo.extend(dijit._Widget, {
        //              See the `dijit.layout.BorderContainer` description for details.
        region: '',
 
+       // layoutPriority: [const] Number
+       //              Parameter for children of `dijit.layout.BorderContainer`.
+       //              Children with a higher layoutPriority will be placed closer to the BorderContainer center,
+       //              between children with a lower layoutPriority.
+       layoutPriority: 0,
+
        // splitter: [const] Boolean
        //              Parameter for child of `dijit.layout.BorderContainer` where region != "center".
        //              If true, enables user to resize the widget by putting a draggable splitter between
@@ -19278,8 +20074,6 @@ dojo.extend(dijit._Widget, {
        maxSize: Infinity
 });
 
-
-
 dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
 {
        // summary:
@@ -19299,7 +20093,7 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
        //              Pointer to the pane associated with this splitter
        child: null,
 
-       // region: String
+       // region: [const] String
        //              Region of pane associated with this splitter.
        //              "top", "bottom", "left", "right".
        region: null,
@@ -19310,18 +20104,21 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
        //              otherwise, the size doesn't change until you drop the splitter (by mouse-up)
        live: true,
 
-       templateString: '<div class="dijitSplitter" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse" tabIndex="0" waiRole="separator"><div class="dijitSplitterThumb"></div></div>',
+       templateString: '<div class="dijitSplitter" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse" tabIndex="0" role="separator"><div class="dijitSplitterThumb"></div></div>',
 
-       postCreate: function(){
+       postMixInProperties: function(){
                this.inherited(arguments);
-               this.horizontal = /top|bottom/.test(this.region);
-               dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V"));
-//             dojo.addClass(this.child.domNode, "dijitSplitterPane");
-//             dojo.setSelectable(this.domNode, false); //TODO is this necessary?
 
+               this.horizontal = /top|bottom/.test(this.region);
                this._factor = /top|left/.test(this.region) ? 1 : -1;
-
                this._cookieName = this.container.id + "_" + this.region;
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+
+               dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V"));
+
                if(this.container.persist){
                        // restore old size
                        var persistSize = dojo.cookie(this._cookieName);
@@ -19333,23 +20130,14 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
 
        _computeMaxSize: function(){
                // summary:
-               //              Compute the maximum size that my corresponding pane can be set to
+               //              Return the maximum size that my corresponding pane can be set to
 
                var dim = this.horizontal ? 'h' : 'w',
-                       thickness = this.container._splitterThickness[this.region];
-                       
-               // Get DOMNode of opposite pane, if an opposite pane exists.
-               // Ex: if I am the _Splitter for the left pane, then get the right pane.
-               var flip = {left:'right', right:'left', top:'bottom', bottom:'top', leading:'trailing', trailing:'leading'},
-                       oppNode = this.container["_" + flip[this.region]];
-               
-               // I can expand up to the edge of the opposite pane, or if there's no opposite pane, then to
-               // edge of BorderContainer
-               var available = dojo.contentBox(this.container.domNode)[dim] -
-                               (oppNode ? dojo.marginBox(oppNode)[dim] : 0) -
-                               20 - thickness * 2;
+                       childSize = dojo.marginBox(this.child.domNode)[dim],
+                       center = dojo.filter(this.container.getChildren(), function(child){ return child.region == "center";})[0],
+                       spaceAvailable = dojo.marginBox(center.domNode)[dim];   // can expand until center is crushed to 0
 
-               return Math.min(this.child.maxSize, available);
+               return Math.min(this.child.maxSize, childSize + spaceAvailable);
        },
 
        _startDrag: function(e){
@@ -19368,28 +20156,26 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
                        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");
+               dojo.addClass(this.domNode, "dijitSplitterActive dijitSplitter" + (this.horizontal ? "H" : "V") + "Active");
                if(this.fake){
-                       dojo.removeClass(this.fake, "dijitSplitterHover");
-                       dojo.removeClass(this.fake, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover");
+                       dojo.removeClass(this.fake, "dijitSplitterHover dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover");
                }
 
                //Performance: load data info local vars for onmousevent function closure
                var factor = this._factor,
-                       max = this._computeMaxSize(),
-                       min = this.child.minSize || 20,
                        isHorizontal = this.horizontal,
                        axis = isHorizontal ? "pageY" : "pageX",
                        pageStart = e[axis],
                        splitterStyle = this.domNode.style,
                        dim = isHorizontal ? 'h' : 'w',
                        childStart = dojo.marginBox(this.child.domNode)[dim],
+                       max = this._computeMaxSize(),
+                       min = this.child.minSize || 20,
                        region = this.region,
-                       splitterStart = parseInt(this.domNode.style[region], 10),
+                       splitterAttr = region == "top" || region == "bottom" ? "top" : "left",  // style attribute of splitter to adjust
+                       splitterStart = parseInt(splitterStyle[splitterAttr], 10),
                        resize = this._resize,
-                       childNode = this.child.domNode,
-                       layoutFunc = dojo.hitch(this.container, this.container._layoutChildren),
+                       layoutFunc = dojo.hitch(this.container, "_layoutChildren", this.child.id),
                        de = dojo.doc;
 
                this._handlers = (this._handlers || []).concat([
@@ -19399,9 +20185,10 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
                                        boundChildSize = Math.max(Math.min(childSize, max), min);
 
                                if(resize || forceResize){
-                                       layoutFunc(region, boundChildSize);
+                                       layoutFunc(boundChildSize);
                                }
-                               splitterStyle[region] = factor * delta + splitterStart + (boundChildSize - childSize) + "px";
+                               // TODO: setting style directly (usually) sets content box size, need to set margin box size
+                               splitterStyle[splitterAttr] = delta + splitterStart + factor*(boundChildSize - childSize) + "px";
                        }),
                        dojo.connect(de, "ondragstart", dojo.stopEvent),
                        dojo.connect(dojo.body(), "onselectstart", dojo.stopEvent),
@@ -19422,9 +20209,8 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
                                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");
+                       dojo.removeClass(this.domNode, "dijitSplitterActive dijitSplitter"
+                               + (this.horizontal ? "H" : "V") + "Active dijitSplitterShadow");
                        this._drag(e); //TODO: redundant with onmousemove?
                        this._drag(e, true);
                }finally{
@@ -19458,8 +20244,8 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
 //                             this.inherited(arguments);
                                return;
                }
-               var childSize = dojo.marginBox(this.child.domNode)[ horizontal ? 'h' : 'w' ] + this._factor * tick;
-               this.container._layoutChildren(this.region, Math.max(Math.min(childSize, this._computeMaxSize()), this.child.minSize));
+               var childSize = dojo._getMarginSize(this.child.domNode)[ horizontal ? 'h' : 'w' ] + this._factor * tick;
+               this.container._layoutChildren(this.child.id, Math.max(Math.min(childSize, this._computeMaxSize()), this.child.minSize));
                dojo.stopEvent(e);
        },
 
@@ -19473,7 +20259,7 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
        }
 });
 
-dojo.declare("dijit.layout._Gutter", [dijit._Widget, dijit._Templated ],
+dojo.declare("dijit.layout._Gutter", [dijit._Widget, dijit._Templated],
 {
        // summary:
        //              Just a spacer div to separate side pane from center pane.
@@ -19484,10 +20270,15 @@ dojo.declare("dijit.layout._Gutter", [dijit._Widget, dijit._Templated ],
        // tags:
        //              private
 
-       templateString: '<div class="dijitGutter" waiRole="presentation"></div>',
+       templateString: '<div class="dijitGutter" role="presentation"></div>',
 
-       postCreate: function(){
+       postMixInProperties: function(){
+               this.inherited(arguments);
                this.horizontal = /top|bottom/.test(this.region);
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
                dojo.addClass(this.domNode, "dijitGutter" + (this.horizontal ? "H" : "V"));
        }
 });
@@ -19519,12 +20310,12 @@ dojo.declare("dijit.layout._TabContainerBase",
 
        baseClass: "dijitTabContainer",
 
-       // tabStrip: Boolean
+       // tabStrip: [const] Boolean
        //              Defines whether the tablist gets an extra class for layouting, putting a border/shading
-       //              around the set of tabs.
+       //              around the set of tabs.   Not supported by claro theme.
        tabStrip: false,
 
-       // nested: Boolean
+       // nested: [const] Boolean
        //              If true, use styling for a TabContainer nested inside another TabContainer.
        //              For tundra etc., makes tabs look like links, and hides the outer
        //              border since the outer TabContainer already has a border.
@@ -19541,7 +20332,7 @@ dojo.declare("dijit.layout._TabContainerBase",
                this.inherited(arguments);
        },
 
-       postCreate: function(){
+       buildRendering: function(){
                this.inherited(arguments);
 
                // Create the tab list that will have a tab (a.k.a. tab button) for each tab panel
@@ -19608,7 +20399,12 @@ dojo.declare("dijit.layout._TabContainerBase",
                }else{
                        // just layout the tab controller, so it can position left/right buttons etc.
                        if(this.tablist.resize){
-                               this.tablist.resize({w: dojo.contentBox(this.domNode).w});
+                               //make the tabs zero width so that they don't interfere with width calc, then reset
+                               var s = this.tablist.domNode.style;
+                               s.width="0";
+                               var width = dojo.contentBox(this.domNode).w;
+                               s.width="";
+                               this.tablist.resize({w: width});
                        }
 
                        // and call resize() on the selected pane just to tell it that it's been made visible
@@ -19626,7 +20422,6 @@ dojo.declare("dijit.layout._TabContainerBase",
        }
 });
 
-
 }
 
 if(!dojo._hasResource["dijit.layout.TabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
@@ -19635,10 +20430,10 @@ dojo.provide("dijit.layout.TabController");
 
 
 
-// Menu is used for an accessible close button, would be nice to have a lighter-weight solution
 
 
 
+// Menu is used for an accessible close button, would be nice to have a lighter-weight solution
 
 
 dojo.declare("dijit.layout.TabController",
@@ -19654,7 +20449,7 @@ dojo.declare("dijit.layout.TabController",
        // tags:
        //              private
 
-       templateString: "<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",
+       templateString: "<div role='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",
 
        // tabPosition: String
        //              Defines where tabs go relative to the content.
@@ -19704,32 +20499,16 @@ dojo.declare("dijit.layout._TabButton",
                closeNode: "dijitTabCloseButton"
        },
 
-       templateString: dojo.cache("dijit.layout", "templates/_TabButton.html", "<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div waiRole=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' waiRole=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>x</span\n\t\t        ></span>\n\t\t\t</div>\n        </div>\n    </div>\n</div>\n"),
+       templateString: dojo.cache("dijit.layout", "templates/_TabButton.html", "<div role=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div role=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div role=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div role=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitTabButtonIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' role=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>[x]</span\n\t\t        ></span>\n\t\t\t</div>\n        </div>\n    </div>\n</div>\n"),
 
        // Override _FormWidget.scrollOnFocus.
        // Don't scroll the whole tab container into view when the button is focused.
        scrollOnFocus: false,
 
-       postMixInProperties: function(){
-               // Override blank iconClass from Button to do tab height adjustment on IE6,
-               // to make sure that tabs with and w/out close icons are same height
-               if(!this.iconClass){
-                       this.iconClass = "dijitTabButtonIcon";
-               }
-       },
-
-       postCreate: function(){
+       buildRendering: function(){
                this.inherited(arguments);
-               dojo.setSelectable(this.containerNode, false);
 
-               // If a custom icon class has not been set for the
-               // tab icon, set its width to one pixel. This ensures
-               // that the height styling of the tab is maintained,
-               // as it is based on the height of the icon.
-               // TODO: I still think we can just set dijitTabButtonIcon to 1px in CSS <Bill>
-               if(this.iconNode.className == "dijitTabButtonIcon"){
-                       dojo.style(this.iconNode, "width", "1px");
-               }
+               dojo.setSelectable(this.containerNode, false);
        },
 
        startup: function(){
@@ -19743,8 +20522,10 @@ dojo.declare("dijit.layout._TabButton",
                }, 1);
        },
 
-       _setCloseButtonAttr: function(disp){
-               this.closeButton = disp;
+       _setCloseButtonAttr: function(/*Boolean*/ disp){
+               // summary:
+               //              Hide/show close button
+               this._set("closeButton", disp);
                dojo.toggleClass(this.innerDiv, "dijitClosable", disp);
                this.closeNode.style.display = disp ? "" : "none";
                if(disp){
@@ -19776,16 +20557,16 @@ dojo.declare("dijit.layout._TabButton",
        },
        _setLabelAttr: function(/*String*/ content){
                // summary:
-               //              Hook for attr('label', ...) to work.
+               //              Hook for set('label', ...) to work.
                // description:
                //              takes an HTML string.
-               //              Inherited ToggleButton implementation will Set the label (text) of the button; 
+               //              Inherited ToggleButton implementation will Set the label (text) of the button;
                //              Need to set the alt attribute of icon on tab buttons if no label displayed
-                       this.inherited(arguments);
-                       if(this.showLabel == false && !this.params.title){
-                               this.iconNode.alt = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || '');
-                       }
-               },
+               this.inherited(arguments);
+               if(this.showLabel == false && !this.params.title){
+                       this.iconNode.alt = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || '');
+               }
+       },
 
        destroy: function(){
                if(this._closeMenu){
@@ -19805,6 +20586,8 @@ dojo.provide("dijit.layout.ScrollingTabController");
 
 
 
+
+
 dojo.declare("dijit.layout.ScrollingTabController",
        dijit.layout.TabController,
        {
@@ -19816,9 +20599,9 @@ dojo.declare("dijit.layout.ScrollingTabController",
        // tags:
        //              private
 
-       templateString: dojo.cache("dijit.layout", "templates/ScrollingTabController.html", "<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=false>&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>&#9654;</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'></div>\n\t</div>\n</div>\n"),
+       templateString: dojo.cache("dijit.layout", "templates/ScrollingTabController.html", "<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerMenuButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" containerId=\"${containerId}\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdropDownPosition=\"below-alt, above-alt\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=\"false\">&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=\"false\">&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=\"false\">&#9654;</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div role='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>\n"),
 
-       // useMenu:[const] Boolean
+       // useMenu: [const] Boolean
        //              True if a menu should be used to select tabs when they are too
        //              wide to fit the TabContainer, false otherwise.
        useMenu: true,
@@ -19828,7 +20611,7 @@ dojo.declare("dijit.layout.ScrollingTabController",
        //              wide to fit the TabContainer, false otherwise.
        useSlider: true,
 
-       // tabStripClass: String
+       // tabStripClass: [const] String
        //              The css class to apply to the tab strip, if it is visible.
        tabStripClass: "",
 
@@ -19844,7 +20627,7 @@ dojo.declare("dijit.layout.ScrollingTabController",
                "class": "containerNode"
        }),
 
-       postCreate: function(){
+       buildRendering: function(){
                this.inherited(arguments);
                var n = this.domNode;
 
@@ -19874,41 +20657,18 @@ dojo.declare("dijit.layout.ScrollingTabController",
 
        onAddChild: function(page, insertIndex){
                this.inherited(arguments);
-               var menuItem;
-               if(this.useMenu){
-                       var containerId = this.containerId;
-                       menuItem = new dijit.MenuItem({
-                               id: page.id + "_stcMi",
-                               label: page.title,
-                               dir: page.dir,
-                               lang: page.lang,
-                               onClick: dojo.hitch(this, function(){
-                                       var container = dijit.byId(containerId);
-                                       container.selectChild(page);
-                               })
-                       });
-                       this._menuChildren[page.id] = menuItem;
-                       this._menu.addChild(menuItem, insertIndex);
-               }
 
-               // update the menuItem label when the button label is updated
-               this.pane2handles[page.id].push(
-                       this.connect(this.pane2button[page.id], "set", function(name, value){
-                               if(this._postStartup){
-                                       if(name == "label"){
-                                               if(menuItem){
-                                                       menuItem.set(name, value);
-                                               }
-       
-                                               // The changed label will have changed the width of the
-                                               // buttons, so do a resize
-                                               if(this._dim){
-                                                       this.resize(this._dim);
-                                               }
+               // changes to the tab button label or iconClass will have changed the width of the
+               // buttons, so do a resize
+               dojo.forEach(["label", "iconClass"], function(attr){
+                       this.pane2watches[page.id].push(
+                               this.pane2button[page.id].watch(attr, dojo.hitch(this, function(name, oldValue, newValue){
+                                       if(this._postStartup && this._dim){
+                                               this.resize(this._dim);
                                        }
-                               }
-                       })
-               );
+                               }))
+                       );
+               }, this);
 
                // Increment the width of the wrapper when a tab is added
                // This makes sure that the buttons never wrap.
@@ -19925,13 +20685,6 @@ dojo.declare("dijit.layout.ScrollingTabController",
                        this._selectedTab = null;
                }
 
-               // delete menu entry corresponding to pane that was removed from TabContainer
-               if(this.useMenu && page && page.id && this._menuChildren[page.id]){
-                       this._menu.removeChild(this._menuChildren[page.id]);
-                       this._menuChildren[page.id].destroy();
-                       delete this._menuChildren[page.id];
-               }
-
                this.inherited(arguments);
        },
 
@@ -19939,7 +20692,6 @@ dojo.declare("dijit.layout.ScrollingTabController",
                // summary:
                //              Creates the buttons used to scroll to view tabs that
                //              may not be visible if the TabContainer is too narrow.
-               this._menuChildren = {};
 
                // Make a list of the buttons to display when the tab labels become
                // wider than the TabContainer, and hide the other buttons.
@@ -19948,26 +20700,13 @@ dojo.declare("dijit.layout.ScrollingTabController",
                this._buttons = dojo.query("> .tabStripButton", this.domNode).filter(function(btn){
                        if((this.useMenu && btn == this._menuBtn.domNode) ||
                                (this.useSlider && (btn == this._rightBtn.domNode || btn == this._leftBtn.domNode))){
-                               this._btnWidth += dojo.marginBox(btn).w;
+                               this._btnWidth += dojo._getMarginSize(btn).w;
                                return true;
                        }else{
                                dojo.style(btn, "display", "none");
                                return false;
                        }
                }, this);
-
-               if(this.useMenu){
-                       // Create the menu that is used to select tabs.
-                       this._menu = new dijit.Menu({
-                               id: this.id + "_menu",
-                               dir: this.dir,
-                               lang: this.lang,
-                               targetNodeIds: [this._menuBtn.domNode],
-                               leftClickToOpen: true,
-                               refocus: false  // selecting a menu item sets focus to a TabButton
-                       });
-                       this._supportingWidgets.push(this._menu);
-               }
        },
 
        _getTabsWidth: function(){
@@ -20037,6 +20776,10 @@ dojo.declare("dijit.layout.ScrollingTabController",
                this._setButtonClass(this._getScroll());
                
                this._postResize = true;
+
+               // Return my size so layoutChildren() can use it.
+               // Also avoids IE9 layout glitch on browser resize when scroll buttons present
+               return {h: this._contentBox.h, w: dim.w};
        },
 
        _getScroll: function(){
@@ -20139,7 +20882,7 @@ dojo.declare("dijit.layout.ScrollingTabController",
                return pos;
        },
 
-       createSmoothScroll : function(x){
+       createSmoothScroll: function(x){
                // summary:
                //              Creates a dojo._Animation object that smoothly scrolls the tab list
                //              either to a fixed horizontal pixel value, or to the selected tab.
@@ -20185,7 +20928,7 @@ dojo.declare("dijit.layout.ScrollingTabController",
                return anim; // dojo._Animation
        },
 
-       _getBtnNode: function(e){
+       _getBtnNode: function(/*Event*/ e){
                // summary:
                //              Gets a button DOM node from a mouse click event.
                // e:
@@ -20197,7 +20940,7 @@ dojo.declare("dijit.layout.ScrollingTabController",
                return n;
        },
 
-       doSlideRight: function(e){
+       doSlideRight: function(/*Event*/ e){
                // summary:
                //              Scrolls the menu to the right.
                // e:
@@ -20205,7 +20948,7 @@ dojo.declare("dijit.layout.ScrollingTabController",
                this.doSlide(1, this._getBtnNode(e));
        },
 
-       doSlideLeft: function(e){
+       doSlideLeft: function(/*Event*/ e){
                // summary:
                //              Scrolls the menu to the left.
                // e:
@@ -20213,7 +20956,7 @@ dojo.declare("dijit.layout.ScrollingTabController",
                this.doSlide(-1,this._getBtnNode(e));
        },
 
-       doSlide: function(direction, node){
+       doSlide: function(/*Number*/ direction, /*DomNode*/ node){
                // summary:
                //              Scrolls the tab list to the left or right by 75% of the widget width.
                // direction:
@@ -20232,7 +20975,7 @@ dojo.declare("dijit.layout.ScrollingTabController",
                this.createSmoothScroll(to).play();
        },
 
-       _setButtonClass: function(scroll){
+       _setButtonClass: function(/*Number*/ scroll){
                // summary:
                //              Disables the left scroll button if the tabs are scrolled all the way to the left,
                //              or the right scroll button in the opposite case.
@@ -20245,18 +20988,71 @@ dojo.declare("dijit.layout.ScrollingTabController",
        }
 });
 
-dojo.declare("dijit.layout._ScrollingTabControllerButton",
-       dijit.form.Button,
-       {
-               baseClass: "dijitTab tabStripButton",
 
-               templateString: dojo.cache("dijit.layout", "templates/_ScrollingTabControllerButton.html", "<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div waiRole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div waiRole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img waiRole=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),
+dojo.declare("dijit.layout._ScrollingTabControllerButtonMixin", null, {
+       baseClass: "dijitTab tabStripButton",
+
+       templateString: dojo.cache("dijit.layout", "templates/_ScrollingTabControllerButton.html", "<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div role=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div role=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img role=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),
 
                // Override inherited tabIndex: 0 from dijit.form.Button, because user shouldn't be
                // able to tab to the left/right/menu buttons
-               tabIndex: "-1"
+       tabIndex: "",
+
+       // Similarly, override FormWidget.isFocusable() because clicking a button shouldn't focus it
+       // either (this override avoids focus() call in FormWidget.js)
+       isFocusable: function(){ return false; }
+});
+
+dojo.declare("dijit.layout._ScrollingTabControllerButton",
+       [dijit.form.Button, dijit.layout._ScrollingTabControllerButtonMixin]);
+
+dojo.declare(
+       "dijit.layout._ScrollingTabControllerMenuButton",
+       [dijit.form.Button, dijit._HasDropDown, dijit.layout._ScrollingTabControllerButtonMixin],
+{
+       // id of the TabContainer itself
+       containerId: "",
+
+       // -1 so user can't tab into the button, but so that button can still be focused programatically.
+       // Because need to move focus to the button (or somewhere) before the menu is hidden or IE6 will crash.
+       tabIndex: "-1",
+
+       isLoaded: function(){
+               // recreate menu every time, in case the TabContainer's list of children (or their icons/labels) have changed
+               return false;
+       },
+
+       loadDropDown: function(callback){
+               this.dropDown = new dijit.Menu({
+                       id: this.containerId + "_menu",
+                       dir: this.dir,
+                       lang: this.lang
+               });
+               var container = dijit.byId(this.containerId);
+               dojo.forEach(container.getChildren(), function(page){
+                       var menuItem = new dijit.MenuItem({
+                               id: page.id + "_stcMi",
+                               label: page.title,
+                               iconClass: page.iconClass,
+                               dir: page.dir,
+                               lang: page.lang,
+                               onClick: function(){
+                                       container.selectChild(page);
+                               }
+                       });
+                       this.dropDown.addChild(menuItem);
+               }, this);
+               callback();
+       },
+
+       closeDropDown: function(/*Boolean*/ focus){
+               this.inherited(arguments);
+               if(this.dropDown){
+                       this.dropDown.destroyRecursive();
+                       delete this.dropDown;
+               }
        }
-);
+});
 
 }
 
@@ -20328,7 +21124,6 @@ dojo.declare("dijit.layout.TabContainer",
                }
 });
 
-
 }
 
 if(!dojo._hasResource["dojo.number"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
@@ -20339,7 +21134,7 @@ dojo.provide("dojo.number");
 
 
 
-
+dojo.getObject("number", true, dojo);
 
 /*=====
 dojo.number = {
@@ -20444,7 +21239,7 @@ dojo.number._applyPattern = function(/*Number*/value, /*String*/pattern, /*dojo.
        if(options.fractional === false){ options.places = 0; }
        return pattern.replace(numberPatternRE,
                dojo.number._formatAbsolute(value, numberPattern[0], {decimal: decimal, group: group, places: options.places, round: options.round}));
-}
+};
 
 dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/increment){
        //      summary:
@@ -20470,7 +21265,7 @@ dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/incr
        //              10.75
        var factor = 10 / (increment || 10);
        return (factor * +value).toFixed(places) / factor; // Number
-}
+};
 
 if((0.9).toFixed() == 0){
        // (isIE) toFixed() bug workaround: Rounding fails on IE when most significant digit
@@ -20483,7 +21278,7 @@ if((0.9).toFixed() == 0){
                                d = 0;
                        }
                        return round(v, p, m) + (v > 0 ? d : -d);
-               }
+               };
        })();
 }
 
@@ -20506,7 +21301,7 @@ dojo.number.__FormatAbsoluteOptions = function(){
 =====*/
 
 dojo.number._formatAbsolute = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatAbsoluteOptions?*/options){
-       // summary: 
+       // summary:
        //              Apply numeric pattern to absolute value using options. Gives no
        //              consideration to local customs.
        // value:
@@ -20621,7 +21416,7 @@ dojo.number.regexp = function(/*dojo.number.__RegexpOptions?*/options){
        //              Returns regular expression with positive and negative match, group
        //              and decimal separators
        return dojo.number._parseInfo(options).regexp; // String
-}
+};
 
 dojo.number._parseInfo = function(/*Object?*/options){
        options = options || {};
@@ -20709,7 +21504,7 @@ dojo.number._parseInfo = function(/*Object?*/options){
 
        // normalize whitespace and return
        return {regexp: re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group: group, decimal: decimal, factor: factor}; // Object
-}
+};
 
 /*=====
 dojo.number.__ParseOptions = function(){
@@ -20820,10 +21615,10 @@ dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?*
                        var re = "";
                        if(q && (flags.places!==0)){
                                re = "\\" + flags.decimal;
-                               if(flags.places == Infinity){ 
-                                       re = "(?:" + re + "\\d+)?"; 
+                               if(flags.places == Infinity){
+                                       re = "(?:" + re + "\\d+)?";
                                }else{
-                                       re += "\\d{" + flags.places + "}"; 
+                                       re += "\\d{" + flags.places + "}";
                                }
                        }
                        return re;
@@ -20832,3403 +21627,3569 @@ dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?*
        );
 
        var exponentRE = dojo.regexp.buildGroupRE(flags.exponent,
-               function(q){ 
+               function(q){
                        if(q){ return "([eE]" + dojo.number._integerRegexp({ signed: flags.eSigned}) + ")"; }
-                       return ""; 
+                       return "";
                }
        );
 
-       var realRE = integerRE + decimalRE;
-       // allow for decimals without integers, e.g. .25
-       if(decimalRE){realRE = "(?:(?:"+ realRE + ")|(?:" + decimalRE + "))";}
-       return realRE + exponentRE; // String
-};
+       var realRE = integerRE + decimalRE;
+       // allow for decimals without integers, e.g. .25
+       if(decimalRE){realRE = "(?:(?:"+ realRE + ")|(?:" + decimalRE + "))";}
+       return realRE + exponentRE; // String
+};
+
+/*=====
+dojo.number.__IntegerRegexpFlags = function(){
+       //      signed: Boolean?
+       //              The leading plus-or-minus sign. Can be true, false, or `[true,false]`.
+       //              Default is `[true, false]`, (i.e. will match if it is signed
+       //              or unsigned).
+       //      separator: String?
+       //              The character used as the thousands separator. Default is no
+       //              separator. For more than one symbol use an array, e.g. `[",", ""]`,
+       //              makes ',' optional.
+       //      groupSize: Number?
+       //              group size between separators
+       //      groupSize2: Number?
+       //              second grouping, where separators 2..n have a different interval than the first separator (for India)
+       this.signed = signed;
+       this.separator = separator;
+       this.groupSize = groupSize;
+       this.groupSize2 = groupSize2;
+}
+=====*/
+
+dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags){
+       // summary:
+       //              Builds a regular expression that matches an integer
+
+       // assign default values to missing parameters
+       flags = flags || {};
+       if(!("signed" in flags)){ flags.signed = [true, false]; }
+       if(!("separator" in flags)){
+               flags.separator = "";
+       }else if(!("groupSize" in flags)){
+               flags.groupSize = 3;
+       }
+
+       var signRE = dojo.regexp.buildGroupRE(flags.signed,
+               function(q){ return q ? "[-+]" : ""; },
+               true
+       );
+
+       var numberRE = dojo.regexp.buildGroupRE(flags.separator,
+               function(sep){
+                       if(!sep){
+                               return "(?:\\d+)";
+                       }
+
+                       sep = dojo.regexp.escapeString(sep);
+                       if(sep == " "){ sep = "\\s"; }
+                       else if(sep == "\xa0"){ sep = "\\s\\xa0"; }
+
+                       var grp = flags.groupSize, grp2 = flags.groupSize2;
+                       //TODO: should we continue to enforce that numbers with separators begin with 1-9?  See #6933
+                       if(grp2){
+                               var grp2RE = "(?:0|[1-9]\\d{0," + (grp2-1) + "}(?:[" + sep + "]\\d{" + grp2 + "})*[" + sep + "]\\d{" + grp + "})";
+                               return ((grp-grp2) > 0) ? "(?:" + grp2RE + "|(?:0|[1-9]\\d{0," + (grp-1) + "}))" : grp2RE;
+                       }
+                       return "(?:0|[1-9]\\d{0," + (grp-1) + "}(?:[" + sep + "]\\d{" + grp + "})*)";
+               },
+               true
+       );
+
+       return signRE + numberRE; // String
+};
+
+}
+
+if(!dojo._hasResource["dijit.ProgressBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.ProgressBar"] = true;
+dojo.provide("dijit.ProgressBar");
+
+
+
+
+
+
+dojo.declare("dijit.ProgressBar", [dijit._Widget, dijit._Templated], {
+       // summary:
+       //              A progress indication widget, showing the amount completed
+       //              (often the percentage completed) of a task.
+       //
+       // example:
+       // |    <div dojoType="ProgressBar"
+       // |             places="0"
+       // |             value="..." maximum="...">
+       // |    </div>
+
+       // progress: [const] String (Percentage or Number)
+       //              Number or percentage indicating amount of task completed.
+       //              Deprecated.   Use "value" instead.
+       progress: "0",
+
+       // value: String (Percentage or Number)
+       //              Number or percentage indicating amount of task completed.
+       //              With "%": percentage value, 0% <= progress <= 100%, or
+       //              without "%": absolute value, 0 <= progress <= maximum.
+       //              Infinity means that the progress bar is indeterminate.
+       value: "",
+
+       // maximum: [const] Float
+       //              Max sample number
+       maximum: 100,
+
+       // places: [const] Number
+       //              Number of places to show in values; 0 by default
+       places: 0,
+
+       // indeterminate: [const] Boolean
+       //              If false: show progress value (number or percentage).
+       //              If true: show that a process is underway but that the amount completed is unknown.
+       //              Deprecated.   Use "value" instead.
+       indeterminate: false,
+
+       // label: String?
+       //              Label on progress bar.   Defaults to percentage for determinate progress bar and
+       //              blank for indeterminate progress bar.
+       label:"",
+
+       // name: String
+       //              this is the field name (for a form) if set. This needs to be set if you want to use
+       //              this widget in a dijit.form.Form widget (such as dijit.Dialog)
+       name: '',
+
+       templateString: dojo.cache("dijit", "templates/ProgressBar.html", "<div class=\"dijitProgressBar dijitProgressBarEmpty\" role=\"progressbar\"\n\t><div  dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\" role=\"presentation\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"labelNode\" class=\"dijitProgressBarLabel\" id=\"${id}_label\"></div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),
+
+       // _indeterminateHighContrastImagePath: [private] dojo._URL
+       //              URL to image to use for indeterminate progress bar when display is in high contrast mode
+       _indeterminateHighContrastImagePath:
+               dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"),
+
+       postMixInProperties: function(){
+               this.inherited(arguments);
+               if(!("value" in this.params)){
+                       this.value = this.indeterminate ? Infinity : this.progress;
+               }
+       },
+
+       buildRendering: function(){
+               this.inherited(arguments);
+               this.indeterminateHighContrastImage.setAttribute("src",
+                       this._indeterminateHighContrastImagePath.toString());
+               this.update();
+       },
+
+       update: function(/*Object?*/attributes){
+               // summary:
+               //              Internal method to change attributes of ProgressBar, similar to set(hash).  Users should call
+               //              set("value", ...) rather than calling this method directly.
+               // attributes:
+               //              May provide progress and/or maximum properties on this parameter;
+               //              see attribute specs for details.
+               // example:
+               //      |       myProgressBar.update({'indeterminate': true});
+               //      |       myProgressBar.update({'progress': 80});
+               //      |       myProgressBar.update({'indeterminate': true, label:"Loading ..." })
+               // tags:
+               //              private
+
+               // TODO: deprecate this method and use set() instead
+
+               dojo.mixin(this, attributes || {});
+               var tip = this.internalProgress, ap = this.domNode;
+               var percent = 1;
+               if(this.indeterminate){
+                       dijit.removeWaiState(ap, "valuenow");
+                       dijit.removeWaiState(ap, "valuemin");
+                       dijit.removeWaiState(ap, "valuemax");
+               }else{
+                       if(String(this.progress).indexOf("%") != -1){
+                               percent = Math.min(parseFloat(this.progress)/100, 1);
+                               this.progress = percent * this.maximum;
+                       }else{
+                               this.progress = Math.min(this.progress, this.maximum);
+                               percent = this.progress / this.maximum;
+                       }
+
+                       dijit.setWaiState(ap, "describedby", this.labelNode.id);
+                       dijit.setWaiState(ap, "valuenow", this.progress);
+                       dijit.setWaiState(ap, "valuemin", 0);
+                       dijit.setWaiState(ap, "valuemax", this.maximum);
+               }
+               this.labelNode.innerHTML = this.report(percent);
+
+               dojo.toggleClass(this.domNode, "dijitProgressBarIndeterminate", this.indeterminate);
+               tip.style.width = (percent * 100) + "%";
+               this.onChange();
+       },
+
+       _setValueAttr: function(v){
+               this._set("value", v);
+               if(v == Infinity){
+                       this.update({indeterminate:true});
+               }else{
+                       this.update({indeterminate:false, progress:v});
+               }
+       },
+
+       _setLabelAttr: function(label){
+               this._set("label", label);
+               this.update();
+       },
+
+       _setIndeterminateAttr: function(indeterminate){
+               // Deprecated, use set("value", ...) instead
+               this.indeterminate = indeterminate;
+               this.update();
+       },
+
+       report: function(/*float*/percent){
+               // summary:
+               //              Generates message to show inside progress bar (normally indicating amount of task completed).
+               //              May be overridden.
+               // tags:
+               //              extension
+
+               return this.label ? this.label :
+                               (this.indeterminate ? "&nbsp;" : dojo.number.format(percent, { type: "percent", places: this.places, locale: this.lang }));
+       },
+
+       onChange: function(){
+               // summary:
+               //              Callback fired when progress updates.
+               // tags:
+               //              extension
+       }
+});
+
+}
+
+if(!dojo._hasResource["dijit.ToolbarSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.ToolbarSeparator"] = true;
+dojo.provide("dijit.ToolbarSeparator");
+
+
+
+
+dojo.declare("dijit.ToolbarSeparator",
+               [ dijit._Widget, dijit._Templated ],
+               {
+               // summary:
+               //              A spacer between two `dijit.Toolbar` items
+               templateString: '<div class="dijitToolbarSeparator dijitInline" role="presentation"></div>',
+               buildRendering: function(){
+                       this.inherited(arguments);
+                       dojo.setSelectable(this.domNode, false);
+               },
+               isFocusable: function(){
+                       // summary:
+                       //              This widget isn't focusable, so pass along that fact.
+                       // tags:
+                       //              protected
+                       return false;
+               }
+
+       });
+
+}
+
+if(!dojo._hasResource["dijit.Toolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Toolbar"] = true;
+dojo.provide("dijit.Toolbar");
+
+
+
+
+
+
+// Note: require of ToolbarSeparator is for back-compat, remove for 2.0
+
+dojo.declare("dijit.Toolbar",
+       [dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
+       {
+       // summary:
+       //              A Toolbar widget, used to hold things like `dijit.Editor` buttons
+
+       templateString:
+               '<div class="dijit" role="toolbar" tabIndex="${tabIndex}" dojoAttachPoint="containerNode">' +
+               //      '<table style="table-layout: fixed" class="dijitReset dijitToolbarTable">' + // factor out style
+               //              '<tr class="dijitReset" dojoAttachPoint="containerNode"></tr>'+
+               //      '</table>' +
+               '</div>',
+
+       baseClass: "dijitToolbar",
 
-/*=====
-dojo.number.__IntegerRegexpFlags = function(){
-       //      signed: Boolean?
-       //              The leading plus-or-minus sign. Can be true, false, or `[true,false]`.
-       //              Default is `[true, false]`, (i.e. will match if it is signed
-       //              or unsigned).
-       //      separator: String?
-       //              The character used as the thousands separator. Default is no
-       //              separator. For more than one symbol use an array, e.g. `[",", ""]`,
-       //              makes ',' optional.
-       //      groupSize: Number?
-       //              group size between separators
-       //      groupSize2: Number?
-       //              second grouping, where separators 2..n have a different interval than the first separator (for India)
-       this.signed = signed;
-       this.separator = separator;
-       this.groupSize = groupSize;
-       this.groupSize2 = groupSize2;
-}
-=====*/
+       postCreate: function(){
+               this.inherited(arguments);
 
-dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags){
-       // summary: 
-       //              Builds a regular expression that matches an integer
+               this.connectKeyNavHandlers(
+                       this.isLeftToRight() ? [dojo.keys.LEFT_ARROW] : [dojo.keys.RIGHT_ARROW],
+                       this.isLeftToRight() ? [dojo.keys.RIGHT_ARROW] : [dojo.keys.LEFT_ARROW]
+               );
+       },
 
-       // assign default values to missing parameters
-       flags = flags || {};
-       if(!("signed" in flags)){ flags.signed = [true, false]; }
-       if(!("separator" in flags)){
-               flags.separator = "";
-       }else if(!("groupSize" in flags)){
-               flags.groupSize = 3;
+       startup: function(){
+               if(this._started){ return; }
+
+               this.startupKeyNavChildren();
+
+               this.inherited(arguments);
        }
+}
+);
 
-       var signRE = dojo.regexp.buildGroupRE(flags.signed,
-               function(q){ return q ? "[-+]" : ""; },
-               true
-       );
+}
 
-       var numberRE = dojo.regexp.buildGroupRE(flags.separator,
-               function(sep){
-                       if(!sep){
-                               return "(?:\\d+)";
-                       }
+if(!dojo._hasResource["dojo.DeferredList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.DeferredList"] = true;
+dojo.provide("dojo.DeferredList");
 
-                       sep = dojo.regexp.escapeString(sep);
-                       if(sep == " "){ sep = "\\s"; }
-                       else if(sep == "\xa0"){ sep = "\\s\\xa0"; }
 
-                       var grp = flags.groupSize, grp2 = flags.groupSize2;
-                       //TODO: should we continue to enforce that numbers with separators begin with 1-9?  See #6933
-                       if(grp2){
-                               var grp2RE = "(?:0|[1-9]\\d{0," + (grp2-1) + "}(?:[" + sep + "]\\d{" + grp2 + "})*[" + sep + "]\\d{" + grp + "})";
-                               return ((grp-grp2) > 0) ? "(?:" + grp2RE + "|(?:0|[1-9]\\d{0," + (grp-1) + "}))" : grp2RE;
+dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){
+       // summary:
+       //              Provides event handling for a group of Deferred objects.
+       // description:
+       //              DeferredList takes an array of existing deferreds and returns a new deferred of its own
+       //              this new deferred will typically have its callback fired when all of the deferreds in
+       //              the given list have fired their own deferreds.  The parameters `fireOnOneCallback` and
+       //              fireOnOneErrback, will fire before all the deferreds as appropriate
+       //
+       //      list:
+       //              The list of deferreds to be synchronizied with this DeferredList
+       //      fireOnOneCallback:
+       //              Will cause the DeferredLists callback to be fired as soon as any
+       //              of the deferreds in its list have been fired instead of waiting until
+       //              the entire list has finished
+       //      fireonOneErrback:
+       //              Will cause the errback to fire upon any of the deferreds errback
+       //      canceller:
+       //              A deferred canceller function, see dojo.Deferred
+       var resultList = [];
+       dojo.Deferred.call(this);
+       var self = this;
+       if(list.length === 0 && !fireOnOneCallback){
+               this.resolve([0, []]);
+       }
+       var finished = 0;
+       dojo.forEach(list, function(item, i){
+               item.then(function(result){
+                       if(fireOnOneCallback){
+                               self.resolve([i, result]);
+                       }else{
+                               addResult(true, result);
                        }
-                       return "(?:0|[1-9]\\d{0," + (grp-1) + "}(?:[" + sep + "]\\d{" + grp + "})*)";
-               },
-               true
-       );
+               },function(error){
+                       if(fireOnOneErrback){
+                               self.reject(error);
+                       }else{
+                               addResult(false, error);
+                       }
+                       if(consumeErrors){
+                               return null;
+                       }
+                       throw error;
+               });
+               function addResult(succeeded, result){
+                       resultList[i] = [succeeded, result];
+                       finished++;
+                       if(finished === list.length){
+                               self.resolve(resultList);
+                       }
+                       
+               }
+       });
+};
+dojo.DeferredList.prototype = new dojo.Deferred();
 
-       return signRE + numberRE; // String
-}
+dojo.DeferredList.prototype.gatherResults= function(deferredList){
+       // summary:
+       //      Gathers the results of the deferreds for packaging
+       //      as the parameters to the Deferred Lists' callback
 
-}
+       var d = new dojo.DeferredList(deferredList, false, true, false);
+       d.addCallback(function(results){
+               var ret = [];
+               dojo.forEach(results, function(result){
+                       ret.push(result[1]);
+               });
+               return ret;
+       });
+       return d;
+};
 
-if(!dojo._hasResource["dijit.ProgressBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.ProgressBar"] = true;
-dojo.provide("dijit.ProgressBar");
+}
 
+if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.tree.TreeStoreModel"] = true;
+dojo.provide("dijit.tree.TreeStoreModel");
 
 
+dojo.declare(
+               "dijit.tree.TreeStoreModel",
+               null,
+       {
+               // summary:
+               //              Implements dijit.Tree.model connecting to a store with a single
+               //              root item.  Any methods passed into the constructor will override
+               //              the ones defined here.
 
+               // store: dojo.data.Store
+               //              Underlying store
+               store: null,
 
+               // childrenAttrs: String[]
+               //              One or more attribute names (attributes in the dojo.data item) that specify that item's children
+               childrenAttrs: ["children"],
 
+               // newItemIdAttr: String
+               //              Name of attribute in the Object passed to newItem() that specifies the id.
+               //
+               //              If newItemIdAttr is set then it's used when newItem() is called to see if an
+               //              item with the same id already exists, and if so just links to the old item
+               //              (so that the old item ends up with two parents).
+               //
+               //              Setting this to null or "" will make every drop create a new item.
+               newItemIdAttr: "id",
 
-dojo.declare("dijit.ProgressBar", [dijit._Widget, dijit._Templated], {
-       // summary:
-       //              A progress indication widget, showing the amount completed
-       //              (often the percentage completed) of a task.
-       //
-       // example:
-       // |    <div dojoType="ProgressBar"
-       // |             places="0"
-       // |             progress="..." maximum="...">
-       // |    </div>
-       //
-       // description:
-       //              Note that the progress bar is updated via (a non-standard)
-       //              update() method, rather than via attr() like other widgets.
+               // labelAttr: String
+               //              If specified, get label for tree node from this attribute, rather
+               //              than by calling store.getLabel()
+               labelAttr: "",
 
-       // progress: [const] String (Percentage or Number)
-       //              Number or percentage indicating amount of task completed.
-       //              With "%": percentage value, 0% <= progress <= 100%, or
-       //              without "%": absolute value, 0 <= progress <= maximum
-       // TODO: rename to value for 2.0
-       progress: "0",
+               // root: [readonly] dojo.data.Item
+               //              Pointer to the root item (read only, not a parameter)
+               root: null,
 
-       // maximum: [const] Float
-       //              Max sample number
-       maximum: 100,
+               // query: anything
+               //              Specifies datastore query to return the root item for the tree.
+               //              Must only return a single item.   Alternately can just pass in pointer
+               //              to root item.
+               // example:
+               //      |       {id:'ROOT'}
+               query: null,
 
-       // places: [const] Number
-       //              Number of places to show in values; 0 by default
-       places: 0,
+               // deferItemLoadingUntilExpand: Boolean
+               //              Setting this to true will cause the TreeStoreModel to defer calling loadItem on nodes
+               //              until they are expanded. This allows for lazying loading where only one
+               //              loadItem (and generally one network call, consequently) per expansion
+               //              (rather than one for each child).
+               //              This relies on partial loading of the children items; each children item of a
+               //              fully loaded item should contain the label and info about having children.
+               deferItemLoadingUntilExpand: false,
 
-       // indeterminate: [const] Boolean
-       //              If false: show progress value (number or percentage).
-       //              If true: show that a process is underway but that the amount completed is unknown.
-       indeterminate: false,
+               constructor: function(/* Object */ args){
+                       // summary:
+                       //              Passed the arguments listed above (store, etc)
+                       // tags:
+                       //              private
 
-       // name: String
-       //              this is the field name (for a form) if set. This needs to be set if you want to use
-       //              this widget in a dijit.form.Form widget (such as dijit.Dialog)
-       name: '',
+                       dojo.mixin(this, args);
 
-       templateString: dojo.cache("dijit", "templates/ProgressBar.html", "<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),
+                       this.connects = [];
 
-       // _indeterminateHighContrastImagePath: [private] dojo._URL
-       //              URL to image to use for indeterminate progress bar when display is in high contrast mode
-       _indeterminateHighContrastImagePath:
-               dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"),
+                       var store = this.store;
+                       if(!store.getFeatures()['dojo.data.api.Identity']){
+                               throw new Error("dijit.Tree: store must support dojo.data.Identity");
+                       }
 
-       // public functions
-       postCreate: function(){
-               this.inherited(arguments);
-               this.indeterminateHighContrastImage.setAttribute("src",
-                       this._indeterminateHighContrastImagePath.toString());
-               this.update();
-       },
+                       // if the store supports Notification, subscribe to the notification events
+                       if(store.getFeatures()['dojo.data.api.Notification']){
+                               this.connects = this.connects.concat([
+                                       dojo.connect(store, "onNew", this, "onNewItem"),
+                                       dojo.connect(store, "onDelete", this, "onDeleteItem"),
+                                       dojo.connect(store, "onSet", this, "onSetItem")
+                               ]);
+                       }
+               },
 
-       update: function(/*Object?*/attributes){
-               // summary:
-               //              Change attributes of ProgressBar, similar to attr(hash).
-               //
-               // attributes:
-               //              May provide progress and/or maximum properties on this parameter;
-               //              see attribute specs for details.
-               //
-               // example:
-               //      |       myProgressBar.update({'indeterminate': true});
-               //      |       myProgressBar.update({'progress': 80});
+               destroy: function(){
+                       dojo.forEach(this.connects, dojo.disconnect);
+                       // TODO: should cancel any in-progress processing of getRoot(), getChildren()
+               },
 
-               // TODO: deprecate this method and use set() instead
+               // =======================================================================
+               // Methods for traversing hierarchy
 
-               dojo.mixin(this, attributes || {});
-               var tip = this.internalProgress;
-               var percent = 1, classFunc;
-               if(this.indeterminate){
-                       classFunc = "addClass";
-                       dijit.removeWaiState(tip, "valuenow");
-                       dijit.removeWaiState(tip, "valuemin");
-                       dijit.removeWaiState(tip, "valuemax");
-               }else{
-                       classFunc = "removeClass";
-                       if(String(this.progress).indexOf("%") != -1){
-                               percent = Math.min(parseFloat(this.progress)/100, 1);
-                               this.progress = percent * this.maximum;
+               getRoot: function(onItem, onError){
+                       // summary:
+                       //              Calls onItem with the root item for the tree, possibly a fabricated item.
+                       //              Calls onError on error.
+                       if(this.root){
+                               onItem(this.root);
                        }else{
-                               this.progress = Math.min(this.progress, this.maximum);
-                               percent = this.progress / this.maximum;
+                               this.store.fetch({
+                                       query: this.query,
+                                       onComplete: dojo.hitch(this, function(items){
+                                               if(items.length != 1){
+                                                       throw new Error(this.declaredClass + ": query " + dojo.toJson(this.query) + " returned " + items.length +
+                                                               " items, but must return exactly one item");
+                                               }
+                                               this.root = items[0];
+                                               onItem(this.root);
+                                       }),
+                                       onError: onError
+                               });
                        }
-                       var text = this.report(percent);
-                       this.label.firstChild.nodeValue = text;
-                       dijit.setWaiState(tip, "describedby", this.label.id);
-                       dijit.setWaiState(tip, "valuenow", this.progress);
-                       dijit.setWaiState(tip, "valuemin", 0);
-                       dijit.setWaiState(tip, "valuemax", this.maximum);
-               }
-               dojo[classFunc](this.domNode, "dijitProgressBarIndeterminate");
-               tip.style.width = (percent * 100) + "%";
-               this.onChange();
-       },
-
-       _setValueAttr: function(v){
-               if(v == Infinity){
-                       this.update({indeterminate:true});
-               }else{
-                       this.update({indeterminate:false, progress:v});
-               }
-       },
+               },
 
-       _getValueAttr: function(){
-               return this.progress;
-       },
+               mayHaveChildren: function(/*dojo.data.Item*/ item){
+                       // summary:
+                       //              Tells if an item has or may have children.  Implementing logic here
+                       //              avoids showing +/- expando icon for nodes that we know don't have children.
+                       //              (For efficiency reasons we may not want to check if an element actually
+                       //              has children until user clicks the expando node)
+                       return dojo.some(this.childrenAttrs, function(attr){
+                               return this.store.hasAttribute(item, attr);
+                       }, this);
+               },
 
-       report: function(/*float*/percent){
-               // summary:
-               //              Generates message to show inside progress bar (normally indicating amount of task completed).
-               //              May be overridden.
-               // tags:
-               //              extension
+               getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete, /*function*/ onError){
+                       // summary:
+                       //              Calls onComplete() with array of child items of given parent item, all loaded.
 
-               return dojo.number.format(percent, { type: "percent", places: this.places, locale: this.lang });
-       },
+                       var store = this.store;
+                       if(!store.isItemLoaded(parentItem)){
+                               // The parent is not loaded yet, we must be in deferItemLoadingUntilExpand
+                               // mode, so we will load it and just return the children (without loading each
+                               // child item)
+                               var getChildren = dojo.hitch(this, arguments.callee);
+                               store.loadItem({
+                                       item: parentItem,
+                                       onItem: function(parentItem){
+                                               getChildren(parentItem, onComplete, onError);
+                                       },
+                                       onError: onError
+                               });
+                               return;
+                       }
+                       // get children of specified item
+                       var childItems = [];
+                       for(var i=0; i<this.childrenAttrs.length; i++){
+                               var vals = store.getValues(parentItem, this.childrenAttrs[i]);
+                               childItems = childItems.concat(vals);
+                       }
 
-       onChange: function(){
-               // summary:
-               //              Callback fired when progress updates.
-               // tags:
-               //              progress
-       }
-});
+                       // count how many items need to be loaded
+                       var _waitCount = 0;
+                       if(!this.deferItemLoadingUntilExpand){
+                               dojo.forEach(childItems, function(item){ if(!store.isItemLoaded(item)){ _waitCount++; } });
+                       }
 
-}
+                       if(_waitCount == 0){
+                               // all items are already loaded (or we aren't loading them).  proceed...
+                               onComplete(childItems);
+                       }else{
+                               // still waiting for some or all of the items to load
+                               dojo.forEach(childItems, function(item, idx){
+                                       if(!store.isItemLoaded(item)){
+                                               store.loadItem({
+                                                       item: item,
+                                                       onItem: function(item){
+                                                               childItems[idx] = item;
+                                                               if(--_waitCount == 0){
+                                                                       // all nodes have been loaded, send them to the tree
+                                                                       onComplete(childItems);
+                                                               }
+                                                       },
+                                                       onError: onError
+                                               });
+                                       }
+                               });
+                       }
+               },
 
-if(!dojo._hasResource["dijit.ToolbarSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.ToolbarSeparator"] = true;
-dojo.provide("dijit.ToolbarSeparator");
+               // =======================================================================
+               // Inspecting items
 
+               isItem: function(/* anything */ something){
+                       return this.store.isItem(something);    // Boolean
+               },
 
+               fetchItemByIdentity: function(/* object */ keywordArgs){
+                       this.store.fetchItemByIdentity(keywordArgs);
+               },
 
+               getIdentity: function(/* item */ item){
+                       return this.store.getIdentity(item);    // Object
+               },
 
-dojo.declare("dijit.ToolbarSeparator",
-               [ dijit._Widget, dijit._Templated ],
-               {
-               // summary:
-               //              A spacer between two `dijit.Toolbar` items
-               templateString: '<div class="dijitToolbarSeparator dijitInline" waiRole="presentation"></div>',
-               postCreate: function(){ dojo.setSelectable(this.domNode, false); },
-               isFocusable: function(){
+               getLabel: function(/*dojo.data.Item*/ item){
                        // summary:
-                       //              This widget isn't focusable, so pass along that fact.
-                       // tags:
-                       //              protected
-                       return false;
-               }
-
-       });
-
+                       //              Get the label for an item
+                       if(this.labelAttr){
+                               return this.store.getValue(item,this.labelAttr);        // String
+                       }else{
+                               return this.store.getLabel(item);       // String
+                       }
+               },
 
+               // =======================================================================
+               // Write interface
 
-}
+               newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
+                       // summary:
+                       //              Creates a new item.   See `dojo.data.api.Write` for details on args.
+                       //              Used in drag & drop when item from external source dropped onto tree.
+                       // description:
+                       //              Developers will need to override this method if new items get added
+                       //              to parents with multiple children attributes, in order to define which
+                       //              children attribute points to the new item.
 
-if(!dojo._hasResource["dijit.Toolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Toolbar"] = true;
-dojo.provide("dijit.Toolbar");
+                       var pInfo = {parent: parent, attribute: this.childrenAttrs[0]}, LnewItem;
 
+                       if(this.newItemIdAttr && args[this.newItemIdAttr]){
+                               // Maybe there's already a corresponding item in the store; if so, reuse it.
+                               this.fetchItemByIdentity({identity: args[this.newItemIdAttr], scope: this, onItem: function(item){
+                                       if(item){
+                                               // There's already a matching item in store, use it
+                                               this.pasteItem(item, null, parent, true, insertIndex);
+                                       }else{
+                                               // Create new item in the tree, based on the drag source.
+                                               LnewItem=this.store.newItem(args, pInfo);
+                                               if (LnewItem && (insertIndex!=undefined)){
+                                                       // Move new item to desired position
+                                                       this.pasteItem(LnewItem, parent, parent, false, insertIndex);
+                                               }
+                                       }
+                               }});
+                       }else{
+                               // [as far as we know] there is no id so we must assume this is a new item
+                               LnewItem=this.store.newItem(args, pInfo);
+                               if (LnewItem && (insertIndex!=undefined)){
+                                       // Move new item to desired position
+                                       this.pasteItem(LnewItem, parent, parent, false, insertIndex);
+                               }
+                       }
+               },
 
+               pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
+                       // summary:
+                       //              Move or copy an item from one parent item to another.
+                       //              Used in drag & drop
+                       var store = this.store,
+                               parentAttr = this.childrenAttrs[0];     // name of "children" attr in parent item
 
+                       // remove child from source item, and record the attribute that child occurred in
+                       if(oldParentItem){
+                               dojo.forEach(this.childrenAttrs, function(attr){
+                                       if(store.containsValue(oldParentItem, attr, childItem)){
+                                               if(!bCopy){
+                                                       var values = dojo.filter(store.getValues(oldParentItem, attr), function(x){
+                                                               return x != childItem;
+                                                       });
+                                                       store.setValues(oldParentItem, attr, values);
+                                               }
+                                               parentAttr = attr;
+                                       }
+                               });
+                       }
 
+                       // modify target item's children attribute to include this item
+                       if(newParentItem){
+                               if(typeof insertIndex == "number"){
+                                       // call slice() to avoid modifying the original array, confusing the data store
+                                       var childItems = store.getValues(newParentItem, parentAttr).slice();
+                                       childItems.splice(insertIndex, 0, childItem);
+                                       store.setValues(newParentItem, parentAttr, childItems);
+                               }else{
+                                       store.setValues(newParentItem, parentAttr,
+                                               store.getValues(newParentItem, parentAttr).concat(childItem));
+                               }
+                       }
+               },
 
-dojo.declare("dijit.Toolbar",
-       [dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
-       {
-       // summary:
-       //              A Toolbar widget, used to hold things like `dijit.Editor` buttons
+               // =======================================================================
+               // Callbacks
 
-       templateString:
-               '<div class="dijit" waiRole="toolbar" tabIndex="${tabIndex}" dojoAttachPoint="containerNode">' +
-               //      '<table style="table-layout: fixed" class="dijitReset dijitToolbarTable">' + // factor out style
-               //              '<tr class="dijitReset" dojoAttachPoint="containerNode"></tr>'+
-               //      '</table>' +
-               '</div>',
+               onChange: function(/*dojo.data.Item*/ item){
+                       // summary:
+                       //              Callback whenever an item has changed, so that Tree
+                       //              can update the label, icon, etc.   Note that changes
+                       //              to an item's children or parent(s) will trigger an
+                       //              onChildrenChange() so you can ignore those changes here.
+                       // tags:
+                       //              callback
+               },
 
-       baseClass: "dijitToolbar",
+               onChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
+                       // summary:
+                       //              Callback to do notifications about new, updated, or deleted items.
+                       // tags:
+                       //              callback
+               },
 
-       postCreate: function(){
-               this.connectKeyNavHandlers(
-                       this.isLeftToRight() ? [dojo.keys.LEFT_ARROW] : [dojo.keys.RIGHT_ARROW],
-                       this.isLeftToRight() ? [dojo.keys.RIGHT_ARROW] : [dojo.keys.LEFT_ARROW]
-               );
-               this.inherited(arguments);
-       },
+               onDelete: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
+                       // summary:
+                       //              Callback when an item has been deleted.
+                       // description:
+                       //              Note that there will also be an onChildrenChange() callback for the parent
+                       //              of this item.
+                       // tags:
+                       //              callback
+               },
 
-       startup: function(){
-               if(this._started){ return; }
+               // =======================================================================
+               // Events from data store
 
-               this.startupKeyNavChildren();
+               onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
+                       // summary:
+                       //              Handler for when new items appear in the store, either from a drop operation
+                       //              or some other way.   Updates the tree view (if necessary).
+                       // description:
+                       //              If the new item is a child of an existing item,
+                       //              calls onChildrenChange() with the new list of children
+                       //              for that existing item.
+                       //
+                       // tags:
+                       //              extension
 
-               this.inherited(arguments);
-       }
-}
-);
+                       // We only care about the new item if it has a parent that corresponds to a TreeNode
+                       // we are currently displaying
+                       if(!parentInfo){
+                               return;
+                       }
 
-// For back-compat, remove for 2.0
+                       // Call onChildrenChange() on parent (ie, existing) item with new list of children
+                       // In the common case, the new list of children is simply parentInfo.newValue or
+                       // [ parentInfo.newValue ], although if items in the store has multiple
+                       // child attributes (see `childrenAttr`), then it's a superset of parentInfo.newValue,
+                       // so call getChildren() to be sure to get right answer.
+                       this.getChildren(parentInfo.item, dojo.hitch(this, function(children){
+                               this.onChildrenChange(parentInfo.item, children);
+                       }));
+               },
 
+               onDeleteItem: function(/*Object*/ item){
+                       // summary:
+                       //              Handler for delete notifications from underlying store
+                       this.onDelete(item);
+               },
 
-}
+               onSetItem: function(/* item */ item,
+                                               /* attribute-name-string */ attribute,
+                                               /* object | array */ oldValue,
+                                               /* object | array */ newValue){
+                       // summary:
+                       //              Updates the tree view according to changes in the data store.
+                       // description:
+                       //              Handles updates to an item's children by calling onChildrenChange(), and
+                       //              other updates to an item by calling onChange().
+                       //
+                       //              See `onNewItem` for more details on handling updates to an item's children.
+                       // tags:
+                       //              extension
 
-if(!dojo._hasResource["dojo.DeferredList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.DeferredList"] = true;
-dojo.provide("dojo.DeferredList");
-dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){
-       // summary:
-       //              Provides event handling for a group of Deferred objects.
-       // description:
-       //              DeferredList takes an array of existing deferreds and returns a new deferred of its own
-       //              this new deferred will typically have its callback fired when all of the deferreds in
-       //              the given list have fired their own deferreds.  The parameters `fireOnOneCallback` and
-       //              fireOnOneErrback, will fire before all the deferreds as appropriate
-       //
-       //      list:
-       //              The list of deferreds to be synchronizied with this DeferredList
-       //      fireOnOneCallback:
-       //              Will cause the DeferredLists callback to be fired as soon as any
-       //              of the deferreds in its list have been fired instead of waiting until
-       //              the entire list has finished
-       //      fireonOneErrback:
-       //              Will cause the errback to fire upon any of the deferreds errback
-       //      canceller:
-       //              A deferred canceller function, see dojo.Deferred
-       var resultList = [];
-       dojo.Deferred.call(this);
-       var self = this;
-       if(list.length === 0 && !fireOnOneCallback){
-               this.resolve([0, []]);
-       }
-       var finished = 0;
-       dojo.forEach(list, function(item, i){
-               item.then(function(result){
-                       if(fireOnOneCallback){
-                               self.resolve([i, result]);
-                       }else{
-                               addResult(true, result);
-                       }
-               },function(error){
-                       if(fireOnOneErrback){
-                               self.reject(error);
+                       if(dojo.indexOf(this.childrenAttrs, attribute) != -1){
+                               // item's children list changed
+                               this.getChildren(item, dojo.hitch(this, function(children){
+                                       // See comments in onNewItem() about calling getChildren()
+                                       this.onChildrenChange(item, children);
+                               }));
                        }else{
-                               addResult(false, error);
-                       }
-                       if(consumeErrors){
-                               return null;
-                       }
-                       throw error;
-               });
-               function addResult(succeeded, result){
-                       resultList[i] = [succeeded, result];
-                       finished++;
-                       if(finished === list.length){
-                               self.resolve(resultList);
+                               // item's label/icon/etc. changed.
+                               this.onChange(item);
                        }
-                       
                }
        });
-};
-dojo.DeferredList.prototype = new dojo.Deferred();
-
-dojo.DeferredList.prototype.gatherResults= function(deferredList){
-       // summary:     
-       //      Gathers the results of the deferreds for packaging
-       //      as the parameters to the Deferred Lists' callback
-
-       var d = new dojo.DeferredList(deferredList, false, true, false);
-       d.addCallback(function(results){
-               var ret = [];
-               dojo.forEach(results, function(result){
-                       ret.push(result[1]);
-               });
-               return ret;
-       });
-       return d;
-};
 
 }
 
-if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree.TreeStoreModel"] = true;
-dojo.provide("dijit.tree.TreeStoreModel");
-
-dojo.declare(
-               "dijit.tree.TreeStoreModel",
-               null,
-       {
-               // summary:
-               //              Implements dijit.Tree.model connecting to a store with a single
-               //              root item.  Any methods passed into the constructor will override
-               //              the ones defined here.
-
-               // store: dojo.data.Store
-               //              Underlying store
-               store: null,
-
-               // childrenAttrs: String[]
-               //              One or more attribute names (attributes in the dojo.data item) that specify that item's children
-               childrenAttrs: ["children"],
+if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.tree.ForestStoreModel"] = true;
+dojo.provide("dijit.tree.ForestStoreModel");
 
-               // newItemIdAttr: String
-               //              Name of attribute in the Object passed to newItem() that specifies the id.
-               //
-               //              If newItemIdAttr is set then it's used when newItem() is called to see if an
-               //              item with the same id already exists, and if so just links to the old item
-               //              (so that the old item ends up with two parents).
-               //
-               //              Setting this to null or "" will make every drop create a new item.
-               newItemIdAttr: "id",
 
-               // labelAttr: String
-               //              If specified, get label for tree node from this attribute, rather
-               //              than by calling store.getLabel()
-               labelAttr: "",
 
-               // root: [readonly] dojo.data.Item
-               //              Pointer to the root item (read only, not a parameter)
-               root: null,
+dojo.declare("dijit.tree.ForestStoreModel", dijit.tree.TreeStoreModel, {
+       // summary:
+       //              Interface between a dijit.Tree and a dojo.data store that doesn't have a root item,
+       //              a.k.a. a store that has multiple "top level" items.
+       //
+       // description
+       //              Use this class to wrap a dojo.data store, making all the items matching the specified query
+       //              appear as children of a fabricated "root item".  If no query is specified then all the
+       //              items returned by fetch() on the underlying store become children of the root item.
+       //              This class allows dijit.Tree to assume a single root item, even if the store doesn't have one.
+       //
+       //              When using this class the developer must override a number of methods according to their app and
+       //              data, including:
+       //                      - onNewRootItem
+       //                      - onAddToRoot
+       //                      - onLeaveRoot
+       //                      - onNewItem
+       //                      - onSetItem
 
-               // query: anything
-               //              Specifies datastore query to return the root item for the tree.
-               //              Must only return a single item.   Alternately can just pass in pointer
-               //              to root item.
-               // example:
-               //      |       {id:'ROOT'}
-               query: null,
+       // Parameters to constructor
 
-               // deferItemLoadingUntilExpand: Boolean
-               //              Setting this to true will cause the TreeStoreModel to defer calling loadItem on nodes
-               //              until they are expanded. This allows for lazying loading where only one
-               //              loadItem (and generally one network call, consequently) per expansion
-               //              (rather than one for each child).
-               //              This relies on partial loading of the children items; each children item of a
-               //              fully loaded item should contain the label and info about having children.
-               deferItemLoadingUntilExpand: false,
+       // rootId: String
+       //              ID of fabricated root item
+       rootId: "$root$",
 
-               constructor: function(/* Object */ args){
-                       // summary:
-                       //              Passed the arguments listed above (store, etc)
-                       // tags:
-                       //              private
+       // rootLabel: String
+       //              Label of fabricated root item
+       rootLabel: "ROOT",
 
-                       dojo.mixin(this, args);
+       // query: String
+       //              Specifies the set of children of the root item.
+       // example:
+       //      |       {type:'continent'}
+       query: null,
 
-                       this.connects = [];
+       // End of parameters to constructor
 
-                       var store = this.store;
-                       if(!store.getFeatures()['dojo.data.api.Identity']){
-                               throw new Error("dijit.Tree: store must support dojo.data.Identity");
-                       }
+       constructor: function(params){
+               // summary:
+               //              Sets up variables, etc.
+               // tags:
+               //              private
 
-                       // if the store supports Notification, subscribe to the notification events
-                       if(store.getFeatures()['dojo.data.api.Notification']){
-                               this.connects = this.connects.concat([
-                                       dojo.connect(store, "onNew", this, "onNewItem"),
-                                       dojo.connect(store, "onDelete", this, "onDeleteItem"),
-                                       dojo.connect(store, "onSet", this, "onSetItem")
-                               ]);
-                       }
-               },
+               // Make dummy root item
+               this.root = {
+                       store: this,
+                       root: true,
+                       id: params.rootId,
+                       label: params.rootLabel,
+                       children: params.rootChildren   // optional param
+               };
+       },
 
-               destroy: function(){
-                       dojo.forEach(this.connects, dojo.disconnect);
-                       // TODO: should cancel any in-progress processing of getRoot(), getChildren()
-               },
+       // =======================================================================
+       // Methods for traversing hierarchy
 
-               // =======================================================================
-               // Methods for traversing hierarchy
+       mayHaveChildren: function(/*dojo.data.Item*/ item){
+               // summary:
+               //              Tells if an item has or may have children.  Implementing logic here
+               //              avoids showing +/- expando icon for nodes that we know don't have children.
+               //              (For efficiency reasons we may not want to check if an element actually
+               //              has children until user clicks the expando node)
+               // tags:
+               //              extension
+               return item === this.root || this.inherited(arguments);
+       },
 
-               getRoot: function(onItem, onError){
-                       // summary:
-                       //              Calls onItem with the root item for the tree, possibly a fabricated item.
-                       //              Calls onError on error.
-                       if(this.root){
-                               onItem(this.root);
+       getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ callback, /*function*/ onError){
+               // summary:
+               //              Calls onComplete() with array of child items of given parent item, all loaded.
+               if(parentItem === this.root){
+                       if(this.root.children){
+                               // already loaded, just return
+                               callback(this.root.children);
                        }else{
                                this.store.fetch({
                                        query: this.query,
                                        onComplete: dojo.hitch(this, function(items){
-                                               if(items.length != 1){
-                                                       throw new Error(this.declaredClass + ": query " + dojo.toJson(this.query) + " returned " + items.length +
-                                                               " items, but must return exactly one item");
-                                               }
-                                               this.root = items[0];
-                                               onItem(this.root);
+                                               this.root.children = items;
+                                               callback(items);
                                        }),
                                        onError: onError
                                });
                        }
-               },
-
-               mayHaveChildren: function(/*dojo.data.Item*/ item){
-                       // summary:
-                       //              Tells if an item has or may have children.  Implementing logic here
-                       //              avoids showing +/- expando icon for nodes that we know don't have children.
-                       //              (For efficiency reasons we may not want to check if an element actually
-                       //              has children until user clicks the expando node)
-                       return dojo.some(this.childrenAttrs, function(attr){
-                               return this.store.hasAttribute(item, attr);
-                       }, this);
-               },
+               }else{
+                       this.inherited(arguments);
+               }
+       },
 
-               getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete, /*function*/ onError){
-                       // summary:
-                       //              Calls onComplete() with array of child items of given parent item, all loaded.
+       // =======================================================================
+       // Inspecting items
 
-                       var store = this.store;
-                       if(!store.isItemLoaded(parentItem)){
-                               // The parent is not loaded yet, we must be in deferItemLoadingUntilExpand
-                               // mode, so we will load it and just return the children (without loading each
-                               // child item)
-                               var getChildren = dojo.hitch(this, arguments.callee);
-                               store.loadItem({
-                                       item: parentItem,
-                                       onItem: function(parentItem){
-                                               getChildren(parentItem, onComplete, onError);
-                                       },
-                                       onError: onError
-                               });
-                               return;
-                       }
-                       // get children of specified item
-                       var childItems = [];
-                       for(var i=0; i<this.childrenAttrs.length; i++){
-                               var vals = store.getValues(parentItem, this.childrenAttrs[i]);
-                               childItems = childItems.concat(vals);
-                       }
+       isItem: function(/* anything */ something){
+               return (something === this.root) ? true : this.inherited(arguments);
+       },
 
-                       // count how many items need to be loaded
-                       var _waitCount = 0;
-                       if(!this.deferItemLoadingUntilExpand){
-                               dojo.forEach(childItems, function(item){ if(!store.isItemLoaded(item)){ _waitCount++; } });
+       fetchItemByIdentity: function(/* object */ keywordArgs){
+               if(keywordArgs.identity == this.root.id){
+                       var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
+                       if(keywordArgs.onItem){
+                               keywordArgs.onItem.call(scope, this.root);
                        }
+               }else{
+                       this.inherited(arguments);
+               }
+       },
 
-                       if(_waitCount == 0){
-                               // all items are already loaded (or we aren't loading them).  proceed...
-                               onComplete(childItems);
-                       }else{
-                               // still waiting for some or all of the items to load
-                               dojo.forEach(childItems, function(item, idx){
-                                       if(!store.isItemLoaded(item)){
-                                               store.loadItem({
-                                                       item: item,
-                                                       onItem: function(item){
-                                                               childItems[idx] = item;
-                                                               if(--_waitCount == 0){
-                                                                       // all nodes have been loaded, send them to the tree
-                                                                       onComplete(childItems);
-                                                               }
-                                                       },
-                                                       onError: onError
-                                               });
-                                       }
-                               });
-                       }
-               },
+       getIdentity: function(/* item */ item){
+               return (item === this.root) ? this.root.id : this.inherited(arguments);
+       },
 
-               // =======================================================================
-               // Inspecting items
+       getLabel: function(/* item */ item){
+               return  (item === this.root) ? this.root.label : this.inherited(arguments);
+       },
 
-               isItem: function(/* anything */ something){
-                       return this.store.isItem(something);    // Boolean
-               },
+       // =======================================================================
+       // Write interface
 
-               fetchItemByIdentity: function(/* object */ keywordArgs){
-                       this.store.fetchItemByIdentity(keywordArgs);
-               },
+       newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
+               // summary:
+               //              Creates a new item.   See dojo.data.api.Write for details on args.
+               //              Used in drag & drop when item from external source dropped onto tree.
+               if(parent === this.root){
+                       this.onNewRootItem(args);
+                       return this.store.newItem(args);
+               }else{
+                       return this.inherited(arguments);
+               }
+       },
 
-               getIdentity: function(/* item */ item){
-                       return this.store.getIdentity(item);    // Object
-               },
+       onNewRootItem: function(args){
+               // summary:
+               //              User can override this method to modify a new element that's being
+               //              added to the root of the tree, for example to add a flag like root=true
+       },
 
-               getLabel: function(/*dojo.data.Item*/ item){
-                       // summary:
-                       //              Get the label for an item
-                       if(this.labelAttr){
-                               return this.store.getValue(item,this.labelAttr);        // String
-                       }else{
-                               return this.store.getLabel(item);       // String
+       pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
+               // summary:
+               //              Move or copy an item from one parent item to another.
+               //              Used in drag & drop
+               if(oldParentItem === this.root){
+                       if(!bCopy){
+                               // It's onLeaveRoot()'s responsibility to modify the item so it no longer matches
+                               // this.query... thus triggering an onChildrenChange() event to notify the Tree
+                               // that this element is no longer a child of the root node
+                               this.onLeaveRoot(childItem);
                        }
-               },
-
-               // =======================================================================
-               // Write interface
-
-               newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
-                       // summary:
-                       //              Creates a new item.   See `dojo.data.api.Write` for details on args.
-                       //              Used in drag & drop when item from external source dropped onto tree.
-                       // description:
-                       //              Developers will need to override this method if new items get added
-                       //              to parents with multiple children attributes, in order to define which
-                       //              children attribute points to the new item.
-
-                       var pInfo = {parent: parent, attribute: this.childrenAttrs[0], insertIndex: insertIndex};
+               }
+               dijit.tree.TreeStoreModel.prototype.pasteItem.call(this, childItem,
+                       oldParentItem === this.root ? null : oldParentItem,
+                       newParentItem === this.root ? null : newParentItem,
+                       bCopy,
+                       insertIndex
+               );
+               if(newParentItem === this.root){
+                       // It's onAddToRoot()'s responsibility to modify the item so it matches
+                       // this.query... thus triggering an onChildrenChange() event to notify the Tree
+                       // that this element is now a child of the root node
+                       this.onAddToRoot(childItem);
+               }
+       },
 
-                       if(this.newItemIdAttr && args[this.newItemIdAttr]){
-                               // Maybe there's already a corresponding item in the store; if so, reuse it.
-                               this.fetchItemByIdentity({identity: args[this.newItemIdAttr], scope: this, onItem: function(item){
-                                       if(item){
-                                               // There's already a matching item in store, use it
-                                               this.pasteItem(item, null, parent, true, insertIndex);
-                                       }else{
-                                               // Create new item in the tree, based on the drag source.
-                                               this.store.newItem(args, pInfo);
-                                       }
-                               }});
-                       }else{
-                               // [as far as we know] there is no id so we must assume this is a new item
-                               this.store.newItem(args, pInfo);
-                       }
-               },
+       // =======================================================================
+       // Handling for top level children
 
-               pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
-                       // summary:
-                       //              Move or copy an item from one parent item to another.
-                       //              Used in drag & drop
-                       var store = this.store,
-                               parentAttr = this.childrenAttrs[0];     // name of "children" attr in parent item
+       onAddToRoot: function(/* item */ item){
+               // summary:
+               //              Called when item added to root of tree; user must override this method
+               //              to modify the item so that it matches the query for top level items
+               // example:
+               //      |       store.setValue(item, "root", true);
+               // tags:
+               //              extension
+               console.log(this, ": item ", item, " added to root");
+       },
 
-                       // remove child from source item, and record the attribute that child occurred in
-                       if(oldParentItem){
-                               dojo.forEach(this.childrenAttrs, function(attr){
-                                       if(store.containsValue(oldParentItem, attr, childItem)){
-                                               if(!bCopy){
-                                                       var values = dojo.filter(store.getValues(oldParentItem, attr), function(x){
-                                                               return x != childItem;
-                                                       });
-                                                       store.setValues(oldParentItem, attr, values);
-                                               }
-                                               parentAttr = attr;
-                                       }
-                               });
-                       }
+       onLeaveRoot: function(/* item */ item){
+               // summary:
+               //              Called when item removed from root of tree; user must override this method
+               //              to modify the item so it doesn't match the query for top level items
+               // example:
+               //      |       store.unsetAttribute(item, "root");
+               // tags:
+               //              extension
+               console.log(this, ": item ", item, " removed from root");
+       },
 
-                       // modify target item's children attribute to include this item
-                       if(newParentItem){
-                               if(typeof insertIndex == "number"){
-                                       // call slice() to avoid modifying the original array, confusing the data store
-                                       var childItems = store.getValues(newParentItem, parentAttr).slice();
-                                       childItems.splice(insertIndex, 0, childItem);
-                                       store.setValues(newParentItem, parentAttr, childItems);
-                               }else{
-                                       store.setValues(newParentItem, parentAttr,
-                                               store.getValues(newParentItem, parentAttr).concat(childItem));
-                               }
-                       }
-               },
+       // =======================================================================
+       // Events from data store
 
-               // =======================================================================
-               // Callbacks
+       _requeryTop: function(){
+               // reruns the query for the children of the root node,
+               // sending out an onSet notification if those children have changed
+               var oldChildren = this.root.children || [];
+               this.store.fetch({
+                       query: this.query,
+                       onComplete: dojo.hitch(this, function(newChildren){
+                               this.root.children = newChildren;
 
-               onChange: function(/*dojo.data.Item*/ item){
-                       // summary:
-                       //              Callback whenever an item has changed, so that Tree
-                       //              can update the label, icon, etc.   Note that changes
-                       //              to an item's children or parent(s) will trigger an
-                       //              onChildrenChange() so you can ignore those changes here.
-                       // tags:
-                       //              callback
-               },
+                               // If the list of children or the order of children has changed...
+                               if(oldChildren.length != newChildren.length ||
+                                       dojo.some(oldChildren, function(item, idx){ return newChildren[idx] != item;})){
+                                       this.onChildrenChange(this.root, newChildren);
+                               }
+                       })
+               });
+       },
 
-               onChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
-                       // summary:
-                       //              Callback to do notifications about new, updated, or deleted items.
-                       // tags:
-                       //              callback
-               },
+       onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
+               // summary:
+               //              Handler for when new items appear in the store.  Developers should override this
+               //              method to be more efficient based on their app/data.
+               // description:
+               //              Note that the default implementation requeries the top level items every time
+               //              a new item is created, since any new item could be a top level item (even in
+               //              addition to being a child of another item, since items can have multiple parents).
+               //
+               //              If developers can detect which items are possible top level items (based on the item and the
+               //              parentInfo parameters), they should override this method to only call _requeryTop() for top
+               //              level items.  Often all top level items have parentInfo==null, but
+               //              that will depend on which store you use and what your data is like.
+               // tags:
+               //              extension
+               this._requeryTop();
 
-               onDelete: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
-                       // summary:
-                       //              Callback when an item has been deleted.
-                       // description:
-                       //              Note that there will also be an onChildrenChange() callback for the parent
-                       //              of this item.
-                       // tags:
-                       //              callback
-               },
+               this.inherited(arguments);
+       },
 
-               // =======================================================================
-               // Events from data store
+       onDeleteItem: function(/*Object*/ item){
+               // summary:
+               //              Handler for delete notifications from underlying store
 
-               onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
-                       // summary:
-                       //              Handler for when new items appear in the store, either from a drop operation
-                       //              or some other way.   Updates the tree view (if necessary).
-                       // description:
-                       //              If the new item is a child of an existing item,
-                       //              calls onChildrenChange() with the new list of children
-                       //              for that existing item.
-                       //
-                       // tags:
-                       //              extension
+               // check if this was a child of root, and if so send notification that root's children
+               // have changed
+               if(dojo.indexOf(this.root.children, item) != -1){
+                       this._requeryTop();
+               }
 
-                       // We only care about the new item if it has a parent that corresponds to a TreeNode
-                       // we are currently displaying
-                       if(!parentInfo){
-                               return;
-                       }
+               this.inherited(arguments);
+       },
 
-                       // Call onChildrenChange() on parent (ie, existing) item with new list of children
-                       // In the common case, the new list of children is simply parentInfo.newValue or
-                       // [ parentInfo.newValue ], although if items in the store has multiple
-                       // child attributes (see `childrenAttr`), then it's a superset of parentInfo.newValue,
-                       // so call getChildren() to be sure to get right answer.
-                       this.getChildren(parentInfo.item, dojo.hitch(this, function(children){
-                               this.onChildrenChange(parentInfo.item, children);
-                       }));
-               },
+       onSetItem: function(/* item */ item,
+                                       /* attribute-name-string */ attribute,
+                                       /* object | array */ oldValue,
+                                       /* object | array */ newValue){
+               // summary:
+               //              Updates the tree view according to changes to an item in the data store.
+               //              Developers should override this method to be more efficient based on their app/data.
+               // description:
+               //              Handles updates to an item's children by calling onChildrenChange(), and
+               //              other updates to an item by calling onChange().
+               //
+               //              Also, any change to any item re-executes the query for the tree's top-level items,
+               //              since this modified item may have started/stopped matching the query for top level items.
+               //
+               //              If possible, developers should override this function to only call _requeryTop() when
+               //              the change to the item has caused it to stop/start being a top level item in the tree.
+               // tags:
+               //              extension
 
-               onDeleteItem: function(/*Object*/ item){
-                       // summary:
-                       //              Handler for delete notifications from underlying store
-                       this.onDelete(item);
-               },
+               this._requeryTop();
+               this.inherited(arguments);
+       }
 
-               onSetItem: function(/* item */ item,
-                                               /* attribute-name-string */ attribute,
-                                               /* object | array */ oldValue,
-                                               /* object | array */ newValue){
-                       // summary:
-                       //              Updates the tree view according to changes in the data store.
-                       // description:
-                       //              Handles updates to an item's children by calling onChildrenChange(), and
-                       //              other updates to an item by calling onChange().
-                       //
-                       //              See `onNewItem` for more details on handling updates to an item's children.
-                       // tags:
-                       //              extension
+});
 
-                       if(dojo.indexOf(this.childrenAttrs, attribute) != -1){
-                               // item's children list changed
-                               this.getChildren(item, dojo.hitch(this, function(children){
-                                       // See comments in onNewItem() about calling getChildren()
-                                       this.onChildrenChange(item, children);
-                               }));
-                       }else{
-                               // item's label/icon/etc. changed.
-                               this.onChange(item);
-                       }
-               }
-       });
+}
 
+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");
 
 
-}
 
-if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree.ForestStoreModel"] = true;
-dojo.provide("dijit.tree.ForestStoreModel");
 
+/*
+       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}
+       },
 
-dojo.declare("dijit.tree.ForestStoreModel", dijit.tree.TreeStoreModel, {
-       // summary:
-       //              Interface between Tree and a dojo.store that doesn't have a root item,
-       //              i.e. has multiple "top level" items.
-       //
-       // description
-       //              Use this class to wrap a dojo.store, making all the items matching the specified query
-       //              appear as children of a fabricated "root item".  If no query is specified then all the
-       //              items returned by fetch() on the underlying store become children of the root item.
-       //              It allows dijit.Tree to assume a single root item, even if the store doesn't have one.
+       // skipForm: Boolean
+       //              don't start the drag operation, if clicked on form elements
+       skipForm: false,
 
-       // Parameters to constructor
+       // 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,
 
-       // rootId: String
-       //              ID of fabricated root item
-       rootId: "$root$",
+       // _skipStartup: Boolean
+       //              skip startup(), which collects children, for deferred initialization
+       //              (this is used in the markup mode)
+       _skipStartup: false
+});
 
-       // rootLabel: String
-       //              Label of fabricated root item
-       rootLabel: "ROOT",
+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;
+}
+=====*/
 
-       // query: String
-       //              Specifies the set of children of the root item.
-       // example:
-       //      |       {type:'continent'}
-       query: null,
+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;
 
-       // End of parameters to constructor
+               // states
+               this.containerState = "";
+               dojo.addClass(this.node, "dojoDndContainer");
+               
+               // mark up children
+               if(!(params && params._skipStartup)){
+                       this.startup();
+               }
 
-       constructor: function(params){
+               // 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:
-               //              Sets up variables, etc.
-               // tags:
-               //              private
-
-               // Make dummy root item
-               this.root = {
-                       store: this,
-                       root: true,
-                       id: params.rootId,
-                       label: params.rootLabel,
-                       children: params.rootChildren   // optional param
-               };
+               //              creator function, dummy at the moment
        },
-
-       // =======================================================================
-       // Methods for traversing hierarchy
-
-       mayHaveChildren: function(/*dojo.data.Item*/ item){
+       
+       // abstract access to the map
+       getItem: function(/*String*/ key){
                // summary:
-               //              Tells if an item has or may have children.  Implementing logic here
-               //              avoids showing +/- expando icon for nodes that we know don't have children.
-               //              (For efficiency reasons we may not want to check if an element actually
-               //              has children until user clicks the expando node)
-               // tags:
-               //              extension
-               return item === this.root || this.inherited(arguments);
+               //              returns a data item by its key (id)
+               return this.map[key];   // dojo.dnd.Item
        },
-
-       getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ callback, /*function*/ onError){
+       setItem: function(/*String*/ key, /*dojo.dnd.Item*/ data){
                // summary:
-               //              Calls onComplete() with array of child items of given parent item, all loaded.
-               if(parentItem === this.root){
-                       if(this.root.children){
-                               // already loaded, just return
-                               callback(this.root.children);
-                       }else{
-                               this.store.fetch({
-                                       query: this.query,
-                                       onComplete: dojo.hitch(this, function(items){
-                                               this.root.children = items;
-                                               callback(items);
-                                       }),
-                                       onError: onError
-                               });
-                       }
-               }else{
-                       this.inherited(arguments);
-               }
+               //              associates a data item with its key (id)
+               this.map[key] = data;
        },
-
-       // =======================================================================
-       // Inspecting items
-
-       isItem: function(/* anything */ something){
-               return (something === this.root) ? true : this.inherited(arguments);
+       delItem: function(/*String*/ key){
+               // summary:
+               //              removes a data item from the map by its key (id)
+               delete this.map[key];
        },
-
-       fetchItemByIdentity: function(/* object */ keywordArgs){
-               if(keywordArgs.identity == this.root.id){
-                       var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
-                       if(keywordArgs.onItem){
-                               keywordArgs.onItem.call(scope, this.root);
-                       }
-               }else{
-                       this.inherited(arguments);
+       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
        },
-
-       getIdentity: function(/* item */ item){
-               return (item === this.root) ? this.root.id : this.inherited(arguments);
-       },
-
-       getLabel: function(/* item */ item){
-               return  (item === this.root) ? this.root.label : this.inherited(arguments);
+       clearItems: function(){
+               // summary:
+               //              removes all data items from the map
+               this.map = {};
        },
-
-       // =======================================================================
-       // Write interface
-
-       newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
+       
+       // methods
+       getAllNodes: function(){
                // summary:
-               //              Creates a new item.   See dojo.data.api.Write for details on args.
-               //              Used in drag & drop when item from external source dropped onto tree.
-               if(parent === this.root){
-                       this.onNewRootItem(args);
-                       return this.store.newItem(args);
-               }else{
-                       return this.inherited(arguments);
-               }
+               //              returns a list (an array) of all valid child nodes
+               return dojo.query("> .dojoDndItem", this.parent);       // NodeList
        },
-
-       onNewRootItem: function(args){
+       sync: function(){
                // summary:
-               //              User can override this method to modify a new element that's being
-               //              added to the root of the tree, for example to add a flag like root=true
+               //              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
        },
-
-       pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
+       insertNodes: function(data, before, anchor){
                // summary:
-               //              Move or copy an item from one parent item to another.
-               //              Used in drag & drop
-               if(oldParentItem === this.root){
-                       if(!bCopy){
-                               // It's onLeaveRoot()'s responsibility to modify the item so it no longer matches
-                               // this.query... thus triggering an onChildrenChange() event to notify the Tree
-                               // that this element is no longer a child of the root node
-                               this.onLeaveRoot(childItem);
+               //              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;
                        }
                }
-               dijit.tree.TreeStoreModel.prototype.pasteItem.call(this, childItem,
-                       oldParentItem === this.root ? null : oldParentItem,
-                       newParentItem === this.root ? null : newParentItem,
-                       bCopy,
-                       insertIndex
-               );
-               if(newParentItem === this.root){
-                       // It's onAddToRoot()'s responsibility to modify the item so it matches
-                       // this.query... thus triggering an onChildrenChange() event to notify the Tree
-                       // that this element is now a child of the root node
-                       this.onAddToRoot(childItem);
+               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
        },
-
-       // =======================================================================
-       // Handling for top level children
-
-       onAddToRoot: function(/* item */ item){
-               // summary:
-               //              Called when item added to root of tree; user must override this method
-               //              to modify the item so that it matches the query for top level items
-               // example:
-               //      |       store.setValue(item, "root", true);
-               // tags:
-               //              extension
-               console.log(this, ": item ", item, " added to root");
-       },
-
-       onLeaveRoot: function(/* item */ item){
+       destroy: function(){
                // summary:
-               //              Called when item removed from root of tree; user must override this method
-               //              to modify the item so it doesn't match the query for top level items
-               // example:
-               //      |       store.unsetAttribute(item, "root");
-               // tags:
-               //              extension
-               console.log(this, ": item ", item, " removed from root");
-       },
-
-       // =======================================================================
-       // Events from data store
-
-       _requeryTop: function(){
-               // reruns the query for the children of the root node,
-               // sending out an onSet notification if those children have changed
-               var oldChildren = this.root.children || [];
-               this.store.fetch({
-                       query: this.query,
-                       onComplete: dojo.hitch(this, function(newChildren){
-                               this.root.children = newChildren;
-
-                               // If the list of children or the order of children has changed...
-                               if(oldChildren.length != newChildren.length ||
-                                       dojo.some(oldChildren, function(item, idx){ return newChildren[idx] != item;})){
-                                       this.onChildrenChange(this.root, newChildren);
-                               }
-                       })
-               });
+               //              prepares this object to be garbage-collected
+               dojo.forEach(this.events, dojo.disconnect);
+               this.clearItems();
+               this.node = this.parent = this.current = null;
        },
 
-       onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
-               // summary:
-               //              Handler for when new items appear in the store.  Developers should override this
-               //              method to be more efficient based on their app/data.
-               // description:
-               //              Note that the default implementation requeries the top level items every time
-               //              a new item is created, since any new item could be a top level item (even in
-               //              addition to being a child of another item, since items can have multiple parents).
-               //
-               //              Developers can override this function to do something more efficient if they can
-               //              detect which items are possible top level items (based on the item and the
-               //              parentInfo parameters).  Often all top level items have parentInfo==null, but
-               //              that will depend on which store you use and what your data is like.
-               // tags:
-               //              extension
-               this._requeryTop();
-
-               this.inherited(arguments);
+       // markup methods
+       markupFactory: function(params, node){
+               params._skipStartup = true;
+               return new dojo.dnd.Container(node, params);
        },
-
-       onDeleteItem: function(/*Object*/ item){
+       startup: function(){
                // summary:
-               //              Handler for delete notifications from underlying store
-
-               // check if this was a child of root, and if so send notification that root's children
-               // have changed
-               if(dojo.indexOf(this.root.children, item) != -1){
-                       this._requeryTop();
+               //              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);
 
-               this.inherited(arguments);
-       }
-});
-
-
-
-}
-
-if(!dojo._hasResource["dijit.Tree"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Tree"] = true;
-dojo.provide("dijit.Tree");
-
-
-
-
-
-
-
-
-
-
-
-dojo.declare(
-       "dijit._TreeNode",
-       [dijit._Widget, dijit._Templated, dijit._Container, dijit._Contained, dijit._CssStateMixin],
-{
-       // summary:
-       //              Single node within a tree.   This class is used internally
-       //              by Tree and should not be accessed directly.
-       // tags:
-       //              private
-
-       // item: dojo.data.Item
-       //              the dojo.data entry this tree represents
-       item: null,
-
-       // isTreeNode: [protected] Boolean
-       //              Indicates that this is a TreeNode.   Used by `dijit.Tree` only,
-       //              should not be accessed directly.
-       isTreeNode: true,
-
-       // label: String
-       //              Text of this tree node
-       label: "",
-
-       // isExpandable: [private] Boolean
-       //              This node has children, so show the expando node (+ sign)
-       isExpandable: null,
-
-       // isExpanded: [readonly] Boolean
-       //              This node is currently expanded (ie, opened)
-       isExpanded: false,
-
-       // state: [private] String
-       //              Dynamic loading-related stuff.
-       //              When an empty folder node appears, it is "UNCHECKED" first,
-       //              then after dojo.data query it becomes "LOADING" and, finally "LOADED"
-       state: "UNCHECKED",
-
-       templateString: dojo.cache("dijit", "templates/TreeNode.html", "<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),
-
-       baseClass: "dijitTreeNode",
-
-       // For hover effect for tree node, and focus effect for label
-       cssStateNodes: {
-               rowNode: "dijitTreeRow",
-               labelNode: "dijitTreeLabel"
+               // process specially marked children
+               this.sync();
        },
 
-       attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
-               label: {node: "labelNode", type: "innerText"},
-               tooltip: {node: "rowNode", type: "attribute", attribute: "title"}
-       }),
-
-       postCreate: function(){
-               this.inherited(arguments);
-
-               // set expand icon for leaf
-               this._setExpando();
-
-               // set icon and label class based on item
-               this._updateItemClasses(this.item);
-
-               if(this.isExpandable){
-                       dijit.setWaiState(this.labelNode, "expanded", this.isExpanded);
+       // 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;
        },
-
-       _setIndentAttr: function(indent){
+       onMouseOut: function(e){
                // summary:
-               //              Tell this node how many levels it should be indented
-               // description:
-               //              0 for top level nodes, 1 for their children, 2 for their
-               //              grandchildren, etc.
-               this.indent = indent;
-
-               // Math.max() is to prevent negative padding on hidden root node (when indent == -1)
-               var pixels = (Math.max(indent, 0) * this.tree._nodePixelIndent) + "px";
-
-               dojo.style(this.domNode, "backgroundPosition",  pixels + " 0px");
-               dojo.style(this.rowNode, this.isLeftToRight() ? "paddingLeft" : "paddingRight", pixels);
-
-               dojo.forEach(this.getChildren(), function(child){
-                       child.set("indent", indent+1);
-               });
+               //              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();
        },
-
-       markProcessing: function(){
+       onSelectStart: function(e){
                // summary:
-               //              Visually denote that tree is loading data, etc.
-               // tags:
-               //              private
-               this.state = "LOADING";
-               this._setExpando(true);
+               //              event processor for onselectevent and ondragevent
+               // e: Event
+               //              mouse event
+               if(!this.skipForm || !dojo.dnd.isFormElement(e)){
+                       dojo.stopEvent(e);
+               }
        },
-
-       unmarkProcessing: function(){
+       
+       // utilities
+       onOverEvent: function(){
                // summary:
-               //              Clear markup from markProcessing() call
-               // tags:
-               //              private
-               this._setExpando(false);
+               //              this function is called once, when mouse is over our container
        },
-
-       _updateItemClasses: function(item){
+       onOutEvent: function(){
                // summary:
-               //              Set appropriate CSS classes for icon and label dom node
-               //              (used to allow for item updates to change respective CSS)
-               // tags:
-               //              private
-               var tree = this.tree, model = tree.model;
-               if(tree._v10Compat && item === model.root){
-                       // For back-compat with 1.0, need to use null to specify root item (TODO: remove in 2.0)
-                       item = null;
-               }
-               this._applyClassAndStyle(item, "icon", "Icon");
-               this._applyClassAndStyle(item, "label", "Label");
-               this._applyClassAndStyle(item, "row", "Row");
+               //              this function is called once, when mouse is out of our container
        },
-
-       _applyClassAndStyle: function(item, lower, upper){
-               // summary:
-               //              Set the appropriate CSS classes and styles for labels, icons and rows.
-               //
-               // item:
-               //              The data item.
-               //
-               // lower:
-               //              The lower case attribute to use, e.g. 'icon', 'label' or 'row'.
-               //
-               // upper:
-               //              The upper case attribute to use, e.g. 'Icon', 'Label' or 'Row'.
-               //
-               // tags:
-               //              private
-
-               var clsName = "_" + lower + "Class";
-               var nodeName = lower + "Node";
-
-               if(this[clsName]){
-                       dojo.removeClass(this[nodeName], this[clsName]);
-               }
-               this[clsName] = this.tree["get" + upper + "Class"](item, this.isExpanded);
-               if(this[clsName]){
-                       dojo.addClass(this[nodeName], this[clsName]);
-               }
-               dojo.style(this[nodeName], this.tree["get" + upper + "Style"](item, this.isExpanded) || {});
-       },
-
-       _updateLayout: function(){
+       _changeState: function(type, newState){
                // summary:
-               //              Set appropriate CSS classes for this.domNode
-               // tags:
-               //              private
-               var parent = this.getParent();
-               if(!parent || parent.rowNode.style.display == "none"){
-                       /* if we are hiding the root node then make every first level child look like a root node */
-                       dojo.addClass(this.domNode, "dijitTreeIsRoot");
-               }else{
-                       dojo.toggleClass(this.domNode, "dijitTreeIsLast", !this.getNextSibling());
-               }
+               //              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.replaceClass(this.node, prefix + newState, prefix + this[state]);
+               this[state] = newState;
        },
-
-       _setExpando: function(/*Boolean*/ processing){
+       _addItemClass: function(node, type){
                // summary:
-               //              Set the right image for the expando node
-               // tags:
-               //              private
-
-               var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened",
-                                               "dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"],
-                       _a11yStates = ["*","-","+","*"],
-                       idx = processing ? 0 : (this.isExpandable ?     (this.isExpanded ? 1 : 2) : 3);
-
-               // apply the appropriate class to the expando node
-               dojo.removeClass(this.expandoNode, styles);
-               dojo.addClass(this.expandoNode, styles[idx]);
-
-               // provide a non-image based indicator for images-off mode
-               this.expandoNodeText.innerHTML = _a11yStates[idx];
-
+               //              adds a class with prefix "dojoDndItem"
+               // node: Node
+               //              a node
+               // type: String
+               //              a variable suffix for a class name
+               dojo.addClass(node, "dojoDndItem" + type);
        },
-
-       expand: function(){
+       _removeItemClass: function(node, type){
                // summary:
-               //              Show my children
-               // returns:
-               //              Deferred that fires when expansion is complete
-
-               // If there's already an expand in progress or we are already expanded, just return
-               if(this._expandDeferred){
-                       return this._expandDeferred;            // dojo.Deferred
-               }
-
-               // cancel in progress collapse operation
-               this._wipeOut && this._wipeOut.stop();
-
-               // All the state information for when a node is expanded, maybe this should be
-               // set when the animation completes instead
-               this.isExpanded = true;
-               dijit.setWaiState(this.labelNode, "expanded", "true");
-               dijit.setWaiRole(this.containerNode, "group");
-               dojo.addClass(this.contentNode,'dijitTreeContentExpanded');
-               this._setExpando();
-               this._updateItemClasses(this.item);
-               if(this == this.tree.rootNode){
-                       dijit.setWaiState(this.tree.domNode, "expanded", "true");
-               }
-
-               var def,
-                       wipeIn = dojo.fx.wipeIn({
-                               node: this.containerNode, duration: dijit.defaultDuration,
-                               onEnd: function(){
-                                       def.callback(true);
-                               }
-                       });
-
-               // Deferred that fires when expand is complete
-               def = (this._expandDeferred = new dojo.Deferred(function(){
-                       // Canceller
-                       wipeIn.stop();
-               }));
-
-               wipeIn.play();
-
-               return def;             // dojo.Deferred
+               //              removes a class with prefix "dojoDndItem"
+               // node: Node
+               //              a node
+               // type: String
+               //              a variable suffix for a class name
+               dojo.removeClass(node, "dojoDndItem" + type);
        },
-
-       collapse: function(){
+       _getChildByEvent: function(e){
                // summary:
-               //              Collapse this node (if it's expanded)
-
-               if(!this.isExpanded){ return; }
-
-               // cancel in progress expand operation
-               if(this._expandDeferred){
-                       this._expandDeferred.cancel();
-                       delete this._expandDeferred;
-               }
-
-               this.isExpanded = false;
-               dijit.setWaiState(this.labelNode, "expanded", "false");
-               if(this == this.tree.rootNode){
-                       dijit.setWaiState(this.tree.domNode, "expanded", "false");
-               }
-               dojo.removeClass(this.contentNode,'dijitTreeContentExpanded');
-               this._setExpando();
-               this._updateItemClasses(this.item);
-
-               if(!this._wipeOut){
-                       this._wipeOut = dojo.fx.wipeOut({
-                               node: this.containerNode, duration: dijit.defaultDuration
-                       });
+               //              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; }
+                       }
                }
-               this._wipeOut.play();
+               return null;
        },
-
-       // indent: Integer
-       //              Levels from this node to the root node
-       indent: 0,
-
-       setChildItems: function(/* Object[] */ items){
+       _normalizedCreator: function(/*dojo.dnd.Item*/ item, /*String*/ hint){
                // summary:
-               //              Sets the child items of this node, removing/adding nodes
-               //              from current children to match specified items[] array.
-               //              Also, if this.persist == true, expands any children that were previously
-               //              opened.
-               // returns:
-               //              Deferred object that fires after all previously opened children
-               //              have been expanded again (or fires instantly if there are no such children).
-
-               var tree = this.tree,
-                       model = tree.model,
-                       defs = [];      // list of deferreds that need to fire before I am complete
-
-
-               // Orphan all my existing children.
-               // If items contains some of the same items as before then we will reattach them.
-               // Don't call this.removeChild() because that will collapse the tree etc.
-               dojo.forEach(this.getChildren(), function(child){
-                       dijit._Container.prototype.removeChild.call(this, child);
-               }, this);
+               //              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;
+       }
+});
 
-               this.state = "LOADED";
+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
+       };
+};
 
-               if(items && items.length > 0){
-                       this.isExpandable = true;
+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
+};
 
-                       // Create _TreeNode widget for each specified tree node, unless one already
-                       // exists and isn't being used (presumably it's from a DnD move and was recently
-                       // released
-                       dojo.forEach(items, function(item){
-                               var id = model.getIdentity(item),
-                                       existingNodes = tree._itemNodesMap[id],
-                                       node;
-                               if(existingNodes){
-                                       for(var i=0;i<existingNodes.length;i++){
-                                               if(existingNodes[i] && !existingNodes[i].getParent()){
-                                                       node = existingNodes[i];
-                                                       node.set('indent', this.indent+1);
-                                                       break;
-                                               }
-                                       }
-                               }
-                               if(!node){
-                                       node = this.tree._createTreeNode({
-                                                       item: item,
-                                                       tree: tree,
-                                                       isExpandable: model.mayHaveChildren(item),
-                                                       label: tree.getLabel(item),
-                                                       tooltip: tree.getTooltip(item),
-                                                       dir: tree.dir,
-                                                       lang: tree.lang,
-                                                       indent: this.indent + 1
-                                               });
-                                       if(existingNodes){
-                                               existingNodes.push(node);
-                                       }else{
-                                               tree._itemNodesMap[id] = [node];
-                                       }
-                               }
-                               this.addChild(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
+};
 
-                               // If node was previously opened then open it again now (this may trigger
-                               // more data store accesses, recursively)
-                               if(this.tree.autoExpand || this.tree._state(item)){
-                                       defs.push(tree._expandNode(node));
-                               }
-                       }, this);
+// 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"};
 
-                       // note that updateLayout() needs to be called on each child after
-                       // _all_ the children exist
-                       dojo.forEach(this.getChildren(), function(child, idx){
-                               child._updateLayout();
-                       });
+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{
-                       this.isExpandable=false;
+                       // 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));
                }
+               if(!n.id){
+                       n.id = dojo.dnd.getUniqueId();
+               }
+               return {node: n, data: data, type: type};
+       };
+};
+
+}
 
-               if(this._setExpando){
-                       // change expando to/from dot or + icon, as appropriate
-                       this._setExpando(false);
-               }
+if(!dojo._hasResource["dijit.tree._dndContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.tree._dndContainer"] = true;
+dojo.provide("dijit.tree._dndContainer");
 
-               // Set leaf icon or folder icon, as appropriate
-               this._updateItemClasses(this.item);
 
-               // On initial tree show, make the selected TreeNode as either the root node of the tree,
-               // or the first child, if the root node is hidden
-               if(this == tree.rootNode){
-                       var fc = this.tree.showRoot ? this : this.getChildren()[0];
-                       if(fc){
-                               fc.setFocusable(true);
-                               tree.lastFocused = fc;
-                       }else{
-                               // fallback: no nodes in tree so focus on Tree <div> itself
-                               tree.domNode.setAttribute("tabIndex", "0");
-                       }
-               }
 
-               return new dojo.DeferredList(defs);     // dojo.Deferred
-       },
 
-       removeChild: function(/* treeNode */ node){
-               this.inherited(arguments);
+dojo.getObject("tree", true, dojo);
 
-               var children = this.getChildren();
-               if(children.length == 0){
-                       this.isExpandable = false;
-                       this.collapse();
-               }
+dijit.tree._compareNodes = function(n1, n2){
+       if(n1 === n2){
+               return 0;
+       }
+       
+       if('sourceIndex' in document.documentElement){ //IE
+               //TODO: does not yet work if n1 and/or n2 is a text node
+               return n1.sourceIndex - n2.sourceIndex;
+       }else if('compareDocumentPosition' in document.documentElement){ //FF, Opera
+               return n1.compareDocumentPosition(n2) & 2 ? 1: -1;
+       }else if(document.createRange){ //Webkit
+               var r1 = doc.createRange();
+               r1.setStartBefore(n1);
+
+               var r2 = doc.createRange();
+               r2.setStartBefore(n2);
+
+               return r1.compareBoundaryPoints(r1.END_TO_END, r2);
+       }else{
+               throw Error("dijit.tree._compareNodes don't know how to compare two different nodes in this browser");
+       }
+};
 
-               dojo.forEach(children, function(child){
-                               child._updateLayout();
-               });
-       },
+dojo.declare("dijit.tree._dndContainer",
+       null,
+       {
 
-       makeExpandable: function(){
                // summary:
-               //              if this node wasn't already showing the expando node,
-               //              turn it into one and call _setExpando()
+               //              This is a base class for `dijit.tree._dndSelector`, and isn't meant to be used directly.
+               //              It's modeled after `dojo.dnd.Container`.
+               // tags:
+               //              protected
 
-               // TODO: hmm this isn't called from anywhere, maybe should remove it for 2.0
+               /*=====
+               // current: DomNode
+               //              The currently hovered TreeNode.rowNode (which is the DOM node
+               //              associated w/a given node in the tree, excluding it's descendants)
+               current: null,
+               =====*/
 
-               this.isExpandable = true;
-               this._setExpando(false);
-       },
+               constructor: function(tree, params){
+                       // summary:
+                       //              A constructor of the Container
+                       // tree: Node
+                       //              Node or node's id to build the container on
+                       // params: dijit.tree.__SourceArgs
+                       //              A dict of parameters, which gets mixed into the object
+                       // tags:
+                       //              private
+                       this.tree = tree;
+                       this.node = tree.domNode;       // TODO: rename; it's not a TreeNode but the whole Tree
+                       dojo.mixin(this, params);
 
-       _onLabelFocus: function(evt){
-               // summary:
-               //              Called when this row is focused (possibly programatically)
-               //              Note that we aren't using _onFocus() builtin to dijit
-               //              because it's called when focus is moved to a descendant TreeNode.
-               // tags:
-               //              private
-               this.tree._onNodeFocus(this);
-       },
+                       // class-specific variables
+                       this.map = {};
+                       this.current = null;    // current TreeNode's DOM node
 
-       setSelected: function(/*Boolean*/ selected){
-               // summary:
-               //              A Tree has a (single) currently selected node.
-               //              Mark that this node is/isn't that currently selected node.
-               // description:
-               //              In particular, setting a node as selected involves setting tabIndex
-               //              so that when user tabs to the tree, focus will go to that node (only).
-               dijit.setWaiState(this.labelNode, "selected", selected);
-               dojo.toggleClass(this.rowNode, "dijitTreeRowSelected", selected);
-       },
+                       // states
+                       this.containerState = "";
+                       dojo.addClass(this.node, "dojoDndContainer");
 
-       setFocusable: function(/*Boolean*/ selected){
-               // summary:
-               //              A Tree has a (single) node that's focusable.
-               //              Mark that this node is/isn't that currently focsuable node.
-               // description:
-               //              In particular, setting a node as selected involves setting tabIndex
-               //              so that when user tabs to the tree, focus will go to that node (only).
+                       // set up events
+                       this.events = [
+                               // container level events
+                               dojo.connect(this.node, "onmouseenter", this, "onOverEvent"),
+                               dojo.connect(this.node, "onmouseleave", this, "onOutEvent"),
 
-               this.labelNode.setAttribute("tabIndex", selected ? "0" : "-1");
-       },
+                               // switching between TreeNodes
+                               dojo.connect(this.tree, "_onNodeMouseEnter", this, "onMouseOver"),
+                               dojo.connect(this.tree, "_onNodeMouseLeave", this, "onMouseOut"),
 
-       _onClick: function(evt){
-               // summary:
-               //              Handler for onclick event on a node
-               // tags:
-               //              private
-               this.tree._onClick(this, evt);
-       },
-       _onDblClick: function(evt){
-               // summary:
-               //              Handler for ondblclick event on a node
-               // tags:
-               //              private
-               this.tree._onDblClick(this, evt);
-       },
+                               // cancel text selection and text dragging
+                               dojo.connect(this.node, "ondragstart", dojo, "stopEvent"),
+                               dojo.connect(this.node, "onselectstart", dojo, "stopEvent")
+                       ];
+               },
 
-       _onMouseEnter: function(evt){
-               // summary:
-               //              Handler for onmouseenter event on a node
-               // tags:
-               //              private
-               this.tree._onNodeMouseEnter(this, evt);
-       },
+               getItem: function(/*String*/ key){
+                       // summary:
+                       //              Returns the dojo.dnd.Item (representing a dragged node) by it's key (id).
+                       //              Called by dojo.dnd.Source.checkAcceptance().
+                       // tags:
+                       //              protected
 
-       _onMouseLeave: function(evt){
-               // summary:
-               //              Handler for onmouseenter event on a node
-               // tags:
-               //              private
-               this.tree._onNodeMouseLeave(this, evt);
-       }
-});
+                       var widget = this.selection[key],
+                               ret = {
+                                       data: widget,
+                                       type: ["treeNode"]
+                               };
 
-dojo.declare(
-       "dijit.Tree",
-       [dijit._Widget, dijit._Templated],
-{
-       // summary:
-       //              This widget displays hierarchical data from a store.
+                       return ret;     // dojo.dnd.Item
+               },
 
-       // store: [deprecated] String||dojo.data.Store
-       //              Deprecated.  Use "model" parameter instead.
-       //              The store to get data to display in the tree.
-       store: null,
+               destroy: function(){
+                       // summary:
+                       //              Prepares this object to be garbage-collected
 
-       // model: dijit.Tree.model
-       //              Interface to read tree data, get notifications of changes to tree data,
-       //              and for handling drop operations (i.e drag and drop onto the tree)
-       model: null,
+                       dojo.forEach(this.events, dojo.disconnect);
+                       // this.clearItems();
+                       this.node = this.parent = null;
+               },
 
-       // query: [deprecated] anything
-       //              Deprecated.  User should specify query to the model directly instead.
-       //              Specifies datastore query to return the root item or top items for the tree.
-       query: null,
+               // mouse events
+               onMouseOver: function(/*TreeNode*/ widget, /*Event*/ evt){
+                       // summary:
+                       //              Called when mouse is moved over a TreeNode
+                       // tags:
+                       //              protected
+                       this.current = widget;
+               },
 
-       // label: [deprecated] String
-       //              Deprecated.  Use dijit.tree.ForestStoreModel directly instead.
-       //              Used in conjunction with query parameter.
-       //              If a query is specified (rather than a root node id), and a label is also specified,
-       //              then a fake root node is created and displayed, with this label.
-       label: "",
+               onMouseOut: function(/*TreeNode*/ widget, /*Event*/ evt){
+                       // summary:
+                       //              Called when mouse is moved away from a TreeNode
+                       // tags:
+                       //              protected
+                       this.current = null;
+               },
 
-       // showRoot: [const] Boolean
-       //              Should the root node be displayed, or hidden?
-       showRoot: true,
+               _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.replaceClass(this.node, prefix + newState, prefix + this[state]);
+                       this[state] = newState;
+               },
 
-       // childrenAttr: [deprecated] String[]
-       //              Deprecated.   This information should be specified in the model.
-       //              One ore more attributes that holds children of a tree node
-       childrenAttr: ["children"],
+               _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);
+               },
 
-       // path: String[] or Item[]
-       //              Full path from rootNode to selected node expressed as array of items or array of ids.
-       //              Since setting the path may be asynchronous (because ofwaiting on dojo.data), set("path", ...)
-       //              returns a Deferred to indicate when the set is complete.
-       path: [],
+               _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);
+               },
 
-       // selectedItem: [readonly] Item
-       //              The currently selected item in this tree.
-       //              This property can only be set (via set('selectedItem', ...)) when that item is already
-       //              visible in the tree.   (I.e. the tree has already been expanded to show that node.)
-       //              Should generally use `path` attribute to set the selected item instead.
-       selectedItem: null,
+               onOverEvent: function(){
+                       // summary:
+                       //              This function is called once, when mouse is over our container
+                       // tags:
+                       //              protected
+                       this._changeState("Container", "Over");
+               },
+
+               onOutEvent: function(){
+                       // summary:
+                       //              This function is called once, when mouse is out of our container
+                       // tags:
+                       //              protected
+                       this._changeState("Container", "");
+               }
+});
 
-       // openOnClick: Boolean
-       //              If true, clicking a folder node's label will open it, rather than calling onClick()
-       openOnClick: false,
+}
 
-       // openOnDblClick: Boolean
-       //              If true, double-clicking a folder node's label will open it, rather than calling onDblClick()
-       openOnDblClick: false,
+if(!dojo._hasResource["dijit.tree._dndSelector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.tree._dndSelector"] = true;
+dojo.provide("dijit.tree._dndSelector");
 
-       templateString: dojo.cache("dijit", "templates/Tree.html", "<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),
 
-       // persist: Boolean
-       //              Enables/disables use of cookies for state saving.
-       persist: true,
 
-       // autoExpand: Boolean
-       //              Fully expand the tree on load.   Overrides `persist`
-       autoExpand: false,
 
-       // dndController: [protected] String
-       //              Class name to use as as the dnd controller.  Specifying this class enables DnD.
-       //              Generally you should specify this as "dijit.tree.dndSource".
-       dndController: null,
+dojo.declare("dijit.tree._dndSelector",
+       dijit.tree._dndContainer,
+       {
+               // summary:
+               //              This is a base class for `dijit.tree.dndSource` , and isn't meant to be used directly.
+               //              It's based on `dojo.dnd.Selector`.
+               // tags:
+               //              protected
 
-       // parameters to pull off of the tree and pass on to the dndController as its params
-       dndParams: ["onDndDrop","itemCreator","onDndCancel","checkAcceptance", "checkItemAcceptance", "dragThreshold", "betweenThreshold"],
+               /*=====
+               // selection: Hash<String, DomNode>
+               //              (id, DomNode) map for every TreeNode that's currently selected.
+               //              The DOMNode is the TreeNode.rowNode.
+               selection: {},
+               =====*/
 
-       //declare the above items so they can be pulled from the tree's markup
+               constructor: function(tree, params){
+                       // summary:
+                       //              Initialization
+                       // tags:
+                       //              private
 
-       // onDndDrop: [protected] Function
-       //              Parameter to dndController, see `dijit.tree.dndSource.onDndDrop`.
-       //              Generally this doesn't need to be set.
-       onDndDrop: null,
+                       this.selection={};
+                       this.anchor = null;
 
-       /*=====
-       itemCreator: function(nodes, target, source){
-               // summary:
-               //              Returns objects passed to `Tree.model.newItem()` based on DnD nodes
-               //              dropped onto the tree.   Developer must override this method to enable
-               //              dropping from external sources onto this Tree, unless the Tree.model's items
-               //              happen to look like {id: 123, name: "Apple" } with no other attributes.
-               // description:
-               //              For each node in nodes[], which came from source, create a hash of name/value
-               //              pairs to be passed to Tree.model.newItem().  Returns array of those hashes.
-               // nodes: DomNode[]
-               //              The DOMNodes dragged from the source container
-               // target: DomNode
-               //              The target TreeNode.rowNode
-               // source: dojo.dnd.Source
-               //              The source container the nodes were dragged from, perhaps another Tree or a plain dojo.dnd.Source
-               // returns: Object[]
-               //              Array of name/value hashes for each new item to be added to the Tree, like:
-               // |    [
-               // |            { id: 123, label: "apple", foo: "bar" },
-               // |            { id: 456, label: "pear", zaz: "bam" }
-               // |    ]
-               // tags:
-               //              extension
-               return [{}];
-       },
-       =====*/
-       itemCreator: null,
+                       dijit.setWaiState(this.tree.domNode, "multiselect", !this.singular);
 
-       // onDndCancel: [protected] Function
-       //              Parameter to dndController, see `dijit.tree.dndSource.onDndCancel`.
-       //              Generally this doesn't need to be set.
-       onDndCancel: null,
+                       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")
+                       );
+               },
 
-/*=====
-       checkAcceptance: function(source, nodes){
-               // summary:
-               //              Checks if the Tree itself can accept nodes from this source
-               // source: dijit.tree._dndSource
-               //              The source which provides items
-               // nodes: DOMNode[]
-               //              Array of DOM nodes corresponding to nodes being dropped, dijitTreeRow nodes if
-               //              source is a dijit.Tree.
-               // tags:
-               //              extension
-               return true;    // Boolean
-       },
-=====*/
-       checkAcceptance: null,
+               //      singular: Boolean
+               //              Allows selection of only one element, if true.
+               //              Tree hasn't been tested in singular=true mode, unclear if it works.
+               singular: false,
 
-/*=====
-       checkItemAcceptance: function(target, source, position){
-               // summary:
-               //              Stub function to be overridden if one wants to check for the ability to drop at the node/item level
-               // description:
-               //              In the base case, this is called to check if target can become a child of source.
-               //              When betweenThreshold is set, position="before" or "after" means that we
-               //              are asking if the source node can be dropped before/after the target node.
-               // target: DOMNode
-               //              The dijitTreeRoot DOM node inside of the TreeNode that we are dropping on to
-               //              Use dijit.getEnclosingWidget(target) to get the TreeNode.
-               // source: dijit.tree.dndSource
-               //              The (set of) nodes we are dropping
-               // position: String
-               //              "over", "before", or "after"
-               // tags:
-               //              extension
-               return true;    // Boolean
-       },
-=====*/
-       checkItemAcceptance: null,
+               // methods
+               getSelectedTreeNodes: function(){
+                       // summary:
+                       //              Returns a list of selected node(s).
+                       //              Used by dndSource on the start of a drag.
+                       // tags:
+                       //              protected
+                       var nodes=[], sel = this.selection;
+                       for(var i in sel){
+                               nodes.push(sel[i]);
+                       }
+                       return nodes;
+               },
 
-       // dragThreshold: Integer
-       //              Number of pixels mouse moves before it's considered the start of a drag operation
-       dragThreshold: 5,
+               selectNone: function(){
+                       // summary:
+                       //              Unselects all items
+                       // tags:
+                       //              private
 
-       // betweenThreshold: Integer
-       //              Set to a positive value to allow drag and drop "between" nodes.
-       //
-       //              If during DnD mouse is over a (target) node but less than betweenThreshold
-       //              pixels from the bottom edge, dropping the the dragged node will make it
-       //              the next sibling of the target node, rather than the child.
-       //
-       //              Similarly, if mouse is over a target node but less that betweenThreshold
-       //              pixels from the top edge, dropping the dragged node will make it
-       //              the target node's previous sibling rather than the target node's child.
-       betweenThreshold: 0,
+                       this.setSelection([]);
+                       return this;    // self
+               },
 
-       // _nodePixelIndent: Integer
-       //              Number of pixels to indent tree nodes (relative to parent node).
-       //              Default is 19 but can be overridden by setting CSS class dijitTreeIndent
-       //              and calling resize() or startup() on tree after it's in the DOM.
-       _nodePixelIndent: 19,
+               destroy: function(){
+                       // summary:
+                       //              Prepares the object to be garbage-collected
+                       this.inherited(arguments);
+                       this.selection = this.anchor = null;
+               },
+               addTreeNode: function(/*dijit._TreeNode*/node, /*Boolean?*/isAnchor){
+                       // summary
+                       //              add node to current selection
+                       // node: Node
+                       //              node to add
+                       // isAnchor: Boolean
+                       //              Whether the node should become anchor.
 
-       _publish: function(/*String*/ topicName, /*Object*/ message){
-               // summary:
-               //              Publish a message for this widget/topic
-               dojo.publish(this.id, [dojo.mixin({tree: this, event: topicName}, message || {})]);
-       },
+                       this.setSelection(this.getSelectedTreeNodes().concat( [node] ));
+                       if(isAnchor){ this.anchor = node; }
+                       return node;
+               },
+               removeTreeNode: function(/*dijit._TreeNode*/node){
+                       // summary
+                       //              remove node from current selection
+                       // node: Node
+                       //              node to remove
+                       this.setSelection(this._setDifference(this.getSelectedTreeNodes(), [node]))
+                       return node;
+               },
+               isTreeNodeSelected: function(/*dijit._TreeNode*/node){
+                       // summary
+                       //              return true if node is currently selected
+                       // node: Node
+                       //              the node to check whether it's in the current selection
 
-       postMixInProperties: function(){
-               this.tree = this;
+                       return node.id && !!this.selection[node.id];
+               },
+               setSelection: function(/*dijit._treeNode[]*/ newSelection){
+                       // summary
+                       //      set the list of selected nodes to be exactly newSelection. All changes to the
+                       //      selection should be passed through this function, which ensures that derived
+                       //      attributes are kept up to date. Anchor will be deleted if it has been removed
+                       //      from the selection, but no new anchor will be added by this function.
+                       // newSelection: Node[]
+                       //      list of tree nodes to make selected
+                       var oldSelection = this.getSelectedTreeNodes();
+                       dojo.forEach(this._setDifference(oldSelection, newSelection), dojo.hitch(this, function(node){
+                               node.setSelected(false);
+                               if(this.anchor == node){
+                                       delete this.anchor;
+                               }
+                               delete this.selection[node.id];
+                       }));
+                       dojo.forEach(this._setDifference(newSelection, oldSelection), dojo.hitch(this, function(node){
+                               node.setSelected(true);
+                               this.selection[node.id] = node;
+                       }));
+                       this._updateSelectionProperties();
+               },
+               _setDifference: function(xs,ys){
+                       // summary
+                       //      Returns a copy of xs which lacks any objects
+                       //      occurring in ys. Checks for membership by
+                       //      modifying and then reading the object, so it will
+                       //      not properly handle sets of numbers or strings.
+                       
+                       dojo.forEach(ys, function(y){ y.__exclude__ = true; });
+                       var ret = dojo.filter(xs, function(x){ return !x.__exclude__; });
 
-               if(this.autoExpand){
-                       // There's little point in saving opened/closed state of nodes for a Tree
-                       // that initially opens all it's nodes.
-                       this.persist = false;
-               }
+                       // clean up after ourselves.
+                       dojo.forEach(ys, function(y){ delete y['__exclude__'] });
+                       return ret;
+               },
+               _updateSelectionProperties: function() {
+                       // summary
+                       //      Update the following tree properties from the current selection:
+                       //      path[s], selectedItem[s], selectedNode[s]
+                       
+                       var selected = this.getSelectedTreeNodes();
+                       var paths = [], nodes = [];
+                       dojo.forEach(selected, function(node) {
+                               nodes.push(node);
+                               paths.push(node.getTreePath());
+                       });
+                       var items = dojo.map(nodes,function(node) { return node.item; });
+                       this.tree._set("paths", paths);
+                       this.tree._set("path", paths[0] || []);
+                       this.tree._set("selectedNodes", nodes);
+                       this.tree._set("selectedNode", nodes[0] || null);
+                       this.tree._set("selectedItems", items);
+                       this.tree._set("selectedItem", items[0] || null);
+               },
+               // mouse events
+               onMouseDown: function(e){
+                       // summary:
+                       //              Event processor for onmousedown
+                       // e: Event
+                       //              mouse event
+                       // tags:
+                       //              protected
 
-               this._itemNodesMap={};
+                       // ignore click on expando node
+                       if(!this.current || this.tree.isExpandoNode( e.target, this.current)){ return; }
 
-               if(!this.cookieName){
-                       this.cookieName = this.id + "SaveStateCookie";
-               }
+                       if(e.button == dojo.mouseButtons.RIGHT){ return; }      // ignore right-click
 
-               this._loadDeferred = new dojo.Deferred();
+                       dojo.stopEvent(e);
 
-               this.inherited(arguments);
-       },
+                       var treeNode = this.current,
+                         copy = dojo.isCopyKey(e), id = treeNode.id;
 
-       postCreate: function(){
-               this._initState();
+                       // if shift key is not pressed, and the node is already in the selection,
+                       // delay deselection until onmouseup so in the case of DND, deselection
+                       // will be canceled by onmousemove.
+                       if(!this.singular && !e.shiftKey && this.selection[id]){
+                               this._doDeselect = true;
+                               return;
+                       }else{
+                               this._doDeselect = false;
+                       }
+                       this.userSelect(treeNode, copy, e.shiftKey);
+               },
 
-               // Create glue between store and Tree, if not specified directly by user
-               if(!this.model){
-                       this._store2model();
-               }
+               onMouseUp: function(e){
+                       // summary:
+                       //              Event processor for onmouseup
+                       // e: Event
+                       //              mouse event
+                       // tags:
+                       //              protected
 
-               // monitor changes to items
-               this.connect(this.model, "onChange", "_onItemChange");
-               this.connect(this.model, "onChildrenChange", "_onItemChildrenChange");
-               this.connect(this.model, "onDelete", "_onItemDelete");
+                       // _doDeselect is the flag to indicate that the user wants to either ctrl+click on
+                       // a already selected item (to deselect the item), or click on a not-yet selected item
+                       // (which should remove all current selection, and add the clicked item). This can not
+                       // be done in onMouseDown, because the user may start a drag after mousedown. By moving
+                       // the deselection logic here, the user can drags an already selected item.
+                       if(!this._doDeselect){ return; }
+                       this._doDeselect = false;
+                       this.userSelect(this.current, dojo.isCopyKey( e ), e.shiftKey);
+               },
+               onMouseMove: function(e){
+                       // summary
+                       //              event processor for onmousemove
+                       // e: Event
+                       //              mouse event
+                       this._doDeselect = false;
+               },
 
-               this._load();
+               userSelect: function(node, multi, range){
+                       // summary:
+                       //              Add or remove the given node from selection, responding
+                       //      to a user action such as a click or keypress.
+                       // multi: Boolean
+                       //              Indicates whether this is meant to be a multi-select action (e.g. ctrl-click)
+                       // range: Boolean
+                       //              Indicates whether this is meant to be a ranged action (e.g. shift-click)
+                       // tags:
+                       //              protected
 
-               this.inherited(arguments);
+                       if(this.singular){
+                               if(this.anchor == node && multi){
+                                       this.selectNone();
+                               }else{
+                                       this.setSelection([node]);
+                                       this.anchor = node;
+                               }
+                       }else{
+                               if(range && this.anchor){
+                                       var cr = dijit.tree._compareNodes(this.anchor.rowNode, node.rowNode),
+                                       begin, end, anchor = this.anchor;
+                                       
+                                       if(cr < 0){ //current is after anchor
+                                               begin = anchor;
+                                               end = node;
+                                       }else{ //current is before anchor
+                                               begin = node;
+                                               end = anchor;
+                                       }
+                                       nodes = [];
+                                       //add everything betweeen begin and end inclusively
+                                       while(begin != end) {
+                                               nodes.push(begin)
+                                               begin = this.tree._getNextNode(begin);
+                                       }
+                                       nodes.push(end)
 
-               if(this.dndController){
-                       if(dojo.isString(this.dndController)){
-                               this.dndController = dojo.getObject(this.dndController);
-                       }
-                       var params={};
-                       for(var i=0; i<this.dndParams.length;i++){
-                               if(this[this.dndParams[i]]){
-                                       params[this.dndParams[i]] = this[this.dndParams[i]];
+                                       this.setSelection(nodes);
+                               }else{
+                                   if( this.selection[ node.id ] && multi ) {
+                                               this.removeTreeNode( node );
+                                   } else if(multi) {
+                                               this.addTreeNode(node, true);
+                                       } else {
+                                               this.setSelection([node]);
+                                               this.anchor = node;
+                                   }
                                }
                        }
-                       this.dndController = new this.dndController(this, params);
+               },
+
+               forInSelectedItems: function(/*Function*/ f, /*Object?*/ o){
+                       // summary:
+                       //              Iterates over selected items;
+                       //              see `dojo.dnd.Container.forInItems()` for details
+                       o = o || dojo.global;
+                       for(var id in this.selection){
+                               // console.log("selected item id: " + id);
+                               f.call(o, this.getItem(id), id, this);
+                       }
                }
-       },
+});
 
-       _store2model: function(){
-               // summary:
-               //              User specified a store&query rather than model, so create model from store/query
-               this._v10Compat = true;
-               dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");
+}
 
-               var modelParams = {
-                       id: this.id + "_ForestStoreModel",
-                       store: this.store,
-                       query: this.query,
-                       childrenAttrs: this.childrenAttr
-               };
+if(!dojo._hasResource["dijit.Tree"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Tree"] = true;
+dojo.provide("dijit.Tree");
 
-               // Only override the model's mayHaveChildren() method if the user has specified an override
-               if(this.params.mayHaveChildren){
-                       modelParams.mayHaveChildren = dojo.hitch(this, "mayHaveChildren");
-               }
 
-               if(this.params.getItemChildren){
-                       modelParams.getChildren = dojo.hitch(this, function(item, onComplete, onError){
-                               this.getItemChildren((this._v10Compat && item === this.model.root) ? null : item, onComplete, onError);
-                       });
-               }
-               this.model = new dijit.tree.ForestStoreModel(modelParams);
 
-               // For backwards compatibility, the visibility of the root node is controlled by
-               // whether or not the user has specified a label
-               this.showRoot = Boolean(this.label);
-       },
 
-       onLoad: function(){
-               // summary:
-               //              Called when tree finishes loading and expanding.
-               // description:
-               //              If persist == true the loading may encompass many levels of fetches
-               //              from the data store, each asynchronous.   Waits for all to finish.
-               // tags:
-               //              callback
-       },
 
-       _load: function(){
-               // summary:
-               //              Initial load of the tree.
-               //              Load root node (possibly hidden) and it's children.
-               this.model.getRoot(
-                       dojo.hitch(this, function(item){
-                               var rn = (this.rootNode = this.tree._createTreeNode({
-                                       item: item,
-                                       tree: this,
-                                       isExpandable: true,
-                                       label: this.label || this.getLabel(item),
-                                       indent: this.showRoot ? 0 : -1
-                               }));
-                               if(!this.showRoot){
-                                       rn.rowNode.style.display="none";
-                               }
-                               this.domNode.appendChild(rn.domNode);
-                               var identity = this.model.getIdentity(item);
-                               if(this._itemNodesMap[identity]){
-                                       this._itemNodesMap[identity].push(rn);
-                               }else{
-                                       this._itemNodesMap[identity] = [rn];
-                               }
 
-                               rn._updateLayout();             // sets "dijitTreeIsRoot" CSS classname
 
-                               // load top level children and then fire onLoad() event
-                               this._expandNode(rn).addCallback(dojo.hitch(this, function(){
-                                       this._loadDeferred.callback(true);
-                                       this.onLoad();
-                               }));
-                       }),
-                       function(err){
-                               console.error(this, ": error loading root: ", err);
-                       }
-               );
-       },
 
-       getNodesByItem: function(/*dojo.data.Item or id*/ item){
-               // summary:
-               //              Returns all tree nodes that refer to an item
-               // returns:
-               //              Array of tree nodes that refer to passed item
 
-               if(!item){ return []; }
-               var identity = dojo.isString(item) ? item : this.model.getIdentity(item);
-               // return a copy so widget don't get messed up by changes to returned array
-               return [].concat(this._itemNodesMap[identity]);
-       },
 
-       _setSelectedItemAttr: function(/*dojo.data.Item or id*/ item){
-               // summary:
-               //              Select a tree node related to passed item.
-               //              WARNING: if model use multi-parented items or desired tree node isn't already loaded
-               //              behavior is undefined. Use set('path', ...) instead.
 
-               var oldValue = this.get("selectedItem");
-               var identity = (!item || dojo.isString(item)) ? item : this.model.getIdentity(item);
-               if(identity == oldValue ? this.model.getIdentity(oldValue) : null){ return; }
-               var nodes = this._itemNodesMap[identity];
-               this._selectNode((nodes && nodes[0]) || null);  //select the first item
-       },
 
-       _getSelectedItemAttr: function(){
-               // summary:
-               //              Return item related to selected tree node.
-               return this.selectedNode && this.selectedNode.item;
-       },
 
-       _setPathAttr: function(/*Item[] || String[]*/ path){
-               // summary:
-               //              Select the tree node identified by passed path.
-               // path:
-               //              Array of items or item id's
-               // returns:
-               //              Deferred to indicate when the set is complete
+dojo.declare(
+       "dijit._TreeNode",
+       [dijit._Widget, dijit._Templated, dijit._Container, dijit._Contained, dijit._CssStateMixin],
+{
+       // summary:
+       //              Single node within a tree.   This class is used internally
+       //              by Tree and should not be accessed directly.
+       // tags:
+       //              private
 
-               var d = new dojo.Deferred();
+       // item: [const] dojo.data.Item
+       //              the dojo.data entry this tree represents
+       item: null,
 
-               this._selectNode(null);
-               if(!path || !path.length){
-                       d.resolve(true);
-                       return d;
-               }
+       // isTreeNode: [protected] Boolean
+       //              Indicates that this is a TreeNode.   Used by `dijit.Tree` only,
+       //              should not be accessed directly.
+       isTreeNode: true,
 
-               // If this is called during initialization, defer running until Tree has finished loading
-               this._loadDeferred.addCallback(dojo.hitch(this, function(){
-                       if(!this.rootNode){
-                               d.reject(new Error("!this.rootNode"));
-                               return;
-                       }
-                       if(path[0] !== this.rootNode.item && (dojo.isString(path[0]) && path[0] != this.model.getIdentity(this.rootNode.item))){
-                               d.reject(new Error(this.id + ":path[0] doesn't match this.rootNode.item.  Maybe you are using the wrong tree."));
-                               return;
-                       }
-                       path.shift();
+       // label: String
+       //              Text of this tree node
+       label: "",
 
-                       var node = this.rootNode;
+       // isExpandable: [private] Boolean
+       //              This node has children, so show the expando node (+ sign)
+       isExpandable: null,
 
-                       function advance(){
-                               // summary:
-                               //              Called when "node" has completed loading and expanding.   Pop the next item from the path
-                               //              (which must be a child of "node") and advance to it, and then recurse.
-
-                               // Set item and identity to next item in path (node is pointing to the item that was popped
-                               // from the path _last_ time.
-                               var item = path.shift(),
-                                       identity = dojo.isString(item) ? item : this.model.getIdentity(item);
-
-                               // Change "node" from previous item in path to the item we just popped from path
-                               dojo.some(this._itemNodesMap[identity], function(n){
-                                       if(n.getParent() == node){
-                                               node = n;
-                                               return true;
-                                       }
-                                       return false;
-                               });
+       // isExpanded: [readonly] Boolean
+       //              This node is currently expanded (ie, opened)
+       isExpanded: false,
 
-                               if(path.length){
-                                       // Need to do more expanding
-                                       this._expandNode(node).addCallback(dojo.hitch(this, advance));
-                               }else{
-                                       // Final destination node, select it
-                                       this._selectNode(node);
-                                       
-                                       // signal that path setting is finished
-                                       d.resolve(true);
-                               }
-                       }
+       // state: [private] String
+       //              Dynamic loading-related stuff.
+       //              When an empty folder node appears, it is "UNCHECKED" first,
+       //              then after dojo.data query it becomes "LOADING" and, finally "LOADED"
+       state: "UNCHECKED",
 
-                       this._expandNode(node).addCallback(dojo.hitch(this, advance));
-               }));
-                       
-               return d;
-       },
+       templateString: dojo.cache("dijit", "templates/TreeNode.html", "<div class=\"dijitTreeNode\" role=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" role=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" role=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" role=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" role=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" role=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" role=\"treeitem\" tabindex=\"-1\" aria-selected=\"false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" role=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),
 
-       _getPathAttr: function(){
-               // summary:
-               //              Return an array of items that is the path to selected tree node.
-               if(!this.selectedNode){ return; }
-               var res = [];
-               var treeNode = this.selectedNode;
-               while(treeNode && treeNode !== this.rootNode){
-                       res.unshift(treeNode.item);
-                       treeNode = treeNode.getParent();
-               }
-               res.unshift(this.rootNode.item);
-               return res;
+       baseClass: "dijitTreeNode",
+
+       // For hover effect for tree node, and focus effect for label
+       cssStateNodes: {
+               rowNode: "dijitTreeRow",
+               labelNode: "dijitTreeLabel"
        },
 
-       ////////////// Data store related functions //////////////////////
-       // These just get passed to the model; they are here for back-compat
+       attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+               label: {node: "labelNode", type: "innerText"},
+               tooltip: {node: "rowNode", type: "attribute", attribute: "title"}
+       }),
 
-       mayHaveChildren: function(/*dojo.data.Item*/ item){
-               // summary:
-               //              Deprecated.   This should be specified on the model itself.
-               //
-               //              Overridable function to tell if an item has or may have children.
-               //              Controls whether or not +/- expando icon is shown.
-               //              (For efficiency reasons we may not want to check if an element actually
-               //              has children until user clicks the expando node)
-               // tags:
-               //              deprecated
-       },
+       buildRendering: function(){
+               this.inherited(arguments);
 
-       getItemChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){
-               // summary:
-               //              Deprecated.   This should be specified on the model itself.
-               //
-               //              Overridable function that return array of child items of given parent item,
-               //              or if parentItem==null then return top items in tree
-               // tags:
-               //              deprecated
-       },
+               // set expand icon for leaf
+               this._setExpando();
 
-       ///////////////////////////////////////////////////////
-       // Functions for converting an item to a TreeNode
-       getLabel: function(/*dojo.data.Item*/ item){
-               // summary:
-               //              Overridable function to get the label for a tree node (given the item)
-               // tags:
-               //              extension
-               return this.model.getLabel(item);       // String
-       },
+               // set icon and label class based on item
+               this._updateItemClasses(this.item);
 
-       getIconClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-               // summary:
-               //              Overridable function to return CSS class name to display icon
-               // tags:
-               //              extension
-               return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "dijitLeaf"
-       },
+               if(this.isExpandable){
+                       dijit.setWaiState(this.labelNode, "expanded", this.isExpanded);
+               }
 
-       getLabelClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-               // summary:
-               //              Overridable function to return CSS class name to display label
-               // tags:
-               //              extension
+               //aria-selected should be false on all selectable elements.
+               this.setSelected(false);
        },
 
-       getRowClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+       _setIndentAttr: function(indent){
                // summary:
-               //              Overridable function to return CSS class name to display row
-               // tags:
-               //              extension
-       },
+               //              Tell this node how many levels it should be indented
+               // description:
+               //              0 for top level nodes, 1 for their children, 2 for their
+               //              grandchildren, etc.
 
-       getIconStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
-               // summary:
-               //              Overridable function to return CSS styles to display icon
-               // returns:
-               //              Object suitable for input to dojo.style() like {backgroundImage: "url(...)"}
-               // tags:
-               //              extension
+               // Math.max() is to prevent negative padding on hidden root node (when indent == -1)
+               var pixels = (Math.max(indent, 0) * this.tree._nodePixelIndent) + "px";
+
+               dojo.style(this.domNode, "backgroundPosition",  pixels + " 0px");
+               dojo.style(this.rowNode, this.isLeftToRight() ? "paddingLeft" : "paddingRight", pixels);
+
+               dojo.forEach(this.getChildren(), function(child){
+                       child.set("indent", indent+1);
+               });
+               
+               this._set("indent", indent);
        },
 
-       getLabelStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+       markProcessing: function(){
                // summary:
-               //              Overridable function to return CSS styles to display label
-               // returns:
-               //              Object suitable for input to dojo.style() like {color: "red", background: "green"}
+               //              Visually denote that tree is loading data, etc.
                // tags:
-               //              extension
+               //              private
+               this.state = "LOADING";
+               this._setExpando(true);
        },
 
-       getRowStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+       unmarkProcessing: function(){
                // summary:
-               //              Overridable function to return CSS styles to display row
-               // returns:
-               //              Object suitable for input to dojo.style() like {background-color: "#bbb"}
+               //              Clear markup from markProcessing() call
                // tags:
-               //              extension
+               //              private
+               this._setExpando(false);
        },
 
-       getTooltip: function(/*dojo.data.Item*/ item){
+       _updateItemClasses: function(item){
                // summary:
-               //              Overridable function to get the tooltip for a tree node (given the item)
+               //              Set appropriate CSS classes for icon and label dom node
+               //              (used to allow for item updates to change respective CSS)
                // tags:
-               //              extension
-               return "";      // String
+               //              private
+               var tree = this.tree, model = tree.model;
+               if(tree._v10Compat && item === model.root){
+                       // For back-compat with 1.0, need to use null to specify root item (TODO: remove in 2.0)
+                       item = null;
+               }
+               this._applyClassAndStyle(item, "icon", "Icon");
+               this._applyClassAndStyle(item, "label", "Label");
+               this._applyClassAndStyle(item, "row", "Row");
        },
 
-       /////////// Keyboard and Mouse handlers ////////////////////
-
-       _onKeyPress: function(/*Event*/ e){
+       _applyClassAndStyle: function(item, lower, upper){
                // summary:
-               //              Translates keypress events into commands for the controller
-               if(e.altKey){ return; }
-               var dk = dojo.keys;
-               var treeNode = dijit.getEnclosingWidget(e.target);
-               if(!treeNode){ return; }
-
-               var key = e.charOrCode;
-               if(typeof key == "string"){     // handle printables (letter navigation)
-                       // Check for key navigation.
-                       if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){
-                               this._onLetterKeyNav( { node: treeNode, key: key.toLowerCase() } );
-                               dojo.stopEvent(e);
-                       }
-               }else{  // handle non-printables (arrow keys)
-                       // clear record of recent printables (being saved for multi-char letter navigation),
-                       // because "a", down-arrow, "b" shouldn't search for "ab"
-                       if(this._curSearch){
-                               clearTimeout(this._curSearch.timer);
-                               delete this._curSearch;
-                       }
+               //              Set the appropriate CSS classes and styles for labels, icons and rows.
+               //
+               // item:
+               //              The data item.
+               //
+               // lower:
+               //              The lower case attribute to use, e.g. 'icon', 'label' or 'row'.
+               //
+               // upper:
+               //              The upper case attribute to use, e.g. 'Icon', 'Label' or 'Row'.
+               //
+               // tags:
+               //              private
 
-                       var map = this._keyHandlerMap;
-                       if(!map){
-                               // setup table mapping keys to events
-                               map = {};
-                               map[dk.ENTER]="_onEnterKey";
-                               map[this.isLeftToRight() ? dk.LEFT_ARROW : dk.RIGHT_ARROW]="_onLeftArrow";
-                               map[this.isLeftToRight() ? dk.RIGHT_ARROW : dk.LEFT_ARROW]="_onRightArrow";
-                               map[dk.UP_ARROW]="_onUpArrow";
-                               map[dk.DOWN_ARROW]="_onDownArrow";
-                               map[dk.HOME]="_onHomeKey";
-                               map[dk.END]="_onEndKey";
-                               this._keyHandlerMap = map;
-                       }
-                       if(this._keyHandlerMap[key]){
-                               this[this._keyHandlerMap[key]]( { node: treeNode, item: treeNode.item, evt: e } );
-                               dojo.stopEvent(e);
-                       }
-               }
-       },
+               var clsName = "_" + lower + "Class";
+               var nodeName = lower + "Node";
+               var oldCls = this[clsName];
 
-       _onEnterKey: function(/*Object*/ message, /*Event*/ evt){
-               this._publish("execute", { item: message.item, node: message.node } );
-               this._selectNode(message.node);
-               this.onClick(message.item, message.node, evt);
-       },
+               this[clsName] = this.tree["get" + upper + "Class"](item, this.isExpanded);
+               dojo.replaceClass(this[nodeName], this[clsName] || "", oldCls || "");
+               dojo.style(this[nodeName], this.tree["get" + upper + "Style"](item, this.isExpanded) || {});
+       },
 
-       _onDownArrow: function(/*Object*/ message){
+       _updateLayout: function(){
                // summary:
-               //              down arrow pressed; get next visible node, set focus there
-               var node = this._getNextNode(message.node);
-               if(node && node.isTreeNode){
-                       this.focusNode(node);
+               //              Set appropriate CSS classes for this.domNode
+               // tags:
+               //              private
+               var parent = this.getParent();
+               if(!parent || parent.rowNode.style.display == "none"){
+                       /* if we are hiding the root node then make every first level child look like a root node */
+                       dojo.addClass(this.domNode, "dijitTreeIsRoot");
+               }else{
+                       dojo.toggleClass(this.domNode, "dijitTreeIsLast", !this.getNextSibling());
                }
        },
 
-       _onUpArrow: function(/*Object*/ message){
+       _setExpando: function(/*Boolean*/ processing){
                // summary:
-               //              Up arrow pressed; move to previous visible node
+               //              Set the right image for the expando node
+               // tags:
+               //              private
 
-               var node = message.node;
+               var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened",
+                                               "dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"],
+                       _a11yStates = ["*","-","+","*"],
+                       idx = processing ? 0 : (this.isExpandable ?     (this.isExpanded ? 1 : 2) : 3);
 
-               // if younger siblings
-               var previousSibling = node.getPreviousSibling();
-               if(previousSibling){
-                       node = previousSibling;
-                       // if the previous node is expanded, dive in deep
-                       while(node.isExpandable && node.isExpanded && node.hasChildren()){
-                               // move to the last child
-                               var children = node.getChildren();
-                               node = children[children.length-1];
-                       }
-               }else{
-                       // if this is the first child, return the parent
-                       // unless the parent is the root of a tree with a hidden root
-                       var parent = node.getParent();
-                       if(!(!this.showRoot && parent === this.rootNode)){
-                               node = parent;
-                       }
-               }
+               // apply the appropriate class to the expando node
+               dojo.replaceClass(this.expandoNode, styles[idx], styles);
+
+               // provide a non-image based indicator for images-off mode
+               this.expandoNodeText.innerHTML = _a11yStates[idx];
 
-               if(node && node.isTreeNode){
-                       this.focusNode(node);
-               }
        },
 
-       _onRightArrow: function(/*Object*/ message){
+       expand: function(){
                // summary:
-               //              Right arrow pressed; go to child node
-               var node = message.node;
+               //              Show my children
+               // returns:
+               //              Deferred that fires when expansion is complete
 
-               // if not expanded, expand, else move to 1st child
-               if(node.isExpandable && !node.isExpanded){
-                       this._expandNode(node);
-               }else if(node.hasChildren()){
-                       node = node.getChildren()[0];
-                       if(node && node.isTreeNode){
-                               this.focusNode(node);
-                       }
+               // If there's already an expand in progress or we are already expanded, just return
+               if(this._expandDeferred){
+                       return this._expandDeferred;            // dojo.Deferred
+               }
+
+               // cancel in progress collapse operation
+               this._wipeOut && this._wipeOut.stop();
+
+               // All the state information for when a node is expanded, maybe this should be
+               // set when the animation completes instead
+               this.isExpanded = true;
+               dijit.setWaiState(this.labelNode, "expanded", "true");
+               if(this.tree.showRoot || this !== this.tree.rootNode){
+                       dijit.setWaiRole(this.containerNode, "group");
+               }
+               dojo.addClass(this.contentNode,'dijitTreeContentExpanded');
+               this._setExpando();
+               this._updateItemClasses(this.item);
+               if(this == this.tree.rootNode){
+                       dijit.setWaiState(this.tree.domNode, "expanded", "true");
                }
+
+               var def,
+                       wipeIn = dojo.fx.wipeIn({
+                               node: this.containerNode, duration: dijit.defaultDuration,
+                               onEnd: function(){
+                                       def.callback(true);
+                               }
+                       });
+
+               // Deferred that fires when expand is complete
+               def = (this._expandDeferred = new dojo.Deferred(function(){
+                       // Canceller
+                       wipeIn.stop();
+               }));
+
+               wipeIn.play();
+
+               return def;             // dojo.Deferred
        },
 
-       _onLeftArrow: function(/*Object*/ message){
+       collapse: function(){
                // summary:
-               //              Left arrow pressed.
-               //              If not collapsed, collapse, else move to parent.
+               //              Collapse this node (if it's expanded)
 
-               var node = message.node;
+               if(!this.isExpanded){ return; }
 
-               if(node.isExpandable && node.isExpanded){
-                       this._collapseNode(node);
-               }else{
-                       var parent = node.getParent();
-                       if(parent && parent.isTreeNode && !(!this.showRoot && parent === this.rootNode)){
-                               this.focusNode(parent);
-                       }
+               // cancel in progress expand operation
+               if(this._expandDeferred){
+                       this._expandDeferred.cancel();
+                       delete this._expandDeferred;
                }
-       },
 
-       _onHomeKey: function(){
-               // summary:
-               //              Home key pressed; get first visible node, and set focus there
-               var node = this._getRootOrFirstNode();
-               if(node){
-                       this.focusNode(node);
+               this.isExpanded = false;
+               dijit.setWaiState(this.labelNode, "expanded", "false");
+               if(this == this.tree.rootNode){
+                       dijit.setWaiState(this.tree.domNode, "expanded", "false");
+               }
+               dojo.removeClass(this.contentNode,'dijitTreeContentExpanded');
+               this._setExpando();
+               this._updateItemClasses(this.item);
+
+               if(!this._wipeOut){
+                       this._wipeOut = dojo.fx.wipeOut({
+                               node: this.containerNode, duration: dijit.defaultDuration
+                       });
                }
+               this._wipeOut.play();
        },
 
-       _onEndKey: function(/*Object*/ message){
-               // summary:
-               //              End key pressed; go to last visible node.
+       // indent: Integer
+       //              Levels from this node to the root node
+       indent: 0,
+
+       setChildItems: function(/* Object[] */ items){
+               // summary:
+               //              Sets the child items of this node, removing/adding nodes
+               //              from current children to match specified items[] array.
+               //              Also, if this.persist == true, expands any children that were previously
+               //              opened.
+               // returns:
+               //              Deferred object that fires after all previously opened children
+               //              have been expanded again (or fires instantly if there are no such children).
+
+               var tree = this.tree,
+                       model = tree.model,
+                       defs = [];      // list of deferreds that need to fire before I am complete
+
 
-               var node = this.rootNode;
-               while(node.isExpanded){
-                       var c = node.getChildren();
-                       node = c[c.length - 1];
-               }
+               // Orphan all my existing children.
+               // If items contains some of the same items as before then we will reattach them.
+               // Don't call this.removeChild() because that will collapse the tree etc.
+               dojo.forEach(this.getChildren(), function(child){
+                       dijit._Container.prototype.removeChild.call(this, child);
+               }, this);
 
-               if(node && node.isTreeNode){
-                       this.focusNode(node);
-               }
-       },
+               this.state = "LOADED";
 
-       // multiCharSearchDuration: Number
-       //              If multiple characters are typed where each keystroke happens within
-       //              multiCharSearchDuration of the previous keystroke,
-       //              search for nodes matching all the keystrokes.
-       //
-       //              For example, typing "ab" will search for entries starting with
-       //              "ab" unless the delay between "a" and "b" is greater than multiCharSearchDuration.
-       multiCharSearchDuration: 250,
+               if(items && items.length > 0){
+                       this.isExpandable = true;
 
-       _onLetterKeyNav: function(message){
-               // summary:
-               //              Called when user presses a prinatable key; search for node starting with recently typed letters.
-               // message: Object
-               //              Like { node: TreeNode, key: 'a' } where key is the key the user pressed.
+                       // Create _TreeNode widget for each specified tree node, unless one already
+                       // exists and isn't being used (presumably it's from a DnD move and was recently
+                       // released
+                       dojo.forEach(items, function(item){
+                               var id = model.getIdentity(item),
+                                       existingNodes = tree._itemNodesMap[id],
+                                       node;
+                               if(existingNodes){
+                                       for(var i=0;i<existingNodes.length;i++){
+                                               if(existingNodes[i] && !existingNodes[i].getParent()){
+                                                       node = existingNodes[i];
+                                                       node.set('indent', this.indent+1);
+                                                       break;
+                                               }
+                                       }
+                               }
+                               if(!node){
+                                       node = this.tree._createTreeNode({
+                                                       item: item,
+                                                       tree: tree,
+                                                       isExpandable: model.mayHaveChildren(item),
+                                                       label: tree.getLabel(item),
+                                                       tooltip: tree.getTooltip(item),
+                                                       dir: tree.dir,
+                                                       lang: tree.lang,
+                                                       indent: this.indent + 1
+                                               });
+                                       if(existingNodes){
+                                               existingNodes.push(node);
+                                       }else{
+                                               tree._itemNodesMap[id] = [node];
+                                       }
+                               }
+                               this.addChild(node);
 
-               // Branch depending on whether this key starts a new search, or modifies an existing search
-               var cs = this._curSearch;
-               if(cs){
-                       // We are continuing a search.  Ex: user has pressed 'a', and now has pressed
-                       // 'b', so we want to search for nodes starting w/"ab".
-                       cs.pattern = cs.pattern + message.key;
-                       clearTimeout(cs.timer);
+                               // If node was previously opened then open it again now (this may trigger
+                               // more data store accesses, recursively)
+                               if(this.tree.autoExpand || this.tree._state(item)){
+                                       defs.push(tree._expandNode(node));
+                               }
+                       }, this);
+
+                       // note that updateLayout() needs to be called on each child after
+                       // _all_ the children exist
+                       dojo.forEach(this.getChildren(), function(child, idx){
+                               child._updateLayout();
+                       });
                }else{
-                       // We are starting a new search
-                       cs = this._curSearch = {
-                                       pattern: message.key,
-                                       startNode: message.node
-                       };
+                       this.isExpandable=false;
                }
 
-               // set/reset timer to forget recent keystrokes
-               var self = this;
-               cs.timer = setTimeout(function(){
-                       delete self._curSearch;
-               }, this.multiCharSearchDuration);
+               if(this._setExpando){
+                       // change expando to/from dot or + icon, as appropriate
+                       this._setExpando(false);
+               }
 
-               // Navigate to TreeNode matching keystrokes [entered so far].
-               var node = cs.startNode;
-               do{
-                       node = this._getNextNode(node);
-                       //check for last node, jump to first node if necessary
-                       if(!node){
-                               node = this._getRootOrFirstNode();
-                       }
-               }while(node !== cs.startNode && (node.label.toLowerCase().substr(0, cs.pattern.length) != cs.pattern));
-               if(node && node.isTreeNode){
-                       // no need to set focus if back where we started
-                       if(node !== cs.startNode){
-                               this.focusNode(node);
+               // Set leaf icon or folder icon, as appropriate
+               this._updateItemClasses(this.item);
+
+               // On initial tree show, make the selected TreeNode as either the root node of the tree,
+               // or the first child, if the root node is hidden
+               if(this == tree.rootNode){
+                       var fc = this.tree.showRoot ? this : this.getChildren()[0];
+                       if(fc){
+                               fc.setFocusable(true);
+                               tree.lastFocused = fc;
+                       }else{
+                               // fallback: no nodes in tree so focus on Tree <div> itself
+                               tree.domNode.setAttribute("tabIndex", "0");
                        }
                }
+
+               return new dojo.DeferredList(defs);     // dojo.Deferred
        },
 
-       _onClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
-               // summary:
-               //              Translates click events into commands for the controller to process
+       getTreePath: function(){
+               var node = this;
+               var path = [];
+               while(node && node !== this.tree.rootNode){
+                               path.unshift(node.item);
+                               node = node.getParent();
+               }
+               path.unshift(this.tree.rootNode.item);
 
-               var domElement = e.target,
-                       isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText);
+               return path;
+       },
 
-               if( (this.openOnClick && nodeWidget.isExpandable) || isExpandoClick ){
-                       // expando node was clicked, or label of a folder node was clicked; open it
-                       if(nodeWidget.isExpandable){
-                               this._onExpandoClick({node:nodeWidget});
-                       }
-               }else{
-                       this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
-                       this.onClick(nodeWidget.item, nodeWidget, e);
-                       this.focusNode(nodeWidget);
-               }
-               if(!isExpandoClick){
-                       this._selectNode(nodeWidget);
-               }
-               dojo.stopEvent(e);
+       getIdentity: function() {
+               return this.tree.model.getIdentity(this.item);
        },
-       _onDblClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
-               // summary:
-               //              Translates double-click events into commands for the controller to process
 
-               var domElement = e.target,
-                       isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText);
+       removeChild: function(/* treeNode */ node){
+               this.inherited(arguments);
 
-               if( (this.openOnDblClick && nodeWidget.isExpandable) ||isExpandoClick ){
-                       // expando node was clicked, or label of a folder node was clicked; open it
-                       if(nodeWidget.isExpandable){
-                               this._onExpandoClick({node:nodeWidget});
-                       }
-               }else{
-                       this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
-                       this.onDblClick(nodeWidget.item, nodeWidget, e);
-                       this.focusNode(nodeWidget);
-               }
-               if(!isExpandoClick){
-                       this._selectNode(nodeWidget);
+               var children = this.getChildren();
+               if(children.length == 0){
+                       this.isExpandable = false;
+                       this.collapse();
                }
-               dojo.stopEvent(e);
+
+               dojo.forEach(children, function(child){
+                               child._updateLayout();
+               });
        },
 
-       _onExpandoClick: function(/*Object*/ message){
+       makeExpandable: function(){
                // summary:
-               //              User clicked the +/- icon; expand or collapse my children.
-               var node = message.node;
+               //              if this node wasn't already showing the expando node,
+               //              turn it into one and call _setExpando()
 
-               // If we are collapsing, we might be hiding the currently focused node.
-               // Also, clicking the expando node might have erased focus from the current node.
-               // For simplicity's sake just focus on the node with the expando.
-               this.focusNode(node);
+               // TODO: hmm this isn't called from anywhere, maybe should remove it for 2.0
 
-               if(node.isExpanded){
-                       this._collapseNode(node);
-               }else{
-                       this._expandNode(node);
-               }
+               this.isExpandable = true;
+               this._setExpando(false);
        },
 
-       onClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
-               // summary:
-               //              Callback when a tree node is clicked
-               // tags:
-               //              callback
-       },
-       onDblClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
-               // summary:
-               //              Callback when a tree node is double-clicked
-               // tags:
-               //              callback
-       },
-       onOpen: function(/* dojo.data */ item, /*TreeNode*/ node){
+       _onLabelFocus: function(evt){
                // summary:
-               //              Callback when a node is opened
+               //              Called when this row is focused (possibly programatically)
+               //              Note that we aren't using _onFocus() builtin to dijit
+               //              because it's called when focus is moved to a descendant TreeNode.
                // tags:
-               //              callback
+               //              private
+               this.tree._onNodeFocus(this);
        },
-       onClose: function(/* dojo.data */ item, /*TreeNode*/ node){
+
+       setSelected: function(/*Boolean*/ selected){
                // summary:
-               //              Callback when a node is closed
-               // tags:
-               //              callback
+               //              A Tree has a (single) currently selected node.
+               //              Mark that this node is/isn't that currently selected node.
+               // description:
+               //              In particular, setting a node as selected involves setting tabIndex
+               //              so that when user tabs to the tree, focus will go to that node (only).
+               dijit.setWaiState(this.labelNode, "selected", selected);
+               dojo.toggleClass(this.rowNode, "dijitTreeRowSelected", selected);
        },
 
-       _getNextNode: function(node){
+       setFocusable: function(/*Boolean*/ selected){
                // summary:
-               //              Get next visible node
+               //              A Tree has a (single) node that's focusable.
+               //              Mark that this node is/isn't that currently focsuable node.
+               // description:
+               //              In particular, setting a node as selected involves setting tabIndex
+               //              so that when user tabs to the tree, focus will go to that node (only).
 
-               if(node.isExpandable && node.isExpanded && node.hasChildren()){
-                       // if this is an expanded node, get the first child
-                       return node.getChildren()[0];           // _TreeNode
-               }else{
-                       // find a parent node with a sibling
-                       while(node && node.isTreeNode){
-                               var returnNode = node.getNextSibling();
-                               if(returnNode){
-                                       return returnNode;              // _TreeNode
-                               }
-                               node = node.getParent();
-                       }
-                       return null;
-               }
+               this.labelNode.setAttribute("tabIndex", selected ? "0" : "-1");
+       },
+
+       _onClick: function(evt){
+               // summary:
+               //              Handler for onclick event on a node
+               // tags:
+               //              private
+               this.tree._onClick(this, evt);
+       },
+       _onDblClick: function(evt){
+               // summary:
+               //              Handler for ondblclick event on a node
+               // tags:
+               //              private
+               this.tree._onDblClick(this, evt);
        },
 
-       _getRootOrFirstNode: function(){
+       _onMouseEnter: function(evt){
                // summary:
-               //              Get first visible node
-               return this.showRoot ? this.rootNode : this.rootNode.getChildren()[0];
+               //              Handler for onmouseenter event on a node
+               // tags:
+               //              private
+               this.tree._onNodeMouseEnter(this, evt);
        },
 
-       _collapseNode: function(/*_TreeNode*/ node){
+       _onMouseLeave: function(evt){
                // summary:
-               //              Called when the user has requested to collapse the node
+               //              Handler for onmouseenter event on a node
+               // tags:
+               //              private
+               this.tree._onNodeMouseLeave(this, evt);
+       }
+});
 
-               if(node._expandNodeDeferred){
-                       delete node._expandNodeDeferred;
-               }
+dojo.declare(
+       "dijit.Tree",
+       [dijit._Widget, dijit._Templated],
+{
+       // summary:
+       //              This widget displays hierarchical data from a store.
 
-               if(node.isExpandable){
-                       if(node.state == "LOADING"){
-                               // ignore clicks while we are in the process of loading data
-                               return;
-                       }
+       // store: [deprecated] String||dojo.data.Store
+       //              Deprecated.  Use "model" parameter instead.
+       //              The store to get data to display in the tree.
+       store: null,
 
-                       node.collapse();
-                       this.onClose(node.item, node);
+       // model: dijit.Tree.model
+       //              Interface to read tree data, get notifications of changes to tree data,
+       //              and for handling drop operations (i.e drag and drop onto the tree)
+       model: null,
 
-                       if(node.item){
-                               this._state(node.item,false);
-                               this._saveState();
-                       }
-               }
-       },
+       // query: [deprecated] anything
+       //              Deprecated.  User should specify query to the model directly instead.
+       //              Specifies datastore query to return the root item or top items for the tree.
+       query: null,
 
-       _expandNode: function(/*_TreeNode*/ node, /*Boolean?*/ recursive){
-               // summary:
-               //              Called when the user has requested to expand the node
-               // recursive:
-               //              Internal flag used when _expandNode() calls itself, don't set.
-               // returns:
-               //              Deferred that fires when the node is loaded and opened and (if persist=true) all it's descendants
-               //              that were previously opened too
+       // label: [deprecated] String
+       //              Deprecated.  Use dijit.tree.ForestStoreModel directly instead.
+       //              Used in conjunction with query parameter.
+       //              If a query is specified (rather than a root node id), and a label is also specified,
+       //              then a fake root node is created and displayed, with this label.
+       label: "",
 
-               if(node._expandNodeDeferred && !recursive){
-                       // there's already an expand in progress (or completed), so just return
-                       return node._expandNodeDeferred;        // dojo.Deferred
-               }
+       // showRoot: [const] Boolean
+       //              Should the root node be displayed, or hidden?
+       showRoot: true,
 
-               var model = this.model,
-                       item = node.item,
-                       _this = this;
+       // childrenAttr: [deprecated] String[]
+       //              Deprecated.   This information should be specified in the model.
+       //              One ore more attributes that holds children of a tree node
+       childrenAttr: ["children"],
 
-               switch(node.state){
-                       case "UNCHECKED":
-                               // need to load all the children, and then expand
-                               node.markProcessing();
+       // paths: String[][] or Item[][]
+       //              Full paths from rootNode to selected nodes expressed as array of items or array of ids.
+       //              Since setting the paths may be asynchronous (because ofwaiting on dojo.data), set("paths", ...)
+       //              returns a Deferred to indicate when the set is complete.
+       paths: [],
+       
+       // path: String[] or Item[]
+       //      Backward compatible singular variant of paths.
+       path: [],
 
-                               // Setup deferred to signal when the load and expand are finished.
-                               // Save that deferred in this._expandDeferred as a flag that operation is in progress.
-                               var def = (node._expandNodeDeferred = new dojo.Deferred());
+       // selectedItems: [readonly] Item[]
+       //              The currently selected items in this tree.
+       //              This property can only be set (via set('selectedItems', ...)) when that item is already
+       //              visible in the tree.   (I.e. the tree has already been expanded to show that node.)
+       //              Should generally use `paths` attribute to set the selected items instead.
+       selectedItems: null,
 
-                               // Get the children
-                               model.getChildren(
-                                       item,
-                                       function(items){
-                                               node.unmarkProcessing();
+       // selectedItem: [readonly] Item
+       //      Backward compatible singular variant of selectedItems.
+       selectedItem: null,
 
-                                               // Display the children and also start expanding any children that were previously expanded
-                                               // (if this.persist == true).   The returned Deferred will fire when those expansions finish.
-                                               var scid = node.setChildItems(items);
+       // openOnClick: Boolean
+       //              If true, clicking a folder node's label will open it, rather than calling onClick()
+       openOnClick: false,
 
-                                               // Call _expandNode() again but this time it will just to do the animation (default branch).
-                                               // The returned Deferred will fire when the animation completes.
-                                               // TODO: seems like I can avoid recursion and just use a deferred to sequence the events?
-                                               var ed = _this._expandNode(node, true);
+       // openOnDblClick: Boolean
+       //              If true, double-clicking a folder node's label will open it, rather than calling onDblClick()
+       openOnDblClick: false,
 
-                                               // After the above two tasks (setChildItems() and recursive _expandNode()) finish,
-                                               // signal that I am done.
-                                               scid.addCallback(function(){
-                                                       ed.addCallback(function(){
-                                                               def.callback();
-                                                       })
-                                               });
-                                       },
-                                       function(err){
-                                               console.error(_this, ": error loading root children: ", err);
-                                       }
-                               );
-                               break;
+       templateString: dojo.cache("dijit", "templates/Tree.html", "<div class=\"dijitTree dijitTreeContainer\" role=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),
 
-                       default:        // "LOADED"
-                               // data is already loaded; just expand node
-                               def = (node._expandNodeDeferred = node.expand());
+       // persist: Boolean
+       //              Enables/disables use of cookies for state saving.
+       persist: true,
 
-                               this.onOpen(node.item, node);
+       // autoExpand: Boolean
+       //              Fully expand the tree on load.   Overrides `persist`.
+       autoExpand: false,
 
-                               if(item){
-                                       this._state(item, true);
-                                       this._saveState();
-                               }
-               }
+       // dndController: [protected] String
+       //              Class name to use as as the dnd controller.  Specifying this class enables DnD.
+       //              Generally you should specify this as "dijit.tree.dndSource".
+       //      Default of "dijit.tree._dndSelector" handles selection only (no actual DnD).
+       dndController: "dijit.tree._dndSelector",
 
-               return def;     // dojo.Deferred
+       // parameters to pull off of the tree and pass on to the dndController as its params
+       dndParams: ["onDndDrop","itemCreator","onDndCancel","checkAcceptance", "checkItemAcceptance", "dragThreshold", "betweenThreshold"],
+
+       //declare the above items so they can be pulled from the tree's markup
+
+       // onDndDrop: [protected] Function
+       //              Parameter to dndController, see `dijit.tree.dndSource.onDndDrop`.
+       //              Generally this doesn't need to be set.
+       onDndDrop: null,
+
+       /*=====
+       itemCreator: function(nodes, target, source){
+               // summary:
+               //              Returns objects passed to `Tree.model.newItem()` based on DnD nodes
+               //              dropped onto the tree.   Developer must override this method to enable
+               //              dropping from external sources onto this Tree, unless the Tree.model's items
+               //              happen to look like {id: 123, name: "Apple" } with no other attributes.
+               // description:
+               //              For each node in nodes[], which came from source, create a hash of name/value
+               //              pairs to be passed to Tree.model.newItem().  Returns array of those hashes.
+               // nodes: DomNode[]
+               //              The DOMNodes dragged from the source container
+               // target: DomNode
+               //              The target TreeNode.rowNode
+               // source: dojo.dnd.Source
+               //              The source container the nodes were dragged from, perhaps another Tree or a plain dojo.dnd.Source
+               // returns: Object[]
+               //              Array of name/value hashes for each new item to be added to the Tree, like:
+               // |    [
+               // |            { id: 123, label: "apple", foo: "bar" },
+               // |            { id: 456, label: "pear", zaz: "bam" }
+               // |    ]
+               // tags:
+               //              extension
+               return [{}];
        },
+       =====*/
+       itemCreator: null,
 
-       ////////////////// Miscellaneous functions ////////////////
+       // onDndCancel: [protected] Function
+       //              Parameter to dndController, see `dijit.tree.dndSource.onDndCancel`.
+       //              Generally this doesn't need to be set.
+       onDndCancel: null,
 
-       focusNode: function(/* _tree.Node */ node){
+/*=====
+       checkAcceptance: function(source, nodes){
                // summary:
-               //              Focus on the specified node (which must be visible)
+               //              Checks if the Tree itself can accept nodes from this source
+               // source: dijit.tree._dndSource
+               //              The source which provides items
+               // nodes: DOMNode[]
+               //              Array of DOM nodes corresponding to nodes being dropped, dijitTreeRow nodes if
+               //              source is a dijit.Tree.
                // tags:
-               //              protected
+               //              extension
+               return true;    // Boolean
+       },
+=====*/
+       checkAcceptance: null,
+
+/*=====
+       checkItemAcceptance: function(target, source, position){
+               // summary:
+               //              Stub function to be overridden if one wants to check for the ability to drop at the node/item level
+               // description:
+               //              In the base case, this is called to check if target can become a child of source.
+               //              When betweenThreshold is set, position="before" or "after" means that we
+               //              are asking if the source node can be dropped before/after the target node.
+               // target: DOMNode
+               //              The dijitTreeRoot DOM node inside of the TreeNode that we are dropping on to
+               //              Use dijit.getEnclosingWidget(target) to get the TreeNode.
+               // source: dijit.tree.dndSource
+               //              The (set of) nodes we are dropping
+               // position: String
+               //              "over", "before", or "after"
+               // tags:
+               //              extension
+               return true;    // Boolean
+       },
+=====*/
+       checkItemAcceptance: null,
+
+       // dragThreshold: Integer
+       //              Number of pixels mouse moves before it's considered the start of a drag operation
+       dragThreshold: 5,
+
+       // betweenThreshold: Integer
+       //              Set to a positive value to allow drag and drop "between" nodes.
+       //
+       //              If during DnD mouse is over a (target) node but less than betweenThreshold
+       //              pixels from the bottom edge, dropping the the dragged node will make it
+       //              the next sibling of the target node, rather than the child.
+       //
+       //              Similarly, if mouse is over a target node but less that betweenThreshold
+       //              pixels from the top edge, dropping the dragged node will make it
+       //              the target node's previous sibling rather than the target node's child.
+       betweenThreshold: 0,
+
+       // _nodePixelIndent: Integer
+       //              Number of pixels to indent tree nodes (relative to parent node).
+       //              Default is 19 but can be overridden by setting CSS class dijitTreeIndent
+       //              and calling resize() or startup() on tree after it's in the DOM.
+       _nodePixelIndent: 19,
 
-               // set focus so that the label will be voiced using screen readers
-               dijit.focus(node.labelNode);
+       _publish: function(/*String*/ topicName, /*Object*/ message){
+               // summary:
+               //              Publish a message for this widget/topic
+               dojo.publish(this.id, [dojo.mixin({tree: this, event: topicName}, message || {})]);
        },
 
-       _selectNode: function(/*_tree.Node*/ node){
-               // summary:
-               //              Mark specified node as select, and unmark currently selected node.
-               // tags:
-               //              protected
+       postMixInProperties: function(){
+               this.tree = this;
 
-               if(this.selectedNode && !this.selectedNode._destroyed){
-                       this.selectedNode.setSelected(false);
-               }
-               if(node){
-                       node.setSelected(true);
+               if(this.autoExpand){
+                       // There's little point in saving opened/closed state of nodes for a Tree
+                       // that initially opens all it's nodes.
+                       this.persist = false;
                }
-               this.selectedNode = node;
-       },
-
-       _onNodeFocus: function(/*dijit._Widget*/ node){
-               // summary:
-               //              Called when a TreeNode gets focus, either by user clicking
-               //              it, or programatically by arrow key handling code.
-               // description:
-               //              It marks that the current node is the selected one, and the previously
-               //              selected node no longer is.
 
-               if(node && node != this.lastFocused){
-                       if(this.lastFocused && !this.lastFocused._destroyed){
-                               // mark that the previously focsable node is no longer focusable
-                               this.lastFocused.setFocusable(false);
-                       }
+               this._itemNodesMap={};
 
-                       // mark that the new node is the currently selected one
-                       node.setFocusable(true);
-                       this.lastFocused = node;
+               if(!this.cookieName){
+                       this.cookieName = this.id + "SaveStateCookie";
                }
-       },
 
-       _onNodeMouseEnter: function(/*dijit._Widget*/ node){
-               // summary:
-               //              Called when mouse is over a node (onmouseenter event),
-               //              this is monitored by the DND code
-       },
+               this._loadDeferred = new dojo.Deferred();
 
-       _onNodeMouseLeave: function(/*dijit._Widget*/ node){
-               // summary:
-               //              Called when mouse leaves a node (onmouseleave event),
-               //              this is monitored by the DND code
+               this.inherited(arguments);
        },
 
-       //////////////// Events from the model //////////////////////////
-
-       _onItemChange: function(/*Item*/ item){
-               // summary:
-               //              Processes notification of a change to an item's scalar values like label
-               var model = this.model,
-                       identity = model.getIdentity(item),
-                       nodes = this._itemNodesMap[identity];
+       postCreate: function(){
+               this._initState();
 
-               if(nodes){
-                       var label = this.getLabel(item),
-                               tooltip = this.getTooltip(item);
-                       dojo.forEach(nodes, function(node){
-                               node.set({
-                                       item: item,             // theoretically could be new JS Object representing same item
-                                       label: label,
-                                       tooltip: tooltip
-                               });
-                               node._updateItemClasses(item);
-                       });
+               // Create glue between store and Tree, if not specified directly by user
+               if(!this.model){
+                       this._store2model();
                }
-       },
 
-       _onItemChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
-               // summary:
-               //              Processes notification of a change to an item's children
-               var model = this.model,
-                       identity = model.getIdentity(parent),
-                       parentNodes = this._itemNodesMap[identity];
+               // monitor changes to items
+               this.connect(this.model, "onChange", "_onItemChange");
+               this.connect(this.model, "onChildrenChange", "_onItemChildrenChange");
+               this.connect(this.model, "onDelete", "_onItemDelete");
 
-               if(parentNodes){
-                       dojo.forEach(parentNodes,function(parentNode){
-                               parentNode.setChildItems(newChildrenList);
-                       });
-               }
-       },
+               this._load();
 
-       _onItemDelete: function(/*Item*/ item){
-               // summary:
-               //              Processes notification of a deletion of an item
-               var model = this.model,
-                       identity = model.getIdentity(item),
-                       nodes = this._itemNodesMap[identity];
+               this.inherited(arguments);
 
-               if(nodes){
-                       dojo.forEach(nodes,function(node){
-                               var parent = node.getParent();
-                               if(parent){
-                                       // if node has not already been orphaned from a _onSetItem(parent, "children", ..) call...
-                                       parent.removeChild(node);
+               if(this.dndController){
+                       if(dojo.isString(this.dndController)){
+                               this.dndController = dojo.getObject(this.dndController);
+                       }
+                       var params={};
+                       for(var i=0; i<this.dndParams.length;i++){
+                               if(this[this.dndParams[i]]){
+                                       params[this.dndParams[i]] = this[this.dndParams[i]];
                                }
-                               node.destroyRecursive();
-                       });
-                       delete this._itemNodesMap[identity];
-               }
-       },
-
-       /////////////// Miscellaneous funcs
-
-       _initState: function(){
-               // summary:
-               //              Load in which nodes should be opened automatically
-               if(this.persist){
-                       var cookie = dojo.cookie(this.cookieName);
-                       this._openedItemIds = {};
-                       if(cookie){
-                               dojo.forEach(cookie.split(','), function(item){
-                                       this._openedItemIds[item] = true;
-                               }, this);
                        }
+                       this.dndController = new this.dndController(this, params);
                }
        },
-       _state: function(item,expanded){
-               // summary:
-               //              Query or set expanded state for an item,
-               if(!this.persist){
-                       return false;
-               }
-               var id=this.model.getIdentity(item);
-               if(arguments.length === 1){
-                       return this._openedItemIds[id];
-               }
-               if(expanded){
-                       this._openedItemIds[id] = true;
-               }else{
-                       delete this._openedItemIds[id];
-               }
-       },
-       _saveState: function(){
-               // summary:
-               //              Create and save a cookie with the currently expanded nodes identifiers
-               if(!this.persist){
-                       return;
-               }
-               var ary = [];
-               for(var id in this._openedItemIds){
-                       ary.push(id);
-               }
-               dojo.cookie(this.cookieName, ary.join(","), {expires:365});
-       },
 
-       destroy: function(){
-               if(this._curSearch){
-                       clearTimeout(this._curSearch.timer);
-                       delete this._curSearch;
-               }
-               if(this.rootNode){
-                       this.rootNode.destroyRecursive();
-               }
-               if(this.dndController && !dojo.isString(this.dndController)){
-                       this.dndController.destroy();
-               }
-               this.rootNode = null;
-               this.inherited(arguments);
-       },
+       _store2model: function(){
+               // summary:
+               //              User specified a store&query rather than model, so create model from store/query
+               this._v10Compat = true;
+               dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");
 
-       destroyRecursive: function(){
-               // A tree is treated as a leaf, not as a node with children (like a grid),
-               // but defining destroyRecursive for back-compat.
-               this.destroy();
-       },
+               var modelParams = {
+                       id: this.id + "_ForestStoreModel",
+                       store: this.store,
+                       query: this.query,
+                       childrenAttrs: this.childrenAttr
+               };
 
-       resize: function(changeSize){
-               if(changeSize){
-                       dojo.marginBox(this.domNode, changeSize);
-                       dojo.style(this.domNode, "overflow", "auto");   // for scrollbars
+               // Only override the model's mayHaveChildren() method if the user has specified an override
+               if(this.params.mayHaveChildren){
+                       modelParams.mayHaveChildren = dojo.hitch(this, "mayHaveChildren");
                }
 
-               // The only JS sizing involved w/tree is the indentation, which is specified
-               // in CSS and read in through this dummy indentDetector node (tree must be
-               // visible and attached to the DOM to read this)
-               this._nodePixelIndent = dojo.marginBox(this.tree.indentDetector).w;
-
-               if(this.tree.rootNode){
-                       // If tree has already loaded, then reset indent for all the nodes
-                       this.tree.rootNode.set('indent', this.showRoot ? 0 : -1);
+               if(this.params.getItemChildren){
+                       modelParams.getChildren = dojo.hitch(this, function(item, onComplete, onError){
+                               this.getItemChildren((this._v10Compat && item === this.model.root) ? null : item, onComplete, onError);
+                       });
                }
+               this.model = new dijit.tree.ForestStoreModel(modelParams);
+
+               // For backwards compatibility, the visibility of the root node is controlled by
+               // whether or not the user has specified a label
+               this.showRoot = Boolean(this.label);
        },
 
-       _createTreeNode: function(/*Object*/ args){
+       onLoad: function(){
                // summary:
-               //              creates a TreeNode
+               //              Called when tree finishes loading and expanding.
                // description:
-               //              Developers can override this method to define their own TreeNode class;
-               //              However it will probably be removed in a future release in favor of a way
-               //              of just specifying a widget for the label, rather than one that contains
-               //              the children too.
-               return new dijit._TreeNode(args);
-       }
-});
-
-// For back-compat.  TODO: remove in 2.0
-
-
+               //              If persist == true the loading may encompass many levels of fetches
+               //              from the data store, each asynchronous.   Waits for all to finish.
+               // tags:
+               //              callback
+       },
 
-}
+       _load: function(){
+               // summary:
+               //              Initial load of the tree.
+               //              Load root node (possibly hidden) and it's children.
+               this.model.getRoot(
+                       dojo.hitch(this, function(item){
+                               var rn = (this.rootNode = this.tree._createTreeNode({
+                                       item: item,
+                                       tree: this,
+                                       isExpandable: true,
+                                       label: this.label || this.getLabel(item),
+                                       indent: this.showRoot ? 0 : -1
+                               }));
+                               if(!this.showRoot){
+                                       rn.rowNode.style.display="none";
+                                       // if root is not visible, move tree role to the invisible
+                                       // root node's containerNode, see #12135
+                                       dijit.setWaiRole(this.domNode, 'presentation');
+                                       
+                                       dijit.setWaiRole(rn.labelNode, 'presentation');
+                                       dijit.setWaiRole(rn.containerNode, 'tree');
+                               }
+                               this.domNode.appendChild(rn.domNode);
+                               var identity = this.model.getIdentity(item);
+                               if(this._itemNodesMap[identity]){
+                                       this._itemNodesMap[identity].push(rn);
+                               }else{
+                                       this._itemNodesMap[identity] = [rn];
+                               }
 
-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");
+                               rn._updateLayout();             // sets "dijitTreeIsRoot" CSS classname
 
+                               // load top level children and then fire onLoad() event
+                               this._expandNode(rn).addCallback(dojo.hitch(this, function(){
+                                       this._loadDeferred.callback(true);
+                                       this.onLoad();
+                               }));
+                       }),
+                       function(err){
+                               console.error(this, ": error loading root: ", err);
+                       }
+               );
+       },
 
+       getNodesByItem: function(/*dojo.data.Item or id*/ item){
+               // summary:
+               //              Returns all tree nodes that refer to an item
+               // returns:
+               //              Array of tree nodes that refer to passed item
 
+               if(!item){ return []; }
+               var identity = dojo.isString(item) ? item : this.model.getIdentity(item);
+               // return a copy so widget don't get messed up by changes to returned array
+               return [].concat(this._itemNodesMap[identity]);
+       },
 
-/*
-       Container states:
-               ""              - normal state
-               "Over"  - mouse over a container
-       Container item states:
-               ""              - normal state
-               "Over"  - mouse over a container item
-*/
+       _setSelectedItemAttr: function(/*dojo.data.Item or id*/ item){
+               this.set('selectedItems', [item]);
+       },
 
-/*=====
-dojo.declare("dojo.dnd.__ContainerArgs", [], {
-       creator: function(){
+       _setSelectedItemsAttr: function(/*dojo.data.Items or ids*/ items){
                // summary:
-               //              a creator function, which takes a data item, and returns an object like that:
-               //              {node: newNode, data: usedData, type: arrayOfStrings}
+               //              Select tree nodes related to passed items.
+               //              WARNING: if model use multi-parented items or desired tree node isn't already loaded
+               //              behavior is undefined. Use set('paths', ...) instead.
+               var tree = this;
+               this._loadDeferred.addCallback( dojo.hitch(this, function(){
+                       var identities = dojo.map(items, function(item){
+                               return (!item || dojo.isString(item)) ? item : tree.model.getIdentity(item);
+                       });
+                       var nodes = [];
+                       dojo.forEach(identities, function(id){
+                               nodes = nodes.concat(tree._itemNodesMap[id] || []);
+                       });
+                       this.set('selectedNodes', nodes);
+               }));
        },
 
-       // 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: {},
-       =====*/
+       _setPathAttr: function(/*Item[] || String[]*/ path){
+               // summary:
+               //      Singular variant of _setPathsAttr
+               if(path.length) {
+                       return this.set("paths", [path]);
+               } else {
+                       //Empty list is interpreted as "select nothing"
+                       return this.set("paths", []);
+               }
+       },
        
-       constructor: function(node, params){
+       _setPathsAttr: function(/*Item[][] || String[][]*/ paths){
                // 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;
+               //              Select the tree nodes identified by passed paths.
+               // paths:
+               //              Array of arrays of items or item id's
+               // returns:
+               //              Deferred to indicate when the set is complete
+               var tree = this;
 
-               // states
-               this.containerState = "";
-               dojo.addClass(this.node, "dojoDndContainer");
+               // We may need to wait for some nodes to expand, so setting
+               // each path will involve a Deferred. We bring those deferreds
+               // together witha DeferredList.
+               return new dojo.DeferredList(dojo.map(paths, function(path){
+                       var d = new dojo.Deferred();
+                       
+                       // normalize path to use identity
+                       path = dojo.map(path, function(item){
+                               return dojo.isString(item) ? item : tree.model.getIdentity(item);
+                       });
+
+                       if(path.length){
+                               // Wait for the tree to load, if it hasn't already.
+                               tree._loadDeferred.addCallback(function(){ selectPath(path, [tree.rootNode], d); });
+                       }else{
+                               d.errback("Empty path");
+                       }
+                       return d;
+               })).addCallback(setNodes);
+
+               function selectPath(path, nodes, def){
+                       // Traverse path; the next path component should be among "nodes".
+                       var nextPath = path.shift();
+                       var nextNode = dojo.filter(nodes, function(node){
+                               return node.getIdentity() == nextPath;
+                       })[0];
+                       if(!!nextNode){
+                               if(path.length){
+                                       tree._expandNode(nextNode).addCallback(function(){ selectPath(path, nextNode.getChildren(), def); });
+                               }else{
+                                       //Successfully reached the end of this path
+                                       def.callback(nextNode);
+                               }
+                       } else {
+                               def.errback("Could not expand path at " + nextPath);
+                       }
+               }
                
-               // mark up children
-               if(!(params && params._skipStartup)){
-                       this.startup();
+               function setNodes(newNodes){
+                       //After all expansion is finished, set the selection to
+                       //the set of nodes successfully found.
+                       tree.set("selectedNodes", dojo.map(
+                               dojo.filter(newNodes,function(x){return x[0];}),
+                               function(x){return x[1];}));
                }
+       },
 
-               // 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")
-               ];
+       _setSelectedNodeAttr: function(node){
+               this.set('selectedNodes', [node]);
        },
-       
-       // object attributes (for markup)
-       creator: function(){
-               // summary:
-               //              creator function, dummy at the moment
+       _setSelectedNodesAttr: function(nodes){
+               this._loadDeferred.addCallback( dojo.hitch(this, function(){
+                       this.dndController.setSelection(nodes);
+               }));
        },
-       
-       // abstract access to the map
-       getItem: function(/*String*/ key){
+
+
+       ////////////// Data store related functions //////////////////////
+       // These just get passed to the model; they are here for back-compat
+
+       mayHaveChildren: function(/*dojo.data.Item*/ item){
                // summary:
-               //              returns a data item by its key (id)
-               return this.map[key];   // dojo.dnd.Item
+               //              Deprecated.   This should be specified on the model itself.
+               //
+               //              Overridable function to tell if an item has or may have children.
+               //              Controls whether or not +/- expando icon is shown.
+               //              (For efficiency reasons we may not want to check if an element actually
+               //              has children until user clicks the expando node)
+               // tags:
+               //              deprecated
        },
-       setItem: function(/*String*/ key, /*dojo.dnd.Item*/ data){
+
+       getItemChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){
                // summary:
-               //              associates a data item with its key (id)
-               this.map[key] = data;
+               //              Deprecated.   This should be specified on the model itself.
+               //
+               //              Overridable function that return array of child items of given parent item,
+               //              or if parentItem==null then return top items in tree
+               // tags:
+               //              deprecated
        },
-       delItem: function(/*String*/ key){
+
+       ///////////////////////////////////////////////////////
+       // Functions for converting an item to a TreeNode
+       getLabel: function(/*dojo.data.Item*/ item){
                // summary:
-               //              removes a data item from the map by its key (id)
-               delete this.map[key];
+               //              Overridable function to get the label for a tree node (given the item)
+               // tags:
+               //              extension
+               return this.model.getLabel(item);       // String
        },
-       forInItems: function(/*Function*/ f, /*Object?*/ o){
+
+       getIconClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
                // 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
+               //              Overridable function to return CSS class name to display icon
+               // tags:
+               //              extension
+               return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "dijitLeaf"
        },
-       clearItems: function(){
+
+       getLabelClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
                // summary:
-               //              removes all data items from the map
-               this.map = {};
+               //              Overridable function to return CSS class name to display label
+               // tags:
+               //              extension
        },
-       
-       // methods
-       getAllNodes: function(){
+
+       getRowClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
                // summary:
-               //              returns a list (an array) of all valid child nodes
-               return dojo.query("> .dojoDndItem", this.parent);       // NodeList
+               //              Overridable function to return CSS class name to display row
+               // tags:
+               //              extension
        },
-       sync: function(){
+
+       getIconStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
                // 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
+               //              Overridable function to return CSS styles to display icon
+               // returns:
+               //              Object suitable for input to dojo.style() like {backgroundImage: "url(...)"}
+               // tags:
+               //              extension
+       },
+
+       getLabelStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+               // summary:
+               //              Overridable function to return CSS styles to display label
+               // returns:
+               //              Object suitable for input to dojo.style() like {color: "red", background: "green"}
+               // tags:
+               //              extension
        },
-       insertNodes: function(data, before, anchor){
+
+       getRowStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
                // 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;
+               //              Overridable function to return CSS styles to display row
+               // returns:
+               //              Object suitable for input to dojo.style() like {background-color: "#bbb"}
+               // tags:
+               //              extension
+       },
+
+       getTooltip: function(/*dojo.data.Item*/ item){
+               // summary:
+               //              Overridable function to get the tooltip for a tree node (given the item)
+               // tags:
+               //              extension
+               return "";      // String
+       },
+
+       /////////// Keyboard and Mouse handlers ////////////////////
+
+       _onKeyPress: function(/*Event*/ e){
+               // summary:
+               //              Translates keypress events into commands for the controller
+               if(e.altKey){ return; }
+               var dk = dojo.keys;
+               var treeNode = dijit.getEnclosingWidget(e.target);
+               if(!treeNode){ return; }
+
+               var key = e.charOrCode;
+               if(typeof key == "string" && key != " "){       // handle printables (letter navigation)
+                       // Check for key navigation.
+                       if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){
+                               this._onLetterKeyNav( { node: treeNode, key: key.toLowerCase() } );
+                               dojo.stopEvent(e);
                        }
-               }else{
-                       if(anchor){
-                               anchor = anchor.nextSibling;
+               }else{  // handle non-printables (arrow keys)
+                       // clear record of recent printables (being saved for multi-char letter navigation),
+                       // because "a", down-arrow, "b" shouldn't search for "ab"
+                       if(this._curSearch){
+                               clearTimeout(this._curSearch.timer);
+                               delete this._curSearch;
                        }
-               }
-               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);
+
+                       var map = this._keyHandlerMap;
+                       if(!map){
+                               // setup table mapping keys to events
+                               map = {};
+                               map[dk.ENTER]="_onEnterKey";
+                               //On WebKit based browsers, the combination ctrl-enter
+                               //does not get passed through. To allow accessible
+                               //multi-select on those browsers, the space key is
+                               //also used for selection.
+                               map[dk.SPACE]= map[" "] = "_onEnterKey";
+                               map[this.isLeftToRight() ? dk.LEFT_ARROW : dk.RIGHT_ARROW]="_onLeftArrow";
+                               map[this.isLeftToRight() ? dk.RIGHT_ARROW : dk.LEFT_ARROW]="_onRightArrow";
+                               map[dk.UP_ARROW]="_onUpArrow";
+                               map[dk.DOWN_ARROW]="_onDownArrow";
+                               map[dk.HOME]="_onHomeKey";
+                               map[dk.END]="_onEndKey";
+                               this._keyHandlerMap = map;
                        }
-               }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);
+                       if(this._keyHandlerMap[key]){
+                               this[this._keyHandlerMap[key]]( { node: treeNode, item: treeNode.item, evt: e } );
+                               dojo.stopEvent(e);
                        }
                }
-               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);
+       _onEnterKey: function(/*Object*/ message){
+               this._publish("execute", { item: message.item, node: message.node } );
+               this.dndController.userSelect(message.node, dojo.isCopyKey( message.evt ), message.evt.shiftKey);
+               this.onClick(message.item, message.node, message.evt);
        },
-       startup: function(){
+
+       _onDownArrow: function(/*Object*/ message){
                // 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]; }
-                       }
+               //              down arrow pressed; get next visible node, set focus there
+               var node = this._getNextNode(message.node);
+               if(node && node.isTreeNode){
+                       this.focusNode(node);
                }
-               this.defaultCreator = dojo.dnd._defaultCreator(this.parent);
-
-               // process specially marked children
-               this.sync();
        },
 
-       // mouse events
-       onMouseOver: function(e){
+       _onUpArrow: function(/*Object*/ message){
                // 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;
+               //              Up arrow pressed; move to previous visible node
+
+               var node = message.node;
+
+               // if younger siblings
+               var previousSibling = node.getPreviousSibling();
+               if(previousSibling){
+                       node = previousSibling;
+                       // if the previous node is expanded, dive in deep
+                       while(node.isExpandable && node.isExpanded && node.hasChildren()){
+                               // move to the last child
+                               var children = node.getChildren();
+                               node = children[children.length-1];
+                       }
+               }else{
+                       // if this is the first child, return the parent
+                       // unless the parent is the root of a tree with a hidden root
+                       var parent = node.getParent();
+                       if(!(!this.showRoot && parent === this.rootNode)){
+                               node = parent;
                        }
                }
-               if(!n){
-                       this._changeState("Container", "Over");
-                       this.onOverEvent();
+
+               if(node && node.isTreeNode){
+                       this.focusNode(node);
                }
-               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){
+
+       _onRightArrow: function(/*Object*/ message){
                // 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;
+               //              Right arrow pressed; go to child node
+               var node = message.node;
+
+               // if not expanded, expand, else move to 1st child
+               if(node.isExpandable && !node.isExpanded){
+                       this._expandNode(node);
+               }else if(node.hasChildren()){
+                       node = node.getChildren()[0];
+                       if(node && node.isTreeNode){
+                               this.focusNode(node);
                        }
                }
-               if(this.current){
-                       this._removeItemClass(this.current, "Over");
-                       this.current = null;
-               }
-               this._changeState("Container", "");
-               this.onOutEvent();
        },
-       onSelectStart: function(e){
+
+       _onLeftArrow: function(/*Object*/ message){
                // summary:
-               //              event processor for onselectevent and ondragevent
-               // e: Event
-               //              mouse event
-               if(!this.skipForm || !dojo.dnd.isFormElement(e)){
-                       dojo.stopEvent(e);
+               //              Left arrow pressed.
+               //              If not collapsed, collapse, else move to parent.
+
+               var node = message.node;
+
+               if(node.isExpandable && node.isExpanded){
+                       this._collapseNode(node);
+               }else{
+                       var parent = node.getParent();
+                       if(parent && parent.isTreeNode && !(!this.showRoot && parent === this.rootNode)){
+                               this.focusNode(parent);
+                       }
                }
        },
-       
-       // 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){
+
+       _onHomeKey: function(){
                // summary:
-               //              gets a child, which is under the mouse at the moment, or null
-               // e: Event
-               //              a mouse event
-               var node = e.target;
+               //              Home key pressed; get first visible node, and set focus there
+               var node = this._getRootOrFirstNode();
                if(node){
-                       for(var parent = node.parentNode; parent; node = parent, parent = node.parentNode){
-                               if(parent == this.parent && dojo.hasClass(node, "dojoDndItem")){ return node; }
-                       }
+                       this.focusNode(node);
                }
-               return null;
        },
-       _normalizedCreator: function(/*dojo.dnd.Item*/ item, /*String*/ hint){
+
+       _onEndKey: function(/*Object*/ message){
                // 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;
-       }
-});
+               //              End key pressed; go to last visible node.
 
-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
-       };
-};
+               var node = this.rootNode;
+               while(node.isExpanded){
+                       var c = node.getChildren();
+                       node = c[c.length - 1];
+               }
 
-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
-};
+               if(node && node.isTreeNode){
+                       this.focusNode(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
-};
+       // multiCharSearchDuration: Number
+       //              If multiple characters are typed where each keystroke happens within
+       //              multiCharSearchDuration of the previous keystroke,
+       //              search for nodes matching all the keystrokes.
+       //
+       //              For example, typing "ab" will search for entries starting with
+       //              "ab" unless the delay between "a" and "b" is greater than multiCharSearchDuration.
+       multiCharSearchDuration: 250,
 
-// 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"};
+       _onLetterKeyNav: function(message){
+               // summary:
+               //              Called when user presses a prinatable key; search for node starting with recently typed letters.
+               // message: Object
+               //              Like { node: TreeNode, key: 'a' } where key is the key the user pressed.
 
-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
+               // Branch depending on whether this key starts a new search, or modifies an existing search
+               var cs = this._curSearch;
+               if(cs){
+                       // We are continuing a search.  Ex: user has pressed 'a', and now has pressed
+                       // 'b', so we want to search for nodes starting w/"ab".
+                       cs.pattern = cs.pattern + message.key;
+                       clearTimeout(cs.timer);
                }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));
+                       // We are starting a new search
+                       cs = this._curSearch = {
+                                       pattern: message.key,
+                                       startNode: message.node
+                       };
                }
-               if(!n.id){
-                       n.id = dojo.dnd.getUniqueId();
+
+               // set/reset timer to forget recent keystrokes
+               var self = this;
+               cs.timer = setTimeout(function(){
+                       delete self._curSearch;
+               }, this.multiCharSearchDuration);
+
+               // Navigate to TreeNode matching keystrokes [entered so far].
+               var node = cs.startNode;
+               do{
+                       node = this._getNextNode(node);
+                       //check for last node, jump to first node if necessary
+                       if(!node){
+                               node = this._getRootOrFirstNode();
+                       }
+               }while(node !== cs.startNode && (node.label.toLowerCase().substr(0, cs.pattern.length) != cs.pattern));
+               if(node && node.isTreeNode){
+                       // no need to set focus if back where we started
+                       if(node !== cs.startNode){
+                               this.focusNode(node);
+                       }
                }
-               return {node: n, data: data, type: type};
-       };
-};
+       },
 
-}
+       isExpandoNode: function(node, widget){
+               // summary:
+               //              check whether a dom node is the expandoNode for a particular TreeNode widget
+               return dojo.isDescendant(node, widget.expandoNode);
+       },
+       _onClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
+               // summary:
+               //              Translates click events into commands for the controller to process
 
-if(!dojo._hasResource["dijit.tree._dndContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree._dndContainer"] = true;
-dojo.provide("dijit.tree._dndContainer");
+               var domElement = e.target,
+                       isExpandoClick = this.isExpandoNode(domElement, nodeWidget);
 
+               if( (this.openOnClick && nodeWidget.isExpandable) || isExpandoClick ){
+                       // expando node was clicked, or label of a folder node was clicked; open it
+                       if(nodeWidget.isExpandable){
+                               this._onExpandoClick({node:nodeWidget});
+                       }
+               }else{
+                       this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
+                       this.onClick(nodeWidget.item, nodeWidget, e);
+                       this.focusNode(nodeWidget);
+               }
+               dojo.stopEvent(e);
+       },
+       _onDblClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
+               // summary:
+               //              Translates double-click events into commands for the controller to process
 
+               var domElement = e.target,
+                       isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText);
 
-dojo.declare("dijit.tree._dndContainer",
-       null,
-       {
+               if( (this.openOnDblClick && nodeWidget.isExpandable) ||isExpandoClick ){
+                       // expando node was clicked, or label of a folder node was clicked; open it
+                       if(nodeWidget.isExpandable){
+                               this._onExpandoClick({node:nodeWidget});
+                       }
+               }else{
+                       this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
+                       this.onDblClick(nodeWidget.item, nodeWidget, e);
+                       this.focusNode(nodeWidget);
+               }
+               dojo.stopEvent(e);
+       },
 
+       _onExpandoClick: function(/*Object*/ message){
                // summary:
-               //              This is a base class for `dijit.tree._dndSelector`, and isn't meant to be used directly.
-               //              It's modeled after `dojo.dnd.Container`.
-               // tags:
-               //              protected
+               //              User clicked the +/- icon; expand or collapse my children.
+               var node = message.node;
 
-               /*=====
-               // current: DomNode
-               //              The currently hovered TreeNode.rowNode (which is the DOM node
-               //              associated w/a given node in the tree, excluding it's descendants)
-               current: null,
-               =====*/
+               // If we are collapsing, we might be hiding the currently focused node.
+               // Also, clicking the expando node might have erased focus from the current node.
+               // For simplicity's sake just focus on the node with the expando.
+               this.focusNode(node);
 
-               constructor: function(tree, params){
-                       // summary:
-                       //              A constructor of the Container
-                       // tree: Node
-                       //              Node or node's id to build the container on
-                       // params: dijit.tree.__SourceArgs
-                       //              A dict of parameters, which gets mixed into the object
-                       // tags:
-                       //              private
-                       this.tree = tree;
-                       this.node = tree.domNode;       // TODO: rename; it's not a TreeNode but the whole Tree
-                       dojo.mixin(this, params);
+               if(node.isExpanded){
+                       this._collapseNode(node);
+               }else{
+                       this._expandNode(node);
+               }
+       },
 
-                       // class-specific variables
-                       this.map = {};
-                       this.current = null;    // current TreeNode's DOM node
+       onClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
+               // summary:
+               //              Callback when a tree node is clicked
+               // tags:
+               //              callback
+       },
+       onDblClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
+               // summary:
+               //              Callback when a tree node is double-clicked
+               // tags:
+               //              callback
+       },
+       onOpen: function(/* dojo.data */ item, /*TreeNode*/ node){
+               // summary:
+               //              Callback when a node is opened
+               // tags:
+               //              callback
+       },
+       onClose: function(/* dojo.data */ item, /*TreeNode*/ node){
+               // summary:
+               //              Callback when a node is closed
+               // tags:
+               //              callback
+       },
+
+       _getNextNode: function(node){
+               // summary:
+               //              Get next visible node
+
+               if(node.isExpandable && node.isExpanded && node.hasChildren()){
+                       // if this is an expanded node, get the first child
+                       return node.getChildren()[0];           // _TreeNode
+               }else{
+                       // find a parent node with a sibling
+                       while(node && node.isTreeNode){
+                               var returnNode = node.getNextSibling();
+                               if(returnNode){
+                                       return returnNode;              // _TreeNode
+                               }
+                               node = node.getParent();
+                       }
+                       return null;
+               }
+       },
 
-                       // states
-                       this.containerState = "";
-                       dojo.addClass(this.node, "dojoDndContainer");
+       _getRootOrFirstNode: function(){
+               // summary:
+               //              Get first visible node
+               return this.showRoot ? this.rootNode : this.rootNode.getChildren()[0];
+       },
 
-                       // set up events
-                       this.events = [
-                               // container level events
-                               dojo.connect(this.node, "onmouseenter", this, "onOverEvent"),
-                               dojo.connect(this.node, "onmouseleave", this, "onOutEvent"),
+       _collapseNode: function(/*_TreeNode*/ node){
+               // summary:
+               //              Called when the user has requested to collapse the node
 
-                               // switching between TreeNodes
-                               dojo.connect(this.tree, "_onNodeMouseEnter", this, "onMouseOver"),
-                               dojo.connect(this.tree, "_onNodeMouseLeave", this, "onMouseOut"),
+               if(node._expandNodeDeferred){
+                       delete node._expandNodeDeferred;
+               }
 
-                               // cancel text selection and text dragging
-                               dojo.connect(this.node, "ondragstart", dojo, "stopEvent"),
-                               dojo.connect(this.node, "onselectstart", dojo, "stopEvent")
-                       ];
-               },
+               if(node.isExpandable){
+                       if(node.state == "LOADING"){
+                               // ignore clicks while we are in the process of loading data
+                               return;
+                       }
 
-               getItem: function(/*String*/ key){
-                       // summary:
-                       //              Returns the dojo.dnd.Item (representing a dragged node) by it's key (id).
-                       //              Called by dojo.dnd.Source.checkAcceptance().
-                       // tags:
-                       //              protected
+                       node.collapse();
+                       this.onClose(node.item, node);
 
-                       var node = this.selection[key],
-                               ret = {
-                                       data: dijit.getEnclosingWidget(node),
-                                       type: ["treeNode"]
-                               };
+                       if(node.item){
+                               this._state(node.item,false);
+                               this._saveState();
+                       }
+               }
+       },
 
-                       return ret;     // dojo.dnd.Item
-               },
+       _expandNode: function(/*_TreeNode*/ node, /*Boolean?*/ recursive){
+               // summary:
+               //              Called when the user has requested to expand the node
+               // recursive:
+               //              Internal flag used when _expandNode() calls itself, don't set.
+               // returns:
+               //              Deferred that fires when the node is loaded and opened and (if persist=true) all it's descendants
+               //              that were previously opened too
 
-               destroy: function(){
-                       // summary:
-                       //              Prepares this object to be garbage-collected
+               if(node._expandNodeDeferred && !recursive){
+                       // there's already an expand in progress (or completed), so just return
+                       return node._expandNodeDeferred;        // dojo.Deferred
+               }
 
-                       dojo.forEach(this.events, dojo.disconnect);
-                       // this.clearItems();
-                       this.node = this.parent = null;
-               },
+               var model = this.model,
+                       item = node.item,
+                       _this = this;
 
-               // mouse events
-               onMouseOver: function(/*TreeNode*/ widget, /*Event*/ evt){
-                       // summary:
-                       //              Called when mouse is moved over a TreeNode
-                       // tags:
-                       //              protected
-                       this.current = widget.rowNode;
-                       this.currentWidget = widget;
-               },
+               switch(node.state){
+                       case "UNCHECKED":
+                               // need to load all the children, and then expand
+                               node.markProcessing();
 
-               onMouseOut: function(/*TreeNode*/ widget, /*Event*/ evt){
-                       // summary:
-                       //              Called when mouse is moved away from a TreeNode
-                       // tags:
-                       //              protected
-                       this.current = null;
-                       this.currentWidget = null;
-               },
+                               // Setup deferred to signal when the load and expand are finished.
+                               // Save that deferred in this._expandDeferred as a flag that operation is in progress.
+                               var def = (node._expandNodeDeferred = new dojo.Deferred());
 
-               _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;
-               },
+                               // Get the children
+                               model.getChildren(
+                                       item,
+                                       function(items){
+                                               node.unmarkProcessing();
 
-               _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);
-               },
+                                               // Display the children and also start expanding any children that were previously expanded
+                                               // (if this.persist == true).   The returned Deferred will fire when those expansions finish.
+                                               var scid = node.setChildItems(items);
 
-               _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);
-               },
+                                               // Call _expandNode() again but this time it will just to do the animation (default branch).
+                                               // The returned Deferred will fire when the animation completes.
+                                               // TODO: seems like I can avoid recursion and just use a deferred to sequence the events?
+                                               var ed = _this._expandNode(node, true);
 
-               onOverEvent: function(){
-                       // summary:
-                       //              This function is called once, when mouse is over our container
-                       // tags:
-                       //              protected
-                       this._changeState("Container", "Over");
-               },
+                                               // After the above two tasks (setChildItems() and recursive _expandNode()) finish,
+                                               // signal that I am done.
+                                               scid.addCallback(function(){
+                                                       ed.addCallback(function(){
+                                                               def.callback();
+                                                       })
+                                               });
+                                       },
+                                       function(err){
+                                               console.error(_this, ": error loading root children: ", err);
+                                       }
+                               );
+                               break;
 
-               onOutEvent: function(){
-                       // summary:
-                       //              This function is called once, when mouse is out of our container
-                       // tags:
-                       //              protected
-                       this._changeState("Container", "");
-               }
-});
+                       default:        // "LOADED"
+                               // data is already loaded; just expand node
+                               def = (node._expandNodeDeferred = node.expand());
 
-}
+                               this.onOpen(node.item, node);
 
-if(!dojo._hasResource["dijit.tree._dndSelector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.tree._dndSelector"] = true;
-dojo.provide("dijit.tree._dndSelector");
+                               if(item){
+                                       this._state(item, true);
+                                       this._saveState();
+                               }
+               }
 
+               return def;     // dojo.Deferred
+       },
 
+       ////////////////// Miscellaneous functions ////////////////
 
-dojo.declare("dijit.tree._dndSelector",
-       dijit.tree._dndContainer,
-       {
+       focusNode: function(/* _tree.Node */ node){
                // summary:
-               //              This is a base class for `dijit.tree.dndSource` , and isn't meant to be used directly.
-               //              It's based on `dojo.dnd.Selector`.
+               //              Focus on the specified node (which must be visible)
                // tags:
                //              protected
 
-               /*=====
-               // selection: Hash<String, DomNode>
-               //              (id, DomNode) map for every TreeNode that's currently selected.
-               //              The DOMNode is the TreeNode.rowNode.
-               selection: {},
-               =====*/
-
-               constructor: function(tree, params){
-                       // summary:
-                       //              Initialization
-                       // tags:
-                       //              private
-
-                       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")
-                       );
-               },
+               // set focus so that the label will be voiced using screen readers
+               dijit.focus(node.labelNode);
+       },
 
-               //      singular: Boolean
-               //              Allows selection of only one element, if true.
-               //              Tree hasn't been tested in singular=true mode, unclear if it works.
-               singular: false,
+       _onNodeFocus: function(/*dijit._Widget*/ node){
+               // summary:
+               //              Called when a TreeNode gets focus, either by user clicking
+               //              it, or programatically by arrow key handling code.
+               // description:
+               //              It marks that the current node is the selected one, and the previously
+               //              selected node no longer is.
 
-               // methods
+               if(node && node != this.lastFocused){
+                       if(this.lastFocused && !this.lastFocused._destroyed){
+                               // mark that the previously focsable node is no longer focusable
+                               this.lastFocused.setFocusable(false);
+                       }
 
-               getSelectedNodes: function(){
-                       // summary:
-                       //              Returns the set of selected nodes.
-                       //              Used by dndSource on the start of a drag.
-                       // tags:
-                       //              protected
-                       return this.selection;
-               },
+                       // mark that the new node is the currently selected one
+                       node.setFocusable(true);
+                       this.lastFocused = node;
+               }
+       },
 
-               selectNone: function(){
-                       // summary:
-                       //              Unselects all items
-                       // tags:
-                       //              private
+       _onNodeMouseEnter: function(/*dijit._Widget*/ node){
+               // summary:
+               //              Called when mouse is over a node (onmouseenter event),
+               //              this is monitored by the DND code
+       },
 
-                       return this._removeSelection()._removeAnchor(); // self
-               },
+       _onNodeMouseLeave: function(/*dijit._Widget*/ node){
+               // summary:
+               //              Called when mouse leaves a node (onmouseleave event),
+               //              this is monitored by the DND code
+       },
 
-               destroy: function(){
-                       // summary:
-                       //              Prepares the object to be garbage-collected
-                       this.inherited(arguments);
-                       this.selection = this.anchor = null;
-               },
+       //////////////// Events from the model //////////////////////////
 
-               // mouse events
-               onMouseDown: function(e){
-                       // summary:
-                       //              Event processor for onmousedown
-                       // e: Event
-                       //              mouse event
-                       // tags:
-                       //              protected
+       _onItemChange: function(/*Item*/ item){
+               // summary:
+               //              Processes notification of a change to an item's scalar values like label
+               var model = this.model,
+                       identity = model.getIdentity(item),
+                       nodes = this._itemNodesMap[identity];
 
-                       if(!this.current){ return; }
+               if(nodes){
+                       var label = this.getLabel(item),
+                               tooltip = this.getTooltip(item);
+                       dojo.forEach(nodes, function(node){
+                               node.set({
+                                       item: item,             // theoretically could be new JS Object representing same item
+                                       label: label,
+                                       tooltip: tooltip
+                               });
+                               node._updateItemClasses(item);
+                       });
+               }
+       },
 
-                       if(e.button == dojo.mouseButtons.RIGHT){ return; }      // ignore right-click
+       _onItemChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
+               // summary:
+               //              Processes notification of a change to an item's children
+               var model = this.model,
+                       identity = model.getIdentity(parent),
+                       parentNodes = this._itemNodesMap[identity];
 
-                       var treeNode = dijit.getEnclosingWidget(this.current),
-                               id = treeNode.id + "-dnd"       // so id doesn't conflict w/widget
+               if(parentNodes){
+                       dojo.forEach(parentNodes,function(parentNode){
+                               parentNode.setChildItems(newChildrenList);
+                       });
+               }
+       },
 
-                       if(!dojo.hasAttr(this.current, "id")){
-                               dojo.attr(this.current, "id", id);
-                       }
+       _onItemDelete: function(/*Item*/ item){
+               // summary:
+               //              Processes notification of a deletion of an item
+               var model = this.model,
+                       identity = model.getIdentity(item),
+                       nodes = this._itemNodesMap[identity];
 
-                       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");
+               if(nodes){
+                       dojo.forEach(nodes,function(node){
+                               // Remove node from set of selected nodes (if it's selected)
+                               this.dndController.removeTreeNode(node);
 
-                                       this.selection[this.current.id] = this.current;
-                               }
-                       }else{
-                               if(!this.singular && e.shiftKey){
-                                       if(dojo.isCopyKey(e)){
-                                               //TODO add range to selection
-                                       }else{
-                                               //TODO select new range from anchor
-                                       }
-                               }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;
-                                               }
-                                       }
+                               var parent = node.getParent();
+                               if(parent){
+                                       // if node has not already been orphaned from a _onSetItem(parent, "children", ..) call...
+                                       parent.removeChild(node);
                                }
-                       }
+                               node.destroyRecursive();
+                       }, this);
+                       delete this._itemNodesMap[identity];
+               }
+       },
 
-                       dojo.stopEvent(e);
-               },
+       /////////////// Miscellaneous funcs
 
-               onMouseUp: function(e){
-                       // summary:
-                       //              Event processor for onmouseup
-                       // e: Event
-                       //              mouse event
-                       // tags:
-                       //              protected
+       _initState: function(){
+               // summary:
+               //              Load in which nodes should be opened automatically
+               if(this.persist){
+                       var cookie = dojo.cookie(this.cookieName);
+                       this._openedItemIds = {};
+                       if(cookie){
+                               dojo.forEach(cookie.split(','), function(item){
+                                       this._openedItemIds[item] = true;
+                               }, this);
+                       }
+               }
+       },
+       _state: function(item,expanded){
+               // summary:
+               //              Query or set expanded state for an item,
+               if(!this.persist){
+                       return false;
+               }
+               var id=this.model.getIdentity(item);
+               if(arguments.length === 1){
+                       return this._openedItemIds[id];
+               }
+               if(expanded){
+                       this._openedItemIds[id] = true;
+               }else{
+                       delete this._openedItemIds[id];
+               }
+       },
+       _saveState: function(){
+               // summary:
+               //              Create and save a cookie with the currently expanded nodes identifiers
+               if(!this.persist){
+                       return;
+               }
+               var ary = [];
+               for(var id in this._openedItemIds){
+                       ary.push(id);
+               }
+               dojo.cookie(this.cookieName, ary.join(","), {expires:365});
+       },
 
-                       // TODO: this code is apparently for handling an edge case when the user is selecting
-                       // multiple nodes and then mousedowns on a node by accident... it lets the user keep the
-                       // current selection by moving the mouse away (or something like that).   It doesn't seem
-                       // to work though and requires a lot of plumbing (including this code, the onmousemove
-                       // handler, and the this.simpleSelection attribute.   Consider getting rid of all of it.
+       destroy: function(){
+               if(this._curSearch){
+                       clearTimeout(this._curSearch.timer);
+                       delete this._curSearch;
+               }
+               if(this.rootNode){
+                       this.rootNode.destroyRecursive();
+               }
+               if(this.dndController && !dojo.isString(this.dndController)){
+                       this.dndController.destroy();
+               }
+               this.rootNode = null;
+               this.inherited(arguments);
+       },
 
-                       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){
-                       // summary
-                       //              event processor for onmousemove
-                       // e: Event
-                       //              mouse event
-                       this.simpleSelection = false;
-               },
+       destroyRecursive: function(){
+               // A tree is treated as a leaf, not as a node with children (like a grid),
+               // but defining destroyRecursive for back-compat.
+               this.destroy();
+       },
 
-               _removeSelection: function(){
-                       // summary:
-                       //              Unselects all items
-                       // tags:
-                       //              private
-                       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
-               },
+       resize: function(changeSize){
+               if(changeSize){
+                       dojo.marginBox(this.domNode, changeSize);
+               }
 
-               _removeAnchor: function(){
-                       // summary:
-                       //              Removes the Anchor CSS class from a node.
-                       //              According to `dojo.dnd.Selector`, anchor means that
-                       //              "an item is selected, and is an anchor for a 'shift' selection".
-                       //              It's not relevant for Tree at this point, since we don't support multiple selection.
-                       // tags:
-                       //              private
-                       if(this.anchor){
-                               this._removeItemClass(this.anchor, "Anchor");
-                               this.anchor = null;
-                       }
-                       return this;    // self
-               },
+               // The only JS sizing involved w/tree is the indentation, which is specified
+               // in CSS and read in through this dummy indentDetector node (tree must be
+               // visible and attached to the DOM to read this)
+               this._nodePixelIndent = dojo._getMarginSize(this.tree.indentDetector).w;
 
-               forInSelectedItems: function(/*Function*/ f, /*Object?*/ o){
-                       // summary:
-                       //              Iterates over selected items;
-                       //              see `dojo.dnd.Container.forInItems()` for details
-                       o = o || dojo.global;
-                       for(var id in this.selection){
-                               console.log("selected item id: " + id);
-                               f.call(o, this.getItem(id), id, this);
-                       }
+               if(this.tree.rootNode){
+                       // If tree has already loaded, then reset indent for all the nodes
+                       this.tree.rootNode.set('indent', this.showRoot ? 0 : -1);
                }
+       },
+
+       _createTreeNode: function(/*Object*/ args){
+               // summary:
+               //              creates a TreeNode
+               // description:
+               //              Developers can override this method to define their own TreeNode class;
+               //              However it will probably be removed in a future release in favor of a way
+               //              of just specifying a widget for the label, rather than one that contains
+               //              the children too.
+               return new dijit._TreeNode(args);
+       }
 });
 
+// For back-compat.  TODO: remove in 2.0
+
 }
 
 if(!dojo._hasResource["dojo.dnd.Avatar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
@@ -24319,7 +25280,7 @@ dojo.declare("dojo.dnd.Avatar", null, {
                        var icon = dojo.byId("a11yIcon");
                        var text = '+';   // assume canDrop && copy
                        if (this.manager.canDropFlag && !this.manager.copy) {
-                               text = '< '; // canDrop && move 
+                               text = '< '; // canDrop && move
                        }else if (!this.manager.canDropFlag && !this.manager.copy) {
                                text = "o"; //!canDrop && move
                        }else if(!this.manager.canDropFlag){
@@ -24420,7 +25381,7 @@ dojo.declare("dojo.dnd.Manager", null, {
                        dojo.connect(dojo.body(), "onselectstart", dojo.stopEvent)
                ];
                var c = "dojoDnd" + (copy ? "Copy" : "Move");
-               dojo.addClass(dojo.body(), c); 
+               dojo.addClass(dojo.body(), c);
        },
        canDrop: function(flag){
                // summary:
@@ -24434,8 +25395,7 @@ dojo.declare("dojo.dnd.Manager", null, {
        stopDrag: function(){
                // summary:
                //              stop the DnD in progress
-               dojo.removeClass(dojo.body(), "dojoDndCopy");
-               dojo.removeClass(dojo.body(), "dojoDndMove");
+               dojo.removeClass(dojo.body(), ["dojoDndCopy", "dojoDndMove"]);
                dojo.forEach(this.events, dojo.disconnect);
                this.events = [];
                this.avatar.destroy();
@@ -24468,7 +25428,7 @@ dojo.declare("dojo.dnd.Manager", null, {
                        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){ 
+                       if(this.copy != copy){
                                this._setCopyStatus(copy);
                        }
                }
@@ -24502,7 +25462,7 @@ dojo.declare("dojo.dnd.Manager", null, {
                        switch(e.keyCode){
                                case dojo.keys.CTRL:
                                        var copy = Boolean(this.source.copyState(true));
-                                       if(this.copy != copy){ 
+                                       if(this.copy != copy){
                                                this._setCopyStatus(copy);
                                        }
                                        break;
@@ -24520,7 +25480,7 @@ dojo.declare("dojo.dnd.Manager", null, {
                //              keyboard event
                if(this.avatar && e.keyCode == dojo.keys.CTRL){
                        var copy = Boolean(this.source.copyState(false));
-                       if(this.copy != copy){ 
+                       if(this.copy != copy){
                                this._setCopyStatus(copy);
                        }
                }
@@ -24535,8 +25495,9 @@ dojo.declare("dojo.dnd.Manager", null, {
                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.replaceClass(dojo.body(),
+                       "dojoDnd" + (this.copy ? "Copy" : "Move"),
+                       "dojoDnd" + (this.copy ? "Move" : "Copy"));
        }
 });
 
@@ -24694,9 +25655,8 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
                //              Keeps track of current drop target.
 
                var m = dojo.dnd.manager(),
-                       oldTarget = this.targetAnchor,                  // the DOMNode corresponding to TreeNode mouse was previously over
-                       newTarget = this.current,                               // DOMNode corresponding to TreeNode mouse is currently over
-                       newTargetWidget = this.currentWidget,   // the TreeNode itself
+                       oldTarget = this.targetAnchor,                  // the TreeNode corresponding to TreeNode mouse was previously over
+                       newTarget = this.current,                               // TreeNode corresponding to TreeNode mouse is currently over
                        oldDropPosition = this.dropPosition;    // the previous drop position (over/before/after)
 
                // calculate if user is indicating to drop the dragged node before, after, or over
@@ -24705,7 +25665,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
                if(newTarget && this.betweenThreshold > 0){
                        // If mouse is over a new TreeNode, then get new TreeNode's position and size
                        if(!this.targetBox || oldTarget != newTarget){
-                               this.targetBox = dojo.position(newTarget, true);
+                               this.targetBox = dojo.position(newTarget.rowNode, true);
                        }
                        if((e.pageY - this.targetBox.y) <= this.betweenThreshold){
                                newDropPosition = "Before";
@@ -24716,23 +25676,23 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
 
                if(newTarget != oldTarget || newDropPosition != oldDropPosition){
                        if(oldTarget){
-                               this._removeItemClass(oldTarget, oldDropPosition);
+                               this._removeItemClass(oldTarget.rowNode, oldDropPosition);
                        }
                        if(newTarget){
-                               this._addItemClass(newTarget, newDropPosition);
+                               this._addItemClass(newTarget.rowNode, newDropPosition);
                        }
 
                        // Check if it's ok to drop the dragged node on/before/after the target node.
                        if(!newTarget){
                                m.canDrop(false);
-                       }else if(newTargetWidget == this.tree.rootNode && newDropPosition != "Over"){
+                       }else if(newTarget == this.tree.rootNode && newDropPosition != "Over"){
                                // Can't drop before or after tree's root node; the dropped node would just disappear (at least visually)
                                m.canDrop(false);
                        }else if(m.source == this && (newTarget.id in this.selection)){
                                // Guard against dropping onto yourself (TODO: guard against dropping onto your descendant, #7140)
                                m.canDrop(false);
-                       }else if(this.checkItemAcceptance(newTarget, m.source, newDropPosition.toLowerCase())
-                                       && !this._isParentChildDrop(m.source, newTarget)){
+                       }else if(this.checkItemAcceptance(newTarget.rowNode, m.source, newDropPosition.toLowerCase())
+                                       && !this._isParentChildDrop(m.source, newTarget.rowNode)){
                                m.canDrop(true);
                        }else{
                                m.canDrop(false);
@@ -24758,12 +25718,23 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
                }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 nodes=[];
-                               for(var i in n){
-                                       nodes.push(n[i]);
-                               }
+                               var nodes = this.getSelectedTreeNodes();
                                if(nodes.length){
+                                       if(nodes.length > 1){
+                                               //filter out all selected items which has one of their ancestor selected as well
+                                               var seen = this.selection, i = 0, r = [], n, p;
+                                               nextitem: while((n = nodes[i++])){
+                                                       for(p = n.getParent(); p && p !== this.tree; p = p.getParent()){
+                                                               if(seen[p.id]){ //parent is already selected, skip this node
+                                                                       continue nextitem;
+                                                               }
+                                                       }
+                                                       //this node does not have any ancestors selected, add it
+                                                       r.push(n);
+                                               }
+                                               nodes = r;
+                                       }
+                                       nodes = dojo.map(nodes, function(n){return n.domNode});
                                        m.startDrag(this, nodes, this.copyState(dojo.isCopyKey(e)));
                                }
                        }
@@ -24781,7 +25752,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
                this.mouseButton = e.button;
                this._lastX = e.pageX;
                this._lastY = e.pageY;
-               this.inherited("onMouseDown",arguments);
+               this.inherited(arguments);
        },
 
        onMouseUp: function(e){
@@ -24793,7 +25764,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
                //              private
                if(this.mouseDown){
                        this.mouseDown = false;
-                       this.inherited("onMouseUp",arguments);
+                       this.inherited(arguments);
                }
        },
 
@@ -24919,7 +25890,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
                        this.isDragging = false;
 
                        // Compute the new parent item
-                       var targetWidget = dijit.getEnclosingWidget(target);
+                       var targetWidget = target;
                        var newParentItem;
                        var insertIndex;
                        newParentItem = (targetWidget && targetWidget.item) || tree.item;
@@ -24975,7 +25946,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
                                        // Get the hash to pass to model.newItem().  A single call to
                                        // itemCreator() returns an array of hashes, one for each drag source node.
                                        if(!newItemsParams){
-                                               newItemsParams = this.itemCreator(nodes, target, source);
+                                               newItemsParams = this.itemCreator(nodes, target.rowNode, source);
                                        }
 
                                        // Create new item in the tree, based on the drag source.
@@ -25049,16 +26020,13 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
 
 
                var root = source.tree.domNode;
-               var ids = {};
-               for(var x in source.selection){
-                       ids[source.selection[x].parentNode.id] = true;
-               }
+               var ids = source.selection;
 
                var node = targetRow.parentNode;
 
                // Iterate up the DOM hierarchy from the target drop row,
                // checking of any of the dragged nodes have the same ID.
-               while(node != root && (!node.id || !ids[node.id])){
+               while(node != root && !ids[node.id]){
                        node = node.parentNode;
                }
 
@@ -25071,7 +26039,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, {
                // tags:
                //              private
                if(!this.targetAnchor){ return; }
-               this._removeItemClass(this.targetAnchor, this.dropPosition);
+               this._removeItemClass(this.targetAnchor.rowNode, this.dropPosition);
                this.targetAnchor = null;
                this.targetBox = null;
                this.dropPosition = null;
@@ -25103,7 +26071,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        //                      { name:'Fozzie Bear', wears:['hat', 'tie']},
        //                      { name:'Miss Piggy', pets:'Foo-Foo'}
        //              ]}
-       //              Note that it can also contain an 'identifer' property that specified which attribute on the items 
+       //              Note that it can also contain an 'identifer' property that specified which attribute on the items
        //              in the array of items that acts as the unique identifier for that item.
        //
        constructor: function(/* Object */ keywordParameters){
@@ -25118,7 +26086,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                //                      ...
                //                      typeN: function || object
                //              }
-               //              Where if it is a function, it is assumed to be an object constructor that takes the 
+               //              Where if it is a function, it is assumed to be an object constructor that takes the
                //              value of _value as the initialization parameters.  If it is an object, then it is assumed
                //              to be an object of general form:
                //              {
@@ -25184,7 +26152,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        //all item handles will become invalid and a new fetch must be issued.
        clearOnClose: false,
 
-       //Parameter to allow specifying if preventCache should be passed to the xhrGet call or not when loading data from a url.  
+       //Parameter to allow specifying if preventCache should be passed to the xhrGet call or not when loading data from a url.
        //Note this does not mean the store calls the server on each fetch, only that the data load has preventCache set as an option.
        //Added for tracker: #6072
        urlPreventCache: false,
@@ -25192,19 +26160,19 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        //Parameter for specifying that it is OK for the xhrGet call to fail silently.
        failOk: false,
 
-       //Parameter to indicate to process data from the url as hierarchical 
-       //(data items can contain other data items in js form).  Default is true 
-       //for backwards compatibility.  False means only root items are processed 
-       //as items, all child objects outside of type-mapped objects and those in 
+       //Parameter to indicate to process data from the url as hierarchical
+       //(data items can contain other data items in js form).  Default is true
+       //for backwards compatibility.  False means only root items are processed
+       //as items, all child objects outside of type-mapped objects and those in
        //specific reference format, are left straight JS data objects.
        hierarchical: true,
 
        _assertIsItem: function(/* item */ item){
                //      summary:
                //              This function tests whether the item passed in is indeed an item in the store.
-               //      item: 
+               //      item:
                //              The item to test for being contained by the store.
-               if(!this.isItem(item)){ 
+               if(!this.isItem(item)){
                        throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");
                }
        },
@@ -25212,25 +26180,25 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        _assertIsAttribute: function(/* attribute-name-string */ attribute){
                //      summary:
                //              This function tests whether the item passed in is indeed a valid 'attribute' like type for the store.
-               //      attribute: 
+               //      attribute:
                //              The attribute to test for being contained by the store.
-               if(typeof attribute !== "string"){ 
+               if(typeof attribute !== "string"){
                        throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");
                }
        },
 
-       getValue: function(     /* item */ item, 
-                                               /* attribute-name-string */ attribute, 
+       getValue: function(     /* item */ item,
+                                               /* attribute-name-string */ attribute,
                                                /* value? */ defaultValue){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getValue()
                var values = this.getValues(item, attribute);
                return (values.length > 0)?values[0]:defaultValue; // mixed
        },
 
-       getValues: function(/* item */ item, 
+       getValues: function(/* item */ item,
                                                /* attribute-name-string */ attribute){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getValues()
 
                this._assertIsItem(item);
@@ -25240,7 +26208,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        getAttributes: function(/* item */ item){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getAttributes()
                this._assertIsItem(item);
                var attributes = [];
@@ -25255,17 +26223,17 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
 
        hasAttribute: function( /* item */ item,
                                                        /* attribute-name-string */ attribute){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.hasAttribute()
                this._assertIsItem(item);
                this._assertIsAttribute(attribute);
                return (attribute in item);
        },
 
-       containsValue: function(/* item */ item, 
-                                                       /* attribute-name-string */ attribute, 
+       containsValue: function(/* item */ item,
+                                                       /* attribute-name-string */ attribute,
                                                        /* anything */ value){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.containsValue()
                var regexp = undefined;
                if(typeof value === "string"){
@@ -25274,22 +26242,22 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                return this._containsValue(item, attribute, value, regexp); //boolean.
        },
 
-       _containsValue: function(       /* item */ item, 
-                                                               /* attribute-name-string */ attribute, 
+       _containsValue: function(       /* item */ item,
+                                                               /* attribute-name-string */ attribute,
                                                                /* anything */ value,
                                                                /* RegExp?*/ regexp){
-               //      summary: 
+               //      summary:
                //              Internal function for looking at the values contained by the item.
-               //      description: 
-               //              Internal function for looking at the values contained by the item.  This 
+               //      description:
+               //              Internal function for looking at the values contained by the item.  This
                //              function allows for denoting if the comparison should be case sensitive for
                //              strings or not (for handling filtering cases where string case should not matter)
-               //      
+               //
                //      item:
                //              The data item to examine for attribute values.
                //      attribute:
                //              The attribute to inspect.
-               //      value:  
+               //      value:
                //              The value to match.
                //      regexp:
                //              Optional regular expression generated off value if value was of string type to handle wildcarding.
@@ -25306,7 +26274,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        isItem: function(/* anything */ something){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.isItem()
                if(something && something[this._storeRefPropName] === this){
                        if(this._arrayOfAllItems[something[this._itemNumPropName]] === something){
@@ -25317,25 +26285,25 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        isItemLoaded: function(/* anything */ something){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.isItemLoaded()
                return this.isItem(something); //boolean
        },
 
        loadItem: function(/* object */ keywordArgs){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.loadItem()
                this._assertIsItem(keywordArgs.item);
        },
 
        getFeatures: function(){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getFeatures()
                return this._features; //Object
        },
 
        getLabel: function(/* item */ item){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getLabel()
                if(this._labelAttr && this.isItem(item)){
                        return this.getValue(item,this._labelAttr); //String
@@ -25344,7 +26312,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        getLabelAttributes: function(/* item */ item){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Read.getLabelAttributes()
                if(this._labelAttr){
                        return [this._labelAttr]; //array
@@ -25352,10 +26320,10 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                return null; //null
        },
 
-       _fetchItems: function(  /* Object */ keywordArgs, 
-                                                       /* Function */ findCallback, 
+       _fetchItems: function(  /* Object */ keywordArgs,
+                                                       /* Function */ findCallback,
                                                        /* Function */ errorCallback){
-               //      summary: 
+               //      summary:
                //              See dojo.data.util.simpleFetch.fetch()
                var self = this,
                    filter = function(requestArgs, arrayOfItems){
@@ -25395,8 +26363,8 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                }
                                findCallback(items, requestArgs);
                        }else{
-                               // We want a copy to pass back in case the parent wishes to sort the array. 
-                               // We shouldn't allow resort of the internal list, so that multiple callers 
+                               // We want a copy to pass back in case the parent wishes to sort the array.
+                               // We shouldn't allow resort of the internal list, so that multiple callers
                                // can get lists and sort without affecting each other.  We also need to
                                // filter out any null values that have been left as a result of deleteItem()
                                // calls in ItemFileWriteStore.
@@ -25416,11 +26384,11 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        //Do a check on the JsonFileUrl and crosscheck it.
                        //If it doesn't match the cross-check, it needs to be updated
                        //This allows for either url or _jsonFileUrl to he changed to
-                       //reset the store load location.  Done this way for backwards 
+                       //reset the store load location.  Done this way for backwards
                        //compatibility.  People use _jsonFileUrl (even though officially
                        //private.
                        if(this._jsonFileUrl !== this._ccUrl){
-                               dojo.deprecated("dojo.data.ItemFileReadStore: ", 
+                               dojo.deprecated("dojo.data.ItemFileReadStore: ",
                                        "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;
@@ -25431,21 +26399,21 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        }
 
                        //See if there was any forced reset of data.
-                       if(this.data != null && this._jsonData == null){
+                       if(this.data != null){
                                this._jsonData = this.data;
                                this.data = null;
                        }
 
                        if(this._jsonFileUrl){
                                //If fetches come in before the loading has finished, but while
-                               //a load is in progress, we have to defer the fetching to be 
+                               //a load is in progress, we have to defer the fetching to be
                                //invoked in the callback.
                                if(this._loadInProgress){
                                        this._queuedFetches.push({args: keywordArgs, filter: filter});
                                }else{
                                        this._loadInProgress = true;
                                        var getArgs = {
-                                                       url: self._jsonFileUrl, 
+                                                       url: self._jsonFileUrl,
                                                        handleAs: "json-comment-optional",
                                                        preventCache: this.urlPreventCache,
                                                        failOk: this.failOk
@@ -25505,7 +26473,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        _handleQueuedFetches: function(){
-               //      summary: 
+               //      summary:
                //              Internal function to execute delayed request in the store.
                //Execute any deferred fetches now.
                if(this._queuedFetches.length > 0){
@@ -25514,7 +26482,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                    delayedQuery = fData.args,
                                    delayedFilter = fData.filter;
                                if(delayedFilter){
-                                       delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions)); 
+                                       delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions));
                                }else{
                                        this.fetchItemByIdentity(delayedQuery);
                                }
@@ -25524,31 +26492,31 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        _getItemsArray: function(/*object?*/queryOptions){
-               //      summary: 
+               //      summary:
                //              Internal function to determine which list of items to search over.
                //      queryOptions: The query options parameter, if any.
                if(queryOptions && queryOptions.deep){
-                       return this._arrayOfAllItems; 
+                       return this._arrayOfAllItems;
                }
                return this._arrayOfTopLevelItems;
        },
 
        close: function(/*dojo.data.api.Request || keywordArgs || null */ request){
-                //     summary: 
+                //     summary:
                 //             See dojo.data.api.Read.close()
-                if(this.clearOnClose && 
-                       this._loadFinished && 
+                if(this.clearOnClose &&
+                       this._loadFinished &&
                        !this._loadInProgress){
                         //Reset all internalsback to default state.  This will force a reload
-                        //on next fetch.  This also checks that the data or url param was set 
+                        //on next fetch.  This also checks that the data or url param was set
                         //so that the store knows it can get data.  Without one of those being set,
                         //the next fetch will trigger an error.
 
-                        if(((this._jsonFileUrl == "" || this._jsonFileUrl == null) && 
+                        if(((this._jsonFileUrl == "" || this._jsonFileUrl == null) &&
                                 (this.url == "" || this.url == null)
                                ) && this.data == null){
                                 console.debug("dojo.data.ItemFileReadStore: WARNING!  Data reload " +
-                                       " information has not been provided." + 
+                                       " information has not been provided." +
                                        "  Please set 'url' or 'data' to the appropriate value before" +
                                        " the next fetch");
                         }
@@ -25586,7 +26554,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        //      |       false == valueIsAnItem("Kermit");
                        //      |       false == valueIsAnItem(42);
                        //      |       false == valueIsAnItem(new Date());
-                       //      |       false == valueIsAnItem({_type:'Date', _value:'May 14, 1802'});
+                       //      |       false == valueIsAnItem({_type:'Date', _value:'1802-05-14'});
                        //      |       false == valueIsAnItem({_reference:'Kermit'});
                        //      |       true == valueIsAnItem({name:'Kermit', color:'green'});
                        //      |       true == valueIsAnItem({iggy:'pop'});
@@ -25597,8 +26565,8 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                (!dojo.isArray(aValue) || addingArrays) &&
                                (!dojo.isFunction(aValue)) &&
                                (aValue.constructor == Object || dojo.isArray(aValue)) &&
-                               (typeof aValue._reference === "undefined") && 
-                               (typeof aValue._type === "undefined") && 
+                               (typeof aValue._reference === "undefined") &&
+                               (typeof aValue._type === "undefined") &&
                                (typeof aValue._value === "undefined") &&
                                self.hierarchical
                        );
@@ -25648,13 +26616,13 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        item[this._rootItemPropName]=true;
                }
 
-               // Step 2: Walk through all the attribute values of all the items, 
+               // Step 2: Walk through all the attribute values of all the items,
                // and replace single values with arrays.  For example, we change this:
                //              { name:'Miss Piggy', pets:'Foo-Foo'}
                // into this:
                //              { name:['Miss Piggy'], pets:['Foo-Foo']}
-               // 
-               // We also store the attribute names so we can validate our store  
+               //
+               // We also store the attribute names so we can validate our store
                // reference and item id special properties for the O(1) isItem
                var allAttributeNames = {},
                    key;
@@ -25688,9 +26656,9 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        this._reverseRefMap += "_";
                }
 
-               // Step 4: Some data files specify an optional 'identifier', which is 
-               // the name of an attribute that holds the identity of each item. 
-               // If this data file specified an identifier attribute, then build a 
+               // Step 4: Some data files specify an optional 'identifier', which is
+               // the name of an attribute that holds the identity of each item.
+               // If this data file specified an identifier attribute, then build a
                // hash table of items keyed by the identity of the items.
                var arrayOfValues;
 
@@ -25702,7 +26670,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                item = this._arrayOfAllItems[i];
                                arrayOfValues = item[identifier];
                                var identity = arrayOfValues[0];
-                               if(!this._itemsByIdentity[identity]){
+                               if(!Object.hasOwnProperty.call(this._itemsByIdentity, identity)){
                                        this._itemsByIdentity[identity] = item;
                                }else{
                                        if(this._jsonFileUrl){
@@ -25716,7 +26684,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        this._features['dojo.data.api.Identity'] = Number;
                }
 
-               // Step 5: Walk through all the items, and set each item's properties 
+               // Step 5: Walk through all the items, and set each item's properties
                // for _storeRefPropName and _itemNumPropName, so that store.isItem() will return true.
                for(i = 0; i < this._arrayOfAllItems.length; ++i){
                        item = this._arrayOfAllItems[i];
@@ -25730,13 +26698,13 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                // We replace item-references with pointers to items.  For example, we change:
                //              { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
                // into this:
-               //              { name:['Kermit'], friends:[miss_piggy] } 
+               //              { name:['Kermit'], friends:[miss_piggy] }
                // (where miss_piggy is the object representing the 'Miss Piggy' item).
                //
                // We replace type/value pairs with typed-literals.  For example, we change:
-               //              { name:['Nelson Mandela'], born:[{_type:'Date', _value:'July 18, 1918'}] }
+               //              { name:['Nelson Mandela'], born:[{_type:'Date', _value:'1918-07-18'}] }
                // into this:
-               //              { name:['Kermit'], born:(new Date('July 18, 1918')) } 
+               //              { name:['Kermit'], born:(new Date(1918, 6, 18)) }
                //
                // We also generate the associate map for all items for the O(1) isItem function.
                for(i = 0; i < this._arrayOfAllItems.length; ++i){
@@ -25749,7 +26717,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                                if(("_type" in value) && ("_value" in value)){
                                                        var type = value._type; // examples: 'Date', 'Color', or 'ComplexNumber'
                                                        var mappingObj = this._datatypeMap[type]; // examples: Date, dojo.Color, foo.math.ComplexNumber, {type: dojo.Color, deserialize(value){ return new dojo.Color(value)}}
-                                                       if(!mappingObj){ 
+                                                       if(!mappingObj){
                                                                throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '" + type + "'");
                                                        }else if(dojo.isFunction(mappingObj)){
                                                                arrayOfValues[j] = new mappingObj(value._value);
@@ -25772,12 +26740,12 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                                                        var candidateItem = this._arrayOfAllItems[k],
                                                                            found = true;
                                                                        for(var refKey in referenceDescription){
-                                                                               if(candidateItem[refKey] != referenceDescription[refKey]){ 
-                                                                                       found = false; 
+                                                                               if(candidateItem[refKey] != referenceDescription[refKey]){
+                                                                                       found = false;
                                                                                }
                                                                        }
-                                                                       if(found){ 
-                                                                               arrayOfValues[j] = candidateItem; 
+                                                                       if(found){
+                                                                               arrayOfValues[j] = candidateItem;
                                                                        }
                                                                }
                                                        }
@@ -25788,7 +26756,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                                                }
                                                        }
                                                }else if(this.isItem(value)){
-                                                       //It's a child item (not one referenced through _reference).  
+                                                       //It's a child item (not one referenced through _reference).
                                                        //We need to treat this as a referenced item, so it can be cleaned up
                                                        //in a write store easily.
                                                        if(this.referenceIntegrity){
@@ -25817,7 +26785,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        getIdentity: function(/* item */ item){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Identity.getIdentity()
                var identifier = this._features['dojo.data.api.Identity'];
                if(identifier === Number){
@@ -25832,7 +26800,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        fetchItemByIdentity: function(/* Object */ keywordArgs){
-               //      summary: 
+               //      summary:
                //              See dojo.data.api.Identity.fetchItemByIdentity()
 
                // Hasn't loaded yet, we have to trigger the load.
@@ -25843,11 +26811,11 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        //Do a check on the JsonFileUrl and crosscheck it.
                        //If it doesn't match the cross-check, it needs to be updated
                        //This allows for either url or _jsonFileUrl to he changed to
-                       //reset the store load location.  Done this way for backwards 
+                       //reset the store load location.  Done this way for backwards
                        //compatibility.  People use _jsonFileUrl (even though officially
                        //private.
                        if(this._jsonFileUrl !== this._ccUrl){
-                               dojo.deprecated("dojo.data.ItemFileReadStore: ", 
+                               dojo.deprecated("dojo.data.ItemFileReadStore: ",
                                        "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;
@@ -25870,7 +26838,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                }else{
                                        this._loadInProgress = true;
                                        var getArgs = {
-                                                       url: self._jsonFileUrl, 
+                                                       url: self._jsonFileUrl,
                                                        handleAs: "json-comment-optional",
                                                        preventCache: this.urlPreventCache,
                                                        failOk: this.failOk
@@ -25913,7 +26881,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                        scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
                                        keywordArgs.onItem.call(scope, item);
                                }
-                       } 
+                       }
                }else{
                        // Already loaded.  We can just look it up and call back.
                        item = this._getItemByIdentity(keywordArgs.identity);
@@ -25928,9 +26896,10 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                //      summary:
                //              Internal function to look an item up by its identity map.
                var item = null;
-               if(this._itemsByIdentity){
+               if(this._itemsByIdentity &&
+                  Object.hasOwnProperty.call(this._itemsByIdentity, identity)){
                        item = this._itemsByIdentity[identity];
-               }else{
+               }else if (Object.hasOwnProperty.call(this._arrayOfAllItems, identity)){
                        item = this._arrayOfAllItems[identity];
                }
                if(item === undefined){
@@ -25940,15 +26909,15 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
 
        getIdentityAttributes: function(/* item */ item){
-               //      summary: 
-               //              See dojo.data.api.Identity.getIdentifierAttributes()
+               //      summary:
+               //              See dojo.data.api.Identity.getIdentityAttributes()
                 
                var identifier = this._features['dojo.data.api.Identity'];
                if(identifier === Number){
                        // If (identifier === Number) it means getIdentity() just returns
                        // an integer item-number for each item.  The dojo.data.api.Identity
-                       // spec says we need to return null if the identity is not composed 
-                       // of attributes 
+                       // spec says we need to return null if the identity is not composed
+                       // of attributes
                        return null; // null
                }else{
                        return [identifier]; // Array
@@ -25956,18 +26925,18 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
        },
        
        _forceLoad: function(){
-               //      summary: 
+               //      summary:
                //              Internal function to force a load of the store if it hasn't occurred yet.  This is required
-               //              for specific functions to work properly.  
+               //              for specific functions to work properly.
                var self = this;
                //Do a check on the JsonFileUrl and crosscheck it.
                //If it doesn't match the cross-check, it needs to be updated
                //This allows for either url or _jsonFileUrl to he changed to
-               //reset the store load location.  Done this way for backwards 
+               //reset the store load location.  Done this way for backwards
                //compatibility.  People use _jsonFileUrl (even though officially
                //private.
                if(this._jsonFileUrl !== this._ccUrl){
-                       dojo.deprecated("dojo.data.ItemFileReadStore: ", 
+                       dojo.deprecated("dojo.data.ItemFileReadStore: ",
                                "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;
@@ -25978,14 +26947,14 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                }
 
                //See if there was any forced reset of data.
-               if(this.data != null && this._jsonData == null){
+               if(this.data != null){
                        this._jsonData = this.data;
                        this.data = null;
                }
 
                if(this._jsonFileUrl){
                                var getArgs = {
-                                       url: this._jsonFileUrl, 
+                                       url: this._jsonFileUrl,
                                        handleAs: "json-comment-optional",
                                        preventCache: this.urlPreventCache,
                                        failOk: this.failOk,
@@ -25994,7 +26963,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        var getHandler = dojo.xhrGet(getArgs);
                        getHandler.addCallback(function(data){
                                try{
-                                       //Check to be sure there wasn't another load going on concurrently 
+                                       //Check to be sure there wasn't another load going on concurrently
                                        //So we don't clobber data that comes in on it.  If there is a load going on
                                        //then do not save this data.  It will potentially clobber current data.
                                        //We mainly wanted to sync/wait here.
@@ -26007,7 +26976,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                                                //Okay, we hit an error state we can't recover from.  A forced load occurred
                                                //while an async load was occurring.  Since we cannot block at this point, the best
                                                //that can be managed is to throw an error.
-                                               throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress."); 
+                                               throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress.");
                                        }
                                }catch(e){
                                        console.log(e);
@@ -26021,7 +26990,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{
                        self._getItemsFromLoadedData(self._jsonData);
                        self._jsonData = null;
                        self._loadFinished = true;
-               } 
+               }
        }
 });
 //Mix in the simple fetch implementation to this class.
@@ -26034,6 +27003,7 @@ dojo._hasResource["dojo.data.ItemFileWriteStore"] = true;
 dojo.provide("dojo.data.ItemFileWriteStore");
 
 
+
 dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
        constructor: function(/* object */ keywordParameters){
                //      keywordParameters: {typeMap: object)
@@ -26044,7 +27014,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                //                      ...
                //                      typeN: function || object
                //              }
-               //              Where if it is a function, it is assumed to be an object constructor that takes the 
+               //              Where if it is a function, it is assumed to be an object constructor that takes the
                //              value of _value as the initialization parameters.  It is serialized assuming object.toString()
                //              serialization.  If it is an object, then it is assumed
                //              to be an object of general form:
@@ -26060,8 +27030,8 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                
                // For keeping track of changes so that we can implement isDirty and revert
                this._pending = {
-                       _newItems:{}, 
-                       _modifiedItems:{}, 
+                       _newItems:{},
+                       _modifiedItems:{},
                        _deletedItems:{}
                };
 
@@ -26124,8 +27094,8 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                        }
                }
                
-               // make sure this identity is not already in use by another item, if identifiers were 
-               // defined in the file.  Otherwise it would be the item count, 
+               // make sure this identity is not already in use by another item, if identifiers were
+               // defined in the file.  Otherwise it would be the item count,
                // which should always be unique in this case.
                if(this._itemsByIdentity){
                        this._assert(typeof this._itemsByIdentity[newIdentity] === "undefined");
@@ -26134,7 +27104,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                this._assert(typeof this._pending._deletedItems[newIdentity] === "undefined");
                
                var newItem = {};
-               newItem[this._storeRefPropName] = this;         
+               newItem[this._storeRefPropName] = this;
                newItem[this._itemNumPropName] = this._arrayOfAllItems.length;
                if(this._itemsByIdentity){
                        this._itemsByIdentity[newIdentity] = newItem;
@@ -26187,14 +27157,14 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                // Bummer, the user is trying to do something like
                                // newItem({_S:"foo"}).  Unfortunately, our superclass,
                                // ItemFileReadStore, is already using _S in each of our items
-                               // to hold private info.  To avoid a naming collision, we 
-                               // need to move all our private info to some other property 
+                               // to hold private info.  To avoid a naming collision, we
+                               // need to move all our private info to some other property
                                // of all the items/objects.  So, we need to iterate over all
-                               // the items and do something like: 
+                               // the items and do something like:
                                //    item.__S = item._S;
                                //    item._S = undefined;
-                               // But first we have to make sure the new "__S" variable is 
-                               // not in use, which means we have to iterate over all the 
+                               // But first we have to make sure the new "__S" variable is
+                               // not in use, which means we have to iterate over all the
                                // items checking for that.
                                throw new Error("encountered bug in ItemFileWriteStore.newItem");
                        }
@@ -26231,17 +27201,17 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                this._assertIsItem(item);
 
                // Remove this item from the _arrayOfAllItems, but leave a null value in place
-               // of the item, so as not to change the length of the array, so that in newItem() 
+               // of the item, so as not to change the length of the array, so that in newItem()
                // we can still safely do: newIdentity = this._arrayOfAllItems.length;
                var indexInArrayOfAllItems = item[this._itemNumPropName];
                var identity = this.getIdentity(item);
 
                //If we have reference integrity on, we need to do reference cleanup for the deleted item
                if(this.referenceIntegrity){
-                       //First scan all the attributes of this items for references and clean them up in the map 
+                       //First scan all the attributes of this items for references and clean them up in the map
                        //As this item is going away, no need to track its references anymore.
 
-                       //Get the attributes list before we generate the backup so it 
+                       //Get the attributes list before we generate the backup so it
                        //doesn't pollute the attributes list.
                        var attributes = this.getAttributes(item);
 
@@ -26287,7 +27257,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                                                return !(this.isItem(possibleItem) && this.getIdentity(possibleItem) == identity);
                                                        }, this);
                                                        //Remove the note of the reference to the item and set the values on the modified attribute.
-                                                       this._removeReferenceFromMap(item, containingItem, attribute); 
+                                                       this._removeReferenceFromMap(item, containingItem, attribute);
                                                        if(newValues.length < oldValues.length){
                                                                this._setValueOrValues(containingItem, attribute, newValues, true);
                                                        }
@@ -26349,11 +27319,11 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
 
                var identity = this.getIdentity(item);
                if(!this._pending._modifiedItems[identity]){
-                       // Before we actually change the item, we make a copy of it to 
-                       // record the original state, so that we'll be able to revert if 
+                       // Before we actually change the item, we make a copy of it to
+                       // record the original state, so that we'll be able to revert if
                        // the revert method gets called.  If the item has already been
                        // modified then there's no need to do this now, since we already
-                       // have a record of the original state.                                         
+                       // have a record of the original state.
                        var copyOfItemState = {};
                        for(var key in item){
                                if((key === this._storeRefPropName) || (key === this._itemNumPropName) || (key === this._rootItemPropName)){
@@ -26374,7 +27344,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                if(dojo.isArray(newValueOrValues) && newValueOrValues.length === 0){
                        
                        // If we were passed an empty array as the value, that counts
-                       // as "unsetting" the attribute, so we need to remove this 
+                       // as "unsetting" the attribute, so we need to remove this
                        // attribute from the item.
                        success = delete item[attribute];
                        newValueOrValues = undefined; // used in the onSet Notification call below
@@ -26398,7 +27368,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                // Unfortunately, it's not safe to just do this:
                                //    newValueArray = newValues;
                                // Instead, we need to copy the array, which slice() does very nicely.
-                               // This is so that our internal data structure won't  
+                               // This is so that our internal data structure won't
                                // get corrupted if the user mucks with the values array *after*
                                // calling setValues().
                                newValueArray = newValueOrValues.slice(0, newValueOrValues.length);
@@ -26406,7 +27376,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                newValueArray = [newValueOrValues];
                        }
 
-                       //We need to handle reference integrity if this is on. 
+                       //We need to handle reference integrity if this is on.
                        //In the case of set, we need to see if references were added or removed
                        //and update the reference tracking map accordingly.
                        if(this.referenceIntegrity){
@@ -26433,7 +27403,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                                        if(map[id.toString()]){
                                                                delete map[id.toString()];
                                                        }else{
-                                                               this._addReferenceToMap(possibleItem, item, attribute); 
+                                                               this._addReferenceToMap(possibleItem, item, attribute);
                                                        }
                                                }
                                        }, this);
@@ -26463,7 +27433,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
 
                // Now we make the dojo.data.api.Notification call
                if(callOnSet){
-                       this.onSet(item, attribute, oldValueOrValues, newValueOrValues); 
+                       this.onSet(item, attribute, oldValueOrValues, newValueOrValues);
                }
                return success; // boolean
        },
@@ -26498,7 +27468,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                //              Method to remove an reference map entry for an item and attribute.
                //      description:
                //              Method to remove an reference map entry for an item and attribute.  This will
-               //              also perform cleanup on the map such that if there are no more references at all to 
+               //              also perform cleanup on the map such that if there are no more references at all to
                //              the item, its reference object and entry are removed.
                //
                //      refItem:
@@ -26555,7 +27525,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
        _flatten: function(/* anything */ value){
                if(this.isItem(value)){
                        var item = value;
-                       // Given an item, return an serializable object that provides a 
+                       // Given an item, return an serializable object that provides a
                        // reference to the item.
                        // For example, given kermit:
                        //    var kermit = store.newItem({id:2, name:"Kermit"});
@@ -26586,7 +27556,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
        },
        
        _getNewFileContentString: function(){
-               // summary: 
+               // summary:
                //              Generate a string that can be saved to a file.
                //              The result should look similar to:
                //              http://trac.dojotoolkit.org/browser/dojo/trunk/tests/data/countries.json
@@ -26627,7 +27597,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
        },
 
        _isEmpty: function(something){
-               //      summary: 
+               //      summary:
                //              Function to determine if an array or object has no properties or values.
                //      something:
                //              The array or object to examine.
@@ -26656,7 +27626,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                var self = this;
                var saveCompleteCallback = function(){
                        self._pending = {
-                               _newItems:{}, 
+                               _newItems:{},
                                _modifiedItems:{},
                                _deletedItems:{}
                        };
@@ -26705,7 +27675,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                modifiedItem = this._arrayOfAllItems[identity];
                        }
        
-                       // Restore the original item into a full-fledged item again, we want to try to 
+                       // Restore the original item into a full-fledged item again, we want to try to
                        // keep the same object instance as if we don't it, causes bugs like #9022.
                        copyOfItemState[this._storeRefPropName] = this;
                        for(key in modifiedItem){
@@ -26746,7 +27716,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                                        }
                                        this._addReferenceToMap(refItem, deletedItem, reference.attr);
                                }, this);
-                               delete deletedItem["backupRefs_" + this._reverseRefMap]; 
+                               delete deletedItem["backupRefs_" + this._reverseRefMap];
                        }
                }
 
@@ -26765,8 +27735,8 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                }
 
                this._pending = {
-                       _newItems:{}, 
-                       _modifiedItems:{}, 
+                       _newItems:{},
+                       _modifiedItems:{},
                        _deletedItems:{}
                };
                return true; // boolean
@@ -26777,13 +27747,13 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
                if(item){
                        // return true if the item is dirty
                        var identity = this.getIdentity(item);
-                       return new Boolean(this._pending._newItems[identity] || 
+                       return new Boolean(this._pending._newItems[identity] ||
                                this._pending._modifiedItems[identity] ||
                                this._pending._deletedItems[identity]).valueOf(); // boolean
                }else{
                        // return true if the store is dirty -- which means return true
                        // if there are any new items, dirty items, or modified items
-                       if(!this._isEmpty(this._pending._newItems) || 
+                       if(!this._isEmpty(this._pending._newItems) ||
                                !this._isEmpty(this._pending._modifiedItems) ||
                                !this._isEmpty(this._pending._deletedItems)){
                                return true;
@@ -26794,28 +27764,28 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
 
 /* dojo.data.api.Notification */
 
-       onSet: function(/* item */ item, 
-                                       /*attribute-name-string*/ attribute, 
+       onSet: function(/* item */ item,
+                                       /*attribute-name-string*/ attribute,
                                        /*object | array*/ oldValue,
                                        /*object | array*/ newValue){
                // summary: See dojo.data.api.Notification.onSet()
                
-               // No need to do anything. This method is here just so that the 
+               // No need to do anything. This method is here just so that the
                // client code can connect observers to it.
        },
 
        onNew: function(/* item */ newItem, /*object?*/ parentInfo){
                // summary: See dojo.data.api.Notification.onNew()
                
-               // No need to do anything. This method is here just so that the 
-               // client code can connect observers to it. 
+               // No need to do anything. This method is here just so that the
+               // client code can connect observers to it.
        },
 
        onDelete: function(/* item */ deletedItem){
                // summary: See dojo.data.api.Notification.onDelete()
                
-               // No need to do anything. This method is here just so that the 
-               // client code can connect observers to it. 
+               // No need to do anything. This method is here just so that the
+               // client code can connect observers to it.
        },
 
        close: function(/* object? */ request){
index 781ab9c36b27d318c5bcbd67edc4c665310e671a..25b12f4bcf8f61ade6d2aaf03420a0d800b8e23f 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.uacss"]){ //_hasResource checks added by build. Do n
 dojo._hasResource["dojo.uacss"] = true;
 dojo.provide("dojo.uacss");
 
+
 (function(){
        // summary:
        //              Applies pre-set CSS classes to the top-level HTML node, based on:
@@ -33,6 +34,7 @@ dojo.provide("dojo.uacss");
                        dj_ie6: maj(ie) == 6,
                        dj_ie7: maj(ie) == 7,
                        dj_ie8: maj(ie) == 8,
+                       dj_ie9: maj(ie) == 9,
                        dj_quirks: d.isQuirks,
                        dj_iequirks: ie && d.isQuirks,
 
@@ -61,7 +63,7 @@ dojo.provide("dojo.uacss");
        html.className = d.trim(html.className + " " + classStr);
 
        // If RTL mode, then add dj_rtl flag plus repeat existing classes with -rtl extension.
-       // We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl).  
+       // We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl).
        // Unshift() is to run sniff code before the parser.
        dojo._loaders.unshift(function(){
                if(!dojo._isBodyLtr()){
index c36eb4c23d400b2a767c9af4e344be5026b99c4a..4e363faba259b6bfec1a2ef5abcf64f27cfdcfda 100644 (file)
@@ -1,5 +1,5 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
@@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.window"]){ //_hasResource checks added by build. Do
 dojo._hasResource["dojo.window"] = true;
 dojo.provide("dojo.window");
 
+dojo.getObject("window", true, dojo);
+
 dojo.window.getBox = function(){
        // summary:
        //              Returns the dimensions and scroll position of the viewable area of a browser window
@@ -62,7 +64,9 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
                        return;
                }
                var backCompat = doc.compatMode == 'BackCompat',
-                       clientAreaRoot = backCompat? body : html,
+                       clientAreaRoot = (isIE >= 9 && node.ownerDocument.parentWindow.frameElement)
+                               ? ((html.clientHeight > 0 && html.clientWidth > 0 && (body.clientHeight == 0 || body.clientWidth == 0 || body.clientHeight > html.clientHeight || body.clientWidth > html.clientWidth)) ? html : body)
+                               : (backCompat ? body : html),
                        scrollRoot = isWK ? body : clientAreaRoot,
                        rootWidth = clientAreaRoot.clientWidth,
                        rootHeight = clientAreaRoot.clientHeight,
@@ -87,14 +91,11 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
                        }else{
                                var pb = dojo._getPadBorderExtents(el);
                                elPos.w -= pb.w; elPos.h -= pb.h; elPos.x += pb.l; elPos.y += pb.t;
-                       }
-       
-                       if(el != scrollRoot){ // body, html sizes already have the scrollbar removed
                                var clientSize = el.clientWidth,
                                        scrollBarSize = elPos.w - clientSize;
                                if(clientSize > 0 && scrollBarSize > 0){
                                        elPos.w = clientSize;
-                                       if(isIE && rtl){ elPos.x += scrollBarSize; }
+                                       elPos.x += (rtl && (isIE || el.clientLeft > pb.l/*Chrome*/)) ? scrollBarSize : 0;
                                }
                                clientSize = el.clientHeight;
                                scrollBarSize = elPos.h - clientSize;
@@ -123,8 +124,9 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
                                bot = t + nodePos.h - elPos.h; // beyond bottom: > 0
                        if(r * l > 0){
                                var s = Math[l < 0? "max" : "min"](l, r);
+                               if(rtl && ((isIE == 8 && !backCompat) || isIE >= 9)){ s = -s; }
                                nodePos.x += el.scrollLeft;
-                               el.scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s;
+                               el.scrollLeft += s;
                                nodePos.x -= el.scrollLeft;
                        }
                        if(bot * t > 0){
@@ -133,7 +135,7 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
                                nodePos.y -= el.scrollTop;
                        }
                        el = (el != scrollRoot) && !fixedPos && el.parentNode;
-               }       
+               }
        }catch(error){
                console.error('scrollIntoView: ' + error);
                node.scrollIntoView(false);